Name: series-workflow5tjgs Phase: Succeeded StartedAt: 2026-09-11 08:53:07 +0000 UTC FinishedAt: 2026-09-11 12:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[0] Phase: Succeeded StartedAt: 2026-09-11 08:53:07 +0000 UTC FinishedAt: 2026-09-11 08:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 08:53:07 +0000 UTC FinishedAt: 2026-09-11 08:56:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "d38877b7-4aaf-40ad-938d-9ca42ee61495" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "prepare_func_exit", "destroy_dynptrs_on_func_exit", "destroy_if_dynptr_stack_slot" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O3ByZXBhcmVfZnVuY19leGl0JiMzNDssCiAgICAmIzM0O2Rlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7ZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYnkgYWRkaW5nIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KClgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCB0byBlbnN1cmUgdGhhdCBkeW5wdHJzIGFsbG9jYXRlZCBvbiBhIGNhbGxlZSYjMzk7cyBzdGFjayBmcmFtZSBhcmUgcHJvcGVybHkgZGVzdHJ1Y3RlZCBhbmQgdGhlaXIgZGVyaXZlZCBzbGljZXMgaW52YWxpZGF0ZWQgd2hlbiB0aGUgc3VicHJvZ3JhbSByZXR1cm5zLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLlxuLSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBkZXRlY3QgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2dpYyBidWdzIGluIGtlcm5lbC92ZXJpZmllciB2ZXJpZmljYXRpb24uXG5cblRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2g6XG4xLiBPcGVyYXRlIHB1cmVseSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBjb21waWxlLXRpbWUgc3RhdGljIGFuYWx5c2lzIHN0YXRlIG1hY2hpbmUgKGBicGZfZnVuY19zdGF0ZWApLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlgLCBgZXJyYCkgYW5kIHN0YXRlIGFjY2Vzc2VzIChgY2FsbGVlLVx1MDAzZXN0YWNrW2ldYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBib3VuZGVkIGJ5IGBjYWxsZWUtXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFYC5cbjMuIERvIG5vdCBhbGxvY2F0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGludHJvZHVjaW5nIGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQgdG8gdGVhciBkb3duIGNhbGxlZS1sb2NhbCBkeW5wdHJzIGFuZCBpbnZhbGlkYXRlIGRlcml2ZWQgc2xpY2VzIHdoZW4gZXhpdGluZyBzdWJwcm9ncmFtcyBpbiBwcmVwYXJlX2Z1bmNfZXhpdC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSB2ZXJpZmljYXRpb24gbG9naWMgZXhlY3V0ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiB2aWEgc3lzX2JwZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlhN2VmNTdiMTQ1ZjljYTQxM2JhODZiZGU1N2M2NGQ1OTQ5Mjg3YzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo1NTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmM5YzFkZjI3YjI2OTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTgwMCw2ICYjNDM7ODAwLDMxIEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuIFx0cmV0dXJuIHJlZl9jbnQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuJiM0MztcdFx0ICAgICFzbG90LVx1MDAzZXNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSBjYWxsZWUtbG9jYWwgZHlucHRyIGlzIGRlc3Ryb3llZCB3aGVuIGl0cyBzdGFjayBmcmFtZSBnb2VzXG4mIzQzO1x0XHQgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3RcbiYjNDM7XHRcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiAmIzQzOzEwNDI0LDkgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4gXHR9XG4gXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbiYjNDM7XHRlcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuIFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4gXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG5pbmRleCA2ZGJkMTQ4NzM0M2MwLi4xMjJlY2I3ZTk4ZTJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmhcJiMzNDtcbiBcbkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZClcbiBcdFx0dGVzdF9pbmNvbXBsX29wcygpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lKTtcbiYjNDM7XHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyMTdmNGM0YzAwYzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xuQEAgLTAsMCAmIzQzOzEsNzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfZXhwZXJpbWVudGFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2NvbW1vbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgcHJvdG87XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2lubGluZSBzdHJ1Y3QgZXRoaGRyICpzbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsIFx1MDAyNnB0cik7XG4mIzQzO1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhoZHIgKmhkcjtcbiYjNDM7XG4mIzQzO1x0aGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpO1xuJiM0MztcdGlmICghaGRyKSB7XG4mIzQzO1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbiYjNDM7XHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xuJiM0MztcdHByb3RvID0gaGRyLVx1MDAzZWhfcHJvdG87XG4mIzQzO1xuJiM0MztcdGJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO19fYXV4aWxpYXJ5XG4mIzQzO3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbiYjNDM7X19hdXhpbGlhcnlcbiYjNDM7aW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO19fYXV4aWxpYXJ5XG4mIzQzO3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzdHJ1Y3Rfb3BzXCYjMzQ7KVxuJiM0MztfX2F1eGlsaWFyeVxuJiM0Mzt2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbiYjNDM7c3RydWN0IFFkaXNjX29wcyB0ZXN0ID0ge1xuJiM0MztcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuJiM0MztcdC5kZXF1ZXVlICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2RlcXVldWUsXG4mIzQzO1x0LmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCxcbiYjNDM7XHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbiYjNDM7XHQuZGVzdHJveSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXN0cm95LFxuJiM0MztcdC5pZCAgICAgICAgPSBcJiMzNDticGZfcWRpc2NfdGVzdFwmIzM0OyxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi5mNTdlNjE2MmRiZjViIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtMTI3LDcgJiM0MzsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiBcbiAvKiBBbnkgZHlucHRyIGluaXRpYWxpemVkIHdpdGhpbiBhIGNhbGxiYWNrIG11c3QgaGF2ZSBicGZfZHlucHRyX3B1dCBjYWxsZWQgKi9cbiBTRUMoXCYjMzQ7P3Jhd190cFwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCYjMzQ7KVxuIGludCByaW5nYnVmX21pc3NpbmdfcmVsZWFzZV9jYWxsYmFjayh2b2lkICpjdHgpXG4ge1xuIFx0YnBmX2xvb3AoMTAsIG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbiwgTlVMTCwgMCk7XG5AQCAtMTg5Miw2ICYjNDM7MTg5MiwxMDEgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcbiYjNDM7XG4mIzQzO1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbiYjNDM7XHQqZGF0YSA9IGJwZl9keW5wdHJfZGF0YShcdTAwMjZjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIGNhbGxlcl9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcbiYjNDM7XG4mIzQzO1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEocHRyLCAwLCBzaXplb2YodmFsKSk7XG4mIzQzO1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCByZXNlcnZlX2R5bnB0cl9pbl9zdWJwcm9nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQSBzdWJwcm9ncmFtIGNhbm5vdCBsb3NlIHRoZSBsYXN0IGR5bnB0ciB0aGF0IGNhbiByZWxlYXNlIGEgcmVzb3VyY2UuICovXG4mIzQzO1NFQyhcJiMzNDs/cmF3X3RwXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IG92ZXJ3cml0ZSByZWZlcmVuY2VkIGR5bnB0clwmIzM0OylcbiYjNDM7aW50IHJlZmVyZW5jZWRfZHlucHRyX2xvc3Rfb25fc3VicHJvZ19yZXR1cm4odm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmVzZXJ2ZV9keW5wdHJfaW5fc3VicHJvZygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRGVzdHJveWluZyBhIGxvY2FsIGNsb25lIG9uIHJldHVybiBtdXN0IG5vdCBpbnZhbGlkYXRlIGEgc2xpY2Ugd2hvc2VcbiYjNDM7ICogc291cmNlIGR5bnB0ciBiZWxvbmdzIHRvIHRoZSBjYWxsZXIuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbiYjNDM7XHRpbnQgKmRhdGEgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4mIzQzO1x0Y2FsbGVyX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAoZGF0YSlcbiYjNDM7XHRcdCpkYXRhID0gMTIzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIGEgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZSBpcyBpbnZhbGlkIG9uY2UgdGhlIGxvY2FsXG4mIzQzOyAqIGNsb25lIGlzIGRlc3Ryb3llZCBvbiByZXR1cm4uXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1x0aW50ICpkYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuJiM0MztcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAoZGF0YSlcbiYjNDM7XHRcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbiYjNDM7XHRcdCpkYXRhID0gMTIzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZFxuJiM0MzsgKiBmcm9tIGEgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDs/cmF3X3RwXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTtcJiMzNDspXG4mIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9yZWxlYXNlX2ludmFsaWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuJiM0MztcdGludCAqZGF0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbiYjNDM7XHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4mIzQzO1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuJiM0MztcdGlmIChkYXRhKVxuJiM0MztcdFx0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xuJiM0MztcdFx0KmRhdGEgPSAxMjM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXNcbiAgKiBvZiBpdHMgcGFyZW50XG4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7ZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgaW50cm9kdWNpbmcgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCB0byB0ZWFyIGRvd24gY2FsbGVlLWxvY2FsIGR5bnB0cnMgYW5kIGludmFsaWRhdGUgZGVyaXZlZCBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIGluIHByZXBhcmVfZnVuY19leGl0LiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIHZlcmlmaWNhdGlvbiBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIHZpYSBzeXNfYnBmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWE3ZWY1N2IxNDVmOWNhNDEzYmE4NmJkZTU3YzY0ZDU5NDkyODdjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjU1OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDcyYTNmNTk5OGRkMjcuLmM5YzFkZjI3YjI2OTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTgwMCw2ICYjNDM7ODAwLDMxIEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKQogCXJldHVybiByZWZfY250OwogfQogCiYjNDM7c3RhdGljIGludCBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCQlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSkKJiM0Mzt7CiYjNDM7CWludCBpLCBlcnI7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjYWxsZWUtJmd0O2FsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSAmYW1wO2NhbGxlZS0mZ3Q7c3RhY2tbaV07CiYjNDM7CiYjNDM7CQlpZiAoc2xvdC0mZ3Q7c2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fAomIzQzOwkJICAgICFzbG90LSZndDtzcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXMKJiM0MzsJCSAqIGF3YXkuIEFwcGx5IHRoZSBub3JtYWwgc3RhY2stc2xvdCB0ZWFyZG93biBzbyByZWZlcmVuY2VzIGNhbm5vdAomIzQzOwkJICogYmUgbG9zdCBhbmQgc2xpY2VzIGRlcml2ZWQgZnJvbSB0aGF0IGR5bnB0ciBhcmUgaW52YWxpZGF0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBjYWxsZWUsIGkpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSkKIHsKQEAgLTEwMzk5LDYgJiM0MzsxMDQyNCw5IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeCkKIAkJcHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLSZndDtmcmFtZW5vLCB0cnVlKTsKIAl9CiAJYWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7CiYjNDM7CWVyciA9IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKIAkvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmcKIAkgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi8KIAlmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKaW5kZXggNmRiZDE0ODczNDNjMC4uMTIyZWNiN2U5OGUyYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2Uuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lLnNrZWwuaCYjMzQ7CiAKQEAgLTIzMCw2ICYjNDM7MjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKQogCQl0ZXN0X2luY29tcGxfb3BzKCk7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZSk7CiYjNDM7CVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uODIxN2Y0YzRjMDBjNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYwpAQCAtMCwwICYjNDM7MSw3NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfcWRpc2NfY29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO2ludCBwcm90bzsKJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSBzdHJ1Y3QgZXRoaGRyICpzbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsICZhbXA7cHRyKTsKJiM0MzsJcmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoJmFtcDtwdHIsIDAsIE5VTEwsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhoZHIgKmhkcjsKJiM0MzsKJiM0MzsJaGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpOwomIzQzOwlpZiAoIWhkcikgewomIzQzOwkJYnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7CiYjNDM7CQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiB0aGlzIHNob3VsZCBmYWlsICovCiYjNDM7CXByb3RvID0gaGRyLSZndDtoX3Byb3RvOwomIzQzOwomIzQzOwlicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2F1eGlsaWFyeQomIzQzO3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaCkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKJiM0MzsJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7dm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9yZXNldCwgc3RydWN0IFFkaXNjICpzY2gpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0Mzt2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMmIzM0OykKJiM0MztzdHJ1Y3QgUWRpc2Nfb3BzIHRlc3QgPSB7CiYjNDM7CS5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLAomIzQzOwkuZGVxdWV1ZSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLAomIzQzOwkuaW5pdCAgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9pbml0LAomIzQzOwkucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCwKJiM0MzsJLmRlc3Ryb3kgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwKJiM0MzsJLmlkICAgICAgICA9ICYjMzQ7YnBmX3FkaXNjX3Rlc3QmIzM0OywKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwppbmRleCAxY2Q2MWQ3MmMxNjZmLi5mNTdlNjE2MmRiZjViIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwpAQCAtMTI3LDcgJiM0MzsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSkKIAogLyogQW55IGR5bnB0ciBpbml0aWFsaXplZCB3aXRoaW4gYSBjYWxsYmFjayBtdXN0IGhhdmUgYnBmX2R5bnB0cl9wdXQgY2FsbGVkICovCiBTRUMoJiMzNDs/cmF3X3RwJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCBvdmVyd3JpdGUgcmVmZXJlbmNlZCBkeW5wdHImIzM0OykKIGludCByaW5nYnVmX21pc3NpbmdfcmVsZWFzZV9jYWxsYmFjayh2b2lkICpjdHgpCiB7CiAJYnBmX2xvb3AoMTAsIG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbiwgTlVMTCwgMCk7CkBAIC0xODkyLDYgJiM0MzsxODkyLDEwMSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9jbG9uZShwdHIsICZhbXA7Y2xvbmUpOwomIzQzOwkqZGF0YSA9IGJwZl9keW5wdHJfZGF0YSgmYW1wO2Nsb25lLCAwLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2FsbGVyX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIGNsb25lOwomIzQzOwomIzQzOwkqZGF0YSA9IGJwZl9keW5wdHJfZGF0YShwdHIsIDAsIHNpemVvZih2YWwpKTsKJiM0MzsJYnBmX2R5bnB0cl9jbG9uZShwdHIsICZhbXA7Y2xvbmUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJlc2VydmVfZHlucHRyX2luX3N1YnByb2codm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBzdWJwcm9ncmFtIGNhbm5vdCBsb3NlIHRoZSBsYXN0IGR5bnB0ciB0aGF0IGNhbiByZWxlYXNlIGEgcmVzb3VyY2UuICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCBvdmVyd3JpdGUgcmVmZXJlbmNlZCBkeW5wdHImIzM0OykKJiM0MztpbnQgcmVmZXJlbmNlZF9keW5wdHJfbG9zdF9vbl9zdWJwcm9nX3JldHVybih2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXNlcnZlX2R5bnB0cl9pbl9zdWJwcm9nKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERlc3Ryb3lpbmcgYSBsb2NhbCBjbG9uZSBvbiByZXR1cm4gbXVzdCBub3QgaW52YWxpZGF0ZSBhIHNsaWNlIHdob3NlCiYjNDM7ICogc291cmNlIGR5bnB0ciBiZWxvbmdzIHRvIHRoZSBjYWxsZXIuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2FsbGVyX3NsaWNlX2luX3N1YnByb2coJmFtcDtwdHIsICZhbXA7ZGF0YSk7CiYjNDM7CWlmIChkYXRhKQomIzQzOwkJKmRhdGEgPSAxMjM7CiYjNDM7CWJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoJmFtcDtwdHIsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIHNsaWNlIHRoYXQgZXNjYXBlcyBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUgaXMgaW52YWxpZCBvbmNlIHRoZSBsb2NhbAomIzQzOyAqIGNsb25lIGlzIGRlc3Ryb3llZCBvbiByZXR1cm4uCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCS8qIHRoaXMgc2hvdWxkIGZhaWwgKi8KJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkCiYjNDM7ICogZnJvbSBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3JlbGVhc2VfaW52YWxpZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CWludCAqZGF0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKCZhbXA7cmluZ2J1ZiwgdmFsLCAwLCAmYW1wO3B0cik7CiYjNDM7CWNsb25lX3NsaWNlX2luX3N1YnByb2coJmFtcDtwdHIsICZhbXA7ZGF0YSk7CiYjNDM7CWJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoJmFtcDtwdHIsIDApOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCS8qIHRoaXMgc2hvdWxkIGZhaWwgKi8KJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzCiAgKiBvZiBpdHMgcGFyZW50CiAgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGFkZGl0aW9uIG9mIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YCBhbmQgaXRzIGludGVncmF0aW9uIGludG8gYHByZXBhcmVfZnVuY19leGl0YC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3Q7IGFueXRoaW5nIGRlYWxpbmcgd2l0aCBkeW5hbWljIHBvaW50ZXIgbWFuYWdlbWVudCBpbiB0aGUgdmVyaWZpZXIgaXMgd29ydGggYSBjbG9zZSBsb29rLiBNZW1vcnkgc2FmZXR5LCBhcyBhbHdheXMsIGlzIHBhcmFtb3VudCBpbiB0aGlzIGFyZWEuIFdlIG5lZWQgdG8gYmUgYWlydGlnaHQuCgpNeSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGZpcmUgdXAgbXkgdG9vbHMg4oCTIHJlYWQtZmlsZSBvciBncmVwcGVyIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNoYW5nZS4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBwcm9ibGVtIGlzIHRoaXMgZnVuY3Rpb24gYWRkcmVzc2luZywgYW5kIGhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBleGlzdGluZyB2ZXJpZmllciBsb2dpYz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZXhpc3RpbmcgQlBGIHByb2dyYW1zPwoKVGhlIHByZXNlbmNlIG9mIG5ldyB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AgaXMgYSBnb29kIHNpZ24uIEl0IHN1Z2dlc3RzIGEgZm9jdXNlZCBlZmZvcnQgb24gdmFsaWRhdGluZyB0aGUgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRob3NlIHRlc3RzIHRob3JvdWdobHkgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIGFkZXF1YXRlbHkgY292ZXJpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhpcyB3aWxsIGJlIG15IG5leHQgc3RlcCBhZnRlciBpbnNwZWN0aW5nIHRoZSBjb3JlIGNvZGUgY2hhbmdlcy4gVmVyaWZpY2F0aW9uIGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTc4ND1zdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjgwMzpzdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQtXHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1OT1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDI2LVx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0Mjc6XHRlcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQyOC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHByb2Nlc3NpbmcgdGhpcyBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBMb2dpYzogS2V5IFNlY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEJQRiB2ZXJpZmllciBjb2RlIGFnYWluLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhIGNvdXBsZSBvZiBjcml0aWNhbCBzZWN0aW9ucy4gRmlyc3QsIGxpbmVzIDc5MC04NDAuIEkga25vdyB0aGlzIGFyZWEgcHJvYmFibHkgZGVhbHMgd2l0aOKApiAqY2hlY2tzIG5vdGVzKiDigKZsaWtlbHkgc29tZSBhc3BlY3Qgb2YgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgb3IgcGVyaGFwcyBjb25zdHJhaW50IHByb3BhZ2F0aW9uLCBnaXZlbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSXQgY291bGQgYWxzbyBpbnZvbHZlIGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24tc2V0IGNoZWNrIG9yIHBvdGVudGlhbGx5IGFuIGVhcmx5IGVycm9yLXBhdGggaGFuZGxpbmcgcm91dGluZSBmb3IgYSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIHNlcXVlbmNlLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXIgbGl2ZW5lc3Mgb3IgYWRkcmVzcyBzcGFjZSBtYXBwaW5nLCBhc3N1bWluZyB0aGlzIGNvZGUgaXMgc3RpbGwgYWJvdXQgbWVtb3J5IGJvdW5kYXJpZXMgZm9yIGRpcmVjdCBwYWNrZXQgYWNjZXNzLgoKTmV4dCwgSeKAmWxsIG5lZWQgdG8gc3dpdGNoIGdlYXJzLCBhbmQgcXVpY2tseSByZXZpZXcgbGluZXMgMTA0MjAtMTA0NDAuIEFoLCB0aGlzIGxvb2tzIGxpa2UgaXQgY291bGQgYmUgd2l0aGluIGEgbXVjaCBsYXJnZXIgdmVyaWZpY2F0aW9uIHBoYXNlLiBHaXZlbiB0aGUgbGluZSBudW1iZXIsIEkmIzM5O2QgYmV0IHRoaXMgaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgZGVlcGVyIHdpdGhpbiB0aGUgdmVyaWZpZXImIzM5O3MgY29yZSBsb2dpYy4gTWF5YmUgaXQmIzM5O3MgY2hlY2tpbmcgZm9yIGxvb3AgaW52YXJpYW50cyBvciBtYXliZSBpdCYjMzk7cyBkb2luZyBhIGZpbmFsIGFuYWx5c2lzIG9mIGNvbnRyb2wgZmxvdyBwYXRocyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBwcm9ncmFtIHNhZmUuIFBlcmhhcHMgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgdHJpY2t5IGVkZ2UgY2FzZSwgbGlrZSB2YWxpZGF0aW5nIGluZGlyZWN0IGp1bXBzIG9yIG1lbW9yeSBhY2Nlc3NlcyB3aXRoaW4gbG9vcHMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSB0d28gY2h1bmtzIGFuZCBzZWUgd2hlcmUgdGhleSBnZXQgbWUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmZWVsIGZvciB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyB0aGF0IG5lZWQgaW1wcm92ZW1lbnQgb3Igb3B0aW1pemF0aW9uIGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBwYXRjaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTU6XHRcdFx0XHRjb250aW51ZTtcbiA3OTY6XHRcdFx0aWYgKHN0YWNrLVx1MDAzZXNwaWxsZWRfcHRyLnBhcmVudF9pZCA9PSB2X3BhcmVudF9pZClcbiA3OTc6XHRcdFx0XHRyZWZfY250JiM0MzsmIzQzOztcbiA3OTg6XHRcdH0pKTtcbiA3OTk6XHRcbiA4MDA6XHRcdHJldHVybiByZWZfY250O1xuIDgwMTpcdH1cbiA4MDI6XHRcbiA4MDM6XHRzdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA4MDQ6XHRcdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXG4gODA1Olx0e1xuIDgwNjpcdFx0aW50IGksIGVycjtcbiA4MDc6XHRcbiA4MDg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4gODA5Olx0XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4gODEwOlx0XG4gODExOlx0XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcbiA4MTI6XHRcdFx0ICAgICFzbG90LVx1MDAzZXNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuIDgxMzpcdFx0XHRcdGNvbnRpbnVlO1xuIDgxNDpcdFxuIDgxNTpcdFx0XHQvKlxuIDgxNjpcdFx0XHQgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXNcbiA4MTc6XHRcdFx0ICogYXdheS4gQXBwbHkgdGhlIG5vcm1hbCBzdGFjay1zbG90IHRlYXJkb3duIHNvIHJlZmVyZW5jZXMgY2Fubm90XG4gODE4Olx0XHRcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxuIDgxOTpcdFx0XHQgKi9cbiA4MjA6XHRcdFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XG4gODIxOlx0XHRcdGlmIChlcnIpXG4gODIyOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA4MjM6XHRcdH1cbiA4MjQ6XHRcbiA4MjU6XHRcdHJldHVybiAwO1xuIDgyNjpcdH1cbiA4Mjc6XHRcbiA4Mjg6XHRzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA4Mjk6XHRcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiA4MzA6XHR7XG4gODMxOlx0XHRpbnQgZXJyID0gMDtcbiA4MzI6XHRcbiA4MzM6XHRcdC8qIFdlIGFsd2F5cyBlbnN1cmUgdGhhdCBTVEFDS19EWU5QVFIgaXMgbmV2ZXIgc2V0IHBhcnRpYWxseSxcbiA4MzQ6XHRcdCAqIGhlbmNlIGp1c3QgY2hlY2tpbmcgZm9yIHNsb3RfdHlwZVswXSBpcyBlbm91Z2guIFRoaXMgaXNcbiA4MzU6XHRcdCAqIGRpZmZlcmVudCBmb3IgU1RBQ0tfU1BJTEwsIHdoZXJlIGl0IG1heSBiZSBvbmx5IHNldCBmb3JcbiA4MzY6XHRcdCAqIDEgYnl0ZSwgc28gY29kZSBoYXMgdG8gdXNlIGlzX3NwaWxsZWRfcmVnLlxuIDgzNzpcdFx0ICovXG4gODM4Olx0XHRpZiAoc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSKVxuIDgzOTpcdFx0XHRyZXR1cm4gMDtcbiA4NDA6XHRcbiA4NDE6XHRcdC8qIFJlcG9zaXRpb24gc3BpIHRvIGZpcnN0IHNsb3QgKi9cbiA4NDI6XHRcdGlmICghc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdClcbiA4NDM6XHRcdFx0c3BpID0gc3BpICYjNDM7IDE7XG4gODQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBhIENvbXBsZXggQ29kZWJhc2UqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIGZ1bmN0aW9uIGV4aXRzLCBwYXJ0aWN1bGFybHkgdGhlIGBwcmVwYXJlX2Z1bmNfZXhpdGAgZnVuY3Rpb24uIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGlzIGNvZGViYXNlLCBteSBpbnN0aW5jdCBpcyB0byBsb29rIGFyb3VuZCBsaW5lIDEwNDIwLiBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCBJJiMzOTttIGN1cnJlbnRseSB3b3JraW5nIG9uLCBhbmQgbGlrZWx5IHdoZXJlIEkgd2lsbCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhpdCBwcm9jZWR1cmUgdG8gdmVyaWZ5IHRoZSBiZWhhdmlvciBJIGFtIGV4cGVjdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDE1Olx0XHRpZiAoaW5fY2FsbGJhY2tfZm4pXG4xMDQxNjpcdFx0XHQqaW5zbl9pZHggPSBjYWxsZWUtXHUwMDNlY2FsbHNpdGU7XG4xMDQxNzpcdFx0ZWxzZVxuMTA0MTg6XHRcdFx0Kmluc25faWR4ID0gY2FsbGVlLVx1MDAzZWNhbGxzaXRlICYjNDM7IDE7XG4xMDQxOTpcdFxuMTA0MjA6XHRcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMKSB7XG4xMDQyMTpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cmV0dXJuaW5nIGZyb20gY2FsbGVlOlxcblwmIzM0Oyk7XG4xMDQyMjpcdFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZWUtXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4xMDQyMzpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7dG8gY2FsbGVyIGF0ICVkOlxcblwmIzM0OywgKmluc25faWR4KTtcbjEwNDI0Olx0XHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbjEwNDI1Olx0XHR9XG4xMDQyNjpcdFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG4xMDQyNzpcdFx0ZXJyID0gZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4xMDQyODpcdFx0aWYgKGVycilcbjEwNDI5Olx0XHRcdHJldHVybiBlcnI7XG4xMDQzMDpcdFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4xMDQzMTpcdFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4xMDQzMjpcdFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG4xMDQzMzpcdFx0c3RhdGUtXHUwMDNlZnJhbWVbc3RhdGUtXHUwMDNlY3VyZnJhbWUtLV0gPSBOVUxMO1xuMTA0MzQ6XHRcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlcik7XG4xMDQzNTpcdFxuMTA0MzY6XHRcdC8qIGZvciBjYWxsYmFja3Mgd2lkZW4gaW1wcmVjaXNlIHNjYWxhcnMgdG8gbWFrZSBwcm9ncmFtcyBsaWtlIGJlbG93IHZlcmlmeTpcbjEwNDM3Olx0XHQgKlxuMTA0Mzg6XHRcdCAqICAgc3RydWN0IGN0eCB7IGludCBpOyB9XG4xMDQzOTpcdFx0ICogICB2b2lkIGNiKGludCBpZHgsIHN0cnVjdCBjdHggKmN0eCkgeyBjdHgtXHUwMDNlaSYjNDM7JiM0Mzs7IC4uLiB9XG4xMDQ0MDpcdFx0ICogICAuLi5cbjEwNDQxOlx0XHQgKiAgIHN0cnVjdCBjdHggPSB7IC5pID0gMDsgfVxuMTA0NDI6XHRcdCAqICAgYnBmX2xvb3AoMTAwLCBjYiwgXHUwMDI2Y3R4LCAwKTtcbjEwNDQzOlx0XHQgKlxuMTA0NDQ6XHRcdCAqIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IGlzIGRvbmUgaW4gcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGZvciBvcGVuXG4xMDQ0NTpcdFx0ICogY29kZWQgaXRlcmF0b3JzLlxuMTA0NDY6XHRcdCAqL1xuMTA0NDc6XHRcdHByZXZfc3QgPSBpbl9jYWxsYmFja19mbiA/IGZpbmRfcHJldl9lbnRyeShlbnYsIHN0YXRlLCAqaW5zbl9pZHgpIDogTlVMTDtcbjEwNDQ4Olx0XHRpZiAocHJldl9zdCkge1xuMTA0NDk6XHRcdFx0ZXJyID0gd2lkZW5faW1wcmVjaXNlX3NjYWxhcnMoZW52LCBwcmV2X3N0LCBzdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiB2ZXJpZmllciBsb2dpYywgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhpcyBhcyBpbXBvcnRhbnQuIFRoZSB2ZXJpZmllciBpcyBhIGNvcmUgcGllY2Ugb2YgdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCB3ZSBhbGwga25vdyBob3cgaGVhdmlseSBzeXprYWxsZXIgdGFyZ2V0cyB0aGF0IGFyZWEgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCB0aGUgYEJQRl9QUk9HX0xPQURgIGNvbW1hbmQuIFNvLCB0aGUgcXVlc3Rpb24gYXJpc2VzIOKAkyBpcyB0aGlzIGNoYW5nZSBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseSwgeWVzLgoKVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBtb2RpZnkgY29kZSByZWxhdGVkIHRvIHN1YnByb2dyYW0gcmV0dXJucyBhbmQgZnVuY3Rpb24gZXhpdHMg4oCTIGVzc2VudGlhbGx5LCB3aGVyZSB0aGUgYEJQRl9FWElUYCBpbnN0cnVjdGlvbiBhbmQgdGhlIGBwcmVwYXJlX2Z1bmNfZXhpdGAgZnVuY3Rpb24gY29tZSBpbnRvIHBsYXkg4oCTIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlLiBUaGlzIHNwZWNpZmljIGFkZGl0aW9uIGRlYWxzIHdpdGggdGVhcmRvd24gbG9naWMgZm9yIHN0YWNrIGR5bmFtaWMgcG9pbnRlcnMgKGBkeW5wdHJzYCkgb24gZnVuY3Rpb24gZXhpdCwgY2FsbGluZyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgYW5kIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YC4gVGhhdCBzbWVsbHMgbGlrZSBhIG5ldyBhdHRhY2sgc3VyZmFjZSwgb3IgYXQgbGVhc3QgYSBwbGFjZSB3aGVyZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBCUEYgc3Vic3lzdGVtIGFuZCB0aGUgYEJQRl9TWVNDQUxMYCBvcHRpb24gYXJlIGVuYWJsZWQuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgaW4gdGhlIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIEtjb25maWcgZmlsZSB0byBlbnN1cmUgdGhlIHNwZWNpZmljIGNvZGUgcGF0aHMgYXJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZlcmlmaWVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzdHJ1Y3R1cmUgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdHdvIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBmb3IgYSBCUEYtcmVsYXRlZCBzZXR0aW5nLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7bGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIFRocm91Z2ggS2NvbmZpZ3M6IEJQRl9TWVNDQUxMIEh1bnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBjb21tb24gdGFzaywgYnV0IGl04oCZcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBmZWF0dXJlIGxpa2UgQlBGIHN5c2NhbGwgc3VwcG9ydCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBhY3Jvc3MgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGRlcGVuZGVuY2llcywgYW55IGRlZmF1bHQgdmFsdWVzLCBhbmQgaW1wb3J0YW50bHksIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBpcyAqdXNlZCouIEkgY2FuJiMzOTt0IGFmZm9yZCB0byB3YXN0ZSB0aW1lIG1hbnVhbGx5IGdyZXAtaW5nIHRocm91Z2ggZXZlcnkgS2NvbmZpZyBmaWxlOyBJIG5lZWQgYSB0YXJnZXRlZCBhbmQgZWZmaWNpZW50IGFwcHJvYWNoLiBMZXTigJlzIGdldCB0byBpdC4gVGltZSB0byBleHBsb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEJQRiBLY29uZmlnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIEJQRiBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjcuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhlIGNvcmUgQlBGIGZlYXR1cmUgZW5hYmxlbWVudCBmbGFnLCBvciBtYXliZSBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgYSByZWxhdGVkIG9wdGlvbiB0aGF0IEkgd2FudCB0byBkb3VibGUtY2hlY2suIENvdWxkIGJlIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aWVkIHRvIGEgc3BlY2lmaWMgQlBGIGhlbHBlciB2ZXJzaW9uLiBJIHN1c3BlY3QgbGluZSAyNyB3aWxsIGxpa2VseSBsZWFkIG1lIHRvIHRoZSBtYWluIGVudHJ5IHBvaW50IG9yIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJIGFtIGhvcGluZyB0byBnZXQgdG8gdGhlIHJvb3QgY2F1c2Ugb2YgYW4gaXNzdWUgSSYjMzk7bSB3b3JraW5nIHRocm91Z2guIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gcHJvdmlkZSB0aGUgYmFzZSBjb25maWd1cmF0aW9uIHRoYXQgYWxsIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBpcyByZWxpYW50IG9uLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHRoZXJlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzIyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgQlBGIHZlcmlmaWVyIGNvZGUgYW5kIHNlZSB3aGVyZSB3ZSYjMzk7cmUgYXQgd2l0aCB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgZm9jdXNpbmcgb24gdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgb3Igc2lnbmlmaWNhbnRseSBhbHRlcmVkLiBUaGUga2V5IHN5bWJvbHMgc2VlbSB0byBiZSBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAsIGBwcmVwYXJlX2Z1bmNfZXhpdGAsIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCwgYW5kIGBicGZfY2hlY2tgIChvciBwb3RlbnRpYWxseSBgZG9fY2hlY2tgIG9yIGBjaGVja19jZmdgLCBkZXBlbmRpbmcgb24gdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uKS4KClJpZ2h0LCBzbyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgaXMgc3RhdGljOyBnb29kLCB0aGF0IGtlZXBzIHRoaW5ncyByZWxhdGl2ZWx5IGNvbnRhaW5lZC4gYHByZXBhcmVfZnVuY19leGl0YCBpcyBhbHNvIHN0YXRpYywgYW5kIGl0IGxvb2tzIGxpa2UgaXTigJlzIGNhbGxlZCB3aXRoaW4gYGRvX2NoZWNrYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gbm90ZSwgYW5kIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCBpcyBhbHNvIHN0YXRpYyBhbmQgaXMgYWxzbyBjYWxsZWQgd2hlbiBzdGFjayBzbG90cyBhcmUgb3ZlcndyaXR0ZW4uIE9rYXksIHRoYXQmIzM5O3Mgc29saWRpZnlpbmcgdGhlIHBpY3R1cmUgYSBiaXQuIE5vdywgd2hhdCBhYm91dCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFyZSB0aGVyZSBhbnkgZmVhdHVyZS1zcGVjaWZpYyBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIHRoaW5ncz8KCk5vdywgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBpbiBwcmFjdGljZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBwcmVwYXJlX2Z1bmNfZXhpdGAgYW5kIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgYWRkaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1MT1zdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM1OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM1OTpzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjAte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDg0MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNDMtXHRcdFx0ICogZnJhbWUuIEEgY2FsbGJhY2sgZnJhbWUgY2Fubm90IGJlIGxlZnQgdGhhdCB3YXkgYmVjYXVzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzQ0Olx0XHRcdCAqIHByZXBhcmVfZnVuY19leGl0KCkgd291bGQgYXBwbHkgaXRzIHJldHVybiBjb250cmFjdCB0byB0aGVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM0NS1cdFx0XHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNTctXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNTg6XHRcdFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzU5LVx0XHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzE2PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczOTYtXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Mzk3Olx0XHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczOTgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTAzPXN0YXRpYyBpbnQgcHJvY2Vzc19icGZfZXhpdF9mdWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTA5LVx0LyogV2UgbXVzdCBkbyBjaGVja19yZWZlcmVuY2VfbGVhayBoZXJlIGJlZm9yZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTEwOlx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExMS1cdCAqIHN0YXRlLVx1MDAzZWN1cmZyYW1lIFx1MDAzZSAwLCBpdCBtYXkgYmUgYSBjYWxsYmFjayBmdW5jdGlvbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMjI6XHQvKiBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXBhcmVfZnVuY19leGl0IHdoaWNoIGlzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjMtXHQgKiBiZWluZyBza2lwcGVkIGlzIHRoYXQgaXQgZnJlZXMgYnBmX2Z1bmNfc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTM1LVx0XHQvKiBleGl0IGZyb20gbmVzdGVkIGZ1bmN0aW9uICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMzY6XHRcdGVyciA9IHByZXBhcmVfZnVuY19leGl0KGVudiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEzNy1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgQlBGIHZlcmlmaWVyLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBwaW4gZG93biBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludC4gUmlnaHQsIHRoYXQmIzM5O3MgYGJwZl9jaGVja2AgLSBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgbG9jYXRlZCBzcXVhcmVseSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTm93LCBteSBuZXh0IG1vdmUgaXMgb2J2aW91czogSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGJwZl9jaGVja2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZywgaG93IGl0IG9yY2hlc3RyYXRlcyB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGFuZCB3aGF0IGluaXRpYWwgY2hlY2tzIGl0IHBlcmZvcm1zLiBObyBwb2ludCBpbiB3YXN0aW5nIHRpbWU7IGxldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24gaXRzZWxmIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnBmX2NoZWNrXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTIxMDQzPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE2MDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE2MS1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgaW4gYHZlcmlmaWVyLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgdXNpbmcgYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgIGFuZCByZWxhdGVkIHN5bWJvbHMgd2l0aGluIHRoZSB2ZXJpZmllci4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiwgb3IgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCBpdCBpbiBgdmVyaWZpZXIuY2AuIE15IGZvY3VzIGlzIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcyBmb3IgZHluYW1pYyBwb2ludGVyIHN0YWNrIHNsb3RzIHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3csIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIG9yIHBvaW50cyB3aGVyZSB3ZSBtaWdodCBiZSBzZWVpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIG9wcG9ydHVuaXRpZXMgdG8gb3B0aW1pemUgb3IgaW1wcm92ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgZHluYW1pYyBwb2ludGVyIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTM5OD1zdGF0aWMgdm9pZCBfX2NsZWFuX2Z1bmNfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQyOC1cdFx0XHQgKiBEb24mIzM5O3QgY2xlYXIgc3BlY2lhbCBzbG90cy5cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDI5Olx0XHRcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoKSBuZWVkcyBTVEFDS19EWU5QVFIgdG9cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMwLVx0XHRcdCAqIGRldGVjdCBvdmVyd3JpdGVzIGFuZCBpbnZhbGlkYXRlIGFzc29jaWF0ZWQgZGF0YSBzbGljZXMuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY2MT1zdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9jYl9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2ODpzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjktXHRcdFx0XHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzE9c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODMtXHQvKiBXZSBjYW5ub3QgYXNzdW1lIGJvdGggc3BpIGFuZCBzcGkgLSAxIGJlbG9uZyB0byB0aGUgc2FtZSBkeW5wdHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njg0Olx0ICogaGVuY2Ugd2UgbmVlZCB0byBjYWxsIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdHdpY2UgZm9yIGJvdGgsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjg1LVx0ICogdG8gZW5zdXJlIHRoYXQgZm9yIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjkxLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjkyOlx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY5My1cdGlmIChlcnIpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjk0LVx0XHRyZXR1cm4gZXJyO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY5NTpcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpIC0gMSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjk2LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODAzPXN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTktXHRcdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMDpcdFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODIxLVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODI4OnN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyOS1cdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODcwPXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg4OC1cdCAqIFNUQUNLX0RZTlBUUiBzbG90cywgc2VlIG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyIHdoaWNoIGNhbGxzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODg5Olx0ICogZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdCB0byBlbnN1cmUgZHlucHRyIG9iamVjdHMgYXQgdGhlIHNsb3RzIHdlIGFyZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg5MC1cdCAqIHRvdWNoaW5nIGFyZSBjb21wbGV0ZWx5IGRlc3RydWN0ZWQgYmVmb3JlIHdlIHJlaW5pdGlhbGl6ZSB0aGVtIGZvciBhIG5ld1xua2VybmVsL2JwZi92ZXJpZmllci5jOjg5MTpcdCAqIG9uZS4gRm9yIHJlZmVyZW5jZWQgb25lcywgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdCByZXR1cm5zIGFuIGVycm9yIGVhcmx5XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODkyLVx0ICogaW5zdGVhZCBvZiBkZWxheWluZyBpdCB1bnRpbCB0aGUgZW5kIHdoZXJlIHRoZSB1c2VyIHdpbGwgZ2V0IFwmIzM0O1VucmVsZWFzZWRcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzU0MT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTkzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM1OTQ6XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5NS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM2ODQ9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3MTMtXHRcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM3MTQ6XHRcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNzE1LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2MwoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIG15IHRha2U6IHRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBwcmlvcml0aXplIGZ1enppbmcuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgJiMzNDt3b3J0aCBmdXp6aW5nLCYjMzQ7IGFuZCBhZnRlciBhIGRlZXBlciBkaXZlLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCBwcm9wZXIgY2xlYW51cCBhbmQgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBkeW5hbWljIHBvaW50ZXJzLCBvciAmIzM0O2R5bnB0cnMsJiMzNDsgd2hlbiBhIHN1YnByb2dyYW0gZXhpdHMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHZhbGlkYXRpb24gd2l0aGluIGEgaGlnaGx5IHNlbnNpdGl2ZSBrZXJuZWwgc3Vic3lzdGVtLiBBbnkgbWlzc3RlcCBoZXJlIGNvdWxkIGxlYWQgdG8gZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLgoKSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBicGZfY2hlY2tgLCBgcHJlcGFyZV9mdW5jX2V4aXRgLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAsIGFuZCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjcnVjaWFsIGFzcGVjdHMgb2YgdGhlIHZlcmlmaWVyJiMzOTtzIG9wZXJhdGlvbi4gSSB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGV5IGludGVyYWN0IGFuZCBob3cgdGhlIG1vZGlmaWNhdGlvbnMgbWlnaHQgaW50cm9kdWNlIHVuZXhwZWN0ZWQgZWRnZSBjYXNlcy4KClRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY292ZXJpbmcgb3VyIGJhc2VzLCBJIG5lZWQgdG8gY29uZmlybSB3ZSYjMzk7cmUgaW5jbHVkaW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGluIHRoZSBlbmFibGUgY29uZmlncy4gVGhpcyBpcyB0aGUgbWFpbiBzd2l0Y2ggdGhhdCB0dXJucyBvbiB0aGUgQlBGIHN5c3RlbSBhbmQgdmVyaWZpZXIuIFdpdGhvdXQgaXQsIG5vbmUgb2YgdGhpcyBpcyByZWxldmFudC4KClNvLCB0byBzdW1tYXJpemUgc3VjY2luY3RseTogVGhpcyBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgZGVzdHJ1Y3Rpb24gb2YgY2FsbGVlLWxvY2FsIGR5bmFtaWMgcG9pbnRlcnMgYW5kIGludmFsaWRhdGUgc2xpY2VzIHdoZW4gYSBzdWJwcm9ncmFtIGV4aXRzLCB0aHVzIG1ha2luZyB0aGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgpXZSBzaG91bGQgaW1tZWRpYXRlbHkgY2FsbCBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7ZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgaW50cm9kdWNpbmcgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCB0byB0ZWFyIGRvd24gY2FsbGVlLWxvY2FsIGR5bnB0cnMgYW5kIGludmFsaWRhdGUgZGVyaXZlZCBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIGluIHByZXBhcmVfZnVuY19leGl0LiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIHZlcmlmaWNhdGlvbiBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIHZpYSBzeXNfYnBmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0JiMzNDssCiAgICAmIzM0O2Rlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBieSBpbnRyb2R1Y2luZyBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0IHRvIHRlYXIgZG93biBjYWxsZWUtbG9jYWwgZHlucHRycyBhbmQgaW52YWxpZGF0ZSBkZXJpdmVkIHNsaWNlcyB3aGVuIGV4aXRpbmcgc3VicHJvZ3JhbXMgaW4gcHJlcGFyZV9mdW5jX2V4aXQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gdmVyaWZpY2F0aW9uIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gdmlhIHN5c19icGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGJ5IGFkZGluZyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCgpYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBgcHJlcGFyZV9mdW5jX2V4aXQoKWAgdG8gZW5zdXJlIHRoYXQgZHlucHRycyBhbGxvY2F0ZWQgb24gYSBjYWxsZWUmIzM5O3Mgc3RhY2sgZnJhbWUgYXJlIHByb3Blcmx5IGRlc3RydWN0ZWQgYW5kIHRoZWlyIGRlcml2ZWQgc2xpY2VzIGludmFsaWRhdGVkIHdoZW4gdGhlIHN1YnByb2dyYW0gcmV0dXJucy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS5cbi0gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgZGV0ZWN0IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgbG9naWMgYnVncyBpbiBrZXJuZWwvdmVyaWZpZXIgdmVyaWZpY2F0aW9uLlxuXG5UaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOlxuMS4gT3BlcmF0ZSBwdXJlbHkgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgY29tcGlsZS10aW1lIHN0YXRpYyBhbmFseXNpcyBzdGF0ZSBtYWNoaW5lIChgYnBmX2Z1bmNfc3RhdGVgKS5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpYCwgYGVycmApIGFuZCBzdGF0ZSBhY2Nlc3NlcyAoYGNhbGxlZS1cdTAwM2VzdGFja1tpXWApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCBieSBgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRWAuXG4zLiBEbyBub3QgYWxsb2NhdGUgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlhN2VmNTdiMTQ1ZjljYTQxM2JhODZiZGU1N2M2NGQ1OTQ5Mjg3YzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwODo1NTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA3MmEzZjU5OThkZDI3Li5jOWMxZGYyN2IyNjk5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC04MDAsNiAmIzQzOzgwMCwzMSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZCkKIAlyZXR1cm4gcmVmX2NudDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCQkJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpCiYjNDM7ewomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY2FsbGVlLSZndDthbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gJmFtcDtjYWxsZWUtJmd0O3N0YWNrW2ldOwomIzQzOwomIzQzOwkJaWYgKHNsb3QtJmd0O3Nsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHwKJiM0MzsJCSAgICAhc2xvdC0mZ3Q7c3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3QpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQSBjYWxsZWUtbG9jYWwgZHlucHRyIGlzIGRlc3Ryb3llZCB3aGVuIGl0cyBzdGFjayBmcmFtZSBnb2VzCiYjNDM7CQkgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3QKJiM0MzsJCSAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLgomIzQzOwkJICovCiYjNDM7CQllcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpCiB7CkBAIC0xMDM5OSw2ICYjNDM7MTA0MjQsOSBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpCiAJCXByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci0mZ3Q7ZnJhbWVubywgdHJ1ZSk7CiAJfQogCWFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpOwomIzQzOwllcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiAJLyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nCiAJICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovCiAJZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmgmIzM0OwogCkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZCkKIAkJdGVzdF9pbmNvbXBsX29wcygpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpOwomIzQzOwlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZSk7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyMTdmNGM0YzAwYzQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMKQEAgLTAsMCAmIzQzOzEsNzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2NvbW1vbi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztpbnQgcHJvdG87CiYjNDM7CiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgc3RydWN0IGV0aGhkciAqc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCAmYW1wO3B0cik7CiYjNDM7CXJldHVybiBicGZfZHlucHRyX3NsaWNlKCZhbXA7cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CSAgICAgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBicGZfc2tfYnVmZl9wdHIgKnRvX2ZyZWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRoaGRyICpoZHI7CiYjNDM7CiYjNDM7CWhkciA9IHNsaWNlX2luX3N1YnByb2coc2tiKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCWJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpOwomIzQzOwkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogdGhpcyBzaG91bGQgZmFpbCAqLwomIzQzOwlwcm90byA9IGhkci0mZ3Q7aF9wcm90bzsKJiM0MzsKJiM0MzsJYnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7CiYjNDM7CiYjNDM7CXJldHVybiBORVRfWE1JVF9EUk9QOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztzdHJ1Y3Qgc2tfYnVmZiAqQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwgc3RydWN0IFFkaXNjICpzY2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7aW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiYjNDM7CSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2F1eGlsaWFyeQomIzQzO3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7dm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXN0cm95LCBzdHJ1Y3QgUWRpc2MgKnNjaCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7c3RydWN0IFFkaXNjX29wcyB0ZXN0ID0gewomIzQzOwkuZW5xdWV1ZSAgID0gKHZvaWQgKilpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwKJiM0MzsJLmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwKJiM0MzsJLmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCwKJiM0MzsJLnJlc2V0ICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfcmVzZXQsCiYjNDM7CS5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksCiYjNDM7CS5pZCAgICAgICAgPSAmIzM0O2JwZl9xZGlzY190ZXN0JiMzNDssCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKaW5kZXggMWNkNjFkNzJjMTY2Zi4uZjU3ZTYxNjJkYmY1YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKQEAgLTEyNyw3ICYjNDM7MTI3LDcgQEAgc3RhdGljIGludCBtaXNzaW5nX3JlbGVhc2VfY2FsbGJhY2tfZm4oX191MzIgaW5kZXgsIHZvaWQgKmRhdGEpCiAKIC8qIEFueSBkeW5wdHIgaW5pdGlhbGl6ZWQgd2l0aGluIGEgY2FsbGJhY2sgbXVzdCBoYXZlIGJwZl9keW5wdHJfcHV0IGNhbGxlZCAqLwogU0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyJiMzNDspCiBpbnQgcmluZ2J1Zl9taXNzaW5nX3JlbGVhc2VfY2FsbGJhY2sodm9pZCAqY3R4KQogewogCWJwZl9sb29wKDEwLCBtaXNzaW5nX3JlbGVhc2VfY2FsbGJhY2tfZm4sIE5VTEwsIDApOwpAQCAtMTg5Miw2ICYjNDM7MTg5MiwxMDEgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgY2xvbmU7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfY2xvbmUocHRyLCAmYW1wO2Nsb25lKTsKJiM0MzsJKmRhdGEgPSBicGZfZHlucHRyX2RhdGEoJmFtcDtjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIGNhbGxlcl9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTsKJiM0MzsKJiM0MzsJKmRhdGEgPSBicGZfZHlucHRyX2RhdGEocHRyLCAwLCBzaXplb2YodmFsKSk7CiYjNDM7CWJwZl9keW5wdHJfY2xvbmUocHRyLCAmYW1wO2Nsb25lKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCByZXNlcnZlX2R5bnB0cl9pbl9zdWJwcm9nKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CiYjNDM7CWJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKCZhbXA7cmluZ2J1ZiwgdmFsLCAwLCAmYW1wO3B0cik7CiYjNDM7fQomIzQzOwomIzQzOy8qIEEgc3VicHJvZ3JhbSBjYW5ub3QgbG9zZSB0aGUgbGFzdCBkeW5wdHIgdGhhdCBjYW4gcmVsZWFzZSBhIHJlc291cmNlLiAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyJiMzNDspCiYjNDM7aW50IHJlZmVyZW5jZWRfZHlucHRyX2xvc3Rfb25fc3VicHJvZ19yZXR1cm4odm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmVzZXJ2ZV9keW5wdHJfaW5fc3VicHJvZygpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXN0cm95aW5nIGEgbG9jYWwgY2xvbmUgb24gcmV0dXJuIG11c3Qgbm90IGludmFsaWRhdGUgYSBzbGljZSB3aG9zZQomIzQzOyAqIHNvdXJjZSBkeW5wdHIgYmVsb25ncyB0byB0aGUgY2FsbGVyLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGVyX2R5bnB0cl9zbGljZV9hY3Jvc3Nfc3VicHJvZ192YWxpZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CWludCAqZGF0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKCZhbXA7cmluZ2J1ZiwgdmFsLCAwLCAmYW1wO3B0cik7CiYjNDM7CWNhbGxlcl9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBzbGljZSB0aGF0IGVzY2FwZXMgYSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lIGlzIGludmFsaWQgb25jZSB0aGUgbG9jYWwKJiM0MzsgKiBjbG9uZSBpcyBkZXN0cm95ZWQgb24gcmV0dXJuLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2xvbmVfc2xpY2VfaW5fc3VicHJvZygmYW1wO3B0ciwgJmFtcDtkYXRhKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkvKiB0aGlzIHNob3VsZCBmYWlsICovCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsJYnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cigmYW1wO3B0ciwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZAomIzQzOyAqIGZyb20gYSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9yZWxlYXNlX2ludmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkvKiB0aGlzIHNob3VsZCBmYWlsICovCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlcwogICogb2YgaXRzIHBhcmVudAogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQmIzM5O3Mgd29ydGggdGhyb3dpbmcgS01TQU4gYXQuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIHRvdWNoZWQuIEFoLCBpdCYjMzk7cyBtb2RpZnlpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGFsc28gYWRkaW5nIHNvbWUgQlBGIHNlbGZ0ZXN0cywgaW50ZXJlc3RpbmcuIFRoYXQgYXJlYSBhbHdheXMgbWFrZXMgbWUgYSBsaXR0bGUgY2F1dGlvdXMuCgpMZXQgbWUgZGlnIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgYW5kIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIFRob3NlIGFyZSBrZXkgc3BvdHMgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkmIzM5O2xsIGZpcmUgdXAgYGdyZXBwZXJgIChvciBgcmVhZC1maWxlYCwgZGVwZW5kaW5nIG9uIG15IG1vb2QpIGFuZCBnZXQgYSBkZXRhaWxlZCB2aWV3IG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuIEZyb20gdGhpcyBJIGNhbiBzZWUgd2hhdCBpcyBiZWluZyBhZGRlZCBhbmQgb3IgbW9kaWZpZWQgaW4gcmVsYXRpb24gdG8gZHluYW1pYyBwb2ludGVycywgd2hpY2ggaXMgd2hlcmUgS01TQU4gd2lsbCBnaXZlIHRoZSBtb3N0IHZhbHVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz02NjE9c3RhdGljIHZvaWQgbWFya19keW5wdHJfY2JfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Njg6c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY5LVx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjcxPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgzLVx0LyogV2UgY2Fubm90IGFzc3VtZSBib3RoIHNwaSBhbmQgc3BpIC0gMSBiZWxvbmcgdG8gdGhlIHNhbWUgZHlucHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4NDpcdCAqIGhlbmNlIHdlIG5lZWQgdG8gY2FsbCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHR3aWNlIGZvciBib3RoLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4NS1cdCAqIHRvIGVuc3VyZSB0aGF0IGZvciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MS1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY5MjpcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTMtXHRpZiAoZXJyKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5NC1cdFx0cmV0dXJuIGVycjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTU6XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSAtIDEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY5Ni1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgwMz1zdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE5LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MjA6XHRcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBjYWxsZWUsIGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMS1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODI3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyODpzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjktXHRcdFx0XHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg3MD1zdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODgtXHQgKiBTVEFDS19EWU5QVFIgc2xvdHMsIHNlZSBtYXJrX3N0YWNrX3Nsb3RzX2R5bnB0ciB3aGljaCBjYWxsc1xua2VybmVsL2JwZi92ZXJpZmllci5jOjg4OTpcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdG8gZW5zdXJlIGR5bnB0ciBvYmplY3RzIGF0IHRoZSBzbG90cyB3ZSBhcmVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04OTAtXHQgKiB0b3VjaGluZyBhcmUgY29tcGxldGVseSBkZXN0cnVjdGVkIGJlZm9yZSB3ZSByZWluaXRpYWxpemUgdGhlbSBmb3IgYSBuZXdcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4OTE6XHQgKiBvbmUuIEZvciByZWZlcmVuY2VkIG9uZXMsIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgcmV0dXJucyBhbiBlcnJvciBlYXJseVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg5Mi1cdCAqIGluc3RlYWQgb2YgZGVsYXlpbmcgaXQgdW50aWwgdGhlIGVuZCB3aGVyZSB0aGUgdXNlciB3aWxsIGdldCBcJiMzNDtVbnJlbGVhc2VkXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1NDE9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTk0Olx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM1OTUtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjg0PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNzEzLVx0XHRzcGkgPSBicGZfZ2V0X3NwaShpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzE0Olx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzcxNS1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYXMgSSB1bmRlcnN0YW5kIHRoZW06CgoqKkRpc3NlY3RpbmcgQlBGIEZ1bmN0aW9uIEV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBmdW5jdGlvbiBleGl0cyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgY2xlYW51cCBvcGVyYXRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBwcmVwYXJlX2Z1bmNfZXhpdGAgYW5kIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YC4gSSYjMzk7bSBnb2luZyB0byBjb25zdWx0IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGNvbnRleHQsIGZvY3VzaW5nIG9uIGxpbmVzIDgwMCBhbmQgMTA0MDAgZm9yIGEgc3RhcnQuCgpGcm9tIHRoZSBmdW5jdGlvbiBuYW1lcywgSSBpbmZlciB0aGF0IGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgbGlrZWx5IHNldHRpbmcgdGhlIHN0YWdlIGZvciBhIGZ1bmN0aW9uJiMzOTtzIHJldHVybiwgbWF5YmUgdXBkYXRpbmcgc29tZSBzdGF0ZSBvciBwZXJmb3JtaW5nIGluaXRpYWwgY2xlYW51cCB0YXNrcyAqYmVmb3JlKiB0aGUgYWN0dWFsIGV4aXQuIE9uIHRoZSBvdGhlciBoYW5kLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgc2NyZWFtcyBhYm91dCBjbGVhbmluZyB1cCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcG9pbnRlcnMg4oCTIEJQRiBwcm9ncmFtcyBjYW4gYmUgc29waGlzdGljYXRlZCwgYW5kIHRoYXQgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgaGFuZGxlZCBkdXJpbmcgZnVuY3Rpb24gcmV0dXJucyB0byBhdm9pZCBsZWFrcyBvciBjb3JydXB0aW9uLiBUaGlzIHByb2JhYmx5IGludm9sdmVzIGZyZWVpbmcgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBkeW5hbWljIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gYSBCUEYgZnVuY3Rpb24uIEkgc3VzcGVjdCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgaXMgZ29pbmcgdG8gYmUgdGhlIG1vcmUgY29tcGxleCBvZiB0aGUgdHdvLCBlc3BlY2lhbGx5IGlmIHRoZSBCUEYgcHJvZ3JhbSB1c2VzIHBvdGVudGlhbGx5IG5lc3RlZCBvciBjeWNsaWNhbCBwb2ludGVyIHN0cnVjdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgdGhlc2UgZHluYW1pYyBwb2ludGVycyBhbmQgaG93IGl0IHZhbGlkYXRlcyB0aGVpciBjbGVhbnVwLiBJdOKAmXMgcG9zc2libGUgdGhlcmUgYXJlIGNoZWNrcyBvbiB0aGUgdmVyaWZpZXIgc3RhY2sgZHVyaW5nIHRoZSBleGl0IHRvIGVuc3VyZSBhbGwgcmVzb3VyY2VzIGFyZSBkZWFsbG9jYXRlZCBhcyBkZXNpZ25lZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGVzZSBmdW5jdGlvbiBhZGRyZXNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGFjdHVhbCBjb2RlIHNheXMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFx0cmV0dXJuIHJlZl9jbnQ7XG4gODAxOlx0fVxuIDgwMjpcdFxuIDgwMzpcdHN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDgwNDpcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbiA4MDU6XHR7XG4gODA2Olx0XHRpbnQgaSwgZXJyO1xuIDgwNzpcdFxuIDgwODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHtcbiA4MDk6XHRcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNmNhbGxlZS1cdTAwM2VzdGFja1tpXTtcbiA4MTA6XHRcbiA4MTE6XHRcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuIDgxMjpcdFx0XHQgICAgIXNsb3QtXHUwMDNlc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3QpXG4gODEzOlx0XHRcdFx0Y29udGludWU7XG4gODE0Olx0XG4gODE1Olx0XHRcdC8qXG4gODE2Olx0XHRcdCAqIEEgY2FsbGVlLWxvY2FsIGR5bnB0ciBpcyBkZXN0cm95ZWQgd2hlbiBpdHMgc3RhY2sgZnJhbWUgZ29lc1xuIDgxNzpcdFx0XHQgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3RcbiA4MTg6XHRcdFx0ICogYmUgbG9zdCBhbmQgc2xpY2VzIGRlcml2ZWQgZnJvbSB0aGF0IGR5bnB0ciBhcmUgaW52YWxpZGF0ZWQuXG4gODE5Olx0XHRcdCAqL1xuIDgyMDpcdFx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcbiA4MjE6XHRcdFx0aWYgKGVycilcbiA4MjI6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDgyMzpcdFx0fVxuIDgyNDpcdFxuIDgyNTpcdFx0cmV0dXJuIDA7XG4gODI2Olx0fVxuIDgyNzpcdFxuIDgyODpcdHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDgyOTpcdFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIDgzMDpcdHtcbiA4MzE6XHRcdGludCBlcnIgPSAwO1xuIDgzMjpcdFxuIDgzMzpcdFx0LyogV2UgYWx3YXlzIGVuc3VyZSB0aGF0IFNUQUNLX0RZTlBUUiBpcyBuZXZlciBzZXQgcGFydGlhbGx5LFxuIDgzNDpcdFx0ICogaGVuY2UganVzdCBjaGVja2luZyBmb3Igc2xvdF90eXBlWzBdIGlzIGVub3VnaC4gVGhpcyBpc1xuIDgzNTpcdFx0ICogZGlmZmVyZW50IGZvciBTVEFDS19TUElMTCwgd2hlcmUgaXQgbWF5IGJlIG9ubHkgc2V0IGZvclxuIDgzNjpcdFx0ICogMSBieXRlLCBzbyBjb2RlIGhhcyB0byB1c2UgaXNfc3BpbGxlZF9yZWcuXG4gODM3Olx0XHQgKi9cbiA4Mzg6XHRcdGlmIChzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIpXG4gODM5Olx0XHRcdHJldHVybiAwO1xuIDg0MDpcdFxuIDg0MTpcdFx0LyogUmVwb3NpdGlvbiBzcGkgdG8gZmlyc3Qgc2xvdCAqL1xuIDg0MjpcdFx0aWYgKCFzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuIDg0MzpcdFx0XHRzcGkgPSBzcGkgJiM0MzsgMTtcbiA4NDQ6XHRcbiA4NDU6XHRcdC8qXG4gODQ2Olx0XHQgKiBBIHJlZmVyZW5jZWQgZHlucHRyIGNhbiBiZSBvdmVyd3JpdHRlbiBvbmx5IGlmIHRoZXJlIGlzIGF0XG4gODQ3Olx0XHQgKiBsZWFzdCBvbmUgb3RoZXIgZHlucHRyIHNoYXJpbmcgdGhlIHNhbWUgdmlydHVhbCByZWYgcGFyZW50LFxuIDg0ODpcdFx0ICogZW5zdXJpbmcgdGhlIHJlZmVyZW5jZSBjYW4gc3RpbGwgYmUgcHJvcGVybHkgcmVsZWFzZWQuXG4gODQ5Olx0XHQgKi9cbiA4NTA6XHRcdGlmIChkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuZHlucHRyLnR5cGUpIFx1MDAyNlx1MDAyNlxuIDg1MTpcdFx0ICAgIGR5bnB0cl9yZWZfY250KGVudiwgc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5wYXJlbnRfaWQpIFx1MDAzYz0gMSkge1xuIDg1MjpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IG92ZXJ3cml0ZSByZWZlcmVuY2VkIGR5bnB0clxcblwmIzM0Oyk7XG4gODUzOlx0XHRcdGJwZl9kaWFnX3JlcyhcbiA4NTQ6XHRcdFx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCYjMzQ7cmVmZXJlbmNlZCBkeW5wdHIgb3ZlcndyaXRlXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Ygc29tZSBjb2RlLCBwcm9iYWJseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGR5bmFtaWMgcG9pbnRlcnMsIGFuZCBJJiMzOTttIHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIGZ1bmN0aW9uIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YDoKCioqTGV0JiMzOTtzIERpZyBpbnRvIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIHRoZSBwdXp6bGUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGtub3cgd2hhdCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgKnNob3VsZCogYmUgZG9pbmcsIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgd2hlcmUgaXQmIzM5O3MgcHJvYmFibHkgYmVpbmcgdXNlZC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGNsZWFuaW5nIHVwLCBkZWFsbG9jYXRpbmcsIG9yIGF0IGxlYXN0IHJlc2V0dGluZyBzb21lIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnksIGxpa2VseSBwb2ludGVycyByZXNpZGluZyBvbiB0aGUgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgZGV0YWlscywgdGhvdWdoLCB0byBlbnN1cmUgSSYjMzk7bSByZW1lbWJlcmluZyB0aGUgc3BlY2lmaWNzIGNvcnJlY3RseS4gSSYjMzk7dmUgZ290IGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIHdob2xlIHN5c3RlbSB3b3JrcyDigJMgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBzdGFjaywgaGVhcCwgdGhlc2UgZHluYW1pYyBwb2ludGVycyDigJMgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGdldCB0aGUgZnVsbCBjb250ZXh0IHRvIHNlZSBob3cgaXQgaXMgc3VwcG9zZWQgdG8gYmUgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1NTpcdFx0XHRcdFwmIzM0O1RoaXMgc3RhY2sgc2xvdCBjb250YWlucyBhIGR5bnB0ciB0aGF0IG93bnMgb3IgcHJvdGVjdHMgYSByZWZlcmVuY2VkIHJlc291cmNlLiBPdmVyd3JpdGluZyB0aGUgbGFzdCBkeW5wdHIgZm9yIHRoYXQgcmVzb3VyY2Ugd291bGQgbG9zZSB0aGUgdmVyaWZpZXItdHJhY2tlZCByZWxlYXNlIHBhdGguXCYjMzQ7LFxuIDg1NjpcdFx0XHRcdFwmIzM0O1JlbGVhc2Ugb3IgY2xvbmUgdGhlIGR5bnB0ciBzbyBhbm90aGVyIGxpdmUgZHlucHRyIHN0aWxsIHRyYWNrcyB0aGUgcmVmZXJlbmNlZCByZXNvdXJjZSBiZWZvcmUgb3ZlcndyaXRpbmcgdGhpcyBzdGFjayBzbG90LlwmIzM0Oyk7XG4gODU3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg1ODpcdFx0fVxuIDg1OTpcdFxuIDg2MDpcdFx0LyogSW52YWxpZGF0ZSB0aGUgZHlucHRyIGFuZCBhbnkgZGVyaXZlZCBzbGljZXMgKi9cbiA4NjE6XHRcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5pZCk7XG4gODYyOlx0XHRpZiAoIWVycikge1xuIDg2MzpcdFx0XHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTtcbiA4NjQ6XHRcdFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIDEpO1xuIDg2NTpcdFx0fVxuIDg2NjpcdFxuIDg2NzpcdFx0cmV0dXJuIGVycjtcbiA4Njg6XHR9XG4gODY5Olx0XG4gODcwOlx0c3RhdGljIGJvb2wgaXNfZHlucHRyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiA4NzE6XHR7XG4gODcyOlx0XHRpbnQgc3BpO1xuIDg3MzpcdFxuIDg3NDpcdFx0aWYgKHJlZy1cdTAwM2V0eXBlID09IENPTlNUX1BUUl9UT19EWU5QVFIpXG4gODc1Olx0XHRcdHJldHVybiBmYWxzZTtcbiA4NzY6XHRcbiA4Nzc6XHRcdHNwaSA9IGR5bnB0cl9nZXRfc3BpKGVudiwgcmVnKTtcbiA4Nzg6XHRcbiA4Nzk6XHRcdC8qIC1FUkFOR0UgKGkuZS4gc3BpIG5vdCBmYWxsaW5nIGludG8gYWxsb2NhdGVkIHN0YWNrIHNsb3RzKSBpc24mIzM5O3QgYW5cbiA4ODA6XHRcdCAqIGVycm9yIGJlY2F1c2UgdGhpcyBqdXN0IG1lYW5zIHRoZSBzdGFjayBzdGF0ZSBoYXNuJiMzOTt0IGJlZW4gdXBkYXRlZCB5ZXQuXG4gODgxOlx0XHQgKiBXZSB3aWxsIGRvIGNoZWNrX21lbV9hY2Nlc3MgdG8gY2hlY2sgYW5kIHVwZGF0ZSBzdGFjayBib3VuZHMgbGF0ZXIuXG4gODgyOlx0XHQgKi9cbiA4ODM6XHRcdGlmIChzcGkgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHNwaSAhPSAtRVJBTkdFKVxuIDg4NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODg1Olx0XG4gODg2Olx0XHQvKiBXZSBkb24mIzM5O3QgbmVlZCB0byBjaGVjayBpZiB0aGUgc3RhY2sgc2xvdHMgYXJlIG1hcmtlZCBieSBwcmV2aW91c1xuIDg4NzpcdFx0ICogZHlucHRyIGluaXRpYWxpemF0aW9ucyBiZWNhdXNlIHdlIGFsbG93IG92ZXJ3cml0aW5nIGV4aXN0aW5nIHVucmVmZXJlbmNlZFxuIDg4ODpcdFx0ICogU1RBQ0tfRFlOUFRSIHNsb3RzLCBzZWUgbWFya19zdGFja19zbG90c19keW5wdHIgd2hpY2ggY2FsbHNcbiA4ODk6XHRcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdG8gZW5zdXJlIGR5bnB0ciBvYmplY3RzIGF0IHRoZSBzbG90cyB3ZSBhcmVcbiA4OTA6XHRcdCAqIHRvdWNoaW5nIGFyZSBjb21wbGV0ZWx5IGRlc3RydWN0ZWQgYmVmb3JlIHdlIHJlaW5pdGlhbGl6ZSB0aGVtIGZvciBhIG5ld1xuIDg5MTpcdFx0ICogb25lLiBGb3IgcmVmZXJlbmNlZCBvbmVzLCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHJldHVybnMgYW4gZXJyb3IgZWFybHlcbiA4OTI6XHRcdCAqIGluc3RlYWQgb2YgZGVsYXlpbmcgaXQgdW50aWwgdGhlIGVuZCB3aGVyZSB0aGUgdXNlciB3aWxsIGdldCBcJiMzNDtVbnJlbGVhc2VkXG4gODkzOlx0XHQgKiByZWZlcmVuY2VcJiMzNDsgZXJyb3IuXG4gODk0Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaW4gQ29udGV4dCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBgcHJlcGFyZV9mdW5jX2V4aXRgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhcm91bmQgbGluZSAxMDQyNC4gVGhhdCBzaG91bGQgcHV0IG1lIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHByb3BlciBjbGVhbnVwIGR1cmluZyBmdW5jdGlvbiBleGl0cywgcGFydGljdWxhcmx5IGluIHRoZSBjYXNlIG9mIHNvbWV0aGluZyBsaWtlIGEgc3RhY2sgdW53aW5kaW5nLCByZXNvdXJjZSBkZWFsbG9jYXRpb24sIG9yIGV4Y2VwdGlvbiBoYW5kbGluZy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBsYW5ndWFnZSB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc3RhY2sgZnJhbWUgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoYXQmIzM5O3MgYmVpbmcgcGFzc2VkIGluIGFuZCBleGFjdGx5IHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCB0aGVzZSBhcmd1bWVudHMgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIG9yIHRvIHVwZGF0ZSB0aGUgY29udHJvbCBmbG93LCBwZXJoYXBzIHVzaW5nIGEganVtcCB0YWJsZSBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZXJlIG1pZ2h0IGJlIGludGVyYWN0aW9ucyB3aXRoIGEgZGVidWdnZXIgb3IgcHJvZmlsZXIgaGVyZSBhcyB3ZWxsLiBJIGhvcGUgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYXJvdW5kIHRoaXMgc2VjdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDQxMDpcdFx0LyogZm9yIGNhbGxiYWNrcyBsaWtlIGJwZl9sb29wIG9yIGJwZl9mb3JfZWFjaF9tYXBfZWxlbSBnbyBiYWNrIHRvIGNhbGxzaXRlLFxuMTA0MTE6XHRcdCAqIHRoZXJlIGZ1bmN0aW9uIGNhbGwgbG9naWMgd291bGQgcmVzY2hlZHVsZSBjYWxsYmFjayB2aXNpdC4gSWYgaXRlcmF0aW9uXG4xMDQxMjpcdFx0ICogY29udmVyZ2VzIGlzX3N0YXRlX3Zpc2l0ZWQoKSB3b3VsZCBwcnVuZSB0aGF0IHZpc2l0IGV2ZW50dWFsbHkuXG4xMDQxMzpcdFx0ICovXG4xMDQxNDpcdFx0aW5fY2FsbGJhY2tfZm4gPSBjYWxsZWUtXHUwMDNlaW5fY2FsbGJhY2tfZm47XG4xMDQxNTpcdFx0aWYgKGluX2NhbGxiYWNrX2ZuKVxuMTA0MTY6XHRcdFx0Kmluc25faWR4ID0gY2FsbGVlLVx1MDAzZWNhbGxzaXRlO1xuMTA0MTc6XHRcdGVsc2VcbjEwNDE4Olx0XHRcdCppbnNuX2lkeCA9IGNhbGxlZS1cdTAwM2VjYWxsc2l0ZSAmIzQzOyAxO1xuMTA0MTk6XHRcbjEwNDIwOlx0XHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xuMTA0MjE6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3JldHVybmluZyBmcm9tIGNhbGxlZTpcXG5cJiMzNDspO1xuMTA0MjI6XHRcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVlLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xuMTA0MjM6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RvIGNhbGxlciBhdCAlZDpcXG5cJiMzNDssICppbnNuX2lkeCk7XG4xMDQyNDpcdFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4xMDQyNTpcdFx0fVxuMTA0MjY6XHRcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuMTA0Mjc6XHRcdGVyciA9IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xuMTA0Mjg6XHRcdGlmIChlcnIpXG4xMDQyOTpcdFx0XHRyZXR1cm4gZXJyO1xuMTA0MzA6XHRcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuMTA0MzE6XHRcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xuMTA0MzI6XHRcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xuMTA0MzM6XHRcdHN0YXRlLVx1MDAzZWZyYW1lW3N0YXRlLVx1MDAzZWN1cmZyYW1lLS1dID0gTlVMTDtcbjEwNDM0Olx0XHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjYWxsZXIpO1xuMTA0MzU6XHRcbjEwNDM2Olx0XHQvKiBmb3IgY2FsbGJhY2tzIHdpZGVuIGltcHJlY2lzZSBzY2FsYXJzIHRvIG1ha2UgcHJvZ3JhbXMgbGlrZSBiZWxvdyB2ZXJpZnk6XG4xMDQzNzpcdFx0ICpcbjEwNDM4Olx0XHQgKiAgIHN0cnVjdCBjdHggeyBpbnQgaTsgfVxuMTA0Mzk6XHRcdCAqICAgdm9pZCBjYihpbnQgaWR4LCBzdHJ1Y3QgY3R4ICpjdHgpIHsgY3R4LVx1MDAzZWkmIzQzOyYjNDM7OyAuLi4gfVxuMTA0NDA6XHRcdCAqICAgLi4uXG4xMDQ0MTpcdFx0ICogICBzdHJ1Y3QgY3R4ID0geyAuaSA9IDA7IH1cbjEwNDQyOlx0XHQgKiAgIGJwZl9sb29wKDEwMCwgY2IsIFx1MDAyNmN0eCwgMCk7XG4xMDQ0MzpcdFx0ICpcbjEwNDQ0Olx0XHQgKiBUaGlzIGlzIHNpbWlsYXIgdG8gd2hhdCBpcyBkb25lIGluIHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoKSBmb3Igb3BlblxuMTA0NDU6XHRcdCAqIGNvZGVkIGl0ZXJhdG9ycy5cbjEwNDQ2Olx0XHQgKi9cbjEwNDQ3Olx0XHRwcmV2X3N0ID0gaW5fY2FsbGJhY2tfZm4gPyBmaW5kX3ByZXZfZW50cnkoZW52LCBzdGF0ZSwgKmluc25faWR4KSA6IE5VTEw7XG4xMDQ0ODpcdFx0aWYgKHByZXZfc3QpIHtcbjEwNDQ5Olx0XHRcdGVyciA9IHdpZGVuX2ltcHJlY2lzZV9zY2FsYXJzKGVudiwgcHJldl9zdCwgc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTI4CgkJCQkJCQlvdXRwdXQ6IDMxOQoJCQkJCQkJdGhvdWdodHM6IDkzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQ6IEJQRiBWZXJpZmllciBEeW5wdHIgQ2xlYW51cCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2gsIGRlYWxpbmcgd2l0aCBCUEYgdmVyaWZpZXIgZHlucHRyIGNsZWFudXAsIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGNhcmVmdWxseSwgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgS01TQU4gaXNzdWVzLgoKRmlyc3QsIHRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAsIGZvY3VzZXMgb24gY2xlYW5pbmcgdXAgZHlucHRycyBvbiBhIGNhbGxlZSYjMzk7cyBzdGFjayBmcmFtZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgc3RhY2ssIGNoZWNrcyBmb3IgYFNUQUNLX0RZTlBUUmAgc2xvdHMsIGFuZCByZWxlYXNlcyB0aGUgcmVmZXJlbmNlcy4gSXQmIzM5O3MgYWxsIGhhcHBlbmluZyAqd2l0aGluKiB0aGUgdmVyaWZpZXImIzM5O3Mgc3RhdGljIGFuYWx5c2lzLCBub3QgZHVyaW5nIHJ1bnRpbWUgZXhlY3V0aW9uIG9mIGEgQlBGIHByb2dyYW0uIFNvIHRoZSBxdWVzdGlvbiBpczogY2FuIHRoaXMgaW50cm9kdWNlIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IEtNU0FOPwoKVGhlIEtNU0FOIGNyaXRlcmlhIGFyZSBmcmVzaCBpbiBteSBtaW5kOiBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgdW5pbml0aWFsaXplZCBmaWVsZCByZWFkcywgYW5kIGJvdW5kcyBpc3N1ZXMgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzLgoKTG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb2RlLCBgaWAgYW5kIGBlcnJgIGFyZSBsb2NhbCwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMuIGBpYCBpcyB1c2VkIHRvIGluZGV4IHRocm91Z2ggdGhlIHN0YWNrLCBhbmQgdGhlIGNvZGUgb25seSByZWFkcyBpbml0aWFsaXplZCBmaWVsZHMgKGBzbG90X3R5cGVbMF1gLCBgc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3RgKS4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGNvcGllcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgc3RhdGljIGFuYWx5c2lzIGF0IHZlcmlmaWNhdGlvbiB0aW1lLCBub3QgcnVuIHRpbWUgZXhlY3V0aW9uLiBJdCBpcyBhbGwgYm91bmRlZCBieSBgY2FsbGVlLSZndDthbGxvY2F0ZWRfc3RhY2tgLgoKVGhlIGBjYWxsZWUtJmd0O3N0YWNrYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyB2ZXJpZmllciBzdGF0ZSBjcmVhdGlvbjsgdGhlIGBzbG90X3R5cGVgIGlzIGFsc28gaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBkYW5nbGluZyBzbGljZSBhY2Nlc3NlcyBpbiB2ZXJpZmllZCBCUEYgcHJvZ3JhbXMsIHdoaWNoIGFyZSBydW50aW1lIHNhZmV0eSBidWdzIGNhdWdodCBieSB2ZXJpZmllciBvciBLQVNBTiwgbm90IEtNU0FOLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgY3JlYXRlIGFueSBLTVNBTiBjb25jZXJucy4gSXQmIzM5O3MgYWJvdXQgdGlnaHRlbmluZyB2ZXJpZmljYXRpb24sIG5vdCBydW50aW1lIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtpbmcgaW5mb3JtYXRpb24uIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG9yIHN0YW5kYXJkIEtBU0FOIHZlcmlmaWVyIHRlc3RzKSBhcmUgYXBwcm9wcmlhdGUuIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoaXMuCgpUbyBjZW1lbnQgdGhlIHJlYXNvbmluZywgSSYjMzk7bGwgZW1waGFzaXplIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtNU0FOIGFuZCBLQVNBTi4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgcmVhZHMgYW5kIGxlYWtzOyBLQVNBTiBpcyBmb3IgdGhlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIFRoZSBjb2RlIGFkZGVkLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCgpYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB3aXRoaW4gYHByZXBhcmVfZnVuY19leGl0KClgLCBvbmx5IHRvdWNoZXMgQlBGIHZlcmlmaWVyIHN0YXRpYyBhbmFseXNpcywgY2xlYW5pbmcgdXAgZHlucHRycy4gVGhlIHZlcmlmaWVyIGNvZGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQuIFRodXMsIEkgc3RhbmQgYnkgbXkgJiMzOTtOZWVkc0tNU0FOID0gZmFsc2UmIzM5OyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGJ5IGFkZGluZyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCgpYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBgcHJlcGFyZV9mdW5jX2V4aXQoKWAgdG8gZW5zdXJlIHRoYXQgZHlucHRycyBhbGxvY2F0ZWQgb24gYSBjYWxsZWUmIzM5O3Mgc3RhY2sgZnJhbWUgYXJlIHByb3Blcmx5IGRlc3RydWN0ZWQgYW5kIHRoZWlyIGRlcml2ZWQgc2xpY2VzIGludmFsaWRhdGVkIHdoZW4gdGhlIHN1YnByb2dyYW0gcmV0dXJucy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS5cbi0gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgZGV0ZWN0IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgbG9naWMgYnVncyBpbiBrZXJuZWwvdmVyaWZpZXIgdmVyaWZpY2F0aW9uLlxuXG5UaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOlxuMS4gT3BlcmF0ZSBwdXJlbHkgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgY29tcGlsZS10aW1lIHN0YXRpYyBhbmFseXNpcyBzdGF0ZSBtYWNoaW5lIChgYnBmX2Z1bmNfc3RhdGVgKS5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpYCwgYGVycmApIGFuZCBzdGF0ZSBhY2Nlc3NlcyAoYGNhbGxlZS1cdTAwM2VzdGFja1tpXWApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCBieSBgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRWAuXG4zLiBEbyBub3QgYWxsb2NhdGUgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYnkgYWRkaW5nIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KClgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCB0byBlbnN1cmUgdGhhdCBkeW5wdHJzIGFsbG9jYXRlZCBvbiBhIGNhbGxlZSYjMzk7cyBzdGFjayBmcmFtZSBhcmUgcHJvcGVybHkgZGVzdHJ1Y3RlZCBhbmQgdGhlaXIgZGVyaXZlZCBzbGljZXMgaW52YWxpZGF0ZWQgd2hlbiB0aGUgc3VicHJvZ3JhbSByZXR1cm5zLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLlxuLSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBkZXRlY3QgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2dpYyBidWdzIGluIGtlcm5lbC92ZXJpZmllciB2ZXJpZmljYXRpb24uXG5cblRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2g6XG4xLiBPcGVyYXRlIHB1cmVseSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBjb21waWxlLXRpbWUgc3RhdGljIGFuYWx5c2lzIHN0YXRlIG1hY2hpbmUgKGBicGZfZnVuY19zdGF0ZWApLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlgLCBgZXJyYCkgYW5kIHN0YXRlIGFjY2Vzc2VzIChgY2FsbGVlLVx1MDAzZXN0YWNrW2ldYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBib3VuZGVkIGJ5IGBjYWxsZWUtXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFYC5cbjMuIERvIG5vdCBhbGxvY2F0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTowNi43MjU1NTkzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyODU4NzY3Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBieSBhZGRpbmcgYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoKWAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgYHByZXBhcmVfZnVuY19leGl0KClgIHRvIGVuc3VyZSB0aGF0IGR5bnB0cnMgYWxsb2NhdGVkIG9uIGEgY2FsbGVlJ3Mgc3RhY2sgZnJhbWUgYXJlIHByb3Blcmx5IGRlc3RydWN0ZWQgYW5kIHRoZWlyIGRlcml2ZWQgc2xpY2VzIGludmFsaWRhdGVkIHdoZW4gdGhlIHN1YnByb2dyYW0gcmV0dXJucy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS5cXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGRldGVjdCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGxvZ2ljIGJ1Z3MgaW4ga2VybmVsL3ZlcmlmaWVyIHZlcmlmaWNhdGlvbi5cXG5cXG5UaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOlxcbjEuIE9wZXJhdGUgcHVyZWx5IHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgY29tcGlsZS10aW1lIHN0YXRpYyBhbmFseXNpcyBzdGF0ZSBtYWNoaW5lIChgYnBmX2Z1bmNfc3RhdGVgKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaWAsIGBlcnJgKSBhbmQgc3RhdGUgYWNjZXNzZXMgKGBjYWxsZWUtXFx1MDAzZXN0YWNrW2ldYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBib3VuZGVkIGJ5IGBjYWxsZWUtXFx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRWAuXFxuMy4gRG8gbm90IGFsbG9jYXRlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IGNvcHlfdG9fdXNlciBwYXRocywgb3IgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGludHJvZHVjaW5nIGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQgdG8gdGVhciBkb3duIGNhbGxlZS1sb2NhbCBkeW5wdHJzIGFuZCBpbnZhbGlkYXRlIGRlcml2ZWQgc2xpY2VzIHdoZW4gZXhpdGluZyBzdWJwcm9ncmFtcyBpbiBwcmVwYXJlX2Z1bmNfZXhpdC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSB2ZXJpZmljYXRpb24gbG9naWMgZXhlY3V0ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiB2aWEgc3lzX2JwZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6MDYuNzI1NTY3NDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjM4NTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlhN2VmNTdiMTQ1ZjljYTQxM2JhODZiZGU1N2M2NGQ1OTQ5Mjg3YzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NTU6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uYzljMWRmMjdiMjY5OSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtODAwLDYgKzgwMCwzMSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZClcXG4gXFx0cmV0dXJuIHJlZl9jbnQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcXG4re1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhbGxlZS1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbitcXG4rXFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcXG4rXFx0XFx0ICAgICFzbG90LVxcdTAwM2VzcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXNcXG4rXFx0XFx0ICogYXdheS4gQXBwbHkgdGhlIG5vcm1hbCBzdGFjay1zbG90IHRlYXJkb3duIHNvIHJlZmVyZW5jZXMgY2Fubm90XFxuK1xcdFxcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0XFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbiB7XFxuQEAgLTEwMzk5LDYgKzEwNDI0LDkgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxcbiBcXHRcXHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXFx1MDAzZWZyYW1lbm8sIHRydWUpO1xcbiBcXHR9XFxuIFxcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xcbitcXHRlcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXFxuIFxcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xcbiBcXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xcbmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xcbkBAIC0xMSw2ICsxMSw3IEBAXFxuICNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lLnNrZWwuaFxcXCJcXG4gXFxuQEAgLTIzMCw2ICsyMzEsNyBAQCB2b2lkIHRlc3RfbnNfYnBmX3FkaXNjKHZvaWQpXFxuIFxcdFxcdHRlc3RfaW5jb21wbF9vcHMoKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7XFxuIFxcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpO1xcbitcXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9zbGljZSk7XFxuIFxcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyMTdmNGM0YzAwYzRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jXFxuQEAgLTAsMCArMSw3NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9leHBlcmltZW50YWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9xZGlzY19jb21tb24uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK2ludCBwcm90bztcXG4rXFxuK3N0YXRpYyBfX25vaW5saW5lIHN0cnVjdCBldGhoZHIgKnNsaWNlX2luX3N1YnByb2coc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCBcXHUwMDI2cHRyKTtcXG4rXFx0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXFx1MDAyNnB0ciwgMCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdCAgICAgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBicGZfc2tfYnVmZl9wdHIgKnRvX2ZyZWUpXFxuK3tcXG4rXFx0c3RydWN0IGV0aGhkciAqaGRyO1xcbitcXG4rXFx0aGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpO1xcbitcXHRpZiAoIWhkcikge1xcbitcXHRcXHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcXG4rXFx0XFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cXG4rXFx0cHJvdG8gPSBoZHItXFx1MDAzZWhfcHJvdG87XFxuK1xcbitcXHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcXG4rXFxuK1xcdHJldHVybiBORVRfWE1JVF9EUk9QO1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbitfX2F1eGlsaWFyeVxcbitzdHJ1Y3Qgc2tfYnVmZiAqQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwgc3RydWN0IFFkaXNjICpzY2gpXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK1NFQyhcXFwic3RydWN0X29wc1xcXCIpXFxuK19fYXV4aWxpYXJ5XFxuK2ludCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9pbml0LCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbitcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4rX19hdXhpbGlhcnlcXG4rdm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9yZXNldCwgc3RydWN0IFFkaXNjICpzY2gpXFxuK3tcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4rX19hdXhpbGlhcnlcXG4rdm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXN0cm95LCBzdHJ1Y3QgUWRpc2MgKnNjaClcXG4re1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG4rc3RydWN0IFFkaXNjX29wcyB0ZXN0ID0ge1xcbitcXHQuZW5xdWV1ZSAgID0gKHZvaWQgKilpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSxcXG4rXFx0LmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSxcXG4rXFx0LmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCxcXG4rXFx0LnJlc2V0ICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfcmVzZXQsXFxuK1xcdC5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksXFxuK1xcdC5pZCAgICAgICAgPSBcXFwiYnBmX3FkaXNjX3Rlc3RcXFwiLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuaW5kZXggMWNkNjFkNzJjMTY2Zi4uZjU3ZTYxNjJkYmY1YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcXG4gXFxuIC8qIEFueSBkeW5wdHIgaW5pdGlhbGl6ZWQgd2l0aGluIGEgY2FsbGJhY2sgbXVzdCBoYXZlIGJwZl9keW5wdHJfcHV0IGNhbGxlZCAqL1xcbiBTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbi1fX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXFxcIilcXG4gaW50IHJpbmdidWZfbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrKHZvaWQgKmN0eClcXG4ge1xcbiBcXHRicGZfbG9vcCgxMCwgbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrX2ZuLCBOVUxMLCAwKTtcXG5AQCAtMTg5Miw2ICsxODkyLDEwMSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XFxuK1xcbitcXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXFx1MDAyNmNsb25lKTtcXG4rXFx0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2FsbGVyX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcXG4rXFxuK1xcdCpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKHB0ciwgMCwgc2l6ZW9mKHZhbCkpO1xcbitcXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXFx1MDAyNmNsb25lKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByZXNlcnZlX2R5bnB0cl9pbl9zdWJwcm9nKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK31cXG4rXFxuKy8qIEEgc3VicHJvZ3JhbSBjYW5ub3QgbG9zZSB0aGUgbGFzdCBkeW5wdHIgdGhhdCBjYW4gcmVsZWFzZSBhIHJlc291cmNlLiAqL1xcbitTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCBvdmVyd3JpdGUgcmVmZXJlbmNlZCBkeW5wdHJcXFwiKVxcbitpbnQgcmVmZXJlbmNlZF9keW5wdHJfbG9zdF9vbl9zdWJwcm9nX3JldHVybih2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmVzZXJ2ZV9keW5wdHJfaW5fc3VicHJvZygpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERlc3Ryb3lpbmcgYSBsb2NhbCBjbG9uZSBvbiByZXR1cm4gbXVzdCBub3QgaW52YWxpZGF0ZSBhIHNsaWNlIHdob3NlXFxuKyAqIHNvdXJjZSBkeW5wdHIgYmVsb25ncyB0byB0aGUgY2FsbGVyLlxcbisgKi9cXG4rU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuK1xcdGludCAqZGF0YSA9IE5VTEw7XFxuK1xcbitcXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcXHUwMDI2cHRyKTtcXG4rXFx0Y2FsbGVyX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0KmRhdGEgPSAxMjM7XFxuK1xcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXFx1MDAyNnB0ciwgMCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogQSBzbGljZSB0aGF0IGVzY2FwZXMgYSBjbG9uZSdzIGNhbGwgZnJhbWUgaXMgaW52YWxpZCBvbmNlIHRoZSBsb2NhbFxcbisgKiBjbG9uZSBpcyBkZXN0cm95ZWQgb24gcmV0dXJuLlxcbisgKi9cXG4rU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXHRpbnQgKmRhdGEgPSBOVUxMO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK1xcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xcbitcXHRcXHQqZGF0YSA9IDEyMztcXG4rXFx0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcXHUwMDI2cHRyLCAwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWxlYXNpbmcgdGhlIHNoYXJlZCByZXNlcnZhdGlvbiBtdXN0IGludmFsaWRhdGUgYSBzbGljZSB0aGF0IGVzY2FwZWRcXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cXG4rICovXFxuK1NFQyhcXFwiP3Jhd190cFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXFxcIilcXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3JlbGVhc2VfaW52YWxpZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXHRpbnQgKmRhdGEgPSBOVUxMO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK1xcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFxcdTAwMjZwdHIsIDApO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xcbitcXHRcXHQqZGF0YSA9IDEyMztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzXFxuICAqIG9mIGl0cyBwYXJlbnRcXG4gICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjA3LjQzMzA1MjI0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTkyMjM4NzU5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInByZXBhcmVfZnVuY19leGl0XCIsXG4gICAgXCJkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0XCIsXG4gICAgXCJkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBieSBpbnRyb2R1Y2luZyBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0IHRvIHRlYXIgZG93biBjYWxsZWUtbG9jYWwgZHlucHRycyBhbmQgaW52YWxpZGF0ZSBkZXJpdmVkIHNsaWNlcyB3aGVuIGV4aXRpbmcgc3VicHJvZ3JhbXMgaW4gcHJlcGFyZV9mdW5jX2V4aXQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gdmVyaWZpY2F0aW9uIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gdmlhIHN5c19icGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWE3ZWY1N2IxNDVmOWNhNDEzYmE4NmJkZTU3YzY0ZDU5NDkyODdjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjU1OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5jOWMxZGYyN2IyNjk5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC04MDAsNiArODAwLDMxIEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuIFx0cmV0dXJuIHJlZl9jbnQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbit7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4rXG4rXHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcbitcdFx0ICAgICFzbG90LVx1MDAzZXNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXNcbitcdFx0ICogYXdheS4gQXBwbHkgdGhlIG5vcm1hbCBzdGFjay1zbG90IHRlYXJkb3duIHNvIHJlZmVyZW5jZXMgY2Fubm90XG4rXHRcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxuK1x0XHQgKi9cbitcdFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiArMTA0MjQsOSBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4gXHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbiBcdH1cbiBcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuK1x0ZXJyID0gZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuIFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4gXHQgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi9cbiBcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9zbGljZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUuc2tlbC5oXCJcbiBcbkBAIC0yMzAsNiArMjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKVxuIFx0XHR0ZXN0X2luY29tcGxfb3BzKCk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpO1xuK1x0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44MjE3ZjRjNGMwMGM0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbkBAIC0wLDAgKzEsNzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl9xZGlzY19jb21tb24uaFwiXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4raW50IHByb3RvO1xuK1xuK3N0YXRpYyBfX25vaW5saW5lIHN0cnVjdCBldGhoZHIgKnNsaWNlX2luX3N1YnByb2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCBcdTAwMjZwdHIpO1xuK1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IEJQRl9QUk9HKGludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbit7XG4rXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG4rXG4rXHRoZHIgPSBzbGljZV9pbl9zdWJwcm9nKHNrYik7XG4rXHRpZiAoIWhkcikge1xuK1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbitcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4rXHR9XG4rXG4rXHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRwcm90byA9IGhkci1cdTAwM2VoX3Byb3RvO1xuK1xuK1x0YnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7XG4rXG4rXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wc1wiKVxuK19fYXV4aWxpYXJ5XG4rc3RydWN0IHNrX2J1ZmYgKkJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2RlcXVldWUsIHN0cnVjdCBRZGlzYyAqc2NoKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbitpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbitcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X3Jlc2V0LCBzdHJ1Y3QgUWRpc2MgKnNjaClcbit7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwgc3RydWN0IFFkaXNjICpzY2gpXG4re1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wc1wiKVxuK3N0cnVjdCBRZGlzY19vcHMgdGVzdCA9IHtcbitcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuK1x0LmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSxcbitcdC5pbml0ICAgICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2luaXQsXG4rXHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbitcdC5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksXG4rXHQuaWQgICAgICAgID0gXCJicGZfcWRpc2NfdGVzdFwiLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uZjU3ZTYxNjJkYmY1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiBcbiAvKiBBbnkgZHlucHRyIGluaXRpYWxpemVkIHdpdGhpbiBhIGNhbGxiYWNrIG11c3QgaGF2ZSBicGZfZHlucHRyX3B1dCBjYWxsZWQgKi9cbiBTRUMoXCI/cmF3X3RwXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCIpXG4gaW50IHJpbmdidWZfbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrKHZvaWQgKmN0eClcbiB7XG4gXHRicGZfbG9vcCgxMCwgbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrX2ZuLCBOVUxMLCAwKTtcbkBAIC0xODkyLDYgKzE4OTIsMTAxIEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XG4rXG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjYWxsZXJfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuK1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEocHRyLCAwLCBzaXplb2YodmFsKSk7XG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK31cbitcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJlc2VydmVfZHlucHRyX2luX3N1YnByb2codm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rfVxuK1xuKy8qIEEgc3VicHJvZ3JhbSBjYW5ub3QgbG9zZSB0aGUgbGFzdCBkeW5wdHIgdGhhdCBjYW4gcmVsZWFzZSBhIHJlc291cmNlLiAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCIpXG4raW50IHJlZmVyZW5jZWRfZHlucHRyX2xvc3Rfb25fc3VicHJvZ19yZXR1cm4odm9pZCAqY3R4KVxuK3tcbitcdHJlc2VydmVfZHlucHRyX2luX3N1YnByb2coKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERlc3Ryb3lpbmcgYSBsb2NhbCBjbG9uZSBvbiByZXR1cm4gbXVzdCBub3QgaW52YWxpZGF0ZSBhIHNsaWNlIHdob3NlXG4rICogc291cmNlIGR5bnB0ciBiZWxvbmdzIHRvIHRoZSBjYWxsZXIuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXHRpbnQgKmRhdGEgPSBOVUxMO1xuK1xuK1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuK1x0Y2FsbGVyX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIGEgY2xvbmUncyBjYWxsIGZyYW1lIGlzIGludmFsaWQgb25jZSB0aGUgbG9jYWxcbisgKiBjbG9uZSBpcyBkZXN0cm95ZWQgb24gcmV0dXJuLlxuKyAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRcdCpkYXRhID0gMTIzO1xuK1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3JlbGVhc2VfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcdGlmIChkYXRhKVxuK1x0XHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRcdCpkYXRhID0gMTIzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXNcbiAgKiBvZiBpdHMgcGFyZW50XG4gICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTowNy40MzMwNTcwOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTk0MzQyMDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGUgYWRkaXRpb24gb2YgYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXRgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byBgcHJlcGFyZV9mdW5jX2V4aXRgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdDsgYW55dGhpbmcgZGVhbGluZyB3aXRoIGR5bmFtaWMgcG9pbnRlciBtYW5hZ2VtZW50IGluIHRoZSB2ZXJpZmllciBpcyB3b3J0aCBhIGNsb3NlIGxvb2suIE1lbW9yeSBzYWZldHksIGFzIGFsd2F5cywgaXMgcGFyYW1vdW50IGluIHRoaXMgYXJlYS4gV2UgbmVlZCB0byBiZSBhaXJ0aWdodC5cblxuTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBmaXJlIHVwIG15IHRvb2xzIOKAkyByZWFkLWZpbGUgb3IgZ3JlcHBlciB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UuIFdoYXQncyB0aGUgY29udGV4dD8gV2hhdCBwcm9ibGVtIGlzIHRoaXMgZnVuY3Rpb24gYWRkcmVzc2luZywgYW5kIGhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBleGlzdGluZyB2ZXJpZmllciBsb2dpYz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZXhpc3RpbmcgQlBGIHByb2dyYW1zP1xuXG5UaGUgcHJlc2VuY2Ugb2YgbmV3IHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYCBpcyBhIGdvb2Qgc2lnbi4gSXQgc3VnZ2VzdHMgYSBmb2N1c2VkIGVmZm9ydCBvbiB2YWxpZGF0aW5nIHRoZSBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aG9zZSB0ZXN0cyB0aG9yb3VnaGx5IHRvIGVuc3VyZSB0aGV5J3JlIGFkZXF1YXRlbHkgY292ZXJpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhpcyB3aWxsIGJlIG15IG5leHQgc3RlcCBhZnRlciBpbnNwZWN0aW5nIHRoZSBjb3JlIGNvZGUgY2hhbmdlcy4gVmVyaWZpY2F0aW9uIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjI3LjM3NjQ3OTgwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg4NTUwMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzg0PXN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODAzOnN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNTk9c3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDI2LVxcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQyNzpcXHRlcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MjgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6MjcuNDk1MzQxMjQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc1OTI3MzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGlzIGluZm9ybWF0aW9uOlxuXG4qKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgTG9naWM6IEtleSBTZWN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEJQRiB2ZXJpZmllciBjb2RlIGFnYWluLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIExldCdzIHplcm8gaW4gb24gYSBjb3VwbGUgb2YgY3JpdGljYWwgc2VjdGlvbnMuIEZpcnN0LCBsaW5lcyA3OTAtODQwLiBJIGtub3cgdGhpcyBhcmVhIHByb2JhYmx5IGRlYWxzIHdpdGjigKYgKmNoZWNrcyBub3Rlcyog4oCmbGlrZWx5IHNvbWUgYXNwZWN0IG9mIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIG9yIHBlcmhhcHMgY29uc3RyYWludCBwcm9wYWdhdGlvbiwgZ2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0IGNvdWxkIGFsc28gaW52b2x2ZSBhIHNwZWNpZmljIGluc3RydWN0aW9uLXNldCBjaGVjayBvciBwb3RlbnRpYWxseSBhbiBlYXJseSBlcnJvci1wYXRoIGhhbmRsaW5nIHJvdXRpbmUgZm9yIGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBzZXF1ZW5jZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXIgbGl2ZW5lc3Mgb3IgYWRkcmVzcyBzcGFjZSBtYXBwaW5nLCBhc3N1bWluZyB0aGlzIGNvZGUgaXMgc3RpbGwgYWJvdXQgbWVtb3J5IGJvdW5kYXJpZXMgZm9yIGRpcmVjdCBwYWNrZXQgYWNjZXNzLlxuXG5OZXh0LCBJ4oCZbGwgbmVlZCB0byBzd2l0Y2ggZ2VhcnMsIGFuZCBxdWlja2x5IHJldmlldyBsaW5lcyAxMDQyMC0xMDQ0MC4gQWgsIHRoaXMgbG9va3MgbGlrZSBpdCBjb3VsZCBiZSB3aXRoaW4gYSBtdWNoIGxhcmdlciB2ZXJpZmljYXRpb24gcGhhc2UuIEdpdmVuIHRoZSBsaW5lIG51bWJlciwgSSdkIGJldCB0aGlzIGlzIHJlbGF0ZWQgdG8gc29tZXRoaW5nIGRlZXBlciB3aXRoaW4gdGhlIHZlcmlmaWVyJ3MgY29yZSBsb2dpYy4gTWF5YmUgaXQncyBjaGVja2luZyBmb3IgbG9vcCBpbnZhcmlhbnRzIG9yIG1heWJlIGl0J3MgZG9pbmcgYSBmaW5hbCBhbmFseXNpcyBvZiBjb250cm9sIGZsb3cgcGF0aHMgYmVmb3JlIGRlY2xhcmluZyB0aGUgcHJvZ3JhbSBzYWZlLiBQZXJoYXBzIGl0J3MgZGVhbGluZyB3aXRoIGEgdHJpY2t5IGVkZ2UgY2FzZSwgbGlrZSB2YWxpZGF0aW5nIGluZGlyZWN0IGp1bXBzIG9yIG1lbW9yeSBhY2Nlc3NlcyB3aXRoaW4gbG9vcHMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ2xsIGZvY3VzIG9uIHRoZXNlIHR3byBjaHVua3MgYW5kIHNlZSB3aGVyZSB0aGV5IGdldCBtZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZlZWwgZm9yIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIHRoYXQgbmVlZCBpbXByb3ZlbWVudCBvciBvcHRpbWl6YXRpb24gaW4gdGhlIGNvbnRleHQgb2YgcmVjZW50IHBhdGNoZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTozMi4yNTQ2MTc5MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA0MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc5NjpcXHRcXHRcXHRpZiAoc3RhY2stXFx1MDAzZXNwaWxsZWRfcHRyLnBhcmVudF9pZCA9PSB2X3BhcmVudF9pZClcXG4gNzk3OlxcdFxcdFxcdFxcdHJlZl9jbnQrKztcXG4gNzk4OlxcdFxcdH0pKTtcXG4gNzk5OlxcdFxcbiA4MDA6XFx0XFx0cmV0dXJuIHJlZl9jbnQ7XFxuIDgwMTpcXHR9XFxuIDgwMjpcXHRcXG4gODAzOlxcdHN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA4MDQ6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXFxuIDgwNTpcXHR7XFxuIDgwNjpcXHRcXHRpbnQgaSwgZXJyO1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbiA4MDk6XFx0XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxcbiA4MTI6XFx0XFx0XFx0ICAgICFzbG90LVxcdTAwM2VzcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdClcXG4gODEzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRcXHQvKlxcbiA4MTY6XFx0XFx0XFx0ICogQSBjYWxsZWUtbG9jYWwgZHlucHRyIGlzIGRlc3Ryb3llZCB3aGVuIGl0cyBzdGFjayBmcmFtZSBnb2VzXFxuIDgxNzpcXHRcXHRcXHQgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3RcXG4gODE4OlxcdFxcdFxcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxcbiA4MTk6XFx0XFx0XFx0ICovXFxuIDgyMDpcXHRcXHRcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcXG4gODIxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDgyMjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA4MjM6XFx0XFx0fVxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHRyZXR1cm4gMDtcXG4gODI2OlxcdH1cXG4gODI3OlxcdFxcbiA4Mjg6XFx0c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDgyOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuIDgzMDpcXHR7XFxuIDgzMTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gODMyOlxcdFxcbiA4MzM6XFx0XFx0LyogV2UgYWx3YXlzIGVuc3VyZSB0aGF0IFNUQUNLX0RZTlBUUiBpcyBuZXZlciBzZXQgcGFydGlhbGx5LFxcbiA4MzQ6XFx0XFx0ICogaGVuY2UganVzdCBjaGVja2luZyBmb3Igc2xvdF90eXBlWzBdIGlzIGVub3VnaC4gVGhpcyBpc1xcbiA4MzU6XFx0XFx0ICogZGlmZmVyZW50IGZvciBTVEFDS19TUElMTCwgd2hlcmUgaXQgbWF5IGJlIG9ubHkgc2V0IGZvclxcbiA4MzY6XFx0XFx0ICogMSBieXRlLCBzbyBjb2RlIGhhcyB0byB1c2UgaXNfc3BpbGxlZF9yZWcuXFxuIDgzNzpcXHRcXHQgKi9cXG4gODM4OlxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdC8qIFJlcG9zaXRpb24gc3BpIHRvIGZpcnN0IHNsb3QgKi9cXG4gODQyOlxcdFxcdGlmICghc3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3QpXFxuIDg0MzpcXHRcXHRcXHRzcGkgPSBzcGkgKyAxO1xcbiA4NDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjMyLjI1OTIzMjU1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjY1MTAyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBhIENvbXBsZXggQ29kZWJhc2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgZnVuY3Rpb24gZXhpdHMsIHBhcnRpY3VsYXJseSB0aGUgYHByZXBhcmVfZnVuY19leGl0YCBmdW5jdGlvbi4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoaXMgY29kZWJhc2UsIG15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXJvdW5kIGxpbmUgMTA0MjAuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBjdXJyZW50bHkgd29ya2luZyBvbiwgYW5kIGxpa2VseSB3aGVyZSBJIHdpbGwgZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhpdCBwcm9jZWR1cmUgdG8gdmVyaWZ5IHRoZSBiZWhhdmlvciBJIGFtIGV4cGVjdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6MzUuNTg1NzQ2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzAzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDE1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQxNTpcXHRcXHRpZiAoaW5fY2FsbGJhY2tfZm4pXFxuMTA0MTY6XFx0XFx0XFx0Kmluc25faWR4ID0gY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZTtcXG4xMDQxNzpcXHRcXHRlbHNlXFxuMTA0MTg6XFx0XFx0XFx0Kmluc25faWR4ID0gY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZSArIDE7XFxuMTA0MTk6XFx0XFxuMTA0MjA6XFx0XFx0aWYgKGVudi1cXHUwMDNlbG9nLmxldmVsIFxcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xcbjEwNDIxOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwicmV0dXJuaW5nIGZyb20gY2FsbGVlOlxcXFxuXFxcIik7XFxuMTA0MjI6XFx0XFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVlLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4xMDQyMzpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInRvIGNhbGxlciBhdCAlZDpcXFxcblxcXCIsICppbnNuX2lkeCk7XFxuMTA0MjQ6XFx0XFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4xMDQyNTpcXHRcXHR9XFxuMTA0MjY6XFx0XFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XFxuMTA0Mjc6XFx0XFx0ZXJyID0gZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XFxuMTA0Mjg6XFx0XFx0aWYgKGVycilcXG4xMDQyOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEwNDMwOlxcdFxcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xcbjEwNDMxOlxcdFxcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xcbjEwNDMyOlxcdFxcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xcbjEwNDMzOlxcdFxcdHN0YXRlLVxcdTAwM2VmcmFtZVtzdGF0ZS1cXHUwMDNlY3VyZnJhbWUtLV0gPSBOVUxMO1xcbjEwNDM0OlxcdFxcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlcik7XFxuMTA0MzU6XFx0XFxuMTA0MzY6XFx0XFx0LyogZm9yIGNhbGxiYWNrcyB3aWRlbiBpbXByZWNpc2Ugc2NhbGFycyB0byBtYWtlIHByb2dyYW1zIGxpa2UgYmVsb3cgdmVyaWZ5OlxcbjEwNDM3OlxcdFxcdCAqXFxuMTA0Mzg6XFx0XFx0ICogICBzdHJ1Y3QgY3R4IHsgaW50IGk7IH1cXG4xMDQzOTpcXHRcXHQgKiAgIHZvaWQgY2IoaW50IGlkeCwgc3RydWN0IGN0eCAqY3R4KSB7IGN0eC1cXHUwMDNlaSsrOyAuLi4gfVxcbjEwNDQwOlxcdFxcdCAqICAgLi4uXFxuMTA0NDE6XFx0XFx0ICogICBzdHJ1Y3QgY3R4ID0geyAuaSA9IDA7IH1cXG4xMDQ0MjpcXHRcXHQgKiAgIGJwZl9sb29wKDEwMCwgY2IsIFxcdTAwMjZjdHgsIDApO1xcbjEwNDQzOlxcdFxcdCAqXFxuMTA0NDQ6XFx0XFx0ICogVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBpbiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgZm9yIG9wZW5cXG4xMDQ0NTpcXHRcXHQgKiBjb2RlZCBpdGVyYXRvcnMuXFxuMTA0NDY6XFx0XFx0ICovXFxuMTA0NDc6XFx0XFx0cHJldl9zdCA9IGluX2NhbGxiYWNrX2ZuID8gZmluZF9wcmV2X2VudHJ5KGVudiwgc3RhdGUsICppbnNuX2lkeCkgOiBOVUxMO1xcbjEwNDQ4OlxcdFxcdGlmIChwcmV2X3N0KSB7XFxuMTA0NDk6XFx0XFx0XFx0ZXJyID0gd2lkZW5faW1wcmVjaXNlX3NjYWxhcnMoZW52LCBwcmV2X3N0LCBzdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjM1LjU4NzYyMDIyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODg2NjEwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiB2ZXJpZmllciBsb2dpYywgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhpcyBhcyBpbXBvcnRhbnQuIFRoZSB2ZXJpZmllciBpcyBhIGNvcmUgcGllY2Ugb2YgdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCB3ZSBhbGwga25vdyBob3cgaGVhdmlseSBzeXprYWxsZXIgdGFyZ2V0cyB0aGF0IGFyZWEgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCB0aGUgYEJQRl9QUk9HX0xPQURgIGNvbW1hbmQuIFNvLCB0aGUgcXVlc3Rpb24gYXJpc2VzIOKAkyBpcyB0aGlzIGNoYW5nZSBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseSwgeWVzLlxuXG5UaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIG1vZGlmeSBjb2RlIHJlbGF0ZWQgdG8gc3VicHJvZ3JhbSByZXR1cm5zIGFuZCBmdW5jdGlvbiBleGl0cyDigJMgZXNzZW50aWFsbHksIHdoZXJlIHRoZSBgQlBGX0VYSVRgIGluc3RydWN0aW9uIGFuZCB0aGUgYHByZXBhcmVfZnVuY19leGl0YCBmdW5jdGlvbiBjb21lIGludG8gcGxheSDigJMgc3VnZ2VzdHMgdGhlcmUncyBwb3RlbnRpYWxseSByZWFjaGFibGUgY29kZS4gVGhpcyBzcGVjaWZpYyBhZGRpdGlvbiBkZWFscyB3aXRoIHRlYXJkb3duIGxvZ2ljIGZvciBzdGFjayBkeW5hbWljIHBvaW50ZXJzIChgZHlucHRyc2ApIG9uIGZ1bmN0aW9uIGV4aXQsIGNhbGxpbmcgYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXRgIGFuZCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAuIFRoYXQgc21lbGxzIGxpa2UgYSBuZXcgYXR0YWNrIHN1cmZhY2UsIG9yIGF0IGxlYXN0IGEgcGxhY2Ugd2hlcmUgc3VidGxlIGludGVyYWN0aW9ucyBjb3VsZCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBMZXQncyBtYWtlIHN1cmUgdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHRoZSBgQlBGX1NZU0NBTExgIG9wdGlvbiBhcmUgZW5hYmxlZC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBzZWN0aW9ucyBpbiB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgS2NvbmZpZyBmaWxlIHRvIGVuc3VyZSB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYxNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjM5Ljc3NjI4NTI5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNjU2MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcmlmaWVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTo0MC4xMTY5NTA2MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5MTkwOTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEtub3dpbmcgdGhlIGtlcm5lbCdzIEtjb25maWcgc3RydWN0dXJlIGxpa2UgdGhlIGJhY2sgb2YgbXkgaGFuZCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHR3byBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGEgQlBGLXJlbGF0ZWQgc2V0dGluZy4gSXQncyBhbG1vc3QgY2VydGFpbiBpdCdsbCBiZSBpbiBvbmUgb2YgdGhvc2UsIG9yIHBlcmhhcHMgY3Jvc3MtcmVmZXJlbmNlZCBiZXR3ZWVuIHRoZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIHN5c2NhbGwgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTo0My41MDg4NjQ4MzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMTEyMjg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjQzLjU5MDk4NDE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjIyMDg1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIFRocm91Z2ggS2NvbmZpZ3M6IEJQRl9TWVNDQUxMIEh1bnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyBhIGNvbW1vbiB0YXNrLCBidXQgaXTigJlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIGZlYXR1cmUgbGlrZSBCUEYgc3lzY2FsbCBzdXBwb3J0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgYWNyb3NzIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBkZXBlbmRlbmNpZXMsIGFueSBkZWZhdWx0IHZhbHVlcywgYW5kIGltcG9ydGFudGx5LCB3aGVyZSB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgKnVzZWQqLiBJIGNhbid0IGFmZm9yZCB0byB3YXN0ZSB0aW1lIG1hbnVhbGx5IGdyZXAtaW5nIHRocm91Z2ggZXZlcnkgS2NvbmZpZyBmaWxlOyBJIG5lZWQgYSB0YXJnZXRlZCBhbmQgZWZmaWNpZW50IGFwcHJvYWNoLiBMZXTigJlzIGdldCB0byBpdC4gVGltZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6NDUuNjUzMTk2ODk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMzNzc3MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjQ4LjE4Njk3ODk2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ5MzIxNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBCUEYgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIEJQRiBmZWF0dXJlIGVuYWJsZW1lbnQgZmxhZywgb3IgbWF5YmUgSSdtIHRyeWluZyB0byByZWNhbGwgYSByZWxhdGVkIG9wdGlvbiB0aGF0IEkgd2FudCB0byBkb3VibGUtY2hlY2suIENvdWxkIGJlIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aWVkIHRvIGEgc3BlY2lmaWMgQlBGIGhlbHBlciB2ZXJzaW9uLiBJIHN1c3BlY3QgbGluZSAyNyB3aWxsIGxpa2VseSBsZWFkIG1lIHRvIHRoZSBtYWluIGVudHJ5IHBvaW50IG9yIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJIGFtIGhvcGluZyB0byBnZXQgdG8gdGhlIHJvb3QgY2F1c2Ugb2YgYW4gaXNzdWUgSSdtIHdvcmtpbmcgdGhyb3VnaC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlIGJhc2UgY29uZmlndXJhdGlvbiB0aGF0IGFsbCBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gaXMgcmVsaWFudCBvbi4gVGltZSB0byBzZWUgd2hhdCdzIHRoZXJlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjUwLjkzNjMwNjA0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6NTAuOTM2NDA4OTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1OTE2NjM4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgQlBGIHZlcmlmaWVyIGNvZGUgYW5kIHNlZSB3aGVyZSB3ZSdyZSBhdCB3aXRoIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkLCBmb2N1c2luZyBvbiB0aGUgb25lcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBvciBzaWduaWZpY2FudGx5IGFsdGVyZWQuIFRoZSBrZXkgc3ltYm9scyBzZWVtIHRvIGJlIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YCwgYHByZXBhcmVfZnVuY19leGl0YCwgYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgLCBhbmQgYGJwZl9jaGVja2AgKG9yIHBvdGVudGlhbGx5IGBkb19jaGVja2Agb3IgYGNoZWNrX2NmZ2AsIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24pLlxuXG5SaWdodCwgc28gYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXRgIGlzIHN0YXRpYzsgZ29vZCwgdGhhdCBrZWVwcyB0aGluZ3MgcmVsYXRpdmVseSBjb250YWluZWQuIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgYWxzbyBzdGF0aWMsIGFuZCBpdCBsb29rcyBsaWtlIGl04oCZcyBjYWxsZWQgd2l0aGluIGBkb19jaGVja2AuIFRoYXQncyBpbXBvcnRhbnQgdG8gbm90ZSwgYW5kIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCBpcyBhbHNvIHN0YXRpYyBhbmQgaXMgYWxzbyBjYWxsZWQgd2hlbiBzdGFjayBzbG90cyBhcmUgb3ZlcndyaXR0ZW4uIE9rYXksIHRoYXQncyBzb2xpZGlmeWluZyB0aGUgcGljdHVyZSBhIGJpdC4gTm93LCB3aGF0IGFib3V0IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYXJlIHRoZXJlIGFueSBmZWF0dXJlLXNwZWNpZmljIHN5bWJvbHMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgdGhpbmdzP1xuXG5Ob3csIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgaW4gcHJhY3RpY2UsIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgcHJlcGFyZV9mdW5jX2V4aXRgIGFuZCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgYWRkaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMyMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjU1LjUyODA3NjEyNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxMDI2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9mdW5jX2V4aXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzUxPXN0YXRpYyBib29sIHJldHZhbF9yYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzU5OnN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwODQxPXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzQzLVxcdFxcdFxcdCAqIGZyYW1lLiBBIGNhbGxiYWNrIGZyYW1lIGNhbm5vdCBiZSBsZWZ0IHRoYXQgd2F5IGJlY2F1c2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNDQ6XFx0XFx0XFx0ICogcHJlcGFyZV9mdW5jX2V4aXQoKSB3b3VsZCBhcHBseSBpdHMgcmV0dXJuIGNvbnRyYWN0IHRvIHRoZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM0NS1cXHRcXHRcXHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1Ny1cXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNTg6XFx0XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzU5LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczMTY9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Mzk2LVxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM5NzpcXHRcXHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczOTgtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODEwMz1zdGF0aWMgaW50IHByb2Nlc3NfYnBmX2V4aXRfZnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTA5LVxcdC8qIFdlIG11c3QgZG8gY2hlY2tfcmVmZXJlbmNlX2xlYWsgaGVyZSBiZWZvcmVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMTA6XFx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTEtXFx0ICogc3RhdGUtXFx1MDAzZWN1cmZyYW1lIFxcdTAwM2UgMCwgaXQgbWF5IGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTIyOlxcdC8qIFRoZSBzaWRlIGVmZmVjdCBvZiB0aGUgcHJlcGFyZV9mdW5jX2V4aXQgd2hpY2ggaXNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjMtXFx0ICogYmVpbmcgc2tpcHBlZCBpcyB0aGF0IGl0IGZyZWVzIGJwZl9mdW5jX3N0YXRlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTM1LVxcdFxcdC8qIGV4aXQgZnJvbSBuZXN0ZWQgZnVuY3Rpb24gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMzY6XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTM3LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjU1LjYwMTE4NjkwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTU3NDY2MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgQlBGIHZlcmlmaWVyLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBwaW4gZG93biBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludC4gUmlnaHQsIHRoYXQncyBgYnBmX2NoZWNrYCAtIGl0J3MgdGhlIGdhdGVrZWVwZXIsIGxvY2F0ZWQgc3F1YXJlbHkgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIG9idmlvdXM6IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfY2hlY2tgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaXQncyBkb2luZywgaG93IGl0IG9yY2hlc3RyYXRlcyB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGFuZCB3aGF0IGluaXRpYWwgY2hlY2tzIGl0IHBlcmZvcm1zLiBObyBwb2ludCBpbiB3YXN0aW5nIHRpbWU7IGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6NTkuNzU4NjU3ODA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkyNjgyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGJwZl9jaGVja1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTA0Mz1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNjA6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTYxLVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTo1OS44ODc5MzEyMzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NzcwODQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgIGluIGB2ZXJpZmllci5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSdyZSB1c2luZyBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgYW5kIHJlbGF0ZWQgc3ltYm9scyB3aXRoaW4gdGhlIHZlcmlmaWVyLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24sIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBhc3NvY2lhdGVkIHdpdGggaXQgaW4gYHZlcmlmaWVyLmNgLiBNeSBmb2N1cyBpcyB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgZm9yIGR5bmFtaWMgcG9pbnRlciBzdGFjayBzbG90cyB3aXRoaW4gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3csIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIG9yIHBvaW50cyB3aGVyZSB3ZSBtaWdodCBiZSBzZWVpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzLiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3Igb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSBvciBpbXByb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkeW5hbWljIHBvaW50ZXIgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjowMS44NzU2NDI5NThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODQwODc2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MjgtXFx0XFx0XFx0ICogRG9uJ3QgY2xlYXIgc3BlY2lhbCBzbG90cy5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQyOTpcXHRcXHRcXHQgKiBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KCkgbmVlZHMgU1RBQ0tfRFlOUFRSIHRvXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzAtXFx0XFx0XFx0ICogZGV0ZWN0IG92ZXJ3cml0ZXMgYW5kIGludmFsaWRhdGUgYXNzb2NpYXRlZCBkYXRhIHNsaWNlcy5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjE9c3RhdGljIHZvaWQgbWFya19keW5wdHJfY2JfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Njg6c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2OS1cXHRcXHRcXHRcXHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3MT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgzLVxcdC8qIFdlIGNhbm5vdCBhc3N1bWUgYm90aCBzcGkgYW5kIHNwaSAtIDEgYmVsb25nIHRvIHRoZSBzYW1lIGR5bnB0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njg0OlxcdCAqIGhlbmNlIHdlIG5lZWQgdG8gY2FsbCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHR3aWNlIGZvciBib3RoLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODUtXFx0ICogdG8gZW5zdXJlIHRoYXQgZm9yIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTEtXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY5MjpcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5My1cXHRpZiAoZXJyKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTQtXFx0XFx0cmV0dXJuIGVycjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njk1OlxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpIC0gMSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5Ni1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgwMz1zdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTktXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMDpcXHRcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODIxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODI3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4Mjg6c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyOS1cXHRcXHRcXHRcXHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODcwPXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODg4LVxcdCAqIFNUQUNLX0RZTlBUUiBzbG90cywgc2VlIG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyIHdoaWNoIGNhbGxzXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjg4OTpcXHQgKiBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHRvIGVuc3VyZSBkeW5wdHIgb2JqZWN0cyBhdCB0aGUgc2xvdHMgd2UgYXJlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg5MC1cXHQgKiB0b3VjaGluZyBhcmUgY29tcGxldGVseSBkZXN0cnVjdGVkIGJlZm9yZSB3ZSByZWluaXRpYWxpemUgdGhlbSBmb3IgYSBuZXdcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODkxOlxcdCAqIG9uZS4gRm9yIHJlZmVyZW5jZWQgb25lcywgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdCByZXR1cm5zIGFuIGVycm9yIGVhcmx5XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg5Mi1cXHQgKiBpbnN0ZWFkIG9mIGRlbGF5aW5nIGl0IHVudGlsIHRoZSBlbmQgd2hlcmUgdGhlIHVzZXIgd2lsbCBnZXQgXFxcIlVucmVsZWFzZWRcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNTQxPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzU5NDpcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1OTUtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjg0PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3MTMtXFx0XFx0c3BpID0gYnBmX2dldF9zcGkoaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM3MTQ6XFx0XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNzE1LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU2OjAxLjk5NDA1OTY4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTE4MTUxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSB0YWtlOiB0aGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gcHJpb3JpdGl6ZSBmdXp6aW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIFwid29ydGggZnV6emluZyxcIiBhbmQgYWZ0ZXIgYSBkZWVwZXIgZGl2ZSwgSSdtIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCBwcm9wZXIgY2xlYW51cCBhbmQgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBkeW5hbWljIHBvaW50ZXJzLCBvciBcImR5bnB0cnMsXCIgd2hlbiBhIHN1YnByb2dyYW0gZXhpdHMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY3J1Y2lhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdmFsaWRhdGlvbiB3aXRoaW4gYSBoaWdobHkgc2Vuc2l0aXZlIGtlcm5lbCBzdWJzeXN0ZW0uIEFueSBtaXNzdGVwIGhlcmUgY291bGQgbGVhZCB0byBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuXG5cbkkndmUgemVyb2VkIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBicGZfY2hlY2tgLCBgcHJlcGFyZV9mdW5jX2V4aXRgLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAsIGFuZCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjcnVjaWFsIGFzcGVjdHMgb2YgdGhlIHZlcmlmaWVyJ3Mgb3BlcmF0aW9uLiBJIHdhbnQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaW50ZXJhY3QgYW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9ucyBtaWdodCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBlZGdlIGNhc2VzLlxuXG5UbyBtYWtlIHN1cmUgd2UncmUgY292ZXJpbmcgb3VyIGJhc2VzLCBJIG5lZWQgdG8gY29uZmlybSB3ZSdyZSBpbmNsdWRpbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgaW4gdGhlIGVuYWJsZSBjb25maWdzLiBUaGlzIGlzIHRoZSBtYWluIHN3aXRjaCB0aGF0IHR1cm5zIG9uIHRoZSBCUEYgc3lzdGVtIGFuZCB2ZXJpZmllci4gV2l0aG91dCBpdCwgbm9uZSBvZiB0aGlzIGlzIHJlbGV2YW50LlxuXG5TbywgdG8gc3VtbWFyaXplIHN1Y2NpbmN0bHk6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGRlc3RydWN0aW9uIG9mIGNhbGxlZS1sb2NhbCBkeW5hbWljIHBvaW50ZXJzIGFuZCBpbnZhbGlkYXRlIHNsaWNlcyB3aGVuIGEgc3VicHJvZ3JhbSBleGl0cywgdGh1cyBtYWtpbmcgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cbldlIHNob3VsZCBpbW1lZGlhdGVseSBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDYzLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjowNi41MTIyMTQ3ODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3MDU3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgaW50cm9kdWNpbmcgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCB0byB0ZWFyIGRvd24gY2FsbGVlLWxvY2FsIGR5bnB0cnMgYW5kIGludmFsaWRhdGUgZGVyaXZlZCBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIGluIHByZXBhcmVfZnVuY19leGl0LiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIHZlcmlmaWNhdGlvbiBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIHZpYSBzeXNfYnBmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgaW50cm9kdWNpbmcgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCB0byB0ZWFyIGRvd24gY2FsbGVlLWxvY2FsIGR5bnB0cnMgYW5kIGludmFsaWRhdGUgZGVyaXZlZCBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIGluIHByZXBhcmVfZnVuY19leGl0LiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIHZlcmlmaWNhdGlvbiBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIHZpYSBzeXNfYnBmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjowNi42NTY5MzU1NzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTI3MzgxNzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTY6MDYuNjU4MDE3NzQ5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI5MjYyOTYxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYnkgYWRkaW5nIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KClgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCB0byBlbnN1cmUgdGhhdCBkeW5wdHJzIGFsbG9jYXRlZCBvbiBhIGNhbGxlZSdzIHN0YWNrIGZyYW1lIGFyZSBwcm9wZXJseSBkZXN0cnVjdGVkIGFuZCB0aGVpciBkZXJpdmVkIHNsaWNlcyBpbnZhbGlkYXRlZCB3aGVuIHRoZSBzdWJwcm9ncmFtIHJldHVybnMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuXFxuLSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBkZXRlY3QgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2dpYyBidWdzIGluIGtlcm5lbC92ZXJpZmllciB2ZXJpZmljYXRpb24uXFxuXFxuVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaDpcXG4xLiBPcGVyYXRlIHB1cmVseSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllcidzIGNvbXBpbGUtdGltZSBzdGF0aWMgYW5hbHlzaXMgc3RhdGUgbWFjaGluZSAoYGJwZl9mdW5jX3N0YXRlYCkuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlgLCBgZXJyYCkgYW5kIHN0YXRlIGFjY2Vzc2VzIChgY2FsbGVlLVxcdTAwM2VzdGFja1tpXWApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCBieSBgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkVgLlxcbjMuIERvIG5vdCBhbGxvY2F0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWE3ZWY1N2IxNDVmOWNhNDEzYmE4NmJkZTU3YzY0ZDU5NDkyODdjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjU1OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5jOWMxZGYyN2IyNjk5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC04MDAsNiArODAwLDMxIEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuIFx0cmV0dXJuIHJlZl9jbnQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbit7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4rXG4rXHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcbitcdFx0ICAgICFzbG90LVx1MDAzZXNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXNcbitcdFx0ICogYXdheS4gQXBwbHkgdGhlIG5vcm1hbCBzdGFjay1zbG90IHRlYXJkb3duIHNvIHJlZmVyZW5jZXMgY2Fubm90XG4rXHRcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxuK1x0XHQgKi9cbitcdFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiArMTA0MjQsOSBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4gXHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbiBcdH1cbiBcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuK1x0ZXJyID0gZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuIFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4gXHQgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi9cbiBcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9zbGljZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUuc2tlbC5oXCJcbiBcbkBAIC0yMzAsNiArMjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKVxuIFx0XHR0ZXN0X2luY29tcGxfb3BzKCk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpO1xuK1x0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44MjE3ZjRjNGMwMGM0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbkBAIC0wLDAgKzEsNzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl9xZGlzY19jb21tb24uaFwiXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4raW50IHByb3RvO1xuK1xuK3N0YXRpYyBfX25vaW5saW5lIHN0cnVjdCBldGhoZHIgKnNsaWNlX2luX3N1YnByb2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCBcdTAwMjZwdHIpO1xuK1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IEJQRl9QUk9HKGludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbit7XG4rXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG4rXG4rXHRoZHIgPSBzbGljZV9pbl9zdWJwcm9nKHNrYik7XG4rXHRpZiAoIWhkcikge1xuK1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbitcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4rXHR9XG4rXG4rXHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRwcm90byA9IGhkci1cdTAwM2VoX3Byb3RvO1xuK1xuK1x0YnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7XG4rXG4rXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wc1wiKVxuK19fYXV4aWxpYXJ5XG4rc3RydWN0IHNrX2J1ZmYgKkJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2RlcXVldWUsIHN0cnVjdCBRZGlzYyAqc2NoKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbitpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbitcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X3Jlc2V0LCBzdHJ1Y3QgUWRpc2MgKnNjaClcbit7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwgc3RydWN0IFFkaXNjICpzY2gpXG4re1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wc1wiKVxuK3N0cnVjdCBRZGlzY19vcHMgdGVzdCA9IHtcbitcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuK1x0LmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSxcbitcdC5pbml0ICAgICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2luaXQsXG4rXHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbitcdC5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksXG4rXHQuaWQgICAgICAgID0gXCJicGZfcWRpc2NfdGVzdFwiLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uZjU3ZTYxNjJkYmY1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiBcbiAvKiBBbnkgZHlucHRyIGluaXRpYWxpemVkIHdpdGhpbiBhIGNhbGxiYWNrIG11c3QgaGF2ZSBicGZfZHlucHRyX3B1dCBjYWxsZWQgKi9cbiBTRUMoXCI/cmF3X3RwXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCIpXG4gaW50IHJpbmdidWZfbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrKHZvaWQgKmN0eClcbiB7XG4gXHRicGZfbG9vcCgxMCwgbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrX2ZuLCBOVUxMLCAwKTtcbkBAIC0xODkyLDYgKzE4OTIsMTAxIEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XG4rXG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjYWxsZXJfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuK1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEocHRyLCAwLCBzaXplb2YodmFsKSk7XG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK31cbitcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJlc2VydmVfZHlucHRyX2luX3N1YnByb2codm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rfVxuK1xuKy8qIEEgc3VicHJvZ3JhbSBjYW5ub3QgbG9zZSB0aGUgbGFzdCBkeW5wdHIgdGhhdCBjYW4gcmVsZWFzZSBhIHJlc291cmNlLiAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCIpXG4raW50IHJlZmVyZW5jZWRfZHlucHRyX2xvc3Rfb25fc3VicHJvZ19yZXR1cm4odm9pZCAqY3R4KVxuK3tcbitcdHJlc2VydmVfZHlucHRyX2luX3N1YnByb2coKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERlc3Ryb3lpbmcgYSBsb2NhbCBjbG9uZSBvbiByZXR1cm4gbXVzdCBub3QgaW52YWxpZGF0ZSBhIHNsaWNlIHdob3NlXG4rICogc291cmNlIGR5bnB0ciBiZWxvbmdzIHRvIHRoZSBjYWxsZXIuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXHRpbnQgKmRhdGEgPSBOVUxMO1xuK1xuK1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuK1x0Y2FsbGVyX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIGEgY2xvbmUncyBjYWxsIGZyYW1lIGlzIGludmFsaWQgb25jZSB0aGUgbG9jYWxcbisgKiBjbG9uZSBpcyBkZXN0cm95ZWQgb24gcmV0dXJuLlxuKyAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRcdCpkYXRhID0gMTIzO1xuK1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3JlbGVhc2VfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcdGlmIChkYXRhKVxuK1x0XHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRcdCpkYXRhID0gMTIzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXNcbiAgKiBvZiBpdHMgcGFyZW50XG4gICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjowNi42NTgwMjA2NTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0MTY1MDUyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQncyB3b3J0aCB0aHJvd2luZyBLTVNBTiBhdC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyB0b3VjaGVkLiBBaCwgaXQncyBtb2RpZnlpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGFsc28gYWRkaW5nIHNvbWUgQlBGIHNlbGZ0ZXN0cywgaW50ZXJlc3RpbmcuIFRoYXQgYXJlYSBhbHdheXMgbWFrZXMgbWUgYSBsaXR0bGUgY2F1dGlvdXMuXG5cbkxldCBtZSBkaWcgaW50byBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgZnVuY3Rpb25zIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YCBhbmQgYHByZXBhcmVfZnVuY19leGl0YC4gVGhvc2UgYXJlIGtleSBzcG90cyBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSdsbCBmaXJlIHVwIGBncmVwcGVyYCAob3IgYHJlYWQtZmlsZWAsIGRlcGVuZGluZyBvbiBteSBtb29kKSBhbmQgZ2V0IGEgZGV0YWlsZWQgdmlldyBvZiB3aGF0J3MgZ29pbmcgb24gdGhlcmUuIEZyb20gdGhpcyBJIGNhbiBzZWUgd2hhdCBpcyBiZWluZyBhZGRlZCBhbmQgb3IgbW9kaWZpZWQgaW4gcmVsYXRpb24gdG8gZHluYW1pYyBwb2ludGVycywgd2hpY2ggaXMgd2hlcmUgS01TQU4gd2lsbCBnaXZlIHRoZSBtb3N0IHZhbHVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTY6MTguMDc0NTMwNTI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDgwODgyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY2MT1zdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9jYl9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2ODpzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY5LVxcdFxcdFxcdFxcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjcxPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODMtXFx0LyogV2UgY2Fubm90IGFzc3VtZSBib3RoIHNwaSBhbmQgc3BpIC0gMSBiZWxvbmcgdG8gdGhlIHNhbWUgZHlucHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODQ6XFx0ICogaGVuY2Ugd2UgbmVlZCB0byBjYWxsIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdHdpY2UgZm9yIGJvdGgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4NS1cXHQgKiB0byBlbnN1cmUgdGhhdCBmb3IgdGhlIGZvbGxvd2luZyBleGFtcGxlOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MS1cXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjkyOlxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjkzLVxcdGlmIChlcnIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5NC1cXHRcXHRyZXR1cm4gZXJyO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTU6XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkgLSAxKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjk2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODAzPXN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODIwOlxcdFxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBjYWxsZWUsIGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyODpzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODI5LVxcdFxcdFxcdFxcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NzA9c3RhdGljIGJvb2wgaXNfZHlucHRyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODgtXFx0ICogU1RBQ0tfRFlOUFRSIHNsb3RzLCBzZWUgbWFya19zdGFja19zbG90c19keW5wdHIgd2hpY2ggY2FsbHNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODg5OlxcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdG8gZW5zdXJlIGR5bnB0ciBvYmplY3RzIGF0IHRoZSBzbG90cyB3ZSBhcmVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODkwLVxcdCAqIHRvdWNoaW5nIGFyZSBjb21wbGV0ZWx5IGRlc3RydWN0ZWQgYmVmb3JlIHdlIHJlaW5pdGlhbGl6ZSB0aGVtIGZvciBhIG5ld1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4OTE6XFx0ICogb25lLiBGb3IgcmVmZXJlbmNlZCBvbmVzLCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHJldHVybnMgYW4gZXJyb3IgZWFybHlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODkyLVxcdCAqIGluc3RlYWQgb2YgZGVsYXlpbmcgaXQgdW50aWwgdGhlIGVuZCB3aGVyZSB0aGUgdXNlciB3aWxsIGdldCBcXFwiVW5yZWxlYXNlZFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1NDE9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTkzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTk0OlxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5NS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM2ODQ9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzcxMy1cXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzcxNDpcXHRcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3MTUtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTY6MTguMzgyNjIzNzQyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5OTM2ODc2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGFzIEkgdW5kZXJzdGFuZCB0aGVtOlxuXG4qKkRpc3NlY3RpbmcgQlBGIEZ1bmN0aW9uIEV4aXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgZnVuY3Rpb24gZXhpdHMg4oCTIHNwZWNpZmljYWxseSwgdGhlIGNsZWFudXAgb3BlcmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIGBwcmVwYXJlX2Z1bmNfZXhpdGAgYW5kIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YC4gSSdtIGdvaW5nIHRvIGNvbnN1bHQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgY29udGV4dCwgZm9jdXNpbmcgb24gbGluZXMgODAwIGFuZCAxMDQwMCBmb3IgYSBzdGFydC5cblxuRnJvbSB0aGUgZnVuY3Rpb24gbmFtZXMsIEkgaW5mZXIgdGhhdCBgcHJlcGFyZV9mdW5jX2V4aXRgIGlzIGxpa2VseSBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgYSBmdW5jdGlvbidzIHJldHVybiwgbWF5YmUgdXBkYXRpbmcgc29tZSBzdGF0ZSBvciBwZXJmb3JtaW5nIGluaXRpYWwgY2xlYW51cCB0YXNrcyAqYmVmb3JlKiB0aGUgYWN0dWFsIGV4aXQuIE9uIHRoZSBvdGhlciBoYW5kLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgc2NyZWFtcyBhYm91dCBjbGVhbmluZyB1cCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcG9pbnRlcnMg4oCTIEJQRiBwcm9ncmFtcyBjYW4gYmUgc29waGlzdGljYXRlZCwgYW5kIHRoYXQgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgaGFuZGxlZCBkdXJpbmcgZnVuY3Rpb24gcmV0dXJucyB0byBhdm9pZCBsZWFrcyBvciBjb3JydXB0aW9uLiBUaGlzIHByb2JhYmx5IGludm9sdmVzIGZyZWVpbmcgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBkeW5hbWljIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gYSBCUEYgZnVuY3Rpb24uIEkgc3VzcGVjdCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgaXMgZ29pbmcgdG8gYmUgdGhlIG1vcmUgY29tcGxleCBvZiB0aGUgdHdvLCBlc3BlY2lhbGx5IGlmIHRoZSBCUEYgcHJvZ3JhbSB1c2VzIHBvdGVudGlhbGx5IG5lc3RlZCBvciBjeWNsaWNhbCBwb2ludGVyIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyB0aGVzZSBkeW5hbWljIHBvaW50ZXJzIGFuZCBob3cgaXQgdmFsaWRhdGVzIHRoZWlyIGNsZWFudXAuIEl04oCZcyBwb3NzaWJsZSB0aGVyZSBhcmUgY2hlY2tzIG9uIHRoZSB2ZXJpZmllciBzdGFjayBkdXJpbmcgdGhlIGV4aXQgdG8gZW5zdXJlIGFsbCByZXNvdXJjZXMgYXJlIGRlYWxsb2NhdGVkIGFzIGRlc2lnbmVkLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoZXNlIGZ1bmN0aW9uIGFkZHJlc3MuIExldCdzIHNlZSB3aGF0IHRoZSBhY3R1YWwgY29kZSBzYXlzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjoyMS4zNzYzMTQyOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0cmV0dXJuIHJlZl9jbnQ7XFxuIDgwMTpcXHR9XFxuIDgwMjpcXHRcXG4gODAzOlxcdHN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA4MDQ6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXFxuIDgwNTpcXHR7XFxuIDgwNjpcXHRcXHRpbnQgaSwgZXJyO1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbiA4MDk6XFx0XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxcbiA4MTI6XFx0XFx0XFx0ICAgICFzbG90LVxcdTAwM2VzcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdClcXG4gODEzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRcXHQvKlxcbiA4MTY6XFx0XFx0XFx0ICogQSBjYWxsZWUtbG9jYWwgZHlucHRyIGlzIGRlc3Ryb3llZCB3aGVuIGl0cyBzdGFjayBmcmFtZSBnb2VzXFxuIDgxNzpcXHRcXHRcXHQgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3RcXG4gODE4OlxcdFxcdFxcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxcbiA4MTk6XFx0XFx0XFx0ICovXFxuIDgyMDpcXHRcXHRcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcXG4gODIxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDgyMjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA4MjM6XFx0XFx0fVxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHRyZXR1cm4gMDtcXG4gODI2OlxcdH1cXG4gODI3OlxcdFxcbiA4Mjg6XFx0c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDgyOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuIDgzMDpcXHR7XFxuIDgzMTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gODMyOlxcdFxcbiA4MzM6XFx0XFx0LyogV2UgYWx3YXlzIGVuc3VyZSB0aGF0IFNUQUNLX0RZTlBUUiBpcyBuZXZlciBzZXQgcGFydGlhbGx5LFxcbiA4MzQ6XFx0XFx0ICogaGVuY2UganVzdCBjaGVja2luZyBmb3Igc2xvdF90eXBlWzBdIGlzIGVub3VnaC4gVGhpcyBpc1xcbiA4MzU6XFx0XFx0ICogZGlmZmVyZW50IGZvciBTVEFDS19TUElMTCwgd2hlcmUgaXQgbWF5IGJlIG9ubHkgc2V0IGZvclxcbiA4MzY6XFx0XFx0ICogMSBieXRlLCBzbyBjb2RlIGhhcyB0byB1c2UgaXNfc3BpbGxlZF9yZWcuXFxuIDgzNzpcXHRcXHQgKi9cXG4gODM4OlxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdC8qIFJlcG9zaXRpb24gc3BpIHRvIGZpcnN0IHNsb3QgKi9cXG4gODQyOlxcdFxcdGlmICghc3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3QpXFxuIDg0MzpcXHRcXHRcXHRzcGkgPSBzcGkgKyAxO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHQvKlxcbiA4NDY6XFx0XFx0ICogQSByZWZlcmVuY2VkIGR5bnB0ciBjYW4gYmUgb3ZlcndyaXR0ZW4gb25seSBpZiB0aGVyZSBpcyBhdFxcbiA4NDc6XFx0XFx0ICogbGVhc3Qgb25lIG90aGVyIGR5bnB0ciBzaGFyaW5nIHRoZSBzYW1lIHZpcnR1YWwgcmVmIHBhcmVudCxcXG4gODQ4OlxcdFxcdCAqIGVuc3VyaW5nIHRoZSByZWZlcmVuY2UgY2FuIHN0aWxsIGJlIHByb3Blcmx5IHJlbGVhc2VkLlxcbiA4NDk6XFx0XFx0ICovXFxuIDg1MDpcXHRcXHRpZiAoZHlucHRyX3R5cGVfcmVmZXJlbmNlZChzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5keW5wdHIudHlwZSkgXFx1MDAyNlxcdTAwMjZcXG4gODUxOlxcdFxcdCAgICBkeW5wdHJfcmVmX2NudChlbnYsIHN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLnBhcmVudF9pZCkgXFx1MDAzYz0gMSkge1xcbiA4NTI6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXFxcXG5cXFwiKTtcXG4gODUzOlxcdFxcdFxcdGJwZl9kaWFnX3JlcyhcXG4gODU0OlxcdFxcdFxcdFxcdGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgXFxcInJlZmVyZW5jZWQgZHlucHRyIG92ZXJ3cml0ZVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU2OjIxLjM3NzQ2MzczMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODMwNjYzMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBzb21lIGNvZGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3IgZHluYW1pYyBwb2ludGVycywgYW5kIEknbSBxdWl0ZSBmYW1pbGlhciB3aXRoIHRoZSBmdW5jdGlvbiBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGA6XG5cbioqTGV0J3MgRGlnIGludG8gYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIHRoZSBwdXp6bGUuLi4gSSdtIHByZXR0eSBzdXJlIEkga25vdyB3aGF0IGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCAqc2hvdWxkKiBiZSBkb2luZywgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCB3aGVyZSBpdCdzIHByb2JhYmx5IGJlaW5nIHVzZWQuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGNsZWFuaW5nIHVwLCBkZWFsbG9jYXRpbmcsIG9yIGF0IGxlYXN0IHJlc2V0dGluZyBzb21lIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnksIGxpa2VseSBwb2ludGVycyByZXNpZGluZyBvbiB0aGUgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgZGV0YWlscywgdGhvdWdoLCB0byBlbnN1cmUgSSdtIHJlbWVtYmVyaW5nIHRoZSBzcGVjaWZpY3MgY29ycmVjdGx5LiBJJ3ZlIGdvdCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyB3aG9sZSBzeXN0ZW0gd29ya3Mg4oCTIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgc3RhY2ssIGhlYXAsIHRoZXNlIGR5bmFtaWMgcG9pbnRlcnMg4oCTIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgIGZ1bmN0aW9uIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBhbmQgdGhhdCBpdCdzIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4gTGV0J3MgZ2V0IHRoZSBmdWxsIGNvbnRleHQgdG8gc2VlIGhvdyBpdCBpcyBzdXBwb3NlZCB0byBiZSB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjoyNC4yMDgxMzE1NzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMDEyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODU1OlxcdFxcdFxcdFxcdFxcXCJUaGlzIHN0YWNrIHNsb3QgY29udGFpbnMgYSBkeW5wdHIgdGhhdCBvd25zIG9yIHByb3RlY3RzIGEgcmVmZXJlbmNlZCByZXNvdXJjZS4gT3ZlcndyaXRpbmcgdGhlIGxhc3QgZHlucHRyIGZvciB0aGF0IHJlc291cmNlIHdvdWxkIGxvc2UgdGhlIHZlcmlmaWVyLXRyYWNrZWQgcmVsZWFzZSBwYXRoLlxcXCIsXFxuIDg1NjpcXHRcXHRcXHRcXHRcXFwiUmVsZWFzZSBvciBjbG9uZSB0aGUgZHlucHRyIHNvIGFub3RoZXIgbGl2ZSBkeW5wdHIgc3RpbGwgdHJhY2tzIHRoZSByZWZlcmVuY2VkIHJlc291cmNlIGJlZm9yZSBvdmVyd3JpdGluZyB0aGlzIHN0YWNrIHNsb3QuXFxcIik7XFxuIDg1NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODU4OlxcdFxcdH1cXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0LyogSW52YWxpZGF0ZSB0aGUgZHlucHRyIGFuZCBhbnkgZGVyaXZlZCBzbGljZXMgKi9cXG4gODYxOlxcdFxcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuaWQpO1xcbiA4NjI6XFx0XFx0aWYgKCFlcnIpIHtcXG4gODYzOlxcdFxcdFxcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkpO1xcbiA4NjQ6XFx0XFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIDEpO1xcbiA4NjU6XFx0XFx0fVxcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRyZXR1cm4gZXJyO1xcbiA4Njg6XFx0fVxcbiA4Njk6XFx0XFxuIDg3MDpcXHRzdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiA4NzE6XFx0e1xcbiA4NzI6XFx0XFx0aW50IHNwaTtcXG4gODczOlxcdFxcbiA4NzQ6XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSA9PSBDT05TVF9QVFJfVE9fRFlOUFRSKVxcbiA4NzU6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XFxuIDg3ODpcXHRcXG4gODc5OlxcdFxcdC8qIC1FUkFOR0UgKGkuZS4gc3BpIG5vdCBmYWxsaW5nIGludG8gYWxsb2NhdGVkIHN0YWNrIHNsb3RzKSBpc24ndCBhblxcbiA4ODA6XFx0XFx0ICogZXJyb3IgYmVjYXVzZSB0aGlzIGp1c3QgbWVhbnMgdGhlIHN0YWNrIHN0YXRlIGhhc24ndCBiZWVuIHVwZGF0ZWQgeWV0LlxcbiA4ODE6XFx0XFx0ICogV2Ugd2lsbCBkbyBjaGVja19tZW1fYWNjZXNzIHRvIGNoZWNrIGFuZCB1cGRhdGUgc3RhY2sgYm91bmRzIGxhdGVyLlxcbiA4ODI6XFx0XFx0ICovXFxuIDg4MzpcXHRcXHRpZiAoc3BpIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBzcGkgIT0gLUVSQU5HRSlcXG4gODg0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODg1OlxcdFxcbiA4ODY6XFx0XFx0LyogV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgc3RhY2sgc2xvdHMgYXJlIG1hcmtlZCBieSBwcmV2aW91c1xcbiA4ODc6XFx0XFx0ICogZHlucHRyIGluaXRpYWxpemF0aW9ucyBiZWNhdXNlIHdlIGFsbG93IG92ZXJ3cml0aW5nIGV4aXN0aW5nIHVucmVmZXJlbmNlZFxcbiA4ODg6XFx0XFx0ICogU1RBQ0tfRFlOUFRSIHNsb3RzLCBzZWUgbWFya19zdGFja19zbG90c19keW5wdHIgd2hpY2ggY2FsbHNcXG4gODg5OlxcdFxcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdG8gZW5zdXJlIGR5bnB0ciBvYmplY3RzIGF0IHRoZSBzbG90cyB3ZSBhcmVcXG4gODkwOlxcdFxcdCAqIHRvdWNoaW5nIGFyZSBjb21wbGV0ZWx5IGRlc3RydWN0ZWQgYmVmb3JlIHdlIHJlaW5pdGlhbGl6ZSB0aGVtIGZvciBhIG5ld1xcbiA4OTE6XFx0XFx0ICogb25lLiBGb3IgcmVmZXJlbmNlZCBvbmVzLCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHJldHVybnMgYW4gZXJyb3IgZWFybHlcXG4gODkyOlxcdFxcdCAqIGluc3RlYWQgb2YgZGVsYXlpbmcgaXQgdW50aWwgdGhlIGVuZCB3aGVyZSB0aGUgdXNlciB3aWxsIGdldCBcXFwiVW5yZWxlYXNlZFxcbiA4OTM6XFx0XFx0ICogcmVmZXJlbmNlXFxcIiBlcnJvci5cXG4gODk0OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjoyNC4yMTAwNjkzMTVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODAwOTg0MTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHByZXBhcmVfZnVuY19leGl0YCBpbiBDb250ZXh0KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYHByZXBhcmVfZnVuY19leGl0YC4gTGV0J3MgemVybyBpbiBvbiBhcm91bmQgbGluZSAxMDQyNC4gVGhhdCBzaG91bGQgcHV0IG1lIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB3aGF0J3MgZ29pbmcgb24uIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgY2xlYW51cCBkdXJpbmcgZnVuY3Rpb24gZXhpdHMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY2FzZSBvZiBzb21ldGhpbmcgbGlrZSBhIHN0YWNrIHVud2luZGluZywgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLCBvciBleGNlcHRpb24gaGFuZGxpbmcuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgbGFuZ3VhZ2UgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHN0YWNrIGZyYW1lIG1hbmFnZW1lbnQuIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQncyBiZWluZyBwYXNzZWQgaW4gYW5kIGV4YWN0bHkgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhlc2UgYXJndW1lbnRzIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIG9yIHRvIHVwZGF0ZSB0aGUgY29udHJvbCBmbG93LCBwZXJoYXBzIHVzaW5nIGEganVtcCB0YWJsZSBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZXJlIG1pZ2h0IGJlIGludGVyYWN0aW9ucyB3aXRoIGEgZGVidWdnZXIgb3IgcHJvZmlsZXIgaGVyZSBhcyB3ZWxsLiBJIGhvcGUgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYXJvdW5kIHRoaXMgc2VjdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODg3MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTY6MzIuMjE5OTE0MDk3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjE0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQxMDpcXHRcXHQvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsXFxuMTA0MTE6XFx0XFx0ICogdGhlcmUgZnVuY3Rpb24gY2FsbCBsb2dpYyB3b3VsZCByZXNjaGVkdWxlIGNhbGxiYWNrIHZpc2l0LiBJZiBpdGVyYXRpb25cXG4xMDQxMjpcXHRcXHQgKiBjb252ZXJnZXMgaXNfc3RhdGVfdmlzaXRlZCgpIHdvdWxkIHBydW5lIHRoYXQgdmlzaXQgZXZlbnR1YWxseS5cXG4xMDQxMzpcXHRcXHQgKi9cXG4xMDQxNDpcXHRcXHRpbl9jYWxsYmFja19mbiA9IGNhbGxlZS1cXHUwMDNlaW5fY2FsbGJhY2tfZm47XFxuMTA0MTU6XFx0XFx0aWYgKGluX2NhbGxiYWNrX2ZuKVxcbjEwNDE2OlxcdFxcdFxcdCppbnNuX2lkeCA9IGNhbGxlZS1cXHUwMDNlY2FsbHNpdGU7XFxuMTA0MTc6XFx0XFx0ZWxzZVxcbjEwNDE4OlxcdFxcdFxcdCppbnNuX2lkeCA9IGNhbGxlZS1cXHUwMDNlY2FsbHNpdGUgKyAxO1xcbjEwNDE5OlxcdFxcbjEwNDIwOlxcdFxcdGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwpIHtcXG4xMDQyMTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInJldHVybmluZyBmcm9tIGNhbGxlZTpcXFxcblxcXCIpO1xcbjEwNDIyOlxcdFxcdFxcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlZS1cXHUwMDNlZnJhbWVubywgdHJ1ZSk7XFxuMTA0MjM6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ0byBjYWxsZXIgYXQgJWQ6XFxcXG5cXFwiLCAqaW5zbl9pZHgpO1xcbjEwNDI0OlxcdFxcdFxcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cXHUwMDNlZnJhbWVubywgdHJ1ZSk7XFxuMTA0MjU6XFx0XFx0fVxcbjEwNDI2OlxcdFxcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xcbjEwNDI3OlxcdFxcdGVyciA9IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbjEwNDI4OlxcdFxcdGlmIChlcnIpXFxuMTA0Mjk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMDQzMDpcXHRcXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcXG4xMDQzMTpcXHRcXHQgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi9cXG4xMDQzMjpcXHRcXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcXG4xMDQzMzpcXHRcXHRzdGF0ZS1cXHUwMDNlZnJhbWVbc3RhdGUtXFx1MDAzZWN1cmZyYW1lLS1dID0gTlVMTDtcXG4xMDQzNDpcXHRcXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjYWxsZXIpO1xcbjEwNDM1OlxcdFxcbjEwNDM2OlxcdFxcdC8qIGZvciBjYWxsYmFja3Mgd2lkZW4gaW1wcmVjaXNlIHNjYWxhcnMgdG8gbWFrZSBwcm9ncmFtcyBsaWtlIGJlbG93IHZlcmlmeTpcXG4xMDQzNzpcXHRcXHQgKlxcbjEwNDM4OlxcdFxcdCAqICAgc3RydWN0IGN0eCB7IGludCBpOyB9XFxuMTA0Mzk6XFx0XFx0ICogICB2b2lkIGNiKGludCBpZHgsIHN0cnVjdCBjdHggKmN0eCkgeyBjdHgtXFx1MDAzZWkrKzsgLi4uIH1cXG4xMDQ0MDpcXHRcXHQgKiAgIC4uLlxcbjEwNDQxOlxcdFxcdCAqICAgc3RydWN0IGN0eCA9IHsgLmkgPSAwOyB9XFxuMTA0NDI6XFx0XFx0ICogICBicGZfbG9vcCgxMDAsIGNiLCBcXHUwMDI2Y3R4LCAwKTtcXG4xMDQ0MzpcXHRcXHQgKlxcbjEwNDQ0OlxcdFxcdCAqIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IGlzIGRvbmUgaW4gcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGZvciBvcGVuXFxuMTA0NDU6XFx0XFx0ICogY29kZWQgaXRlcmF0b3JzLlxcbjEwNDQ2OlxcdFxcdCAqL1xcbjEwNDQ3OlxcdFxcdHByZXZfc3QgPSBpbl9jYWxsYmFja19mbiA/IGZpbmRfcHJldl9lbnRyeShlbnYsIHN0YXRlLCAqaW5zbl9pZHgpIDogTlVMTDtcXG4xMDQ0ODpcXHRcXHRpZiAocHJldl9zdCkge1xcbjEwNDQ5OlxcdFxcdFxcdGVyciA9IHdpZGVuX2ltcHJlY2lzZV9zY2FsYXJzKGVudiwgcHJldl9zdCwgc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjozMi4yMjE2ODMxNDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM2MjYwOTI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSaXNrIEFzc2Vzc21lbnQ6IEJQRiBWZXJpZmllciBEeW5wdHIgQ2xlYW51cCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoLCBkZWFsaW5nIHdpdGggQlBGIHZlcmlmaWVyIGR5bnB0ciBjbGVhbnVwLCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBjYXJlZnVsbHksIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIEtNU0FOIGlzc3Vlcy5cblxuRmlyc3QsIHRoZSBwYXRjaCdzIGNvcmUgZnVuY3Rpb24sIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YCwgZm9jdXNlcyBvbiBjbGVhbmluZyB1cCBkeW5wdHJzIG9uIGEgY2FsbGVlJ3Mgc3RhY2sgZnJhbWUgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIHN0YWNrLCBjaGVja3MgZm9yIGBTVEFDS19EWU5QVFJgIHNsb3RzLCBhbmQgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZXMuIEl0J3MgYWxsIGhhcHBlbmluZyAqd2l0aGluKiB0aGUgdmVyaWZpZXIncyBzdGF0aWMgYW5hbHlzaXMsIG5vdCBkdXJpbmcgcnVudGltZSBleGVjdXRpb24gb2YgYSBCUEYgcHJvZ3JhbS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBjYW4gdGhpcyBpbnRyb2R1Y2Uga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgS01TQU4/XG5cblRoZSBLTVNBTiBjcml0ZXJpYSBhcmUgZnJlc2ggaW4gbXkgbWluZDoga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHVuaW5pdGlhbGl6ZWQgZmllbGQgcmVhZHMsIGFuZCBib3VuZHMgaXNzdWVzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcy5cblxuTG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb2RlLCBgaWAgYW5kIGBlcnJgIGFyZSBsb2NhbCwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMuIGBpYCBpcyB1c2VkIHRvIGluZGV4IHRocm91Z2ggdGhlIHN0YWNrLCBhbmQgdGhlIGNvZGUgb25seSByZWFkcyBpbml0aWFsaXplZCBmaWVsZHMgKGBzbG90X3R5cGVbMF1gLCBgc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3RgKS4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGNvcGllcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgc3RhdGljIGFuYWx5c2lzIGF0IHZlcmlmaWNhdGlvbiB0aW1lLCBub3QgcnVuIHRpbWUgZXhlY3V0aW9uLiBJdCBpcyBhbGwgYm91bmRlZCBieSBgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFja2AuXG5cblRoZSBgY2FsbGVlLVx1MDAzZXN0YWNrYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyB2ZXJpZmllciBzdGF0ZSBjcmVhdGlvbjsgdGhlIGBzbG90X3R5cGVgIGlzIGFsc28gaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBkYW5nbGluZyBzbGljZSBhY2Nlc3NlcyBpbiB2ZXJpZmllZCBCUEYgcHJvZ3JhbXMsIHdoaWNoIGFyZSBydW50aW1lIHNhZmV0eSBidWdzIGNhdWdodCBieSB2ZXJpZmllciBvciBLQVNBTiwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IGNyZWF0ZSBhbnkgS01TQU4gY29uY2VybnMuIEl0J3MgYWJvdXQgdGlnaHRlbmluZyB2ZXJpZmljYXRpb24sIG5vdCBydW50aW1lIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtpbmcgaW5mb3JtYXRpb24uIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG9yIHN0YW5kYXJkIEtBU0FOIHZlcmlmaWVyIHRlc3RzKSBhcmUgYXBwcm9wcmlhdGUuIEknbSBjb25maWRlbnQgYWJvdXQgdGhpcy5cblxuVG8gY2VtZW50IHRoZSByZWFzb25pbmcsIEknbGwgZW1waGFzaXplIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtNU0FOIGFuZCBLQVNBTi4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgcmVhZHMgYW5kIGxlYWtzOyBLQVNBTiBpcyBmb3IgdGhlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIFRoZSBjb2RlIGFkZGVkLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCgpYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB3aXRoaW4gYHByZXBhcmVfZnVuY19leGl0KClgLCBvbmx5IHRvdWNoZXMgQlBGIHZlcmlmaWVyIHN0YXRpYyBhbmFseXNpcywgY2xlYW5pbmcgdXAgZHlucHRycy4gVGhlIHZlcmlmaWVyIGNvZGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQuIFRodXMsIEkgc3RhbmQgYnkgbXkgJ05lZWRzS01TQU4gPSBmYWxzZScgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyOCwiT3V0cHV0VG9rZW5zIjozMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjozOS41ODQyOTUxMTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYnkgYWRkaW5nIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KClgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCB0byBlbnN1cmUgdGhhdCBkeW5wdHJzIGFsbG9jYXRlZCBvbiBhIGNhbGxlZSdzIHN0YWNrIGZyYW1lIGFyZSBwcm9wZXJseSBkZXN0cnVjdGVkIGFuZCB0aGVpciBkZXJpdmVkIHNsaWNlcyBpbnZhbGlkYXRlZCB3aGVuIHRoZSBzdWJwcm9ncmFtIHJldHVybnMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuXFxuLSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBkZXRlY3QgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2dpYyBidWdzIGluIGtlcm5lbC92ZXJpZmllciB2ZXJpZmljYXRpb24uXFxuXFxuVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaDpcXG4xLiBPcGVyYXRlIHB1cmVseSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllcidzIGNvbXBpbGUtdGltZSBzdGF0aWMgYW5hbHlzaXMgc3RhdGUgbWFjaGluZSAoYGJwZl9mdW5jX3N0YXRlYCkuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlgLCBgZXJyYCkgYW5kIHN0YXRlIGFjY2Vzc2VzIChgY2FsbGVlLVxcdTAwM2VzdGFja1tpXWApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCBieSBgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkVgLlxcbjMuIERvIG5vdCBhbGxvY2F0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBieSBhZGRpbmcgYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoKWAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgYHByZXBhcmVfZnVuY19leGl0KClgIHRvIGVuc3VyZSB0aGF0IGR5bnB0cnMgYWxsb2NhdGVkIG9uIGEgY2FsbGVlJ3Mgc3RhY2sgZnJhbWUgYXJlIHByb3Blcmx5IGRlc3RydWN0ZWQgYW5kIHRoZWlyIGRlcml2ZWQgc2xpY2VzIGludmFsaWRhdGVkIHdoZW4gdGhlIHN1YnByb2dyYW0gcmV0dXJucy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS5cXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGRldGVjdCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGxvZ2ljIGJ1Z3MgaW4ga2VybmVsL3ZlcmlmaWVyIHZlcmlmaWNhdGlvbi5cXG5cXG5UaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOlxcbjEuIE9wZXJhdGUgcHVyZWx5IHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgY29tcGlsZS10aW1lIHN0YXRpYyBhbmFseXNpcyBzdGF0ZSBtYWNoaW5lIChgYnBmX2Z1bmNfc3RhdGVgKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaWAsIGBlcnJgKSBhbmQgc3RhdGUgYWNjZXNzZXMgKGBjYWxsZWUtXFx1MDAzZXN0YWNrW2ldYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBib3VuZGVkIGJ5IGBjYWxsZWUtXFx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRWAuXFxuMy4gRG8gbm90IGFsbG9jYXRlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IGNvcHlfdG9fdXNlciBwYXRocywgb3IgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 08:53:07 +0000 UTC FinishedAt: 2026-09-11 08:56:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e4a62833adff6ef0fe7c0b90393204fe3c26b5c5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "d38877b7-4aaf-40ad-938d-9ca42ee61495" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "prepare_func_exit", "destroy_dynptrs_on_func_exit", "destroy_if_dynptr_stack_slot" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O3ByZXBhcmVfZnVuY19leGl0JiMzNDssCiAgICAmIzM0O2Rlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7ZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYnkgYWRkaW5nIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KClgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCB0byBlbnN1cmUgdGhhdCBkeW5wdHJzIGFsbG9jYXRlZCBvbiBhIGNhbGxlZSYjMzk7cyBzdGFjayBmcmFtZSBhcmUgcHJvcGVybHkgZGVzdHJ1Y3RlZCBhbmQgdGhlaXIgZGVyaXZlZCBzbGljZXMgaW52YWxpZGF0ZWQgd2hlbiB0aGUgc3VicHJvZ3JhbSByZXR1cm5zLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLlxuLSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBkZXRlY3QgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2dpYyBidWdzIGluIGtlcm5lbC92ZXJpZmllciB2ZXJpZmljYXRpb24uXG5cblRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2g6XG4xLiBPcGVyYXRlIHB1cmVseSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBjb21waWxlLXRpbWUgc3RhdGljIGFuYWx5c2lzIHN0YXRlIG1hY2hpbmUgKGBicGZfZnVuY19zdGF0ZWApLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlgLCBgZXJyYCkgYW5kIHN0YXRlIGFjY2Vzc2VzIChgY2FsbGVlLVx1MDAzZXN0YWNrW2ldYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBib3VuZGVkIGJ5IGBjYWxsZWUtXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFYC5cbjMuIERvIG5vdCBhbGxvY2F0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGludHJvZHVjaW5nIGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQgdG8gdGVhciBkb3duIGNhbGxlZS1sb2NhbCBkeW5wdHJzIGFuZCBpbnZhbGlkYXRlIGRlcml2ZWQgc2xpY2VzIHdoZW4gZXhpdGluZyBzdWJwcm9ncmFtcyBpbiBwcmVwYXJlX2Z1bmNfZXhpdC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSB2ZXJpZmljYXRpb24gbG9naWMgZXhlY3V0ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiB2aWEgc3lzX2JwZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlhN2VmNTdiMTQ1ZjljYTQxM2JhODZiZGU1N2M2NGQ1OTQ5Mjg3YzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo1NTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmM5YzFkZjI3YjI2OTkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTgwMCw2ICYjNDM7ODAwLDMxIEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuIFx0cmV0dXJuIHJlZl9jbnQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuJiM0MztcdFx0ICAgICFzbG90LVx1MDAzZXNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSBjYWxsZWUtbG9jYWwgZHlucHRyIGlzIGRlc3Ryb3llZCB3aGVuIGl0cyBzdGFjayBmcmFtZSBnb2VzXG4mIzQzO1x0XHQgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3RcbiYjNDM7XHRcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiAmIzQzOzEwNDI0LDkgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4gXHR9XG4gXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbiYjNDM7XHRlcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuIFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4gXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG5pbmRleCA2ZGJkMTQ4NzM0M2MwLi4xMjJlY2I3ZTk4ZTJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmhcJiMzNDtcbiBcbkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZClcbiBcdFx0dGVzdF9pbmNvbXBsX29wcygpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lKTtcbiYjNDM7XHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyMTdmNGM0YzAwYzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xuQEAgLTAsMCAmIzQzOzEsNzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfZXhwZXJpbWVudGFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2NvbW1vbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgcHJvdG87XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2lubGluZSBzdHJ1Y3QgZXRoaGRyICpzbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsIFx1MDAyNnB0cik7XG4mIzQzO1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhoZHIgKmhkcjtcbiYjNDM7XG4mIzQzO1x0aGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpO1xuJiM0MztcdGlmICghaGRyKSB7XG4mIzQzO1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbiYjNDM7XHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xuJiM0MztcdHByb3RvID0gaGRyLVx1MDAzZWhfcHJvdG87XG4mIzQzO1xuJiM0MztcdGJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO19fYXV4aWxpYXJ5XG4mIzQzO3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbiYjNDM7X19hdXhpbGlhcnlcbiYjNDM7aW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO19fYXV4aWxpYXJ5XG4mIzQzO3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzdHJ1Y3Rfb3BzXCYjMzQ7KVxuJiM0MztfX2F1eGlsaWFyeVxuJiM0Mzt2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbiYjNDM7c3RydWN0IFFkaXNjX29wcyB0ZXN0ID0ge1xuJiM0MztcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuJiM0MztcdC5kZXF1ZXVlICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2RlcXVldWUsXG4mIzQzO1x0LmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCxcbiYjNDM7XHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbiYjNDM7XHQuZGVzdHJveSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXN0cm95LFxuJiM0MztcdC5pZCAgICAgICAgPSBcJiMzNDticGZfcWRpc2NfdGVzdFwmIzM0OyxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi5mNTdlNjE2MmRiZjViIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtMTI3LDcgJiM0MzsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiBcbiAvKiBBbnkgZHlucHRyIGluaXRpYWxpemVkIHdpdGhpbiBhIGNhbGxiYWNrIG11c3QgaGF2ZSBicGZfZHlucHRyX3B1dCBjYWxsZWQgKi9cbiBTRUMoXCYjMzQ7P3Jhd190cFwmIzM0Oylcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWRcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCYjMzQ7KVxuIGludCByaW5nYnVmX21pc3NpbmdfcmVsZWFzZV9jYWxsYmFjayh2b2lkICpjdHgpXG4ge1xuIFx0YnBmX2xvb3AoMTAsIG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbiwgTlVMTCwgMCk7XG5AQCAtMTg5Miw2ICYjNDM7MTg5MiwxMDEgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcbiYjNDM7XG4mIzQzO1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbiYjNDM7XHQqZGF0YSA9IGJwZl9keW5wdHJfZGF0YShcdTAwMjZjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIGNhbGxlcl9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcbiYjNDM7XG4mIzQzO1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEocHRyLCAwLCBzaXplb2YodmFsKSk7XG4mIzQzO1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCByZXNlcnZlX2R5bnB0cl9pbl9zdWJwcm9nKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQSBzdWJwcm9ncmFtIGNhbm5vdCBsb3NlIHRoZSBsYXN0IGR5bnB0ciB0aGF0IGNhbiByZWxlYXNlIGEgcmVzb3VyY2UuICovXG4mIzQzO1NFQyhcJiMzNDs/cmF3X3RwXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7Y2Fubm90IG92ZXJ3cml0ZSByZWZlcmVuY2VkIGR5bnB0clwmIzM0OylcbiYjNDM7aW50IHJlZmVyZW5jZWRfZHlucHRyX2xvc3Rfb25fc3VicHJvZ19yZXR1cm4odm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmVzZXJ2ZV9keW5wdHJfaW5fc3VicHJvZygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRGVzdHJveWluZyBhIGxvY2FsIGNsb25lIG9uIHJldHVybiBtdXN0IG5vdCBpbnZhbGlkYXRlIGEgc2xpY2Ugd2hvc2VcbiYjNDM7ICogc291cmNlIGR5bnB0ciBiZWxvbmdzIHRvIHRoZSBjYWxsZXIuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbiYjNDM7XHRpbnQgKmRhdGEgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4mIzQzO1x0Y2FsbGVyX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAoZGF0YSlcbiYjNDM7XHRcdCpkYXRhID0gMTIzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIGEgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZSBpcyBpbnZhbGlkIG9uY2UgdGhlIGxvY2FsXG4mIzQzOyAqIGNsb25lIGlzIGRlc3Ryb3llZCBvbiByZXR1cm4uXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1x0aW50ICpkYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuJiM0MztcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAoZGF0YSlcbiYjNDM7XHRcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbiYjNDM7XHRcdCpkYXRhID0gMTIzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZFxuJiM0MzsgKiBmcm9tIGEgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDs/cmF3X3RwXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTtcJiMzNDspXG4mIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9yZWxlYXNlX2ludmFsaWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuJiM0MztcdGludCAqZGF0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbiYjNDM7XHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4mIzQzO1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuJiM0MztcdGlmIChkYXRhKVxuJiM0MztcdFx0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xuJiM0MztcdFx0KmRhdGEgPSAxMjM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXNcbiAgKiBvZiBpdHMgcGFyZW50XG4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7ZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgaW50cm9kdWNpbmcgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCB0byB0ZWFyIGRvd24gY2FsbGVlLWxvY2FsIGR5bnB0cnMgYW5kIGludmFsaWRhdGUgZGVyaXZlZCBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIGluIHByZXBhcmVfZnVuY19leGl0LiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIHZlcmlmaWNhdGlvbiBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIHZpYSBzeXNfYnBmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWE3ZWY1N2IxNDVmOWNhNDEzYmE4NmJkZTU3YzY0ZDU5NDkyODdjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjU1OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDcyYTNmNTk5OGRkMjcuLmM5YzFkZjI3YjI2OTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTgwMCw2ICYjNDM7ODAwLDMxIEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKQogCXJldHVybiByZWZfY250OwogfQogCiYjNDM7c3RhdGljIGludCBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCQlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSkKJiM0Mzt7CiYjNDM7CWludCBpLCBlcnI7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjYWxsZWUtJmd0O2FsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSAmYW1wO2NhbGxlZS0mZ3Q7c3RhY2tbaV07CiYjNDM7CiYjNDM7CQlpZiAoc2xvdC0mZ3Q7c2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fAomIzQzOwkJICAgICFzbG90LSZndDtzcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXMKJiM0MzsJCSAqIGF3YXkuIEFwcGx5IHRoZSBub3JtYWwgc3RhY2stc2xvdCB0ZWFyZG93biBzbyByZWZlcmVuY2VzIGNhbm5vdAomIzQzOwkJICogYmUgbG9zdCBhbmQgc2xpY2VzIGRlcml2ZWQgZnJvbSB0aGF0IGR5bnB0ciBhcmUgaW52YWxpZGF0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBjYWxsZWUsIGkpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSkKIHsKQEAgLTEwMzk5LDYgJiM0MzsxMDQyNCw5IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeCkKIAkJcHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLSZndDtmcmFtZW5vLCB0cnVlKTsKIAl9CiAJYWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7CiYjNDM7CWVyciA9IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKIAkvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmcKIAkgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi8KIAlmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKaW5kZXggNmRiZDE0ODczNDNjMC4uMTIyZWNiN2U5OGUyYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2Uuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lLnNrZWwuaCYjMzQ7CiAKQEAgLTIzMCw2ICYjNDM7MjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKQogCQl0ZXN0X2luY29tcGxfb3BzKCk7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZSk7CiYjNDM7CVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uODIxN2Y0YzRjMDBjNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYwpAQCAtMCwwICYjNDM7MSw3NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfcWRpc2NfY29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO2ludCBwcm90bzsKJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSBzdHJ1Y3QgZXRoaGRyICpzbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsICZhbXA7cHRyKTsKJiM0MzsJcmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoJmFtcDtwdHIsIDAsIE5VTEwsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhoZHIgKmhkcjsKJiM0MzsKJiM0MzsJaGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpOwomIzQzOwlpZiAoIWhkcikgewomIzQzOwkJYnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7CiYjNDM7CQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiB0aGlzIHNob3VsZCBmYWlsICovCiYjNDM7CXByb3RvID0gaGRyLSZndDtoX3Byb3RvOwomIzQzOwomIzQzOwlicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2F1eGlsaWFyeQomIzQzO3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaCkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKJiM0MzsJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7dm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9yZXNldCwgc3RydWN0IFFkaXNjICpzY2gpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0Mzt2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMmIzM0OykKJiM0MztzdHJ1Y3QgUWRpc2Nfb3BzIHRlc3QgPSB7CiYjNDM7CS5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLAomIzQzOwkuZGVxdWV1ZSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLAomIzQzOwkuaW5pdCAgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9pbml0LAomIzQzOwkucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCwKJiM0MzsJLmRlc3Ryb3kgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwKJiM0MzsJLmlkICAgICAgICA9ICYjMzQ7YnBmX3FkaXNjX3Rlc3QmIzM0OywKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwppbmRleCAxY2Q2MWQ3MmMxNjZmLi5mNTdlNjE2MmRiZjViIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwpAQCAtMTI3LDcgJiM0MzsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSkKIAogLyogQW55IGR5bnB0ciBpbml0aWFsaXplZCB3aXRoaW4gYSBjYWxsYmFjayBtdXN0IGhhdmUgYnBmX2R5bnB0cl9wdXQgY2FsbGVkICovCiBTRUMoJiMzNDs/cmF3X3RwJiMzNDspCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCBvdmVyd3JpdGUgcmVmZXJlbmNlZCBkeW5wdHImIzM0OykKIGludCByaW5nYnVmX21pc3NpbmdfcmVsZWFzZV9jYWxsYmFjayh2b2lkICpjdHgpCiB7CiAJYnBmX2xvb3AoMTAsIG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbiwgTlVMTCwgMCk7CkBAIC0xODkyLDYgJiM0MzsxODkyLDEwMSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9jbG9uZShwdHIsICZhbXA7Y2xvbmUpOwomIzQzOwkqZGF0YSA9IGJwZl9keW5wdHJfZGF0YSgmYW1wO2Nsb25lLCAwLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2FsbGVyX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIGNsb25lOwomIzQzOwomIzQzOwkqZGF0YSA9IGJwZl9keW5wdHJfZGF0YShwdHIsIDAsIHNpemVvZih2YWwpKTsKJiM0MzsJYnBmX2R5bnB0cl9jbG9uZShwdHIsICZhbXA7Y2xvbmUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIHJlc2VydmVfZHlucHRyX2luX3N1YnByb2codm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBzdWJwcm9ncmFtIGNhbm5vdCBsb3NlIHRoZSBsYXN0IGR5bnB0ciB0aGF0IGNhbiByZWxlYXNlIGEgcmVzb3VyY2UuICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2Nhbm5vdCBvdmVyd3JpdGUgcmVmZXJlbmNlZCBkeW5wdHImIzM0OykKJiM0MztpbnQgcmVmZXJlbmNlZF9keW5wdHJfbG9zdF9vbl9zdWJwcm9nX3JldHVybih2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXNlcnZlX2R5bnB0cl9pbl9zdWJwcm9nKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERlc3Ryb3lpbmcgYSBsb2NhbCBjbG9uZSBvbiByZXR1cm4gbXVzdCBub3QgaW52YWxpZGF0ZSBhIHNsaWNlIHdob3NlCiYjNDM7ICogc291cmNlIGR5bnB0ciBiZWxvbmdzIHRvIHRoZSBjYWxsZXIuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2FsbGVyX3NsaWNlX2luX3N1YnByb2coJmFtcDtwdHIsICZhbXA7ZGF0YSk7CiYjNDM7CWlmIChkYXRhKQomIzQzOwkJKmRhdGEgPSAxMjM7CiYjNDM7CWJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoJmFtcDtwdHIsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIHNsaWNlIHRoYXQgZXNjYXBlcyBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUgaXMgaW52YWxpZCBvbmNlIHRoZSBsb2NhbAomIzQzOyAqIGNsb25lIGlzIGRlc3Ryb3llZCBvbiByZXR1cm4uCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCS8qIHRoaXMgc2hvdWxkIGZhaWwgKi8KJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkCiYjNDM7ICogZnJvbSBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3JlbGVhc2VfaW52YWxpZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CWludCAqZGF0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKCZhbXA7cmluZ2J1ZiwgdmFsLCAwLCAmYW1wO3B0cik7CiYjNDM7CWNsb25lX3NsaWNlX2luX3N1YnByb2coJmFtcDtwdHIsICZhbXA7ZGF0YSk7CiYjNDM7CWJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoJmFtcDtwdHIsIDApOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCS8qIHRoaXMgc2hvdWxkIGZhaWwgKi8KJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzCiAgKiBvZiBpdHMgcGFyZW50CiAgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhlIGFkZGl0aW9uIG9mIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YCBhbmQgaXRzIGludGVncmF0aW9uIGludG8gYHByZXBhcmVfZnVuY19leGl0YC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3Q7IGFueXRoaW5nIGRlYWxpbmcgd2l0aCBkeW5hbWljIHBvaW50ZXIgbWFuYWdlbWVudCBpbiB0aGUgdmVyaWZpZXIgaXMgd29ydGggYSBjbG9zZSBsb29rLiBNZW1vcnkgc2FmZXR5LCBhcyBhbHdheXMsIGlzIHBhcmFtb3VudCBpbiB0aGlzIGFyZWEuIFdlIG5lZWQgdG8gYmUgYWlydGlnaHQuCgpNeSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGZpcmUgdXAgbXkgdG9vbHMg4oCTIHJlYWQtZmlsZSBvciBncmVwcGVyIHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNoYW5nZS4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBwcm9ibGVtIGlzIHRoaXMgZnVuY3Rpb24gYWRkcmVzc2luZywgYW5kIGhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBleGlzdGluZyB2ZXJpZmllciBsb2dpYz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZXhpc3RpbmcgQlBGIHByb2dyYW1zPwoKVGhlIHByZXNlbmNlIG9mIG5ldyB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AgaXMgYSBnb29kIHNpZ24uIEl0IHN1Z2dlc3RzIGEgZm9jdXNlZCBlZmZvcnQgb24gdmFsaWRhdGluZyB0aGUgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRob3NlIHRlc3RzIHRob3JvdWdobHkgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIGFkZXF1YXRlbHkgY292ZXJpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhpcyB3aWxsIGJlIG15IG5leHQgc3RlcCBhZnRlciBpbnNwZWN0aW5nIHRoZSBjb3JlIGNvZGUgY2hhbmdlcy4gVmVyaWZpY2F0aW9uIGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTc4ND1zdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjgwMzpzdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQtXHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1OT1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDI2LVx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0Mjc6XHRlcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQyOC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHByb2Nlc3NpbmcgdGhpcyBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBMb2dpYzogS2V5IFNlY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEJQRiB2ZXJpZmllciBjb2RlIGFnYWluLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhIGNvdXBsZSBvZiBjcml0aWNhbCBzZWN0aW9ucy4gRmlyc3QsIGxpbmVzIDc5MC04NDAuIEkga25vdyB0aGlzIGFyZWEgcHJvYmFibHkgZGVhbHMgd2l0aOKApiAqY2hlY2tzIG5vdGVzKiDigKZsaWtlbHkgc29tZSBhc3BlY3Qgb2YgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgb3IgcGVyaGFwcyBjb25zdHJhaW50IHByb3BhZ2F0aW9uLCBnaXZlbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSXQgY291bGQgYWxzbyBpbnZvbHZlIGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24tc2V0IGNoZWNrIG9yIHBvdGVudGlhbGx5IGFuIGVhcmx5IGVycm9yLXBhdGggaGFuZGxpbmcgcm91dGluZSBmb3IgYSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIHNlcXVlbmNlLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXIgbGl2ZW5lc3Mgb3IgYWRkcmVzcyBzcGFjZSBtYXBwaW5nLCBhc3N1bWluZyB0aGlzIGNvZGUgaXMgc3RpbGwgYWJvdXQgbWVtb3J5IGJvdW5kYXJpZXMgZm9yIGRpcmVjdCBwYWNrZXQgYWNjZXNzLgoKTmV4dCwgSeKAmWxsIG5lZWQgdG8gc3dpdGNoIGdlYXJzLCBhbmQgcXVpY2tseSByZXZpZXcgbGluZXMgMTA0MjAtMTA0NDAuIEFoLCB0aGlzIGxvb2tzIGxpa2UgaXQgY291bGQgYmUgd2l0aGluIGEgbXVjaCBsYXJnZXIgdmVyaWZpY2F0aW9uIHBoYXNlLiBHaXZlbiB0aGUgbGluZSBudW1iZXIsIEkmIzM5O2QgYmV0IHRoaXMgaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgZGVlcGVyIHdpdGhpbiB0aGUgdmVyaWZpZXImIzM5O3MgY29yZSBsb2dpYy4gTWF5YmUgaXQmIzM5O3MgY2hlY2tpbmcgZm9yIGxvb3AgaW52YXJpYW50cyBvciBtYXliZSBpdCYjMzk7cyBkb2luZyBhIGZpbmFsIGFuYWx5c2lzIG9mIGNvbnRyb2wgZmxvdyBwYXRocyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBwcm9ncmFtIHNhZmUuIFBlcmhhcHMgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgdHJpY2t5IGVkZ2UgY2FzZSwgbGlrZSB2YWxpZGF0aW5nIGluZGlyZWN0IGp1bXBzIG9yIG1lbW9yeSBhY2Nlc3NlcyB3aXRoaW4gbG9vcHMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSB0d28gY2h1bmtzIGFuZCBzZWUgd2hlcmUgdGhleSBnZXQgbWUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmZWVsIGZvciB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyB0aGF0IG5lZWQgaW1wcm92ZW1lbnQgb3Igb3B0aW1pemF0aW9uIGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBwYXRjaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTU6XHRcdFx0XHRjb250aW51ZTtcbiA3OTY6XHRcdFx0aWYgKHN0YWNrLVx1MDAzZXNwaWxsZWRfcHRyLnBhcmVudF9pZCA9PSB2X3BhcmVudF9pZClcbiA3OTc6XHRcdFx0XHRyZWZfY250JiM0MzsmIzQzOztcbiA3OTg6XHRcdH0pKTtcbiA3OTk6XHRcbiA4MDA6XHRcdHJldHVybiByZWZfY250O1xuIDgwMTpcdH1cbiA4MDI6XHRcbiA4MDM6XHRzdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA4MDQ6XHRcdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXG4gODA1Olx0e1xuIDgwNjpcdFx0aW50IGksIGVycjtcbiA4MDc6XHRcbiA4MDg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4gODA5Olx0XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4gODEwOlx0XG4gODExOlx0XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcbiA4MTI6XHRcdFx0ICAgICFzbG90LVx1MDAzZXNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuIDgxMzpcdFx0XHRcdGNvbnRpbnVlO1xuIDgxNDpcdFxuIDgxNTpcdFx0XHQvKlxuIDgxNjpcdFx0XHQgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXNcbiA4MTc6XHRcdFx0ICogYXdheS4gQXBwbHkgdGhlIG5vcm1hbCBzdGFjay1zbG90IHRlYXJkb3duIHNvIHJlZmVyZW5jZXMgY2Fubm90XG4gODE4Olx0XHRcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxuIDgxOTpcdFx0XHQgKi9cbiA4MjA6XHRcdFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XG4gODIxOlx0XHRcdGlmIChlcnIpXG4gODIyOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA4MjM6XHRcdH1cbiA4MjQ6XHRcbiA4MjU6XHRcdHJldHVybiAwO1xuIDgyNjpcdH1cbiA4Mjc6XHRcbiA4Mjg6XHRzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiA4Mjk6XHRcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiA4MzA6XHR7XG4gODMxOlx0XHRpbnQgZXJyID0gMDtcbiA4MzI6XHRcbiA4MzM6XHRcdC8qIFdlIGFsd2F5cyBlbnN1cmUgdGhhdCBTVEFDS19EWU5QVFIgaXMgbmV2ZXIgc2V0IHBhcnRpYWxseSxcbiA4MzQ6XHRcdCAqIGhlbmNlIGp1c3QgY2hlY2tpbmcgZm9yIHNsb3RfdHlwZVswXSBpcyBlbm91Z2guIFRoaXMgaXNcbiA4MzU6XHRcdCAqIGRpZmZlcmVudCBmb3IgU1RBQ0tfU1BJTEwsIHdoZXJlIGl0IG1heSBiZSBvbmx5IHNldCBmb3JcbiA4MzY6XHRcdCAqIDEgYnl0ZSwgc28gY29kZSBoYXMgdG8gdXNlIGlzX3NwaWxsZWRfcmVnLlxuIDgzNzpcdFx0ICovXG4gODM4Olx0XHRpZiAoc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSKVxuIDgzOTpcdFx0XHRyZXR1cm4gMDtcbiA4NDA6XHRcbiA4NDE6XHRcdC8qIFJlcG9zaXRpb24gc3BpIHRvIGZpcnN0IHNsb3QgKi9cbiA4NDI6XHRcdGlmICghc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdClcbiA4NDM6XHRcdFx0c3BpID0gc3BpICYjNDM7IDE7XG4gODQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBhIENvbXBsZXggQ29kZWJhc2UqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIGZ1bmN0aW9uIGV4aXRzLCBwYXJ0aWN1bGFybHkgdGhlIGBwcmVwYXJlX2Z1bmNfZXhpdGAgZnVuY3Rpb24uIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGlzIGNvZGViYXNlLCBteSBpbnN0aW5jdCBpcyB0byBsb29rIGFyb3VuZCBsaW5lIDEwNDIwLiBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCBJJiMzOTttIGN1cnJlbnRseSB3b3JraW5nIG9uLCBhbmQgbGlrZWx5IHdoZXJlIEkgd2lsbCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhpdCBwcm9jZWR1cmUgdG8gdmVyaWZ5IHRoZSBiZWhhdmlvciBJIGFtIGV4cGVjdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDE1Olx0XHRpZiAoaW5fY2FsbGJhY2tfZm4pXG4xMDQxNjpcdFx0XHQqaW5zbl9pZHggPSBjYWxsZWUtXHUwMDNlY2FsbHNpdGU7XG4xMDQxNzpcdFx0ZWxzZVxuMTA0MTg6XHRcdFx0Kmluc25faWR4ID0gY2FsbGVlLVx1MDAzZWNhbGxzaXRlICYjNDM7IDE7XG4xMDQxOTpcdFxuMTA0MjA6XHRcdGlmIChlbnYtXHUwMDNlbG9nLmxldmVsIFx1MDAyNiBCUEZfTE9HX0xFVkVMKSB7XG4xMDQyMTpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7cmV0dXJuaW5nIGZyb20gY2FsbGVlOlxcblwmIzM0Oyk7XG4xMDQyMjpcdFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZWUtXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4xMDQyMzpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7dG8gY2FsbGVyIGF0ICVkOlxcblwmIzM0OywgKmluc25faWR4KTtcbjEwNDI0Olx0XHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbjEwNDI1Olx0XHR9XG4xMDQyNjpcdFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG4xMDQyNzpcdFx0ZXJyID0gZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4xMDQyODpcdFx0aWYgKGVycilcbjEwNDI5Olx0XHRcdHJldHVybiBlcnI7XG4xMDQzMDpcdFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4xMDQzMTpcdFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4xMDQzMjpcdFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG4xMDQzMzpcdFx0c3RhdGUtXHUwMDNlZnJhbWVbc3RhdGUtXHUwMDNlY3VyZnJhbWUtLV0gPSBOVUxMO1xuMTA0MzQ6XHRcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlcik7XG4xMDQzNTpcdFxuMTA0MzY6XHRcdC8qIGZvciBjYWxsYmFja3Mgd2lkZW4gaW1wcmVjaXNlIHNjYWxhcnMgdG8gbWFrZSBwcm9ncmFtcyBsaWtlIGJlbG93IHZlcmlmeTpcbjEwNDM3Olx0XHQgKlxuMTA0Mzg6XHRcdCAqICAgc3RydWN0IGN0eCB7IGludCBpOyB9XG4xMDQzOTpcdFx0ICogICB2b2lkIGNiKGludCBpZHgsIHN0cnVjdCBjdHggKmN0eCkgeyBjdHgtXHUwMDNlaSYjNDM7JiM0Mzs7IC4uLiB9XG4xMDQ0MDpcdFx0ICogICAuLi5cbjEwNDQxOlx0XHQgKiAgIHN0cnVjdCBjdHggPSB7IC5pID0gMDsgfVxuMTA0NDI6XHRcdCAqICAgYnBmX2xvb3AoMTAwLCBjYiwgXHUwMDI2Y3R4LCAwKTtcbjEwNDQzOlx0XHQgKlxuMTA0NDQ6XHRcdCAqIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IGlzIGRvbmUgaW4gcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGZvciBvcGVuXG4xMDQ0NTpcdFx0ICogY29kZWQgaXRlcmF0b3JzLlxuMTA0NDY6XHRcdCAqL1xuMTA0NDc6XHRcdHByZXZfc3QgPSBpbl9jYWxsYmFja19mbiA/IGZpbmRfcHJldl9lbnRyeShlbnYsIHN0YXRlLCAqaW5zbl9pZHgpIDogTlVMTDtcbjEwNDQ4Olx0XHRpZiAocHJldl9zdCkge1xuMTA0NDk6XHRcdFx0ZXJyID0gd2lkZW5faW1wcmVjaXNlX3NjYWxhcnMoZW52LCBwcmV2X3N0LCBzdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiB2ZXJpZmllciBsb2dpYywgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhpcyBhcyBpbXBvcnRhbnQuIFRoZSB2ZXJpZmllciBpcyBhIGNvcmUgcGllY2Ugb2YgdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCB3ZSBhbGwga25vdyBob3cgaGVhdmlseSBzeXprYWxsZXIgdGFyZ2V0cyB0aGF0IGFyZWEgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCB0aGUgYEJQRl9QUk9HX0xPQURgIGNvbW1hbmQuIFNvLCB0aGUgcXVlc3Rpb24gYXJpc2VzIOKAkyBpcyB0aGlzIGNoYW5nZSBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseSwgeWVzLgoKVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBtb2RpZnkgY29kZSByZWxhdGVkIHRvIHN1YnByb2dyYW0gcmV0dXJucyBhbmQgZnVuY3Rpb24gZXhpdHMg4oCTIGVzc2VudGlhbGx5LCB3aGVyZSB0aGUgYEJQRl9FWElUYCBpbnN0cnVjdGlvbiBhbmQgdGhlIGBwcmVwYXJlX2Z1bmNfZXhpdGAgZnVuY3Rpb24gY29tZSBpbnRvIHBsYXkg4oCTIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlLiBUaGlzIHNwZWNpZmljIGFkZGl0aW9uIGRlYWxzIHdpdGggdGVhcmRvd24gbG9naWMgZm9yIHN0YWNrIGR5bmFtaWMgcG9pbnRlcnMgKGBkeW5wdHJzYCkgb24gZnVuY3Rpb24gZXhpdCwgY2FsbGluZyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgYW5kIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YC4gVGhhdCBzbWVsbHMgbGlrZSBhIG5ldyBhdHRhY2sgc3VyZmFjZSwgb3IgYXQgbGVhc3QgYSBwbGFjZSB3aGVyZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBCUEYgc3Vic3lzdGVtIGFuZCB0aGUgYEJQRl9TWVNDQUxMYCBvcHRpb24gYXJlIGVuYWJsZWQuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgaW4gdGhlIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIEtjb25maWcgZmlsZSB0byBlbnN1cmUgdGhlIHNwZWNpZmljIGNvZGUgcGF0aHMgYXJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZlcmlmaWVyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxua2VybmVsL2JwZi9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBLbm93aW5nIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzdHJ1Y3R1cmUgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdHdvIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgbG9va2luZyBmb3IgYSBCUEYtcmVsYXRlZCBzZXR0aW5nLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7bGwgYmUgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jZWQgYmV0d2VlbiB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIFRocm91Z2ggS2NvbmZpZ3M6IEJQRl9TWVNDQUxMIEh1bnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGBCUEZfU1lTQ0FMTGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBjb21tb24gdGFzaywgYnV0IGl04oCZcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBmZWF0dXJlIGxpa2UgQlBGIHN5c2NhbGwgc3VwcG9ydCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBhY3Jvc3MgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGRlcGVuZGVuY2llcywgYW55IGRlZmF1bHQgdmFsdWVzLCBhbmQgaW1wb3J0YW50bHksIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBpcyAqdXNlZCouIEkgY2FuJiMzOTt0IGFmZm9yZCB0byB3YXN0ZSB0aW1lIG1hbnVhbGx5IGdyZXAtaW5nIHRocm91Z2ggZXZlcnkgS2NvbmZpZyBmaWxlOyBJIG5lZWQgYSB0YXJnZXRlZCBhbmQgZWZmaWNpZW50IGFwcHJvYWNoLiBMZXTigJlzIGdldCB0byBpdC4gVGltZSB0byBleHBsb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEJQRiBLY29uZmlnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIEJQRiBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjcuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhlIGNvcmUgQlBGIGZlYXR1cmUgZW5hYmxlbWVudCBmbGFnLCBvciBtYXliZSBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgYSByZWxhdGVkIG9wdGlvbiB0aGF0IEkgd2FudCB0byBkb3VibGUtY2hlY2suIENvdWxkIGJlIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aWVkIHRvIGEgc3BlY2lmaWMgQlBGIGhlbHBlciB2ZXJzaW9uLiBJIHN1c3BlY3QgbGluZSAyNyB3aWxsIGxpa2VseSBsZWFkIG1lIHRvIHRoZSBtYWluIGVudHJ5IHBvaW50IG9yIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJIGFtIGhvcGluZyB0byBnZXQgdG8gdGhlIHJvb3QgY2F1c2Ugb2YgYW4gaXNzdWUgSSYjMzk7bSB3b3JraW5nIHRocm91Z2guIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gcHJvdmlkZSB0aGUgYmFzZSBjb25maWd1cmF0aW9uIHRoYXQgYWxsIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBpcyByZWxpYW50IG9uLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHRoZXJlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDI1Olx0bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIEJQRl9TWVNDQUxMXG4gIDI4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuICAyOTpcdFx0c2VsZWN0IEJQRlxuICAzMDpcdFx0c2VsZWN0IElSUV9XT1JLXG4gIDMxOlx0XHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcbiAgMzI6XHRcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcbiAgMzM6XHRcdHNlbGVjdCBCSU5BUllfUFJJTlRGXG4gIDM0Olx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxuICAzNTpcdFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG4gIDM2Olx0XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxuICAzNzpcdFx0ZGVmYXVsdCBuXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbiAgNDA6XHRcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG4gIDQxOlx0XG4gIDQyOlx0Y29uZmlnIEJQRl9KSVRcbiAgNDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbiAgNDQ6XHRcdGRlcGVuZHMgb24gQlBGXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzIyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgQlBGIHZlcmlmaWVyIGNvZGUgYW5kIHNlZSB3aGVyZSB3ZSYjMzk7cmUgYXQgd2l0aCB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgZm9jdXNpbmcgb24gdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgb3Igc2lnbmlmaWNhbnRseSBhbHRlcmVkLiBUaGUga2V5IHN5bWJvbHMgc2VlbSB0byBiZSBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAsIGBwcmVwYXJlX2Z1bmNfZXhpdGAsIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCwgYW5kIGBicGZfY2hlY2tgIChvciBwb3RlbnRpYWxseSBgZG9fY2hlY2tgIG9yIGBjaGVja19jZmdgLCBkZXBlbmRpbmcgb24gdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uKS4KClJpZ2h0LCBzbyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgaXMgc3RhdGljOyBnb29kLCB0aGF0IGtlZXBzIHRoaW5ncyByZWxhdGl2ZWx5IGNvbnRhaW5lZC4gYHByZXBhcmVfZnVuY19leGl0YCBpcyBhbHNvIHN0YXRpYywgYW5kIGl0IGxvb2tzIGxpa2UgaXTigJlzIGNhbGxlZCB3aXRoaW4gYGRvX2NoZWNrYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gbm90ZSwgYW5kIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCBpcyBhbHNvIHN0YXRpYyBhbmQgaXMgYWxzbyBjYWxsZWQgd2hlbiBzdGFjayBzbG90cyBhcmUgb3ZlcndyaXR0ZW4uIE9rYXksIHRoYXQmIzM5O3Mgc29saWRpZnlpbmcgdGhlIHBpY3R1cmUgYSBiaXQuIE5vdywgd2hhdCBhYm91dCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFyZSB0aGVyZSBhbnkgZmVhdHVyZS1zcGVjaWZpYyBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIHRoaW5ncz8KCk5vdywgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBpbiBwcmFjdGljZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBwcmVwYXJlX2Z1bmNfZXhpdGAgYW5kIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgYWRkaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1MT1zdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM1OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM1OTpzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjAte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDg0MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNDMtXHRcdFx0ICogZnJhbWUuIEEgY2FsbGJhY2sgZnJhbWUgY2Fubm90IGJlIGxlZnQgdGhhdCB3YXkgYmVjYXVzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzQ0Olx0XHRcdCAqIHByZXBhcmVfZnVuY19leGl0KCkgd291bGQgYXBwbHkgaXRzIHJldHVybiBjb250cmFjdCB0byB0aGVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM0NS1cdFx0XHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNTctXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNTg6XHRcdFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzU5LVx0XHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzE2PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczOTYtXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3Mzk3Olx0XHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczOTgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTAzPXN0YXRpYyBpbnQgcHJvY2Vzc19icGZfZXhpdF9mdWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTA5LVx0LyogV2UgbXVzdCBkbyBjaGVja19yZWZlcmVuY2VfbGVhayBoZXJlIGJlZm9yZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTEwOlx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExMS1cdCAqIHN0YXRlLVx1MDAzZWN1cmZyYW1lIFx1MDAzZSAwLCBpdCBtYXkgYmUgYSBjYWxsYmFjayBmdW5jdGlvbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMjI6XHQvKiBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXBhcmVfZnVuY19leGl0IHdoaWNoIGlzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjMtXHQgKiBiZWluZyBza2lwcGVkIGlzIHRoYXQgaXQgZnJlZXMgYnBmX2Z1bmNfc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTM1LVx0XHQvKiBleGl0IGZyb20gbmVzdGVkIGZ1bmN0aW9uICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMzY6XHRcdGVyciA9IHByZXBhcmVfZnVuY19leGl0KGVudiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEzNy1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgQlBGIHZlcmlmaWVyLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBwaW4gZG93biBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludC4gUmlnaHQsIHRoYXQmIzM5O3MgYGJwZl9jaGVja2AgLSBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgbG9jYXRlZCBzcXVhcmVseSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTm93LCBteSBuZXh0IG1vdmUgaXMgb2J2aW91czogSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGJwZl9jaGVja2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZywgaG93IGl0IG9yY2hlc3RyYXRlcyB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGFuZCB3aGF0IGluaXRpYWwgY2hlY2tzIGl0IHBlcmZvcm1zLiBObyBwb2ludCBpbiB3YXN0aW5nIHRpbWU7IGxldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24gaXRzZWxmIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYnBmX2NoZWNrXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTIxMDQzPXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTE2MDppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE2MS1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgaW4gYHZlcmlmaWVyLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgdXNpbmcgYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgIGFuZCByZWxhdGVkIHN5bWJvbHMgd2l0aGluIHRoZSB2ZXJpZmllci4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiwgb3IgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCBpdCBpbiBgdmVyaWZpZXIuY2AuIE15IGZvY3VzIGlzIHRvIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcyBmb3IgZHluYW1pYyBwb2ludGVyIHN0YWNrIHNsb3RzIHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3csIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIG9yIHBvaW50cyB3aGVyZSB3ZSBtaWdodCBiZSBzZWVpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIG9wcG9ydHVuaXRpZXMgdG8gb3B0aW1pemUgb3IgaW1wcm92ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgZHluYW1pYyBwb2ludGVyIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jPTM5OD1zdGF0aWMgdm9pZCBfX2NsZWFuX2Z1bmNfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQyOC1cdFx0XHQgKiBEb24mIzM5O3QgY2xlYXIgc3BlY2lhbCBzbG90cy5cbmtlcm5lbC9icGYvc3RhdGVzLmM6NDI5Olx0XHRcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoKSBuZWVkcyBTVEFDS19EWU5QVFIgdG9cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMwLVx0XHRcdCAqIGRldGVjdCBvdmVyd3JpdGVzIGFuZCBpbnZhbGlkYXRlIGFzc29jaWF0ZWQgZGF0YSBzbGljZXMuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY2MT1zdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9jYl9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2ODpzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjktXHRcdFx0XHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzE9c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2R5bnB0cihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODMtXHQvKiBXZSBjYW5ub3QgYXNzdW1lIGJvdGggc3BpIGFuZCBzcGkgLSAxIGJlbG9uZyB0byB0aGUgc2FtZSBkeW5wdHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njg0Olx0ICogaGVuY2Ugd2UgbmVlZCB0byBjYWxsIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdHdpY2UgZm9yIGJvdGgsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjg1LVx0ICogdG8gZW5zdXJlIHRoYXQgZm9yIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjkxLVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjkyOlx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY5My1cdGlmIChlcnIpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjk0LVx0XHRyZXR1cm4gZXJyO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY5NTpcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpIC0gMSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjk2LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODAzPXN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTktXHRcdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMDpcdFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODIxLVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODI4OnN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyOS1cdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODcwPXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg4OC1cdCAqIFNUQUNLX0RZTlBUUiBzbG90cywgc2VlIG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyIHdoaWNoIGNhbGxzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODg5Olx0ICogZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdCB0byBlbnN1cmUgZHlucHRyIG9iamVjdHMgYXQgdGhlIHNsb3RzIHdlIGFyZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg5MC1cdCAqIHRvdWNoaW5nIGFyZSBjb21wbGV0ZWx5IGRlc3RydWN0ZWQgYmVmb3JlIHdlIHJlaW5pdGlhbGl6ZSB0aGVtIGZvciBhIG5ld1xua2VybmVsL2JwZi92ZXJpZmllci5jOjg5MTpcdCAqIG9uZS4gRm9yIHJlZmVyZW5jZWQgb25lcywgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdCByZXR1cm5zIGFuIGVycm9yIGVhcmx5XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODkyLVx0ICogaW5zdGVhZCBvZiBkZWxheWluZyBpdCB1bnRpbCB0aGUgZW5kIHdoZXJlIHRoZSB1c2VyIHdpbGwgZ2V0IFwmIzM0O1VucmVsZWFzZWRcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzU0MT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTkzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjM1OTQ6XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5NS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM2ODQ9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3MTMtXHRcdHNwaSA9IGJwZl9nZXRfc3BpKGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM3MTQ6XHRcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNzE1LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2MwoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIG15IHRha2U6IHRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBwcmlvcml0aXplIGZ1enppbmcuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgJiMzNDt3b3J0aCBmdXp6aW5nLCYjMzQ7IGFuZCBhZnRlciBhIGRlZXBlciBkaXZlLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCBwcm9wZXIgY2xlYW51cCBhbmQgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBkeW5hbWljIHBvaW50ZXJzLCBvciAmIzM0O2R5bnB0cnMsJiMzNDsgd2hlbiBhIHN1YnByb2dyYW0gZXhpdHMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHZhbGlkYXRpb24gd2l0aGluIGEgaGlnaGx5IHNlbnNpdGl2ZSBrZXJuZWwgc3Vic3lzdGVtLiBBbnkgbWlzc3RlcCBoZXJlIGNvdWxkIGxlYWQgdG8gZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLgoKSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBicGZfY2hlY2tgLCBgcHJlcGFyZV9mdW5jX2V4aXRgLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAsIGFuZCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjcnVjaWFsIGFzcGVjdHMgb2YgdGhlIHZlcmlmaWVyJiMzOTtzIG9wZXJhdGlvbi4gSSB3YW50IHRvIHBheSBwYXJ0aWN1bGFybHkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGV5IGludGVyYWN0IGFuZCBob3cgdGhlIG1vZGlmaWNhdGlvbnMgbWlnaHQgaW50cm9kdWNlIHVuZXhwZWN0ZWQgZWRnZSBjYXNlcy4KClRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY292ZXJpbmcgb3VyIGJhc2VzLCBJIG5lZWQgdG8gY29uZmlybSB3ZSYjMzk7cmUgaW5jbHVkaW5nIGBDT05GSUdfQlBGX1NZU0NBTExgIGluIHRoZSBlbmFibGUgY29uZmlncy4gVGhpcyBpcyB0aGUgbWFpbiBzd2l0Y2ggdGhhdCB0dXJucyBvbiB0aGUgQlBGIHN5c3RlbSBhbmQgdmVyaWZpZXIuIFdpdGhvdXQgaXQsIG5vbmUgb2YgdGhpcyBpcyByZWxldmFudC4KClNvLCB0byBzdW1tYXJpemUgc3VjY2luY3RseTogVGhpcyBwYXRjaCBtb2RpZmllcyBCUEYgdmVyaWZpZXIgbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgZGVzdHJ1Y3Rpb24gb2YgY2FsbGVlLWxvY2FsIGR5bmFtaWMgcG9pbnRlcnMgYW5kIGludmFsaWRhdGUgc2xpY2VzIHdoZW4gYSBzdWJwcm9ncmFtIGV4aXRzLCB0aHVzIG1ha2luZyB0aGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgpXZSBzaG91bGQgaW1tZWRpYXRlbHkgY2FsbCBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7ZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgaW50cm9kdWNpbmcgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCB0byB0ZWFyIGRvd24gY2FsbGVlLWxvY2FsIGR5bnB0cnMgYW5kIGludmFsaWRhdGUgZGVyaXZlZCBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIGluIHByZXBhcmVfZnVuY19leGl0LiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIHZlcmlmaWNhdGlvbiBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIHZpYSBzeXNfYnBmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICAgJiMzNDtkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0JiMzNDssCiAgICAmIzM0O2Rlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBieSBpbnRyb2R1Y2luZyBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0IHRvIHRlYXIgZG93biBjYWxsZWUtbG9jYWwgZHlucHRycyBhbmQgaW52YWxpZGF0ZSBkZXJpdmVkIHNsaWNlcyB3aGVuIGV4aXRpbmcgc3VicHJvZ3JhbXMgaW4gcHJlcGFyZV9mdW5jX2V4aXQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gdmVyaWZpY2F0aW9uIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gdmlhIHN5c19icGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGJ5IGFkZGluZyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCgpYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBgcHJlcGFyZV9mdW5jX2V4aXQoKWAgdG8gZW5zdXJlIHRoYXQgZHlucHRycyBhbGxvY2F0ZWQgb24gYSBjYWxsZWUmIzM5O3Mgc3RhY2sgZnJhbWUgYXJlIHByb3Blcmx5IGRlc3RydWN0ZWQgYW5kIHRoZWlyIGRlcml2ZWQgc2xpY2VzIGludmFsaWRhdGVkIHdoZW4gdGhlIHN1YnByb2dyYW0gcmV0dXJucy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS5cbi0gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgZGV0ZWN0IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgbG9naWMgYnVncyBpbiBrZXJuZWwvdmVyaWZpZXIgdmVyaWZpY2F0aW9uLlxuXG5UaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOlxuMS4gT3BlcmF0ZSBwdXJlbHkgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgY29tcGlsZS10aW1lIHN0YXRpYyBhbmFseXNpcyBzdGF0ZSBtYWNoaW5lIChgYnBmX2Z1bmNfc3RhdGVgKS5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpYCwgYGVycmApIGFuZCBzdGF0ZSBhY2Nlc3NlcyAoYGNhbGxlZS1cdTAwM2VzdGFja1tpXWApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCBieSBgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRWAuXG4zLiBEbyBub3QgYWxsb2NhdGUgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlhN2VmNTdiMTQ1ZjljYTQxM2JhODZiZGU1N2M2NGQ1OTQ5Mjg3YzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwODo1NTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA3MmEzZjU5OThkZDI3Li5jOWMxZGYyN2IyNjk5IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC04MDAsNiAmIzQzOzgwMCwzMSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZCkKIAlyZXR1cm4gcmVmX2NudDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCQkJc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpCiYjNDM7ewomIzQzOwlpbnQgaSwgZXJyOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY2FsbGVlLSZndDthbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gJmFtcDtjYWxsZWUtJmd0O3N0YWNrW2ldOwomIzQzOwomIzQzOwkJaWYgKHNsb3QtJmd0O3Nsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHwKJiM0MzsJCSAgICAhc2xvdC0mZ3Q7c3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3QpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQSBjYWxsZWUtbG9jYWwgZHlucHRyIGlzIGRlc3Ryb3llZCB3aGVuIGl0cyBzdGFjayBmcmFtZSBnb2VzCiYjNDM7CQkgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3QKJiM0MzsJCSAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLgomIzQzOwkJICovCiYjNDM7CQllcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpCiB7CkBAIC0xMDM5OSw2ICYjNDM7MTA0MjQsOSBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpCiAJCXByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci0mZ3Q7ZnJhbWVubywgdHJ1ZSk7CiAJfQogCWFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpOwomIzQzOwllcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiAJLyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nCiAJICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovCiAJZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmgmIzM0OwogCkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZCkKIAkJdGVzdF9pbmNvbXBsX29wcygpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpOwomIzQzOwlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZSk7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyMTdmNGM0YzAwYzQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMKQEAgLTAsMCAmIzQzOzEsNzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2NvbW1vbi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztpbnQgcHJvdG87CiYjNDM7CiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgc3RydWN0IGV0aGhkciAqc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCAmYW1wO3B0cik7CiYjNDM7CXJldHVybiBicGZfZHlucHRyX3NsaWNlKCZhbXA7cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CSAgICAgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBicGZfc2tfYnVmZl9wdHIgKnRvX2ZyZWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRoaGRyICpoZHI7CiYjNDM7CiYjNDM7CWhkciA9IHNsaWNlX2luX3N1YnByb2coc2tiKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCWJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpOwomIzQzOwkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogdGhpcyBzaG91bGQgZmFpbCAqLwomIzQzOwlwcm90byA9IGhkci0mZ3Q7aF9wcm90bzsKJiM0MzsKJiM0MzsJYnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7CiYjNDM7CiYjNDM7CXJldHVybiBORVRfWE1JVF9EUk9QOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztzdHJ1Y3Qgc2tfYnVmZiAqQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwgc3RydWN0IFFkaXNjICpzY2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7aW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiYjNDM7CSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2F1eGlsaWFyeQomIzQzO3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7dm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXN0cm95LCBzdHJ1Y3QgUWRpc2MgKnNjaCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7c3RydWN0IFFkaXNjX29wcyB0ZXN0ID0gewomIzQzOwkuZW5xdWV1ZSAgID0gKHZvaWQgKilpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwKJiM0MzsJLmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwKJiM0MzsJLmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCwKJiM0MzsJLnJlc2V0ICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfcmVzZXQsCiYjNDM7CS5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksCiYjNDM7CS5pZCAgICAgICAgPSAmIzM0O2JwZl9xZGlzY190ZXN0JiMzNDssCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKaW5kZXggMWNkNjFkNzJjMTY2Zi4uZjU3ZTYxNjJkYmY1YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKQEAgLTEyNyw3ICYjNDM7MTI3LDcgQEAgc3RhdGljIGludCBtaXNzaW5nX3JlbGVhc2VfY2FsbGJhY2tfZm4oX191MzIgaW5kZXgsIHZvaWQgKmRhdGEpCiAKIC8qIEFueSBkeW5wdHIgaW5pdGlhbGl6ZWQgd2l0aGluIGEgY2FsbGJhY2sgbXVzdCBoYXZlIGJwZl9keW5wdHJfcHV0IGNhbGxlZCAqLwogU0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQotX19mYWlsdXJlIF9fbXNnKCYjMzQ7VW5yZWxlYXNlZCByZWZlcmVuY2UgaWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyJiMzNDspCiBpbnQgcmluZ2J1Zl9taXNzaW5nX3JlbGVhc2VfY2FsbGJhY2sodm9pZCAqY3R4KQogewogCWJwZl9sb29wKDEwLCBtaXNzaW5nX3JlbGVhc2VfY2FsbGJhY2tfZm4sIE5VTEwsIDApOwpAQCAtMTg5Miw2ICYjNDM7MTg5MiwxMDEgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgY2xvbmU7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfY2xvbmUocHRyLCAmYW1wO2Nsb25lKTsKJiM0MzsJKmRhdGEgPSBicGZfZHlucHRyX2RhdGEoJmFtcDtjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIGNhbGxlcl9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTsKJiM0MzsKJiM0MzsJKmRhdGEgPSBicGZfZHlucHRyX2RhdGEocHRyLCAwLCBzaXplb2YodmFsKSk7CiYjNDM7CWJwZl9keW5wdHJfY2xvbmUocHRyLCAmYW1wO2Nsb25lKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCByZXNlcnZlX2R5bnB0cl9pbl9zdWJwcm9nKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CiYjNDM7CWJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKCZhbXA7cmluZ2J1ZiwgdmFsLCAwLCAmYW1wO3B0cik7CiYjNDM7fQomIzQzOwomIzQzOy8qIEEgc3VicHJvZ3JhbSBjYW5ub3QgbG9zZSB0aGUgbGFzdCBkeW5wdHIgdGhhdCBjYW4gcmVsZWFzZSBhIHJlc291cmNlLiAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyJiMzNDspCiYjNDM7aW50IHJlZmVyZW5jZWRfZHlucHRyX2xvc3Rfb25fc3VicHJvZ19yZXR1cm4odm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmVzZXJ2ZV9keW5wdHJfaW5fc3VicHJvZygpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZXN0cm95aW5nIGEgbG9jYWwgY2xvbmUgb24gcmV0dXJuIG11c3Qgbm90IGludmFsaWRhdGUgYSBzbGljZSB3aG9zZQomIzQzOyAqIHNvdXJjZSBkeW5wdHIgYmVsb25ncyB0byB0aGUgY2FsbGVyLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2FsbGVyX2R5bnB0cl9zbGljZV9hY3Jvc3Nfc3VicHJvZ192YWxpZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CWludCAqZGF0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKCZhbXA7cmluZ2J1ZiwgdmFsLCAwLCAmYW1wO3B0cik7CiYjNDM7CWNhbGxlcl9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBzbGljZSB0aGF0IGVzY2FwZXMgYSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lIGlzIGludmFsaWQgb25jZSB0aGUgbG9jYWwKJiM0MzsgKiBjbG9uZSBpcyBkZXN0cm95ZWQgb24gcmV0dXJuLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2xvbmVfc2xpY2VfaW5fc3VicHJvZygmYW1wO3B0ciwgJmFtcDtkYXRhKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkvKiB0aGlzIHNob3VsZCBmYWlsICovCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsJYnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cigmYW1wO3B0ciwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZAomIzQzOyAqIGZyb20gYSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9yZWxlYXNlX2ludmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkvKiB0aGlzIHNob3VsZCBmYWlsICovCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlcwogICogb2YgaXRzIHBhcmVudAogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQmIzM5O3Mgd29ydGggdGhyb3dpbmcgS01TQU4gYXQuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIHRvdWNoZWQuIEFoLCBpdCYjMzk7cyBtb2RpZnlpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGFsc28gYWRkaW5nIHNvbWUgQlBGIHNlbGZ0ZXN0cywgaW50ZXJlc3RpbmcuIFRoYXQgYXJlYSBhbHdheXMgbWFrZXMgbWUgYSBsaXR0bGUgY2F1dGlvdXMuCgpMZXQgbWUgZGlnIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgYW5kIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIFRob3NlIGFyZSBrZXkgc3BvdHMgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc28gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkmIzM5O2xsIGZpcmUgdXAgYGdyZXBwZXJgIChvciBgcmVhZC1maWxlYCwgZGVwZW5kaW5nIG9uIG15IG1vb2QpIGFuZCBnZXQgYSBkZXRhaWxlZCB2aWV3IG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuIEZyb20gdGhpcyBJIGNhbiBzZWUgd2hhdCBpcyBiZWluZyBhZGRlZCBhbmQgb3IgbW9kaWZpZWQgaW4gcmVsYXRpb24gdG8gZHluYW1pYyBwb2ludGVycywgd2hpY2ggaXMgd2hlcmUgS01TQU4gd2lsbCBnaXZlIHRoZSBtb3N0IHZhbHVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz02NjE9c3RhdGljIHZvaWQgbWFya19keW5wdHJfY2JfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Njg6c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY5LVx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjcxPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgzLVx0LyogV2UgY2Fubm90IGFzc3VtZSBib3RoIHNwaSBhbmQgc3BpIC0gMSBiZWxvbmcgdG8gdGhlIHNhbWUgZHlucHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4NDpcdCAqIGhlbmNlIHdlIG5lZWQgdG8gY2FsbCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHR3aWNlIGZvciBib3RoLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4NS1cdCAqIHRvIGVuc3VyZSB0aGF0IGZvciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MS1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY5MjpcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTMtXHRpZiAoZXJyKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5NC1cdFx0cmV0dXJuIGVycjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTU6XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSAtIDEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY5Ni1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgwMz1zdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE5LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MjA6XHRcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBjYWxsZWUsIGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMS1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODI3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyODpzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjktXHRcdFx0XHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTg3MD1zdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODgtXHQgKiBTVEFDS19EWU5QVFIgc2xvdHMsIHNlZSBtYXJrX3N0YWNrX3Nsb3RzX2R5bnB0ciB3aGljaCBjYWxsc1xua2VybmVsL2JwZi92ZXJpZmllci5jOjg4OTpcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdG8gZW5zdXJlIGR5bnB0ciBvYmplY3RzIGF0IHRoZSBzbG90cyB3ZSBhcmVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04OTAtXHQgKiB0b3VjaGluZyBhcmUgY29tcGxldGVseSBkZXN0cnVjdGVkIGJlZm9yZSB3ZSByZWluaXRpYWxpemUgdGhlbSBmb3IgYSBuZXdcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4OTE6XHQgKiBvbmUuIEZvciByZWZlcmVuY2VkIG9uZXMsIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgcmV0dXJucyBhbiBlcnJvciBlYXJseVxua2VybmVsL2JwZi92ZXJpZmllci5jLTg5Mi1cdCAqIGluc3RlYWQgb2YgZGVsYXlpbmcgaXQgdW50aWwgdGhlIGVuZCB3aGVyZSB0aGUgdXNlciB3aWxsIGdldCBcJiMzNDtVbnJlbGVhc2VkXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1NDE9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTk0Olx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM1OTUtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjg0PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNzEzLVx0XHRzcGkgPSBicGZfZ2V0X3NwaShpKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzE0Olx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzcxNS1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdHdvIGZ1bmN0aW9ucywgYXMgSSB1bmRlcnN0YW5kIHRoZW06CgoqKkRpc3NlY3RpbmcgQlBGIEZ1bmN0aW9uIEV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBmdW5jdGlvbiBleGl0cyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgY2xlYW51cCBvcGVyYXRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBwcmVwYXJlX2Z1bmNfZXhpdGAgYW5kIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YC4gSSYjMzk7bSBnb2luZyB0byBjb25zdWx0IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGNvbnRleHQsIGZvY3VzaW5nIG9uIGxpbmVzIDgwMCBhbmQgMTA0MDAgZm9yIGEgc3RhcnQuCgpGcm9tIHRoZSBmdW5jdGlvbiBuYW1lcywgSSBpbmZlciB0aGF0IGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgbGlrZWx5IHNldHRpbmcgdGhlIHN0YWdlIGZvciBhIGZ1bmN0aW9uJiMzOTtzIHJldHVybiwgbWF5YmUgdXBkYXRpbmcgc29tZSBzdGF0ZSBvciBwZXJmb3JtaW5nIGluaXRpYWwgY2xlYW51cCB0YXNrcyAqYmVmb3JlKiB0aGUgYWN0dWFsIGV4aXQuIE9uIHRoZSBvdGhlciBoYW5kLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgc2NyZWFtcyBhYm91dCBjbGVhbmluZyB1cCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcG9pbnRlcnMg4oCTIEJQRiBwcm9ncmFtcyBjYW4gYmUgc29waGlzdGljYXRlZCwgYW5kIHRoYXQgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgaGFuZGxlZCBkdXJpbmcgZnVuY3Rpb24gcmV0dXJucyB0byBhdm9pZCBsZWFrcyBvciBjb3JydXB0aW9uLiBUaGlzIHByb2JhYmx5IGludm9sdmVzIGZyZWVpbmcgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBkeW5hbWljIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gYSBCUEYgZnVuY3Rpb24uIEkgc3VzcGVjdCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgaXMgZ29pbmcgdG8gYmUgdGhlIG1vcmUgY29tcGxleCBvZiB0aGUgdHdvLCBlc3BlY2lhbGx5IGlmIHRoZSBCUEYgcHJvZ3JhbSB1c2VzIHBvdGVudGlhbGx5IG5lc3RlZCBvciBjeWNsaWNhbCBwb2ludGVyIHN0cnVjdHVyZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSB2ZXJpZmllciB0cmFja3MgdGhlc2UgZHluYW1pYyBwb2ludGVycyBhbmQgaG93IGl0IHZhbGlkYXRlcyB0aGVpciBjbGVhbnVwLiBJdOKAmXMgcG9zc2libGUgdGhlcmUgYXJlIGNoZWNrcyBvbiB0aGUgdmVyaWZpZXIgc3RhY2sgZHVyaW5nIHRoZSBleGl0IHRvIGVuc3VyZSBhbGwgcmVzb3VyY2VzIGFyZSBkZWFsbG9jYXRlZCBhcyBkZXNpZ25lZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGVzZSBmdW5jdGlvbiBhZGRyZXNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGFjdHVhbCBjb2RlIHNheXMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFx0cmV0dXJuIHJlZl9jbnQ7XG4gODAxOlx0fVxuIDgwMjpcdFxuIDgwMzpcdHN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDgwNDpcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbiA4MDU6XHR7XG4gODA2Olx0XHRpbnQgaSwgZXJyO1xuIDgwNzpcdFxuIDgwODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHtcbiA4MDk6XHRcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNmNhbGxlZS1cdTAwM2VzdGFja1tpXTtcbiA4MTA6XHRcbiA4MTE6XHRcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuIDgxMjpcdFx0XHQgICAgIXNsb3QtXHUwMDNlc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3QpXG4gODEzOlx0XHRcdFx0Y29udGludWU7XG4gODE0Olx0XG4gODE1Olx0XHRcdC8qXG4gODE2Olx0XHRcdCAqIEEgY2FsbGVlLWxvY2FsIGR5bnB0ciBpcyBkZXN0cm95ZWQgd2hlbiBpdHMgc3RhY2sgZnJhbWUgZ29lc1xuIDgxNzpcdFx0XHQgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3RcbiA4MTg6XHRcdFx0ICogYmUgbG9zdCBhbmQgc2xpY2VzIGRlcml2ZWQgZnJvbSB0aGF0IGR5bnB0ciBhcmUgaW52YWxpZGF0ZWQuXG4gODE5Olx0XHRcdCAqL1xuIDgyMDpcdFx0XHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcbiA4MjE6XHRcdFx0aWYgKGVycilcbiA4MjI6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDgyMzpcdFx0fVxuIDgyNDpcdFxuIDgyNTpcdFx0cmV0dXJuIDA7XG4gODI2Olx0fVxuIDgyNzpcdFxuIDgyODpcdHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDgyOTpcdFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIDgzMDpcdHtcbiA4MzE6XHRcdGludCBlcnIgPSAwO1xuIDgzMjpcdFxuIDgzMzpcdFx0LyogV2UgYWx3YXlzIGVuc3VyZSB0aGF0IFNUQUNLX0RZTlBUUiBpcyBuZXZlciBzZXQgcGFydGlhbGx5LFxuIDgzNDpcdFx0ICogaGVuY2UganVzdCBjaGVja2luZyBmb3Igc2xvdF90eXBlWzBdIGlzIGVub3VnaC4gVGhpcyBpc1xuIDgzNTpcdFx0ICogZGlmZmVyZW50IGZvciBTVEFDS19TUElMTCwgd2hlcmUgaXQgbWF5IGJlIG9ubHkgc2V0IGZvclxuIDgzNjpcdFx0ICogMSBieXRlLCBzbyBjb2RlIGhhcyB0byB1c2UgaXNfc3BpbGxlZF9yZWcuXG4gODM3Olx0XHQgKi9cbiA4Mzg6XHRcdGlmIChzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIpXG4gODM5Olx0XHRcdHJldHVybiAwO1xuIDg0MDpcdFxuIDg0MTpcdFx0LyogUmVwb3NpdGlvbiBzcGkgdG8gZmlyc3Qgc2xvdCAqL1xuIDg0MjpcdFx0aWYgKCFzdGF0ZS1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuIDg0MzpcdFx0XHRzcGkgPSBzcGkgJiM0MzsgMTtcbiA4NDQ6XHRcbiA4NDU6XHRcdC8qXG4gODQ2Olx0XHQgKiBBIHJlZmVyZW5jZWQgZHlucHRyIGNhbiBiZSBvdmVyd3JpdHRlbiBvbmx5IGlmIHRoZXJlIGlzIGF0XG4gODQ3Olx0XHQgKiBsZWFzdCBvbmUgb3RoZXIgZHlucHRyIHNoYXJpbmcgdGhlIHNhbWUgdmlydHVhbCByZWYgcGFyZW50LFxuIDg0ODpcdFx0ICogZW5zdXJpbmcgdGhlIHJlZmVyZW5jZSBjYW4gc3RpbGwgYmUgcHJvcGVybHkgcmVsZWFzZWQuXG4gODQ5Olx0XHQgKi9cbiA4NTA6XHRcdGlmIChkeW5wdHJfdHlwZV9yZWZlcmVuY2VkKHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuZHlucHRyLnR5cGUpIFx1MDAyNlx1MDAyNlxuIDg1MTpcdFx0ICAgIGR5bnB0cl9yZWZfY250KGVudiwgc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5wYXJlbnRfaWQpIFx1MDAzYz0gMSkge1xuIDg1MjpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2Fubm90IG92ZXJ3cml0ZSByZWZlcmVuY2VkIGR5bnB0clxcblwmIzM0Oyk7XG4gODUzOlx0XHRcdGJwZl9kaWFnX3JlcyhcbiA4NTQ6XHRcdFx0XHRlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgXCYjMzQ7cmVmZXJlbmNlZCBkeW5wdHIgb3ZlcndyaXRlXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODU1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Ygc29tZSBjb2RlLCBwcm9iYWJseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGR5bmFtaWMgcG9pbnRlcnMsIGFuZCBJJiMzOTttIHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIGZ1bmN0aW9uIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YDoKCioqTGV0JiMzOTtzIERpZyBpbnRvIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIHRoZSBwdXp6bGUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGtub3cgd2hhdCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgKnNob3VsZCogYmUgZG9pbmcsIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgd2hlcmUgaXQmIzM5O3MgcHJvYmFibHkgYmVpbmcgdXNlZC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGNsZWFuaW5nIHVwLCBkZWFsbG9jYXRpbmcsIG9yIGF0IGxlYXN0IHJlc2V0dGluZyBzb21lIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnksIGxpa2VseSBwb2ludGVycyByZXNpZGluZyBvbiB0aGUgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgZGV0YWlscywgdGhvdWdoLCB0byBlbnN1cmUgSSYjMzk7bSByZW1lbWJlcmluZyB0aGUgc3BlY2lmaWNzIGNvcnJlY3RseS4gSSYjMzk7dmUgZ290IGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIHdob2xlIHN5c3RlbSB3b3JrcyDigJMgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBzdGFjaywgaGVhcCwgdGhlc2UgZHluYW1pYyBwb2ludGVycyDigJMgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgZnVuY3Rpb24gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGdldCB0aGUgZnVsbCBjb250ZXh0IHRvIHNlZSBob3cgaXQgaXMgc3VwcG9zZWQgdG8gYmUgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1NTpcdFx0XHRcdFwmIzM0O1RoaXMgc3RhY2sgc2xvdCBjb250YWlucyBhIGR5bnB0ciB0aGF0IG93bnMgb3IgcHJvdGVjdHMgYSByZWZlcmVuY2VkIHJlc291cmNlLiBPdmVyd3JpdGluZyB0aGUgbGFzdCBkeW5wdHIgZm9yIHRoYXQgcmVzb3VyY2Ugd291bGQgbG9zZSB0aGUgdmVyaWZpZXItdHJhY2tlZCByZWxlYXNlIHBhdGguXCYjMzQ7LFxuIDg1NjpcdFx0XHRcdFwmIzM0O1JlbGVhc2Ugb3IgY2xvbmUgdGhlIGR5bnB0ciBzbyBhbm90aGVyIGxpdmUgZHlucHRyIHN0aWxsIHRyYWNrcyB0aGUgcmVmZXJlbmNlZCByZXNvdXJjZSBiZWZvcmUgb3ZlcndyaXRpbmcgdGhpcyBzdGFjayBzbG90LlwmIzM0Oyk7XG4gODU3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg1ODpcdFx0fVxuIDg1OTpcdFxuIDg2MDpcdFx0LyogSW52YWxpZGF0ZSB0aGUgZHlucHRyIGFuZCBhbnkgZGVyaXZlZCBzbGljZXMgKi9cbiA4NjE6XHRcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5pZCk7XG4gODYyOlx0XHRpZiAoIWVycikge1xuIDg2MzpcdFx0XHRtYXJrX3N0YWNrX3Nsb3Rfc2NyYXRjaGVkKGVudiwgc3BpKTtcbiA4NjQ6XHRcdFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIDEpO1xuIDg2NTpcdFx0fVxuIDg2NjpcdFxuIDg2NzpcdFx0cmV0dXJuIGVycjtcbiA4Njg6XHR9XG4gODY5Olx0XG4gODcwOlx0c3RhdGljIGJvb2wgaXNfZHlucHRyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbiA4NzE6XHR7XG4gODcyOlx0XHRpbnQgc3BpO1xuIDg3MzpcdFxuIDg3NDpcdFx0aWYgKHJlZy1cdTAwM2V0eXBlID09IENPTlNUX1BUUl9UT19EWU5QVFIpXG4gODc1Olx0XHRcdHJldHVybiBmYWxzZTtcbiA4NzY6XHRcbiA4Nzc6XHRcdHNwaSA9IGR5bnB0cl9nZXRfc3BpKGVudiwgcmVnKTtcbiA4Nzg6XHRcbiA4Nzk6XHRcdC8qIC1FUkFOR0UgKGkuZS4gc3BpIG5vdCBmYWxsaW5nIGludG8gYWxsb2NhdGVkIHN0YWNrIHNsb3RzKSBpc24mIzM5O3QgYW5cbiA4ODA6XHRcdCAqIGVycm9yIGJlY2F1c2UgdGhpcyBqdXN0IG1lYW5zIHRoZSBzdGFjayBzdGF0ZSBoYXNuJiMzOTt0IGJlZW4gdXBkYXRlZCB5ZXQuXG4gODgxOlx0XHQgKiBXZSB3aWxsIGRvIGNoZWNrX21lbV9hY2Nlc3MgdG8gY2hlY2sgYW5kIHVwZGF0ZSBzdGFjayBib3VuZHMgbGF0ZXIuXG4gODgyOlx0XHQgKi9cbiA4ODM6XHRcdGlmIChzcGkgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHNwaSAhPSAtRVJBTkdFKVxuIDg4NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODg1Olx0XG4gODg2Olx0XHQvKiBXZSBkb24mIzM5O3QgbmVlZCB0byBjaGVjayBpZiB0aGUgc3RhY2sgc2xvdHMgYXJlIG1hcmtlZCBieSBwcmV2aW91c1xuIDg4NzpcdFx0ICogZHlucHRyIGluaXRpYWxpemF0aW9ucyBiZWNhdXNlIHdlIGFsbG93IG92ZXJ3cml0aW5nIGV4aXN0aW5nIHVucmVmZXJlbmNlZFxuIDg4ODpcdFx0ICogU1RBQ0tfRFlOUFRSIHNsb3RzLCBzZWUgbWFya19zdGFja19zbG90c19keW5wdHIgd2hpY2ggY2FsbHNcbiA4ODk6XHRcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdG8gZW5zdXJlIGR5bnB0ciBvYmplY3RzIGF0IHRoZSBzbG90cyB3ZSBhcmVcbiA4OTA6XHRcdCAqIHRvdWNoaW5nIGFyZSBjb21wbGV0ZWx5IGRlc3RydWN0ZWQgYmVmb3JlIHdlIHJlaW5pdGlhbGl6ZSB0aGVtIGZvciBhIG5ld1xuIDg5MTpcdFx0ICogb25lLiBGb3IgcmVmZXJlbmNlZCBvbmVzLCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHJldHVybnMgYW4gZXJyb3IgZWFybHlcbiA4OTI6XHRcdCAqIGluc3RlYWQgb2YgZGVsYXlpbmcgaXQgdW50aWwgdGhlIGVuZCB3aGVyZSB0aGUgdXNlciB3aWxsIGdldCBcJiMzNDtVbnJlbGVhc2VkXG4gODkzOlx0XHQgKiByZWZlcmVuY2VcJiMzNDsgZXJyb3IuXG4gODk0Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaW4gQ29udGV4dCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBgcHJlcGFyZV9mdW5jX2V4aXRgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhcm91bmQgbGluZSAxMDQyNC4gVGhhdCBzaG91bGQgcHV0IG1lIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHByb3BlciBjbGVhbnVwIGR1cmluZyBmdW5jdGlvbiBleGl0cywgcGFydGljdWxhcmx5IGluIHRoZSBjYXNlIG9mIHNvbWV0aGluZyBsaWtlIGEgc3RhY2sgdW53aW5kaW5nLCByZXNvdXJjZSBkZWFsbG9jYXRpb24sIG9yIGV4Y2VwdGlvbiBoYW5kbGluZy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBsYW5ndWFnZSB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc3RhY2sgZnJhbWUgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoYXQmIzM5O3MgYmVpbmcgcGFzc2VkIGluIGFuZCBleGFjdGx5IHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCB0aGVzZSBhcmd1bWVudHMgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIG9yIHRvIHVwZGF0ZSB0aGUgY29udHJvbCBmbG93LCBwZXJoYXBzIHVzaW5nIGEganVtcCB0YWJsZSBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZXJlIG1pZ2h0IGJlIGludGVyYWN0aW9ucyB3aXRoIGEgZGVidWdnZXIgb3IgcHJvZmlsZXIgaGVyZSBhcyB3ZWxsLiBJIGhvcGUgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYXJvdW5kIHRoaXMgc2VjdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDQxMDpcdFx0LyogZm9yIGNhbGxiYWNrcyBsaWtlIGJwZl9sb29wIG9yIGJwZl9mb3JfZWFjaF9tYXBfZWxlbSBnbyBiYWNrIHRvIGNhbGxzaXRlLFxuMTA0MTE6XHRcdCAqIHRoZXJlIGZ1bmN0aW9uIGNhbGwgbG9naWMgd291bGQgcmVzY2hlZHVsZSBjYWxsYmFjayB2aXNpdC4gSWYgaXRlcmF0aW9uXG4xMDQxMjpcdFx0ICogY29udmVyZ2VzIGlzX3N0YXRlX3Zpc2l0ZWQoKSB3b3VsZCBwcnVuZSB0aGF0IHZpc2l0IGV2ZW50dWFsbHkuXG4xMDQxMzpcdFx0ICovXG4xMDQxNDpcdFx0aW5fY2FsbGJhY2tfZm4gPSBjYWxsZWUtXHUwMDNlaW5fY2FsbGJhY2tfZm47XG4xMDQxNTpcdFx0aWYgKGluX2NhbGxiYWNrX2ZuKVxuMTA0MTY6XHRcdFx0Kmluc25faWR4ID0gY2FsbGVlLVx1MDAzZWNhbGxzaXRlO1xuMTA0MTc6XHRcdGVsc2VcbjEwNDE4Olx0XHRcdCppbnNuX2lkeCA9IGNhbGxlZS1cdTAwM2VjYWxsc2l0ZSAmIzQzOyAxO1xuMTA0MTk6XHRcbjEwNDIwOlx0XHRpZiAoZW52LVx1MDAzZWxvZy5sZXZlbCBcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xuMTA0MjE6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3JldHVybmluZyBmcm9tIGNhbGxlZTpcXG5cJiMzNDspO1xuMTA0MjI6XHRcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVlLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xuMTA0MjM6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RvIGNhbGxlciBhdCAlZDpcXG5cJiMzNDssICppbnNuX2lkeCk7XG4xMDQyNDpcdFx0XHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXHUwMDNlZnJhbWVubywgdHJ1ZSk7XG4xMDQyNTpcdFx0fVxuMTA0MjY6XHRcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuMTA0Mjc6XHRcdGVyciA9IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xuMTA0Mjg6XHRcdGlmIChlcnIpXG4xMDQyOTpcdFx0XHRyZXR1cm4gZXJyO1xuMTA0MzA6XHRcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuMTA0MzE6XHRcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xuMTA0MzI6XHRcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xuMTA0MzM6XHRcdHN0YXRlLVx1MDAzZWZyYW1lW3N0YXRlLVx1MDAzZWN1cmZyYW1lLS1dID0gTlVMTDtcbjEwNDM0Olx0XHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjYWxsZXIpO1xuMTA0MzU6XHRcbjEwNDM2Olx0XHQvKiBmb3IgY2FsbGJhY2tzIHdpZGVuIGltcHJlY2lzZSBzY2FsYXJzIHRvIG1ha2UgcHJvZ3JhbXMgbGlrZSBiZWxvdyB2ZXJpZnk6XG4xMDQzNzpcdFx0ICpcbjEwNDM4Olx0XHQgKiAgIHN0cnVjdCBjdHggeyBpbnQgaTsgfVxuMTA0Mzk6XHRcdCAqICAgdm9pZCBjYihpbnQgaWR4LCBzdHJ1Y3QgY3R4ICpjdHgpIHsgY3R4LVx1MDAzZWkmIzQzOyYjNDM7OyAuLi4gfVxuMTA0NDA6XHRcdCAqICAgLi4uXG4xMDQ0MTpcdFx0ICogICBzdHJ1Y3QgY3R4ID0geyAuaSA9IDA7IH1cbjEwNDQyOlx0XHQgKiAgIGJwZl9sb29wKDEwMCwgY2IsIFx1MDAyNmN0eCwgMCk7XG4xMDQ0MzpcdFx0ICpcbjEwNDQ0Olx0XHQgKiBUaGlzIGlzIHNpbWlsYXIgdG8gd2hhdCBpcyBkb25lIGluIHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoKSBmb3Igb3BlblxuMTA0NDU6XHRcdCAqIGNvZGVkIGl0ZXJhdG9ycy5cbjEwNDQ2Olx0XHQgKi9cbjEwNDQ3Olx0XHRwcmV2X3N0ID0gaW5fY2FsbGJhY2tfZm4gPyBmaW5kX3ByZXZfZW50cnkoZW52LCBzdGF0ZSwgKmluc25faWR4KSA6IE5VTEw7XG4xMDQ0ODpcdFx0aWYgKHByZXZfc3QpIHtcbjEwNDQ5Olx0XHRcdGVyciA9IHdpZGVuX2ltcHJlY2lzZV9zY2FsYXJzKGVudiwgcHJldl9zdCwgc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTI4CgkJCQkJCQlvdXRwdXQ6IDMxOQoJCQkJCQkJdGhvdWdodHM6IDkzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSaXNrIEFzc2Vzc21lbnQ6IEJQRiBWZXJpZmllciBEeW5wdHIgQ2xlYW51cCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2gsIGRlYWxpbmcgd2l0aCBCUEYgdmVyaWZpZXIgZHlucHRyIGNsZWFudXAsIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGNhcmVmdWxseSwgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgS01TQU4gaXNzdWVzLgoKRmlyc3QsIHRoZSBwYXRjaCYjMzk7cyBjb3JlIGZ1bmN0aW9uLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAsIGZvY3VzZXMgb24gY2xlYW5pbmcgdXAgZHlucHRycyBvbiBhIGNhbGxlZSYjMzk7cyBzdGFjayBmcmFtZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgc3RhY2ssIGNoZWNrcyBmb3IgYFNUQUNLX0RZTlBUUmAgc2xvdHMsIGFuZCByZWxlYXNlcyB0aGUgcmVmZXJlbmNlcy4gSXQmIzM5O3MgYWxsIGhhcHBlbmluZyAqd2l0aGluKiB0aGUgdmVyaWZpZXImIzM5O3Mgc3RhdGljIGFuYWx5c2lzLCBub3QgZHVyaW5nIHJ1bnRpbWUgZXhlY3V0aW9uIG9mIGEgQlBGIHByb2dyYW0uIFNvIHRoZSBxdWVzdGlvbiBpczogY2FuIHRoaXMgaW50cm9kdWNlIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgd291bGQgYmUgY2F1Z2h0IGJ5IEtNU0FOPwoKVGhlIEtNU0FOIGNyaXRlcmlhIGFyZSBmcmVzaCBpbiBteSBtaW5kOiBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgdW5pbml0aWFsaXplZCBmaWVsZCByZWFkcywgYW5kIGJvdW5kcyBpc3N1ZXMgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzLgoKTG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb2RlLCBgaWAgYW5kIGBlcnJgIGFyZSBsb2NhbCwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMuIGBpYCBpcyB1c2VkIHRvIGluZGV4IHRocm91Z2ggdGhlIHN0YWNrLCBhbmQgdGhlIGNvZGUgb25seSByZWFkcyBpbml0aWFsaXplZCBmaWVsZHMgKGBzbG90X3R5cGVbMF1gLCBgc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3RgKS4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGNvcGllcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgc3RhdGljIGFuYWx5c2lzIGF0IHZlcmlmaWNhdGlvbiB0aW1lLCBub3QgcnVuIHRpbWUgZXhlY3V0aW9uLiBJdCBpcyBhbGwgYm91bmRlZCBieSBgY2FsbGVlLSZndDthbGxvY2F0ZWRfc3RhY2tgLgoKVGhlIGBjYWxsZWUtJmd0O3N0YWNrYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyB2ZXJpZmllciBzdGF0ZSBjcmVhdGlvbjsgdGhlIGBzbG90X3R5cGVgIGlzIGFsc28gaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBkYW5nbGluZyBzbGljZSBhY2Nlc3NlcyBpbiB2ZXJpZmllZCBCUEYgcHJvZ3JhbXMsIHdoaWNoIGFyZSBydW50aW1lIHNhZmV0eSBidWdzIGNhdWdodCBieSB2ZXJpZmllciBvciBLQVNBTiwgbm90IEtNU0FOLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgY3JlYXRlIGFueSBLTVNBTiBjb25jZXJucy4gSXQmIzM5O3MgYWJvdXQgdGlnaHRlbmluZyB2ZXJpZmljYXRpb24sIG5vdCBydW50aW1lIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtpbmcgaW5mb3JtYXRpb24uIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG9yIHN0YW5kYXJkIEtBU0FOIHZlcmlmaWVyIHRlc3RzKSBhcmUgYXBwcm9wcmlhdGUuIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoaXMuCgpUbyBjZW1lbnQgdGhlIHJlYXNvbmluZywgSSYjMzk7bGwgZW1waGFzaXplIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtNU0FOIGFuZCBLQVNBTi4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgcmVhZHMgYW5kIGxlYWtzOyBLQVNBTiBpcyBmb3IgdGhlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIFRoZSBjb2RlIGFkZGVkLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCgpYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB3aXRoaW4gYHByZXBhcmVfZnVuY19leGl0KClgLCBvbmx5IHRvdWNoZXMgQlBGIHZlcmlmaWVyIHN0YXRpYyBhbmFseXNpcywgY2xlYW5pbmcgdXAgZHlucHRycy4gVGhlIHZlcmlmaWVyIGNvZGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQuIFRodXMsIEkgc3RhbmQgYnkgbXkgJiMzOTtOZWVkc0tNU0FOID0gZmFsc2UmIzM5OyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGJ5IGFkZGluZyBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCgpYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBgcHJlcGFyZV9mdW5jX2V4aXQoKWAgdG8gZW5zdXJlIHRoYXQgZHlucHRycyBhbGxvY2F0ZWQgb24gYSBjYWxsZWUmIzM5O3Mgc3RhY2sgZnJhbWUgYXJlIHByb3Blcmx5IGRlc3RydWN0ZWQgYW5kIHRoZWlyIGRlcml2ZWQgc2xpY2VzIGludmFsaWRhdGVkIHdoZW4gdGhlIHN1YnByb2dyYW0gcmV0dXJucy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS5cbi0gS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMgZGV0ZWN0IG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgbG9naWMgYnVncyBpbiBrZXJuZWwvdmVyaWZpZXIgdmVyaWZpY2F0aW9uLlxuXG5UaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOlxuMS4gT3BlcmF0ZSBwdXJlbHkgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgY29tcGlsZS10aW1lIHN0YXRpYyBhbmFseXNpcyBzdGF0ZSBtYWNoaW5lIChgYnBmX2Z1bmNfc3RhdGVgKS5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpYCwgYGVycmApIGFuZCBzdGF0ZSBhY2Nlc3NlcyAoYGNhbGxlZS1cdTAwM2VzdGFja1tpXWApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCBieSBgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRWAuXG4zLiBEbyBub3QgYWxsb2NhdGUgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYnkgYWRkaW5nIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KClgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCB0byBlbnN1cmUgdGhhdCBkeW5wdHJzIGFsbG9jYXRlZCBvbiBhIGNhbGxlZSYjMzk7cyBzdGFjayBmcmFtZSBhcmUgcHJvcGVybHkgZGVzdHJ1Y3RlZCBhbmQgdGhlaXIgZGVyaXZlZCBzbGljZXMgaW52YWxpZGF0ZWQgd2hlbiB0aGUgc3VicHJvZ3JhbSByZXR1cm5zLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLlxuLSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBkZXRlY3QgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2dpYyBidWdzIGluIGtlcm5lbC92ZXJpZmllciB2ZXJpZmljYXRpb24uXG5cblRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2g6XG4xLiBPcGVyYXRlIHB1cmVseSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBjb21waWxlLXRpbWUgc3RhdGljIGFuYWx5c2lzIHN0YXRlIG1hY2hpbmUgKGBicGZfZnVuY19zdGF0ZWApLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlgLCBgZXJyYCkgYW5kIHN0YXRlIGFjY2Vzc2VzIChgY2FsbGVlLVx1MDAzZXN0YWNrW2ldYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBib3VuZGVkIGJ5IGBjYWxsZWUtXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFYC5cbjMuIERvIG5vdCBhbGxvY2F0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTowNi43MjU1NTkzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyODU4NzY3Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBieSBhZGRpbmcgYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoKWAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgYHByZXBhcmVfZnVuY19leGl0KClgIHRvIGVuc3VyZSB0aGF0IGR5bnB0cnMgYWxsb2NhdGVkIG9uIGEgY2FsbGVlJ3Mgc3RhY2sgZnJhbWUgYXJlIHByb3Blcmx5IGRlc3RydWN0ZWQgYW5kIHRoZWlyIGRlcml2ZWQgc2xpY2VzIGludmFsaWRhdGVkIHdoZW4gdGhlIHN1YnByb2dyYW0gcmV0dXJucy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS5cXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGRldGVjdCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGxvZ2ljIGJ1Z3MgaW4ga2VybmVsL3ZlcmlmaWVyIHZlcmlmaWNhdGlvbi5cXG5cXG5UaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOlxcbjEuIE9wZXJhdGUgcHVyZWx5IHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgY29tcGlsZS10aW1lIHN0YXRpYyBhbmFseXNpcyBzdGF0ZSBtYWNoaW5lIChgYnBmX2Z1bmNfc3RhdGVgKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaWAsIGBlcnJgKSBhbmQgc3RhdGUgYWNjZXNzZXMgKGBjYWxsZWUtXFx1MDAzZXN0YWNrW2ldYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBib3VuZGVkIGJ5IGBjYWxsZWUtXFx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRWAuXFxuMy4gRG8gbm90IGFsbG9jYXRlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IGNvcHlfdG9fdXNlciBwYXRocywgb3IgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGJ5IGludHJvZHVjaW5nIGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQgdG8gdGVhciBkb3duIGNhbGxlZS1sb2NhbCBkeW5wdHJzIGFuZCBpbnZhbGlkYXRlIGRlcml2ZWQgc2xpY2VzIHdoZW4gZXhpdGluZyBzdWJwcm9ncmFtcyBpbiBwcmVwYXJlX2Z1bmNfZXhpdC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSB2ZXJpZmljYXRpb24gbG9naWMgZXhlY3V0ZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiB2aWEgc3lzX2JwZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6MDYuNzI1NTY3NDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjM4NTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlhN2VmNTdiMTQ1ZjljYTQxM2JhODZiZGU1N2M2NGQ1OTQ5Mjg3YzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NTU6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uYzljMWRmMjdiMjY5OSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtODAwLDYgKzgwMCwzMSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZClcXG4gXFx0cmV0dXJuIHJlZl9jbnQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcXG4re1xcbitcXHRpbnQgaSwgZXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhbGxlZS1cXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbitcXG4rXFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcXG4rXFx0XFx0ICAgICFzbG90LVxcdTAwM2VzcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXNcXG4rXFx0XFx0ICogYXdheS4gQXBwbHkgdGhlIG5vcm1hbCBzdGFjay1zbG90IHRlYXJkb3duIHNvIHJlZmVyZW5jZXMgY2Fubm90XFxuK1xcdFxcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0XFx0XFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbiB7XFxuQEAgLTEwMzk5LDYgKzEwNDI0LDkgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxcbiBcXHRcXHRwcmludF92ZXJpZmllcl9zdGF0ZShlbnYsIHN0YXRlLCBjYWxsZXItXFx1MDAzZWZyYW1lbm8sIHRydWUpO1xcbiBcXHR9XFxuIFxcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xcbitcXHRlcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXFxuIFxcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xcbiBcXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xcbmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xcbkBAIC0xMSw2ICsxMSw3IEBAXFxuICNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lLnNrZWwuaFxcXCJcXG4gXFxuQEAgLTIzMCw2ICsyMzEsNyBAQCB2b2lkIHRlc3RfbnNfYnBmX3FkaXNjKHZvaWQpXFxuIFxcdFxcdHRlc3RfaW5jb21wbF9vcHMoKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7XFxuIFxcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpO1xcbitcXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9zbGljZSk7XFxuIFxcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyMTdmNGM0YzAwYzRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jXFxuQEAgLTAsMCArMSw3NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9leHBlcmltZW50YWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9xZGlzY19jb21tb24uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK2ludCBwcm90bztcXG4rXFxuK3N0YXRpYyBfX25vaW5saW5lIHN0cnVjdCBldGhoZHIgKnNsaWNlX2luX3N1YnByb2coc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCBcXHUwMDI2cHRyKTtcXG4rXFx0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXFx1MDAyNnB0ciwgMCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdCAgICAgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBicGZfc2tfYnVmZl9wdHIgKnRvX2ZyZWUpXFxuK3tcXG4rXFx0c3RydWN0IGV0aGhkciAqaGRyO1xcbitcXG4rXFx0aGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpO1xcbitcXHRpZiAoIWhkcikge1xcbitcXHRcXHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcXG4rXFx0XFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cXG4rXFx0cHJvdG8gPSBoZHItXFx1MDAzZWhfcHJvdG87XFxuK1xcbitcXHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcXG4rXFxuK1xcdHJldHVybiBORVRfWE1JVF9EUk9QO1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbitfX2F1eGlsaWFyeVxcbitzdHJ1Y3Qgc2tfYnVmZiAqQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwgc3RydWN0IFFkaXNjICpzY2gpXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK1NFQyhcXFwic3RydWN0X29wc1xcXCIpXFxuK19fYXV4aWxpYXJ5XFxuK2ludCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9pbml0LCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbitcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4rX19hdXhpbGlhcnlcXG4rdm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9yZXNldCwgc3RydWN0IFFkaXNjICpzY2gpXFxuK3tcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4rX19hdXhpbGlhcnlcXG4rdm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXN0cm95LCBzdHJ1Y3QgUWRpc2MgKnNjaClcXG4re1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzXFxcIilcXG4rc3RydWN0IFFkaXNjX29wcyB0ZXN0ID0ge1xcbitcXHQuZW5xdWV1ZSAgID0gKHZvaWQgKilpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSxcXG4rXFx0LmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSxcXG4rXFx0LmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCxcXG4rXFx0LnJlc2V0ICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfcmVzZXQsXFxuK1xcdC5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksXFxuK1xcdC5pZCAgICAgICAgPSBcXFwiYnBmX3FkaXNjX3Rlc3RcXFwiLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuaW5kZXggMWNkNjFkNzJjMTY2Zi4uZjU3ZTYxNjJkYmY1YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcXG4gXFxuIC8qIEFueSBkeW5wdHIgaW5pdGlhbGl6ZWQgd2l0aGluIGEgY2FsbGJhY2sgbXVzdCBoYXZlIGJwZl9keW5wdHJfcHV0IGNhbGxlZCAqL1xcbiBTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbi1fX2ZhaWx1cmUgX19tc2coXFxcIlVucmVsZWFzZWQgcmVmZXJlbmNlIGlkXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXFxcIilcXG4gaW50IHJpbmdidWZfbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrKHZvaWQgKmN0eClcXG4ge1xcbiBcXHRicGZfbG9vcCgxMCwgbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrX2ZuLCBOVUxMLCAwKTtcXG5AQCAtMTg5Miw2ICsxODkyLDEwMSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XFxuK1xcbitcXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXFx1MDAyNmNsb25lKTtcXG4rXFx0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2FsbGVyX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcXG4rXFxuK1xcdCpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKHB0ciwgMCwgc2l6ZW9mKHZhbCkpO1xcbitcXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXFx1MDAyNmNsb25lKTtcXG4rfVxcbitcXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCByZXNlcnZlX2R5bnB0cl9pbl9zdWJwcm9nKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK31cXG4rXFxuKy8qIEEgc3VicHJvZ3JhbSBjYW5ub3QgbG9zZSB0aGUgbGFzdCBkeW5wdHIgdGhhdCBjYW4gcmVsZWFzZSBhIHJlc291cmNlLiAqL1xcbitTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbm5vdCBvdmVyd3JpdGUgcmVmZXJlbmNlZCBkeW5wdHJcXFwiKVxcbitpbnQgcmVmZXJlbmNlZF9keW5wdHJfbG9zdF9vbl9zdWJwcm9nX3JldHVybih2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmVzZXJ2ZV9keW5wdHJfaW5fc3VicHJvZygpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERlc3Ryb3lpbmcgYSBsb2NhbCBjbG9uZSBvbiByZXR1cm4gbXVzdCBub3QgaW52YWxpZGF0ZSBhIHNsaWNlIHdob3NlXFxuKyAqIHNvdXJjZSBkeW5wdHIgYmVsb25ncyB0byB0aGUgY2FsbGVyLlxcbisgKi9cXG4rU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuK1xcdGludCAqZGF0YSA9IE5VTEw7XFxuK1xcbitcXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcXHUwMDI2cHRyKTtcXG4rXFx0Y2FsbGVyX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0KmRhdGEgPSAxMjM7XFxuK1xcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXFx1MDAyNnB0ciwgMCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogQSBzbGljZSB0aGF0IGVzY2FwZXMgYSBjbG9uZSdzIGNhbGwgZnJhbWUgaXMgaW52YWxpZCBvbmNlIHRoZSBsb2NhbFxcbisgKiBjbG9uZSBpcyBkZXN0cm95ZWQgb24gcmV0dXJuLlxcbisgKi9cXG4rU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcXFwiKVxcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXHRpbnQgKmRhdGEgPSBOVUxMO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK1xcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xcbitcXHRcXHQqZGF0YSA9IDEyMztcXG4rXFx0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcXHUwMDI2cHRyLCAwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWxlYXNpbmcgdGhlIHNoYXJlZCByZXNlcnZhdGlvbiBtdXN0IGludmFsaWRhdGUgYSBzbGljZSB0aGF0IGVzY2FwZWRcXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cXG4rICovXFxuK1NFQyhcXFwiP3Jhd190cFxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXFxcIilcXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3JlbGVhc2VfaW52YWxpZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXHRpbnQgKmRhdGEgPSBOVUxMO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK1xcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFxcdTAwMjZwdHIsIDApO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xcbitcXHRcXHQqZGF0YSA9IDEyMztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzXFxuICAqIG9mIGl0cyBwYXJlbnRcXG4gICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjA3LjQzMzA1MjI0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTkyMjM4NzU5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcInByZXBhcmVfZnVuY19leGl0XCIsXG4gICAgXCJkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0XCIsXG4gICAgXCJkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBieSBpbnRyb2R1Y2luZyBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0IHRvIHRlYXIgZG93biBjYWxsZWUtbG9jYWwgZHlucHRycyBhbmQgaW52YWxpZGF0ZSBkZXJpdmVkIHNsaWNlcyB3aGVuIGV4aXRpbmcgc3VicHJvZ3JhbXMgaW4gcHJlcGFyZV9mdW5jX2V4aXQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gdmVyaWZpY2F0aW9uIGxvZ2ljIGV4ZWN1dGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24gdmlhIHN5c19icGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWE3ZWY1N2IxNDVmOWNhNDEzYmE4NmJkZTU3YzY0ZDU5NDkyODdjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjU1OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5jOWMxZGYyN2IyNjk5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC04MDAsNiArODAwLDMxIEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuIFx0cmV0dXJuIHJlZl9jbnQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbit7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4rXG4rXHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcbitcdFx0ICAgICFzbG90LVx1MDAzZXNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXNcbitcdFx0ICogYXdheS4gQXBwbHkgdGhlIG5vcm1hbCBzdGFjay1zbG90IHRlYXJkb3duIHNvIHJlZmVyZW5jZXMgY2Fubm90XG4rXHRcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxuK1x0XHQgKi9cbitcdFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiArMTA0MjQsOSBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4gXHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbiBcdH1cbiBcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuK1x0ZXJyID0gZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuIFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4gXHQgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi9cbiBcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9zbGljZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUuc2tlbC5oXCJcbiBcbkBAIC0yMzAsNiArMjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKVxuIFx0XHR0ZXN0X2luY29tcGxfb3BzKCk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpO1xuK1x0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44MjE3ZjRjNGMwMGM0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbkBAIC0wLDAgKzEsNzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl9xZGlzY19jb21tb24uaFwiXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4raW50IHByb3RvO1xuK1xuK3N0YXRpYyBfX25vaW5saW5lIHN0cnVjdCBldGhoZHIgKnNsaWNlX2luX3N1YnByb2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCBcdTAwMjZwdHIpO1xuK1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IEJQRl9QUk9HKGludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbit7XG4rXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG4rXG4rXHRoZHIgPSBzbGljZV9pbl9zdWJwcm9nKHNrYik7XG4rXHRpZiAoIWhkcikge1xuK1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbitcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4rXHR9XG4rXG4rXHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRwcm90byA9IGhkci1cdTAwM2VoX3Byb3RvO1xuK1xuK1x0YnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7XG4rXG4rXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wc1wiKVxuK19fYXV4aWxpYXJ5XG4rc3RydWN0IHNrX2J1ZmYgKkJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2RlcXVldWUsIHN0cnVjdCBRZGlzYyAqc2NoKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbitpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbitcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X3Jlc2V0LCBzdHJ1Y3QgUWRpc2MgKnNjaClcbit7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwgc3RydWN0IFFkaXNjICpzY2gpXG4re1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wc1wiKVxuK3N0cnVjdCBRZGlzY19vcHMgdGVzdCA9IHtcbitcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuK1x0LmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSxcbitcdC5pbml0ICAgICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2luaXQsXG4rXHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbitcdC5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksXG4rXHQuaWQgICAgICAgID0gXCJicGZfcWRpc2NfdGVzdFwiLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uZjU3ZTYxNjJkYmY1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiBcbiAvKiBBbnkgZHlucHRyIGluaXRpYWxpemVkIHdpdGhpbiBhIGNhbGxiYWNrIG11c3QgaGF2ZSBicGZfZHlucHRyX3B1dCBjYWxsZWQgKi9cbiBTRUMoXCI/cmF3X3RwXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCIpXG4gaW50IHJpbmdidWZfbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrKHZvaWQgKmN0eClcbiB7XG4gXHRicGZfbG9vcCgxMCwgbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrX2ZuLCBOVUxMLCAwKTtcbkBAIC0xODkyLDYgKzE4OTIsMTAxIEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XG4rXG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjYWxsZXJfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuK1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEocHRyLCAwLCBzaXplb2YodmFsKSk7XG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK31cbitcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJlc2VydmVfZHlucHRyX2luX3N1YnByb2codm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rfVxuK1xuKy8qIEEgc3VicHJvZ3JhbSBjYW5ub3QgbG9zZSB0aGUgbGFzdCBkeW5wdHIgdGhhdCBjYW4gcmVsZWFzZSBhIHJlc291cmNlLiAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCIpXG4raW50IHJlZmVyZW5jZWRfZHlucHRyX2xvc3Rfb25fc3VicHJvZ19yZXR1cm4odm9pZCAqY3R4KVxuK3tcbitcdHJlc2VydmVfZHlucHRyX2luX3N1YnByb2coKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERlc3Ryb3lpbmcgYSBsb2NhbCBjbG9uZSBvbiByZXR1cm4gbXVzdCBub3QgaW52YWxpZGF0ZSBhIHNsaWNlIHdob3NlXG4rICogc291cmNlIGR5bnB0ciBiZWxvbmdzIHRvIHRoZSBjYWxsZXIuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXHRpbnQgKmRhdGEgPSBOVUxMO1xuK1xuK1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuK1x0Y2FsbGVyX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIGEgY2xvbmUncyBjYWxsIGZyYW1lIGlzIGludmFsaWQgb25jZSB0aGUgbG9jYWxcbisgKiBjbG9uZSBpcyBkZXN0cm95ZWQgb24gcmV0dXJuLlxuKyAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRcdCpkYXRhID0gMTIzO1xuK1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3JlbGVhc2VfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcdGlmIChkYXRhKVxuK1x0XHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRcdCpkYXRhID0gMTIzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXNcbiAgKiBvZiBpdHMgcGFyZW50XG4gICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTowNy40MzMwNTcwOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTk0MzQyMDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGUgYWRkaXRpb24gb2YgYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXRgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byBgcHJlcGFyZV9mdW5jX2V4aXRgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdDsgYW55dGhpbmcgZGVhbGluZyB3aXRoIGR5bmFtaWMgcG9pbnRlciBtYW5hZ2VtZW50IGluIHRoZSB2ZXJpZmllciBpcyB3b3J0aCBhIGNsb3NlIGxvb2suIE1lbW9yeSBzYWZldHksIGFzIGFsd2F5cywgaXMgcGFyYW1vdW50IGluIHRoaXMgYXJlYS4gV2UgbmVlZCB0byBiZSBhaXJ0aWdodC5cblxuTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBmaXJlIHVwIG15IHRvb2xzIOKAkyByZWFkLWZpbGUgb3IgZ3JlcHBlciB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UuIFdoYXQncyB0aGUgY29udGV4dD8gV2hhdCBwcm9ibGVtIGlzIHRoaXMgZnVuY3Rpb24gYWRkcmVzc2luZywgYW5kIGhvdyBkb2VzIGl0IGZpdCBpbnRvIHRoZSBleGlzdGluZyB2ZXJpZmllciBsb2dpYz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZXhpc3RpbmcgQlBGIHByb2dyYW1zP1xuXG5UaGUgcHJlc2VuY2Ugb2YgbmV3IHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYCBpcyBhIGdvb2Qgc2lnbi4gSXQgc3VnZ2VzdHMgYSBmb2N1c2VkIGVmZm9ydCBvbiB2YWxpZGF0aW5nIHRoZSBjaGFuZ2VzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aG9zZSB0ZXN0cyB0aG9yb3VnaGx5IHRvIGVuc3VyZSB0aGV5J3JlIGFkZXF1YXRlbHkgY292ZXJpbmcgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gVGhpcyB3aWxsIGJlIG15IG5leHQgc3RlcCBhZnRlciBpbnNwZWN0aW5nIHRoZSBjb3JlIGNvZGUgY2hhbmdlcy4gVmVyaWZpY2F0aW9uIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjI3LjM3NjQ3OTgwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg4NTUwMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzg0PXN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODAzOnN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDQtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAzNTk9c3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDI2LVxcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQyNzpcXHRlcnIgPSBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MjgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6MjcuNDk1MzQxMjQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc1OTI3MzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGlzIGluZm9ybWF0aW9uOlxuXG4qKkFuYWx5emluZyBCUEYgVmVyaWZpZXIgTG9naWM6IEtleSBTZWN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEJQRiB2ZXJpZmllciBjb2RlIGFnYWluLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIExldCdzIHplcm8gaW4gb24gYSBjb3VwbGUgb2YgY3JpdGljYWwgc2VjdGlvbnMuIEZpcnN0LCBsaW5lcyA3OTAtODQwLiBJIGtub3cgdGhpcyBhcmVhIHByb2JhYmx5IGRlYWxzIHdpdGjigKYgKmNoZWNrcyBub3Rlcyog4oCmbGlrZWx5IHNvbWUgYXNwZWN0IG9mIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIG9yIHBlcmhhcHMgY29uc3RyYWludCBwcm9wYWdhdGlvbiwgZ2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0IGNvdWxkIGFsc28gaW52b2x2ZSBhIHNwZWNpZmljIGluc3RydWN0aW9uLXNldCBjaGVjayBvciBwb3RlbnRpYWxseSBhbiBlYXJseSBlcnJvci1wYXRoIGhhbmRsaW5nIHJvdXRpbmUgZm9yIGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBzZXF1ZW5jZS4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGhhbmRsZXMgcmVnaXN0ZXIgbGl2ZW5lc3Mgb3IgYWRkcmVzcyBzcGFjZSBtYXBwaW5nLCBhc3N1bWluZyB0aGlzIGNvZGUgaXMgc3RpbGwgYWJvdXQgbWVtb3J5IGJvdW5kYXJpZXMgZm9yIGRpcmVjdCBwYWNrZXQgYWNjZXNzLlxuXG5OZXh0LCBJ4oCZbGwgbmVlZCB0byBzd2l0Y2ggZ2VhcnMsIGFuZCBxdWlja2x5IHJldmlldyBsaW5lcyAxMDQyMC0xMDQ0MC4gQWgsIHRoaXMgbG9va3MgbGlrZSBpdCBjb3VsZCBiZSB3aXRoaW4gYSBtdWNoIGxhcmdlciB2ZXJpZmljYXRpb24gcGhhc2UuIEdpdmVuIHRoZSBsaW5lIG51bWJlciwgSSdkIGJldCB0aGlzIGlzIHJlbGF0ZWQgdG8gc29tZXRoaW5nIGRlZXBlciB3aXRoaW4gdGhlIHZlcmlmaWVyJ3MgY29yZSBsb2dpYy4gTWF5YmUgaXQncyBjaGVja2luZyBmb3IgbG9vcCBpbnZhcmlhbnRzIG9yIG1heWJlIGl0J3MgZG9pbmcgYSBmaW5hbCBhbmFseXNpcyBvZiBjb250cm9sIGZsb3cgcGF0aHMgYmVmb3JlIGRlY2xhcmluZyB0aGUgcHJvZ3JhbSBzYWZlLiBQZXJoYXBzIGl0J3MgZGVhbGluZyB3aXRoIGEgdHJpY2t5IGVkZ2UgY2FzZSwgbGlrZSB2YWxpZGF0aW5nIGluZGlyZWN0IGp1bXBzIG9yIG1lbW9yeSBhY2Nlc3NlcyB3aXRoaW4gbG9vcHMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ2xsIGZvY3VzIG9uIHRoZXNlIHR3byBjaHVua3MgYW5kIHNlZSB3aGVyZSB0aGV5IGdldCBtZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZlZWwgZm9yIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIHRoYXQgbmVlZCBpbXByb3ZlbWVudCBvciBvcHRpbWl6YXRpb24gaW4gdGhlIGNvbnRleHQgb2YgcmVjZW50IHBhdGNoZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTozMi4yNTQ2MTc5MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA0MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3OTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDc5NjpcXHRcXHRcXHRpZiAoc3RhY2stXFx1MDAzZXNwaWxsZWRfcHRyLnBhcmVudF9pZCA9PSB2X3BhcmVudF9pZClcXG4gNzk3OlxcdFxcdFxcdFxcdHJlZl9jbnQrKztcXG4gNzk4OlxcdFxcdH0pKTtcXG4gNzk5OlxcdFxcbiA4MDA6XFx0XFx0cmV0dXJuIHJlZl9jbnQ7XFxuIDgwMTpcXHR9XFxuIDgwMjpcXHRcXG4gODAzOlxcdHN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA4MDQ6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXFxuIDgwNTpcXHR7XFxuIDgwNjpcXHRcXHRpbnQgaSwgZXJyO1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbiA4MDk6XFx0XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxcbiA4MTI6XFx0XFx0XFx0ICAgICFzbG90LVxcdTAwM2VzcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdClcXG4gODEzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRcXHQvKlxcbiA4MTY6XFx0XFx0XFx0ICogQSBjYWxsZWUtbG9jYWwgZHlucHRyIGlzIGRlc3Ryb3llZCB3aGVuIGl0cyBzdGFjayBmcmFtZSBnb2VzXFxuIDgxNzpcXHRcXHRcXHQgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3RcXG4gODE4OlxcdFxcdFxcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxcbiA4MTk6XFx0XFx0XFx0ICovXFxuIDgyMDpcXHRcXHRcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcXG4gODIxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDgyMjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA4MjM6XFx0XFx0fVxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHRyZXR1cm4gMDtcXG4gODI2OlxcdH1cXG4gODI3OlxcdFxcbiA4Mjg6XFx0c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDgyOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuIDgzMDpcXHR7XFxuIDgzMTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gODMyOlxcdFxcbiA4MzM6XFx0XFx0LyogV2UgYWx3YXlzIGVuc3VyZSB0aGF0IFNUQUNLX0RZTlBUUiBpcyBuZXZlciBzZXQgcGFydGlhbGx5LFxcbiA4MzQ6XFx0XFx0ICogaGVuY2UganVzdCBjaGVja2luZyBmb3Igc2xvdF90eXBlWzBdIGlzIGVub3VnaC4gVGhpcyBpc1xcbiA4MzU6XFx0XFx0ICogZGlmZmVyZW50IGZvciBTVEFDS19TUElMTCwgd2hlcmUgaXQgbWF5IGJlIG9ubHkgc2V0IGZvclxcbiA4MzY6XFx0XFx0ICogMSBieXRlLCBzbyBjb2RlIGhhcyB0byB1c2UgaXNfc3BpbGxlZF9yZWcuXFxuIDgzNzpcXHRcXHQgKi9cXG4gODM4OlxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdC8qIFJlcG9zaXRpb24gc3BpIHRvIGZpcnN0IHNsb3QgKi9cXG4gODQyOlxcdFxcdGlmICghc3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3QpXFxuIDg0MzpcXHRcXHRcXHRzcGkgPSBzcGkgKyAxO1xcbiA4NDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjMyLjI1OTIzMjU1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjY1MTAyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBhIENvbXBsZXggQ29kZWJhc2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgZnVuY3Rpb24gZXhpdHMsIHBhcnRpY3VsYXJseSB0aGUgYHByZXBhcmVfZnVuY19leGl0YCBmdW5jdGlvbi4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoaXMgY29kZWJhc2UsIG15IGluc3RpbmN0IGlzIHRvIGxvb2sgYXJvdW5kIGxpbmUgMTA0MjAuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBjdXJyZW50bHkgd29ya2luZyBvbiwgYW5kIGxpa2VseSB3aGVyZSBJIHdpbGwgZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhpdCBwcm9jZWR1cmUgdG8gdmVyaWZ5IHRoZSBiZWhhdmlvciBJIGFtIGV4cGVjdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6MzUuNTg1NzQ2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzAzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDE1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQxNTpcXHRcXHRpZiAoaW5fY2FsbGJhY2tfZm4pXFxuMTA0MTY6XFx0XFx0XFx0Kmluc25faWR4ID0gY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZTtcXG4xMDQxNzpcXHRcXHRlbHNlXFxuMTA0MTg6XFx0XFx0XFx0Kmluc25faWR4ID0gY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZSArIDE7XFxuMTA0MTk6XFx0XFxuMTA0MjA6XFx0XFx0aWYgKGVudi1cXHUwMDNlbG9nLmxldmVsIFxcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xcbjEwNDIxOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwicmV0dXJuaW5nIGZyb20gY2FsbGVlOlxcXFxuXFxcIik7XFxuMTA0MjI6XFx0XFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVlLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4xMDQyMzpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInRvIGNhbGxlciBhdCAlZDpcXFxcblxcXCIsICppbnNuX2lkeCk7XFxuMTA0MjQ6XFx0XFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4xMDQyNTpcXHRcXHR9XFxuMTA0MjY6XFx0XFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XFxuMTA0Mjc6XFx0XFx0ZXJyID0gZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XFxuMTA0Mjg6XFx0XFx0aWYgKGVycilcXG4xMDQyOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEwNDMwOlxcdFxcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xcbjEwNDMxOlxcdFxcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xcbjEwNDMyOlxcdFxcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xcbjEwNDMzOlxcdFxcdHN0YXRlLVxcdTAwM2VmcmFtZVtzdGF0ZS1cXHUwMDNlY3VyZnJhbWUtLV0gPSBOVUxMO1xcbjEwNDM0OlxcdFxcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlcik7XFxuMTA0MzU6XFx0XFxuMTA0MzY6XFx0XFx0LyogZm9yIGNhbGxiYWNrcyB3aWRlbiBpbXByZWNpc2Ugc2NhbGFycyB0byBtYWtlIHByb2dyYW1zIGxpa2UgYmVsb3cgdmVyaWZ5OlxcbjEwNDM3OlxcdFxcdCAqXFxuMTA0Mzg6XFx0XFx0ICogICBzdHJ1Y3QgY3R4IHsgaW50IGk7IH1cXG4xMDQzOTpcXHRcXHQgKiAgIHZvaWQgY2IoaW50IGlkeCwgc3RydWN0IGN0eCAqY3R4KSB7IGN0eC1cXHUwMDNlaSsrOyAuLi4gfVxcbjEwNDQwOlxcdFxcdCAqICAgLi4uXFxuMTA0NDE6XFx0XFx0ICogICBzdHJ1Y3QgY3R4ID0geyAuaSA9IDA7IH1cXG4xMDQ0MjpcXHRcXHQgKiAgIGJwZl9sb29wKDEwMCwgY2IsIFxcdTAwMjZjdHgsIDApO1xcbjEwNDQzOlxcdFxcdCAqXFxuMTA0NDQ6XFx0XFx0ICogVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBpbiBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgZm9yIG9wZW5cXG4xMDQ0NTpcXHRcXHQgKiBjb2RlZCBpdGVyYXRvcnMuXFxuMTA0NDY6XFx0XFx0ICovXFxuMTA0NDc6XFx0XFx0cHJldl9zdCA9IGluX2NhbGxiYWNrX2ZuID8gZmluZF9wcmV2X2VudHJ5KGVudiwgc3RhdGUsICppbnNuX2lkeCkgOiBOVUxMO1xcbjEwNDQ4OlxcdFxcdGlmIChwcmV2X3N0KSB7XFxuMTA0NDk6XFx0XFx0XFx0ZXJyID0gd2lkZW5faW1wcmVjaXNlX3NjYWxhcnMoZW52LCBwcmV2X3N0LCBzdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjM1LjU4NzYyMDIyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODg2NjEwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiB2ZXJpZmllciBsb2dpYywgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZmxhZ3MgdGhpcyBhcyBpbXBvcnRhbnQuIFRoZSB2ZXJpZmllciBpcyBhIGNvcmUgcGllY2Ugb2YgdGhlIEJQRiBzdWJzeXN0ZW0sIGFuZCB3ZSBhbGwga25vdyBob3cgaGVhdmlseSBzeXprYWxsZXIgdGFyZ2V0cyB0aGF0IGFyZWEgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCB0aGUgYEJQRl9QUk9HX0xPQURgIGNvbW1hbmQuIFNvLCB0aGUgcXVlc3Rpb24gYXJpc2VzIOKAkyBpcyB0aGlzIGNoYW5nZSBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseSwgeWVzLlxuXG5UaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIG1vZGlmeSBjb2RlIHJlbGF0ZWQgdG8gc3VicHJvZ3JhbSByZXR1cm5zIGFuZCBmdW5jdGlvbiBleGl0cyDigJMgZXNzZW50aWFsbHksIHdoZXJlIHRoZSBgQlBGX0VYSVRgIGluc3RydWN0aW9uIGFuZCB0aGUgYHByZXBhcmVfZnVuY19leGl0YCBmdW5jdGlvbiBjb21lIGludG8gcGxheSDigJMgc3VnZ2VzdHMgdGhlcmUncyBwb3RlbnRpYWxseSByZWFjaGFibGUgY29kZS4gVGhpcyBzcGVjaWZpYyBhZGRpdGlvbiBkZWFscyB3aXRoIHRlYXJkb3duIGxvZ2ljIGZvciBzdGFjayBkeW5hbWljIHBvaW50ZXJzIChgZHlucHRyc2ApIG9uIGZ1bmN0aW9uIGV4aXQsIGNhbGxpbmcgYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXRgIGFuZCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAuIFRoYXQgc21lbGxzIGxpa2UgYSBuZXcgYXR0YWNrIHN1cmZhY2UsIG9yIGF0IGxlYXN0IGEgcGxhY2Ugd2hlcmUgc3VidGxlIGludGVyYWN0aW9ucyBjb3VsZCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhpcyBhcmVhIG9mIHRoZSBjb2RlLiBMZXQncyBtYWtlIHN1cmUgdGhlIEJQRiBzdWJzeXN0ZW0gYW5kIHRoZSBgQlBGX1NZU0NBTExgIG9wdGlvbiBhcmUgZW5hYmxlZC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBzZWN0aW9ucyBpbiB0aGUgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgS2NvbmZpZyBmaWxlIHRvIGVuc3VyZSB0aGUgc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYxNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjM5Ljc3NjI4NTI5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNjU2MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcmlmaWVyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9Nz1DRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZS04LVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQubyBkaWFnbm9zdGljcy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTo0MC4xMTY5NTA2MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5MTkwOTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEtub3dpbmcgdGhlIGtlcm5lbCdzIEtjb25maWcgc3RydWN0dXJlIGxpa2UgdGhlIGJhY2sgb2YgbXkgaGFuZCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHR3byBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIGEgQlBGLXJlbGF0ZWQgc2V0dGluZy4gSXQncyBhbG1vc3QgY2VydGFpbiBpdCdsbCBiZSBpbiBvbmUgb2YgdGhvc2UsIG9yIHBlcmhhcHMgY3Jvc3MtcmVmZXJlbmNlZCBiZXR3ZWVuIHRoZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQlBGIHN5c2NhbGwgZmVhdHVyZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTo0My41MDg4NjQ4MzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMTEyMjg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjQzLjU5MDk4NDE3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjIyMDg1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIFRocm91Z2ggS2NvbmZpZ3M6IEJQRl9TWVNDQUxMIEh1bnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyBhIGNvbW1vbiB0YXNrLCBidXQgaXTigJlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIGZlYXR1cmUgbGlrZSBCUEYgc3lzY2FsbCBzdXBwb3J0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQgYWNyb3NzIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBkZXBlbmRlbmNpZXMsIGFueSBkZWZhdWx0IHZhbHVlcywgYW5kIGltcG9ydGFudGx5LCB3aGVyZSB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgKnVzZWQqLiBJIGNhbid0IGFmZm9yZCB0byB3YXN0ZSB0aW1lIG1hbnVhbGx5IGdyZXAtaW5nIHRocm91Z2ggZXZlcnkgS2NvbmZpZyBmaWxlOyBJIG5lZWQgYSB0YXJnZXRlZCBhbmQgZWZmaWNpZW50IGFwcHJvYWNoLiBMZXTigJlzIGdldCB0byBpdC4gVGltZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTQ3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6NDUuNjUzMTk2ODk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMzNzc3MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjQ4LjE4Njk3ODk2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ5MzIxNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBCUEYgS2NvbmZpZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgQlBGIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIEJQRiBmZWF0dXJlIGVuYWJsZW1lbnQgZmxhZywgb3IgbWF5YmUgSSdtIHRyeWluZyB0byByZWNhbGwgYSByZWxhdGVkIG9wdGlvbiB0aGF0IEkgd2FudCB0byBkb3VibGUtY2hlY2suIENvdWxkIGJlIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcsIG9yIHNvbWV0aGluZyB0aWVkIHRvIGEgc3BlY2lmaWMgQlBGIGhlbHBlciB2ZXJzaW9uLiBJIHN1c3BlY3QgbGluZSAyNyB3aWxsIGxpa2VseSBsZWFkIG1lIHRvIHRoZSBtYWluIGVudHJ5IHBvaW50IG9yIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGluIHRoYXQgS2NvbmZpZyBmaWxlLiBJIGFtIGhvcGluZyB0byBnZXQgdG8gdGhlIHJvb3QgY2F1c2Ugb2YgYW4gaXNzdWUgSSdtIHdvcmtpbmcgdGhyb3VnaC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlIGJhc2UgY29uZmlndXJhdGlvbiB0aGF0IGFsbCBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gaXMgcmVsaWFudCBvbi4gVGltZSB0byBzZWUgd2hhdCdzIHRoZXJlIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjUwLjkzNjMwNjA0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6NTAuOTM2NDA4OTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1OTE2NjM4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBWZXJpZmllciBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgQlBGIHZlcmlmaWVyIGNvZGUgYW5kIHNlZSB3aGVyZSB3ZSdyZSBhdCB3aXRoIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkLCBmb2N1c2luZyBvbiB0aGUgb25lcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBvciBzaWduaWZpY2FudGx5IGFsdGVyZWQuIFRoZSBrZXkgc3ltYm9scyBzZWVtIHRvIGJlIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YCwgYHByZXBhcmVfZnVuY19leGl0YCwgYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgLCBhbmQgYGJwZl9jaGVja2AgKG9yIHBvdGVudGlhbGx5IGBkb19jaGVja2Agb3IgYGNoZWNrX2NmZ2AsIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24pLlxuXG5SaWdodCwgc28gYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXRgIGlzIHN0YXRpYzsgZ29vZCwgdGhhdCBrZWVwcyB0aGluZ3MgcmVsYXRpdmVseSBjb250YWluZWQuIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgYWxzbyBzdGF0aWMsIGFuZCBpdCBsb29rcyBsaWtlIGl04oCZcyBjYWxsZWQgd2l0aGluIGBkb19jaGVja2AuIFRoYXQncyBpbXBvcnRhbnQgdG8gbm90ZSwgYW5kIGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCBpcyBhbHNvIHN0YXRpYyBhbmQgaXMgYWxzbyBjYWxsZWQgd2hlbiBzdGFjayBzbG90cyBhcmUgb3ZlcndyaXR0ZW4uIE9rYXksIHRoYXQncyBzb2xpZGlmeWluZyB0aGUgcGljdHVyZSBhIGJpdC4gTm93LCB3aGF0IGFib3V0IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYXJlIHRoZXJlIGFueSBmZWF0dXJlLXNwZWNpZmljIHN5bWJvbHMgdGhhdCBtaWdodCBiZSBpbXBhY3RpbmcgdGhpbmdzP1xuXG5Ob3csIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgaW4gcHJhY3RpY2UsIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgcHJlcGFyZV9mdW5jX2V4aXRgIGFuZCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgYWRkaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMyMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjU1LjUyODA3NjEyNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxMDI2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9mdW5jX2V4aXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzUxPXN0YXRpYyBib29sIHJldHZhbF9yYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzU5OnN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwODQxPXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzQzLVxcdFxcdFxcdCAqIGZyYW1lLiBBIGNhbGxiYWNrIGZyYW1lIGNhbm5vdCBiZSBsZWZ0IHRoYXQgd2F5IGJlY2F1c2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNDQ6XFx0XFx0XFx0ICogcHJlcGFyZV9mdW5jX2V4aXQoKSB3b3VsZCBhcHBseSBpdHMgcmV0dXJuIGNvbnRyYWN0IHRvIHRoZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM0NS1cXHRcXHRcXHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1Ny1cXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNTg6XFx0XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzU5LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczMTY9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3Mzk2LVxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzM5NzpcXHRcXHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczOTgtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODEwMz1zdGF0aWMgaW50IHByb2Nlc3NfYnBmX2V4aXRfZnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTA5LVxcdC8qIFdlIG11c3QgZG8gY2hlY2tfcmVmZXJlbmNlX2xlYWsgaGVyZSBiZWZvcmVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMTA6XFx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTEtXFx0ICogc3RhdGUtXFx1MDAzZWN1cmZyYW1lIFxcdTAwM2UgMCwgaXQgbWF5IGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTIyOlxcdC8qIFRoZSBzaWRlIGVmZmVjdCBvZiB0aGUgcHJlcGFyZV9mdW5jX2V4aXQgd2hpY2ggaXNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjMtXFx0ICogYmVpbmcgc2tpcHBlZCBpcyB0aGF0IGl0IGZyZWVzIGJwZl9mdW5jX3N0YXRlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTM1LVxcdFxcdC8qIGV4aXQgZnJvbSBuZXN0ZWQgZnVuY3Rpb24gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMzY6XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTM3LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU1OjU1LjYwMTE4NjkwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTU3NDY2MTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBpbiBvbiB0aGUgQlBGIHZlcmlmaWVyLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBwaW4gZG93biBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludC4gUmlnaHQsIHRoYXQncyBgYnBmX2NoZWNrYCAtIGl0J3MgdGhlIGdhdGVrZWVwZXIsIGxvY2F0ZWQgc3F1YXJlbHkgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIG9idmlvdXM6IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBicGZfY2hlY2tgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaXQncyBkb2luZywgaG93IGl0IG9yY2hlc3RyYXRlcyB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIGFuZCB3aGF0IGluaXRpYWwgY2hlY2tzIGl0IHBlcmZvcm1zLiBObyBwb2ludCBpbiB3YXN0aW5nIHRpbWU7IGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTU6NTkuNzU4NjU3ODA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkyNjgyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGJwZl9jaGVja1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTA0Mz1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE1OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExNjA6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTYxLVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NTo1OS44ODc5MzEyMzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NzcwODQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgIGluIGB2ZXJpZmllci5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSdyZSB1c2luZyBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAgYW5kIHJlbGF0ZWQgc3ltYm9scyB3aXRoaW4gdGhlIHZlcmlmaWVyLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24sIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBhc3NvY2lhdGVkIHdpdGggaXQgaW4gYHZlcmlmaWVyLmNgLiBNeSBmb2N1cyBpcyB0byBnYWluIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgZm9yIGR5bmFtaWMgcG9pbnRlciBzdGFjayBzbG90cyB3aXRoaW4gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3csIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIG9yIHBvaW50cyB3aGVyZSB3ZSBtaWdodCBiZSBzZWVpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzLiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3Igb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSBvciBpbXByb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkeW5hbWljIHBvaW50ZXIgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjowMS44NzU2NDI5NThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODQwODc2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MjgtXFx0XFx0XFx0ICogRG9uJ3QgY2xlYXIgc3BlY2lhbCBzbG90cy5cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjQyOTpcXHRcXHRcXHQgKiBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KCkgbmVlZHMgU1RBQ0tfRFlOUFRSIHRvXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzAtXFx0XFx0XFx0ICogZGV0ZWN0IG92ZXJ3cml0ZXMgYW5kIGludmFsaWRhdGUgYXNzb2NpYXRlZCBkYXRhIHNsaWNlcy5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjE9c3RhdGljIHZvaWQgbWFya19keW5wdHJfY2JfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Njg6c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2OS1cXHRcXHRcXHRcXHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY3MT1zdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgzLVxcdC8qIFdlIGNhbm5vdCBhc3N1bWUgYm90aCBzcGkgYW5kIHNwaSAtIDEgYmVsb25nIHRvIHRoZSBzYW1lIGR5bnB0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njg0OlxcdCAqIGhlbmNlIHdlIG5lZWQgdG8gY2FsbCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHR3aWNlIGZvciBib3RoLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODUtXFx0ICogdG8gZW5zdXJlIHRoYXQgZm9yIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTEtXFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY5MjpcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5My1cXHRpZiAoZXJyKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02OTQtXFx0XFx0cmV0dXJuIGVycjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njk1OlxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpIC0gMSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5Ni1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgwMz1zdGF0aWMgaW50IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTktXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMDpcXHRcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODIxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODI3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4Mjg6c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyOS1cXHRcXHRcXHRcXHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODcwPXN0YXRpYyBib29sIGlzX2R5bnB0cl9yZWdfdmFsaWRfdW5pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODg4LVxcdCAqIFNUQUNLX0RZTlBUUiBzbG90cywgc2VlIG1hcmtfc3RhY2tfc2xvdHNfZHlucHRyIHdoaWNoIGNhbGxzXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjg4OTpcXHQgKiBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHRvIGVuc3VyZSBkeW5wdHIgb2JqZWN0cyBhdCB0aGUgc2xvdHMgd2UgYXJlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg5MC1cXHQgKiB0b3VjaGluZyBhcmUgY29tcGxldGVseSBkZXN0cnVjdGVkIGJlZm9yZSB3ZSByZWluaXRpYWxpemUgdGhlbSBmb3IgYSBuZXdcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODkxOlxcdCAqIG9uZS4gRm9yIHJlZmVyZW5jZWQgb25lcywgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdCByZXR1cm5zIGFuIGVycm9yIGVhcmx5XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTg5Mi1cXHQgKiBpbnN0ZWFkIG9mIGRlbGF5aW5nIGl0IHVudGlsIHRoZSBlbmQgd2hlcmUgdGhlIHVzZXIgd2lsbCBnZXQgXFxcIlVucmVsZWFzZWRcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNTQxPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzU5NDpcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1OTUtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNjg0PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3MTMtXFx0XFx0c3BpID0gYnBmX2dldF9zcGkoaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM3MTQ6XFx0XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNzE1LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU2OjAxLjk5NDA1OTY4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTE4MTUxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSB0YWtlOiB0aGlzIGlzIGFic29sdXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gcHJpb3JpdGl6ZSBmdXp6aW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIFwid29ydGggZnV6emluZyxcIiBhbmQgYWZ0ZXIgYSBkZWVwZXIgZGl2ZSwgSSdtIGNvbmZpZGVudCBpbiB0aGF0IGFzc2Vzc21lbnQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCBwcm9wZXIgY2xlYW51cCBhbmQgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBkeW5hbWljIHBvaW50ZXJzLCBvciBcImR5bnB0cnMsXCIgd2hlbiBhIHN1YnByb2dyYW0gZXhpdHMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY3J1Y2lhbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdmFsaWRhdGlvbiB3aXRoaW4gYSBoaWdobHkgc2Vuc2l0aXZlIGtlcm5lbCBzdWJzeXN0ZW0uIEFueSBtaXNzdGVwIGhlcmUgY291bGQgbGVhZCB0byBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuXG5cbkkndmUgemVyb2VkIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBicGZfY2hlY2tgLCBgcHJlcGFyZV9mdW5jX2V4aXRgLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAsIGFuZCBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjcnVjaWFsIGFzcGVjdHMgb2YgdGhlIHZlcmlmaWVyJ3Mgb3BlcmF0aW9uLiBJIHdhbnQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaW50ZXJhY3QgYW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9ucyBtaWdodCBpbnRyb2R1Y2UgdW5leHBlY3RlZCBlZGdlIGNhc2VzLlxuXG5UbyBtYWtlIHN1cmUgd2UncmUgY292ZXJpbmcgb3VyIGJhc2VzLCBJIG5lZWQgdG8gY29uZmlybSB3ZSdyZSBpbmNsdWRpbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgaW4gdGhlIGVuYWJsZSBjb25maWdzLiBUaGlzIGlzIHRoZSBtYWluIHN3aXRjaCB0aGF0IHR1cm5zIG9uIHRoZSBCUEYgc3lzdGVtIGFuZCB2ZXJpZmllci4gV2l0aG91dCBpdCwgbm9uZSBvZiB0aGlzIGlzIHJlbGV2YW50LlxuXG5TbywgdG8gc3VtbWFyaXplIHN1Y2NpbmN0bHk6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgQlBGIHZlcmlmaWVyIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGRlc3RydWN0aW9uIG9mIGNhbGxlZS1sb2NhbCBkeW5hbWljIHBvaW50ZXJzIGFuZCBpbnZhbGlkYXRlIHNsaWNlcyB3aGVuIGEgc3VicHJvZ3JhbSBleGl0cywgdGh1cyBtYWtpbmcgdGhpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cbldlIHNob3VsZCBpbW1lZGlhdGVseSBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDYzLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjowNi41MTIyMTQ3ODlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3MDU3OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgaW50cm9kdWNpbmcgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCB0byB0ZWFyIGRvd24gY2FsbGVlLWxvY2FsIGR5bnB0cnMgYW5kIGludmFsaWRhdGUgZGVyaXZlZCBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIGluIHByZXBhcmVfZnVuY19leGl0LiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIHZlcmlmaWNhdGlvbiBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIHZpYSBzeXNfYnBmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdFwiLFxuICAgIFwiZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYnkgaW50cm9kdWNpbmcgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCB0byB0ZWFyIGRvd24gY2FsbGVlLWxvY2FsIGR5bnB0cnMgYW5kIGludmFsaWRhdGUgZGVyaXZlZCBzbGljZXMgd2hlbiBleGl0aW5nIHN1YnByb2dyYW1zIGluIHByZXBhcmVfZnVuY19leGl0LiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIHZlcmlmaWNhdGlvbiBsb2dpYyBleGVjdXRlZCBkdXJpbmcgQlBGIHByb2dyYW0gdmVyaWZpY2F0aW9uIHZpYSBzeXNfYnBmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjowNi42NTY5MzU1NzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTI3MzgxNzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTY6MDYuNjU4MDE3NzQ5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI5MjYyOTYxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYnkgYWRkaW5nIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KClgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCB0byBlbnN1cmUgdGhhdCBkeW5wdHJzIGFsbG9jYXRlZCBvbiBhIGNhbGxlZSdzIHN0YWNrIGZyYW1lIGFyZSBwcm9wZXJseSBkZXN0cnVjdGVkIGFuZCB0aGVpciBkZXJpdmVkIHNsaWNlcyBpbnZhbGlkYXRlZCB3aGVuIHRoZSBzdWJwcm9ncmFtIHJldHVybnMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuXFxuLSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBkZXRlY3QgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2dpYyBidWdzIGluIGtlcm5lbC92ZXJpZmllciB2ZXJpZmljYXRpb24uXFxuXFxuVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaDpcXG4xLiBPcGVyYXRlIHB1cmVseSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllcidzIGNvbXBpbGUtdGltZSBzdGF0aWMgYW5hbHlzaXMgc3RhdGUgbWFjaGluZSAoYGJwZl9mdW5jX3N0YXRlYCkuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlgLCBgZXJyYCkgYW5kIHN0YXRlIGFjY2Vzc2VzIChgY2FsbGVlLVxcdTAwM2VzdGFja1tpXWApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCBieSBgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkVgLlxcbjMuIERvIG5vdCBhbGxvY2F0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWE3ZWY1N2IxNDVmOWNhNDEzYmE4NmJkZTU3YzY0ZDU5NDkyODdjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjU1OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA3MmEzZjU5OThkZDI3Li5jOWMxZGYyN2IyNjk5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC04MDAsNiArODAwLDMxIEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuIFx0cmV0dXJuIHJlZl9jbnQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbit7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4rXG4rXHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcbitcdFx0ICAgICFzbG90LVx1MDAzZXNwaWxsZWRfcHRyLmR5bnB0ci5maXJzdF9zbG90KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBBIGNhbGxlZS1sb2NhbCBkeW5wdHIgaXMgZGVzdHJveWVkIHdoZW4gaXRzIHN0YWNrIGZyYW1lIGdvZXNcbitcdFx0ICogYXdheS4gQXBwbHkgdGhlIG5vcm1hbCBzdGFjay1zbG90IHRlYXJkb3duIHNvIHJlZmVyZW5jZXMgY2Fubm90XG4rXHRcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxuK1x0XHQgKi9cbitcdFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIGNhbGxlZSwgaSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiArMTA0MjQsOSBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4gXHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbiBcdH1cbiBcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuK1x0ZXJyID0gZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuIFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4gXHQgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi9cbiBcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9zbGljZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUuc2tlbC5oXCJcbiBcbkBAIC0yMzAsNiArMjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKVxuIFx0XHR0ZXN0X2luY29tcGxfb3BzKCk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpO1xuK1x0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44MjE3ZjRjNGMwMGM0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbkBAIC0wLDAgKzEsNzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl9xZGlzY19jb21tb24uaFwiXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4raW50IHByb3RvO1xuK1xuK3N0YXRpYyBfX25vaW5saW5lIHN0cnVjdCBldGhoZHIgKnNsaWNlX2luX3N1YnByb2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCBcdTAwMjZwdHIpO1xuK1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IEJQRl9QUk9HKGludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbit7XG4rXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG4rXG4rXHRoZHIgPSBzbGljZV9pbl9zdWJwcm9nKHNrYik7XG4rXHRpZiAoIWhkcikge1xuK1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbitcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4rXHR9XG4rXG4rXHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRwcm90byA9IGhkci1cdTAwM2VoX3Byb3RvO1xuK1xuK1x0YnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7XG4rXG4rXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wc1wiKVxuK19fYXV4aWxpYXJ5XG4rc3RydWN0IHNrX2J1ZmYgKkJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2RlcXVldWUsIHN0cnVjdCBRZGlzYyAqc2NoKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbitpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbitcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X3Jlc2V0LCBzdHJ1Y3QgUWRpc2MgKnNjaClcbit7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwgc3RydWN0IFFkaXNjICpzY2gpXG4re1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wc1wiKVxuK3N0cnVjdCBRZGlzY19vcHMgdGVzdCA9IHtcbitcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuK1x0LmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSxcbitcdC5pbml0ICAgICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2luaXQsXG4rXHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbitcdC5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksXG4rXHQuaWQgICAgICAgID0gXCJicGZfcWRpc2NfdGVzdFwiLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uZjU3ZTYxNjJkYmY1YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW50IG1pc3NpbmdfcmVsZWFzZV9jYWxsYmFja19mbihfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiBcbiAvKiBBbnkgZHlucHRyIGluaXRpYWxpemVkIHdpdGhpbiBhIGNhbGxiYWNrIG11c3QgaGF2ZSBicGZfZHlucHRyX3B1dCBjYWxsZWQgKi9cbiBTRUMoXCI/cmF3X3RwXCIpXG4tX19mYWlsdXJlIF9fbXNnKFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWRcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCIpXG4gaW50IHJpbmdidWZfbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrKHZvaWQgKmN0eClcbiB7XG4gXHRicGZfbG9vcCgxMCwgbWlzc2luZ19yZWxlYXNlX2NhbGxiYWNrX2ZuLCBOVUxMLCAwKTtcbkBAIC0xODkyLDYgKzE4OTIsMTAxIEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XG4rXG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcbit9XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjYWxsZXJfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuK1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEocHRyLCAwLCBzaXplb2YodmFsKSk7XG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK31cbitcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIHJlc2VydmVfZHlucHRyX2luX3N1YnByb2codm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rfVxuK1xuKy8qIEEgc3VicHJvZ3JhbSBjYW5ub3QgbG9zZSB0aGUgbGFzdCBkeW5wdHIgdGhhdCBjYW4gcmVsZWFzZSBhIHJlc291cmNlLiAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXCIpXG4raW50IHJlZmVyZW5jZWRfZHlucHRyX2xvc3Rfb25fc3VicHJvZ19yZXR1cm4odm9pZCAqY3R4KVxuK3tcbitcdHJlc2VydmVfZHlucHRyX2luX3N1YnByb2coKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERlc3Ryb3lpbmcgYSBsb2NhbCBjbG9uZSBvbiByZXR1cm4gbXVzdCBub3QgaW52YWxpZGF0ZSBhIHNsaWNlIHdob3NlXG4rICogc291cmNlIGR5bnB0ciBiZWxvbmdzIHRvIHRoZSBjYWxsZXIuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBjYWxsZXJfZHlucHRyX3NsaWNlX2Fjcm9zc19zdWJwcm9nX3ZhbGlkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXHRpbnQgKmRhdGEgPSBOVUxMO1xuK1xuK1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuK1x0Y2FsbGVyX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIGEgY2xvbmUncyBjYWxsIGZyYW1lIGlzIGludmFsaWQgb25jZSB0aGUgbG9jYWxcbisgKiBjbG9uZSBpcyBkZXN0cm95ZWQgb24gcmV0dXJuLlxuKyAqL1xuK1NFQyhcIj9yYXdfdHBcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRcdCpkYXRhID0gMTIzO1xuK1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3JlbGVhc2VfaW52YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcdGlmIChkYXRhKVxuK1x0XHQvKiB0aGlzIHNob3VsZCBmYWlsICovXG4rXHRcdCpkYXRhID0gMTIzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXNcbiAgKiBvZiBpdHMgcGFyZW50XG4gICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjowNi42NTgwMjA2NTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0MTY1MDUyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgaXQncyB3b3J0aCB0aHJvd2luZyBLTVNBTiBhdC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyB0b3VjaGVkLiBBaCwgaXQncyBtb2RpZnlpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGFsc28gYWRkaW5nIHNvbWUgQlBGIHNlbGZ0ZXN0cywgaW50ZXJlc3RpbmcuIFRoYXQgYXJlYSBhbHdheXMgbWFrZXMgbWUgYSBsaXR0bGUgY2F1dGlvdXMuXG5cbkxldCBtZSBkaWcgaW50byBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgZnVuY3Rpb25zIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YCBhbmQgYHByZXBhcmVfZnVuY19leGl0YC4gVGhvc2UgYXJlIGtleSBzcG90cyBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSdsbCBmaXJlIHVwIGBncmVwcGVyYCAob3IgYHJlYWQtZmlsZWAsIGRlcGVuZGluZyBvbiBteSBtb29kKSBhbmQgZ2V0IGEgZGV0YWlsZWQgdmlldyBvZiB3aGF0J3MgZ29pbmcgb24gdGhlcmUuIEZyb20gdGhpcyBJIGNhbiBzZWUgd2hhdCBpcyBiZWluZyBhZGRlZCBhbmQgb3IgbW9kaWZpZWQgaW4gcmVsYXRpb24gdG8gZHluYW1pYyBwb2ludGVycywgd2hpY2ggaXMgd2hlcmUgS01TQU4gd2lsbCBnaXZlIHRoZSBtb3N0IHZhbHVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTY6MTguMDc0NTMwNTI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDgwODgyNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY2MT1zdGF0aWMgdm9pZCBtYXJrX2R5bnB0cl9jYl9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2ODpzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY5LVxcdFxcdFxcdFxcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjcxPXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19keW5wdHIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODMtXFx0LyogV2UgY2Fubm90IGFzc3VtZSBib3RoIHNwaSBhbmQgc3BpIC0gMSBiZWxvbmcgdG8gdGhlIHNhbWUgZHlucHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODQ6XFx0ICogaGVuY2Ugd2UgbmVlZCB0byBjYWxsIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdHdpY2UgZm9yIGJvdGgsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4NS1cXHQgKiB0byBlbnN1cmUgdGhhdCBmb3IgdGhlIGZvbGxvd2luZyBleGFtcGxlOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5MS1cXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjkyOlxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjkzLVxcdGlmIChlcnIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY5NC1cXHRcXHRyZXR1cm4gZXJyO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2OTU6XFx0ZXJyID0gZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChlbnYsIHN0YXRlLCBzcGkgLSAxKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjk2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODAzPXN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOS1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODIwOlxcdFxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBjYWxsZWUsIGkpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyODpzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODI5LVxcdFxcdFxcdFxcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04NzA9c3RhdGljIGJvb2wgaXNfZHlucHRyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04ODgtXFx0ICogU1RBQ0tfRFlOUFRSIHNsb3RzLCBzZWUgbWFya19zdGFja19zbG90c19keW5wdHIgd2hpY2ggY2FsbHNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODg5OlxcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdG8gZW5zdXJlIGR5bnB0ciBvYmplY3RzIGF0IHRoZSBzbG90cyB3ZSBhcmVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODkwLVxcdCAqIHRvdWNoaW5nIGFyZSBjb21wbGV0ZWx5IGRlc3RydWN0ZWQgYmVmb3JlIHdlIHJlaW5pdGlhbGl6ZSB0aGVtIGZvciBhIG5ld1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4OTE6XFx0ICogb25lLiBGb3IgcmVmZXJlbmNlZCBvbmVzLCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHJldHVybnMgYW4gZXJyb3IgZWFybHlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODkyLVxcdCAqIGluc3RlYWQgb2YgZGVsYXlpbmcgaXQgdW50aWwgdGhlIGVuZCB3aGVyZSB0aGUgdXNlciB3aWxsIGdldCBcXFwiVW5yZWxlYXNlZFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM1NDE9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTkzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTk0OlxcdGVyciA9IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QoZW52LCBzdGF0ZSwgc3BpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5NS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM2ODQ9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzcxMy1cXHRcXHRzcGkgPSBicGZfZ2V0X3NwaShpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzcxNDpcXHRcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgc3RhdGUsIHNwaSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3MTUtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTY6MTguMzgyNjIzNzQyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5OTM2ODc2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHR3byBmdW5jdGlvbnMsIGFzIEkgdW5kZXJzdGFuZCB0aGVtOlxuXG4qKkRpc3NlY3RpbmcgQlBGIEZ1bmN0aW9uIEV4aXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgZnVuY3Rpb24gZXhpdHMg4oCTIHNwZWNpZmljYWxseSwgdGhlIGNsZWFudXAgb3BlcmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIGBwcmVwYXJlX2Z1bmNfZXhpdGAgYW5kIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YC4gSSdtIGdvaW5nIHRvIGNvbnN1bHQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgY29udGV4dCwgZm9jdXNpbmcgb24gbGluZXMgODAwIGFuZCAxMDQwMCBmb3IgYSBzdGFydC5cblxuRnJvbSB0aGUgZnVuY3Rpb24gbmFtZXMsIEkgaW5mZXIgdGhhdCBgcHJlcGFyZV9mdW5jX2V4aXRgIGlzIGxpa2VseSBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgYSBmdW5jdGlvbidzIHJldHVybiwgbWF5YmUgdXBkYXRpbmcgc29tZSBzdGF0ZSBvciBwZXJmb3JtaW5nIGluaXRpYWwgY2xlYW51cCB0YXNrcyAqYmVmb3JlKiB0aGUgYWN0dWFsIGV4aXQuIE9uIHRoZSBvdGhlciBoYW5kLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgc2NyZWFtcyBhYm91dCBjbGVhbmluZyB1cCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcG9pbnRlcnMg4oCTIEJQRiBwcm9ncmFtcyBjYW4gYmUgc29waGlzdGljYXRlZCwgYW5kIHRoYXQgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgaGFuZGxlZCBkdXJpbmcgZnVuY3Rpb24gcmV0dXJucyB0byBhdm9pZCBsZWFrcyBvciBjb3JydXB0aW9uLiBUaGlzIHByb2JhYmx5IGludm9sdmVzIGZyZWVpbmcgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBkeW5hbWljIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gYSBCUEYgZnVuY3Rpb24uIEkgc3VzcGVjdCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdGAgaXMgZ29pbmcgdG8gYmUgdGhlIG1vcmUgY29tcGxleCBvZiB0aGUgdHdvLCBlc3BlY2lhbGx5IGlmIHRoZSBCUEYgcHJvZ3JhbSB1c2VzIHBvdGVudGlhbGx5IG5lc3RlZCBvciBjeWNsaWNhbCBwb2ludGVyIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyB0aGVzZSBkeW5hbWljIHBvaW50ZXJzIGFuZCBob3cgaXQgdmFsaWRhdGVzIHRoZWlyIGNsZWFudXAuIEl04oCZcyBwb3NzaWJsZSB0aGVyZSBhcmUgY2hlY2tzIG9uIHRoZSB2ZXJpZmllciBzdGFjayBkdXJpbmcgdGhlIGV4aXQgdG8gZW5zdXJlIGFsbCByZXNvdXJjZXMgYXJlIGRlYWxsb2NhdGVkIGFzIGRlc2lnbmVkLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIHRoZXNlIGZ1bmN0aW9uIGFkZHJlc3MuIExldCdzIHNlZSB3aGF0IHRoZSBhY3R1YWwgY29kZSBzYXlzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjoyMS4zNzYzMTQyOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0cmV0dXJuIHJlZl9jbnQ7XFxuIDgwMTpcXHR9XFxuIDgwMjpcXHRcXG4gODAzOlxcdHN0YXRpYyBpbnQgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA4MDQ6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXFxuIDgwNTpcXHR7XFxuIDgwNjpcXHRcXHRpbnQgaSwgZXJyO1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbiA4MDk6XFx0XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxcbiA4MTI6XFx0XFx0XFx0ICAgICFzbG90LVxcdTAwM2VzcGlsbGVkX3B0ci5keW5wdHIuZmlyc3Rfc2xvdClcXG4gODEzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRcXHQvKlxcbiA4MTY6XFx0XFx0XFx0ICogQSBjYWxsZWUtbG9jYWwgZHlucHRyIGlzIGRlc3Ryb3llZCB3aGVuIGl0cyBzdGFjayBmcmFtZSBnb2VzXFxuIDgxNzpcXHRcXHRcXHQgKiBhd2F5LiBBcHBseSB0aGUgbm9ybWFsIHN0YWNrLXNsb3QgdGVhcmRvd24gc28gcmVmZXJlbmNlcyBjYW5ub3RcXG4gODE4OlxcdFxcdFxcdCAqIGJlIGxvc3QgYW5kIHNsaWNlcyBkZXJpdmVkIGZyb20gdGhhdCBkeW5wdHIgYXJlIGludmFsaWRhdGVkLlxcbiA4MTk6XFx0XFx0XFx0ICovXFxuIDgyMDpcXHRcXHRcXHRlcnIgPSBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KGVudiwgY2FsbGVlLCBpKTtcXG4gODIxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDgyMjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA4MjM6XFx0XFx0fVxcbiA4MjQ6XFx0XFxuIDgyNTpcXHRcXHRyZXR1cm4gMDtcXG4gODI2OlxcdH1cXG4gODI3OlxcdFxcbiA4Mjg6XFx0c3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIDgyOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpXFxuIDgzMDpcXHR7XFxuIDgzMTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gODMyOlxcdFxcbiA4MzM6XFx0XFx0LyogV2UgYWx3YXlzIGVuc3VyZSB0aGF0IFNUQUNLX0RZTlBUUiBpcyBuZXZlciBzZXQgcGFydGlhbGx5LFxcbiA4MzQ6XFx0XFx0ICogaGVuY2UganVzdCBjaGVja2luZyBmb3Igc2xvdF90eXBlWzBdIGlzIGVub3VnaC4gVGhpcyBpc1xcbiA4MzU6XFx0XFx0ICogZGlmZmVyZW50IGZvciBTVEFDS19TUElMTCwgd2hlcmUgaXQgbWF5IGJlIG9ubHkgc2V0IGZvclxcbiA4MzY6XFx0XFx0ICogMSBieXRlLCBzbyBjb2RlIGhhcyB0byB1c2UgaXNfc3BpbGxlZF9yZWcuXFxuIDgzNzpcXHRcXHQgKi9cXG4gODM4OlxcdFxcdGlmIChzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSKVxcbiA4Mzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdC8qIFJlcG9zaXRpb24gc3BpIHRvIGZpcnN0IHNsb3QgKi9cXG4gODQyOlxcdFxcdGlmICghc3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3QpXFxuIDg0MzpcXHRcXHRcXHRzcGkgPSBzcGkgKyAxO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHQvKlxcbiA4NDY6XFx0XFx0ICogQSByZWZlcmVuY2VkIGR5bnB0ciBjYW4gYmUgb3ZlcndyaXR0ZW4gb25seSBpZiB0aGVyZSBpcyBhdFxcbiA4NDc6XFx0XFx0ICogbGVhc3Qgb25lIG90aGVyIGR5bnB0ciBzaGFyaW5nIHRoZSBzYW1lIHZpcnR1YWwgcmVmIHBhcmVudCxcXG4gODQ4OlxcdFxcdCAqIGVuc3VyaW5nIHRoZSByZWZlcmVuY2UgY2FuIHN0aWxsIGJlIHByb3Blcmx5IHJlbGVhc2VkLlxcbiA4NDk6XFx0XFx0ICovXFxuIDg1MDpcXHRcXHRpZiAoZHlucHRyX3R5cGVfcmVmZXJlbmNlZChzdGF0ZS1cXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0ci5keW5wdHIudHlwZSkgXFx1MDAyNlxcdTAwMjZcXG4gODUxOlxcdFxcdCAgICBkeW5wdHJfcmVmX2NudChlbnYsIHN0YXRlLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLnBhcmVudF9pZCkgXFx1MDAzYz0gMSkge1xcbiA4NTI6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYW5ub3Qgb3ZlcndyaXRlIHJlZmVyZW5jZWQgZHlucHRyXFxcXG5cXFwiKTtcXG4gODUzOlxcdFxcdFxcdGJwZl9kaWFnX3JlcyhcXG4gODU0OlxcdFxcdFxcdFxcdGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgXFxcInJlZmVyZW5jZWQgZHlucHRyIG92ZXJ3cml0ZVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjU2OjIxLjM3NzQ2MzczMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODMwNjYzMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBzb21lIGNvZGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgb3IgZHluYW1pYyBwb2ludGVycywgYW5kIEknbSBxdWl0ZSBmYW1pbGlhciB3aXRoIHRoZSBmdW5jdGlvbiBgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdGA6XG5cbioqTGV0J3MgRGlnIGludG8gYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIHRoZSBwdXp6bGUuLi4gSSdtIHByZXR0eSBzdXJlIEkga25vdyB3aGF0IGBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90YCAqc2hvdWxkKiBiZSBkb2luZywgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uIGFuZCB3aGVyZSBpdCdzIHByb2JhYmx5IGJlaW5nIHVzZWQuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGNsZWFuaW5nIHVwLCBkZWFsbG9jYXRpbmcsIG9yIGF0IGxlYXN0IHJlc2V0dGluZyBzb21lIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnksIGxpa2VseSBwb2ludGVycyByZXNpZGluZyBvbiB0aGUgc3RhY2suIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiB0aGUgZGV0YWlscywgdGhvdWdoLCB0byBlbnN1cmUgSSdtIHJlbWVtYmVyaW5nIHRoZSBzcGVjaWZpY3MgY29ycmVjdGx5LiBJJ3ZlIGdvdCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyB3aG9sZSBzeXN0ZW0gd29ya3Mg4oCTIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgc3RhY2ssIGhlYXAsIHRoZXNlIGR5bmFtaWMgcG9pbnRlcnMg4oCTIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3RgIGZ1bmN0aW9uIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBhbmQgdGhhdCBpdCdzIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4gTGV0J3MgZ2V0IHRoZSBmdWxsIGNvbnRleHQgdG8gc2VlIGhvdyBpdCBpcyBzdXBwb3NlZCB0byBiZSB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjoyNC4yMDgxMzE1NzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMDEyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODU1OlxcdFxcdFxcdFxcdFxcXCJUaGlzIHN0YWNrIHNsb3QgY29udGFpbnMgYSBkeW5wdHIgdGhhdCBvd25zIG9yIHByb3RlY3RzIGEgcmVmZXJlbmNlZCByZXNvdXJjZS4gT3ZlcndyaXRpbmcgdGhlIGxhc3QgZHlucHRyIGZvciB0aGF0IHJlc291cmNlIHdvdWxkIGxvc2UgdGhlIHZlcmlmaWVyLXRyYWNrZWQgcmVsZWFzZSBwYXRoLlxcXCIsXFxuIDg1NjpcXHRcXHRcXHRcXHRcXFwiUmVsZWFzZSBvciBjbG9uZSB0aGUgZHlucHRyIHNvIGFub3RoZXIgbGl2ZSBkeW5wdHIgc3RpbGwgdHJhY2tzIHRoZSByZWZlcmVuY2VkIHJlc291cmNlIGJlZm9yZSBvdmVyd3JpdGluZyB0aGlzIHN0YWNrIHNsb3QuXFxcIik7XFxuIDg1NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODU4OlxcdFxcdH1cXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0LyogSW52YWxpZGF0ZSB0aGUgZHlucHRyIGFuZCBhbnkgZGVyaXZlZCBzbGljZXMgKi9cXG4gODYxOlxcdFxcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlKGVudiwgc3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIuaWQpO1xcbiA4NjI6XFx0XFx0aWYgKCFlcnIpIHtcXG4gODYzOlxcdFxcdFxcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkpO1xcbiA4NjQ6XFx0XFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIDEpO1xcbiA4NjU6XFx0XFx0fVxcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRyZXR1cm4gZXJyO1xcbiA4Njg6XFx0fVxcbiA4Njk6XFx0XFxuIDg3MDpcXHRzdGF0aWMgYm9vbCBpc19keW5wdHJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbiA4NzE6XFx0e1xcbiA4NzI6XFx0XFx0aW50IHNwaTtcXG4gODczOlxcdFxcbiA4NzQ6XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSA9PSBDT05TVF9QVFJfVE9fRFlOUFRSKVxcbiA4NzU6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRzcGkgPSBkeW5wdHJfZ2V0X3NwaShlbnYsIHJlZyk7XFxuIDg3ODpcXHRcXG4gODc5OlxcdFxcdC8qIC1FUkFOR0UgKGkuZS4gc3BpIG5vdCBmYWxsaW5nIGludG8gYWxsb2NhdGVkIHN0YWNrIHNsb3RzKSBpc24ndCBhblxcbiA4ODA6XFx0XFx0ICogZXJyb3IgYmVjYXVzZSB0aGlzIGp1c3QgbWVhbnMgdGhlIHN0YWNrIHN0YXRlIGhhc24ndCBiZWVuIHVwZGF0ZWQgeWV0LlxcbiA4ODE6XFx0XFx0ICogV2Ugd2lsbCBkbyBjaGVja19tZW1fYWNjZXNzIHRvIGNoZWNrIGFuZCB1cGRhdGUgc3RhY2sgYm91bmRzIGxhdGVyLlxcbiA4ODI6XFx0XFx0ICovXFxuIDg4MzpcXHRcXHRpZiAoc3BpIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBzcGkgIT0gLUVSQU5HRSlcXG4gODg0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODg1OlxcdFxcbiA4ODY6XFx0XFx0LyogV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgc3RhY2sgc2xvdHMgYXJlIG1hcmtlZCBieSBwcmV2aW91c1xcbiA4ODc6XFx0XFx0ICogZHlucHRyIGluaXRpYWxpemF0aW9ucyBiZWNhdXNlIHdlIGFsbG93IG92ZXJ3cml0aW5nIGV4aXN0aW5nIHVucmVmZXJlbmNlZFxcbiA4ODg6XFx0XFx0ICogU1RBQ0tfRFlOUFRSIHNsb3RzLCBzZWUgbWFya19zdGFja19zbG90c19keW5wdHIgd2hpY2ggY2FsbHNcXG4gODg5OlxcdFxcdCAqIGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3QgdG8gZW5zdXJlIGR5bnB0ciBvYmplY3RzIGF0IHRoZSBzbG90cyB3ZSBhcmVcXG4gODkwOlxcdFxcdCAqIHRvdWNoaW5nIGFyZSBjb21wbGV0ZWx5IGRlc3RydWN0ZWQgYmVmb3JlIHdlIHJlaW5pdGlhbGl6ZSB0aGVtIGZvciBhIG5ld1xcbiA4OTE6XFx0XFx0ICogb25lLiBGb3IgcmVmZXJlbmNlZCBvbmVzLCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90IHJldHVybnMgYW4gZXJyb3IgZWFybHlcXG4gODkyOlxcdFxcdCAqIGluc3RlYWQgb2YgZGVsYXlpbmcgaXQgdW50aWwgdGhlIGVuZCB3aGVyZSB0aGUgdXNlciB3aWxsIGdldCBcXFwiVW5yZWxlYXNlZFxcbiA4OTM6XFx0XFx0ICogcmVmZXJlbmNlXFxcIiBlcnJvci5cXG4gODk0OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjoyNC4yMTAwNjkzMTVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODAwOTg0MTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHByZXBhcmVfZnVuY19leGl0YCBpbiBDb250ZXh0KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYHByZXBhcmVfZnVuY19leGl0YC4gTGV0J3MgemVybyBpbiBvbiBhcm91bmQgbGluZSAxMDQyNC4gVGhhdCBzaG91bGQgcHV0IG1lIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB3aGF0J3MgZ29pbmcgb24uIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgY2xlYW51cCBkdXJpbmcgZnVuY3Rpb24gZXhpdHMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY2FzZSBvZiBzb21ldGhpbmcgbGlrZSBhIHN0YWNrIHVud2luZGluZywgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLCBvciBleGNlcHRpb24gaGFuZGxpbmcuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgbGFuZ3VhZ2UgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHN0YWNrIGZyYW1lIG1hbmFnZW1lbnQuIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQncyBiZWluZyBwYXNzZWQgaW4gYW5kIGV4YWN0bHkgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhlc2UgYXJndW1lbnRzIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byByZWxlYXNlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIG9yIHRvIHVwZGF0ZSB0aGUgY29udHJvbCBmbG93LCBwZXJoYXBzIHVzaW5nIGEganVtcCB0YWJsZSBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZXJlIG1pZ2h0IGJlIGludGVyYWN0aW9ucyB3aXRoIGEgZGVidWdnZXIgb3IgcHJvZmlsZXIgaGVyZSBhcyB3ZWxsLiBJIGhvcGUgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYXJvdW5kIHRoaXMgc2VjdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODg3MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTY6MzIuMjE5OTE0MDk3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjE0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNDEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQxMDpcXHRcXHQvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsXFxuMTA0MTE6XFx0XFx0ICogdGhlcmUgZnVuY3Rpb24gY2FsbCBsb2dpYyB3b3VsZCByZXNjaGVkdWxlIGNhbGxiYWNrIHZpc2l0LiBJZiBpdGVyYXRpb25cXG4xMDQxMjpcXHRcXHQgKiBjb252ZXJnZXMgaXNfc3RhdGVfdmlzaXRlZCgpIHdvdWxkIHBydW5lIHRoYXQgdmlzaXQgZXZlbnR1YWxseS5cXG4xMDQxMzpcXHRcXHQgKi9cXG4xMDQxNDpcXHRcXHRpbl9jYWxsYmFja19mbiA9IGNhbGxlZS1cXHUwMDNlaW5fY2FsbGJhY2tfZm47XFxuMTA0MTU6XFx0XFx0aWYgKGluX2NhbGxiYWNrX2ZuKVxcbjEwNDE2OlxcdFxcdFxcdCppbnNuX2lkeCA9IGNhbGxlZS1cXHUwMDNlY2FsbHNpdGU7XFxuMTA0MTc6XFx0XFx0ZWxzZVxcbjEwNDE4OlxcdFxcdFxcdCppbnNuX2lkeCA9IGNhbGxlZS1cXHUwMDNlY2FsbHNpdGUgKyAxO1xcbjEwNDE5OlxcdFxcbjEwNDIwOlxcdFxcdGlmIChlbnYtXFx1MDAzZWxvZy5sZXZlbCBcXHUwMDI2IEJQRl9MT0dfTEVWRUwpIHtcXG4xMDQyMTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInJldHVybmluZyBmcm9tIGNhbGxlZTpcXFxcblxcXCIpO1xcbjEwNDIyOlxcdFxcdFxcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlZS1cXHUwMDNlZnJhbWVubywgdHJ1ZSk7XFxuMTA0MjM6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJ0byBjYWxsZXIgYXQgJWQ6XFxcXG5cXFwiLCAqaW5zbl9pZHgpO1xcbjEwNDI0OlxcdFxcdFxcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cXHUwMDNlZnJhbWVubywgdHJ1ZSk7XFxuMTA0MjU6XFx0XFx0fVxcbjEwNDI2OlxcdFxcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xcbjEwNDI3OlxcdFxcdGVyciA9IGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbjEwNDI4OlxcdFxcdGlmIChlcnIpXFxuMTA0Mjk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMDQzMDpcXHRcXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcXG4xMDQzMTpcXHRcXHQgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi9cXG4xMDQzMjpcXHRcXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcXG4xMDQzMzpcXHRcXHRzdGF0ZS1cXHUwMDNlZnJhbWVbc3RhdGUtXFx1MDAzZWN1cmZyYW1lLS1dID0gTlVMTDtcXG4xMDQzNDpcXHRcXHRpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoZW52LCBjYWxsZXIpO1xcbjEwNDM1OlxcdFxcbjEwNDM2OlxcdFxcdC8qIGZvciBjYWxsYmFja3Mgd2lkZW4gaW1wcmVjaXNlIHNjYWxhcnMgdG8gbWFrZSBwcm9ncmFtcyBsaWtlIGJlbG93IHZlcmlmeTpcXG4xMDQzNzpcXHRcXHQgKlxcbjEwNDM4OlxcdFxcdCAqICAgc3RydWN0IGN0eCB7IGludCBpOyB9XFxuMTA0Mzk6XFx0XFx0ICogICB2b2lkIGNiKGludCBpZHgsIHN0cnVjdCBjdHggKmN0eCkgeyBjdHgtXFx1MDAzZWkrKzsgLi4uIH1cXG4xMDQ0MDpcXHRcXHQgKiAgIC4uLlxcbjEwNDQxOlxcdFxcdCAqICAgc3RydWN0IGN0eCA9IHsgLmkgPSAwOyB9XFxuMTA0NDI6XFx0XFx0ICogICBicGZfbG9vcCgxMDAsIGNiLCBcXHUwMDI2Y3R4LCAwKTtcXG4xMDQ0MzpcXHRcXHQgKlxcbjEwNDQ0OlxcdFxcdCAqIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IGlzIGRvbmUgaW4gcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIGZvciBvcGVuXFxuMTA0NDU6XFx0XFx0ICogY29kZWQgaXRlcmF0b3JzLlxcbjEwNDQ2OlxcdFxcdCAqL1xcbjEwNDQ3OlxcdFxcdHByZXZfc3QgPSBpbl9jYWxsYmFja19mbiA/IGZpbmRfcHJldl9lbnRyeShlbnYsIHN0YXRlLCAqaW5zbl9pZHgpIDogTlVMTDtcXG4xMDQ0ODpcXHRcXHRpZiAocHJldl9zdCkge1xcbjEwNDQ5OlxcdFxcdFxcdGVyciA9IHdpZGVuX2ltcHJlY2lzZV9zY2FsYXJzKGVudiwgcHJldl9zdCwgc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjozMi4yMjE2ODMxNDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM2MjYwOTI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSaXNrIEFzc2Vzc21lbnQ6IEJQRiBWZXJpZmllciBEeW5wdHIgQ2xlYW51cCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIHBhdGNoLCBkZWFsaW5nIHdpdGggQlBGIHZlcmlmaWVyIGR5bnB0ciBjbGVhbnVwLCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBjYXJlZnVsbHksIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIEtNU0FOIGlzc3Vlcy5cblxuRmlyc3QsIHRoZSBwYXRjaCdzIGNvcmUgZnVuY3Rpb24sIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0YCwgZm9jdXNlcyBvbiBjbGVhbmluZyB1cCBkeW5wdHJzIG9uIGEgY2FsbGVlJ3Mgc3RhY2sgZnJhbWUgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIHN0YWNrLCBjaGVja3MgZm9yIGBTVEFDS19EWU5QVFJgIHNsb3RzLCBhbmQgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZXMuIEl0J3MgYWxsIGhhcHBlbmluZyAqd2l0aGluKiB0aGUgdmVyaWZpZXIncyBzdGF0aWMgYW5hbHlzaXMsIG5vdCBkdXJpbmcgcnVudGltZSBleGVjdXRpb24gb2YgYSBCUEYgcHJvZ3JhbS4gU28gdGhlIHF1ZXN0aW9uIGlzOiBjYW4gdGhpcyBpbnRyb2R1Y2Uga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgS01TQU4/XG5cblRoZSBLTVNBTiBjcml0ZXJpYSBhcmUgZnJlc2ggaW4gbXkgbWluZDoga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHVuaW5pdGlhbGl6ZWQgZmllbGQgcmVhZHMsIGFuZCBib3VuZHMgaXNzdWVzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcy5cblxuTG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb2RlLCBgaWAgYW5kIGBlcnJgIGFyZSBsb2NhbCwgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW50ZWdlcnMuIGBpYCBpcyB1c2VkIHRvIGluZGV4IHRocm91Z2ggdGhlIHN0YWNrLCBhbmQgdGhlIGNvZGUgb25seSByZWFkcyBpbml0aWFsaXplZCBmaWVsZHMgKGBzbG90X3R5cGVbMF1gLCBgc3BpbGxlZF9wdHIuZHlucHRyLmZpcnN0X3Nsb3RgKS4gVGhlcmUgYXJlIG5vIGtlcm5lbC10by11c2VyIGNvcGllcywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgc3RhdGljIGFuYWx5c2lzIGF0IHZlcmlmaWNhdGlvbiB0aW1lLCBub3QgcnVuIHRpbWUgZXhlY3V0aW9uLiBJdCBpcyBhbGwgYm91bmRlZCBieSBgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFja2AuXG5cblRoZSBgY2FsbGVlLVx1MDAzZXN0YWNrYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGR1cmluZyB2ZXJpZmllciBzdGF0ZSBjcmVhdGlvbjsgdGhlIGBzbG90X3R5cGVgIGlzIGFsc28gaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvciBkYW5nbGluZyBzbGljZSBhY2Nlc3NlcyBpbiB2ZXJpZmllZCBCUEYgcHJvZ3JhbXMsIHdoaWNoIGFyZSBydW50aW1lIHNhZmV0eSBidWdzIGNhdWdodCBieSB2ZXJpZmllciBvciBLQVNBTiwgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IGNyZWF0ZSBhbnkgS01TQU4gY29uY2VybnMuIEl0J3MgYWJvdXQgdGlnaHRlbmluZyB2ZXJpZmljYXRpb24sIG5vdCBydW50aW1lIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtpbmcgaW5mb3JtYXRpb24uIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKG9yIHN0YW5kYXJkIEtBU0FOIHZlcmlmaWVyIHRlc3RzKSBhcmUgYXBwcm9wcmlhdGUuIEknbSBjb25maWRlbnQgYWJvdXQgdGhpcy5cblxuVG8gY2VtZW50IHRoZSByZWFzb25pbmcsIEknbGwgZW1waGFzaXplIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIEtNU0FOIGFuZCBLQVNBTi4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgcmVhZHMgYW5kIGxlYWtzOyBLQVNBTiBpcyBmb3IgdGhlIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIFRoZSBjb2RlIGFkZGVkLCBgZGVzdHJveV9keW5wdHJzX29uX2Z1bmNfZXhpdCgpYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB3aXRoaW4gYHByZXBhcmVfZnVuY19leGl0KClgLCBvbmx5IHRvdWNoZXMgQlBGIHZlcmlmaWVyIHN0YXRpYyBhbmFseXNpcywgY2xlYW5pbmcgdXAgZHlucHRycy4gVGhlIHZlcmlmaWVyIGNvZGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQuIFRodXMsIEkgc3RhbmQgYnkgbXkgJ05lZWRzS01TQU4gPSBmYWxzZScgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyOCwiT3V0cHV0VG9rZW5zIjozMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1NjozOS41ODQyOTUxMTNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYnkgYWRkaW5nIGBkZXN0cm95X2R5bnB0cnNfb25fZnVuY19leGl0KClgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCB0byBlbnN1cmUgdGhhdCBkeW5wdHJzIGFsbG9jYXRlZCBvbiBhIGNhbGxlZSdzIHN0YWNrIGZyYW1lIGFyZSBwcm9wZXJseSBkZXN0cnVjdGVkIGFuZCB0aGVpciBkZXJpdmVkIHNsaWNlcyBpbnZhbGlkYXRlZCB3aGVuIHRoZSBzdWJwcm9ncmFtIHJldHVybnMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuXFxuLSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBkZXRlY3QgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCBsb2dpYyBidWdzIGluIGtlcm5lbC92ZXJpZmllciB2ZXJpZmljYXRpb24uXFxuXFxuVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaDpcXG4xLiBPcGVyYXRlIHB1cmVseSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllcidzIGNvbXBpbGUtdGltZSBzdGF0aWMgYW5hbHlzaXMgc3RhdGUgbWFjaGluZSAoYGJwZl9mdW5jX3N0YXRlYCkuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlgLCBgZXJyYCkgYW5kIHN0YXRlIGFjY2Vzc2VzIChgY2FsbGVlLVxcdTAwM2VzdGFja1tpXWApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgYm91bmRlZCBieSBgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkVgLlxcbjMuIERvIG5vdCBhbGxvY2F0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGludHJvZHVjZSBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBieSBhZGRpbmcgYGRlc3Ryb3lfZHlucHRyc19vbl9mdW5jX2V4aXQoKWAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgYHByZXBhcmVfZnVuY19leGl0KClgIHRvIGVuc3VyZSB0aGF0IGR5bnB0cnMgYWxsb2NhdGVkIG9uIGEgY2FsbGVlJ3Mgc3RhY2sgZnJhbWUgYXJlIHByb3Blcmx5IGRlc3RydWN0ZWQgYW5kIHRoZWlyIGRlcml2ZWQgc2xpY2VzIGludmFsaWRhdGVkIHdoZW4gdGhlIHN1YnByb2dyYW0gcmV0dXJucy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS5cXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGRldGVjdCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIGxvZ2ljIGJ1Z3MgaW4ga2VybmVsL3ZlcmlmaWVyIHZlcmlmaWNhdGlvbi5cXG5cXG5UaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoOlxcbjEuIE9wZXJhdGUgcHVyZWx5IHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgY29tcGlsZS10aW1lIHN0YXRpYyBhbmFseXNpcyBzdGF0ZSBtYWNoaW5lIChgYnBmX2Z1bmNfc3RhdGVgKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaWAsIGBlcnJgKSBhbmQgc3RhdGUgYWNjZXNzZXMgKGBjYWxsZWUtXFx1MDAzZXN0YWNrW2ldYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBib3VuZGVkIGJ5IGBjYWxsZWUtXFx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRWAuXFxuMy4gRG8gbm90IGFsbG9jYXRlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IGNvcHlfdG9fdXNlciBwYXRocywgb3IgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxcblxcbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[1] Phase: Succeeded StartedAt: 2026-09-11 08:56:51 +0000 UTC FinishedAt: 2026-09-11 08:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 08:56:51 +0000 UTC FinishedAt: 2026-09-11 08:56:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2] Phase: Succeeded StartedAt: 2026-09-11 08:56:51 +0000 UTC FinishedAt: 2026-09-11 12:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 08:56:51 +0000 UTC FinishedAt: 2026-09-11 12:45:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 08:56:51 +0000 UTC FinishedAt: 2026-09-11 08:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 08:56:51 +0000 UTC FinishedAt: 2026-09-11 08:56:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow5tjgs/series-workflow5tjgs-convert-artifact-3040283558/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 08:57:02 +0000 UTC FinishedAt: 2026-09-11 09:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 08:57:02 +0000 UTC FinishedAt: 2026-09-11 09:21:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0649cb72-58c7-4386-b0d7-ffc2989ef03e,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-workflow5tjgs/series-workflow5tjgs-convert-artifact-3040283558/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": "45dbfd74-722c-4bc9-acd7-c26e85058cb6", "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-workflow5tjgs/series-workflow5tjgs-build-action-3875351612/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:57:02 +0000 UTC FinishedAt: 2026-09-11 09:21:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0649cb72-58c7-4386-b0d7-ffc2989ef03e,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-workflow5tjgs/series-workflow5tjgs-convert-artifact-3040283558/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": "45dbfd74-722c-4bc9-acd7-c26e85058cb6", "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-workflow5tjgs/series-workflow5tjgs-build-action-3875351612/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 09:21:59 +0000 UTC FinishedAt: 2026-09-11 09:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 09:21:59 +0000 UTC FinishedAt: 2026-09-11 09:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 09:21:59 +0000 UTC FinishedAt: 2026-09-11 09:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 09:21:59 +0000 UTC FinishedAt: 2026-09-11 09:22:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow5tjgs/series-workflow5tjgs-convert-artifact-4291894777/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 09:22:09 +0000 UTC FinishedAt: 2026-09-11 09:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 09:22:09 +0000 UTC FinishedAt: 2026-09-11 09:23:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45dbfd74-722c-4bc9-acd7-c26e85058cb6,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-workflow5tjgs/series-workflow5tjgs-build-action-3875351612/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-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 09:24:05 +0000 UTC FinishedAt: 2026-09-11 09:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:24:05 +0000 UTC FinishedAt: 2026-09-11 09:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 09:24:05 +0000 UTC FinishedAt: 2026-09-11 09:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 09:24:05 +0000 UTC FinishedAt: 2026-09-11 09:41:01 +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:*0649cb72-58c7-4386-b0d7-ffc2989ef03e,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-workflow5tjgs/series-workflow5tjgs-convert-artifact-4291894777/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": "d9f4f499-94b7-465b-b3b1-e8d23f735f9e", "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-workflow5tjgs/series-workflow5tjgs-build-action-3274498005/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 09:24:05 +0000 UTC FinishedAt: 2026-09-11 09:40:51 +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:*0649cb72-58c7-4386-b0d7-ffc2989ef03e,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-workflow5tjgs/series-workflow5tjgs-convert-artifact-4291894777/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": "d9f4f499-94b7-465b-b3b1-e8d23f735f9e", "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-workflow5tjgs/series-workflow5tjgs-build-action-3274498005/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 09:41:01 +0000 UTC FinishedAt: 2026-09-11 09:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 09:41:01 +0000 UTC FinishedAt: 2026-09-11 09:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 09:41:01 +0000 UTC FinishedAt: 2026-09-11 09:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 09:41:01 +0000 UTC FinishedAt: 2026-09-11 09:42:47 +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:*d9f4f499-94b7-465b-b3b1-e8d23f735f9e,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-workflow5tjgs/series-workflow5tjgs-build-action-3274498005/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-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 09:42:57 +0000 UTC FinishedAt: 2026-09-11 12:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 09:42:57 +0000 UTC FinishedAt: 2026-09-11 12:45:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"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:*45dbfd74-722c-4bc9-acd7-c26e85058cb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d9f4f499-94b7-465b-b3b1-e8d23f735f9e,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-workflow5tjgs/series-workflow5tjgs-build-action-3875351612/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-workflow5tjgs/series-workflow5tjgs-build-action-3274498005/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 09:42:57 +0000 UTC FinishedAt: 2026-09-11 09:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 09:42:57 +0000 UTC FinishedAt: 2026-09-11 09:43:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"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-workflow5tjgs/series-workflow5tjgs-convert-artifact-624598894/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 09:42:57 +0000 UTC FinishedAt: 2026-09-11 09:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 09:42:57 +0000 UTC FinishedAt: 2026-09-11 09:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:42:57 +0000 UTC FinishedAt: 2026-09-11 09:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 09:43:07 +0000 UTC FinishedAt: 2026-09-11 12:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5tjgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","prepare_func_exit","destroy_dynptrs_on_func_exit","destroy_if_dynptr_stack_slot"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e4a62833adff6ef0fe7c0b90393204fe3c26b5c5","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d38877b7-4aaf-40ad-938d-9ca42ee61495","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 09:43:07 +0000 UTC FinishedAt: 2026-09-11 12:45:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45dbfd74-722c-4bc9-acd7-c26e85058cb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d9f4f499-94b7-465b-b3b1-e8d23f735f9e,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-workflow5tjgs/series-workflow5tjgs-build-action-3875351612/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-workflow5tjgs/series-workflow5tjgs-build-action-3274498005/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-workflow5tjgs/series-workflow5tjgs-convert-artifact-624598894/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,}