Name: series-workflowcpb42 Phase: Succeeded StartedAt: 2026-06-22 07:29:58 +0000 UTC FinishedAt: 2026-06-22 12:10:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[0] Phase: Succeeded StartedAt: 2026-06-22 07:29:58 +0000 UTC FinishedAt: 2026-06-22 07:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 07:29:58 +0000 UTC FinishedAt: 2026-06-22 07:45:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ff6f26c58421614b02694ac9d219ac61d924bc68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "BLK_DEV_THROTTLING", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP_IOCOST", "BLK_CGROUP_IOPRIO", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ff6f26c58421614b02694ac9d219ac61d924bc68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "BLK_DEV_THROTTLING", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP_IOCOST", "BLK_CGROUP_IOPRIO", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED" ], "series_id": "ceab8ef5-b8b2-478d-b445-4b4df68b1156" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blkg_conf_prep", "blkcg_init_disk", "blkg_free_workfn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9QUklPJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrZ19jb25mX3ByZXAmIzM0OywKICAgICYjMzQ7YmxrY2dfaW5pdF9kaXNrJiMzNDssCiAgICAmIzM0O2Jsa2dfZnJlZV93b3JrZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYmxrZ19jcmVhdGUgYW5kIHRoZSBhc3luY2hyb25vdXMgZnJlZWluZyBsb2dpYyBpbiBibGtnX2ZyZWVfd29ya2ZuIHRvIHN5bmNocm9ub3VzbHkgZnJlZSBwb2xpY3kgZGF0YSAocGQpIHdoZW4gYmxrZ19jcmVhdGUgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBjZ3JvdXAgbG9naWMgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVhayB3aGVuIGEgcG9saWN5IGlzIHVucmVnaXN0ZXJlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY29uZmlndXJhdGlvbiB3cml0ZXMgYW5kIGRpc2sgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZywgZXNwZWNpYWxseSB3aXRoIGZhdWx0IGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgwNzE5NGZlMmZmNjczMzY4MWJjODdkNDQ2NDUwM2I0OWJmNTAxMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwNzo0MjowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IGJjNjNiZDIyMDg2NWRjLi42NzM4ODZkNzFjMjY1ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNncm91cC5jXG5AQCAtMTExLDEyICYjNDM7MTExLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqYmxrY2dfY3NzKHZvaWQpXG4gXHRyZXR1cm4gdGFza19jc3MoY3VycmVudCwgaW9fY2dycF9pZCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBibGtnX2ZyZWVfcGQoc3RydWN0IGJsa2NnX2dxICpibGtnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGJsa2ctXHUwMDNlcGRbaV0pIHtcbiYjNDM7XHRcdFx0YmxrY2dfcG9saWN5W2ldLVx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cdTAwM2VwZFtpXSk7XG4mIzQzO1x0XHRcdGJsa2ctXHUwMDNlcGRbaV0gPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBibGtnX2ZyZWVfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJsa2NnX2dxLFxuIFx0XHRcdFx0XHQgICAgIGZyZWVfd29yayk7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJsa2ctXHUwMDNlcTtcbi1cdGludCBpO1xuIFxuIFx0LypcbiBcdCAqIHBkX2ZyZWVfZm4oKSBjYW4gYWxzbyBiZSBjYWxsZWQgZnJvbSBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLFxuQEAgLTEyNiw5ICYjNDM7MTM3LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19mcmVlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHQgKiBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLlxuIFx0ICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkmIzQzOyYjNDM7KVxuLVx0XHRpZiAoYmxrZy1cdTAwM2VwZFtpXSlcbi1cdFx0XHRibGtjZ19wb2xpY3lbaV0tXHUwMDNlcGRfZnJlZV9mbihibGtnLVx1MDAzZXBkW2ldKTtcbiYjNDM7XHRibGtnX2ZyZWVfcGQoYmxrZyk7XG4gXHRpZiAoYmxrZy1cdTAwM2VwYXJlbnQpXG4gXHRcdGJsa2dfcHV0KGJsa2ctXHUwMDNlcGFyZW50KTtcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbkBAIC00MzgsMTUgJiM0Mzs0NDcsMjQgQEAgc3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRpZiAoIXJldClcbiBcdFx0cmV0dXJuIGJsa2c7XG4gXG4tXHQvKiBAYmxrZyBmYWlsZWQgZnVsbHkgaW5pdGlhbGl6ZWQsIHVzZSB0aGUgdXN1YWwgcmVsZWFzZSBwYXRoICovXG4tXHRibGtnX3B1dChibGtnKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEBibGtnIGZhaWxlZCBmdWxseSBpbml0aWFsaXplZCBhbmQgbmV2ZXIgbGlua2VkLCBzbyBpdHMgcGRbXSBpc1xuJiM0MztcdCAqIGludmlzaWJsZSB0byBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLiBGcmVlIHBkW10gc3luY2hyb25vdXNseVxuJiM0MztcdCAqIHdoaWxlIGJsa2NnX3BvbGljeVtdIGlzIHN0aWxsIHZhbGlkLCBvdGhlcndpc2UgdGhlIGFzeW5jIGZyZWUgcGF0aFxuJiM0MztcdCAqIG1heSBjYWxsIHBkX2ZyZWVfZm4oKSBhZnRlciB0aGUgcG9saWN5IGlzIHVucmVnaXN0ZXJlZCAoZS5nLiBybW1vZCBiZnEpLlxuJiM0MztcdCAqIFRoZSBlcnJfZnJlZV9ibGtnIHBhdGggYmVsb3cgZnJlZXMgcGRbXSBmb3IgdGhlIHNhbWUgcmVhc29uLlxuJiM0MztcdCAqL1xuJiM0MztcdGJsa2dfZnJlZV9wZChibGtnKTtcbiYjNDM7XHRwZXJjcHVfcmVmX2tpbGwoXHUwMDI2YmxrZy1cdTAwM2VyZWZjbnQpO1xuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiBcbiBlcnJfcHV0X2NzczpcbiBcdGNzc19wdXQoXHUwMDI2YmxrY2ctXHUwMDNlY3NzKTtcbiBlcnJfZnJlZV9ibGtnOlxuLVx0aWYgKG5ld19ibGtnKVxuJiM0MztcdGlmIChuZXdfYmxrZykge1xuJiM0MztcdFx0YmxrZ19mcmVlX3BkKG5ld19ibGtnKTtcbiBcdFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPUFJJTyYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgICAmIzM0O2Jsa2NnX2luaXRfZGlzayYjMzQ7LAogICAgJiMzNDtibGtnX2ZyZWVfd29ya2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGJsa2dfY3JlYXRlIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYmxrZ19mcmVlX3dvcmtmbiB0byBzeW5jaHJvbm91c2x5IGZyZWUgcG9saWN5IGRhdGEgKHBkKSB3aGVuIGJsa2dfY3JlYXRlIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgY2dyb3VwIGxvZ2ljIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWsgd2hlbiBhIHBvbGljeSBpcyB1bnJlZ2lzdGVyZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNvbmZpZ3VyYXRpb24gd3JpdGVzIGFuZCBkaXNrIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwNzE5NGZlMmZmNjczMzY4MWJjODdkNDQ2NDUwM2I0OWJmNTAxMjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAwNzo0MjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwppbmRleCBiYzYzYmQyMjA4NjVkYy4uNjczODg2ZDcxYzI2NWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTExMSwxMiAmIzQzOzExMSwyMyBAQCBzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2Nzcyh2b2lkKQogCXJldHVybiB0YXNrX2NzcyhjdXJyZW50LCBpb19jZ3JwX2lkKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGJsa2dfZnJlZV9wZChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGJsa2ctJmd0O3BkW2ldKSB7CiYjNDM7CQkJYmxrY2dfcG9saWN5W2ldLSZndDtwZF9mcmVlX2ZuKGJsa2ctJmd0O3BkW2ldKTsKJiM0MzsJCQlibGtnLSZndDtwZFtpXSA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBibGtnX2ZyZWVfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJsa2NnX2dxLAogCQkJCQkgICAgIGZyZWVfd29yayk7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBibGtnLSZndDtxOwotCWludCBpOwogCiAJLyoKIAkgKiBwZF9mcmVlX2ZuKCkgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKSwKQEAgLTEyNiw5ICYjNDM7MTM3LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19mcmVlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS4KIAkgKi8KIAltdXRleF9sb2NrKCZhbXA7cS0mZ3Q7YmxrY2dfbXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBCTEtDR19NQVhfUE9MUzsgaSYjNDM7JiM0MzspCi0JCWlmIChibGtnLSZndDtwZFtpXSkKLQkJCWJsa2NnX3BvbGljeVtpXS0mZ3Q7cGRfZnJlZV9mbihibGtnLSZndDtwZFtpXSk7CiYjNDM7CWJsa2dfZnJlZV9wZChibGtnKTsKIAlpZiAoYmxrZy0mZ3Q7cGFyZW50KQogCQlibGtnX3B1dChibGtnLSZndDtwYXJlbnQpOwogCXNwaW5fbG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTsKQEAgLTQzOCwxNSAmIzQzOzQ0NywyNCBAQCBzdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2NyZWF0ZShzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlpZiAoIXJldCkKIAkJcmV0dXJuIGJsa2c7CiAKLQkvKiBAYmxrZyBmYWlsZWQgZnVsbHkgaW5pdGlhbGl6ZWQsIHVzZSB0aGUgdXN1YWwgcmVsZWFzZSBwYXRoICovCi0JYmxrZ19wdXQoYmxrZyk7CiYjNDM7CS8qCiYjNDM7CSAqIEBibGtnIGZhaWxlZCBmdWxseSBpbml0aWFsaXplZCBhbmQgbmV2ZXIgbGlua2VkLCBzbyBpdHMgcGRbXSBpcwomIzQzOwkgKiBpbnZpc2libGUgdG8gYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS4gRnJlZSBwZFtdIHN5bmNocm9ub3VzbHkKJiM0MzsJICogd2hpbGUgYmxrY2dfcG9saWN5W10gaXMgc3RpbGwgdmFsaWQsIG90aGVyd2lzZSB0aGUgYXN5bmMgZnJlZSBwYXRoCiYjNDM7CSAqIG1heSBjYWxsIHBkX2ZyZWVfZm4oKSBhZnRlciB0aGUgcG9saWN5IGlzIHVucmVnaXN0ZXJlZCAoZS5nLiBybW1vZCBiZnEpLgomIzQzOwkgKiBUaGUgZXJyX2ZyZWVfYmxrZyBwYXRoIGJlbG93IGZyZWVzIHBkW10gZm9yIHRoZSBzYW1lIHJlYXNvbi4KJiM0MzsJICovCiYjNDM7CWJsa2dfZnJlZV9wZChibGtnKTsKJiM0MzsJcGVyY3B1X3JlZl9raWxsKCZhbXA7YmxrZy0mZ3Q7cmVmY250KTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogCiBlcnJfcHV0X2NzczoKIAljc3NfcHV0KCZhbXA7YmxrY2ctJmd0O2Nzcyk7CiBlcnJfZnJlZV9ibGtnOgotCWlmIChuZXdfYmxrZykKJiM0MzsJaWYgKG5ld19ibGtnKSB7CiYjNDM7CQlibGtnX2ZyZWVfcGQobmV3X2Jsa2cpOwogCQlibGtnX2ZyZWUobmV3X2Jsa2cpOwomIzQzOwl9CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIENncm91cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBibGtnX2ZyZWVfcGRgIGZ1bmN0aW9uLiBGcm9tIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBmcmVlaW5nIG9mIGFsbCBgcGRgcyAocHJlc3VtYWJseSAmIzM0O3BvbGljeSBkYXRhJiMzNDsgb3Igc29tZXRoaW5nIHNpbWlsYXIpIGFzc29jaWF0ZWQgd2l0aCBhIGBibGtjZ19ncWAuIE1ha2VzIHNlbnNlOyBjZW50cmFsaXppbmcgdGhpcyBjbGVhbnVwIGxvZ2ljIGlzIGdlbmVyYWxseSBnb29kIHByYWN0aWNlLgoKTm93LCB0aGUgaW1wb3J0YW50IGJpdHMuIGBibGtnX2ZyZWVfcGRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBwbGFjZXMsIGJvdGggcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gRmlyc3RseSwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGJsa2dfZnJlZV93b3JrZm5gLCByZXBsYWNpbmcgc29tZSBpbmxpbmUgY29kZS4gU3RhbmRhcmQgcmVmYWN0b3JpbmcgLSB0aWR5aW5nIHVwIHRoZSBjb2RlIGFuZCBpbXByb3ZpbmcgbWFpbnRhaW5hYmlsaXR5LgoKVGhlIHNlY29uZCBhcmVhIGlzIG1vcmUgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGJlaW5nIGludGVncmF0ZWQgaW50byBgYmxrZ19jcmVhdGVgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBlcnJvciBwYXRocy4gUHJldmlvdXNseSwgaWYgYGJsa2dfY3JlYXRlYCBmYWlsZWQgKmFmdGVyKiBpbml0aWFsaXppbmcgdGhlIGBibGtnYCBzdHJ1Y3R1cmUsIGl0IHdvdWxkIGNhbGwgYGJsa2dfcHV0KGJsa2cpYCB3aGljaCB3b3VsZCBlc3NlbnRpYWxseSBxdWV1ZSB0aGUgZnJlZWluZyBvcGVyYXRpb24gYXN5bmNocm9ub3VzbHkuIFRoaXMgaXNuJiMzOTt0IGlkZWFsIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGluIGFuIGVycm9yIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlIHN1YnNlcXVlbnQgZnJlZWluZyBvcGVyYXRpb25zIGNvdWxkIGNhdXNlIGlzc3Vlcy4gTm93LCB0aGUgcGF0Y2ggaXMgbW9yZSBkaXJlY3Q6IGl0IGNhbGxzIGBibGtnX2ZyZWVfcGQoYmxrZylgIHRvIGNsZWFuIHVwIHRoZSBgcGRgcyBhbmQgdGhlbiBpbW1lZGlhdGVseSBgcGVyY3B1X3JlZl9raWxsKCZhbXA7YmxrZy0mZ3Q7cmVmY250KWAgdG8gZ2V0IHJpZCBvZiB0aGUgcmVmZXJlbmNlIGNvdW50LiBUaGlzIGlzIGEgbXVjaCBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBzdHJhdGVneSwgcHJldmVudGluZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIG9yIHNpbWlsYXIgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBkZWxheWVkIGNsZWFudXAuCgpBbHNvIGluIHRoZSBgZXJyX2ZyZWVfYmxrZ2AgcGF0aCwgdGhleSBjYWxsIGBibGtnX2ZyZWVfcGQobmV3X2Jsa2cpYCBiZWZvcmUgYGJsa2dfZnJlZShuZXdfYmxrZylgLCB3aGljaCBhZ2FpbiBtYWtlcyBwZXJmZWN0IHNlbnNlIGZvciBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCBvcmRlci4KCkxldCYjMzk7cyBwdWxsIHVwIHRoZSBgYmxrZ19jcmVhdGVgIGZ1bmN0aW9uIGluIGBibG9jay9ibGstY2dyb3VwLmNgIGl0c2VsZiBhbmQgc2VlIGhvdyBhbGwgdGhpcyBpcyB3b3JraW5nIGluIGNvbnRleHQuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IHRoaXMgaXMgZGVzaWduZWQgdG8gbWl0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jPTMwOD1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2FsbG9jKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0zNzgtICovXG5ibG9jay9ibGstY2dyb3VwLmM6Mzc5OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5jLTM4MC1cdFx0XHRcdCAgICBzdHJ1Y3QgYmxrY2dfZ3EgKm5ld19ibGtnKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODAtICpcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0ODE6ICogUmV0dXJucyB0aGUgYmxrZyBvciB0aGUgY2xvc2VzdCBibGtnIGlmIGJsa2dfY3JlYXRlKCkgZmFpbHMgYXMgaXQgd2Fsa3NcbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODItICogZG93biBmcm9tIHJvb3QuXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTQ4ND1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2xvb2t1cF9jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZyxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNTA4LVx0ICogbm9uLXJvb3QgYmxrZ3MgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgcGFyZW50cy4gIFJldHVybnMgdGhlIGNsb3Nlc3RcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1MDk6XHQgKiBibGtnIHRvIHRoZSBpbnRlbmRlZCBibGtnIHNob3VsZCBibGtnX2NyZWF0ZSgpIGZhaWwuXG5ibG9jay9ibGstY2dyb3VwLmMtNTEwLVx0ICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTUyNi1cbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mjc6XHRcdGJsa2cgPSBibGtnX2NyZWF0ZShwb3MsIGRpc2ssIE5VTEwpO1xuYmxvY2svYmxrLWNncm91cC5jLTUyOC1cdFx0aWYgKElTX0VSUihibGtnKSkge1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz04ODI9aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtOTUyLVx0XHR9IGVsc2Uge1xuYmxvY2svYmxrLWNncm91cC5jOjk1MzpcdFx0XHRibGtnID0gYmxrZ19jcmVhdGUocG9zLCBkaXNrLCBuZXdfYmxrZyk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTU0LVx0XHRcdGlmIChJU19FUlIoYmxrZykpIHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTUxNj1pbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTI4LVx0ICogdGhlIG9sZCBvbmUgaXMgc3RpbGwgYWxpdmUsIGFuZCByYWRpeF90cmVlX2luc2VydCgpIGluXG5ibG9jay9ibGstY2dyb3VwLmM6MTUyOTpcdCAqIGJsa2dfY3JlYXRlKCkgd2lsbCBmYWlsIHdpdGggLUVFWElTVCBiZWNhdXNlIHRoZSBvbGQgZW50cmllc1xuYmxvY2svYmxrLWNncm91cC5jLTE1MzAtXHQgKiBzdGlsbCBvY2N1cHkgdGhlIHNhbWUgcXVldWUgaWQgc2xvdCBpbiBibGtjZy1cdTAwM2VibGtnX3RyZWUuXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE1NDItXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG5ibG9jay9ibGstY2dyb3VwLmM6MTU0MzpcdGJsa2cgPSBibGtnX2NyZWF0ZShcdTAwMjZibGtjZ19yb290LCBkaXNrLCBuZXdfYmxrZyk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTU0NC1cdGlmIChJU19FUlIoYmxrZykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIGJsb2NrIGNncm91cHM6CgoqKkFuYWx5emluZyBhIEJsb2NrIENncm91cCBQYXRjaDogRXJyb3IgUGF0aCBPcHRpbWl6YXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBgYmxrZ19jcmVhdGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gZXJyb3IgaGFuZGxpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGZyZWVpbmcgYHBkYCBzdHJ1Y3R1cmVzIHN5bmNocm9ub3VzbHkgd2l0aGluIHRoZSBlcnJvciBwYXRocy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHdlIGhhbmRsZSBibG9jayBjZ3JvdXAgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc2V0dGluZ3MgdGhhdCB3b3VsZCBpbnRlcmFjdCB3aXRoIHRoaXMgbW9kaWZpZWQgZXJyb3IgaGFuZGxpbmcuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYmxvY2sgY2dyb3VwIGFsbG9jYXRpb24sIHJlc291cmNlIGxpbWl0cywgYW5kIGVycm9yIHJlY292ZXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZXJyb3IgcGF0aHMgYXJlIHRyaWdnZXJlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHN5bmNocm9ub3VzIGZyZWVpbmcgbWlnaHQgYmUgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBhbmQgaG93IHRoaXMgYWx0ZXJzIHJlc291cmNlIHVzYWdlIHdoZW4gYWxsb2NhdGlvbiBmYWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcbi0tXG5ibG9jay9LY29uZmlnLTQxLVxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcbmJsb2NrL0tjb25maWctNDMtXHRib29sXG5ibG9jay9LY29uZmlnLTQ0LVxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xuYmxvY2svS2NvbmZpZy00Ni1cdGJvb2xcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE0NC1cbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG5ibG9jay9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE1My1cbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuYmxvY2svS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNjMtXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbmJsb2NrL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjA2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOgoKKipBbmFseXppbmcgQmxvY2sgSU8gYW5kIENvbnRyb2wgR3JvdXBzKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGdvIGRvd24gYW55IGZ1cnRoZXIgcmFiYml0IGhvbGVzIGhlcmUsIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgY2xlYXIgcGljdHVyZSBvZiAqZXhhY3RseSogd2hhdCBgQkxLX0NHUk9VUGAgaXMuIEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aCBhbnkgaW4tZGVwdGggYW5hbHlzaXMgb3IgZGVidWdnaW5nIHdpdGhvdXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgYW5kIGludGVyYWN0aW9ucyBvZiB0aGF0IHNwZWNpZmljIGNvbXBvbmVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHNvbGlkIGdyb3VuZCwgYW5kIG5vdCB3b3JraW5nIG9mZiBvZiBhc3N1bXB0aW9ucy4gTGV0IG1lIHB1bGwgdXAgdGhhdCBkZWZpbml0aW9uLCBhbmQgZ2V0IGEgYmV0dGVyIG1lbnRhbCBtb2RlbCBlc3RhYmxpc2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxuLS1cbmJsb2NrL0tjb25maWctNDEtXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxuYmxvY2svS2NvbmZpZy00My1cdGJvb2xcbmJsb2NrL0tjb25maWctNDQtXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG5ibG9jay9LY29uZmlnLTQ2LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTQ0LVxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbmJsb2NrL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE2My1cbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuYmxvY2svS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O0Nncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1wmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xMDg1PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTAxLVxuaW5pdC9LY29uZmlnOjExMDI6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTAzLVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsb2NrIEkvTyBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHRoZSBgQkxLX0NHUk9VUGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIGFzIGV4cGVjdGVkLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIHdpdGhpbiBgYmxvY2svYmxrLWNncm91cC5jYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLgoKUmlnaHQgb2ZmIHRoZSBiYXQsIGBibGtnX2NyZWF0ZWAgaXMgbW9kaWZpZWQuIEFuZCBJIHNlZSBhIG5ldyBmdW5jdGlvbiBgYmxrZ19mcmVlX3BkYCBoYXMgYmVlbiBhZGRlZCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGlzIHBhdGNoIGlzIGFib3V0IG1hbmFnaW5nIHBlci1kZXZpY2UgZGF0YSBhc3NvY2lhdGVkIHdpdGggYmxvY2sgY2dyb3Vwcy4gQWxzbywgYGJsa2dfZnJlZV93b3JrZm5gIGlzIG1vZGlmaWVkIHdoaWNoIGNvdWxkIG1lYW4gYSBjaGFuZ2UgaW4gcmVzb3VyY2UgY2xlYW51cC4KCkludGVyZXN0aW5nLiBJIG5vdGljZSBjYWxscyB0byBgYmxrZ19jcmVhdGVgIHdpdGhpbiBgYmxrZ19sb29rdXBfY3JlYXRlYCwgYGJsa2dfY29uZl9wcmVwYCwgYW5kIGBibGtjZ19pbml0X2Rpc2tgLiBDbGVhcmx5LCBgYmxrZ19jcmVhdGVgIGlzIHBpdm90YWwuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgdGhlc2UgYmxvY2sgZ3JvdXAgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjcmVhdGVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgdG8gYGJsa2dfY3JlYXRlYCB0byBmdWxseSBnZXQgYSBncmFzcCBvZiB0aGlzIHBhdGNoJiMzOTtzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jPTMwOD1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2FsbG9jKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0zNzgtICovXG5ibG9jay9ibGstY2dyb3VwLmM6Mzc5OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5jLTM4MC1cdFx0XHRcdCAgICBzdHJ1Y3QgYmxrY2dfZ3EgKm5ld19ibGtnKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODAtICpcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0ODE6ICogUmV0dXJucyB0aGUgYmxrZyBvciB0aGUgY2xvc2VzdCBibGtnIGlmIGJsa2dfY3JlYXRlKCkgZmFpbHMgYXMgaXQgd2Fsa3NcbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODItICogZG93biBmcm9tIHJvb3QuXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTQ4ND1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2xvb2t1cF9jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZyxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNTA4LVx0ICogbm9uLXJvb3QgYmxrZ3MgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgcGFyZW50cy4gIFJldHVybnMgdGhlIGNsb3Nlc3RcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1MDk6XHQgKiBibGtnIHRvIHRoZSBpbnRlbmRlZCBibGtnIHNob3VsZCBibGtnX2NyZWF0ZSgpIGZhaWwuXG5ibG9jay9ibGstY2dyb3VwLmMtNTEwLVx0ICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTUyNi1cbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mjc6XHRcdGJsa2cgPSBibGtnX2NyZWF0ZShwb3MsIGRpc2ssIE5VTEwpO1xuYmxvY2svYmxrLWNncm91cC5jLTUyOC1cdFx0aWYgKElTX0VSUihibGtnKSkge1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz04ODI9aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtOTUyLVx0XHR9IGVsc2Uge1xuYmxvY2svYmxrLWNncm91cC5jOjk1MzpcdFx0XHRibGtnID0gYmxrZ19jcmVhdGUocG9zLCBkaXNrLCBuZXdfYmxrZyk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTU0LVx0XHRcdGlmIChJU19FUlIoYmxrZykpIHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTUxNj1pbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTI4LVx0ICogdGhlIG9sZCBvbmUgaXMgc3RpbGwgYWxpdmUsIGFuZCByYWRpeF90cmVlX2luc2VydCgpIGluXG5ibG9jay9ibGstY2dyb3VwLmM6MTUyOTpcdCAqIGJsa2dfY3JlYXRlKCkgd2lsbCBmYWlsIHdpdGggLUVFWElTVCBiZWNhdXNlIHRoZSBvbGQgZW50cmllc1xuYmxvY2svYmxrLWNncm91cC5jLTE1MzAtXHQgKiBzdGlsbCBvY2N1cHkgdGhlIHNhbWUgcXVldWUgaWQgc2xvdCBpbiBibGtjZy1cdTAwM2VibGtnX3RyZWUuXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE1NDItXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG5ibG9jay9ibGstY2dyb3VwLmM6MTU0MzpcdGJsa2cgPSBibGtnX2NyZWF0ZShcdTAwMjZibGtjZ19yb290LCBkaXNrLCBuZXdfYmxrZyk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTU0NC1cdGlmIChJU19FUlIoYmxrZykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzOTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgSU8gQ2dyb3VwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBibG9jayBJL08gY2dyb3VwIHBvbGljaWVzIGFyZSBjb25maWd1cmVkIGFuZCBJJiMzOTt2ZSBnb3QgYSBmZXcgc3Ryb25nIGNvbnRlbmRlcnMgZm9yIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gVGhlIGZ1bmN0aW9uIGBibGtnX2NvbmZfcHJlcGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0JiMzOTtzIGRpcmVjdGx5IHRpZWQgdG8gY29uZmlndXJpbmcgYmxrY2cgcG9saWNpZXMsIHBhcnRpY3VsYXJseSB0aHJvdWdoIGNncm91cGZzLiBUaGF0IGZlZWxzIHJpZ2h0LgoKVGhlbiwgdGhlcmUmIzM5O3MgYGJsa2NnX2luaXRfZGlza2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBkdXJpbmcgZGlzayBpbml0aWFsaXphdGlvbi4gVGhhdCBzZWVtcyByZWxldmFudCwgYnV0IGxpa2VseSBtb3JlIG9uIHRoZSBpbml0aWFsIHNldHVwIHNpZGUsIHJhdGhlciB0aGFuIHRoZSBjb25maWd1cmF0aW9uLiBXZSBhbHNvIGhhdmUgYGJsa2dfbG9va3VwX2NyZWF0ZWAsIHdoaWNoIGhhbmRsZXMgbG9va2luZyB1cCBvciBjcmVhdGluZyBhIGBibGtnYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgcHJvYmFibHkgaW52b2x2ZWQsIGFzIGl0IHNldHMgdXAgdGhlIGJsa2csIGJ1dCBtaWdodCBub3QgYmUgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludC4KCk15IGd1dCBmZWVsaW5nLCB0aG91Z2gsIGlzIHRoYXQgYGJsa2dfY29uZl9wcmVwYCBpcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlIGZvciBpbi1kZXB0aCBwb2xpY3kgd29yay4gU28sIGxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gaXRzIGNhbGxlcnMgYW5kIHNlZSB3aGVyZSB0aGlzIHJhYmJpdCBob2xlIGxlYWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JmcS1jZ3JvdXAuYz0xMDQyPXN0YXRpYyBzc2l6ZV90IGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTEwNTMtXG5ibG9jay9iZnEtY2dyb3VwLmM6MTA1NDpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfYmZxLCBcdTAwMjZjdHgpO1xuYmxvY2svYmZxLWNncm91cC5jLTEwNTUtXHRpZiAocmV0KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz03Njc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NzUtICogT25jZSBpbml0aWFsaXplZCwgQGN0eCBjYW4gYmUgdXNlZCB3aXRoIGJsa2dfY29uZl9vcGVuX2JkZXYoKSBhbmRcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NzY6ICogYmxrZ19jb25mX3ByZXAoKSwgYW5kIG11c3QgYmUgY2xlYW5lZCB1cCB3aXRoIGJsa2dfY29uZl9leGl0KCkuXG5ibG9jay9ibGstY2dyb3VwLmMtNzc3LSAqL1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz03ODI9RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX2luaXQpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy03OTItICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIEBjdHggYW5kIHRoZSBleHRyYSBjYWxscyBiZWNvbWVcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3OTM6ICogTk9PUHMuIGJsa2dfY29uZl9wcmVwKCkgaW1wbGljaXRseSBjYWxscyB0aGlzIGZ1bmN0aW9uLiBVc2UgdGhpcyBmdW5jdGlvblxuYmxvY2svYmxrLWNncm91cC5jLTc5NC0gKiBleHBsaWNpdGx5IGlmIGJkZXYgYWNjZXNzIGlzIG5lZWRlZCB3aXRob3V0IHJlc29sdmluZyB0aGUgYmxrY2cgLyBwb2xpY3kgcGFydFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz04NDI9dW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgYmxrZ19jb25mX29wZW5fYmRldl9mcm96ZW4oc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtODY3LS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjg2ODogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXG5ibG9jay9ibGstY2dyb3VwLmMtODY5LSAqIEBibGtjZzogdGFyZ2V0IGJsb2NrIGNncm91cFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy04ODEtICovXG5ibG9jay9ibGstY2dyb3VwLmM6ODgyOmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG5ibG9jay9ibGstY2dyb3VwLmMtODgzLVx0XHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy05ODctfVxuYmxvY2svYmxrLWNncm91cC5jOjk4ODpFWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfcHJlcCk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTg5LVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjI9dW5zaWduZWQgbG9uZyBibGtnX2NvbmZfb3Blbl9iZGV2X2Zyb3plbihzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMjM6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjQtXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpO1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYz0zMTA0PXN0YXRpYyBzc2l6ZV90IGlvY193ZWlnaHRfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTMxNDItXG5ibG9jay9ibGstaW9jb3N0LmM6MzE0MzpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9jb3N0LCBcdTAwMjZjdHgpO1xuYmxvY2svYmxrLWlvY29zdC5jLTMxNDQtXHRpZiAocmV0KVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz04Mjc9c3RhdGljIHNzaXplX3QgaW9sYXRlbmN5X3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODU0LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjg1NTpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9sYXRlbmN5LCBcdTAwMjZjdHgpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTg1Ni1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTM0Mz1zdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTM2My1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzNjQ6XHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgXHUwMDI2Y3R4KTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNjUtXHRpZiAocmV0KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE1Mjc9c3RhdGljIHNzaXplX3QgdGdfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNTQ3LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTU0ODpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcdTAwMjZjdHgpO1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTU0OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgQ2dyb3VwIEJ1ZyBhbmQgaXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCBzZWVtcyBgYmxrZ19jb25mX3ByZXBgIGlzIGEgY2VudHJhbCBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBkaWZmZXJlbnQgY2dyb3VwIGZpbGUgd3JpdGUgaGFuZGxlcnMuIEkgY2FuIHNlZSBpdCYjMzk7cyBsaW5rZWQgdG8gYGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodGAsIGBpb2Nfd2VpZ2h0X3dyaXRlYCwgYGlvbGF0ZW5jeV9zZXRfbGltaXRgLCBgdGdfc2V0X2NvbmZgLCBhbmQgYHRnX3NldF9saW1pdGAg4oCTIGJhc2ljYWxseSwgc2V0dGluZ3MgcmVsYXRlZCB0byBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBhcHBlYXJzIHRvIGJlIHRoYXQgYGJsa2dfY3JlYXRlYCBpc24mIzM5O3QgYWx3YXlzIGluaXRpYWxpemluZyBwcm9wZXJseS4gSXQgY2FuIGZhaWwgdG8gZnVsbHkgbGluaywgbWVhbmluZyBpdHMgYHBkW11gIGRhdGEgc3RydWN0dXJlLCB3aGljaCBJIGFzc3VtZSBob2xkcyBwZXItZGV2aWNlIGluZm9ybWF0aW9uLCBiZWNvbWVzIGludmlzaWJsZSB0byBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKWAuIFRoaXMgaXMgYSBwcmV0dHkgY3JpdGljYWwgZmxhdywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgYWNjb3VudGluZyBvciByZXNvdXJjZSBsZWFrcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGVzZSBmYWlsdXJlIG1vZGVzIGluIGBibGtnX2NyZWF0ZWAsIHdoaWNoIGNvdWxkIGhhcHBlbiBpZiB0aGVyZSYjMzk7cyBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIGEgYHJhZGl4X3RyZWVfaW5zZXJ0YCBmYWlsdXJlLCBvciBhIGBiZGlfZ2V0YCBmYWlsdXJlLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGJsb2NrIGNncm91cCBlcnJvciBoYW5kbGluZy4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBhbnkgZmFpbHVyZSBzdGF0ZXMgYXJlIGNvcnJlY3RseSBoYW5kbGVkLgoKUmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBzZXZlcmFsIG9wdGlvbnMgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCwgbGlrZSBgQkxLX0NHUk9VUGAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPUFJJT2AsIGBJT1NDSEVEX0JGUWAsIGBCRlFfQ0dST1VQX0RFQlVHYCwgYEJMS19DR1JPVVBfUldTVEFUYCwgYW5kIGBCTEtfQ0dST1VQX1BVTlRfQklPYC4gTGV0JiMzOTtzIHBheSBleHRyYSBhdHRlbnRpb24gdG8gYElPU0NIRURfQkZRYCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYCBzaW5jZSB0aGV5JiMzOTtyZSBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIHJlbGF0aW9uIHRvIGBibGtnX2NvbmZfcHJlcGAuIFRoaXMgc2VlbXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkZRX0dST1VQX0lPU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkPTE5PWNvbmZpZyBJT1NDSEVEX0JGUVxuLS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZC0yOS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZDozMDpjb25maWcgQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMS0gICAgICAgYm9vbCBcJiMzNDtCRlEgaGllcmFyY2hpY2FsIHNjaGVkdWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzgxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBJL08gTGF0ZW5jeSBNZXRyaWNzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYmxvY2sgSS9PIGxhdGVuY3kgbWV0cmljcy4gSSB3YW50IHRvIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCB3aGljaCBJIGtub3cgY2FuIGdpdmUgbWUgYSBncmFudWxhciB2aWV3IGludG8gdGhlIGxhdGVuY3kgZXhwZXJpZW5jZWQgYnkgaW5kaXZpZHVhbCBjZ3JvdXBzLiBJJiMzOTttIGFsc28gdGhpbmtpbmcgdGhpcyBpcyBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gY2hlY2sgb3RoZXIgcmVsYXRlZCBibG9jayBkZXZpY2Ugc3RhdGlzdGljcyBhcyB3ZWxsLCBwcm9iYWJseSBmb2N1c2luZyBvbiBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBwcm92aWRlIGNvcnJvYm9yYXRpbmcgZXZpZGVuY2UuIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhdCBhIHZlcnkgbG93IGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcbi0tXG5ibG9jay9LY29uZmlnLTQxLVxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcbmJsb2NrL0tjb25maWctNDMtXHRib29sXG5ibG9jay9LY29uZmlnLTQ0LVxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xuYmxvY2svS2NvbmZpZy00Ni1cdGJvb2xcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE0NC1cbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG5ibG9jay9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE1My1cbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuYmxvY2svS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNjMtXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbmJsb2NrL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGBCTEtfREVWX1RIUk9UVExJTkdgLiBXaGF0JiMzOTtzIHRoZSBjdXJyZW50IHN0YXR1cywgYW5kIHdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIG9wdGltaXplIGZvciBwZXJmb3JtYW5jZSBhbmQgcHJldmVudCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaGlzIGludm9sdmVzIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhbmQgc2VlaW5nIGhvdyBJIGNhbiBtb25pdG9yIHRoZSBibG9jayBkZXZpY2UgdGhyb3R0bGluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCB0cmFkZS1vZmZzIHRoYXQgaGF2ZSB0byBiZSBtYWRlIHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IGFuZCBibG9jayBkZXZpY2VzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBjYXVzaW5nIHVubmVjZXNzYXJ5IGJsb2NrIGRldmljZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxuLS1cbmJsb2NrL0tjb25maWctMTA1LVxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuYmxvY2svS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgYmxvY2sgSS9PIGNncm91cCBjb25maWd1cmF0aW9uczogYEJMS19DR1JPVVBgLCBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYElPU0NIRURfQkZRYCwgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAuIE5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGNhbGxlcnMgb2YgYGJsa2dfY3JlYXRlYC4gSSByZW1lbWJlciB0aGF0IHdhcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBSaWdodCwgdGhlIGtleSBjYWxsZXJzIGFyZSBgYmxrZ19jb25mX3ByZXBgLCBgYmxrY2dfaW5pdF9kaXNrYCwgYW5kIGBibGtnX2xvb2t1cF9jcmVhdGVgLgoKTGV0IG1lIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGJsa2dfY3JlYXRlYCwgYGJsa2dfY29uZl9wcmVwYCwgYGJsa2NnX2luaXRfZGlza2AsIGBibGtnX2xvb2t1cF9jcmVhdGVgLCBhbmQgYGJsa2dfZnJlZV93b3JrZm5gLiBIb2xkIG9uLCBpcyBgYmxrZ19jcmVhdGVgIHN0YXRpYz8gWWVzLCBpdCBpcy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBmb2N1cyBvdXIgYXR0ZW50aW9uIG9uICBgYmxrZ19jb25mX3ByZXBgLCBgYmxrY2dfaW5pdF9kaXNrYCwgYGJsa2dfbG9va3VwX2NyZWF0ZWAsIGFuZCBgYmxrZ19mcmVlX3dvcmtmbmAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LgoKV2FpdCBhIHNlY29uZCwgd2FzbiYjMzk7dCBgYmxrZ19sb29rdXBfY3JlYXRlYCBhbHNvIGRlY2xhcmVkIHN0YXRpYz8gT2theSwgbG9va3MgbGlrZSBpdCBpcy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgYmxrZ19sb29rdXBfY3JlYXRlYC4gR290dGEgYmUgdGhvcm91Z2ggaGVyZSBhbmQgbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19sb29rdXBfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz0zNzk9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTQ3MS0vKipcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0NzI6ICogYmxrZ19sb29rdXBfY3JlYXRlIC0gbG9va3VwIGJsa2csIHRyeSB0byBjcmVhdGUgb25lIGlmIG5vdCB0aGVyZVxuYmxvY2svYmxrLWNncm91cC5jLTQ3My0gKiBAYmxrY2c6IGJsa2NnIG9mIGludGVyZXN0XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTQ4My0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzo0ODQ6c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19sb29rdXBfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csXG5ibG9jay9ibGstY2dyb3VwLmMtNDg1LVx0XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MjEyND1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqYmxrZ190cnlnZXRfY2xvc2VzdChzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxMjktXHRyY3VfcmVhZF9sb2NrKCk7XG5ibG9jay9ibGstY2dyb3VwLmM6MjEzMDpcdGJsa2cgPSBibGtnX2xvb2t1cF9jcmVhdGUoY3NzX3RvX2Jsa2NnKGNzcyksIGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2spO1xuYmxvY2svYmxrLWNncm91cC5jLTIxMzEtXHR3aGlsZSAoYmxrZykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBibGtnX3RyeWdldF9jbG9zZXN0YCBMb2NhdGlvbioqCgpIbW0sIHNvIGBibGtnX3RyeWdldF9jbG9zZXN0YC4uLiBJIHdhcyBmYWlybHkgY2VydGFpbiB0aGF0IHdhcyBkZWNsYXJlZCBgc3RhdGljIGlubGluZWAuIEl0JiMzOTtzIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuIGZvciB0aG9zZSBraW5kcyBvZiBoZWxwZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY2dyb3VwIGJsb2NrIGRldmljZSBhY2NvdW50aW5nLCBrZWVwaW5nIHRoZW0gY2xvc2UgdG8gd2hlcmUgdGhleSYjMzk7cmUgdXNlZC4gQnV0LCB3YWl0LCB0aGF0IGRvZXNuJiMzOTt0IHF1aXRlIHNlZW0gcmlnaHQuIEkgdGhvdWdodCBJIHNhdyBpdCBpbiBgYmxvY2svYmxrLWNncm91cC5jYD8gT2theSwgd2FpdCwgKmlzKiBpdCBpbiBgYmxvY2svYmxrLWNncm91cC5jYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uLiBKdXN0IG5lZWQgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNyZW1lbWJlcmluZyBvciBjb25mbGF0aW5nIGl0IHdpdGggc29tZXRoaW5nIGVsc2UsIG90aGVyd2lzZSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgYWNjdXJhdGUuIFJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTtsbCBqdXN0IGNvbmZpcm0gd2hlcmUgdGhhdCBjb2RlIGxpdmVzIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2dfdHJ5Z2V0X2Nsb3Nlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jPTIxMDc9dm9pZCBibGtjZ19hZGRfZGVsYXkoc3RydWN0IGJsa2NnX2dxICpibGtnLCB1NjQgbm93LCB1NjQgZGVsdGEpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxMTUtLyoqXG5ibG9jay9ibGstY2dyb3VwLmM6MjExNjogKiBibGtnX3RyeWdldF9jbG9zZXN0IC0gdHJ5IGFuZCBnZXQgYSBibGtnIHJlZiBvbiB0aGUgY2xvc2V0IGJsa2dcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTE3LSAqIEBiaW86IHRhcmdldCBiaW9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMjEyMy0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTI0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpibGtnX3RyeWdldF9jbG9zZXN0KHN0cnVjdCBiaW8gKmJpbyxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTI1LVx0XHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0yMTU3PXZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMjE2My1cdGlmIChjc3MgXHUwMDI2XHUwMDI2IGNzcy1cdTAwM2VwYXJlbnQpIHtcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTY0Olx0XHRiaW8tXHUwMDNlYmlfYmxrZyA9IGJsa2dfdHJ5Z2V0X2Nsb3Nlc3QoYmlvLCBjc3MpO1xuYmxvY2svYmxrLWNncm91cC5jLTIxNjUtXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzc2AgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzc2Agc2VlbXMgdG8gYmUgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgaW5pdGlhdGluZyB0aGUgcHJvY2VzcywgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYGJsa2dfdHJ5Z2V0X2Nsb3Nlc3RgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIGBibGtnX3RyeWdldF9jbG9zZXN0YCBoYXMgYWx3YXlzIGJlZW4gYSBwb2ludCBvZiBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLiBUbyB1bmRlcnN0YW5kIHRoZSB3aG9sZSBpbnRlcmFjdGlvbiwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgcmVsYXRlcyB0byB0aGUgcmVzdCBvZiB0aGUgZnJhbWV3b3JrLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzYC4gVGhhdCB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRoYXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byBmaWd1cmUgb3V0IGlmIHRoaXMgbWlnaHQgYmUgYW4gYXJlYSBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb3IsIHBlcmhhcHMsIGEgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTU5OT1zdHJ1Y3QgYmZxX2dyb3VwICpiZnFfYmlvX2JmcWcoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTYxMC1cdFx0aWYgKGJmcWctXHUwMDNlcGQub25saW5lKSB7XG5ibG9jay9iZnEtY2dyb3VwLmM6NjExOlx0XHRcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhiaW8sIFx1MDAyNmJsa2ctXHUwMDNlYmxrY2ctXHUwMDNlY3NzKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy02MTItXHRcdFx0cmV0dXJuIGJmcWc7XG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTYxNS1cdH1cbmJsb2NrL2JmcS1jZ3JvdXAuYzo2MTY6XHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MoYmlvLFxuYmxvY2svYmZxLWNncm91cC5jLTYxNy1cdFx0XHRcdFx1MDAyNmJmcWdfdG9fYmxrZyhiZnFkLVx1MDAzZXJvb3RfZ3JvdXApLVx1MDAzZWJsa2NnLVx1MDAzZWNzcyk7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTIxMjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfdHJ5Z2V0X2Nsb3Nlc3Qoc3RydWN0IGJpbyAqYmlvLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTQzLS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjIxNDQ6ICogYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzIC0gYXNzb2NpYXRlIGEgYmlvIHdpdGggYSBzcGVjaWZpZWQgY3NzXG5ibG9jay9ibGstY2dyb3VwLmMtMjE0NS0gKiBAYmlvOiB0YXJnZXQgYmlvXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxNTYtICovXG5ibG9jay9ibGstY2dyb3VwLmM6MjE1Nzp2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGstY2dyb3VwLmMtMjE1OC1cdFx0XHRcdCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTY5LX1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTcwOkVYUE9SVF9TWU1CT0xfR1BMKGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzcyk7XG5ibG9jay9ibGstY2dyb3VwLmMtMjE3MS1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MjE4MT12b2lkIGJpb19hc3NvY2lhdGVfYmxrZyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxOTQtXG5ibG9jay9ibGstY2dyb3VwLmM6MjE5NTpcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhiaW8sIGNzcyk7XG5ibG9jay9ibGstY2dyb3VwLmMtMjE5Ni1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MjIwNj12b2lkIGJpb19jbG9uZV9ibGtnX2Fzc29jaWF0aW9uKHN0cnVjdCBiaW8gKmRzdCwgc3RydWN0IGJpbyAqc3JjKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMjA4LVx0aWYgKHNyYy1cdTAwM2ViaV9ibGtnKVxuYmxvY2svYmxrLWNncm91cC5jOjIyMDk6XHRcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzcyhkc3QsIGJpb19ibGtjZ19jc3Moc3JjKSk7XG5ibG9jay9ibGstY2dyb3VwLmMtMjIxMC19XG4tLVxuaW5jbHVkZS9saW51eC9iaW8uaD01MDQ9dm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2coc3RydWN0IGJpbyAqYmlvKTtcbmluY2x1ZGUvbGludXgvYmlvLmg6NTA1OnZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKHN0cnVjdCBiaW8gKmJpbyxcbmluY2x1ZGUvbGludXgvYmlvLmgtNTA2LVx0XHRcdFx0IHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpO1xuLS1cbmluY2x1ZGUvbGludXgvYmlvLmg9NTEwPXN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2coc3RydWN0IGJpbyAqYmlvKSB7IH1cbmluY2x1ZGUvbGludXgvYmlvLmg6NTExOnN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3Moc3RydWN0IGJpbyAqYmlvLFxuaW5jbHVkZS9saW51eC9iaW8uaC01MTItXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmluY2x1ZGUvbGludXgvd3JpdGViYWNrLmg9MjU2PXN0YXRpYyBpbmxpbmUgdm9pZCB3YmNfaW5pdF9iaW8oc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTI2NC1cdGlmICh3YmMtXHUwMDNld2IpXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oOjI2NTpcdFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgd2JjLVx1MDAzZXdiLVx1MDAzZWJsa2NnX2Nzcyk7XG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTI2Ni19XG4tLVxubW0vcGFnZV9pby5jPTMwOT1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9wYWdlX2lvLmMtMzE5LVx0Y3NzID0gY2dyb3VwX2VfY3NzKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXAsIFx1MDAyNmlvX2NncnBfc3Vic3lzKTtcbm1tL3BhZ2VfaW8uYzozMjA6XHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MoYmlvLCBjc3MpO1xubW0vcGFnZV9pby5jLTMyMS1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBibGtnX2NyZWF0ZWAgQ2FsbCBQYXRoKioKCk9rYXksIHNvIGBiaW9fYXNzb2NpYXRlX2Jsa2dgIGlzIGEgY2VudHJhbCBmdW5jdGlvbiwgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYWxsIG92ZXIgdGhlIHBsYWNlLiBUaGF0IG1lYW5zIGBibGtnX2NyZWF0ZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBpdCwgc3BlY2lmaWNhbGx5IHdoZW4gYSBiaW8gaXMgaW5pdGlhbGl6ZWQuIEkgYWxyZWFkeSBrbmV3IHRoaXMsIGJ1dCBpdCYjMzk7cyBnb29kIHRvIGNvbmZpcm0gdGhlIGhpZ2ggdHJhZmZpYyBoZXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCwgaG90IGNvZGUgcGF0aCwgbm8gcXVlc3Rpb24gYWJvdXQgaXQuCgpJJiMzOTttIHRoaW5raW5nLCBpbnN0ZWFkIG9mIHBva2luZyBhcm91bmQgaW4gYGJpb19hc3NvY2lhdGVfYmxrZ2AgZGlyZWN0bHkgd2hpY2ggaXMgdG9vIGJyb2FkLCBJJiMzOTtsbCB0YWtlIGEgbW9yZSB0YXJnZXRlZCBhcHByb2FjaC4gSSYjMzk7bGwgZm9jdXMgb24gYGJsa2dfY29uZl9wcmVwYCBhbmQgYGJsa2NnX2luaXRfZGlza2AgYXMgdGhleSYjMzk7cmUgbW9yZSBjb250cm9sbGFibGUgdHJpZ2dlcnMgdGhhdCBsZWFkIHRvIGBibGtnX2NyZWF0ZWAuIExldCYjMzk7cyBmb2N1cyBvbiBpbnZlc3RpZ2F0aW5nIHRoZSBjYWxsZXJzIG9mIGBibGtjZ19pbml0X2Rpc2tgLiBUaGlzIGZlZWxzIGxpa2UgYSBzbWFydCBwbGFjZSB0byBzdGFydCB0aGUgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbiBlZmZvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtjZ19pbml0X2Rpc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jPTE1MTA9dm9pZCBibGtnX2luaXRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE1MTUtXG5ibG9jay9ibGstY2dyb3VwLmM6MTUxNjppbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svYmxrLWNncm91cC5jLTE1MTcte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0xOTQ9dm9pZCBibGtnX2luaXRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xuYmxvY2svYmxrLWNncm91cC5oOjE5NTppbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xOTYtdm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD00ODA9c3RhdGljIGlubGluZSB2b2lkIGJsa2dfaW5pdF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkgeyB9XG5ibG9jay9ibGstY2dyb3VwLmg6NDgxOnN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyByZXR1cm4gMDsgfVxuYmxvY2svYmxrLWNncm91cC5oLTQ4Mi1zdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IH1cbi0tXG5ibG9jay9nZW5oZC5jPTE0NDY9c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcbi0tXG5ibG9jay9nZW5oZC5jLTE0NzQtXG5ibG9jay9nZW5oZC5jOjE0NzU6XHRpZiAoYmxrY2dfaW5pdF9kaXNrKGRpc2spKVxuYmxvY2svZ2VuaGQuYy0xNDc2LVx0XHRnb3RvIG91dF9lcmFzZV9wYXJ0MDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIEkvTyBDZ3JvdXAgUGF0Y2ggQ2FuZGlkYXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGJsb2NrIEkvTyBjZ3JvdXAgcGF0Y2guIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgbW9zdCBsaWtlbHkgdG91Y2hlZCBieSB0aGUgY2hhbmdlcywgYW5kIGlkZWFsbHksIHRob3NlICpsZWFzdCogbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gcGF0aC4gSSBzZWUgYGJsa2NnX2luaXRfZGlza2AgY2FsbGVkIGZyb20gYF9fYWxsb2NfZGlza19ub2RlYC4gU2VlbXMgcHJvbWlzaW5nLCBhcyBpdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIGRpc2sgYWxsb2NhdGlvbiwgYSBwb2ludCB0byBjb25zaWRlci4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYGJsa2dfY29uZl9wcmVwYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gY2dyb3VwIHdyaXRlIGhhbmRsZXJzLCBzbyBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgcmVsZXZhbnQuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkgYWxzbyBzZWUgYGJsa2dfZnJlZV93b3JrZm5gIGFzIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBjaGFuZ2VkLCBidXQgSSBzZWUgaXQgaXMgY2FsbGVkIGZyb20gYSB3b3JrcXVldWUsIHNvIGxldCYjMzk7cyBrZWVwIGl0IGluIG1pbmQgYnV0IGZvY3VzIG9uIHRoZSBvbmVzIEkgaGF2ZSBtYXJrZWQgYWJvdmUuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGJsa2dfY3JlYXRlYCBpbiBhbiBlcnJvciBwYXRoLCBhbmQgYWxzbyBgYmxrZ19mcmVlX3dvcmtmbmAuIEFscmlnaHQuIFNvLCBrZWVwaW5nIHRoYXQgaW4gbWluZCwgdGhlIGtleSBmb2N1cyBwb2ludHMgYmFzZWQgb24gdGhlIHBhdGNoIHNlZW0gdG8gYmUgYGJsa2dfY29uZl9wcmVwYCwgYGJsa2NnX2luaXRfZGlza2AsIGFuZCBhbHNvIGBiaW9fYXNzb2NpYXRlX2Jsa2dgLiBCdXQgd2FpdC4uLiB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBob3QgcGF0aHMsIGFuZCBgYmlvX2Fzc29jaWF0ZV9ibGtnYCAqc2NyZWFtcyogaG90IHBhdGguIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gc3RlZXIgY2xlYXIgb2YgdGhhdCBvbmUgZm9yIG5vdy4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0IGFuZCBjaGVjayBmb3IgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC4gQWhhLCBgYmxrZ19jcmVhdGVgLCBgYmxrZ19mcmVlX3dvcmtmbmAsIGFuZCBgYmxrZ19mcmVlX3BkYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCBuYXJyb3dzIGl0IGRvd24gZXZlbiBmdXJ0aGVyLiBTbywgYGJsa2dfY29uZl9wcmVwYCBhbmQgYGJsa2NnX2luaXRfZGlza2AgYXJlIHRoZSB0b3AgY29udGVuZGVycywgdGhlbi4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIHR3byBmaXJzdC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9ucyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBhY3RpdmF0ZWQgdG8gbWFrZSBhbGwgdGhpcyB3b3JrOgoKKiAgIGBCTEtfQ0dST1VQYAoqICAgYEJMS19ERVZfVEhST1RUTElOR2AKKiAgIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAKKiAgIGBCTEtfQ0dST1VQX0lPQ09TVGAKKiAgIGBJT1NDSEVEX0JGUWAKKiAgIGBCRlFfR1JPVVBfSU9TQ0hFRGAKCkp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlLWNoZWNrIGBibG9jay9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciB0aGUgY29uZmlndXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjAxCgkJCQkJCQlvdXRwdXQ6IDIyNgoJCQkJCQkJdGhvdWdodHM6IDU1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCbG9jayBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgcXVpY2sgcnVuZG93bi4gSXQgc2VlbXMgd2UgaGF2ZSBhIGNhbmRpZGF0ZSBmb3Igc29tZSBkZWNlbnQgZnV6emluZy4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBhIHdpZGVyIHNldCBvZiBwb3RlbnRpYWwgZmVhdHVyZXMgdG8gZW5hYmxlLCBpbmNsdWRpbmcgYEJMS19DR1JPVVBfRkNfQVBQSURgLCBidXQgdGhhdCBwcm9iYWJseSBpc24mIzM5O3QgdGhlIGJlc3QgdXNlIG9mIHJlc291cmNlcy4gTGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBtYWluIHBsYXllcnM6IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPUFJJT2AsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBibGtnX2NvbmZfcHJlcGAgaXMgZXhwb3J0ZWQgYW5kIHdlIGNhbiB1c2UgaXQsIGJ1dCBgYmxrY2dfaW5pdF9kaXNrYCBpcyBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgYWx0aG91Z2ggaXQgKmlzKiBhIGdsb2JhbCBmdW5jdGlvbi4KClRoZSByZWFsIGtleSBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyB0aGUgZXJyb3IgcGF0aHMgd2l0aGluIGBibGtnX2NyZWF0ZWAuIFRoYXQgb3BlbnMgdXAgc29tZSBpbnRlcmVzdGluZyBhdHRhY2sgdmVjdG9ycywgbmFtZWx5IHRoZSBwb3RlbnRpYWwgZm9yIHRyaWdnZXJpbmcgZmFpbHVyZXMsIHdoaWNoIGlzIGV4Y2VsbGVudCBmdXp6aW5nIGZvZGRlci4gV2UgY291bGQgcG90ZW50aWFsbHkgaGl0IGFsbG9jYXRpb24gZmFpbHVyZXMgKGZhdWx0IGluamVjdGlvbiBpcyBvdXIgZnJpZW5kIGhlcmUpLCBvciBhbiBgRUVYSVNUYCBlcnJvciBpbiBgcmFkaXhfdHJlZV9pbnNlcnRgIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggYW4gb2xkIGVudHJ5IGhhbmdpbmcgYXJvdW5kLiBUaGVyZSYjMzk7cyBhbHNvIHRoZSBgYmRpX2dldGAgZmFpbHVyZSB0byBrZWVwIGluIG1pbmQuIEZhdWx0IGluamVjdGlvbiBmdXp6aW5nIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhlc2UgY29uZGl0aW9ucyBmYWlybHkgZWFzaWx5LCBtYWtpbmcgdGhpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdGhvcm91Z2ggdGVzdGluZy4KClRvIHJlY2FwLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgaWRlbnRpZmllZDoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCiogICAqKkZvY3VzIFN5bWJvbHM6KioKICAgICogICBgYmxrZ19jb25mX3ByZXBgCiAgICAqICAgYGJsa2NnX2luaXRfZGlza2AKICAgICogICBgYmxrZ19mcmVlX3dvcmtmbmAgKGltcG9ydGFudCBkdWUgdG8gdGhlIGFzeW5jaHJvbm91cyBmcmVlaW5nIGxvZ2ljKQoqICAgKipFbmFibGUgQ29uZmlnczoqKgogICAgKiAgIGBCTEtfQ0dST1VQYAogICAgKiAgIGBCTEtfREVWX1RIUk9UVExJTkdgCiAgICAqICAgYEJMS19DR1JPVVBfSU9MQVRFTkNZYAogICAgKiAgIGBCTEtfQ0dST1VQX0lPQ09TVGAKICAgICogICBgQkxLX0NHUk9VUF9JT1BSSU9gCiAgICAqICAgYElPU0NIRURfQkZRYAogICAgKiAgIGBCRlFfR1JPVVBfSU9TQ0hFRGAKClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBibG9jayBjZ3JvdXAgbG9naWMsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcy4gSXQgYWZmZWN0cyBgYmxrZ19jcmVhdGVgIGVycm9yIHBhdGhzIGFuZCB0aGUgc3luY2hyb25vdXMgZnJlZWluZyBvZiBwb2xpY3kgZGF0YSB3aGVuIGBibGtnX2NyZWF0ZWAgZmFpbHMsIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYGJsa2dfZnJlZV93b3JrZm5gLiBUaGUgZmFjdCB0aGF0IGl0IGlzIHJlYWNoZWQgdmlhIGNncm91cCBjb25maWd1cmF0aW9ucyBhbmQgZGlzayBpbml0aWFsaXphdGlvbiBhbmQgdGhhdCB0aGlzIGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPUFJJTyYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgICAmIzM0O2Jsa2NnX2luaXRfZGlzayYjMzQ7LAogICAgJiMzNDtibGtnX2ZyZWVfd29ya2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGJsa2dfY3JlYXRlIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYmxrZ19mcmVlX3dvcmtmbiB0byBzeW5jaHJvbm91c2x5IGZyZWUgcG9saWN5IGRhdGEgKHBkKSB3aGVuIGJsa2dfY3JlYXRlIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgY2dyb3VwIGxvZ2ljIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWsgd2hlbiBhIHBvbGljeSBpcyB1bnJlZ2lzdGVyZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNvbmZpZ3VyYXRpb24gd3JpdGVzIGFuZCBkaXNrIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9QUklPJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrZ19jb25mX3ByZXAmIzM0OywKICAgICYjMzQ7YmxrY2dfaW5pdF9kaXNrJiMzNDssCiAgICAmIzM0O2Jsa2dfZnJlZV93b3JrZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYmxrZ19jcmVhdGUgYW5kIHRoZSBhc3luY2hyb25vdXMgZnJlZWluZyBsb2dpYyBpbiBibGtnX2ZyZWVfd29ya2ZuIHRvIHN5bmNocm9ub3VzbHkgZnJlZSBwb2xpY3kgZGF0YSAocGQpIHdoZW4gYmxrZ19jcmVhdGUgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBjZ3JvdXAgbG9naWMgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVhayB3aGVuIGEgcG9saWN5IGlzIHVucmVnaXN0ZXJlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY29uZmlndXJhdGlvbiB3cml0ZXMgYW5kIGRpc2sgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZywgZXNwZWNpYWxseSB3aXRoIGZhdWx0IGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjA4LjEyNTUxMDkwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNjQwODU1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPUFJJT1wiLFxuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJGUV9HUk9VUF9JT1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrZ19jb25mX3ByZXBcIixcbiAgICBcImJsa2NnX2luaXRfZGlza1wiLFxuICAgIFwiYmxrZ19mcmVlX3dvcmtmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGJsa2dfY3JlYXRlIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYmxrZ19mcmVlX3dvcmtmbiB0byBzeW5jaHJvbm91c2x5IGZyZWUgcG9saWN5IGRhdGEgKHBkKSB3aGVuIGJsa2dfY3JlYXRlIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgY2dyb3VwIGxvZ2ljIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWsgd2hlbiBhIHBvbGljeSBpcyB1bnJlZ2lzdGVyZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNvbmZpZ3VyYXRpb24gd3JpdGVzIGFuZCBkaXNrIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjA4LjEyNTUxOTAwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3MzgwNTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODA3MTk0ZmUyZmY2NzMzNjgxYmM4N2Q0NDY0NTAzYjQ5YmY1MDEyNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAwNzo0MjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcXG5pbmRleCBiYzYzYmQyMjA4NjVkYy4uNjczODg2ZDcxYzI2NWQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXFxuKysrIGIvYmxvY2svYmxrLWNncm91cC5jXFxuQEAgLTExMSwxMiArMTExLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqYmxrY2dfY3NzKHZvaWQpXFxuIFxcdHJldHVybiB0YXNrX2NzcyhjdXJyZW50LCBpb19jZ3JwX2lkKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYmxrZ19mcmVlX3BkKHN0cnVjdCBibGtjZ19ncSAqYmxrZylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSsrKSB7XFxuK1xcdFxcdGlmIChibGtnLVxcdTAwM2VwZFtpXSkge1xcbitcXHRcXHRcXHRibGtjZ19wb2xpY3lbaV0tXFx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cXHUwMDNlcGRbaV0pO1xcbitcXHRcXHRcXHRibGtnLVxcdTAwM2VwZFtpXSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibGtnX2ZyZWVfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJsa2NnX2dxLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGZyZWVfd29yayk7XFxuIFxcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmxrZy1cXHUwMDNlcTtcXG4tXFx0aW50IGk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBwZF9mcmVlX2ZuKCkgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKSxcXG5AQCAtMTI2LDkgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHQgKiBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLlxcbiBcXHQgKi9cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cS1cXHUwMDNlYmxrY2dfbXV0ZXgpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkrKylcXG4tXFx0XFx0aWYgKGJsa2ctXFx1MDAzZXBkW2ldKVxcbi1cXHRcXHRcXHRibGtjZ19wb2xpY3lbaV0tXFx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cXHUwMDNlcGRbaV0pO1xcbitcXHRibGtnX2ZyZWVfcGQoYmxrZyk7XFxuIFxcdGlmIChibGtnLVxcdTAwM2VwYXJlbnQpXFxuIFxcdFxcdGJsa2dfcHV0KGJsa2ctXFx1MDAzZXBhcmVudCk7XFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbkBAIC00MzgsMTUgKzQ0NywyNCBAQCBzdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2NyZWF0ZShzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdHJldHVybiBibGtnO1xcbiBcXG4tXFx0LyogQGJsa2cgZmFpbGVkIGZ1bGx5IGluaXRpYWxpemVkLCB1c2UgdGhlIHVzdWFsIHJlbGVhc2UgcGF0aCAqL1xcbi1cXHRibGtnX3B1dChibGtnKTtcXG4rXFx0LypcXG4rXFx0ICogQGJsa2cgZmFpbGVkIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBuZXZlciBsaW5rZWQsIHNvIGl0cyBwZFtdIGlzXFxuK1xcdCAqIGludmlzaWJsZSB0byBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLiBGcmVlIHBkW10gc3luY2hyb25vdXNseVxcbitcXHQgKiB3aGlsZSBibGtjZ19wb2xpY3lbXSBpcyBzdGlsbCB2YWxpZCwgb3RoZXJ3aXNlIHRoZSBhc3luYyBmcmVlIHBhdGhcXG4rXFx0ICogbWF5IGNhbGwgcGRfZnJlZV9mbigpIGFmdGVyIHRoZSBwb2xpY3kgaXMgdW5yZWdpc3RlcmVkIChlLmcuIHJtbW9kIGJmcSkuXFxuK1xcdCAqIFRoZSBlcnJfZnJlZV9ibGtnIHBhdGggYmVsb3cgZnJlZXMgcGRbXSBmb3IgdGhlIHNhbWUgcmVhc29uLlxcbitcXHQgKi9cXG4rXFx0YmxrZ19mcmVlX3BkKGJsa2cpO1xcbitcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNmJsa2ctXFx1MDAzZXJlZmNudCk7XFxuIFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIFxcbiBlcnJfcHV0X2NzczpcXG4gXFx0Y3NzX3B1dChcXHUwMDI2YmxrY2ctXFx1MDAzZWNzcyk7XFxuIGVycl9mcmVlX2Jsa2c6XFxuLVxcdGlmIChuZXdfYmxrZylcXG4rXFx0aWYgKG5ld19ibGtnKSB7XFxuK1xcdFxcdGJsa2dfZnJlZV9wZChuZXdfYmxrZyk7XFxuIFxcdFxcdGJsa2dfZnJlZShuZXdfYmxrZyk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MDguNjQzNTIyMDQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDEyMjgzMTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT1BSSU9cIixcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCRlFfR1JPVVBfSU9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa2dfY29uZl9wcmVwXCIsXG4gICAgXCJibGtjZ19pbml0X2Rpc2tcIixcbiAgICBcImJsa2dfZnJlZV93b3JrZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBibGtnX2NyZWF0ZSBhbmQgdGhlIGFzeW5jaHJvbm91cyBmcmVlaW5nIGxvZ2ljIGluIGJsa2dfZnJlZV93b3JrZm4gdG8gc3luY2hyb25vdXNseSBmcmVlIHBvbGljeSBkYXRhIChwZCkgd2hlbiBibGtnX2NyZWF0ZSBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGNncm91cCBsb2dpYyB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrIHdoZW4gYSBwb2xpY3kgaXMgdW5yZWdpc3RlcmVkLiBJdCBpcyByZWFjaGFibGUgdmlhIGNncm91cCBjb25maWd1cmF0aW9uIHdyaXRlcyBhbmQgZGlzayBpbml0aWFsaXphdGlvbiwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHdpdGggZmF1bHQgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgwNzE5NGZlMmZmNjczMzY4MWJjODdkNDQ2NDUwM2I0OWJmNTAxMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwNzo0MjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuaW5kZXggYmM2M2JkMjIwODY1ZGMuLjY3Mzg4NmQ3MWMyNjVkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC0xMTEsMTIgKzExMSwyMyBAQCBzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2Nzcyh2b2lkKVxuIFx0cmV0dXJuIHRhc2tfY3NzKGN1cnJlbnQsIGlvX2NncnBfaWQpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBibGtnX2ZyZWVfcGQoc3RydWN0IGJsa2NnX2dxICpibGtnKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkrKykge1xuK1x0XHRpZiAoYmxrZy1cdTAwM2VwZFtpXSkge1xuK1x0XHRcdGJsa2NnX3BvbGljeVtpXS1cdTAwM2VwZF9mcmVlX2ZuKGJsa2ctXHUwMDNlcGRbaV0pO1xuK1x0XHRcdGJsa2ctXHUwMDNlcGRbaV0gPSBOVUxMO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBibGtjZ19ncSAqYmxrZyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmxrY2dfZ3EsXG4gXHRcdFx0XHRcdCAgICAgZnJlZV93b3JrKTtcbiBcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmxrZy1cdTAwM2VxO1xuLVx0aW50IGk7XG4gXG4gXHQvKlxuIFx0ICogcGRfZnJlZV9mbigpIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCksXG5AQCAtMTI2LDkgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0ICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpKyspXG4tXHRcdGlmIChibGtnLVx1MDAzZXBkW2ldKVxuLVx0XHRcdGJsa2NnX3BvbGljeVtpXS1cdTAwM2VwZF9mcmVlX2ZuKGJsa2ctXHUwMDNlcGRbaV0pO1xuK1x0YmxrZ19mcmVlX3BkKGJsa2cpO1xuIFx0aWYgKGJsa2ctXHUwMDNlcGFyZW50KVxuIFx0XHRibGtnX3B1dChibGtnLVx1MDAzZXBhcmVudCk7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG5AQCAtNDM4LDE1ICs0NDcsMjQgQEAgc3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRpZiAoIXJldClcbiBcdFx0cmV0dXJuIGJsa2c7XG4gXG4tXHQvKiBAYmxrZyBmYWlsZWQgZnVsbHkgaW5pdGlhbGl6ZWQsIHVzZSB0aGUgdXN1YWwgcmVsZWFzZSBwYXRoICovXG4tXHRibGtnX3B1dChibGtnKTtcbitcdC8qXG4rXHQgKiBAYmxrZyBmYWlsZWQgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIG5ldmVyIGxpbmtlZCwgc28gaXRzIHBkW10gaXNcbitcdCAqIGludmlzaWJsZSB0byBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLiBGcmVlIHBkW10gc3luY2hyb25vdXNseVxuK1x0ICogd2hpbGUgYmxrY2dfcG9saWN5W10gaXMgc3RpbGwgdmFsaWQsIG90aGVyd2lzZSB0aGUgYXN5bmMgZnJlZSBwYXRoXG4rXHQgKiBtYXkgY2FsbCBwZF9mcmVlX2ZuKCkgYWZ0ZXIgdGhlIHBvbGljeSBpcyB1bnJlZ2lzdGVyZWQgKGUuZy4gcm1tb2QgYmZxKS5cbitcdCAqIFRoZSBlcnJfZnJlZV9ibGtnIHBhdGggYmVsb3cgZnJlZXMgcGRbXSBmb3IgdGhlIHNhbWUgcmVhc29uLlxuK1x0ICovXG4rXHRibGtnX2ZyZWVfcGQoYmxrZyk7XG4rXHRwZXJjcHVfcmVmX2tpbGwoXHUwMDI2YmxrZy1cdTAwM2VyZWZjbnQpO1xuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiBcbiBlcnJfcHV0X2NzczpcbiBcdGNzc19wdXQoXHUwMDI2YmxrY2ctXHUwMDNlY3NzKTtcbiBlcnJfZnJlZV9ibGtnOlxuLVx0aWYgKG5ld19ibGtnKVxuK1x0aWYgKG5ld19ibGtnKSB7XG4rXHRcdGJsa2dfZnJlZV9wZChuZXdfYmxrZyk7XG4gXHRcdGJsa2dfZnJlZShuZXdfYmxrZyk7XG4rXHR9XG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjA4LjY0MzUyMzc5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTA1MDQzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbG9jayBJL08gQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBibGtnX2ZyZWVfcGRgIGZ1bmN0aW9uLiBGcm9tIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBmcmVlaW5nIG9mIGFsbCBgcGRgcyAocHJlc3VtYWJseSBcInBvbGljeSBkYXRhXCIgb3Igc29tZXRoaW5nIHNpbWlsYXIpIGFzc29jaWF0ZWQgd2l0aCBhIGBibGtjZ19ncWAuIE1ha2VzIHNlbnNlOyBjZW50cmFsaXppbmcgdGhpcyBjbGVhbnVwIGxvZ2ljIGlzIGdlbmVyYWxseSBnb29kIHByYWN0aWNlLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgYml0cy4gYGJsa2dfZnJlZV9wZGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gdHdvIHBsYWNlcywgYm90aCByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwLiBGaXJzdGx5LCBpdCdzIGNhbGxlZCBmcm9tIGBibGtnX2ZyZWVfd29ya2ZuYCwgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGNvZGUuIFN0YW5kYXJkIHJlZmFjdG9yaW5nIC0gdGlkeWluZyB1cCB0aGUgY29kZSBhbmQgaW1wcm92aW5nIG1haW50YWluYWJpbGl0eS5cblxuVGhlIHNlY29uZCBhcmVhIGlzIG1vcmUgaW50ZXJlc3RpbmcuIEl0J3MgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIGBibGtnX2NyZWF0ZWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGVycm9yIHBhdGhzLiBQcmV2aW91c2x5LCBpZiBgYmxrZ19jcmVhdGVgIGZhaWxlZCAqYWZ0ZXIqIGluaXRpYWxpemluZyB0aGUgYGJsa2dgIHN0cnVjdHVyZSwgaXQgd291bGQgY2FsbCBgYmxrZ19wdXQoYmxrZylgIHdoaWNoIHdvdWxkIGVzc2VudGlhbGx5IHF1ZXVlIHRoZSBmcmVlaW5nIG9wZXJhdGlvbiBhc3luY2hyb25vdXNseS4gVGhpcyBpc24ndCBpZGVhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiBhbiBlcnJvciBjb250ZXh0LCBlc3BlY2lhbGx5IGlmIHRoZSBzdWJzZXF1ZW50IGZyZWVpbmcgb3BlcmF0aW9ucyBjb3VsZCBjYXVzZSBpc3N1ZXMuIE5vdywgdGhlIHBhdGNoIGlzIG1vcmUgZGlyZWN0OiBpdCBjYWxscyBgYmxrZ19mcmVlX3BkKGJsa2cpYCB0byBjbGVhbiB1cCB0aGUgYHBkYHMgYW5kIHRoZW4gaW1tZWRpYXRlbHkgYHBlcmNwdV9yZWZfa2lsbChcdTAwMjZibGtnLVx1MDAzZXJlZmNudClgIHRvIGdldCByaWQgb2YgdGhlIHJlZmVyZW5jZSBjb3VudC4gVGhpcyBpcyBhIG11Y2ggbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3ksIHByZXZlbnRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBzaW1pbGFyIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gZGVsYXllZCBjbGVhbnVwLlxuXG5BbHNvIGluIHRoZSBgZXJyX2ZyZWVfYmxrZ2AgcGF0aCwgdGhleSBjYWxsIGBibGtnX2ZyZWVfcGQobmV3X2Jsa2cpYCBiZWZvcmUgYGJsa2dfZnJlZShuZXdfYmxrZylgLCB3aGljaCBhZ2FpbiBtYWtlcyBwZXJmZWN0IHNlbnNlIGZvciBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCBvcmRlci5cblxuTGV0J3MgcHVsbCB1cCB0aGUgYGJsa2dfY3JlYXRlYCBmdW5jdGlvbiBpbiBgYmxvY2svYmxrLWNncm91cC5jYCBpdHNlbGYgYW5kIHNlZSBob3cgYWxsIHRoaXMgaXMgd29ya2luZyBpbiBjb250ZXh0LiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCB0aGlzIGlzIGRlc2lnbmVkIHRvIG1pdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MTUuMTM0MDMwNDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDcwMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2dfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9MzA4PXN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfYWxsb2Moc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMzc4LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzozNzk6c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLWNncm91cC5jLTM4MC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJsa2NnX2dxICpuZXdfYmxrZylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODAtICpcXG5ibG9jay9ibGstY2dyb3VwLmM6NDgxOiAqIFJldHVybnMgdGhlIGJsa2cgb3IgdGhlIGNsb3Nlc3QgYmxrZyBpZiBibGtnX2NyZWF0ZSgpIGZhaWxzIGFzIGl0IHdhbGtzXFxuYmxvY2svYmxrLWNncm91cC5jLTQ4Mi0gKiBkb3duIGZyb20gcm9vdC5cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz00ODQ9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19sb29rdXBfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNTA4LVxcdCAqIG5vbi1yb290IGJsa2dzIGhhdmUgYWNjZXNzIHRvIHRoZWlyIHBhcmVudHMuICBSZXR1cm5zIHRoZSBjbG9zZXN0XFxuYmxvY2svYmxrLWNncm91cC5jOjUwOTpcXHQgKiBibGtnIHRvIHRoZSBpbnRlbmRlZCBibGtnIHNob3VsZCBibGtnX2NyZWF0ZSgpIGZhaWwuXFxuYmxvY2svYmxrLWNncm91cC5jLTUxMC1cXHQgKi9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy01MjYtXFxuYmxvY2svYmxrLWNncm91cC5jOjUyNzpcXHRcXHRibGtnID0gYmxrZ19jcmVhdGUocG9zLCBkaXNrLCBOVUxMKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtNTI4LVxcdFxcdGlmIChJU19FUlIoYmxrZykpIHtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz04ODI9aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05NTItXFx0XFx0fSBlbHNlIHtcXG5ibG9jay9ibGstY2dyb3VwLmM6OTUzOlxcdFxcdFxcdGJsa2cgPSBibGtnX2NyZWF0ZShwb3MsIGRpc2ssIG5ld19ibGtnKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtOTU0LVxcdFxcdFxcdGlmIChJU19FUlIoYmxrZykpIHtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTE2PWludCBibGtjZ19pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTUyOC1cXHQgKiB0aGUgb2xkIG9uZSBpcyBzdGlsbCBhbGl2ZSwgYW5kIHJhZGl4X3RyZWVfaW5zZXJ0KCkgaW5cXG5ibG9jay9ibGstY2dyb3VwLmM6MTUyOTpcXHQgKiBibGtnX2NyZWF0ZSgpIHdpbGwgZmFpbCB3aXRoIC1FRVhJU1QgYmVjYXVzZSB0aGUgb2xkIGVudHJpZXNcXG5ibG9jay9ibGstY2dyb3VwLmMtMTUzMC1cXHQgKiBzdGlsbCBvY2N1cHkgdGhlIHNhbWUgcXVldWUgaWQgc2xvdCBpbiBibGtjZy1cXHUwMDNlYmxrZ190cmVlLlxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1NDItXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuYmxvY2svYmxrLWNncm91cC5jOjE1NDM6XFx0YmxrZyA9IGJsa2dfY3JlYXRlKFxcdTAwMjZibGtjZ19yb290LCBkaXNrLCBuZXdfYmxrZyk7XFxuYmxvY2svYmxrLWNncm91cC5jLTE1NDQtXFx0aWYgKElTX0VSUihibGtnKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MTUuMTkxMTEyNDA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MTQ3NzE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIGJsb2NrIGNncm91cHM6XG5cbioqQW5hbHl6aW5nIGEgQmxvY2sgQ2dyb3VwIFBhdGNoOiBFcnJvciBQYXRoIE9wdGltaXphdGlvbioqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgYGJsa2dfY3JlYXRlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGVycm9yIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpbnZvbHZlcyBmcmVlaW5nIGBwZGAgc3RydWN0dXJlcyBzeW5jaHJvbm91c2x5IHdpdGhpbiB0aGUgZXJyb3IgcGF0aHMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyB3ZSBoYW5kbGUgYmxvY2sgY2dyb3VwIGluaXRpYWxpemF0aW9uLCBhbmQgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzZXR0aW5ncyB0aGF0IHdvdWxkIGludGVyYWN0IHdpdGggdGhpcyBtb2RpZmllZCBlcnJvciBoYW5kbGluZy4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYmxvY2sgY2dyb3VwIGFsbG9jYXRpb24sIHJlc291cmNlIGxpbWl0cywgYW5kIGVycm9yIHJlY292ZXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZXJyb3IgcGF0aHMgYXJlIHRyaWdnZXJlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHN5bmNocm9ub3VzIGZyZWVpbmcgbWlnaHQgYmUgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlIGFuZCBob3cgdGhpcyBhbHRlcnMgcmVzb3VyY2UgdXNhZ2Ugd2hlbiBhbGxvY2F0aW9uIGZhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MTguNzQyNTkxOTExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NjU3ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MTguODAyMjU1NTk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5OTY4NDE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQmxvY2sgSU8gYW5kIENvbnRyb2wgR3JvdXBzKipcblxuQWxyaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZ28gZG93biBhbnkgZnVydGhlciByYWJiaXQgaG9sZXMgaGVyZSwgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBjbGVhciBwaWN0dXJlIG9mICpleGFjdGx5KiB3aGF0IGBCTEtfQ0dST1VQYCBpcy4gSSBjYW4ndCBwcm9jZWVkIHdpdGggYW55IGluLWRlcHRoIGFuYWx5c2lzIG9yIGRlYnVnZ2luZyB3aXRob3V0IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlIGFuZCBpbnRlcmFjdGlvbnMgb2YgdGhhdCBzcGVjaWZpYyBjb21wb25lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBvbiBzb2xpZCBncm91bmQsIGFuZCBub3Qgd29ya2luZyBvZmYgb2YgYXNzdW1wdGlvbnMuIExldCBtZSBwdWxsIHVwIHRoYXQgZGVmaW5pdGlvbiwgYW5kIGdldCBhIGJldHRlciBtZW50YWwgbW9kZWwgZXN0YWJsaXNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MDYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MjoyMS43MDE5NDE4NDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MjM5Nzk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDg1PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDEtXFxuaW5pdC9LY29uZmlnOjExMDI6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTEwMy1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MjoyMy43NjQzNDU4MzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMwMzMxMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIENncm91cCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHRoZSBgQkxLX0NHUk9VUGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCwgYXMgZXhwZWN0ZWQuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBMZXQncyBkaWcgaW4gYW5kIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZC5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIGBibGtnX2NyZWF0ZWAgaXMgbW9kaWZpZWQuIEFuZCBJIHNlZSBhIG5ldyBmdW5jdGlvbiBgYmxrZ19mcmVlX3BkYCBoYXMgYmVlbiBhZGRlZCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGlzIHBhdGNoIGlzIGFib3V0IG1hbmFnaW5nIHBlci1kZXZpY2UgZGF0YSBhc3NvY2lhdGVkIHdpdGggYmxvY2sgY2dyb3Vwcy4gQWxzbywgYGJsa2dfZnJlZV93b3JrZm5gIGlzIG1vZGlmaWVkIHdoaWNoIGNvdWxkIG1lYW4gYSBjaGFuZ2UgaW4gcmVzb3VyY2UgY2xlYW51cC5cblxuSW50ZXJlc3RpbmcuIEkgbm90aWNlIGNhbGxzIHRvIGBibGtnX2NyZWF0ZWAgd2l0aGluIGBibGtnX2xvb2t1cF9jcmVhdGVgLCBgYmxrZ19jb25mX3ByZXBgLCBhbmQgYGJsa2NnX2luaXRfZGlza2AuIENsZWFybHksIGBibGtnX2NyZWF0ZWAgaXMgcGl2b3RhbC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSB0aGVzZSBibG9jayBncm91cCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNyZWF0ZWQuIExldCdzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBjYWxsZXJzIHRvIGBibGtnX2NyZWF0ZWAgdG8gZnVsbHkgZ2V0IGEgZ3Jhc3Agb2YgdGhpcyBwYXRjaCdzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MjoyNy45OTQ2Nzk3NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3OTk4MzkwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtnX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNncm91cC5jPTMwOD1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2FsbG9jKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTM3OC0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6Mzc5OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0zODAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBibGtjZ19ncSAqbmV3X2Jsa2cpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNDgwLSAqXFxuYmxvY2svYmxrLWNncm91cC5jOjQ4MTogKiBSZXR1cm5zIHRoZSBibGtnIG9yIHRoZSBjbG9zZXN0IGJsa2cgaWYgYmxrZ19jcmVhdGUoKSBmYWlscyBhcyBpdCB3YWxrc1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODItICogZG93biBmcm9tIHJvb3QuXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9NDg0PXN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfbG9va3VwX2NyZWF0ZShzdHJ1Y3QgYmxrY2cgKmJsa2NnLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTUwOC1cXHQgKiBub24tcm9vdCBibGtncyBoYXZlIGFjY2VzcyB0byB0aGVpciBwYXJlbnRzLiAgUmV0dXJucyB0aGUgY2xvc2VzdFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1MDk6XFx0ICogYmxrZyB0byB0aGUgaW50ZW5kZWQgYmxrZyBzaG91bGQgYmxrZ19jcmVhdGUoKSBmYWlsLlxcbmJsb2NrL2Jsay1jZ3JvdXAuYy01MTAtXFx0ICovXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNTI2LVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mjc6XFx0XFx0YmxrZyA9IGJsa2dfY3JlYXRlKHBvcywgZGlzaywgTlVMTCk7XFxuYmxvY2svYmxrLWNncm91cC5jLTUyOC1cXHRcXHRpZiAoSVNfRVJSKGJsa2cpKSB7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9ODgyPWludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtOTUyLVxcdFxcdH0gZWxzZSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjk1MzpcXHRcXHRcXHRibGtnID0gYmxrZ19jcmVhdGUocG9zLCBkaXNrLCBuZXdfYmxrZyk7XFxuYmxvY2svYmxrLWNncm91cC5jLTk1NC1cXHRcXHRcXHRpZiAoSVNfRVJSKGJsa2cpKSB7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTUxNj1pbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1MjgtXFx0ICogdGhlIG9sZCBvbmUgaXMgc3RpbGwgYWxpdmUsIGFuZCByYWRpeF90cmVlX2luc2VydCgpIGluXFxuYmxvY2svYmxrLWNncm91cC5jOjE1Mjk6XFx0ICogYmxrZ19jcmVhdGUoKSB3aWxsIGZhaWwgd2l0aCAtRUVYSVNUIGJlY2F1c2UgdGhlIG9sZCBlbnRyaWVzXFxuYmxvY2svYmxrLWNncm91cC5jLTE1MzAtXFx0ICogc3RpbGwgb2NjdXB5IHRoZSBzYW1lIHF1ZXVlIGlkIHNsb3QgaW4gYmxrY2ctXFx1MDAzZWJsa2dfdHJlZS5cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTQyLVxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTQzOlxcdGJsa2cgPSBibGtnX2NyZWF0ZShcXHUwMDI2YmxrY2dfcm9vdCwgZGlzaywgbmV3X2Jsa2cpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTQ0LVxcdGlmIChJU19FUlIoYmxrZykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjI4LjM3NDY3MDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4NTMzOTgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSU8gQ2dyb3VwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYmxvY2sgSS9PIGNncm91cCBwb2xpY2llcyBhcmUgY29uZmlndXJlZCBhbmQgSSd2ZSBnb3QgYSBmZXcgc3Ryb25nIGNvbnRlbmRlcnMgZm9yIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gVGhlIGZ1bmN0aW9uIGBibGtnX2NvbmZfcHJlcGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0J3MgZGlyZWN0bHkgdGllZCB0byBjb25maWd1cmluZyBibGtjZyBwb2xpY2llcywgcGFydGljdWxhcmx5IHRocm91Z2ggY2dyb3VwZnMuIFRoYXQgZmVlbHMgcmlnaHQuXG5cblRoZW4sIHRoZXJlJ3MgYGJsa2NnX2luaXRfZGlza2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBkdXJpbmcgZGlzayBpbml0aWFsaXphdGlvbi4gVGhhdCBzZWVtcyByZWxldmFudCwgYnV0IGxpa2VseSBtb3JlIG9uIHRoZSBpbml0aWFsIHNldHVwIHNpZGUsIHJhdGhlciB0aGFuIHRoZSBjb25maWd1cmF0aW9uLiBXZSBhbHNvIGhhdmUgYGJsa2dfbG9va3VwX2NyZWF0ZWAsIHdoaWNoIGhhbmRsZXMgbG9va2luZyB1cCBvciBjcmVhdGluZyBhIGBibGtnYCBzdHJ1Y3R1cmUuIFRoYXQncyBwcm9iYWJseSBpbnZvbHZlZCwgYXMgaXQgc2V0cyB1cCB0aGUgYmxrZywgYnV0IG1pZ2h0IG5vdCBiZSB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHBvaW50LlxuXG5NeSBndXQgZmVlbGluZywgdGhvdWdoLCBpcyB0aGF0IGBibGtnX2NvbmZfcHJlcGAgaXMgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgaW4tZGVwdGggcG9saWN5IHdvcmsuIFNvLCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gaXRzIGNhbGxlcnMgYW5kIHNlZSB3aGVyZSB0aGlzIHJhYmJpdCBob2xlIGxlYWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzOTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MjozMi44NjAwMTMyODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NzgwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2dfY29uZl9wcmVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9MTA0Mj1zdGF0aWMgc3NpemVfdCBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTEwNTMtXFxuYmxvY2svYmZxLWNncm91cC5jOjEwNTQ6XFx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFxcdTAwMjZibGtjZ19wb2xpY3lfYmZxLCBcXHUwMDI2Y3R4KTtcXG5ibG9jay9iZnEtY2dyb3VwLmMtMTA1NS1cXHRpZiAocmV0KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTc2Nz1FWFBPUlRfU1lNQk9MX0dQTChfX2Jsa2dfcHJmaWxsX3U2NCk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNzc1LSAqIE9uY2UgaW5pdGlhbGl6ZWQsIEBjdHggY2FuIGJlIHVzZWQgd2l0aCBibGtnX2NvbmZfb3Blbl9iZGV2KCkgYW5kXFxuYmxvY2svYmxrLWNncm91cC5jOjc3NjogKiBibGtnX2NvbmZfcHJlcCgpLCBhbmQgbXVzdCBiZSBjbGVhbmVkIHVwIHdpdGggYmxrZ19jb25mX2V4aXQoKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtNzc3LSAqL1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTc4Mj1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfaW5pdCk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNzkyLSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiBAY3R4IGFuZCB0aGUgZXh0cmEgY2FsbHMgYmVjb21lXFxuYmxvY2svYmxrLWNncm91cC5jOjc5MzogKiBOT09Qcy4gYmxrZ19jb25mX3ByZXAoKSBpbXBsaWNpdGx5IGNhbGxzIHRoaXMgZnVuY3Rpb24uIFVzZSB0aGlzIGZ1bmN0aW9uXFxuYmxvY2svYmxrLWNncm91cC5jLTc5NC0gKiBleHBsaWNpdGx5IGlmIGJkZXYgYWNjZXNzIGlzIG5lZWRlZCB3aXRob3V0IHJlc29sdmluZyB0aGUgYmxrY2cgLyBwb2xpY3kgcGFydFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTg0Mj11bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBibGtnX2NvbmZfb3Blbl9iZGV2X2Zyb3plbihzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTg2Ny0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6ODY4OiAqIGJsa2dfY29uZl9wcmVwIC0gcGFyc2UgYW5kIHByZXBhcmUgZm9yIHBlci1ibGtnIGNvbmZpZyB1cGRhdGVcXG5ibG9jay9ibGstY2dyb3VwLmMtODY5LSAqIEBibGtjZzogdGFyZ2V0IGJsb2NrIGNncm91cFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTg4MS0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6ODgyOmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuYmxvY2svYmxrLWNncm91cC5jLTg4My1cXHRcXHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTk4Ny19XFxuYmxvY2svYmxrLWNncm91cC5jOjk4ODpFWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfcHJlcCk7XFxuYmxvY2svYmxrLWNncm91cC5jLTk4OS1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjI9dW5zaWduZWQgbG9uZyBibGtnX2NvbmZfb3Blbl9iZGV2X2Zyb3plbihzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KTtcXG5ibG9jay9ibGstY2dyb3VwLmg6MjIzOmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuYmxvY2svYmxrLWNncm91cC5oLTIyNC1cXHRcXHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KTtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0zMTA0PXN0YXRpYyBzc2l6ZV90IGlvY193ZWlnaHRfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMzE0Mi1cXG5ibG9jay9ibGstaW9jb3N0LmM6MzE0MzpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2Nvc3QsIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zMTQ0LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9ODI3PXN0YXRpYyBzc2l6ZV90IGlvbGF0ZW5jeV9zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODU0LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo4NTU6XFx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFxcdTAwMjZibGtjZ19wb2xpY3lfaW9sYXRlbmN5LCBcXHUwMDI2Y3R4KTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODU2LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMzQzPXN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNjMtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM2NDpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNjUtXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE1Mjc9c3RhdGljIHNzaXplX3QgdGdfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE1NDctXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTU0ODpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE1NDktXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MzIuOTI5Nzk4OTcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MzA2MzI4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgQ2dyb3VwIEJ1ZyBhbmQgaXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbi4gSXQgc2VlbXMgYGJsa2dfY29uZl9wcmVwYCBpcyBhIGNlbnRyYWwgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gcXVpdGUgYSBmZXcgZGlmZmVyZW50IGNncm91cCBmaWxlIHdyaXRlIGhhbmRsZXJzLiBJIGNhbiBzZWUgaXQncyBsaW5rZWQgdG8gYGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodGAsIGBpb2Nfd2VpZ2h0X3dyaXRlYCwgYGlvbGF0ZW5jeV9zZXRfbGltaXRgLCBgdGdfc2V0X2NvbmZgLCBhbmQgYHRnX3NldF9saW1pdGAg4oCTIGJhc2ljYWxseSwgc2V0dGluZ3MgcmVsYXRlZCB0byBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGFwcGVhcnMgdG8gYmUgdGhhdCBgYmxrZ19jcmVhdGVgIGlzbid0IGFsd2F5cyBpbml0aWFsaXppbmcgcHJvcGVybHkuIEl0IGNhbiBmYWlsIHRvIGZ1bGx5IGxpbmssIG1lYW5pbmcgaXRzIGBwZFtdYCBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggSSBhc3N1bWUgaG9sZHMgcGVyLWRldmljZSBpbmZvcm1hdGlvbiwgYmVjb21lcyBpbnZpc2libGUgdG8gYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KClgLiBUaGlzIGlzIGEgcHJldHR5IGNyaXRpY2FsIGZsYXcsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb3JyZWN0IGFjY291bnRpbmcgb3IgcmVzb3VyY2UgbGVha3MuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlc2UgZmFpbHVyZSBtb2RlcyBpbiBgYmxrZ19jcmVhdGVgLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgdGhlcmUncyBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIGEgYHJhZGl4X3RyZWVfaW5zZXJ0YCBmYWlsdXJlLCBvciBhIGBiZGlfZ2V0YCBmYWlsdXJlLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYmxvY2sgY2dyb3VwIGVycm9yIGhhbmRsaW5nLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGJlIHN1cmUgYW55IGZhaWx1cmUgc3RhdGVzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC5cblxuUmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIHNldmVyYWwgb3B0aW9ucyB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLCBsaWtlIGBCTEtfQ0dST1VQYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19DR1JPVVBfSU9QUklPYCwgYElPU0NIRURfQkZRYCwgYEJGUV9DR1JPVVBfREVCVUdgLCBgQkxLX0NHUk9VUF9SV1NUQVRgLCBhbmQgYEJMS19DR1JPVVBfUFVOVF9CSU9gLiBMZXQncyBwYXkgZXh0cmEgYXR0ZW50aW9uIHRvIGBJT1NDSEVEX0JGUWAgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAgc2luY2UgdGhleSdyZSBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIHJlbGF0aW9uIHRvIGBibGtnX2NvbmZfcHJlcGAuIFRoaXMgc2VlbXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjM5LjQ2MDQzNDMwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0NTU5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJGUV9HUk9VUF9JT1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWcuaW9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnLmlvc2NoZWQ9MTk9Y29uZmlnIElPU0NIRURfQkZRXFxuLS1cXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMjktXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjMwOmNvbmZpZyBCRlFfR1JPVVBfSU9TQ0hFRFxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMS0gICAgICAgYm9vbCBcXFwiQkZRIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjM5LjUyMzg5NTM2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY2NzQzMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIEkvTyBMYXRlbmN5IE1ldHJpY3MqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGJsb2NrIEkvTyBsYXRlbmN5IG1ldHJpY3MuIEkgd2FudCB0byBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgd2hpY2ggSSBrbm93IGNhbiBnaXZlIG1lIGEgZ3JhbnVsYXIgdmlldyBpbnRvIHRoZSBsYXRlbmN5IGV4cGVyaWVuY2VkIGJ5IGluZGl2aWR1YWwgY2dyb3Vwcy4gSSdtIGFsc28gdGhpbmtpbmcgdGhpcyBpcyBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gY2hlY2sgb3RoZXIgcmVsYXRlZCBibG9jayBkZXZpY2Ugc3RhdGlzdGljcyBhcyB3ZWxsLCBwcm9iYWJseSBmb2N1c2luZyBvbiBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBwcm92aWRlIGNvcnJvYm9yYXRpbmcgZXZpZGVuY2UuIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhdCBhIHZlcnkgbG93IGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzgxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6NDMuNjkwNjQxMTI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc0MjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuLS1cXG5ibG9jay9LY29uZmlnLTQxLVxcbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXFxuYmxvY2svS2NvbmZpZy00My1cXHRib29sXFxuYmxvY2svS2NvbmZpZy00NC1cXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXFxuYmxvY2svS2NvbmZpZy00Ni1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE0NC1cXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbmJsb2NrL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE2My1cXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cXG5ibG9jay9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjQzLjc0NzM4ODE3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0NTU1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIFRocm90dGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYEJMS19ERVZfVEhST1RUTElOR2AuIFdoYXQncyB0aGUgY3VycmVudCBzdGF0dXMsIGFuZCB3aGVyZSBhcmUgdGhlIHBvdGVudGlhbCBwaXRmYWxscz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UgYW5kIHByZXZlbnQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpbnZvbHZlcyBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZWluZyBob3cgSSBjYW4gbW9uaXRvciB0aGUgYmxvY2sgZGV2aWNlIHRocm90dGxpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCB0cmFkZS1vZmZzIHRoYXQgaGF2ZSB0byBiZSBtYWRlIHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IGFuZCBibG9jayBkZXZpY2VzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBjYXVzaW5nIHVubmVjZXNzYXJ5IGJsb2NrIGRldmljZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjQ2Ljk4MTk0NjUyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwMTIxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfVEhST1RUTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcXG4tLVxcbmJsb2NrL0tjb25maWctMTA1LVxcbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG5ibG9jay9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0Mjo0Ny4wMzg5Njg1NzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNDI4MDk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGVuYWJsZSBhIHNwZWNpZmljIHNldCBvZiBibG9jayBJL08gY2dyb3VwIGNvbmZpZ3VyYXRpb25zOiBgQkxLX0NHUk9VUGAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gTm93LCBsZXQncyByZXZpc2l0IHRoZSBjYWxsZXJzIG9mIGBibGtnX2NyZWF0ZWAuIEkgcmVtZW1iZXIgdGhhdCB3YXMgYSBjcml0aWNhbCBmdW5jdGlvbi4gUmlnaHQsIHRoZSBrZXkgY2FsbGVycyBhcmUgYGJsa2dfY29uZl9wcmVwYCwgYGJsa2NnX2luaXRfZGlza2AsIGFuZCBgYmxrZ19sb29rdXBfY3JlYXRlYC5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGJsa2dfY3JlYXRlYCwgYGJsa2dfY29uZl9wcmVwYCwgYGJsa2NnX2luaXRfZGlza2AsIGBibGtnX2xvb2t1cF9jcmVhdGVgLCBhbmQgYGJsa2dfZnJlZV93b3JrZm5gLiBIb2xkIG9uLCBpcyBgYmxrZ19jcmVhdGVgIHN0YXRpYz8gWWVzLCBpdCBpcy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBmb2N1cyBvdXIgYXR0ZW50aW9uIG9uICBgYmxrZ19jb25mX3ByZXBgLCBgYmxrY2dfaW5pdF9kaXNrYCwgYGJsa2dfbG9va3VwX2NyZWF0ZWAsIGFuZCBgYmxrZ19mcmVlX3dvcmtmbmAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LlxuXG5XYWl0IGEgc2Vjb25kLCB3YXNuJ3QgYGJsa2dfbG9va3VwX2NyZWF0ZWAgYWxzbyBkZWNsYXJlZCBzdGF0aWM/IE9rYXksIGxvb2tzIGxpa2UgaXQgaXMuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgYmxrZ19sb29rdXBfY3JlYXRlYC4gR290dGEgYmUgdGhvcm91Z2ggaGVyZSBhbmQgbWFrZSBzdXJlIEknbSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjUyLjM1MzI1Mjc0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MTUwNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2dfbG9va3VwX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNncm91cC5jPTM3OT1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2NyZWF0ZShzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy00NzEtLyoqXFxuYmxvY2svYmxrLWNncm91cC5jOjQ3MjogKiBibGtnX2xvb2t1cF9jcmVhdGUgLSBsb29rdXAgYmxrZywgdHJ5IHRvIGNyZWF0ZSBvbmUgaWYgbm90IHRoZXJlXFxuYmxvY2svYmxrLWNncm91cC5jLTQ3My0gKiBAYmxrY2c6IGJsa2NnIG9mIGludGVyZXN0XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNDgzLSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0ODQ6c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19sb29rdXBfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csXFxuYmxvY2svYmxrLWNncm91cC5jLTQ4NS1cXHRcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0yMTI0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpibGtnX3RyeWdldF9jbG9zZXN0KHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTI5LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5ibG9jay9ibGstY2dyb3VwLmM6MjEzMDpcXHRibGtnID0gYmxrZ19sb29rdXBfY3JlYXRlKGNzc190b19ibGtjZyhjc3MpLCBiaW8tXFx1MDAzZWJpX2JkZXYtXFx1MDAzZWJkX2Rpc2spO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTMxLVxcdHdoaWxlIChibGtnKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjUyLjYyODQxMjA1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM5OTUwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBibGtnX3RyeWdldF9jbG9zZXN0YCBMb2NhdGlvbioqXG5cbkhtbSwgc28gYGJsa2dfdHJ5Z2V0X2Nsb3Nlc3RgLi4uIEkgd2FzIGZhaXJseSBjZXJ0YWluIHRoYXQgd2FzIGRlY2xhcmVkIGBzdGF0aWMgaW5saW5lYC4gSXQncyBhIHByZXR0eSBjb21tb24gcGF0dGVybiBmb3IgdGhvc2Uga2luZHMgb2YgaGVscGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGNncm91cCBibG9jayBkZXZpY2UgYWNjb3VudGluZywga2VlcGluZyB0aGVtIGNsb3NlIHRvIHdoZXJlIHRoZXkncmUgdXNlZC4gQnV0LCB3YWl0LCB0aGF0IGRvZXNuJ3QgcXVpdGUgc2VlbSByaWdodC4gSSB0aG91Z2h0IEkgc2F3IGl0IGluIGBibG9jay9ibGstY2dyb3VwLmNgPyBPa2F5LCB3YWl0LCAqaXMqIGl0IGluIGBibG9jay9ibGstY2dyb3VwLmNgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24uIEp1c3QgbmVlZCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBzdXJlIEknbSBub3QgbWlzcmVtZW1iZXJpbmcgb3IgY29uZmxhdGluZyBpdCB3aXRoIHNvbWV0aGluZyBlbHNlLCBvdGhlcndpc2UsIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJdCdzIGltcG9ydGFudCB0byBiZSBhY2N1cmF0ZS4gUmlnaHQsIGxldCdzIHNlZS4gSSdsbCBqdXN0IGNvbmZpcm0gd2hlcmUgdGhhdCBjb2RlIGxpdmVzIGJlZm9yZSBtb3Zpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTU2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6NTcuMTY4MzY1NTEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM5MDIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtnX3RyeWdldF9jbG9zZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9MjEwNz12b2lkIGJsa2NnX2FkZF9kZWxheShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHU2NCBub3csIHU2NCBkZWx0YSlcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTE1LS8qKlxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTE2OiAqIGJsa2dfdHJ5Z2V0X2Nsb3Nlc3QgLSB0cnkgYW5kIGdldCBhIGJsa2cgcmVmIG9uIHRoZSBjbG9zZXQgYmxrZ1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTE3LSAqIEBiaW86IHRhcmdldCBiaW9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTIzLSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTI0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpibGtnX3RyeWdldF9jbG9zZXN0KHN0cnVjdCBiaW8gKmJpbyxcXG5ibG9jay9ibGstY2dyb3VwLmMtMjEyNS1cXHRcXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTIxNTc9dm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3Moc3RydWN0IGJpbyAqYmlvLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTIxNjMtXFx0aWYgKGNzcyBcXHUwMDI2XFx1MDAyNiBjc3MtXFx1MDAzZXBhcmVudCkge1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTY0OlxcdFxcdGJpby1cXHUwMDNlYmlfYmxrZyA9IGJsa2dfdHJ5Z2V0X2Nsb3Nlc3QoYmlvLCBjc3MpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTY1LVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjU3LjIyODc2MDczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzY1MDUzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzc2AgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzYCBzZWVtcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCdzIGluaXRpYXRpbmcgdGhlIHByb2Nlc3MsIGFuZCBpdCdzIGNhbGxpbmcgYGJsa2dfdHJ5Z2V0X2Nsb3Nlc3RgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGJsa2dfdHJ5Z2V0X2Nsb3Nlc3RgIGhhcyBhbHdheXMgYmVlbiBhIHBvaW50IG9mIHBvdGVudGlhbCBvcHRpbWl6YXRpb24uIFRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGludGVyYWN0aW9uLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSByZWxhdGVzIHRvIHRoZSByZXN0IG9mIHRoZSBmcmFtZXdvcmsuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzIG9mIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3NgLiBUaGF0IHdpbGwgaGVscCBtZSBncmFzcCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgbmVlZCB0aGF0IGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8gZmlndXJlIG91dCBpZiB0aGlzIG1pZ2h0IGJlIGFuIGFyZWEgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9yLCBwZXJoYXBzLCBhIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MzowMS4yMDUyNjgwNzNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzQ5NzEyNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9NTk5PXN0cnVjdCBiZnFfZ3JvdXAgKmJmcV9iaW9fYmZxZyhzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy02MTAtXFx0XFx0aWYgKGJmcWctXFx1MDAzZXBkLm9ubGluZSkge1xcbmJsb2NrL2JmcS1jZ3JvdXAuYzo2MTE6XFx0XFx0XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgXFx1MDAyNmJsa2ctXFx1MDAzZWJsa2NnLVxcdTAwM2Vjc3MpO1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy02MTItXFx0XFx0XFx0cmV0dXJuIGJmcWc7XFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtNjE1LVxcdH1cXG5ibG9jay9iZnEtY2dyb3VwLmM6NjE2OlxcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhiaW8sXFxuYmxvY2svYmZxLWNncm91cC5jLTYxNy1cXHRcXHRcXHRcXHRcXHUwMDI2YmZxZ190b19ibGtnKGJmcWQtXFx1MDAzZXJvb3RfZ3JvdXApLVxcdTAwM2VibGtjZy1cXHUwMDNlY3NzKTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0yMTI0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpibGtnX3RyeWdldF9jbG9zZXN0KHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTQzLS8qKlxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTQ0OiAqIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyAtIGFzc29jaWF0ZSBhIGJpbyB3aXRoIGEgc3BlY2lmaWVkIGNzc1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTQ1LSAqIEBiaW86IHRhcmdldCBiaW9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTU2LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTU3OnZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKHN0cnVjdCBiaW8gKmJpbyxcXG5ibG9jay9ibGstY2dyb3VwLmMtMjE1OC1cXHRcXHRcXHRcXHQgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTY5LX1cXG5ibG9jay9ibGstY2dyb3VwLmM6MjE3MDpFWFBPUlRfU1lNQk9MX0dQTChiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTcxLVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTIxODE9dm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2coc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTIxOTQtXFxuYmxvY2svYmxrLWNncm91cC5jOjIxOTU6XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgY3NzKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMjE5Ni1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0yMjA2PXZvaWQgYmlvX2Nsb25lX2Jsa2dfYXNzb2NpYXRpb24oc3RydWN0IGJpbyAqZHN0LCBzdHJ1Y3QgYmlvICpzcmMpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMjIwOC1cXHRpZiAoc3JjLVxcdTAwM2ViaV9ibGtnKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMjA5OlxcdFxcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzcyhkc3QsIGJpb19ibGtjZ19jc3Moc3JjKSk7XFxuYmxvY2svYmxrLWNncm91cC5jLTIyMTAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW8uaD01MDQ9dm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2coc3RydWN0IGJpbyAqYmlvKTtcXG5pbmNsdWRlL2xpbnV4L2Jpby5oOjUwNTp2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhzdHJ1Y3QgYmlvICpiaW8sXFxuaW5jbHVkZS9saW51eC9iaW8uaC01MDYtXFx0XFx0XFx0XFx0IHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaW8uaD01MTA9c3RhdGljIGlubGluZSB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZyhzdHJ1Y3QgYmlvICpiaW8pIHsgfVxcbmluY2x1ZGUvbGludXgvYmlvLmg6NTExOnN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3Moc3RydWN0IGJpbyAqYmlvLFxcbmluY2x1ZGUvbGludXgvYmlvLmgtNTEyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaD0yNTY9c3RhdGljIGlubGluZSB2b2lkIHdiY19pbml0X2JpbyhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaC0yNjQtXFx0aWYgKHdiYy1cXHUwMDNld2IpXFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaDoyNjU6XFx0XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgd2JjLVxcdTAwM2V3Yi1cXHUwMDNlYmxrY2dfY3NzKTtcXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTI2Ni19XFxuLS1cXG5tbS9wYWdlX2lvLmM9MzA5PXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTMxOS1cXHRjc3MgPSBjZ3JvdXBfZV9jc3MobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXAsIFxcdTAwMjZpb19jZ3JwX3N1YnN5cyk7XFxubW0vcGFnZV9pby5jOjMyMDpcXHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MoYmlvLCBjc3MpO1xcbm1tL3BhZ2VfaW8uYy0zMjEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQzOjAzLjI4MDI0NTMyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU2NjE1Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJsa2dfY3JlYXRlYCBDYWxsIFBhdGgqKlxuXG5Pa2F5LCBzbyBgYmlvX2Fzc29jaWF0ZV9ibGtnYCBpcyBhIGNlbnRyYWwgZnVuY3Rpb24sIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYWxsIG92ZXIgdGhlIHBsYWNlLiBUaGF0IG1lYW5zIGBibGtnX2NyZWF0ZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBpdCwgc3BlY2lmaWNhbGx5IHdoZW4gYSBiaW8gaXMgaW5pdGlhbGl6ZWQuIEkgYWxyZWFkeSBrbmV3IHRoaXMsIGJ1dCBpdCdzIGdvb2QgdG8gY29uZmlybSB0aGUgaGlnaCB0cmFmZmljIGhlcmUuIFRoaXMgaXMgYSBjcnVjaWFsLCBob3QgY29kZSBwYXRoLCBubyBxdWVzdGlvbiBhYm91dCBpdC5cblxuSSdtIHRoaW5raW5nLCBpbnN0ZWFkIG9mIHBva2luZyBhcm91bmQgaW4gYGJpb19hc3NvY2lhdGVfYmxrZ2AgZGlyZWN0bHkgd2hpY2ggaXMgdG9vIGJyb2FkLCBJJ2xsIHRha2UgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBJJ2xsIGZvY3VzIG9uIGBibGtnX2NvbmZfcHJlcGAgYW5kIGBibGtjZ19pbml0X2Rpc2tgIGFzIHRoZXkncmUgbW9yZSBjb250cm9sbGFibGUgdHJpZ2dlcnMgdGhhdCBsZWFkIHRvIGBibGtnX2NyZWF0ZWAuIExldCdzIGZvY3VzIG9uIGludmVzdGlnYXRpbmcgdGhlIGNhbGxlcnMgb2YgYGJsa2NnX2luaXRfZGlza2AuIFRoaXMgZmVlbHMgbGlrZSBhIHNtYXJ0IHBsYWNlIHRvIHN0YXJ0IHRoZSBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTY4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQzOjEwLjgzNjg2MzcwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNDM4MTk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtjZ19pbml0X2Rpc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz0xNTEwPXZvaWQgYmxrZ19pbml0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1MTUtXFxuYmxvY2svYmxrLWNncm91cC5jOjE1MTY6aW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstY2dyb3VwLmMtMTUxNy17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9MTk0PXZvaWQgYmxrZ19pbml0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcXG5ibG9jay9ibGstY2dyb3VwLmg6MTk1OmludCBibGtjZ19pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xOTYtdm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oPTQ4MD1zdGF0aWMgaW5saW5lIHZvaWQgYmxrZ19pbml0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSB7IH1cXG5ibG9jay9ibGstY2dyb3VwLmg6NDgxOnN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyByZXR1cm4gMDsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00ODItc3RhdGljIGlubGluZSB2b2lkIGJsa2NnX2V4aXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XFxuLS1cXG5ibG9jay9nZW5oZC5jPTE0NDY9c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTQ3NC1cXG5ibG9jay9nZW5oZC5jOjE0NzU6XFx0aWYgKGJsa2NnX2luaXRfZGlzayhkaXNrKSlcXG5ibG9jay9nZW5oZC5jLTE0NzYtXFx0XFx0Z290byBvdXRfZXJhc2VfcGFydDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQzOjEyLjc3MTI1MTQ1MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgzNDkyMDYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBQYXRjaCBDYW5kaWRhdGVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGJsb2NrIEkvTyBjZ3JvdXAgcGF0Y2guIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgbW9zdCBsaWtlbHkgdG91Y2hlZCBieSB0aGUgY2hhbmdlcywgYW5kIGlkZWFsbHksIHRob3NlICpsZWFzdCogbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gcGF0aC4gSSBzZWUgYGJsa2NnX2luaXRfZGlza2AgY2FsbGVkIGZyb20gYF9fYWxsb2NfZGlza19ub2RlYC4gU2VlbXMgcHJvbWlzaW5nLCBhcyBpdCdzIHRyaWdnZXJlZCBkdXJpbmcgZGlzayBhbGxvY2F0aW9uLCBhIHBvaW50IHRvIGNvbnNpZGVyLiBBbmQgdGhlbiB0aGVyZSdzIGBibGtnX2NvbmZfcHJlcGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGNncm91cCB3cml0ZSBoYW5kbGVycywgc28gaXQncyBsaWtlbHkgdG8gYmUgcmVsZXZhbnQuXG5cbkxldCdzIHNlZeKApiBJIGFsc28gc2VlIGBibGtnX2ZyZWVfd29ya2ZuYCBhcyBhIGZ1bmN0aW9uIHRoYXQncyBjaGFuZ2VkLCBidXQgSSBzZWUgaXQgaXMgY2FsbGVkIGZyb20gYSB3b3JrcXVldWUsIHNvIGxldCdzIGtlZXAgaXQgaW4gbWluZCBidXQgZm9jdXMgb24gdGhlIG9uZXMgSSBoYXZlIG1hcmtlZCBhYm92ZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgYmxrZ19jcmVhdGVgIGluIGFuIGVycm9yIHBhdGgsIGFuZCBhbHNvIGBibGtnX2ZyZWVfd29ya2ZuYC4gQWxyaWdodC4gU28sIGtlZXBpbmcgdGhhdCBpbiBtaW5kLCB0aGUga2V5IGZvY3VzIHBvaW50cyBiYXNlZCBvbiB0aGUgcGF0Y2ggc2VlbSB0byBiZSBgYmxrZ19jb25mX3ByZXBgLCBgYmxrY2dfaW5pdF9kaXNrYCwgYW5kIGFsc28gYGJpb19hc3NvY2lhdGVfYmxrZ2AuIEJ1dCB3YWl0Li4uIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGhvdCBwYXRocywgYW5kIGBiaW9fYXNzb2NpYXRlX2Jsa2dgICpzY3JlYW1zKiBob3QgcGF0aC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIHN0ZWVyIGNsZWFyIG9mIHRoYXQgb25lIGZvciBub3cuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAgYSBiaXQgYW5kIGNoZWNrIGZvciBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBBaGEsIGBibGtnX2NyZWF0ZWAsIGBibGtnX2ZyZWVfd29ya2ZuYCwgYW5kIGBibGtnX2ZyZWVfcGRgIGFyZSBhbGwgc3RhdGljLiBUaGF0IG5hcnJvd3MgaXQgZG93biBldmVuIGZ1cnRoZXIuIFNvLCBgYmxrZ19jb25mX3ByZXBgIGFuZCBgYmxrY2dfaW5pdF9kaXNrYCBhcmUgdGhlIHRvcCBjb250ZW5kZXJzLCB0aGVuLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSB0d28gZmlyc3QuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgY29uZmlndXJhdGlvbnMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgYWN0aXZhdGVkIHRvIG1ha2UgYWxsIHRoaXMgd29yazpcblxuKiAgIGBCTEtfQ0dST1VQYFxuKiAgIGBCTEtfREVWX1RIUk9UVExJTkdgXG4qICAgYEJMS19DR1JPVVBfSU9MQVRFTkNZYFxuKiAgIGBCTEtfQ0dST1VQX0lPQ09TVGBcbiogICBgSU9TQ0hFRF9CRlFgXG4qICAgYEJGUV9HUk9VUF9JT1NDSEVEYFxuXG5KdXN0IHRvIGJlIHNhZmUsIEknbSBnb2luZyB0byBxdWlja2x5IHJlLWNoZWNrIGBibG9jay9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQzOjIzLjYwNjE5OTUzNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2ODc0OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDM6MjMuNzEzMDgwMzgyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTc2MDI3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJsb2NrIENncm91cCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSBxdWljayBydW5kb3duLiBJdCBzZWVtcyB3ZSBoYXZlIGEgY2FuZGlkYXRlIGZvciBzb21lIGRlY2VudCBmdXp6aW5nLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGEgd2lkZXIgc2V0IG9mIHBvdGVudGlhbCBmZWF0dXJlcyB0byBlbmFibGUsIGluY2x1ZGluZyBgQkxLX0NHUk9VUF9GQ19BUFBJRGAsIGJ1dCB0aGF0IHByb2JhYmx5IGlzbid0IHRoZSBiZXN0IHVzZSBvZiByZXNvdXJjZXMuIExldCdzIGZvY3VzIG9uIHRoZSBtYWluIHBsYXllcnM6IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPUFJJT2AsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJJ3ZlIHZlcmlmaWVkIHRoYXQgYGJsa2dfY29uZl9wcmVwYCBpcyBleHBvcnRlZCBhbmQgd2UgY2FuIHVzZSBpdCwgYnV0IGBibGtjZ19pbml0X2Rpc2tgIGlzIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLCBhbHRob3VnaCBpdCAqaXMqIGEgZ2xvYmFsIGZ1bmN0aW9uLlxuXG5UaGUgcmVhbCBrZXkgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgdGhlIGVycm9yIHBhdGhzIHdpdGhpbiBgYmxrZ19jcmVhdGVgLiBUaGF0IG9wZW5zIHVwIHNvbWUgaW50ZXJlc3RpbmcgYXR0YWNrIHZlY3RvcnMsIG5hbWVseSB0aGUgcG90ZW50aWFsIGZvciB0cmlnZ2VyaW5nIGZhaWx1cmVzLCB3aGljaCBpcyBleGNlbGxlbnQgZnV6emluZyBmb2RkZXIuIFdlIGNvdWxkIHBvdGVudGlhbGx5IGhpdCBhbGxvY2F0aW9uIGZhaWx1cmVzIChmYXVsdCBpbmplY3Rpb24gaXMgb3VyIGZyaWVuZCBoZXJlKSwgb3IgYW4gYEVFWElTVGAgZXJyb3IgaW4gYHJhZGl4X3RyZWVfaW5zZXJ0YCBpZiB0aGVyZSdzIGFuIGlzc3VlIHdpdGggYW4gb2xkIGVudHJ5IGhhbmdpbmcgYXJvdW5kLiBUaGVyZSdzIGFsc28gdGhlIGBiZGlfZ2V0YCBmYWlsdXJlIHRvIGtlZXAgaW4gbWluZC4gRmF1bHQgaW5qZWN0aW9uIGZ1enppbmcgc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGVzZSBjb25kaXRpb25zIGZhaXJseSBlYXNpbHksIG1ha2luZyB0aGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciB0aG9yb3VnaCB0ZXN0aW5nLlxuXG5UbyByZWNhcCwgaGVyZSdzIHdoYXQgSSd2ZSBpZGVudGlmaWVkOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuKiAgICoqRm9jdXMgU3ltYm9sczoqKlxuICAgICogICBgYmxrZ19jb25mX3ByZXBgXG4gICAgKiAgIGBibGtjZ19pbml0X2Rpc2tgXG4gICAgKiAgIGBibGtnX2ZyZWVfd29ya2ZuYCAoaW1wb3J0YW50IGR1ZSB0byB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMpXG4qICAgKipFbmFibGUgQ29uZmlnczoqKlxuICAgICogICBgQkxLX0NHUk9VUGBcbiAgICAqICAgYEJMS19ERVZfVEhST1RUTElOR2BcbiAgICAqICAgYEJMS19DR1JPVVBfSU9MQVRFTkNZYFxuICAgICogICBgQkxLX0NHUk9VUF9JT0NPU1RgXG4gICAgKiAgIGBCTEtfQ0dST1VQX0lPUFJJT2BcbiAgICAqICAgYElPU0NIRURfQkZRYFxuICAgICogICBgQkZRX0dST1VQX0lPU0NIRURgXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBibG9jayBjZ3JvdXAgbG9naWMsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcy4gSXQgYWZmZWN0cyBgYmxrZ19jcmVhdGVgIGVycm9yIHBhdGhzIGFuZCB0aGUgc3luY2hyb25vdXMgZnJlZWluZyBvZiBwb2xpY3kgZGF0YSB3aGVuIGBibGtnX2NyZWF0ZWAgZmFpbHMsIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYGJsa2dfZnJlZV93b3JrZm5gLiBUaGUgZmFjdCB0aGF0IGl0IGlzIHJlYWNoZWQgdmlhIGNncm91cCBjb25maWd1cmF0aW9ucyBhbmQgZGlzayBpbml0aWFsaXphdGlvbiBhbmQgdGhhdCB0aGlzIGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjAxLCJPdXRwdXRUb2tlbnMiOjIyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MzozOC42ODkxMTA5NDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzIzNjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0NHUk9VUFwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIkJMS19DR1JPVVBfSU9QUklPXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtnX2NvbmZfcHJlcFwiLFxuICAgIFwiYmxrY2dfaW5pdF9kaXNrXCIsXG4gICAgXCJibGtnX2ZyZWVfd29ya2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYmxrZ19jcmVhdGUgYW5kIHRoZSBhc3luY2hyb25vdXMgZnJlZWluZyBsb2dpYyBpbiBibGtnX2ZyZWVfd29ya2ZuIHRvIHN5bmNocm9ub3VzbHkgZnJlZSBwb2xpY3kgZGF0YSAocGQpIHdoZW4gYmxrZ19jcmVhdGUgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBjZ3JvdXAgbG9naWMgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVhayB3aGVuIGEgcG9saWN5IGlzIHVucmVnaXN0ZXJlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY29uZmlndXJhdGlvbiB3cml0ZXMgYW5kIGRpc2sgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZywgZXNwZWNpYWxseSB3aXRoIGZhdWx0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT1BSSU9cIixcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCRlFfR1JPVVBfSU9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa2dfY29uZl9wcmVwXCIsXG4gICAgXCJibGtjZ19pbml0X2Rpc2tcIixcbiAgICBcImJsa2dfZnJlZV93b3JrZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBibGtnX2NyZWF0ZSBhbmQgdGhlIGFzeW5jaHJvbm91cyBmcmVlaW5nIGxvZ2ljIGluIGJsa2dfZnJlZV93b3JrZm4gdG8gc3luY2hyb25vdXNseSBmcmVlIHBvbGljeSBkYXRhIChwZCkgd2hlbiBibGtnX2NyZWF0ZSBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGNncm91cCBsb2dpYyB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrIHdoZW4gYSBwb2xpY3kgaXMgdW5yZWdpc3RlcmVkLiBJdCBpcyByZWFjaGFibGUgdmlhIGNncm91cCBjb25maWd1cmF0aW9uIHdyaXRlcyBhbmQgZGlzayBpbml0aWFsaXphdGlvbiwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHdpdGggZmF1bHQgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowcpb42[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 07:29:58 +0000 UTC FinishedAt: 2026-06-22 07:43:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ff6f26c58421614b02694ac9d219ac61d924bc68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "BLK_DEV_THROTTLING", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP_IOCOST", "BLK_CGROUP_IOPRIO", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "ff6f26c58421614b02694ac9d219ac61d924bc68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_CGROUP", "BLK_DEV_THROTTLING", "BLK_CGROUP_IOLATENCY", "BLK_CGROUP_IOCOST", "BLK_CGROUP_IOPRIO", "IOSCHED_BFQ", "BFQ_GROUP_IOSCHED" ], "series_id": "ceab8ef5-b8b2-478d-b445-4b4df68b1156" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "blkg_conf_prep", "blkcg_init_disk", "blkg_free_workfn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9QUklPJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrZ19jb25mX3ByZXAmIzM0OywKICAgICYjMzQ7YmxrY2dfaW5pdF9kaXNrJiMzNDssCiAgICAmIzM0O2Jsa2dfZnJlZV93b3JrZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYmxrZ19jcmVhdGUgYW5kIHRoZSBhc3luY2hyb25vdXMgZnJlZWluZyBsb2dpYyBpbiBibGtnX2ZyZWVfd29ya2ZuIHRvIHN5bmNocm9ub3VzbHkgZnJlZSBwb2xpY3kgZGF0YSAocGQpIHdoZW4gYmxrZ19jcmVhdGUgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBjZ3JvdXAgbG9naWMgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVhayB3aGVuIGEgcG9saWN5IGlzIHVucmVnaXN0ZXJlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY29uZmlndXJhdGlvbiB3cml0ZXMgYW5kIGRpc2sgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZywgZXNwZWNpYWxseSB3aXRoIGZhdWx0IGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgwNzE5NGZlMmZmNjczMzY4MWJjODdkNDQ2NDUwM2I0OWJmNTAxMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwNzo0MjowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcbmluZGV4IGJjNjNiZDIyMDg2NWRjLi42NzM4ODZkNzFjMjY1ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNncm91cC5jXG5AQCAtMTExLDEyICYjNDM7MTExLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqYmxrY2dfY3NzKHZvaWQpXG4gXHRyZXR1cm4gdGFza19jc3MoY3VycmVudCwgaW9fY2dycF9pZCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBibGtnX2ZyZWVfcGQoc3RydWN0IGJsa2NnX2dxICpibGtnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGJsa2ctXHUwMDNlcGRbaV0pIHtcbiYjNDM7XHRcdFx0YmxrY2dfcG9saWN5W2ldLVx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cdTAwM2VwZFtpXSk7XG4mIzQzO1x0XHRcdGJsa2ctXHUwMDNlcGRbaV0gPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBibGtnX2ZyZWVfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJsa2NnX2dxLFxuIFx0XHRcdFx0XHQgICAgIGZyZWVfd29yayk7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJsa2ctXHUwMDNlcTtcbi1cdGludCBpO1xuIFxuIFx0LypcbiBcdCAqIHBkX2ZyZWVfZm4oKSBjYW4gYWxzbyBiZSBjYWxsZWQgZnJvbSBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLFxuQEAgLTEyNiw5ICYjNDM7MTM3LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19mcmVlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHQgKiBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLlxuIFx0ICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNnEtXHUwMDNlYmxrY2dfbXV0ZXgpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkmIzQzOyYjNDM7KVxuLVx0XHRpZiAoYmxrZy1cdTAwM2VwZFtpXSlcbi1cdFx0XHRibGtjZ19wb2xpY3lbaV0tXHUwMDNlcGRfZnJlZV9mbihibGtnLVx1MDAzZXBkW2ldKTtcbiYjNDM7XHRibGtnX2ZyZWVfcGQoYmxrZyk7XG4gXHRpZiAoYmxrZy1cdTAwM2VwYXJlbnQpXG4gXHRcdGJsa2dfcHV0KGJsa2ctXHUwMDNlcGFyZW50KTtcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2cS1cdTAwM2VxdWV1ZV9sb2NrKTtcbkBAIC00MzgsMTUgJiM0Mzs0NDcsMjQgQEAgc3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRpZiAoIXJldClcbiBcdFx0cmV0dXJuIGJsa2c7XG4gXG4tXHQvKiBAYmxrZyBmYWlsZWQgZnVsbHkgaW5pdGlhbGl6ZWQsIHVzZSB0aGUgdXN1YWwgcmVsZWFzZSBwYXRoICovXG4tXHRibGtnX3B1dChibGtnKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEBibGtnIGZhaWxlZCBmdWxseSBpbml0aWFsaXplZCBhbmQgbmV2ZXIgbGlua2VkLCBzbyBpdHMgcGRbXSBpc1xuJiM0MztcdCAqIGludmlzaWJsZSB0byBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLiBGcmVlIHBkW10gc3luY2hyb25vdXNseVxuJiM0MztcdCAqIHdoaWxlIGJsa2NnX3BvbGljeVtdIGlzIHN0aWxsIHZhbGlkLCBvdGhlcndpc2UgdGhlIGFzeW5jIGZyZWUgcGF0aFxuJiM0MztcdCAqIG1heSBjYWxsIHBkX2ZyZWVfZm4oKSBhZnRlciB0aGUgcG9saWN5IGlzIHVucmVnaXN0ZXJlZCAoZS5nLiBybW1vZCBiZnEpLlxuJiM0MztcdCAqIFRoZSBlcnJfZnJlZV9ibGtnIHBhdGggYmVsb3cgZnJlZXMgcGRbXSBmb3IgdGhlIHNhbWUgcmVhc29uLlxuJiM0MztcdCAqL1xuJiM0MztcdGJsa2dfZnJlZV9wZChibGtnKTtcbiYjNDM7XHRwZXJjcHVfcmVmX2tpbGwoXHUwMDI2YmxrZy1cdTAwM2VyZWZjbnQpO1xuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiBcbiBlcnJfcHV0X2NzczpcbiBcdGNzc19wdXQoXHUwMDI2YmxrY2ctXHUwMDNlY3NzKTtcbiBlcnJfZnJlZV9ibGtnOlxuLVx0aWYgKG5ld19ibGtnKVxuJiM0MztcdGlmIChuZXdfYmxrZykge1xuJiM0MztcdFx0YmxrZ19mcmVlX3BkKG5ld19ibGtnKTtcbiBcdFx0YmxrZ19mcmVlKG5ld19ibGtnKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPUFJJTyYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgICAmIzM0O2Jsa2NnX2luaXRfZGlzayYjMzQ7LAogICAgJiMzNDtibGtnX2ZyZWVfd29ya2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGJsa2dfY3JlYXRlIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYmxrZ19mcmVlX3dvcmtmbiB0byBzeW5jaHJvbm91c2x5IGZyZWUgcG9saWN5IGRhdGEgKHBkKSB3aGVuIGJsa2dfY3JlYXRlIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgY2dyb3VwIGxvZ2ljIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWsgd2hlbiBhIHBvbGljeSBpcyB1bnJlZ2lzdGVyZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNvbmZpZ3VyYXRpb24gd3JpdGVzIGFuZCBkaXNrIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwNzE5NGZlMmZmNjczMzY4MWJjODdkNDQ2NDUwM2I0OWJmNTAxMjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyMiAwNzo0MjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwppbmRleCBiYzYzYmQyMjA4NjVkYy4uNjczODg2ZDcxYzI2NWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTExMSwxMiAmIzQzOzExMSwyMyBAQCBzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2Nzcyh2b2lkKQogCXJldHVybiB0YXNrX2NzcyhjdXJyZW50LCBpb19jZ3JwX2lkKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGJsa2dfZnJlZV9wZChzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEJMS0NHX01BWF9QT0xTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGJsa2ctJmd0O3BkW2ldKSB7CiYjNDM7CQkJYmxrY2dfcG9saWN5W2ldLSZndDtwZF9mcmVlX2ZuKGJsa2ctJmd0O3BkW2ldKTsKJiM0MzsJCQlibGtnLSZndDtwZFtpXSA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBibGtnX2ZyZWVfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJsa2NnX2dxLAogCQkJCQkgICAgIGZyZWVfd29yayk7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBibGtnLSZndDtxOwotCWludCBpOwogCiAJLyoKIAkgKiBwZF9mcmVlX2ZuKCkgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKSwKQEAgLTEyNiw5ICYjNDM7MTM3LDcgQEAgc3RhdGljIHZvaWQgYmxrZ19mcmVlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS4KIAkgKi8KIAltdXRleF9sb2NrKCZhbXA7cS0mZ3Q7YmxrY2dfbXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBCTEtDR19NQVhfUE9MUzsgaSYjNDM7JiM0MzspCi0JCWlmIChibGtnLSZndDtwZFtpXSkKLQkJCWJsa2NnX3BvbGljeVtpXS0mZ3Q7cGRfZnJlZV9mbihibGtnLSZndDtwZFtpXSk7CiYjNDM7CWJsa2dfZnJlZV9wZChibGtnKTsKIAlpZiAoYmxrZy0mZ3Q7cGFyZW50KQogCQlibGtnX3B1dChibGtnLSZndDtwYXJlbnQpOwogCXNwaW5fbG9ja19pcnEoJmFtcDtxLSZndDtxdWV1ZV9sb2NrKTsKQEAgLTQzOCwxNSAmIzQzOzQ0NywyNCBAQCBzdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2NyZWF0ZShzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlpZiAoIXJldCkKIAkJcmV0dXJuIGJsa2c7CiAKLQkvKiBAYmxrZyBmYWlsZWQgZnVsbHkgaW5pdGlhbGl6ZWQsIHVzZSB0aGUgdXN1YWwgcmVsZWFzZSBwYXRoICovCi0JYmxrZ19wdXQoYmxrZyk7CiYjNDM7CS8qCiYjNDM7CSAqIEBibGtnIGZhaWxlZCBmdWxseSBpbml0aWFsaXplZCBhbmQgbmV2ZXIgbGlua2VkLCBzbyBpdHMgcGRbXSBpcwomIzQzOwkgKiBpbnZpc2libGUgdG8gYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS4gRnJlZSBwZFtdIHN5bmNocm9ub3VzbHkKJiM0MzsJICogd2hpbGUgYmxrY2dfcG9saWN5W10gaXMgc3RpbGwgdmFsaWQsIG90aGVyd2lzZSB0aGUgYXN5bmMgZnJlZSBwYXRoCiYjNDM7CSAqIG1heSBjYWxsIHBkX2ZyZWVfZm4oKSBhZnRlciB0aGUgcG9saWN5IGlzIHVucmVnaXN0ZXJlZCAoZS5nLiBybW1vZCBiZnEpLgomIzQzOwkgKiBUaGUgZXJyX2ZyZWVfYmxrZyBwYXRoIGJlbG93IGZyZWVzIHBkW10gZm9yIHRoZSBzYW1lIHJlYXNvbi4KJiM0MzsJICovCiYjNDM7CWJsa2dfZnJlZV9wZChibGtnKTsKJiM0MzsJcGVyY3B1X3JlZl9raWxsKCZhbXA7YmxrZy0mZ3Q7cmVmY250KTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogCiBlcnJfcHV0X2NzczoKIAljc3NfcHV0KCZhbXA7YmxrY2ctJmd0O2Nzcyk7CiBlcnJfZnJlZV9ibGtnOgotCWlmIChuZXdfYmxrZykKJiM0MzsJaWYgKG5ld19ibGtnKSB7CiYjNDM7CQlibGtnX2ZyZWVfcGQobmV3X2Jsa2cpOwogCQlibGtnX2ZyZWUobmV3X2Jsa2cpOwomIzQzOwl9CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIENncm91cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBibGtnX2ZyZWVfcGRgIGZ1bmN0aW9uLiBGcm9tIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBmcmVlaW5nIG9mIGFsbCBgcGRgcyAocHJlc3VtYWJseSAmIzM0O3BvbGljeSBkYXRhJiMzNDsgb3Igc29tZXRoaW5nIHNpbWlsYXIpIGFzc29jaWF0ZWQgd2l0aCBhIGBibGtjZ19ncWAuIE1ha2VzIHNlbnNlOyBjZW50cmFsaXppbmcgdGhpcyBjbGVhbnVwIGxvZ2ljIGlzIGdlbmVyYWxseSBnb29kIHByYWN0aWNlLgoKTm93LCB0aGUgaW1wb3J0YW50IGJpdHMuIGBibGtnX2ZyZWVfcGRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBwbGFjZXMsIGJvdGggcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gRmlyc3RseSwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGJsa2dfZnJlZV93b3JrZm5gLCByZXBsYWNpbmcgc29tZSBpbmxpbmUgY29kZS4gU3RhbmRhcmQgcmVmYWN0b3JpbmcgLSB0aWR5aW5nIHVwIHRoZSBjb2RlIGFuZCBpbXByb3ZpbmcgbWFpbnRhaW5hYmlsaXR5LgoKVGhlIHNlY29uZCBhcmVhIGlzIG1vcmUgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGJlaW5nIGludGVncmF0ZWQgaW50byBgYmxrZ19jcmVhdGVgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBlcnJvciBwYXRocy4gUHJldmlvdXNseSwgaWYgYGJsa2dfY3JlYXRlYCBmYWlsZWQgKmFmdGVyKiBpbml0aWFsaXppbmcgdGhlIGBibGtnYCBzdHJ1Y3R1cmUsIGl0IHdvdWxkIGNhbGwgYGJsa2dfcHV0KGJsa2cpYCB3aGljaCB3b3VsZCBlc3NlbnRpYWxseSBxdWV1ZSB0aGUgZnJlZWluZyBvcGVyYXRpb24gYXN5bmNocm9ub3VzbHkuIFRoaXMgaXNuJiMzOTt0IGlkZWFsIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGluIGFuIGVycm9yIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlIHN1YnNlcXVlbnQgZnJlZWluZyBvcGVyYXRpb25zIGNvdWxkIGNhdXNlIGlzc3Vlcy4gTm93LCB0aGUgcGF0Y2ggaXMgbW9yZSBkaXJlY3Q6IGl0IGNhbGxzIGBibGtnX2ZyZWVfcGQoYmxrZylgIHRvIGNsZWFuIHVwIHRoZSBgcGRgcyBhbmQgdGhlbiBpbW1lZGlhdGVseSBgcGVyY3B1X3JlZl9raWxsKCZhbXA7YmxrZy0mZ3Q7cmVmY250KWAgdG8gZ2V0IHJpZCBvZiB0aGUgcmVmZXJlbmNlIGNvdW50LiBUaGlzIGlzIGEgbXVjaCBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBzdHJhdGVneSwgcHJldmVudGluZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIG9yIHNpbWlsYXIgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBkZWxheWVkIGNsZWFudXAuCgpBbHNvIGluIHRoZSBgZXJyX2ZyZWVfYmxrZ2AgcGF0aCwgdGhleSBjYWxsIGBibGtnX2ZyZWVfcGQobmV3X2Jsa2cpYCBiZWZvcmUgYGJsa2dfZnJlZShuZXdfYmxrZylgLCB3aGljaCBhZ2FpbiBtYWtlcyBwZXJmZWN0IHNlbnNlIGZvciBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCBvcmRlci4KCkxldCYjMzk7cyBwdWxsIHVwIHRoZSBgYmxrZ19jcmVhdGVgIGZ1bmN0aW9uIGluIGBibG9jay9ibGstY2dyb3VwLmNgIGl0c2VsZiBhbmQgc2VlIGhvdyBhbGwgdGhpcyBpcyB3b3JraW5nIGluIGNvbnRleHQuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IHRoaXMgaXMgZGVzaWduZWQgdG8gbWl0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jPTMwOD1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2FsbG9jKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0zNzgtICovXG5ibG9jay9ibGstY2dyb3VwLmM6Mzc5OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5jLTM4MC1cdFx0XHRcdCAgICBzdHJ1Y3QgYmxrY2dfZ3EgKm5ld19ibGtnKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODAtICpcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0ODE6ICogUmV0dXJucyB0aGUgYmxrZyBvciB0aGUgY2xvc2VzdCBibGtnIGlmIGJsa2dfY3JlYXRlKCkgZmFpbHMgYXMgaXQgd2Fsa3NcbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODItICogZG93biBmcm9tIHJvb3QuXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTQ4ND1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2xvb2t1cF9jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZyxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNTA4LVx0ICogbm9uLXJvb3QgYmxrZ3MgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgcGFyZW50cy4gIFJldHVybnMgdGhlIGNsb3Nlc3RcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1MDk6XHQgKiBibGtnIHRvIHRoZSBpbnRlbmRlZCBibGtnIHNob3VsZCBibGtnX2NyZWF0ZSgpIGZhaWwuXG5ibG9jay9ibGstY2dyb3VwLmMtNTEwLVx0ICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTUyNi1cbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mjc6XHRcdGJsa2cgPSBibGtnX2NyZWF0ZShwb3MsIGRpc2ssIE5VTEwpO1xuYmxvY2svYmxrLWNncm91cC5jLTUyOC1cdFx0aWYgKElTX0VSUihibGtnKSkge1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz04ODI9aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtOTUyLVx0XHR9IGVsc2Uge1xuYmxvY2svYmxrLWNncm91cC5jOjk1MzpcdFx0XHRibGtnID0gYmxrZ19jcmVhdGUocG9zLCBkaXNrLCBuZXdfYmxrZyk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTU0LVx0XHRcdGlmIChJU19FUlIoYmxrZykpIHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTUxNj1pbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTI4LVx0ICogdGhlIG9sZCBvbmUgaXMgc3RpbGwgYWxpdmUsIGFuZCByYWRpeF90cmVlX2luc2VydCgpIGluXG5ibG9jay9ibGstY2dyb3VwLmM6MTUyOTpcdCAqIGJsa2dfY3JlYXRlKCkgd2lsbCBmYWlsIHdpdGggLUVFWElTVCBiZWNhdXNlIHRoZSBvbGQgZW50cmllc1xuYmxvY2svYmxrLWNncm91cC5jLTE1MzAtXHQgKiBzdGlsbCBvY2N1cHkgdGhlIHNhbWUgcXVldWUgaWQgc2xvdCBpbiBibGtjZy1cdTAwM2VibGtnX3RyZWUuXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE1NDItXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG5ibG9jay9ibGstY2dyb3VwLmM6MTU0MzpcdGJsa2cgPSBibGtnX2NyZWF0ZShcdTAwMjZibGtjZ19yb290LCBkaXNrLCBuZXdfYmxrZyk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTU0NC1cdGlmIChJU19FUlIoYmxrZykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIGJsb2NrIGNncm91cHM6CgoqKkFuYWx5emluZyBhIEJsb2NrIENncm91cCBQYXRjaDogRXJyb3IgUGF0aCBPcHRpbWl6YXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBgYmxrZ19jcmVhdGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gZXJyb3IgaGFuZGxpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGZyZWVpbmcgYHBkYCBzdHJ1Y3R1cmVzIHN5bmNocm9ub3VzbHkgd2l0aGluIHRoZSBlcnJvciBwYXRocy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IHdlIGhhbmRsZSBibG9jayBjZ3JvdXAgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc2V0dGluZ3MgdGhhdCB3b3VsZCBpbnRlcmFjdCB3aXRoIHRoaXMgbW9kaWZpZWQgZXJyb3IgaGFuZGxpbmcuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYmxvY2sgY2dyb3VwIGFsbG9jYXRpb24sIHJlc291cmNlIGxpbWl0cywgYW5kIGVycm9yIHJlY292ZXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZXJyb3IgcGF0aHMgYXJlIHRyaWdnZXJlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHN5bmNocm9ub3VzIGZyZWVpbmcgbWlnaHQgYmUgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBhbmQgaG93IHRoaXMgYWx0ZXJzIHJlc291cmNlIHVzYWdlIHdoZW4gYWxsb2NhdGlvbiBmYWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcbi0tXG5ibG9jay9LY29uZmlnLTQxLVxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcbmJsb2NrL0tjb25maWctNDMtXHRib29sXG5ibG9jay9LY29uZmlnLTQ0LVxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xuYmxvY2svS2NvbmZpZy00Ni1cdGJvb2xcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE0NC1cbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG5ibG9jay9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE1My1cbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuYmxvY2svS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNjMtXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbmJsb2NrL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjA2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzOgoKKipBbmFseXppbmcgQmxvY2sgSU8gYW5kIENvbnRyb2wgR3JvdXBzKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGdvIGRvd24gYW55IGZ1cnRoZXIgcmFiYml0IGhvbGVzIGhlcmUsIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgY2xlYXIgcGljdHVyZSBvZiAqZXhhY3RseSogd2hhdCBgQkxLX0NHUk9VUGAgaXMuIEkgY2FuJiMzOTt0IHByb2NlZWQgd2l0aCBhbnkgaW4tZGVwdGggYW5hbHlzaXMgb3IgZGVidWdnaW5nIHdpdGhvdXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgYW5kIGludGVyYWN0aW9ucyBvZiB0aGF0IHNwZWNpZmljIGNvbXBvbmVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHNvbGlkIGdyb3VuZCwgYW5kIG5vdCB3b3JraW5nIG9mZiBvZiBhc3N1bXB0aW9ucy4gTGV0IG1lIHB1bGwgdXAgdGhhdCBkZWZpbml0aW9uLCBhbmQgZ2V0IGEgYmV0dGVyIG1lbnRhbCBtb2RlbCBlc3RhYmxpc2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTM5PWNvbmZpZyBCTEtfUlFfQUxMT0NfVElNRVxuLS1cbmJsb2NrL0tjb25maWctNDEtXG5ibG9jay9LY29uZmlnOjQyOmNvbmZpZyBCTEtfQ0dST1VQX1JXU1RBVFxuYmxvY2svS2NvbmZpZy00My1cdGJvb2xcbmJsb2NrL0tjb25maWctNDQtXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXG5ibG9jay9LY29uZmlnLTQ2LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXG4tLVxuYmxvY2svS2NvbmZpZy0xMzMtXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcbmJsb2NrL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTQ0LVxuYmxvY2svS2NvbmZpZzoxNDU6Y29uZmlnIEJMS19DR1JPVVBfRkNfQVBQSURcbmJsb2NrL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCB0byB0cmFjayBGQyBJL08gVHJhZmZpYyBhY3Jvc3MgY2dyb3VwIGFwcGxpY2F0aW9uc1wmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTUzLVxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXG5ibG9jay9LY29uZmlnLTE1NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE2My1cbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xuYmxvY2svS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0O0Nncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1wmIzM0O1xuLS1cbmluaXQvS2NvbmZpZz0xMDg1PWNvbmZpZyBNRU1DR19WMVxuLS1cbmluaXQvS2NvbmZpZy0xMTAxLVxuaW5pdC9LY29uZmlnOjExMDI6Y29uZmlnIEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTAzLVx0Ym9vbCBcJiMzNDtJTyBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJsb2NrIEkvTyBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHRoZSBgQkxLX0NHUk9VUGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIGFzIGV4cGVjdGVkLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIHdpdGhpbiBgYmxvY2svYmxrLWNncm91cC5jYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLgoKUmlnaHQgb2ZmIHRoZSBiYXQsIGBibGtnX2NyZWF0ZWAgaXMgbW9kaWZpZWQuIEFuZCBJIHNlZSBhIG5ldyBmdW5jdGlvbiBgYmxrZ19mcmVlX3BkYCBoYXMgYmVlbiBhZGRlZCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGlzIHBhdGNoIGlzIGFib3V0IG1hbmFnaW5nIHBlci1kZXZpY2UgZGF0YSBhc3NvY2lhdGVkIHdpdGggYmxvY2sgY2dyb3Vwcy4gQWxzbywgYGJsa2dfZnJlZV93b3JrZm5gIGlzIG1vZGlmaWVkIHdoaWNoIGNvdWxkIG1lYW4gYSBjaGFuZ2UgaW4gcmVzb3VyY2UgY2xlYW51cC4KCkludGVyZXN0aW5nLiBJIG5vdGljZSBjYWxscyB0byBgYmxrZ19jcmVhdGVgIHdpdGhpbiBgYmxrZ19sb29rdXBfY3JlYXRlYCwgYGJsa2dfY29uZl9wcmVwYCwgYW5kIGBibGtjZ19pbml0X2Rpc2tgLiBDbGVhcmx5LCBgYmxrZ19jcmVhdGVgIGlzIHBpdm90YWwuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgdGhlc2UgYmxvY2sgZ3JvdXAgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjcmVhdGVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgdG8gYGJsa2dfY3JlYXRlYCB0byBmdWxseSBnZXQgYSBncmFzcCBvZiB0aGlzIHBhdGNoJiMzOTtzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jPTMwOD1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2FsbG9jKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0zNzgtICovXG5ibG9jay9ibGstY2dyb3VwLmM6Mzc5OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLWNncm91cC5jLTM4MC1cdFx0XHRcdCAgICBzdHJ1Y3QgYmxrY2dfZ3EgKm5ld19ibGtnKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODAtICpcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0ODE6ICogUmV0dXJucyB0aGUgYmxrZyBvciB0aGUgY2xvc2VzdCBibGtnIGlmIGJsa2dfY3JlYXRlKCkgZmFpbHMgYXMgaXQgd2Fsa3NcbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODItICogZG93biBmcm9tIHJvb3QuXG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTQ4ND1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2xvb2t1cF9jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZyxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtNTA4LVx0ICogbm9uLXJvb3QgYmxrZ3MgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgcGFyZW50cy4gIFJldHVybnMgdGhlIGNsb3Nlc3RcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1MDk6XHQgKiBibGtnIHRvIHRoZSBpbnRlbmRlZCBibGtnIHNob3VsZCBibGtnX2NyZWF0ZSgpIGZhaWwuXG5ibG9jay9ibGstY2dyb3VwLmMtNTEwLVx0ICovXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTUyNi1cbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mjc6XHRcdGJsa2cgPSBibGtnX2NyZWF0ZShwb3MsIGRpc2ssIE5VTEwpO1xuYmxvY2svYmxrLWNncm91cC5jLTUyOC1cdFx0aWYgKElTX0VSUihibGtnKSkge1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz04ODI9aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtOTUyLVx0XHR9IGVsc2Uge1xuYmxvY2svYmxrLWNncm91cC5jOjk1MzpcdFx0XHRibGtnID0gYmxrZ19jcmVhdGUocG9zLCBkaXNrLCBuZXdfYmxrZyk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTU0LVx0XHRcdGlmIChJU19FUlIoYmxrZykpIHtcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MTUxNj1pbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTI4LVx0ICogdGhlIG9sZCBvbmUgaXMgc3RpbGwgYWxpdmUsIGFuZCByYWRpeF90cmVlX2luc2VydCgpIGluXG5ibG9jay9ibGstY2dyb3VwLmM6MTUyOTpcdCAqIGJsa2dfY3JlYXRlKCkgd2lsbCBmYWlsIHdpdGggLUVFWElTVCBiZWNhdXNlIHRoZSBvbGQgZW50cmllc1xuYmxvY2svYmxrLWNncm91cC5jLTE1MzAtXHQgKiBzdGlsbCBvY2N1cHkgdGhlIHNhbWUgcXVldWUgaWQgc2xvdCBpbiBibGtjZy1cdTAwM2VibGtnX3RyZWUuXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE1NDItXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG5ibG9jay9ibGstY2dyb3VwLmM6MTU0MzpcdGJsa2cgPSBibGtnX2NyZWF0ZShcdTAwMjZibGtjZ19yb290LCBkaXNrLCBuZXdfYmxrZyk7XG5ibG9jay9ibGstY2dyb3VwLmMtMTU0NC1cdGlmIChJU19FUlIoYmxrZykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzOTIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgSU8gQ2dyb3VwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBibG9jayBJL08gY2dyb3VwIHBvbGljaWVzIGFyZSBjb25maWd1cmVkIGFuZCBJJiMzOTt2ZSBnb3QgYSBmZXcgc3Ryb25nIGNvbnRlbmRlcnMgZm9yIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gVGhlIGZ1bmN0aW9uIGBibGtnX2NvbmZfcHJlcGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0JiMzOTtzIGRpcmVjdGx5IHRpZWQgdG8gY29uZmlndXJpbmcgYmxrY2cgcG9saWNpZXMsIHBhcnRpY3VsYXJseSB0aHJvdWdoIGNncm91cGZzLiBUaGF0IGZlZWxzIHJpZ2h0LgoKVGhlbiwgdGhlcmUmIzM5O3MgYGJsa2NnX2luaXRfZGlza2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBkdXJpbmcgZGlzayBpbml0aWFsaXphdGlvbi4gVGhhdCBzZWVtcyByZWxldmFudCwgYnV0IGxpa2VseSBtb3JlIG9uIHRoZSBpbml0aWFsIHNldHVwIHNpZGUsIHJhdGhlciB0aGFuIHRoZSBjb25maWd1cmF0aW9uLiBXZSBhbHNvIGhhdmUgYGJsa2dfbG9va3VwX2NyZWF0ZWAsIHdoaWNoIGhhbmRsZXMgbG9va2luZyB1cCBvciBjcmVhdGluZyBhIGBibGtnYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgcHJvYmFibHkgaW52b2x2ZWQsIGFzIGl0IHNldHMgdXAgdGhlIGJsa2csIGJ1dCBtaWdodCBub3QgYmUgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludC4KCk15IGd1dCBmZWVsaW5nLCB0aG91Z2gsIGlzIHRoYXQgYGJsa2dfY29uZl9wcmVwYCBpcyB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlIGZvciBpbi1kZXB0aCBwb2xpY3kgd29yay4gU28sIGxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gaXRzIGNhbGxlcnMgYW5kIHNlZSB3aGVyZSB0aGlzIHJhYmJpdCBob2xlIGxlYWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JmcS1jZ3JvdXAuYz0xMDQyPXN0YXRpYyBzc2l6ZV90IGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTEwNTMtXG5ibG9jay9iZnEtY2dyb3VwLmM6MTA1NDpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfYmZxLCBcdTAwMjZjdHgpO1xuYmxvY2svYmZxLWNncm91cC5jLTEwNTUtXHRpZiAocmV0KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz03Njc9RVhQT1JUX1NZTUJPTF9HUEwoX19ibGtnX3ByZmlsbF91NjQpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy03NzUtICogT25jZSBpbml0aWFsaXplZCwgQGN0eCBjYW4gYmUgdXNlZCB3aXRoIGJsa2dfY29uZl9vcGVuX2JkZXYoKSBhbmRcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3NzY6ICogYmxrZ19jb25mX3ByZXAoKSwgYW5kIG11c3QgYmUgY2xlYW5lZCB1cCB3aXRoIGJsa2dfY29uZl9leGl0KCkuXG5ibG9jay9ibGstY2dyb3VwLmMtNzc3LSAqL1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz03ODI9RVhQT1JUX1NZTUJPTF9HUEwoYmxrZ19jb25mX2luaXQpO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy03OTItICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIEBjdHggYW5kIHRoZSBleHRyYSBjYWxscyBiZWNvbWVcbmJsb2NrL2Jsay1jZ3JvdXAuYzo3OTM6ICogTk9PUHMuIGJsa2dfY29uZl9wcmVwKCkgaW1wbGljaXRseSBjYWxscyB0aGlzIGZ1bmN0aW9uLiBVc2UgdGhpcyBmdW5jdGlvblxuYmxvY2svYmxrLWNncm91cC5jLTc5NC0gKiBleHBsaWNpdGx5IGlmIGJkZXYgYWNjZXNzIGlzIG5lZWRlZCB3aXRob3V0IHJlc29sdmluZyB0aGUgYmxrY2cgLyBwb2xpY3kgcGFydFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz04NDI9dW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgYmxrZ19jb25mX29wZW5fYmRldl9mcm96ZW4oc3RydWN0IGJsa2dfY29uZl9jdHggKmN0eClcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtODY3LS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjg2ODogKiBibGtnX2NvbmZfcHJlcCAtIHBhcnNlIGFuZCBwcmVwYXJlIGZvciBwZXItYmxrZyBjb25maWcgdXBkYXRlXG5ibG9jay9ibGstY2dyb3VwLmMtODY5LSAqIEBibGtjZzogdGFyZ2V0IGJsb2NrIGNncm91cFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy04ODEtICovXG5ibG9jay9ibGstY2dyb3VwLmM6ODgyOmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXG5ibG9jay9ibGstY2dyb3VwLmMtODgzLVx0XHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy05ODctfVxuYmxvY2svYmxrLWNncm91cC5jOjk4ODpFWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfcHJlcCk7XG5ibG9jay9ibGstY2dyb3VwLmMtOTg5LVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjI9dW5zaWduZWQgbG9uZyBibGtnX2NvbmZfb3Blbl9iZGV2X2Zyb3plbihzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KTtcbmJsb2NrL2Jsay1jZ3JvdXAuaDoyMjM6aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcbmJsb2NrL2Jsay1jZ3JvdXAuaC0yMjQtXHRcdCAgIHN0cnVjdCBibGtnX2NvbmZfY3R4ICpjdHgpO1xuLS1cbmJsb2NrL2Jsay1pb2Nvc3QuYz0zMTA0PXN0YXRpYyBzc2l6ZV90IGlvY193ZWlnaHRfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxuYmxvY2svYmxrLWlvY29zdC5jLTMxNDItXG5ibG9jay9ibGstaW9jb3N0LmM6MzE0MzpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9jb3N0LCBcdTAwMjZjdHgpO1xuYmxvY2svYmxrLWlvY29zdC5jLTMxNDQtXHRpZiAocmV0KVxuLS1cbmJsb2NrL2Jsay1pb2xhdGVuY3kuYz04Mjc9c3RhdGljIHNzaXplX3QgaW9sYXRlbmN5X3NldF9saW1pdChzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODU0LVxuYmxvY2svYmxrLWlvbGF0ZW5jeS5jOjg1NTpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfaW9sYXRlbmN5LCBcdTAwMjZjdHgpO1xuYmxvY2svYmxrLWlvbGF0ZW5jeS5jLTg1Ni1cdGlmIChyZXQpXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmM9MTM0Mz1zdGF0aWMgc3NpemVfdCB0Z19zZXRfY29uZihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxuYmxvY2svYmxrLXRocm90dGxlLmMtMTM2My1cbmJsb2NrL2Jsay10aHJvdHRsZS5jOjEzNjQ6XHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXHUwMDI2YmxrY2dfcG9saWN5X3Rocm90bCwgXHUwMDI2Y3R4KTtcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNjUtXHRpZiAocmV0KVxuLS1cbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE1Mjc9c3RhdGljIHNzaXplX3QgdGdfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5ibG9jay9ibGstdGhyb3R0bGUuYy0xNTQ3LVxuYmxvY2svYmxrLXRocm90dGxlLmM6MTU0ODpcdHJldCA9IGJsa2dfY29uZl9wcmVwKGJsa2NnLCBcdTAwMjZibGtjZ19wb2xpY3lfdGhyb3RsLCBcdTAwMjZjdHgpO1xuYmxvY2svYmxrLXRocm90dGxlLmMtMTU0OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxvY2sgQ2dyb3VwIEJ1ZyBhbmQgaXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyBpdHMgZXhlY3V0aW9uLiBJdCBzZWVtcyBgYmxrZ19jb25mX3ByZXBgIGlzIGEgY2VudHJhbCBmdW5jdGlvbiBoZXJlLCBjYWxsZWQgZnJvbSBxdWl0ZSBhIGZldyBkaWZmZXJlbnQgY2dyb3VwIGZpbGUgd3JpdGUgaGFuZGxlcnMuIEkgY2FuIHNlZSBpdCYjMzk7cyBsaW5rZWQgdG8gYGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodGAsIGBpb2Nfd2VpZ2h0X3dyaXRlYCwgYGlvbGF0ZW5jeV9zZXRfbGltaXRgLCBgdGdfc2V0X2NvbmZgLCBhbmQgYHRnX3NldF9saW1pdGAg4oCTIGJhc2ljYWxseSwgc2V0dGluZ3MgcmVsYXRlZCB0byBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBhcHBlYXJzIHRvIGJlIHRoYXQgYGJsa2dfY3JlYXRlYCBpc24mIzM5O3QgYWx3YXlzIGluaXRpYWxpemluZyBwcm9wZXJseS4gSXQgY2FuIGZhaWwgdG8gZnVsbHkgbGluaywgbWVhbmluZyBpdHMgYHBkW11gIGRhdGEgc3RydWN0dXJlLCB3aGljaCBJIGFzc3VtZSBob2xkcyBwZXItZGV2aWNlIGluZm9ybWF0aW9uLCBiZWNvbWVzIGludmlzaWJsZSB0byBgYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKWAuIFRoaXMgaXMgYSBwcmV0dHkgY3JpdGljYWwgZmxhdywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgYWNjb3VudGluZyBvciByZXNvdXJjZSBsZWFrcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGVzZSBmYWlsdXJlIG1vZGVzIGluIGBibGtnX2NyZWF0ZWAsIHdoaWNoIGNvdWxkIGhhcHBlbiBpZiB0aGVyZSYjMzk7cyBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIGEgYHJhZGl4X3RyZWVfaW5zZXJ0YCBmYWlsdXJlLCBvciBhIGBiZGlfZ2V0YCBmYWlsdXJlLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGJsb2NrIGNncm91cCBlcnJvciBoYW5kbGluZy4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBhbnkgZmFpbHVyZSBzdGF0ZXMgYXJlIGNvcnJlY3RseSBoYW5kbGVkLgoKUmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBzZXZlcmFsIG9wdGlvbnMgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCwgbGlrZSBgQkxLX0NHUk9VUGAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPUFJJT2AsIGBJT1NDSEVEX0JGUWAsIGBCRlFfQ0dST1VQX0RFQlVHYCwgYEJMS19DR1JPVVBfUldTVEFUYCwgYW5kIGBCTEtfQ0dST1VQX1BVTlRfQklPYC4gTGV0JiMzOTtzIHBheSBleHRyYSBhdHRlbnRpb24gdG8gYElPU0NIRURfQkZRYCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYCBzaW5jZSB0aGV5JiMzOTtyZSBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIHJlbGF0aW9uIHRvIGBibGtnX2NvbmZfcHJlcGAuIFRoaXMgc2VlbXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkZRX0dST1VQX0lPU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkPTE5PWNvbmZpZyBJT1NDSEVEX0JGUVxuLS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZC0yOS1cbmJsb2NrL0tjb25maWcuaW9zY2hlZDozMDpjb25maWcgQkZRX0dST1VQX0lPU0NIRURcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMS0gICAgICAgYm9vbCBcJiMzNDtCRlEgaGllcmFyY2hpY2FsIHNjaGVkdWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzgxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBJL08gTGF0ZW5jeSBNZXRyaWNzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYmxvY2sgSS9PIGxhdGVuY3kgbWV0cmljcy4gSSB3YW50IHRvIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCB3aGljaCBJIGtub3cgY2FuIGdpdmUgbWUgYSBncmFudWxhciB2aWV3IGludG8gdGhlIGxhdGVuY3kgZXhwZXJpZW5jZWQgYnkgaW5kaXZpZHVhbCBjZ3JvdXBzLiBJJiMzOTttIGFsc28gdGhpbmtpbmcgdGhpcyBpcyBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gY2hlY2sgb3RoZXIgcmVsYXRlZCBibG9jayBkZXZpY2Ugc3RhdGlzdGljcyBhcyB3ZWxsLCBwcm9iYWJseSBmb2N1c2luZyBvbiBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBwcm92aWRlIGNvcnJvYm9yYXRpbmcgZXZpZGVuY2UuIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhdCBhIHZlcnkgbG93IGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0NHUk9VUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcbi0tXG5ibG9jay9LY29uZmlnLTQxLVxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcbmJsb2NrL0tjb25maWctNDMtXHRib29sXG5ibG9jay9LY29uZmlnLTQ0LVxuYmxvY2svS2NvbmZpZzo0NTpjb25maWcgQkxLX0NHUk9VUF9QVU5UX0JJT1xuYmxvY2svS2NvbmZpZy00Ni1cdGJvb2xcbi0tXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxuLS1cbmJsb2NrL0tjb25maWctMTMzLVxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXG5ibG9jay9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE0NC1cbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXG5ibG9jay9LY29uZmlnLTE0Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnLTE1My1cbmJsb2NrL0tjb25maWc6MTU0OmNvbmZpZyBCTEtfQ0dST1VQX0lPQ09TVFxuYmxvY2svS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBjb3N0IG1vZGVsIGJhc2VkIGNncm91cCBJTyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNjMtXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cbmJsb2NrL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBCbG9jayBEZXZpY2UgVGhyb3R0bGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGBCTEtfREVWX1RIUk9UVExJTkdgLiBXaGF0JiMzOTtzIHRoZSBjdXJyZW50IHN0YXR1cywgYW5kIHdoZXJlIGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIG9wdGltaXplIGZvciBwZXJmb3JtYW5jZSBhbmQgcHJldmVudCBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaGlzIGludm9sdmVzIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhbmQgc2VlaW5nIGhvdyBJIGNhbiBtb25pdG9yIHRoZSBibG9jayBkZXZpY2UgdGhyb3R0bGluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCB0cmFkZS1vZmZzIHRoYXQgaGF2ZSB0byBiZSBtYWRlIHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IGFuZCBibG9jayBkZXZpY2VzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBjYXVzaW5nIHVubmVjZXNzYXJ5IGJsb2NrIGRldmljZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz05Nz1jb25maWcgQkxLX0RFVl9aT05FRFxuLS1cbmJsb2NrL0tjb25maWctMTA1LVxuYmxvY2svS2NvbmZpZzoxMDY6Y29uZmlnIEJMS19ERVZfVEhST1RUTElOR1xuYmxvY2svS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgYmxvY2sgSS9PIGNncm91cCBjb25maWd1cmF0aW9uczogYEJMS19DR1JPVVBgLCBgQkxLX0RFVl9USFJPVFRMSU5HYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYElPU0NIRURfQkZRYCwgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAuIE5vdywgbGV0JiMzOTtzIHJldmlzaXQgdGhlIGNhbGxlcnMgb2YgYGJsa2dfY3JlYXRlYC4gSSByZW1lbWJlciB0aGF0IHdhcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBSaWdodCwgdGhlIGtleSBjYWxsZXJzIGFyZSBgYmxrZ19jb25mX3ByZXBgLCBgYmxrY2dfaW5pdF9kaXNrYCwgYW5kIGBibGtnX2xvb2t1cF9jcmVhdGVgLgoKTGV0IG1lIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGJsa2dfY3JlYXRlYCwgYGJsa2dfY29uZl9wcmVwYCwgYGJsa2NnX2luaXRfZGlza2AsIGBibGtnX2xvb2t1cF9jcmVhdGVgLCBhbmQgYGJsa2dfZnJlZV93b3JrZm5gLiBIb2xkIG9uLCBpcyBgYmxrZ19jcmVhdGVgIHN0YXRpYz8gWWVzLCBpdCBpcy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBmb2N1cyBvdXIgYXR0ZW50aW9uIG9uICBgYmxrZ19jb25mX3ByZXBgLCBgYmxrY2dfaW5pdF9kaXNrYCwgYGJsa2dfbG9va3VwX2NyZWF0ZWAsIGFuZCBgYmxrZ19mcmVlX3dvcmtmbmAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LgoKV2FpdCBhIHNlY29uZCwgd2FzbiYjMzk7dCBgYmxrZ19sb29rdXBfY3JlYXRlYCBhbHNvIGRlY2xhcmVkIHN0YXRpYz8gT2theSwgbG9va3MgbGlrZSBpdCBpcy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgYmxrZ19sb29rdXBfY3JlYXRlYC4gR290dGEgYmUgdGhvcm91Z2ggaGVyZSBhbmQgbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrZ19sb29rdXBfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jZ3JvdXAuYz0zNzk9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTQ3MS0vKipcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0NzI6ICogYmxrZ19sb29rdXBfY3JlYXRlIC0gbG9va3VwIGJsa2csIHRyeSB0byBjcmVhdGUgb25lIGlmIG5vdCB0aGVyZVxuYmxvY2svYmxrLWNncm91cC5jLTQ3My0gKiBAYmxrY2c6IGJsa2NnIG9mIGludGVyZXN0XG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTQ4My0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzo0ODQ6c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19sb29rdXBfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csXG5ibG9jay9ibGstY2dyb3VwLmMtNDg1LVx0XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MjEyND1zdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjZ19ncSAqYmxrZ190cnlnZXRfY2xvc2VzdChzdHJ1Y3QgYmlvICpiaW8sXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxMjktXHRyY3VfcmVhZF9sb2NrKCk7XG5ibG9jay9ibGstY2dyb3VwLmM6MjEzMDpcdGJsa2cgPSBibGtnX2xvb2t1cF9jcmVhdGUoY3NzX3RvX2Jsa2NnKGNzcyksIGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2spO1xuYmxvY2svYmxrLWNncm91cC5jLTIxMzEtXHR3aGlsZSAoYmxrZykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBibGtnX3RyeWdldF9jbG9zZXN0YCBMb2NhdGlvbioqCgpIbW0sIHNvIGBibGtnX3RyeWdldF9jbG9zZXN0YC4uLiBJIHdhcyBmYWlybHkgY2VydGFpbiB0aGF0IHdhcyBkZWNsYXJlZCBgc3RhdGljIGlubGluZWAuIEl0JiMzOTtzIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuIGZvciB0aG9zZSBraW5kcyBvZiBoZWxwZXIgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY2dyb3VwIGJsb2NrIGRldmljZSBhY2NvdW50aW5nLCBrZWVwaW5nIHRoZW0gY2xvc2UgdG8gd2hlcmUgdGhleSYjMzk7cmUgdXNlZC4gQnV0LCB3YWl0LCB0aGF0IGRvZXNuJiMzOTt0IHF1aXRlIHNlZW0gcmlnaHQuIEkgdGhvdWdodCBJIHNhdyBpdCBpbiBgYmxvY2svYmxrLWNncm91cC5jYD8gT2theSwgd2FpdCwgKmlzKiBpdCBpbiBgYmxvY2svYmxrLWNncm91cC5jYD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uLiBKdXN0IG5lZWQgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNyZW1lbWJlcmluZyBvciBjb25mbGF0aW5nIGl0IHdpdGggc29tZXRoaW5nIGVsc2UsIG90aGVyd2lzZSwgSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgYWNjdXJhdGUuIFJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTtsbCBqdXN0IGNvbmZpcm0gd2hlcmUgdGhhdCBjb2RlIGxpdmVzIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa2dfdHJ5Z2V0X2Nsb3Nlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jPTIxMDc9dm9pZCBibGtjZ19hZGRfZGVsYXkoc3RydWN0IGJsa2NnX2dxICpibGtnLCB1NjQgbm93LCB1NjQgZGVsdGEpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxMTUtLyoqXG5ibG9jay9ibGstY2dyb3VwLmM6MjExNjogKiBibGtnX3RyeWdldF9jbG9zZXN0IC0gdHJ5IGFuZCBnZXQgYSBibGtnIHJlZiBvbiB0aGUgY2xvc2V0IGJsa2dcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTE3LSAqIEBiaW86IHRhcmdldCBiaW9cbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMjEyMy0gKi9cbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTI0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpibGtnX3RyeWdldF9jbG9zZXN0KHN0cnVjdCBiaW8gKmJpbyxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTI1LVx0XHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYz0yMTU3PXZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5ibG9jay9ibGstY2dyb3VwLmMtMjE2My1cdGlmIChjc3MgXHUwMDI2XHUwMDI2IGNzcy1cdTAwM2VwYXJlbnQpIHtcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTY0Olx0XHRiaW8tXHUwMDNlYmlfYmxrZyA9IGJsa2dfdHJ5Z2V0X2Nsb3Nlc3QoYmlvLCBjc3MpO1xuYmxvY2svYmxrLWNncm91cC5jLTIxNjUtXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzc2AgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzc2Agc2VlbXMgdG8gYmUgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgaW5pdGlhdGluZyB0aGUgcHJvY2VzcywgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYGJsa2dfdHJ5Z2V0X2Nsb3Nlc3RgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIGBibGtnX3RyeWdldF9jbG9zZXN0YCBoYXMgYWx3YXlzIGJlZW4gYSBwb2ludCBvZiBwb3RlbnRpYWwgb3B0aW1pemF0aW9uLiBUbyB1bmRlcnN0YW5kIHRoZSB3aG9sZSBpbnRlcmFjdGlvbiwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgcmVsYXRlcyB0byB0aGUgcmVzdCBvZiB0aGUgZnJhbWV3b3JrLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzYC4gVGhhdCB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRoYXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byBmaWd1cmUgb3V0IGlmIHRoaXMgbWlnaHQgYmUgYW4gYXJlYSBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb3IsIHBlcmhhcHMsIGEgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWNncm91cC5jPTU5OT1zdHJ1Y3QgYmZxX2dyb3VwICpiZnFfYmlvX2JmcWcoc3RydWN0IGJmcV9kYXRhICpiZnFkLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTYxMC1cdFx0aWYgKGJmcWctXHUwMDNlcGQub25saW5lKSB7XG5ibG9jay9iZnEtY2dyb3VwLmM6NjExOlx0XHRcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhiaW8sIFx1MDAyNmJsa2ctXHUwMDNlYmxrY2ctXHUwMDNlY3NzKTtcbmJsb2NrL2JmcS1jZ3JvdXAuYy02MTItXHRcdFx0cmV0dXJuIGJmcWc7XG4tLVxuYmxvY2svYmZxLWNncm91cC5jLTYxNS1cdH1cbmJsb2NrL2JmcS1jZ3JvdXAuYzo2MTY6XHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MoYmlvLFxuYmxvY2svYmZxLWNncm91cC5jLTYxNy1cdFx0XHRcdFx1MDAyNmJmcWdfdG9fYmxrZyhiZnFkLVx1MDAzZXJvb3RfZ3JvdXApLVx1MDAzZWJsa2NnLVx1MDAzZWNzcyk7XG4tLVxuYmxvY2svYmxrLWNncm91cC5jPTIxMjQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfdHJ5Z2V0X2Nsb3Nlc3Qoc3RydWN0IGJpbyAqYmlvLFxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTQzLS8qKlxuYmxvY2svYmxrLWNncm91cC5jOjIxNDQ6ICogYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzIC0gYXNzb2NpYXRlIGEgYmlvIHdpdGggYSBzcGVjaWZpZWQgY3NzXG5ibG9jay9ibGstY2dyb3VwLmMtMjE0NS0gKiBAYmlvOiB0YXJnZXQgYmlvXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxNTYtICovXG5ibG9jay9ibGstY2dyb3VwLmM6MjE1Nzp2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhzdHJ1Y3QgYmlvICpiaW8sXG5ibG9jay9ibGstY2dyb3VwLmMtMjE1OC1cdFx0XHRcdCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTY5LX1cbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTcwOkVYUE9SVF9TWU1CT0xfR1BMKGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzcyk7XG5ibG9jay9ibGstY2dyb3VwLmMtMjE3MS1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MjE4MT12b2lkIGJpb19hc3NvY2lhdGVfYmxrZyhzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTIxOTQtXG5ibG9jay9ibGstY2dyb3VwLmM6MjE5NTpcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhiaW8sIGNzcyk7XG5ibG9jay9ibGstY2dyb3VwLmMtMjE5Ni1cbi0tXG5ibG9jay9ibGstY2dyb3VwLmM9MjIwNj12b2lkIGJpb19jbG9uZV9ibGtnX2Fzc29jaWF0aW9uKHN0cnVjdCBiaW8gKmRzdCwgc3RydWN0IGJpbyAqc3JjKVxuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMjA4LVx0aWYgKHNyYy1cdTAwM2ViaV9ibGtnKVxuYmxvY2svYmxrLWNncm91cC5jOjIyMDk6XHRcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzcyhkc3QsIGJpb19ibGtjZ19jc3Moc3JjKSk7XG5ibG9jay9ibGstY2dyb3VwLmMtMjIxMC19XG4tLVxuaW5jbHVkZS9saW51eC9iaW8uaD01MDQ9dm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2coc3RydWN0IGJpbyAqYmlvKTtcbmluY2x1ZGUvbGludXgvYmlvLmg6NTA1OnZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKHN0cnVjdCBiaW8gKmJpbyxcbmluY2x1ZGUvbGludXgvYmlvLmgtNTA2LVx0XHRcdFx0IHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpO1xuLS1cbmluY2x1ZGUvbGludXgvYmlvLmg9NTEwPXN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2coc3RydWN0IGJpbyAqYmlvKSB7IH1cbmluY2x1ZGUvbGludXgvYmlvLmg6NTExOnN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3Moc3RydWN0IGJpbyAqYmlvLFxuaW5jbHVkZS9saW51eC9iaW8uaC01MTItXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmluY2x1ZGUvbGludXgvd3JpdGViYWNrLmg9MjU2PXN0YXRpYyBpbmxpbmUgdm9pZCB3YmNfaW5pdF9iaW8oc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTI2NC1cdGlmICh3YmMtXHUwMDNld2IpXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oOjI2NTpcdFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgd2JjLVx1MDAzZXdiLVx1MDAzZWJsa2NnX2Nzcyk7XG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTI2Ni19XG4tLVxubW0vcGFnZV9pby5jPTMwOT1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9wYWdlX2lvLmMtMzE5LVx0Y3NzID0gY2dyb3VwX2VfY3NzKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXAsIFx1MDAyNmlvX2NncnBfc3Vic3lzKTtcbm1tL3BhZ2VfaW8uYzozMjA6XHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MoYmlvLCBjc3MpO1xubW0vcGFnZV9pby5jLTMyMS1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBibGtnX2NyZWF0ZWAgQ2FsbCBQYXRoKioKCk9rYXksIHNvIGBiaW9fYXNzb2NpYXRlX2Jsa2dgIGlzIGEgY2VudHJhbCBmdW5jdGlvbiwgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYWxsIG92ZXIgdGhlIHBsYWNlLiBUaGF0IG1lYW5zIGBibGtnX2NyZWF0ZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBpdCwgc3BlY2lmaWNhbGx5IHdoZW4gYSBiaW8gaXMgaW5pdGlhbGl6ZWQuIEkgYWxyZWFkeSBrbmV3IHRoaXMsIGJ1dCBpdCYjMzk7cyBnb29kIHRvIGNvbmZpcm0gdGhlIGhpZ2ggdHJhZmZpYyBoZXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCwgaG90IGNvZGUgcGF0aCwgbm8gcXVlc3Rpb24gYWJvdXQgaXQuCgpJJiMzOTttIHRoaW5raW5nLCBpbnN0ZWFkIG9mIHBva2luZyBhcm91bmQgaW4gYGJpb19hc3NvY2lhdGVfYmxrZ2AgZGlyZWN0bHkgd2hpY2ggaXMgdG9vIGJyb2FkLCBJJiMzOTtsbCB0YWtlIGEgbW9yZSB0YXJnZXRlZCBhcHByb2FjaC4gSSYjMzk7bGwgZm9jdXMgb24gYGJsa2dfY29uZl9wcmVwYCBhbmQgYGJsa2NnX2luaXRfZGlza2AgYXMgdGhleSYjMzk7cmUgbW9yZSBjb250cm9sbGFibGUgdHJpZ2dlcnMgdGhhdCBsZWFkIHRvIGBibGtnX2NyZWF0ZWAuIExldCYjMzk7cyBmb2N1cyBvbiBpbnZlc3RpZ2F0aW5nIHRoZSBjYWxsZXJzIG9mIGBibGtjZ19pbml0X2Rpc2tgLiBUaGlzIGZlZWxzIGxpa2UgYSBzbWFydCBwbGFjZSB0byBzdGFydCB0aGUgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbiBlZmZvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtjZ19pbml0X2Rpc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNncm91cC5jPTE1MTA9dm9pZCBibGtnX2luaXRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuYmxvY2svYmxrLWNncm91cC5jLTE1MTUtXG5ibG9jay9ibGstY2dyb3VwLmM6MTUxNjppbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svYmxrLWNncm91cC5jLTE1MTcte1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD0xOTQ9dm9pZCBibGtnX2luaXRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpO1xuYmxvY2svYmxrLWNncm91cC5oOjE5NTppbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xOTYtdm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xuLS1cbmJsb2NrL2Jsay1jZ3JvdXAuaD00ODA9c3RhdGljIGlubGluZSB2b2lkIGJsa2dfaW5pdF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkgeyB9XG5ibG9jay9ibGstY2dyb3VwLmg6NDgxOnN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyByZXR1cm4gMDsgfVxuYmxvY2svYmxrLWNncm91cC5oLTQ4Mi1zdGF0aWMgaW5saW5lIHZvaWQgYmxrY2dfZXhpdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKSB7IH1cbi0tXG5ibG9jay9nZW5oZC5jPTE0NDY9c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcbi0tXG5ibG9jay9nZW5oZC5jLTE0NzQtXG5ibG9jay9nZW5oZC5jOjE0NzU6XHRpZiAoYmxrY2dfaW5pdF9kaXNrKGRpc2spKVxuYmxvY2svZ2VuaGQuYy0xNDc2LVx0XHRnb3RvIG91dF9lcmFzZV9wYXJ0MDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIEkvTyBDZ3JvdXAgUGF0Y2ggQ2FuZGlkYXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGJsb2NrIEkvTyBjZ3JvdXAgcGF0Y2guIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgbW9zdCBsaWtlbHkgdG91Y2hlZCBieSB0aGUgY2hhbmdlcywgYW5kIGlkZWFsbHksIHRob3NlICpsZWFzdCogbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gcGF0aC4gSSBzZWUgYGJsa2NnX2luaXRfZGlza2AgY2FsbGVkIGZyb20gYF9fYWxsb2NfZGlza19ub2RlYC4gU2VlbXMgcHJvbWlzaW5nLCBhcyBpdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIGRpc2sgYWxsb2NhdGlvbiwgYSBwb2ludCB0byBjb25zaWRlci4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYGJsa2dfY29uZl9wcmVwYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gY2dyb3VwIHdyaXRlIGhhbmRsZXJzLCBzbyBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgcmVsZXZhbnQuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkgYWxzbyBzZWUgYGJsa2dfZnJlZV93b3JrZm5gIGFzIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBjaGFuZ2VkLCBidXQgSSBzZWUgaXQgaXMgY2FsbGVkIGZyb20gYSB3b3JrcXVldWUsIHNvIGxldCYjMzk7cyBrZWVwIGl0IGluIG1pbmQgYnV0IGZvY3VzIG9uIHRoZSBvbmVzIEkgaGF2ZSBtYXJrZWQgYWJvdmUuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGJsa2dfY3JlYXRlYCBpbiBhbiBlcnJvciBwYXRoLCBhbmQgYWxzbyBgYmxrZ19mcmVlX3dvcmtmbmAuIEFscmlnaHQuIFNvLCBrZWVwaW5nIHRoYXQgaW4gbWluZCwgdGhlIGtleSBmb2N1cyBwb2ludHMgYmFzZWQgb24gdGhlIHBhdGNoIHNlZW0gdG8gYmUgYGJsa2dfY29uZl9wcmVwYCwgYGJsa2NnX2luaXRfZGlza2AsIGFuZCBhbHNvIGBiaW9fYXNzb2NpYXRlX2Jsa2dgLiBCdXQgd2FpdC4uLiB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBob3QgcGF0aHMsIGFuZCBgYmlvX2Fzc29jaWF0ZV9ibGtnYCAqc2NyZWFtcyogaG90IHBhdGguIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gc3RlZXIgY2xlYXIgb2YgdGhhdCBvbmUgZm9yIG5vdy4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0IGFuZCBjaGVjayBmb3IgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC4gQWhhLCBgYmxrZ19jcmVhdGVgLCBgYmxrZ19mcmVlX3dvcmtmbmAsIGFuZCBgYmxrZ19mcmVlX3BkYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCBuYXJyb3dzIGl0IGRvd24gZXZlbiBmdXJ0aGVyLiBTbywgYGJsa2dfY29uZl9wcmVwYCBhbmQgYGJsa2NnX2luaXRfZGlza2AgYXJlIHRoZSB0b3AgY29udGVuZGVycywgdGhlbi4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIHR3byBmaXJzdC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBjb25maWd1cmF0aW9ucyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBhY3RpdmF0ZWQgdG8gbWFrZSBhbGwgdGhpcyB3b3JrOgoKKiAgIGBCTEtfQ0dST1VQYAoqICAgYEJMS19ERVZfVEhST1RUTElOR2AKKiAgIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAKKiAgIGBCTEtfQ0dST1VQX0lPQ09TVGAKKiAgIGBJT1NDSEVEX0JGUWAKKiAgIGBCRlFfR1JPVVBfSU9TQ0hFRGAKCkp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlLWNoZWNrIGBibG9jay9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciB0aGUgY29uZmlndXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19DR1JPVVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4tLVxuYmxvY2svS2NvbmZpZy00MS1cbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXG5ibG9jay9LY29uZmlnLTQzLVx0Ym9vbFxuYmxvY2svS2NvbmZpZy00NC1cbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cbmJsb2NrL0tjb25maWctNDYtXHRib29sXG4tLVxuYmxvY2svS2NvbmZpZz0xMjc9Y29uZmlnIEJMS19XQlRfTVFcbi0tXG5ibG9jay9LY29uZmlnLTEzMy1cbmJsb2NrL0tjb25maWc6MTM0OmNvbmZpZyBCTEtfQ0dST1VQX0lPTEFURU5DWVxuYmxvY2svS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBsYXRlbmN5IGJhc2VkIGNncm91cCBJTyBwcm90ZWN0aW9uXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNDQtXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxuYmxvY2svS2NvbmZpZy0xNDYtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0xNTMtXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcbmJsb2NrL0tjb25maWctMTU1LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWctMTYzLVxuYmxvY2svS2NvbmZpZzoxNjQ6Y29uZmlnIEJMS19DR1JPVVBfSU9QUklPXG5ibG9jay9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7Q2dyb3VwIEkvTyBjb250cm9sbGVyIGZvciBhc3NpZ25pbmcgYW4gSS9PIHByaW9yaXR5IGNsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjAxCgkJCQkJCQlvdXRwdXQ6IDIyNgoJCQkJCQkJdGhvdWdodHM6IDU1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCbG9jayBDZ3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgcXVpY2sgcnVuZG93bi4gSXQgc2VlbXMgd2UgaGF2ZSBhIGNhbmRpZGF0ZSBmb3Igc29tZSBkZWNlbnQgZnV6emluZy4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBhIHdpZGVyIHNldCBvZiBwb3RlbnRpYWwgZmVhdHVyZXMgdG8gZW5hYmxlLCBpbmNsdWRpbmcgYEJMS19DR1JPVVBfRkNfQVBQSURgLCBidXQgdGhhdCBwcm9iYWJseSBpc24mIzM5O3QgdGhlIGJlc3QgdXNlIG9mIHJlc291cmNlcy4gTGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBtYWluIHBsYXllcnM6IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPUFJJT2AsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBibGtnX2NvbmZfcHJlcGAgaXMgZXhwb3J0ZWQgYW5kIHdlIGNhbiB1c2UgaXQsIGJ1dCBgYmxrY2dfaW5pdF9kaXNrYCBpcyBub3QgZXhwbGljaXRseSBleHBvcnRlZCwgYWx0aG91Z2ggaXQgKmlzKiBhIGdsb2JhbCBmdW5jdGlvbi4KClRoZSByZWFsIGtleSBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyB0aGUgZXJyb3IgcGF0aHMgd2l0aGluIGBibGtnX2NyZWF0ZWAuIFRoYXQgb3BlbnMgdXAgc29tZSBpbnRlcmVzdGluZyBhdHRhY2sgdmVjdG9ycywgbmFtZWx5IHRoZSBwb3RlbnRpYWwgZm9yIHRyaWdnZXJpbmcgZmFpbHVyZXMsIHdoaWNoIGlzIGV4Y2VsbGVudCBmdXp6aW5nIGZvZGRlci4gV2UgY291bGQgcG90ZW50aWFsbHkgaGl0IGFsbG9jYXRpb24gZmFpbHVyZXMgKGZhdWx0IGluamVjdGlvbiBpcyBvdXIgZnJpZW5kIGhlcmUpLCBvciBhbiBgRUVYSVNUYCBlcnJvciBpbiBgcmFkaXhfdHJlZV9pbnNlcnRgIGlmIHRoZXJlJiMzOTtzIGFuIGlzc3VlIHdpdGggYW4gb2xkIGVudHJ5IGhhbmdpbmcgYXJvdW5kLiBUaGVyZSYjMzk7cyBhbHNvIHRoZSBgYmRpX2dldGAgZmFpbHVyZSB0byBrZWVwIGluIG1pbmQuIEZhdWx0IGluamVjdGlvbiBmdXp6aW5nIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhlc2UgY29uZGl0aW9ucyBmYWlybHkgZWFzaWx5LCBtYWtpbmcgdGhpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdGhvcm91Z2ggdGVzdGluZy4KClRvIHJlY2FwLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgaWRlbnRpZmllZDoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCiogICAqKkZvY3VzIFN5bWJvbHM6KioKICAgICogICBgYmxrZ19jb25mX3ByZXBgCiAgICAqICAgYGJsa2NnX2luaXRfZGlza2AKICAgICogICBgYmxrZ19mcmVlX3dvcmtmbmAgKGltcG9ydGFudCBkdWUgdG8gdGhlIGFzeW5jaHJvbm91cyBmcmVlaW5nIGxvZ2ljKQoqICAgKipFbmFibGUgQ29uZmlnczoqKgogICAgKiAgIGBCTEtfQ0dST1VQYAogICAgKiAgIGBCTEtfREVWX1RIUk9UVExJTkdgCiAgICAqICAgYEJMS19DR1JPVVBfSU9MQVRFTkNZYAogICAgKiAgIGBCTEtfQ0dST1VQX0lPQ09TVGAKICAgICogICBgQkxLX0NHUk9VUF9JT1BSSU9gCiAgICAqICAgYElPU0NIRURfQkZRYAogICAgKiAgIGBCRlFfR1JPVVBfSU9TQ0hFRGAKClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBibG9jayBjZ3JvdXAgbG9naWMsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcy4gSXQgYWZmZWN0cyBgYmxrZ19jcmVhdGVgIGVycm9yIHBhdGhzIGFuZCB0aGUgc3luY2hyb25vdXMgZnJlZWluZyBvZiBwb2xpY3kgZGF0YSB3aGVuIGBibGtnX2NyZWF0ZWAgZmFpbHMsIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYGJsa2dfZnJlZV93b3JrZm5gLiBUaGUgZmFjdCB0aGF0IGl0IGlzIHJlYWNoZWQgdmlhIGNncm91cCBjb25maWd1cmF0aW9ucyBhbmQgZGlzayBpbml0aWFsaXphdGlvbiBhbmQgdGhhdCB0aGlzIGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfQ0dST1VQJiMzNDssCiAgICAmIzM0O0JMS19ERVZfVEhST1RUTElORyYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPTEFURU5DWSYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPQ09TVCYjMzQ7LAogICAgJiMzNDtCTEtfQ0dST1VQX0lPUFJJTyYjMzQ7LAogICAgJiMzNDtJT1NDSEVEX0JGUSYjMzQ7LAogICAgJiMzNDtCRlFfR1JPVVBfSU9TQ0hFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Jsa2dfY29uZl9wcmVwJiMzNDssCiAgICAmIzM0O2Jsa2NnX2luaXRfZGlzayYjMzQ7LAogICAgJiMzNDtibGtnX2ZyZWVfd29ya2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGJsa2dfY3JlYXRlIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYmxrZ19mcmVlX3dvcmtmbiB0byBzeW5jaHJvbm91c2x5IGZyZWUgcG9saWN5IGRhdGEgKHBkKSB3aGVuIGJsa2dfY3JlYXRlIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgY2dyb3VwIGxvZ2ljIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWsgd2hlbiBhIHBvbGljeSBpcyB1bnJlZ2lzdGVyZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNvbmZpZ3VyYXRpb24gd3JpdGVzIGFuZCBkaXNrIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19DR1JPVVAmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9USFJPVFRMSU5HJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9MQVRFTkNZJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9DT1NUJiMzNDssCiAgICAmIzM0O0JMS19DR1JPVVBfSU9QUklPJiMzNDssCiAgICAmIzM0O0lPU0NIRURfQkZRJiMzNDssCiAgICAmIzM0O0JGUV9HUk9VUF9JT1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmxrZ19jb25mX3ByZXAmIzM0OywKICAgICYjMzQ7YmxrY2dfaW5pdF9kaXNrJiMzNDssCiAgICAmIzM0O2Jsa2dfZnJlZV93b3JrZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYmxrZ19jcmVhdGUgYW5kIHRoZSBhc3luY2hyb25vdXMgZnJlZWluZyBsb2dpYyBpbiBibGtnX2ZyZWVfd29ya2ZuIHRvIHN5bmNocm9ub3VzbHkgZnJlZSBwb2xpY3kgZGF0YSAocGQpIHdoZW4gYmxrZ19jcmVhdGUgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBjZ3JvdXAgbG9naWMgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVhayB3aGVuIGEgcG9saWN5IGlzIHVucmVnaXN0ZXJlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY29uZmlndXJhdGlvbiB3cml0ZXMgYW5kIGRpc2sgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZywgZXNwZWNpYWxseSB3aXRoIGZhdWx0IGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjA4LjEyNTUxMDkwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNjQwODU1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19DR1JPVVBcIixcbiAgICBcIkJMS19ERVZfVEhST1RUTElOR1wiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0xBVEVOQ1lcIixcbiAgICBcIkJMS19DR1JPVVBfSU9DT1NUXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPUFJJT1wiLFxuICAgIFwiSU9TQ0hFRF9CRlFcIixcbiAgICBcIkJGUV9HUk9VUF9JT1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmxrZ19jb25mX3ByZXBcIixcbiAgICBcImJsa2NnX2luaXRfZGlza1wiLFxuICAgIFwiYmxrZ19mcmVlX3dvcmtmblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGJsa2dfY3JlYXRlIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYmxrZ19mcmVlX3dvcmtmbiB0byBzeW5jaHJvbm91c2x5IGZyZWUgcG9saWN5IGRhdGEgKHBkKSB3aGVuIGJsa2dfY3JlYXRlIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgY2dyb3VwIGxvZ2ljIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWsgd2hlbiBhIHBvbGljeSBpcyB1bnJlZ2lzdGVyZWQuIEl0IGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNvbmZpZ3VyYXRpb24gd3JpdGVzIGFuZCBkaXNrIGluaXRpYWxpemF0aW9uLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjA4LjEyNTUxOTAwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3MzgwNTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODA3MTk0ZmUyZmY2NzMzNjgxYmM4N2Q0NDY0NTAzYjQ5YmY1MDEyNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyMiAwNzo0MjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmNcXG5pbmRleCBiYzYzYmQyMjA4NjVkYy4uNjczODg2ZDcxYzI2NWQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXFxuKysrIGIvYmxvY2svYmxrLWNncm91cC5jXFxuQEAgLTExMSwxMiArMTExLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqYmxrY2dfY3NzKHZvaWQpXFxuIFxcdHJldHVybiB0YXNrX2NzcyhjdXJyZW50LCBpb19jZ3JwX2lkKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYmxrZ19mcmVlX3BkKHN0cnVjdCBibGtjZ19ncSAqYmxrZylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCTEtDR19NQVhfUE9MUzsgaSsrKSB7XFxuK1xcdFxcdGlmIChibGtnLVxcdTAwM2VwZFtpXSkge1xcbitcXHRcXHRcXHRibGtjZ19wb2xpY3lbaV0tXFx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cXHUwMDNlcGRbaV0pO1xcbitcXHRcXHRcXHRibGtnLVxcdTAwM2VwZFtpXSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibGtnX2ZyZWVfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2cgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJsa2NnX2dxLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGZyZWVfd29yayk7XFxuIFxcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmxrZy1cXHUwMDNlcTtcXG4tXFx0aW50IGk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBwZF9mcmVlX2ZuKCkgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKSxcXG5AQCAtMTI2LDkgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHQgKiBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLlxcbiBcXHQgKi9cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cS1cXHUwMDNlYmxrY2dfbXV0ZXgpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkrKylcXG4tXFx0XFx0aWYgKGJsa2ctXFx1MDAzZXBkW2ldKVxcbi1cXHRcXHRcXHRibGtjZ19wb2xpY3lbaV0tXFx1MDAzZXBkX2ZyZWVfZm4oYmxrZy1cXHUwMDNlcGRbaV0pO1xcbitcXHRibGtnX2ZyZWVfcGQoYmxrZyk7XFxuIFxcdGlmIChibGtnLVxcdTAwM2VwYXJlbnQpXFxuIFxcdFxcdGJsa2dfcHV0KGJsa2ctXFx1MDAzZXBhcmVudCk7XFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbkBAIC00MzgsMTUgKzQ0NywyNCBAQCBzdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2NyZWF0ZShzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdHJldHVybiBibGtnO1xcbiBcXG4tXFx0LyogQGJsa2cgZmFpbGVkIGZ1bGx5IGluaXRpYWxpemVkLCB1c2UgdGhlIHVzdWFsIHJlbGVhc2UgcGF0aCAqL1xcbi1cXHRibGtnX3B1dChibGtnKTtcXG4rXFx0LypcXG4rXFx0ICogQGJsa2cgZmFpbGVkIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBuZXZlciBsaW5rZWQsIHNvIGl0cyBwZFtdIGlzXFxuK1xcdCAqIGludmlzaWJsZSB0byBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLiBGcmVlIHBkW10gc3luY2hyb25vdXNseVxcbitcXHQgKiB3aGlsZSBibGtjZ19wb2xpY3lbXSBpcyBzdGlsbCB2YWxpZCwgb3RoZXJ3aXNlIHRoZSBhc3luYyBmcmVlIHBhdGhcXG4rXFx0ICogbWF5IGNhbGwgcGRfZnJlZV9mbigpIGFmdGVyIHRoZSBwb2xpY3kgaXMgdW5yZWdpc3RlcmVkIChlLmcuIHJtbW9kIGJmcSkuXFxuK1xcdCAqIFRoZSBlcnJfZnJlZV9ibGtnIHBhdGggYmVsb3cgZnJlZXMgcGRbXSBmb3IgdGhlIHNhbWUgcmVhc29uLlxcbitcXHQgKi9cXG4rXFx0YmxrZ19mcmVlX3BkKGJsa2cpO1xcbitcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNmJsa2ctXFx1MDAzZXJlZmNudCk7XFxuIFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIFxcbiBlcnJfcHV0X2NzczpcXG4gXFx0Y3NzX3B1dChcXHUwMDI2YmxrY2ctXFx1MDAzZWNzcyk7XFxuIGVycl9mcmVlX2Jsa2c6XFxuLVxcdGlmIChuZXdfYmxrZylcXG4rXFx0aWYgKG5ld19ibGtnKSB7XFxuK1xcdFxcdGJsa2dfZnJlZV9wZChuZXdfYmxrZyk7XFxuIFxcdFxcdGJsa2dfZnJlZShuZXdfYmxrZyk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MDguNjQzNTIyMDQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDEyMjgzMTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT1BSSU9cIixcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCRlFfR1JPVVBfSU9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa2dfY29uZl9wcmVwXCIsXG4gICAgXCJibGtjZ19pbml0X2Rpc2tcIixcbiAgICBcImJsa2dfZnJlZV93b3JrZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBibGtnX2NyZWF0ZSBhbmQgdGhlIGFzeW5jaHJvbm91cyBmcmVlaW5nIGxvZ2ljIGluIGJsa2dfZnJlZV93b3JrZm4gdG8gc3luY2hyb25vdXNseSBmcmVlIHBvbGljeSBkYXRhIChwZCkgd2hlbiBibGtnX2NyZWF0ZSBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGNncm91cCBsb2dpYyB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrIHdoZW4gYSBwb2xpY3kgaXMgdW5yZWdpc3RlcmVkLiBJdCBpcyByZWFjaGFibGUgdmlhIGNncm91cCBjb25maWd1cmF0aW9uIHdyaXRlcyBhbmQgZGlzayBpbml0aWFsaXphdGlvbiwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHdpdGggZmF1bHQgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgwNzE5NGZlMmZmNjczMzY4MWJjODdkNDQ2NDUwM2I0OWJmNTAxMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAwNzo0MjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuY1xuaW5kZXggYmM2M2JkMjIwODY1ZGMuLjY3Mzg4NmQ3MWMyNjVkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNncm91cC5jXG4rKysgYi9ibG9jay9ibGstY2dyb3VwLmNcbkBAIC0xMTEsMTIgKzExMSwyMyBAQCBzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2NnX2Nzcyh2b2lkKVxuIFx0cmV0dXJuIHRhc2tfY3NzKGN1cnJlbnQsIGlvX2NncnBfaWQpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBibGtnX2ZyZWVfcGQoc3RydWN0IGJsa2NnX2dxICpibGtnKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQkxLQ0dfTUFYX1BPTFM7IGkrKykge1xuK1x0XHRpZiAoYmxrZy1cdTAwM2VwZFtpXSkge1xuK1x0XHRcdGJsa2NnX3BvbGljeVtpXS1cdTAwM2VwZF9mcmVlX2ZuKGJsa2ctXHUwMDNlcGRbaV0pO1xuK1x0XHRcdGJsa2ctXHUwMDNlcGRbaV0gPSBOVUxMO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCBibGtjZ19ncSAqYmxrZyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmxrY2dfZ3EsXG4gXHRcdFx0XHRcdCAgICAgZnJlZV93b3JrKTtcbiBcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmxrZy1cdTAwM2VxO1xuLVx0aW50IGk7XG4gXG4gXHQvKlxuIFx0ICogcGRfZnJlZV9mbigpIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KCksXG5AQCAtMTI2LDkgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIGJsa2dfZnJlZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0ICogYmxrY2dfZGVhY3RpdmF0ZV9wb2xpY3koKS5cbiBcdCAqL1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWJsa2NnX211dGV4KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJMS0NHX01BWF9QT0xTOyBpKyspXG4tXHRcdGlmIChibGtnLVx1MDAzZXBkW2ldKVxuLVx0XHRcdGJsa2NnX3BvbGljeVtpXS1cdTAwM2VwZF9mcmVlX2ZuKGJsa2ctXHUwMDNlcGRbaV0pO1xuK1x0YmxrZ19mcmVlX3BkKGJsa2cpO1xuIFx0aWYgKGJsa2ctXHUwMDNlcGFyZW50KVxuIFx0XHRibGtnX3B1dChibGtnLVx1MDAzZXBhcmVudCk7XG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnEtXHUwMDNlcXVldWVfbG9jayk7XG5AQCAtNDM4LDE1ICs0NDcsMjQgQEAgc3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRpZiAoIXJldClcbiBcdFx0cmV0dXJuIGJsa2c7XG4gXG4tXHQvKiBAYmxrZyBmYWlsZWQgZnVsbHkgaW5pdGlhbGl6ZWQsIHVzZSB0aGUgdXN1YWwgcmVsZWFzZSBwYXRoICovXG4tXHRibGtnX3B1dChibGtnKTtcbitcdC8qXG4rXHQgKiBAYmxrZyBmYWlsZWQgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIG5ldmVyIGxpbmtlZCwgc28gaXRzIHBkW10gaXNcbitcdCAqIGludmlzaWJsZSB0byBibGtjZ19kZWFjdGl2YXRlX3BvbGljeSgpLiBGcmVlIHBkW10gc3luY2hyb25vdXNseVxuK1x0ICogd2hpbGUgYmxrY2dfcG9saWN5W10gaXMgc3RpbGwgdmFsaWQsIG90aGVyd2lzZSB0aGUgYXN5bmMgZnJlZSBwYXRoXG4rXHQgKiBtYXkgY2FsbCBwZF9mcmVlX2ZuKCkgYWZ0ZXIgdGhlIHBvbGljeSBpcyB1bnJlZ2lzdGVyZWQgKGUuZy4gcm1tb2QgYmZxKS5cbitcdCAqIFRoZSBlcnJfZnJlZV9ibGtnIHBhdGggYmVsb3cgZnJlZXMgcGRbXSBmb3IgdGhlIHNhbWUgcmVhc29uLlxuK1x0ICovXG4rXHRibGtnX2ZyZWVfcGQoYmxrZyk7XG4rXHRwZXJjcHVfcmVmX2tpbGwoXHUwMDI2YmxrZy1cdTAwM2VyZWZjbnQpO1xuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiBcbiBlcnJfcHV0X2NzczpcbiBcdGNzc19wdXQoXHUwMDI2YmxrY2ctXHUwMDNlY3NzKTtcbiBlcnJfZnJlZV9ibGtnOlxuLVx0aWYgKG5ld19ibGtnKVxuK1x0aWYgKG5ld19ibGtnKSB7XG4rXHRcdGJsa2dfZnJlZV9wZChuZXdfYmxrZyk7XG4gXHRcdGJsa2dfZnJlZShuZXdfYmxrZyk7XG4rXHR9XG4gXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjA4LjY0MzUyMzc5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTA1MDQzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbG9jayBJL08gQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJsb2NrL2Jsay1jZ3JvdXAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBibGtnX2ZyZWVfcGRgIGZ1bmN0aW9uLiBGcm9tIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBmcmVlaW5nIG9mIGFsbCBgcGRgcyAocHJlc3VtYWJseSBcInBvbGljeSBkYXRhXCIgb3Igc29tZXRoaW5nIHNpbWlsYXIpIGFzc29jaWF0ZWQgd2l0aCBhIGBibGtjZ19ncWAuIE1ha2VzIHNlbnNlOyBjZW50cmFsaXppbmcgdGhpcyBjbGVhbnVwIGxvZ2ljIGlzIGdlbmVyYWxseSBnb29kIHByYWN0aWNlLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgYml0cy4gYGJsa2dfZnJlZV9wZGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gdHdvIHBsYWNlcywgYm90aCByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwLiBGaXJzdGx5LCBpdCdzIGNhbGxlZCBmcm9tIGBibGtnX2ZyZWVfd29ya2ZuYCwgcmVwbGFjaW5nIHNvbWUgaW5saW5lIGNvZGUuIFN0YW5kYXJkIHJlZmFjdG9yaW5nIC0gdGlkeWluZyB1cCB0aGUgY29kZSBhbmQgaW1wcm92aW5nIG1haW50YWluYWJpbGl0eS5cblxuVGhlIHNlY29uZCBhcmVhIGlzIG1vcmUgaW50ZXJlc3RpbmcuIEl0J3MgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIGBibGtnX2NyZWF0ZWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGVycm9yIHBhdGhzLiBQcmV2aW91c2x5LCBpZiBgYmxrZ19jcmVhdGVgIGZhaWxlZCAqYWZ0ZXIqIGluaXRpYWxpemluZyB0aGUgYGJsa2dgIHN0cnVjdHVyZSwgaXQgd291bGQgY2FsbCBgYmxrZ19wdXQoYmxrZylgIHdoaWNoIHdvdWxkIGVzc2VudGlhbGx5IHF1ZXVlIHRoZSBmcmVlaW5nIG9wZXJhdGlvbiBhc3luY2hyb25vdXNseS4gVGhpcyBpc24ndCBpZGVhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiBhbiBlcnJvciBjb250ZXh0LCBlc3BlY2lhbGx5IGlmIHRoZSBzdWJzZXF1ZW50IGZyZWVpbmcgb3BlcmF0aW9ucyBjb3VsZCBjYXVzZSBpc3N1ZXMuIE5vdywgdGhlIHBhdGNoIGlzIG1vcmUgZGlyZWN0OiBpdCBjYWxscyBgYmxrZ19mcmVlX3BkKGJsa2cpYCB0byBjbGVhbiB1cCB0aGUgYHBkYHMgYW5kIHRoZW4gaW1tZWRpYXRlbHkgYHBlcmNwdV9yZWZfa2lsbChcdTAwMjZibGtnLVx1MDAzZXJlZmNudClgIHRvIGdldCByaWQgb2YgdGhlIHJlZmVyZW5jZSBjb3VudC4gVGhpcyBpcyBhIG11Y2ggbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3ksIHByZXZlbnRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBzaW1pbGFyIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gZGVsYXllZCBjbGVhbnVwLlxuXG5BbHNvIGluIHRoZSBgZXJyX2ZyZWVfYmxrZ2AgcGF0aCwgdGhleSBjYWxsIGBibGtnX2ZyZWVfcGQobmV3X2Jsa2cpYCBiZWZvcmUgYGJsa2dfZnJlZShuZXdfYmxrZylgLCB3aGljaCBhZ2FpbiBtYWtlcyBwZXJmZWN0IHNlbnNlIGZvciBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCBvcmRlci5cblxuTGV0J3MgcHVsbCB1cCB0aGUgYGJsa2dfY3JlYXRlYCBmdW5jdGlvbiBpbiBgYmxvY2svYmxrLWNncm91cC5jYCBpdHNlbGYgYW5kIHNlZSBob3cgYWxsIHRoaXMgaXMgd29ya2luZyBpbiBjb250ZXh0LiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCB0aGlzIGlzIGRlc2lnbmVkIHRvIG1pdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MTUuMTM0MDMwNDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDcwMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2dfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9MzA4PXN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfYWxsb2Moc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMzc4LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzozNzk6c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19jcmVhdGUoc3RydWN0IGJsa2NnICpibGtjZywgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svYmxrLWNncm91cC5jLTM4MC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJsa2NnX2dxICpuZXdfYmxrZylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODAtICpcXG5ibG9jay9ibGstY2dyb3VwLmM6NDgxOiAqIFJldHVybnMgdGhlIGJsa2cgb3IgdGhlIGNsb3Nlc3QgYmxrZyBpZiBibGtnX2NyZWF0ZSgpIGZhaWxzIGFzIGl0IHdhbGtzXFxuYmxvY2svYmxrLWNncm91cC5jLTQ4Mi0gKiBkb3duIGZyb20gcm9vdC5cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz00ODQ9c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19sb29rdXBfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNTA4LVxcdCAqIG5vbi1yb290IGJsa2dzIGhhdmUgYWNjZXNzIHRvIHRoZWlyIHBhcmVudHMuICBSZXR1cm5zIHRoZSBjbG9zZXN0XFxuYmxvY2svYmxrLWNncm91cC5jOjUwOTpcXHQgKiBibGtnIHRvIHRoZSBpbnRlbmRlZCBibGtnIHNob3VsZCBibGtnX2NyZWF0ZSgpIGZhaWwuXFxuYmxvY2svYmxrLWNncm91cC5jLTUxMC1cXHQgKi9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy01MjYtXFxuYmxvY2svYmxrLWNncm91cC5jOjUyNzpcXHRcXHRibGtnID0gYmxrZ19jcmVhdGUocG9zLCBkaXNrLCBOVUxMKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtNTI4LVxcdFxcdGlmIChJU19FUlIoYmxrZykpIHtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz04ODI9aW50IGJsa2dfY29uZl9wcmVwKHN0cnVjdCBibGtjZyAqYmxrY2csIGNvbnN0IHN0cnVjdCBibGtjZ19wb2xpY3kgKnBvbCxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy05NTItXFx0XFx0fSBlbHNlIHtcXG5ibG9jay9ibGstY2dyb3VwLmM6OTUzOlxcdFxcdFxcdGJsa2cgPSBibGtnX2NyZWF0ZShwb3MsIGRpc2ssIG5ld19ibGtnKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtOTU0LVxcdFxcdFxcdGlmIChJU19FUlIoYmxrZykpIHtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0xNTE2PWludCBibGtjZ19pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMTUyOC1cXHQgKiB0aGUgb2xkIG9uZSBpcyBzdGlsbCBhbGl2ZSwgYW5kIHJhZGl4X3RyZWVfaW5zZXJ0KCkgaW5cXG5ibG9jay9ibGstY2dyb3VwLmM6MTUyOTpcXHQgKiBibGtnX2NyZWF0ZSgpIHdpbGwgZmFpbCB3aXRoIC1FRVhJU1QgYmVjYXVzZSB0aGUgb2xkIGVudHJpZXNcXG5ibG9jay9ibGstY2dyb3VwLmMtMTUzMC1cXHQgKiBzdGlsbCBvY2N1cHkgdGhlIHNhbWUgcXVldWUgaWQgc2xvdCBpbiBibGtjZy1cXHUwMDNlYmxrZ190cmVlLlxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1NDItXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cS1cXHUwMDNlcXVldWVfbG9jayk7XFxuYmxvY2svYmxrLWNncm91cC5jOjE1NDM6XFx0YmxrZyA9IGJsa2dfY3JlYXRlKFxcdTAwMjZibGtjZ19yb290LCBkaXNrLCBuZXdfYmxrZyk7XFxuYmxvY2svYmxrLWNncm91cC5jLTE1NDQtXFx0aWYgKElTX0VSUihibGtnKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MTUuMTkxMTEyNDA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MTQ3NzE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIGJsb2NrIGNncm91cHM6XG5cbioqQW5hbHl6aW5nIGEgQmxvY2sgQ2dyb3VwIFBhdGNoOiBFcnJvciBQYXRoIE9wdGltaXphdGlvbioqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgYGJsa2dfY3JlYXRlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGVycm9yIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpbnZvbHZlcyBmcmVlaW5nIGBwZGAgc3RydWN0dXJlcyBzeW5jaHJvbm91c2x5IHdpdGhpbiB0aGUgZXJyb3IgcGF0aHMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyB3ZSBoYW5kbGUgYmxvY2sgY2dyb3VwIGluaXRpYWxpemF0aW9uLCBhbmQgaXQncyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzZXR0aW5ncyB0aGF0IHdvdWxkIGludGVyYWN0IHdpdGggdGhpcyBtb2RpZmllZCBlcnJvciBoYW5kbGluZy4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYmxvY2sgY2dyb3VwIGFsbG9jYXRpb24sIHJlc291cmNlIGxpbWl0cywgYW5kIGVycm9yIHJlY292ZXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZXJyb3IgcGF0aHMgYXJlIHRyaWdnZXJlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHN5bmNocm9ub3VzIGZyZWVpbmcgbWlnaHQgYmUgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlIGFuZCBob3cgdGhpcyBhbHRlcnMgcmVzb3VyY2UgdXNhZ2Ugd2hlbiBhbGxvY2F0aW9uIGZhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MTguNzQyNTkxOTExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NjU3ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MTguODAyMjU1NTk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5OTY4NDE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQmxvY2sgSU8gYW5kIENvbnRyb2wgR3JvdXBzKipcblxuQWxyaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZ28gZG93biBhbnkgZnVydGhlciByYWJiaXQgaG9sZXMgaGVyZSwgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBjbGVhciBwaWN0dXJlIG9mICpleGFjdGx5KiB3aGF0IGBCTEtfQ0dST1VQYCBpcy4gSSBjYW4ndCBwcm9jZWVkIHdpdGggYW55IGluLWRlcHRoIGFuYWx5c2lzIG9yIGRlYnVnZ2luZyB3aXRob3V0IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlIGFuZCBpbnRlcmFjdGlvbnMgb2YgdGhhdCBzcGVjaWZpYyBjb21wb25lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBvbiBzb2xpZCBncm91bmQsIGFuZCBub3Qgd29ya2luZyBvZmYgb2YgYXNzdW1wdGlvbnMuIExldCBtZSBwdWxsIHVwIHRoYXQgZGVmaW5pdGlvbiwgYW5kIGdldCBhIGJldHRlciBtZW50YWwgbW9kZWwgZXN0YWJsaXNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MDYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MjoyMS43MDE5NDE4NDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MjM5Nzk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDg1PWNvbmZpZyBNRU1DR19WMVxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDEtXFxuaW5pdC9LY29uZmlnOjExMDI6Y29uZmlnIEJMS19DR1JPVVBcXG5pbml0L0tjb25maWctMTEwMy1cXHRib29sIFxcXCJJTyBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MjoyMy43NjQzNDU4MzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMwMzMxMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxvY2sgSS9PIENncm91cCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHRoZSBgQkxLX0NHUk9VUGAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludCwgYXMgZXhwZWN0ZWQuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgd2l0aGluIGBibG9jay9ibGstY2dyb3VwLmNgLiBMZXQncyBkaWcgaW4gYW5kIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZC5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIGBibGtnX2NyZWF0ZWAgaXMgbW9kaWZpZWQuIEFuZCBJIHNlZSBhIG5ldyBmdW5jdGlvbiBgYmxrZ19mcmVlX3BkYCBoYXMgYmVlbiBhZGRlZCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGlzIHBhdGNoIGlzIGFib3V0IG1hbmFnaW5nIHBlci1kZXZpY2UgZGF0YSBhc3NvY2lhdGVkIHdpdGggYmxvY2sgY2dyb3Vwcy4gQWxzbywgYGJsa2dfZnJlZV93b3JrZm5gIGlzIG1vZGlmaWVkIHdoaWNoIGNvdWxkIG1lYW4gYSBjaGFuZ2UgaW4gcmVzb3VyY2UgY2xlYW51cC5cblxuSW50ZXJlc3RpbmcuIEkgbm90aWNlIGNhbGxzIHRvIGBibGtnX2NyZWF0ZWAgd2l0aGluIGBibGtnX2xvb2t1cF9jcmVhdGVgLCBgYmxrZ19jb25mX3ByZXBgLCBhbmQgYGJsa2NnX2luaXRfZGlza2AuIENsZWFybHksIGBibGtnX2NyZWF0ZWAgaXMgcGl2b3RhbC4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSB0aGVzZSBibG9jayBncm91cCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNyZWF0ZWQuIExldCdzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBjYWxsZXJzIHRvIGBibGtnX2NyZWF0ZWAgdG8gZnVsbHkgZ2V0IGEgZ3Jhc3Agb2YgdGhpcyBwYXRjaCdzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MjoyNy45OTQ2Nzk3NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3OTk4MzkwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtnX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNncm91cC5jPTMwOD1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2FsbG9jKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTM3OC0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6Mzc5OnN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0zODAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBibGtjZ19ncSAqbmV3X2Jsa2cpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNDgwLSAqXFxuYmxvY2svYmxrLWNncm91cC5jOjQ4MTogKiBSZXR1cm5zIHRoZSBibGtnIG9yIHRoZSBjbG9zZXN0IGJsa2cgaWYgYmxrZ19jcmVhdGUoKSBmYWlscyBhcyBpdCB3YWxrc1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy00ODItICogZG93biBmcm9tIHJvb3QuXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9NDg0PXN0YXRpYyBzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2dfbG9va3VwX2NyZWF0ZShzdHJ1Y3QgYmxrY2cgKmJsa2NnLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTUwOC1cXHQgKiBub24tcm9vdCBibGtncyBoYXZlIGFjY2VzcyB0byB0aGVpciBwYXJlbnRzLiAgUmV0dXJucyB0aGUgY2xvc2VzdFxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1MDk6XFx0ICogYmxrZyB0byB0aGUgaW50ZW5kZWQgYmxrZyBzaG91bGQgYmxrZ19jcmVhdGUoKSBmYWlsLlxcbmJsb2NrL2Jsay1jZ3JvdXAuYy01MTAtXFx0ICovXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNTI2LVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzo1Mjc6XFx0XFx0YmxrZyA9IGJsa2dfY3JlYXRlKHBvcywgZGlzaywgTlVMTCk7XFxuYmxvY2svYmxrLWNncm91cC5jLTUyOC1cXHRcXHRpZiAoSVNfRVJSKGJsa2cpKSB7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9ODgyPWludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtOTUyLVxcdFxcdH0gZWxzZSB7XFxuYmxvY2svYmxrLWNncm91cC5jOjk1MzpcXHRcXHRcXHRibGtnID0gYmxrZ19jcmVhdGUocG9zLCBkaXNrLCBuZXdfYmxrZyk7XFxuYmxvY2svYmxrLWNncm91cC5jLTk1NC1cXHRcXHRcXHRpZiAoSVNfRVJSKGJsa2cpKSB7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmM9MTUxNj1pbnQgYmxrY2dfaW5pdF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1MjgtXFx0ICogdGhlIG9sZCBvbmUgaXMgc3RpbGwgYWxpdmUsIGFuZCByYWRpeF90cmVlX2luc2VydCgpIGluXFxuYmxvY2svYmxrLWNncm91cC5jOjE1Mjk6XFx0ICogYmxrZ19jcmVhdGUoKSB3aWxsIGZhaWwgd2l0aCAtRUVYSVNUIGJlY2F1c2UgdGhlIG9sZCBlbnRyaWVzXFxuYmxvY2svYmxrLWNncm91cC5jLTE1MzAtXFx0ICogc3RpbGwgb2NjdXB5IHRoZSBzYW1lIHF1ZXVlIGlkIHNsb3QgaW4gYmxrY2ctXFx1MDAzZWJsa2dfdHJlZS5cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTQyLVxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnEtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoxNTQzOlxcdGJsa2cgPSBibGtnX2NyZWF0ZShcXHUwMDI2YmxrY2dfcm9vdCwgZGlzaywgbmV3X2Jsa2cpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0xNTQ0LVxcdGlmIChJU19FUlIoYmxrZykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjI4LjM3NDY3MDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4NTMzOTgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSU8gQ2dyb3VwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYmxvY2sgSS9PIGNncm91cCBwb2xpY2llcyBhcmUgY29uZmlndXJlZCBhbmQgSSd2ZSBnb3QgYSBmZXcgc3Ryb25nIGNvbnRlbmRlcnMgZm9yIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gVGhlIGZ1bmN0aW9uIGBibGtnX2NvbmZfcHJlcGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0J3MgZGlyZWN0bHkgdGllZCB0byBjb25maWd1cmluZyBibGtjZyBwb2xpY2llcywgcGFydGljdWxhcmx5IHRocm91Z2ggY2dyb3VwZnMuIFRoYXQgZmVlbHMgcmlnaHQuXG5cblRoZW4sIHRoZXJlJ3MgYGJsa2NnX2luaXRfZGlza2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBkdXJpbmcgZGlzayBpbml0aWFsaXphdGlvbi4gVGhhdCBzZWVtcyByZWxldmFudCwgYnV0IGxpa2VseSBtb3JlIG9uIHRoZSBpbml0aWFsIHNldHVwIHNpZGUsIHJhdGhlciB0aGFuIHRoZSBjb25maWd1cmF0aW9uLiBXZSBhbHNvIGhhdmUgYGJsa2dfbG9va3VwX2NyZWF0ZWAsIHdoaWNoIGhhbmRsZXMgbG9va2luZyB1cCBvciBjcmVhdGluZyBhIGBibGtnYCBzdHJ1Y3R1cmUuIFRoYXQncyBwcm9iYWJseSBpbnZvbHZlZCwgYXMgaXQgc2V0cyB1cCB0aGUgYmxrZywgYnV0IG1pZ2h0IG5vdCBiZSB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHBvaW50LlxuXG5NeSBndXQgZmVlbGluZywgdGhvdWdoLCBpcyB0aGF0IGBibGtnX2NvbmZfcHJlcGAgaXMgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgaW4tZGVwdGggcG9saWN5IHdvcmsuIFNvLCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gaXRzIGNhbGxlcnMgYW5kIHNlZSB3aGVyZSB0aGlzIHJhYmJpdCBob2xlIGxlYWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzOTIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MjozMi44NjAwMTMyODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NzgwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2dfY29uZl9wcmVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9MTA0Mj1zdGF0aWMgc3NpemVfdCBiZnFfaW9fc2V0X2RldmljZV93ZWlnaHQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxuYmxvY2svYmZxLWNncm91cC5jLTEwNTMtXFxuYmxvY2svYmZxLWNncm91cC5jOjEwNTQ6XFx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFxcdTAwMjZibGtjZ19wb2xpY3lfYmZxLCBcXHUwMDI2Y3R4KTtcXG5ibG9jay9iZnEtY2dyb3VwLmMtMTA1NS1cXHRpZiAocmV0KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTc2Nz1FWFBPUlRfU1lNQk9MX0dQTChfX2Jsa2dfcHJmaWxsX3U2NCk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNzc1LSAqIE9uY2UgaW5pdGlhbGl6ZWQsIEBjdHggY2FuIGJlIHVzZWQgd2l0aCBibGtnX2NvbmZfb3Blbl9iZGV2KCkgYW5kXFxuYmxvY2svYmxrLWNncm91cC5jOjc3NjogKiBibGtnX2NvbmZfcHJlcCgpLCBhbmQgbXVzdCBiZSBjbGVhbmVkIHVwIHdpdGggYmxrZ19jb25mX2V4aXQoKS5cXG5ibG9jay9ibGstY2dyb3VwLmMtNzc3LSAqL1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTc4Mj1FWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfaW5pdCk7XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNzkyLSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiBAY3R4IGFuZCB0aGUgZXh0cmEgY2FsbHMgYmVjb21lXFxuYmxvY2svYmxrLWNncm91cC5jOjc5MzogKiBOT09Qcy4gYmxrZ19jb25mX3ByZXAoKSBpbXBsaWNpdGx5IGNhbGxzIHRoaXMgZnVuY3Rpb24uIFVzZSB0aGlzIGZ1bmN0aW9uXFxuYmxvY2svYmxrLWNncm91cC5jLTc5NC0gKiBleHBsaWNpdGx5IGlmIGJkZXYgYWNjZXNzIGlzIG5lZWRlZCB3aXRob3V0IHJlc29sdmluZyB0aGUgYmxrY2cgLyBwb2xpY3kgcGFydFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTg0Mj11bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBibGtnX2NvbmZfb3Blbl9iZGV2X2Zyb3plbihzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTg2Ny0vKipcXG5ibG9jay9ibGstY2dyb3VwLmM6ODY4OiAqIGJsa2dfY29uZl9wcmVwIC0gcGFyc2UgYW5kIHByZXBhcmUgZm9yIHBlci1ibGtnIGNvbmZpZyB1cGRhdGVcXG5ibG9jay9ibGstY2dyb3VwLmMtODY5LSAqIEBibGtjZzogdGFyZ2V0IGJsb2NrIGNncm91cFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTg4MS0gKi9cXG5ibG9jay9ibGstY2dyb3VwLmM6ODgyOmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuYmxvY2svYmxrLWNncm91cC5jLTg4My1cXHRcXHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTk4Ny19XFxuYmxvY2svYmxrLWNncm91cC5jOjk4ODpFWFBPUlRfU1lNQk9MX0dQTChibGtnX2NvbmZfcHJlcCk7XFxuYmxvY2svYmxrLWNncm91cC5jLTk4OS1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuaD0yMjI9dW5zaWduZWQgbG9uZyBibGtnX2NvbmZfb3Blbl9iZGV2X2Zyb3plbihzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KTtcXG5ibG9jay9ibGstY2dyb3VwLmg6MjIzOmludCBibGtnX2NvbmZfcHJlcChzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBjb25zdCBzdHJ1Y3QgYmxrY2dfcG9saWN5ICpwb2wsXFxuYmxvY2svYmxrLWNncm91cC5oLTIyNC1cXHRcXHQgICBzdHJ1Y3QgYmxrZ19jb25mX2N0eCAqY3R4KTtcXG4tLVxcbmJsb2NrL2Jsay1pb2Nvc3QuYz0zMTA0PXN0YXRpYyBzc2l6ZV90IGlvY193ZWlnaHRfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxuLS1cXG5ibG9jay9ibGstaW9jb3N0LmMtMzE0Mi1cXG5ibG9jay9ibGstaW9jb3N0LmM6MzE0MzpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV9pb2Nvc3QsIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2Jsay1pb2Nvc3QuYy0zMTQ0LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmM9ODI3PXN0YXRpYyBzc2l6ZV90IGlvbGF0ZW5jeV9zZXRfbGltaXQoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxuLS1cXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODU0LVxcbmJsb2NrL2Jsay1pb2xhdGVuY3kuYzo4NTU6XFx0cmV0ID0gYmxrZ19jb25mX3ByZXAoYmxrY2csIFxcdTAwMjZibGtjZ19wb2xpY3lfaW9sYXRlbmN5LCBcXHUwMDI2Y3R4KTtcXG5ibG9jay9ibGstaW9sYXRlbmN5LmMtODU2LVxcdGlmIChyZXQpXFxuLS1cXG5ibG9jay9ibGstdGhyb3R0bGUuYz0xMzQzPXN0YXRpYyBzc2l6ZV90IHRnX3NldF9jb25mKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNjMtXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTM2NDpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTEzNjUtXFx0aWYgKHJldClcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jPTE1Mjc9c3RhdGljIHNzaXplX3QgdGdfc2V0X2xpbWl0KHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE1NDctXFxuYmxvY2svYmxrLXRocm90dGxlLmM6MTU0ODpcXHRyZXQgPSBibGtnX2NvbmZfcHJlcChibGtjZywgXFx1MDAyNmJsa2NnX3BvbGljeV90aHJvdGwsIFxcdTAwMjZjdHgpO1xcbmJsb2NrL2Jsay10aHJvdHRsZS5jLTE1NDktXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6MzIuOTI5Nzk4OTcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MzA2MzI4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgQ2dyb3VwIEJ1ZyBhbmQgaXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbi4gSXQgc2VlbXMgYGJsa2dfY29uZl9wcmVwYCBpcyBhIGNlbnRyYWwgZnVuY3Rpb24gaGVyZSwgY2FsbGVkIGZyb20gcXVpdGUgYSBmZXcgZGlmZmVyZW50IGNncm91cCBmaWxlIHdyaXRlIGhhbmRsZXJzLiBJIGNhbiBzZWUgaXQncyBsaW5rZWQgdG8gYGJmcV9pb19zZXRfZGV2aWNlX3dlaWdodGAsIGBpb2Nfd2VpZ2h0X3dyaXRlYCwgYGlvbGF0ZW5jeV9zZXRfbGltaXRgLCBgdGdfc2V0X2NvbmZgLCBhbmQgYHRnX3NldF9saW1pdGAg4oCTIGJhc2ljYWxseSwgc2V0dGluZ3MgcmVsYXRlZCB0byBJL08gc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudC5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGFwcGVhcnMgdG8gYmUgdGhhdCBgYmxrZ19jcmVhdGVgIGlzbid0IGFsd2F5cyBpbml0aWFsaXppbmcgcHJvcGVybHkuIEl0IGNhbiBmYWlsIHRvIGZ1bGx5IGxpbmssIG1lYW5pbmcgaXRzIGBwZFtdYCBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggSSBhc3N1bWUgaG9sZHMgcGVyLWRldmljZSBpbmZvcm1hdGlvbiwgYmVjb21lcyBpbnZpc2libGUgdG8gYGJsa2NnX2RlYWN0aXZhdGVfcG9saWN5KClgLiBUaGlzIGlzIGEgcHJldHR5IGNyaXRpY2FsIGZsYXcsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb3JyZWN0IGFjY291bnRpbmcgb3IgcmVzb3VyY2UgbGVha3MuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlc2UgZmFpbHVyZSBtb2RlcyBpbiBgYmxrZ19jcmVhdGVgLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgdGhlcmUncyBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIGEgYHJhZGl4X3RyZWVfaW5zZXJ0YCBmYWlsdXJlLCBvciBhIGBiZGlfZ2V0YCBmYWlsdXJlLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYmxvY2sgY2dyb3VwIGVycm9yIGhhbmRsaW5nLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGJlIHN1cmUgYW55IGZhaWx1cmUgc3RhdGVzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC5cblxuUmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgdG8gZW5hYmxlIHNldmVyYWwgb3B0aW9ucyB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLCBsaWtlIGBCTEtfQ0dST1VQYCwgYEJMS19DR1JPVVBfSU9DT1NUYCwgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgYEJMS19DR1JPVVBfSU9QUklPYCwgYElPU0NIRURfQkZRYCwgYEJGUV9DR1JPVVBfREVCVUdgLCBgQkxLX0NHUk9VUF9SV1NUQVRgLCBhbmQgYEJMS19DR1JPVVBfUFVOVF9CSU9gLiBMZXQncyBwYXkgZXh0cmEgYXR0ZW50aW9uIHRvIGBJT1NDSEVEX0JGUWAgYW5kIGBCRlFfR1JPVVBfSU9TQ0hFRGAgc2luY2UgdGhleSdyZSBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIHJlbGF0aW9uIHRvIGBibGtnX2NvbmZfcHJlcGAuIFRoaXMgc2VlbXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTM5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjM5LjQ2MDQzNDMwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0NTU5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJGUV9HUk9VUF9JT1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWcuaW9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9LY29uZmlnLmlvc2NoZWQ9MTk9Y29uZmlnIElPU0NIRURfQkZRXFxuLS1cXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMjktXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjMwOmNvbmZpZyBCRlFfR1JPVVBfSU9TQ0hFRFxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMS0gICAgICAgYm9vbCBcXFwiQkZRIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjM5LjUyMzg5NTM2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY2NzQzMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIEkvTyBMYXRlbmN5IE1ldHJpY3MqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGJsb2NrIEkvTyBsYXRlbmN5IG1ldHJpY3MuIEkgd2FudCB0byBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgYEJMS19DR1JPVVBfSU9MQVRFTkNZYCwgd2hpY2ggSSBrbm93IGNhbiBnaXZlIG1lIGEgZ3JhbnVsYXIgdmlldyBpbnRvIHRoZSBsYXRlbmN5IGV4cGVyaWVuY2VkIGJ5IGluZGl2aWR1YWwgY2dyb3Vwcy4gSSdtIGFsc28gdGhpbmtpbmcgdGhpcyBpcyBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gY2hlY2sgb3RoZXIgcmVsYXRlZCBibG9jayBkZXZpY2Ugc3RhdGlzdGljcyBhcyB3ZWxsLCBwcm9iYWJseSBmb2N1c2luZyBvbiBvbmVzIHRoYXQgYXJlIGxpa2VseSB0byBwcm92aWRlIGNvcnJvYm9yYXRpbmcgZXZpZGVuY2UuIFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcyBhdCBhIHZlcnkgbG93IGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzgxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6NDMuNjkwNjQxMTI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc0MjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0NHUk9VUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Mzk9Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuLS1cXG5ibG9jay9LY29uZmlnLTQxLVxcbmJsb2NrL0tjb25maWc6NDI6Y29uZmlnIEJMS19DR1JPVVBfUldTVEFUXFxuYmxvY2svS2NvbmZpZy00My1cXHRib29sXFxuYmxvY2svS2NvbmZpZy00NC1cXG5ibG9jay9LY29uZmlnOjQ1OmNvbmZpZyBCTEtfQ0dST1VQX1BVTlRfQklPXFxuYmxvY2svS2NvbmZpZy00Ni1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTEyNz1jb25maWcgQkxLX1dCVF9NUVxcbi0tXFxuYmxvY2svS2NvbmZpZy0xMzMtXFxuYmxvY2svS2NvbmZpZzoxMzQ6Y29uZmlnIEJMS19DR1JPVVBfSU9MQVRFTkNZXFxuYmxvY2svS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGxhdGVuY3kgYmFzZWQgY2dyb3VwIElPIHByb3RlY3Rpb25cXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE0NC1cXG5ibG9jay9LY29uZmlnOjE0NTpjb25maWcgQkxLX0NHUk9VUF9GQ19BUFBJRFxcbmJsb2NrL0tjb25maWctMTQ2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IHRvIHRyYWNrIEZDIEkvTyBUcmFmZmljIGFjcm9zcyBjZ3JvdXAgYXBwbGljYXRpb25zXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0xNTMtXFxuYmxvY2svS2NvbmZpZzoxNTQ6Y29uZmlnIEJMS19DR1JPVVBfSU9DT1NUXFxuYmxvY2svS2NvbmZpZy0xNTUtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIGNvc3QgbW9kZWwgYmFzZWQgY2dyb3VwIElPIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE2My1cXG5ibG9jay9LY29uZmlnOjE2NDpjb25maWcgQkxLX0NHUk9VUF9JT1BSSU9cXG5ibG9jay9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJDZ3JvdXAgSS9PIGNvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBhbiBJL08gcHJpb3JpdHkgY2xhc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjQzLjc0NzM4ODE3NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0NTU1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIFRocm90dGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgYEJMS19ERVZfVEhST1RUTElOR2AuIFdoYXQncyB0aGUgY3VycmVudCBzdGF0dXMsIGFuZCB3aGVyZSBhcmUgdGhlIHBvdGVudGlhbCBwaXRmYWxscz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSBvcHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2UgYW5kIHByZXZlbnQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpbnZvbHZlcyBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUgYW5kIHNlZWluZyBob3cgSSBjYW4gbW9uaXRvciB0aGUgYmxvY2sgZGV2aWNlIHRocm90dGxpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCB0cmFkZS1vZmZzIHRoYXQgaGF2ZSB0byBiZSBtYWRlIHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IGFuZCBibG9jayBkZXZpY2VzLiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBjYXVzaW5nIHVubmVjZXNzYXJ5IGJsb2NrIGRldmljZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjQ2Ljk4MTk0NjUyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwMTIxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfVEhST1RUTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9OTc9Y29uZmlnIEJMS19ERVZfWk9ORURcXG4tLVxcbmJsb2NrL0tjb25maWctMTA1LVxcbmJsb2NrL0tjb25maWc6MTA2OmNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG5ibG9jay9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJCbG9jayBsYXllciBiaW8gdGhyb3R0bGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0Mjo0Ny4wMzg5Njg1NzNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNDI4MDk1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGVuYWJsZSBhIHNwZWNpZmljIHNldCBvZiBibG9jayBJL08gY2dyb3VwIGNvbmZpZ3VyYXRpb25zOiBgQkxLX0NHUk9VUGAsIGBCTEtfREVWX1RIUk9UVExJTkdgLCBgQkxLX0NHUk9VUF9JT0xBVEVOQ1lgLCBgQkxLX0NHUk9VUF9JT0NPU1RgLCBgSU9TQ0hFRF9CRlFgLCBhbmQgYEJGUV9HUk9VUF9JT1NDSEVEYC4gTm93LCBsZXQncyByZXZpc2l0IHRoZSBjYWxsZXJzIG9mIGBibGtnX2NyZWF0ZWAuIEkgcmVtZW1iZXIgdGhhdCB3YXMgYSBjcml0aWNhbCBmdW5jdGlvbi4gUmlnaHQsIHRoZSBrZXkgY2FsbGVycyBhcmUgYGJsa2dfY29uZl9wcmVwYCwgYGJsa2NnX2luaXRfZGlza2AsIGFuZCBgYmxrZ19sb29rdXBfY3JlYXRlYC5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9sczogYGJsa2dfY3JlYXRlYCwgYGJsa2dfY29uZl9wcmVwYCwgYGJsa2NnX2luaXRfZGlza2AsIGBibGtnX2xvb2t1cF9jcmVhdGVgLCBhbmQgYGJsa2dfZnJlZV93b3JrZm5gLiBIb2xkIG9uLCBpcyBgYmxrZ19jcmVhdGVgIHN0YXRpYz8gWWVzLCBpdCBpcy4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBmb2N1cyBvdXIgYXR0ZW50aW9uIG9uICBgYmxrZ19jb25mX3ByZXBgLCBgYmxrY2dfaW5pdF9kaXNrYCwgYGJsa2dfbG9va3VwX2NyZWF0ZWAsIGFuZCBgYmxrZ19mcmVlX3dvcmtmbmAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb25zIG9mIGludGVyZXN0LlxuXG5XYWl0IGEgc2Vjb25kLCB3YXNuJ3QgYGJsa2dfbG9va3VwX2NyZWF0ZWAgYWxzbyBkZWNsYXJlZCBzdGF0aWM/IE9rYXksIGxvb2tzIGxpa2UgaXQgaXMuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgYmxrZ19sb29rdXBfY3JlYXRlYC4gR290dGEgYmUgdGhvcm91Z2ggaGVyZSBhbmQgbWFrZSBzdXJlIEknbSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjUyLjM1MzI1Mjc0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MTUwNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa2dfbG9va3VwX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9ibGstY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNncm91cC5jPTM3OT1zdGF0aWMgc3RydWN0IGJsa2NnX2dxICpibGtnX2NyZWF0ZShzdHJ1Y3QgYmxrY2cgKmJsa2NnLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy00NzEtLyoqXFxuYmxvY2svYmxrLWNncm91cC5jOjQ3MjogKiBibGtnX2xvb2t1cF9jcmVhdGUgLSBsb29rdXAgYmxrZywgdHJ5IHRvIGNyZWF0ZSBvbmUgaWYgbm90IHRoZXJlXFxuYmxvY2svYmxrLWNncm91cC5jLTQ3My0gKiBAYmxrY2c6IGJsa2NnIG9mIGludGVyZXN0XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtNDgzLSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzo0ODQ6c3RhdGljIHN0cnVjdCBibGtjZ19ncSAqYmxrZ19sb29rdXBfY3JlYXRlKHN0cnVjdCBibGtjZyAqYmxrY2csXFxuYmxvY2svYmxrLWNncm91cC5jLTQ4NS1cXHRcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0yMTI0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpibGtnX3RyeWdldF9jbG9zZXN0KHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTI5LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5ibG9jay9ibGstY2dyb3VwLmM6MjEzMDpcXHRibGtnID0gYmxrZ19sb29rdXBfY3JlYXRlKGNzc190b19ibGtjZyhjc3MpLCBiaW8tXFx1MDAzZWJpX2JkZXYtXFx1MDAzZWJkX2Rpc2spO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTMxLVxcdHdoaWxlIChibGtnKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjUyLjYyODQxMjA1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTM5OTUwMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBibGtnX3RyeWdldF9jbG9zZXN0YCBMb2NhdGlvbioqXG5cbkhtbSwgc28gYGJsa2dfdHJ5Z2V0X2Nsb3Nlc3RgLi4uIEkgd2FzIGZhaXJseSBjZXJ0YWluIHRoYXQgd2FzIGRlY2xhcmVkIGBzdGF0aWMgaW5saW5lYC4gSXQncyBhIHByZXR0eSBjb21tb24gcGF0dGVybiBmb3IgdGhvc2Uga2luZHMgb2YgaGVscGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGNncm91cCBibG9jayBkZXZpY2UgYWNjb3VudGluZywga2VlcGluZyB0aGVtIGNsb3NlIHRvIHdoZXJlIHRoZXkncmUgdXNlZC4gQnV0LCB3YWl0LCB0aGF0IGRvZXNuJ3QgcXVpdGUgc2VlbSByaWdodC4gSSB0aG91Z2h0IEkgc2F3IGl0IGluIGBibG9jay9ibGstY2dyb3VwLmNgPyBPa2F5LCB3YWl0LCAqaXMqIGl0IGluIGBibG9jay9ibGstY2dyb3VwLmNgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24uIEp1c3QgbmVlZCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBzdXJlIEknbSBub3QgbWlzcmVtZW1iZXJpbmcgb3IgY29uZmxhdGluZyBpdCB3aXRoIHNvbWV0aGluZyBlbHNlLCBvdGhlcndpc2UsIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJdCdzIGltcG9ydGFudCB0byBiZSBhY2N1cmF0ZS4gUmlnaHQsIGxldCdzIHNlZS4gSSdsbCBqdXN0IGNvbmZpcm0gd2hlcmUgdGhhdCBjb2RlIGxpdmVzIGJlZm9yZSBtb3Zpbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTU2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDI6NTcuMTY4MzY1NTEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM5MDIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtnX3RyeWdldF9jbG9zZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY2dyb3VwLmM9MjEwNz12b2lkIGJsa2NnX2FkZF9kZWxheShzdHJ1Y3QgYmxrY2dfZ3EgKmJsa2csIHU2NCBub3csIHU2NCBkZWx0YSlcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTE1LS8qKlxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTE2OiAqIGJsa2dfdHJ5Z2V0X2Nsb3Nlc3QgLSB0cnkgYW5kIGdldCBhIGJsa2cgcmVmIG9uIHRoZSBjbG9zZXQgYmxrZ1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTE3LSAqIEBiaW86IHRhcmdldCBiaW9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTIzLSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTI0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpibGtnX3RyeWdldF9jbG9zZXN0KHN0cnVjdCBiaW8gKmJpbyxcXG5ibG9jay9ibGstY2dyb3VwLmMtMjEyNS1cXHRcXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTIxNTc9dm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3Moc3RydWN0IGJpbyAqYmlvLFxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTIxNjMtXFx0aWYgKGNzcyBcXHUwMDI2XFx1MDAyNiBjc3MtXFx1MDAzZXBhcmVudCkge1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTY0OlxcdFxcdGJpby1cXHUwMDNlYmlfYmxrZyA9IGJsa2dfdHJ5Z2V0X2Nsb3Nlc3QoYmlvLCBjc3MpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTY1LVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQyOjU3LjIyODc2MDczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzY1MDUzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzc2AgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzYCBzZWVtcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCdzIGluaXRpYXRpbmcgdGhlIHByb2Nlc3MsIGFuZCBpdCdzIGNhbGxpbmcgYGJsa2dfdHJ5Z2V0X2Nsb3Nlc3RgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGJsa2dfdHJ5Z2V0X2Nsb3Nlc3RgIGhhcyBhbHdheXMgYmVlbiBhIHBvaW50IG9mIHBvdGVudGlhbCBvcHRpbWl6YXRpb24uIFRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGludGVyYWN0aW9uLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSByZWxhdGVzIHRvIHRoZSByZXN0IG9mIHRoZSBmcmFtZXdvcmsuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzIG9mIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3NgLiBUaGF0IHdpbGwgaGVscCBtZSBncmFzcCB0aGUgY29udGV4dCBhbmQgcHVycG9zZSBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgbmVlZCB0aGF0IGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8gZmlndXJlIG91dCBpZiB0aGlzIG1pZ2h0IGJlIGFuIGFyZWEgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9yLCBwZXJoYXBzLCBhIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MzowMS4yMDUyNjgwNzNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzQ5NzEyNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZnEtY2dyb3VwLmM9NTk5PXN0cnVjdCBiZnFfZ3JvdXAgKmJmcV9iaW9fYmZxZyhzdHJ1Y3QgYmZxX2RhdGEgKmJmcWQsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2JmcS1jZ3JvdXAuYy02MTAtXFx0XFx0aWYgKGJmcWctXFx1MDAzZXBkLm9ubGluZSkge1xcbmJsb2NrL2JmcS1jZ3JvdXAuYzo2MTE6XFx0XFx0XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgXFx1MDAyNmJsa2ctXFx1MDAzZWJsa2NnLVxcdTAwM2Vjc3MpO1xcbmJsb2NrL2JmcS1jZ3JvdXAuYy02MTItXFx0XFx0XFx0cmV0dXJuIGJmcWc7XFxuLS1cXG5ibG9jay9iZnEtY2dyb3VwLmMtNjE1LVxcdH1cXG5ibG9jay9iZnEtY2dyb3VwLmM6NjE2OlxcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhiaW8sXFxuYmxvY2svYmZxLWNncm91cC5jLTYxNy1cXHRcXHRcXHRcXHRcXHUwMDI2YmZxZ190b19ibGtnKGJmcWQtXFx1MDAzZXJvb3RfZ3JvdXApLVxcdTAwM2VibGtjZy1cXHUwMDNlY3NzKTtcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0yMTI0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2NnX2dxICpibGtnX3RyeWdldF9jbG9zZXN0KHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTQzLS8qKlxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTQ0OiAqIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyAtIGFzc29jaWF0ZSBhIGJpbyB3aXRoIGEgc3BlY2lmaWVkIGNzc1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTQ1LSAqIEBiaW86IHRhcmdldCBiaW9cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTU2LSAqL1xcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMTU3OnZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKHN0cnVjdCBiaW8gKmJpbyxcXG5ibG9jay9ibGstY2dyb3VwLmMtMjE1OC1cXHRcXHRcXHRcXHQgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTY5LX1cXG5ibG9jay9ibGstY2dyb3VwLmM6MjE3MDpFWFBPUlRfU1lNQk9MX0dQTChiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MpO1xcbmJsb2NrL2Jsay1jZ3JvdXAuYy0yMTcxLVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jPTIxODE9dm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2coc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTIxOTQtXFxuYmxvY2svYmxrLWNncm91cC5jOjIxOTU6XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgY3NzKTtcXG5ibG9jay9ibGstY2dyb3VwLmMtMjE5Ni1cXG4tLVxcbmJsb2NrL2Jsay1jZ3JvdXAuYz0yMjA2PXZvaWQgYmlvX2Nsb25lX2Jsa2dfYXNzb2NpYXRpb24oc3RydWN0IGJpbyAqZHN0LCBzdHJ1Y3QgYmlvICpzcmMpXFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmMtMjIwOC1cXHRpZiAoc3JjLVxcdTAwM2ViaV9ibGtnKVxcbmJsb2NrL2Jsay1jZ3JvdXAuYzoyMjA5OlxcdFxcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2Nzcyhkc3QsIGJpb19ibGtjZ19jc3Moc3JjKSk7XFxuYmxvY2svYmxrLWNncm91cC5jLTIyMTAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW8uaD01MDQ9dm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2coc3RydWN0IGJpbyAqYmlvKTtcXG5pbmNsdWRlL2xpbnV4L2Jpby5oOjUwNTp2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhzdHJ1Y3QgYmlvICpiaW8sXFxuaW5jbHVkZS9saW51eC9iaW8uaC01MDYtXFx0XFx0XFx0XFx0IHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaW8uaD01MTA9c3RhdGljIGlubGluZSB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZyhzdHJ1Y3QgYmlvICpiaW8pIHsgfVxcbmluY2x1ZGUvbGludXgvYmlvLmg6NTExOnN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3Moc3RydWN0IGJpbyAqYmlvLFxcbmluY2x1ZGUvbGludXgvYmlvLmgtNTEyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaD0yNTY9c3RhdGljIGlubGluZSB2b2lkIHdiY19pbml0X2JpbyhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaC0yNjQtXFx0aWYgKHdiYy1cXHUwMDNld2IpXFxuaW5jbHVkZS9saW51eC93cml0ZWJhY2suaDoyNjU6XFx0XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgd2JjLVxcdTAwM2V3Yi1cXHUwMDNlYmxrY2dfY3NzKTtcXG5pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oLTI2Ni19XFxuLS1cXG5tbS9wYWdlX2lvLmM9MzA5PXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTMxOS1cXHRjc3MgPSBjZ3JvdXBfZV9jc3MobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXAsIFxcdTAwMjZpb19jZ3JwX3N1YnN5cyk7XFxubW0vcGFnZV9pby5jOjMyMDpcXHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9jc3MoYmlvLCBjc3MpO1xcbm1tL3BhZ2VfaW8uYy0zMjEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQzOjAzLjI4MDI0NTMyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU2NjE1Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJsa2dfY3JlYXRlYCBDYWxsIFBhdGgqKlxuXG5Pa2F5LCBzbyBgYmlvX2Fzc29jaWF0ZV9ibGtnYCBpcyBhIGNlbnRyYWwgZnVuY3Rpb24sIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYWxsIG92ZXIgdGhlIHBsYWNlLiBUaGF0IG1lYW5zIGBibGtnX2NyZWF0ZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBpdCwgc3BlY2lmaWNhbGx5IHdoZW4gYSBiaW8gaXMgaW5pdGlhbGl6ZWQuIEkgYWxyZWFkeSBrbmV3IHRoaXMsIGJ1dCBpdCdzIGdvb2QgdG8gY29uZmlybSB0aGUgaGlnaCB0cmFmZmljIGhlcmUuIFRoaXMgaXMgYSBjcnVjaWFsLCBob3QgY29kZSBwYXRoLCBubyBxdWVzdGlvbiBhYm91dCBpdC5cblxuSSdtIHRoaW5raW5nLCBpbnN0ZWFkIG9mIHBva2luZyBhcm91bmQgaW4gYGJpb19hc3NvY2lhdGVfYmxrZ2AgZGlyZWN0bHkgd2hpY2ggaXMgdG9vIGJyb2FkLCBJJ2xsIHRha2UgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBJJ2xsIGZvY3VzIG9uIGBibGtnX2NvbmZfcHJlcGAgYW5kIGBibGtjZ19pbml0X2Rpc2tgIGFzIHRoZXkncmUgbW9yZSBjb250cm9sbGFibGUgdHJpZ2dlcnMgdGhhdCBsZWFkIHRvIGBibGtnX2NyZWF0ZWAuIExldCdzIGZvY3VzIG9uIGludmVzdGlnYXRpbmcgdGhlIGNhbGxlcnMgb2YgYGJsa2NnX2luaXRfZGlza2AuIFRoaXMgZmVlbHMgbGlrZSBhIHNtYXJ0IHBsYWNlIHRvIHN0YXJ0IHRoZSBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTY4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQzOjEwLjgzNjg2MzcwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNDM4MTk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtjZ19pbml0X2Rpc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jZ3JvdXAuYz0xNTEwPXZvaWQgYmxrZ19pbml0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxuYmxvY2svYmxrLWNncm91cC5jLTE1MTUtXFxuYmxvY2svYmxrLWNncm91cC5jOjE1MTY6aW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9ibGstY2dyb3VwLmMtMTUxNy17XFxuLS1cXG5ibG9jay9ibGstY2dyb3VwLmg9MTk0PXZvaWQgYmxrZ19pbml0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTtcXG5ibG9jay9ibGstY2dyb3VwLmg6MTk1OmludCBibGtjZ19pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbmJsb2NrL2Jsay1jZ3JvdXAuaC0xOTYtdm9pZCBibGtjZ19leGl0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi0tXFxuYmxvY2svYmxrLWNncm91cC5oPTQ4MD1zdGF0aWMgaW5saW5lIHZvaWQgYmxrZ19pbml0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSB7IH1cXG5ibG9jay9ibGstY2dyb3VwLmg6NDgxOnN0YXRpYyBpbmxpbmUgaW50IGJsa2NnX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyByZXR1cm4gMDsgfVxcbmJsb2NrL2Jsay1jZ3JvdXAuaC00ODItc3RhdGljIGlubGluZSB2b2lkIGJsa2NnX2V4aXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykgeyB9XFxuLS1cXG5ibG9jay9nZW5oZC5jPTE0NDY9c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTQ3NC1cXG5ibG9jay9nZW5oZC5jOjE0NzU6XFx0aWYgKGJsa2NnX2luaXRfZGlzayhkaXNrKSlcXG5ibG9jay9nZW5oZC5jLTE0NzYtXFx0XFx0Z290byBvdXRfZXJhc2VfcGFydDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQzOjEyLjc3MTI1MTQ1MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgzNDkyMDYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmxvY2sgSS9PIENncm91cCBQYXRjaCBDYW5kaWRhdGVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGJsb2NrIEkvTyBjZ3JvdXAgcGF0Y2guIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgbW9zdCBsaWtlbHkgdG91Y2hlZCBieSB0aGUgY2hhbmdlcywgYW5kIGlkZWFsbHksIHRob3NlICpsZWFzdCogbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGFsbG9jYXRpb24gcGF0aC4gSSBzZWUgYGJsa2NnX2luaXRfZGlza2AgY2FsbGVkIGZyb20gYF9fYWxsb2NfZGlza19ub2RlYC4gU2VlbXMgcHJvbWlzaW5nLCBhcyBpdCdzIHRyaWdnZXJlZCBkdXJpbmcgZGlzayBhbGxvY2F0aW9uLCBhIHBvaW50IHRvIGNvbnNpZGVyLiBBbmQgdGhlbiB0aGVyZSdzIGBibGtnX2NvbmZfcHJlcGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGNncm91cCB3cml0ZSBoYW5kbGVycywgc28gaXQncyBsaWtlbHkgdG8gYmUgcmVsZXZhbnQuXG5cbkxldCdzIHNlZeKApiBJIGFsc28gc2VlIGBibGtnX2ZyZWVfd29ya2ZuYCBhcyBhIGZ1bmN0aW9uIHRoYXQncyBjaGFuZ2VkLCBidXQgSSBzZWUgaXQgaXMgY2FsbGVkIGZyb20gYSB3b3JrcXVldWUsIHNvIGxldCdzIGtlZXAgaXQgaW4gbWluZCBidXQgZm9jdXMgb24gdGhlIG9uZXMgSSBoYXZlIG1hcmtlZCBhYm92ZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgYmxrZ19jcmVhdGVgIGluIGFuIGVycm9yIHBhdGgsIGFuZCBhbHNvIGBibGtnX2ZyZWVfd29ya2ZuYC4gQWxyaWdodC4gU28sIGtlZXBpbmcgdGhhdCBpbiBtaW5kLCB0aGUga2V5IGZvY3VzIHBvaW50cyBiYXNlZCBvbiB0aGUgcGF0Y2ggc2VlbSB0byBiZSBgYmxrZ19jb25mX3ByZXBgLCBgYmxrY2dfaW5pdF9kaXNrYCwgYW5kIGFsc28gYGJpb19hc3NvY2lhdGVfYmxrZ2AuIEJ1dCB3YWl0Li4uIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGhvdCBwYXRocywgYW5kIGBiaW9fYXNzb2NpYXRlX2Jsa2dgICpzY3JlYW1zKiBob3QgcGF0aC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIHN0ZWVyIGNsZWFyIG9mIHRoYXQgb25lIGZvciBub3cuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAgYSBiaXQgYW5kIGNoZWNrIGZvciBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBBaGEsIGBibGtnX2NyZWF0ZWAsIGBibGtnX2ZyZWVfd29ya2ZuYCwgYW5kIGBibGtnX2ZyZWVfcGRgIGFyZSBhbGwgc3RhdGljLiBUaGF0IG5hcnJvd3MgaXQgZG93biBldmVuIGZ1cnRoZXIuIFNvLCBgYmxrZ19jb25mX3ByZXBgIGFuZCBgYmxrY2dfaW5pdF9kaXNrYCBhcmUgdGhlIHRvcCBjb250ZW5kZXJzLCB0aGVuLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSB0d28gZmlyc3QuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgY29uZmlndXJhdGlvbnMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgYWN0aXZhdGVkIHRvIG1ha2UgYWxsIHRoaXMgd29yazpcblxuKiAgIGBCTEtfQ0dST1VQYFxuKiAgIGBCTEtfREVWX1RIUk9UVExJTkdgXG4qICAgYEJMS19DR1JPVVBfSU9MQVRFTkNZYFxuKiAgIGBCTEtfQ0dST1VQX0lPQ09TVGBcbiogICBgSU9TQ0hFRF9CRlFgXG4qICAgYEJGUV9HUk9VUF9JT1NDSEVEYFxuXG5KdXN0IHRvIGJlIHNhZmUsIEknbSBnb2luZyB0byBxdWlja2x5IHJlLWNoZWNrIGBibG9jay9LY29uZmlnYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA3OjQzOjIzLjYwNjE5OTUzNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2ODc0OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfQ0dST1VQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0zOT1jb25maWcgQkxLX1JRX0FMTE9DX1RJTUVcXG4tLVxcbmJsb2NrL0tjb25maWctNDEtXFxuYmxvY2svS2NvbmZpZzo0Mjpjb25maWcgQkxLX0NHUk9VUF9SV1NUQVRcXG5ibG9jay9LY29uZmlnLTQzLVxcdGJvb2xcXG5ibG9jay9LY29uZmlnLTQ0LVxcbmJsb2NrL0tjb25maWc6NDU6Y29uZmlnIEJMS19DR1JPVVBfUFVOVF9CSU9cXG5ibG9jay9LY29uZmlnLTQ2LVxcdGJvb2xcXG4tLVxcbmJsb2NrL0tjb25maWc9MTI3PWNvbmZpZyBCTEtfV0JUX01RXFxuLS1cXG5ibG9jay9LY29uZmlnLTEzMy1cXG5ibG9jay9LY29uZmlnOjEzNDpjb25maWcgQkxLX0NHUk9VUF9JT0xBVEVOQ1lcXG5ibG9jay9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgbGF0ZW5jeSBiYXNlZCBjZ3JvdXAgSU8gcHJvdGVjdGlvblxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTQ0LVxcbmJsb2NrL0tjb25maWc6MTQ1OmNvbmZpZyBCTEtfQ0dST1VQX0ZDX0FQUElEXFxuYmxvY2svS2NvbmZpZy0xNDYtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgdG8gdHJhY2sgRkMgSS9PIFRyYWZmaWMgYWNyb3NzIGNncm91cCBhcHBsaWNhdGlvbnNcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnLTE1My1cXG5ibG9jay9LY29uZmlnOjE1NDpjb25maWcgQkxLX0NHUk9VUF9JT0NPU1RcXG5ibG9jay9LY29uZmlnLTE1NS1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgY29zdCBtb2RlbCBiYXNlZCBjZ3JvdXAgSU8gY29udHJvbGxlclxcXCJcXG4tLVxcbmJsb2NrL0tjb25maWctMTYzLVxcbmJsb2NrL0tjb25maWc6MTY0OmNvbmZpZyBCTEtfQ0dST1VQX0lPUFJJT1xcbmJsb2NrL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIkNncm91cCBJL08gY29udHJvbGxlciBmb3IgYXNzaWduaW5nIGFuIEkvTyBwcmlvcml0eSBjbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDc6NDM6MjMuNzEzMDgwMzgyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTc2MDI3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJsb2NrIENncm91cCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSBxdWljayBydW5kb3duLiBJdCBzZWVtcyB3ZSBoYXZlIGEgY2FuZGlkYXRlIGZvciBzb21lIGRlY2VudCBmdXp6aW5nLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGEgd2lkZXIgc2V0IG9mIHBvdGVudGlhbCBmZWF0dXJlcyB0byBlbmFibGUsIGluY2x1ZGluZyBgQkxLX0NHUk9VUF9GQ19BUFBJRGAsIGJ1dCB0aGF0IHByb2JhYmx5IGlzbid0IHRoZSBiZXN0IHVzZSBvZiByZXNvdXJjZXMuIExldCdzIGZvY3VzIG9uIHRoZSBtYWluIHBsYXllcnM6IGBCTEtfQ0dST1VQYCwgYEJMS19ERVZfVEhST1RUTElOR2AsIGBCTEtfQ0dST1VQX0lPTEFURU5DWWAsIGBCTEtfQ0dST1VQX0lPQ09TVGAsIGBCTEtfQ0dST1VQX0lPUFJJT2AsIGBJT1NDSEVEX0JGUWAsIGFuZCBgQkZRX0dST1VQX0lPU0NIRURgLiBJJ3ZlIHZlcmlmaWVkIHRoYXQgYGJsa2dfY29uZl9wcmVwYCBpcyBleHBvcnRlZCBhbmQgd2UgY2FuIHVzZSBpdCwgYnV0IGBibGtjZ19pbml0X2Rpc2tgIGlzIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLCBhbHRob3VnaCBpdCAqaXMqIGEgZ2xvYmFsIGZ1bmN0aW9uLlxuXG5UaGUgcmVhbCBrZXkgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgdGhlIGVycm9yIHBhdGhzIHdpdGhpbiBgYmxrZ19jcmVhdGVgLiBUaGF0IG9wZW5zIHVwIHNvbWUgaW50ZXJlc3RpbmcgYXR0YWNrIHZlY3RvcnMsIG5hbWVseSB0aGUgcG90ZW50aWFsIGZvciB0cmlnZ2VyaW5nIGZhaWx1cmVzLCB3aGljaCBpcyBleGNlbGxlbnQgZnV6emluZyBmb2RkZXIuIFdlIGNvdWxkIHBvdGVudGlhbGx5IGhpdCBhbGxvY2F0aW9uIGZhaWx1cmVzIChmYXVsdCBpbmplY3Rpb24gaXMgb3VyIGZyaWVuZCBoZXJlKSwgb3IgYW4gYEVFWElTVGAgZXJyb3IgaW4gYHJhZGl4X3RyZWVfaW5zZXJ0YCBpZiB0aGVyZSdzIGFuIGlzc3VlIHdpdGggYW4gb2xkIGVudHJ5IGhhbmdpbmcgYXJvdW5kLiBUaGVyZSdzIGFsc28gdGhlIGBiZGlfZ2V0YCBmYWlsdXJlIHRvIGtlZXAgaW4gbWluZC4gRmF1bHQgaW5qZWN0aW9uIGZ1enppbmcgc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGVzZSBjb25kaXRpb25zIGZhaXJseSBlYXNpbHksIG1ha2luZyB0aGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciB0aG9yb3VnaCB0ZXN0aW5nLlxuXG5UbyByZWNhcCwgaGVyZSdzIHdoYXQgSSd2ZSBpZGVudGlmaWVkOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuKiAgICoqRm9jdXMgU3ltYm9sczoqKlxuICAgICogICBgYmxrZ19jb25mX3ByZXBgXG4gICAgKiAgIGBibGtjZ19pbml0X2Rpc2tgXG4gICAgKiAgIGBibGtnX2ZyZWVfd29ya2ZuYCAoaW1wb3J0YW50IGR1ZSB0byB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMpXG4qICAgKipFbmFibGUgQ29uZmlnczoqKlxuICAgICogICBgQkxLX0NHUk9VUGBcbiAgICAqICAgYEJMS19ERVZfVEhST1RUTElOR2BcbiAgICAqICAgYEJMS19DR1JPVVBfSU9MQVRFTkNZYFxuICAgICogICBgQkxLX0NHUk9VUF9JT0NPU1RgXG4gICAgKiAgIGBCTEtfQ0dST1VQX0lPUFJJT2BcbiAgICAqICAgYElPU0NIRURfQkZRYFxuICAgICogICBgQkZRX0dST1VQX0lPU0NIRURgXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBibG9jayBjZ3JvdXAgbG9naWMsIGFkZHJlc3NpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcy4gSXQgYWZmZWN0cyBgYmxrZ19jcmVhdGVgIGVycm9yIHBhdGhzIGFuZCB0aGUgc3luY2hyb25vdXMgZnJlZWluZyBvZiBwb2xpY3kgZGF0YSB3aGVuIGBibGtnX2NyZWF0ZWAgZmFpbHMsIGFuZCB0aGUgYXN5bmNocm9ub3VzIGZyZWVpbmcgbG9naWMgaW4gYGJsa2dfZnJlZV93b3JrZm5gLiBUaGUgZmFjdCB0aGF0IGl0IGlzIHJlYWNoZWQgdmlhIGNncm91cCBjb25maWd1cmF0aW9ucyBhbmQgZGlzayBpbml0aWFsaXphdGlvbiBhbmQgdGhhdCB0aGlzIGludHJvZHVjZXMgbmV3IGVycm9yIHBhdGhzIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgd2l0aCBmYXVsdCBpbmplY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjAxLCJPdXRwdXRUb2tlbnMiOjIyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwNzo0MzozOC42ODkxMTA5NDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzIzNjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0NHUk9VUFwiLFxuICAgIFwiQkxLX0RFVl9USFJPVFRMSU5HXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPTEFURU5DWVwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT0NPU1RcIixcbiAgICBcIkJMS19DR1JPVVBfSU9QUklPXCIsXG4gICAgXCJJT1NDSEVEX0JGUVwiLFxuICAgIFwiQkZRX0dST1VQX0lPU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibGtnX2NvbmZfcHJlcFwiLFxuICAgIFwiYmxrY2dfaW5pdF9kaXNrXCIsXG4gICAgXCJibGtnX2ZyZWVfd29ya2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYmxrZ19jcmVhdGUgYW5kIHRoZSBhc3luY2hyb25vdXMgZnJlZWluZyBsb2dpYyBpbiBibGtnX2ZyZWVfd29ya2ZuIHRvIHN5bmNocm9ub3VzbHkgZnJlZSBwb2xpY3kgZGF0YSAocGQpIHdoZW4gYmxrZ19jcmVhdGUgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBjZ3JvdXAgbG9naWMgdGhhdCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVhayB3aGVuIGEgcG9saWN5IGlzIHVucmVnaXN0ZXJlZC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY29uZmlndXJhdGlvbiB3cml0ZXMgYW5kIGRpc2sgaW5pdGlhbGl6YXRpb24sIG1ha2luZyBpdCBzdWl0YWJsZSBmb3IgZnV6emluZywgZXNwZWNpYWxseSB3aXRoIGZhdWx0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfQ0dST1VQXCIsXG4gICAgXCJCTEtfREVWX1RIUk9UVExJTkdcIixcbiAgICBcIkJMS19DR1JPVVBfSU9MQVRFTkNZXCIsXG4gICAgXCJCTEtfQ0dST1VQX0lPQ09TVFwiLFxuICAgIFwiQkxLX0NHUk9VUF9JT1BSSU9cIixcbiAgICBcIklPU0NIRURfQkZRXCIsXG4gICAgXCJCRlFfR1JPVVBfSU9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJsa2dfY29uZl9wcmVwXCIsXG4gICAgXCJibGtjZ19pbml0X2Rpc2tcIixcbiAgICBcImJsa2dfZnJlZV93b3JrZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBibGtnX2NyZWF0ZSBhbmQgdGhlIGFzeW5jaHJvbm91cyBmcmVlaW5nIGxvZ2ljIGluIGJsa2dfZnJlZV93b3JrZm4gdG8gc3luY2hyb25vdXNseSBmcmVlIHBvbGljeSBkYXRhIChwZCkgd2hlbiBibGtnX2NyZWF0ZSBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIGNncm91cCBsb2dpYyB0aGF0IGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrIHdoZW4gYSBwb2xpY3kgaXMgdW5yZWdpc3RlcmVkLiBJdCBpcyByZWFjaGFibGUgdmlhIGNncm91cCBjb25maWd1cmF0aW9uIHdyaXRlcyBhbmQgZGlzayBpbml0aWFsaXphdGlvbiwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciBmdXp6aW5nLCBlc3BlY2lhbGx5IHdpdGggZmF1bHQgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowcpb42[1] Phase: Succeeded StartedAt: 2026-06-22 07:45:43 +0000 UTC FinishedAt: 2026-06-22 07:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 07:45:43 +0000 UTC FinishedAt: 2026-06-22 07:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2] Phase: Succeeded StartedAt: 2026-06-22 07:45:43 +0000 UTC FinishedAt: 2026-06-22 12:10:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-22 07:45:43 +0000 UTC FinishedAt: 2026-06-22 12:10:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 07:45:43 +0000 UTC FinishedAt: 2026-06-22 07:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 07:45:43 +0000 UTC FinishedAt: 2026-06-22 07:45:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcpb42/series-workflowcpb42-convert-artifact-781756059/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 07:45:53 +0000 UTC FinishedAt: 2026-06-22 08:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 07:45:53 +0000 UTC FinishedAt: 2026-06-22 08:07:55 +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:*40172e6b-6e83-4650-9b0b-11250e35bbed,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-workflowcpb42/series-workflowcpb42-convert-artifact-781756059/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": "bd655675-01d7-4bdb-a4cb-a13125fe6c73", "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-workflowcpb42/series-workflowcpb42-build-action-1070478041/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 07:45:53 +0000 UTC FinishedAt: 2026-06-22 08:07:45 +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:*40172e6b-6e83-4650-9b0b-11250e35bbed,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-workflowcpb42/series-workflowcpb42-convert-artifact-781756059/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": "bd655675-01d7-4bdb-a4cb-a13125fe6c73", "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-workflowcpb42/series-workflowcpb42-build-action-1070478041/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 08:07:55 +0000 UTC FinishedAt: 2026-06-22 08:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 08:07:55 +0000 UTC FinishedAt: 2026-06-22 08:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 08:07:55 +0000 UTC FinishedAt: 2026-06-22 08:08:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 08:07:55 +0000 UTC FinishedAt: 2026-06-22 08:08:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcpb42/series-workflowcpb42-convert-artifact-3004710386/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 08:08:15 +0000 UTC FinishedAt: 2026-06-22 08:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 08:08:15 +0000 UTC FinishedAt: 2026-06-22 08:10:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bd655675-01d7-4bdb-a4cb-a13125fe6c73,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-workflowcpb42/series-workflowcpb42-build-action-1070478041/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-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 08:10:27 +0000 UTC FinishedAt: 2026-06-22 08:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 08:10:27 +0000 UTC FinishedAt: 2026-06-22 08:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 08:10:27 +0000 UTC FinishedAt: 2026-06-22 09:05:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 08:10:27 +0000 UTC FinishedAt: 2026-06-22 09:05:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*40172e6b-6e83-4650-9b0b-11250e35bbed,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-workflowcpb42/series-workflowcpb42-convert-artifact-3004710386/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": "fd27f60b-ea0b-4d72-a11f-3cd507d007e5", "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-workflowcpb42/series-workflowcpb42-build-action-1992515971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Failed StartedAt: 2026-06-22 08:10:27 +0000 UTC FinishedAt: 2026-06-22 08:12:48 +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:*40172e6b-6e83-4650-9b0b-11250e35bbed,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-workflowcpb42/series-workflowcpb42-convert-artifact-3004710386/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(1) Phase: Succeeded StartedAt: 2026-06-22 08:21:46 +0000 UTC FinishedAt: 2026-06-22 09:03:52 +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:*40172e6b-6e83-4650-9b0b-11250e35bbed,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-workflowcpb42/series-workflowcpb42-convert-artifact-3004710386/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": "fd27f60b-ea0b-4d72-a11f-3cd507d007e5", "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-workflowcpb42/series-workflowcpb42-build-action-1992515971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-22 09:05:07 +0000 UTC FinishedAt: 2026-06-22 09:05:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-22 09:05:07 +0000 UTC FinishedAt: 2026-06-22 09:05:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-22 09:05:07 +0000 UTC FinishedAt: 2026-06-22 09:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-22 09:05:07 +0000 UTC FinishedAt: 2026-06-22 09:06: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:*fd27f60b-ea0b-4d72-a11f-3cd507d007e5,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-workflowcpb42/series-workflowcpb42-build-action-1992515971/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-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-22 09:07:20 +0000 UTC FinishedAt: 2026-06-22 12:10:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-22 09:07:20 +0000 UTC FinishedAt: 2026-06-22 12:10:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"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:*bd655675-01d7-4bdb-a4cb-a13125fe6c73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fd27f60b-ea0b-4d72-a11f-3cd507d007e5,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-workflowcpb42/series-workflowcpb42-build-action-1070478041/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-workflowcpb42/series-workflowcpb42-build-action-1992515971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-22 09:07:20 +0000 UTC FinishedAt: 2026-06-22 09:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-22 09:07:20 +0000 UTC FinishedAt: 2026-06-22 09:07:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"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-workflowcpb42/series-workflowcpb42-convert-artifact-920204871/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-22 09:07:20 +0000 UTC FinishedAt: 2026-06-22 09:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-22 09:07:20 +0000 UTC FinishedAt: 2026-06-22 09:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-22 09:07:20 +0000 UTC FinishedAt: 2026-06-22 09:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-22 09:07:31 +0000 UTC FinishedAt: 2026-06-22 12:10:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcpb42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["blkg_conf_prep","blkcg_init_disk","blkg_free_workfn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ff6f26c58421614b02694ac9d219ac61d924bc68","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_CGROUP","BLK_DEV_THROTTLING","BLK_CGROUP_IOLATENCY","BLK_CGROUP_IOCOST","BLK_CGROUP_IOPRIO","IOSCHED_BFQ","BFQ_GROUP_IOSCHED"],"series_id":"ceab8ef5-b8b2-478d-b445-4b4df68b1156","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-22 09:07:31 +0000 UTC FinishedAt: 2026-06-22 12:10:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bd655675-01d7-4bdb-a4cb-a13125fe6c73,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fd27f60b-ea0b-4d72-a11f-3cd507d007e5,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-workflowcpb42/series-workflowcpb42-build-action-1070478041/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-workflowcpb42/series-workflowcpb42-build-action-1992515971/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-workflowcpb42/series-workflowcpb42-convert-artifact-920204871/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,}