Name: series-workflowmhv9l Phase: Succeeded StartedAt: 2026-07-07 20:21:10 +0000 UTC FinishedAt: 2026-07-08 01:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[0] Phase: Succeeded StartedAt: 2026-07-07 20:21:10 +0000 UTC FinishedAt: 2026-07-07 20:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 20:21:10 +0000 UTC FinishedAt: 2026-07-07 20:43:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "72bb229f9161a1efcd5df32141b69fcc6ae81a13", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "72bb229f9161a1efcd5df32141b69fcc6ae81a13", "config_name": "upstream-apparmor-kasan.config", "series_id": "a571d2c2-9f25-46e5-8593-a00499c3cefb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__free_to_pcs_batch", "free_to_pcs_bulk", "kmem_cache_free_bulk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mcmVlX3RvX3Bjc19iYXRjaCYjMzQ7LAogICAgJiMzNDtmcmVlX3RvX3Bjc19idWxrJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfZnJlZV9idWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ4OGNmYmRkNTI3N2U0YTkxZjQyNzYyYWY0MTMyZWYyOWZkY2IxOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIwOjQyOjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggNjVmZWJlOTU3ODg2YjIuLjNmMTNmNDk3YWFiNGU1IDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC02MjAzLDUxICYjNDM7NjIwMywyMSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxuIH1cbiBcbiAvKlxuLSAqIEJ1bGsgZnJlZSBvYmplY3RzIHRvIHRoZSBwZXJjcHUgc2hlYXZlcy5cbi0gKiBVbmxpa2UgZnJlZV90b19wY3MoKSB0aGlzIGluY2x1ZGVzIHRoZSBjYWxscyB0byBhbGwgbmVjZXNzYXJ5IGhvb2tzXG4tICogYW5kIHRoZSBmYWxsYmFjayB0byBmcmVlaW5nIHRvIHNsYWIgcGFnZXMuXG4mIzQzOyAqIFRyeSB0byBmcmVlIGFzIG1hbnkgb2JqZWN0cyAoYWxyZWFkeSBwcm9jZXNzZWQgYnkgZnJlZSBob29rcykgYXMgcG9zc2libGUgdG9cbiYjNDM7ICogYSBzaW5nbGUgcGVyLWNwdSBzaGVhZi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyBob3cgbWFueSBvYmplY3RzIHdlcmUgZnJlZWQuIFplcm8gbWVhbnMgZmFpbHVyZSBhbmQgdGhlIGNhbGxlciBzaG91bGRcbiYjNDM7ICogZmFsbCBiYWNrIHRvIF9fa21lbV9jYWNoZV9mcmVlX2J1bGsoKS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19mcmVlX3RvX3Bjc19iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqbWFpbiwgKmVtcHR5O1xuLVx0Ym9vbCBpbml0ID0gc2xhYl93YW50X2luaXRfb25fZnJlZShzKTtcbi1cdHVuc2lnbmVkIGludCBiYXRjaCwgaSA9IDA7XG4gXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xuLVx0dm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07XG4tXHR1bnNpZ25lZCBpbnQgcmVtb3RlX25yID0gMDtcbi1cbi1cdHdoaWxlIChpIFx1MDAzYyBzaXplKSB7XG4tXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuLVxuLVx0XHRtZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICYjNDM7IGksIDEpO1xuLVx0XHRhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAgJiM0MzsgaSwgMSk7XG4tXG4tXHRcdGlmICh1bmxpa2VseSghc2xhYl9mcmVlX2hvb2socywgcFtpXSwgaW5pdCwgZmFsc2UpKSkge1xuLVx0XHRcdHBbaV0gPSBwWy0tc2l6ZV07XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKHVubGlrZWx5KCFjYW5fZnJlZV90b19wY3Moc2xhYikpKSB7XG4tXHRcdFx0cmVtb3RlX29iamVjdHNbcmVtb3RlX25yXSA9IHBbaV07XG4tXHRcdFx0cFtpXSA9IHBbLS1zaXplXTtcbi1cdFx0XHRpZiAoJiM0MzsmIzQzO3JlbW90ZV9uciBcdTAwM2U9IFBDU19CQVRDSF9NQVgpIHtcbi1cdFx0XHRcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcdTAwMjZyZW1vdGVfb2JqZWN0c1swXSk7XG4tXHRcdFx0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xuLVx0XHRcdFx0cmVtb3RlX25yID0gMDtcbi1cdFx0XHR9XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0aSYjNDM7JiM0Mzs7XG4tXHR9XG4tXG4tXHRpZiAoIXNpemUpXG4tXHRcdGdvdG8gZmx1c2hfcmVtb3RlO1xuJiM0MztcdHVuc2lnbmVkIGludCBiYXRjaDtcbiBcbi1uZXh0X2JhdGNoOlxuIFx0aWYgKCFsb2NhbF90cnlsb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpXG4tXHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbiBcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbiBcbkBAIC02MjkzLDI5ICYjNDM7NjI2Myw2NSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4gXG4gXHRzdGF0X2FkZChzLCBGUkVFX0ZBU1RQQVRILCBiYXRjaCk7XG4gXG4tXHRpZiAoYmF0Y2ggXHUwMDNjIHNpemUpIHtcbi1cdFx0cCAmIzQzOz0gYmF0Y2g7XG4tXHRcdHNpemUgLT0gYmF0Y2g7XG4tXHRcdGdvdG8gbmV4dF9iYXRjaDtcbiYjNDM7XHRyZXR1cm4gYmF0Y2g7XG4mIzQzO1xuJiM0Mztub19lbXB0eTpcbiYjNDM7XHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJ1bGsgZnJlZSBvYmplY3RzIHRvIHRoZSBwZXJjcHUgc2hlYXZlcy5cbiYjNDM7ICogVW5saWtlIGZyZWVfdG9fcGNzKCkgdGhpcyBpbmNsdWRlcyB0aGUgY2FsbHMgdG8gYWxsIG5lY2Vzc2FyeSBob29rc1xuJiM0MzsgKiBhbmQgdGhlIGZhbGxiYWNrIHRvIGZyZWVpbmcgdG8gc2xhYiBwYWdlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiYjNDM7e1xuJiM0MztcdGJvb2wgaW5pdCA9IHNsYWJfd2FudF9pbml0X29uX2ZyZWUocyk7XG4mIzQzO1x0dm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgaW50IHJlbW90ZV9uciA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBzaXplOykge1xuJiM0MztcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIocFtpXSk7XG4mIzQzO1xuJiM0MztcdFx0bWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTtcbiYjNDM7XHRcdGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXNsYWJfZnJlZV9ob29rKHMsIHBbaV0sIGluaXQsIGZhbHNlKSkpIHtcbiYjNDM7XHRcdFx0cFtpXSA9IHBbLS1zaXplXTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFjYW5fZnJlZV90b19wY3Moc2xhYikpKSB7XG4mIzQzO1x0XHRcdHJlbW90ZV9vYmplY3RzW3JlbW90ZV9ucl0gPSBwW2ldO1xuJiM0MztcdFx0XHRwW2ldID0gcFstLXNpemVdO1xuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO3JlbW90ZV9uciBcdTAwM2U9IFBDU19CQVRDSF9NQVgpIHtcbiYjNDM7XHRcdFx0XHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHJlbW90ZV9uciwgXHUwMDI2cmVtb3RlX29iamVjdHNbMF0pO1xuJiM0MztcdFx0XHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7XG4mIzQzO1x0XHRcdFx0cmVtb3RlX25yID0gMDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpJiM0MzsmIzQzOztcbiBcdH1cbiBcbi1cdGlmIChyZW1vdGVfbnIpXG4tXHRcdGdvdG8gZmx1c2hfcmVtb3RlO1xuJiM0MztcdHdoaWxlIChzaXplKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgYmF0Y2hfZnJlZWQgPSBfX2ZyZWVfdG9fcGNzX2JhdGNoKHMsIHNpemUsIHApO1xuIFxuLVx0cmV0dXJuO1xuJiM0MztcdFx0aWYgKCFiYXRjaF9mcmVlZClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXG4tbm9fZW1wdHk6XG4tXHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHAgJiM0Mzs9IGJhdGNoX2ZyZWVkO1xuJiM0MztcdFx0c2l6ZSAtPSBiYXRjaF9mcmVlZDtcbiYjNDM7XHR9XG4gXG4tXHQvKlxuLVx0ICogaWYgd2UgZGVwbGV0ZWQgYWxsIGVtcHR5IHNoZWF2ZXMgaW4gdGhlIGJhcm4gb3IgdGhlcmUgYXJlIHRvb1xuLVx0ICogbWFueSBmdWxsIHNoZWF2ZXMsIGZyZWUgdGhlIHJlc3QgdG8gc2xhYiBwYWdlc1xuLVx0ICovXG4tZmFsbGJhY2s6XG4tXHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHNpemUsIHApO1xuLVx0c3RhdF9hZGQocywgRlJFRV9TTE9XUEFUSCwgc2l6ZSk7XG4mIzQzO1x0aWYgKHNpemUpIHtcbiYjNDM7XHRcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgc2l6ZSwgcCk7XG4mIzQzO1x0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCBzaXplKTtcbiYjNDM7XHR9XG4gXG4tZmx1c2hfcmVtb3RlOlxuIFx0aWYgKHJlbW90ZV9ucikge1xuIFx0XHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHJlbW90ZV9uciwgXHUwMDI2cmVtb3RlX29iamVjdHNbMF0pO1xuIFx0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mcmVlX3RvX3Bjc19iYXRjaCYjMzQ7LAogICAgJiMzNDtmcmVlX3RvX3Bjc19idWxrJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfZnJlZV9idWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDg4Y2ZiZGQ1Mjc3ZTRhOTFmNDI3NjJhZjQxMzJlZjI5ZmRjYjE5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMjA6NDI6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggNjVmZWJlOTU3ODg2YjIuLjNmMTNmNDk3YWFiNGU1IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC02MjAzLDUxICYjNDM7NjIwMywyMSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKQogfQogCiAvKgotICogQnVsayBmcmVlIG9iamVjdHMgdG8gdGhlIHBlcmNwdSBzaGVhdmVzLgotICogVW5saWtlIGZyZWVfdG9fcGNzKCkgdGhpcyBpbmNsdWRlcyB0aGUgY2FsbHMgdG8gYWxsIG5lY2Vzc2FyeSBob29rcwotICogYW5kIHRoZSBmYWxsYmFjayB0byBmcmVlaW5nIHRvIHNsYWIgcGFnZXMuCiYjNDM7ICogVHJ5IHRvIGZyZWUgYXMgbWFueSBvYmplY3RzIChhbHJlYWR5IHByb2Nlc3NlZCBieSBmcmVlIGhvb2tzKSBhcyBwb3NzaWJsZSB0bwomIzQzOyAqIGEgc2luZ2xlIHBlci1jcHUgc2hlYWYuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIGhvdyBtYW55IG9iamVjdHMgd2VyZSBmcmVlZC4gWmVybyBtZWFucyBmYWlsdXJlIGFuZCB0aGUgY2FsbGVyIHNob3VsZAomIzQzOyAqIGZhbGwgYmFjayB0byBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKCkuCiAgKi8KLXN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCkKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9fZnJlZV90b19wY3NfYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCkKIHsKIAlzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzOwogCXN0cnVjdCBzbGFiX3NoZWFmICptYWluLCAqZW1wdHk7Ci0JYm9vbCBpbml0ID0gc2xhYl93YW50X2luaXRfb25fZnJlZShzKTsKLQl1bnNpZ25lZCBpbnQgYmF0Y2gsIGkgPSAwOwogCXN0cnVjdCBub2RlX2Jhcm4gKmJhcm47Ci0Jdm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07Ci0JdW5zaWduZWQgaW50IHJlbW90ZV9uciA9IDA7Ci0KLQl3aGlsZSAoaSAmbHQ7IHNpemUpIHsKLQkJc3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIocFtpXSk7Ci0KLQkJbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTsKLQkJYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICYjNDM7IGksIDEpOwotCi0JCWlmICh1bmxpa2VseSghc2xhYl9mcmVlX2hvb2socywgcFtpXSwgaW5pdCwgZmFsc2UpKSkgewotCQkJcFtpXSA9IHBbLS1zaXplXTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KCFjYW5fZnJlZV90b19wY3Moc2xhYikpKSB7Ci0JCQlyZW1vdGVfb2JqZWN0c1tyZW1vdGVfbnJdID0gcFtpXTsKLQkJCXBbaV0gPSBwWy0tc2l6ZV07Ci0JCQlpZiAoJiM0MzsmIzQzO3JlbW90ZV9uciAmZ3Q7PSBQQ1NfQkFUQ0hfTUFYKSB7Ci0JCQkJX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCByZW1vdGVfbnIsICZhbXA7cmVtb3RlX29iamVjdHNbMF0pOwotCQkJCXN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7Ci0JCQkJcmVtb3RlX25yID0gMDsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaSYjNDM7JiM0Mzs7Ci0JfQotCi0JaWYgKCFzaXplKQotCQlnb3RvIGZsdXNoX3JlbW90ZTsKJiM0MzsJdW5zaWduZWQgaW50IGJhdGNoOwogCi1uZXh0X2JhdGNoOgogCWlmICghbG9jYWxfdHJ5bG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSkKLQkJZ290byBmYWxsYmFjazsKJiM0MzsJCXJldHVybiAwOwogCiAJcGNzID0gdGhpc19jcHVfcHRyKHMtJmd0O2NwdV9zaGVhdmVzKTsKIApAQCAtNjI5MywyOSAmIzQzOzYyNjMsNjUgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKQogCiAJc3RhdF9hZGQocywgRlJFRV9GQVNUUEFUSCwgYmF0Y2gpOwogCi0JaWYgKGJhdGNoICZsdDsgc2l6ZSkgewotCQlwICYjNDM7PSBiYXRjaDsKLQkJc2l6ZSAtPSBiYXRjaDsKLQkJZ290byBuZXh0X2JhdGNoOwomIzQzOwlyZXR1cm4gYmF0Y2g7CiYjNDM7CiYjNDM7bm9fZW1wdHk6CiYjNDM7CWxvY2FsX3VubG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQnVsayBmcmVlIG9iamVjdHMgdG8gdGhlIHBlcmNwdSBzaGVhdmVzLgomIzQzOyAqIFVubGlrZSBmcmVlX3RvX3BjcygpIHRoaXMgaW5jbHVkZXMgdGhlIGNhbGxzIHRvIGFsbCBuZWNlc3NhcnkgaG9va3MKJiM0MzsgKiBhbmQgdGhlIGZhbGxiYWNrIHRvIGZyZWVpbmcgdG8gc2xhYiBwYWdlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApCiYjNDM7ewomIzQzOwlib29sIGluaXQgPSBzbGFiX3dhbnRfaW5pdF9vbl9mcmVlKHMpOwomIzQzOwl2b2lkICpyZW1vdGVfb2JqZWN0c1tQQ1NfQkFUQ0hfTUFYXTsKJiM0MzsJdW5zaWduZWQgaW50IHJlbW90ZV9uciA9IDA7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgc2l6ZTspIHsKJiM0MzsJCXN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKHBbaV0pOwomIzQzOwomIzQzOwkJbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTsKJiM0MzsJCWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTsKJiM0MzsKJiM0MzsJCWlmICh1bmxpa2VseSghc2xhYl9mcmVlX2hvb2socywgcFtpXSwgaW5pdCwgZmFsc2UpKSkgewomIzQzOwkJCXBbaV0gPSBwWy0tc2l6ZV07CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAodW5saWtlbHkoIWNhbl9mcmVlX3RvX3BjcyhzbGFiKSkpIHsKJiM0MzsJCQlyZW1vdGVfb2JqZWN0c1tyZW1vdGVfbnJdID0gcFtpXTsKJiM0MzsJCQlwW2ldID0gcFstLXNpemVdOwomIzQzOwkJCWlmICgmIzQzOyYjNDM7cmVtb3RlX25yICZndDs9IFBDU19CQVRDSF9NQVgpIHsKJiM0MzsJCQkJX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCByZW1vdGVfbnIsICZhbXA7cmVtb3RlX29iamVjdHNbMF0pOwomIzQzOwkJCQlzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpOwomIzQzOwkJCQlyZW1vdGVfbnIgPSAwOwomIzQzOwkJCX0KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWkmIzQzOyYjNDM7OwogCX0KIAotCWlmIChyZW1vdGVfbnIpCi0JCWdvdG8gZmx1c2hfcmVtb3RlOwomIzQzOwl3aGlsZSAoc2l6ZSkgewomIzQzOwkJdW5zaWduZWQgaW50IGJhdGNoX2ZyZWVkID0gX19mcmVlX3RvX3Bjc19iYXRjaChzLCBzaXplLCBwKTsKIAotCXJldHVybjsKJiM0MzsJCWlmICghYmF0Y2hfZnJlZWQpCiYjNDM7CQkJYnJlYWs7CiAKLW5vX2VtcHR5OgotCWxvY2FsX3VubG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKTsKJiM0MzsJCXAgJiM0Mzs9IGJhdGNoX2ZyZWVkOwomIzQzOwkJc2l6ZSAtPSBiYXRjaF9mcmVlZDsKJiM0MzsJfQogCi0JLyoKLQkgKiBpZiB3ZSBkZXBsZXRlZCBhbGwgZW1wdHkgc2hlYXZlcyBpbiB0aGUgYmFybiBvciB0aGVyZSBhcmUgdG9vCi0JICogbWFueSBmdWxsIHNoZWF2ZXMsIGZyZWUgdGhlIHJlc3QgdG8gc2xhYiBwYWdlcwotCSAqLwotZmFsbGJhY2s6Ci0JX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCBzaXplLCBwKTsKLQlzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCBzaXplKTsKJiM0MzsJaWYgKHNpemUpIHsKJiM0MzsJCV9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgc2l6ZSwgcCk7CiYjNDM7CQlzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCBzaXplKTsKJiM0MzsJfQogCi1mbHVzaF9yZW1vdGU6CiAJaWYgKHJlbW90ZV9ucikgewogCQlfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHJlbW90ZV9uciwgJmFtcDtyZW1vdGVfb2JqZWN0c1swXSk7CiAJCXN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgY2xlYXJseSBtZXNzaW5nIHdpdGggdGhlIFNMVUIgYWxsb2NhdG9yIOKAkyB0aGF0JiMzOTtzIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gdGhpcyBpcyBoaWdoLXZhbHVlIHN0dWZmLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlZmFjdG9yaW5nIGBmcmVlX3RvX3Bjc19idWxrYC4gVGhlIHBhdGNoIHNwbGl0cyBvZmYgYF9fZnJlZV90b19wY3NfYmF0Y2hgLCB3aGljaCBpbXBsaWVzIHRoZXkmIzM5O3JlIGNoYW5naW5nIGhvdyBvYmplY3RzIGFyZSBmcmVlZCBpbiBidWxrIGludG8gcGVyLWNwdSBzaGVhdmVzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBkZWVwIGRpdmUgYW5kLCBmcmFua2x5LCBuZWVkcyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzLgoKTGV0IG1lIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zOiBgZnJlZV90b19wY3NfYnVsa2AgYW5kIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIFNMVUIgaXMgdGhlIGRlZmF1bHQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGVuYWJsZWQuIEhvd2V2ZXIsIHRoZSB1c2Ugb2YgcGVyLWNwdSBzaGVhdmVzIChQQ1MpIGdpdmVzIG1lIHBhdXNlIOKAkyBpdCBtaWdodCBiZSBiZWhpbmQgYSBjb25maWd1cmF0aW9uIGZsYWcuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIGBtbS9zbHViLmNgIHF1aWNrbHksIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aG9zZSBmdW5jdGlvbiBuYW1lcyBhbmQgbWVudGlvbnMgb2YgYGNwdV9zaGVhdmVzYCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscyBvciBvdGhlciBudWFuY2VzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX3RvX3Bjc19idWxrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz02MjEyPXN0YXRpYyB1bnNpZ25lZCBpbnQgX19mcmVlX3RvX3Bjc19iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuLS1cbm1tL3NsdWIuYy02Mjc4LSAqL1xubW0vc2x1Yi5jOjYyNzk6c3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxubW0vc2x1Yi5jLTYyODAte1xuLS1cbm1tL3NsdWIuYz03MTU5PXZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNzE2OC1cdGlmIChzIFx1MDAyNlx1MDAyNiBjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xubW0vc2x1Yi5jOjcxNjk6XHRcdGZyZWVfdG9fcGNzX2J1bGsocywgc2l6ZSwgcCk7XG5tbS9zbHViLmMtNzE3MC1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFNsdWIgQ2FjaGUgTGFuZHNjYXBlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBjYWNoZV9oYXNfc2hlYXZlc2Agb3IgYGNwdV9zaGVhdmVzYCBpcyBkZWZpbmVkIGFueXdoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBpbiB0aGUgdXN1YWwgc3VzcGVjdHMsIHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCBvZiBzaGVhdmVzIGFuZCBob3cgdGhvc2Ugc3RydWN0dXJlcyBtaWdodCBiZSBtYW5hZ2VkLCB0aGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSWYgaXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdGhlcmUsIEkmIzM5O2xsIHRoZW4gbW92ZSBvbiB0byBgbW0vS2NvbmZpZ2AuIEl04oCZcyBsaWtlbHkgb25lIG9mIHRoZXNlIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gZGV0ZXJtaW5pbmcgdGhlIHVzZSBvciBoYW5kbGluZyBvZiBzaGVhdmVzIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FjaGVfaGFzX3NoZWF2ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYi5oPTIyMj1zdHJ1Y3Qga21lbV9jYWNoZSB7XG4tLVxubW0vc2xhYi5oLTI4My0gKi9cbm1tL3NsYWIuaDoyODQ6c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2xhYi5oLTI4NS17XG4tLVxubW0vc2xhYl9jb21tb24uYz0yMTEwPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2xhYl9jb21tb24uYy0yMTExLXtcbm1tL3NsYWJfY29tbW9uLmM6MjExMjpcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xubW0vc2xhYl9jb21tb24uYy0yMTEzLVx0XHRjcHVzX3JlYWRfbG9jaygpO1xuLS1cbm1tL3NsdWIuYz0zMDQxPXN0YXRpYyB2b2lkIHBjc19kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy0zMDUyLVx0LyogcGNzLVx1MDAzZW1haW4gY2FuIG9ubHkgcG9pbnQgdG8gdGhlIGJvb3RzdHJhcCBzaGVhZiwgbm90aGluZyB0byBmcmVlICovXG5tbS9zbHViLmM6MzA1MzpcdGlmICghY2FjaGVfaGFzX3NoZWF2ZXMocykpXG5tbS9zbHViLmMtMzA1NC1cdFx0Z290byBmcmVlX3Bjcztcbi0tXG5tbS9zbHViLmM9Mzk4Mj1zdGF0aWMgYm9vbCBoYXNfcGNzX3VzZWQoaW50IGNwdSwgc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTM5ODUtXG5tbS9zbHViLmM6Mzk4NjpcdGlmICghY2FjaGVfaGFzX3NoZWF2ZXMocykpXG5tbS9zbHViLmMtMzk4Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3NsdWIuYz0zOTk5PXN0YXRpYyB2b2lkIGZsdXNoX2NwdV9zaGVhdmVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS9zbHViLmMtNDAwNy1cbm1tL3NsdWIuYzo0MDA4Olx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKVxubW0vc2x1Yi5jLTQwMDktXHRcdHBjc19mbHVzaF9hbGwocyk7XG4tLVxubW0vc2x1Yi5jPTQxMDQ9dm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZClcbi0tXG5tbS9zbHViLmMtNDExMS1cdGxpc3RfZm9yX2VhY2hfZW50cnkocywgXHUwMDI2c2xhYl9jYWNoZXMsIGxpc3QpIHtcbm1tL3NsdWIuYzo0MTEyOlx0XHRpZiAoIWNhY2hlX2hhc19zaGVhdmVzKHMpKVxubW0vc2x1Yi5jLTQxMTMtXHRcdFx0Y29udGludWU7XG4tLVxubW0vc2x1Yi5jPTQxMjM9c3RhdGljIGludCBzbHViX2NwdV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm1tL3NsdWIuYy00MTQ2LVx0XHQgKi9cbm1tL3NsdWIuYzo0MTQ3Olx0XHRpZiAoIWNhY2hlX2hhc19zaGVhdmVzKHMpIHx8IGdldF9iYXJuX25vZGUocywgbmlkKSlcbm1tL3NsdWIuYy00MTQ4LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3NsdWIuYz00MTcyPXN0YXRpYyBpbnQgc2x1Yl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm1tL3NsdWIuYy00MTc3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcdTAwMjZzbGFiX2NhY2hlcywgbGlzdCkge1xubW0vc2x1Yi5jOjQxNzg6XHRcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSlcbm1tL3NsdWIuYy00MTc5LVx0XHRcdF9fcGNzX2ZsdXNoX2FsbF9jcHUocywgY3B1KTtcbi0tXG5tbS9zbHViLmM9NDY0Mz1fX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXG4tLVxubW0vc2x1Yi5jLTQ2NTMtXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXG5tbS9zbHViLmM6NDY1NDpcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5tbS9zbHViLmMtNDY1NS1cdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4tLVxubW0vc2x1Yi5jPTQ4MzE9dW5zaWduZWQgaW50IGFsbG9jX2Zyb21fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNDg0OC1cbm1tL3NsdWIuYzo0ODQ5Olx0XHRpZiAodW5saWtlbHkoIWNhY2hlX2hhc19zaGVhdmVzKHMpKSkge1xubW0vc2x1Yi5jLTQ4NTAtXHRcdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4tLVxubW0vc2x1Yi5jPTU4MzU9X19wY3NfcmVwbGFjZV9mdWxsX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXG4tLVxubW0vc2x1Yi5jLTU4NDUtXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXG5tbS9zbHViLmM6NTg0NjpcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5tbS9zbHViLmMtNTg0Ny1cdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4tLVxubW0vc2x1Yi5jPTYwNTM9Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuLS1cbm1tL3NsdWIuYy02MDczLVx0XHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGZhbGwgYmFjayAqL1xubW0vc2x1Yi5jOjYwNzQ6XHRcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5tbS9zbHViLmMtNjA3NS1cdFx0XHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbi0tXG5tbS9zbHViLmM9NzE1OT12b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxubW0vc2x1Yi5jLTcxNjctXHQgKi9cbm1tL3NsdWIuYzo3MTY4Olx0aWYgKHMgXHUwMDI2XHUwMDI2IGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XG5tbS9zbHViLmMtNzE2OS1cdFx0ZnJlZV90b19wY3NfYnVsayhzLCBzaXplLCBwKTtcbi0tXG5tbS9zbHViLmM9Nzc1Nz1zdGF0aWMgaW50IGluaXRfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNzc3Ny1cbm1tL3NsdWIuYzo3Nzc4Olx0aWYgKHNsYWJfc3RhdGUgPT0gRE9XTiB8fCAhY2FjaGVfaGFzX3NoZWF2ZXMocykpXG5tbS9zbHViLmMtNzc3OS1cdFx0cmV0dXJuIDE7XG4tLVxubW0vc2x1Yi5jPTgwNzA9aW50IF9fa21lbV9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODA3Ny1cdC8qIHdlIG1pZ2h0IGhhdmUgcmN1IHNoZWF2ZXMgaW4gZmxpZ2h0ICovXG5tbS9zbHViLmM6ODA3ODpcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSlcbm1tL3NsdWIuYy04MDc5LVx0XHRyY3VfYmFycmllcigpO1xuLS1cbm1tL3NsdWIuYz04Mzc2PXN0YXRpYyBpbnQgc2xhYl9tZW1fZ29pbmdfb25saW5lX2NhbGxiYWNrKGludCBuaWQpXG4tLVxubW0vc2x1Yi5jLTgzOTctXG5tbS9zbHViLmM6ODM5ODpcdFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpIFx1MDAyNlx1MDAyNiAhZ2V0X2Jhcm5fbm9kZShzLCBuaWQpKSB7XG5tbS9zbHViLmMtODM5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGBjYWNoZV9oYXNfc2hlYXZlc2AgaW4gYG1tL3NsYWIuaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBzbGFiIGFsbG9jYXRvciBoYW5kbGVzIHNoZWF2ZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgaW50byB0aGUgYG1tL3NsYWIuaGAgaGVhZGVyIGZpbGUuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBgY2FjaGVfaGFzX3NoZWF2ZXNgIGFjdHVhbGx5ICptZWFucyogaW4gdGhlIGNvbnRleHQgb2Ygc2xhYiBhbGxvY2F0aW9uLiBJcyBpdCBhIGJvb2xlYW4/IEFuIGVudW0/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSBjYWNoZSAqaGF2aW5nKiBzaGVhdmVzPyBEb2VzIGl0IHJlbGF0ZSB0byBwYWdlIGZyYWdtZW50YXRpb24gb3IgTlVNQSBhZmZpbml0eSBpbiBhbnkgd2F5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIHRvIHJlYXNvbiBhYm91dCB0aGUgbGFyZ2VyIHNsYWIgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZywgdGhhdCBpdCBpcyBsaWtlbHkgYSBib29sZWFuIHZhcmlhYmxlIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2FjaGUgaXMgdXNpbmcgc2hlYXZlcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZmxhZyBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgc2xhYiBhbGxvY2F0b3IgYXQgYm90aCBhbGxvY2F0aW9uIGFuZCBmcmVlIHRpbWUuIEVzc2VudGlhbGx5LCBJIGFtIHNlZWtpbmcgYSBjbGVhciBkZWZpbml0aW9uIGFuZCBjb250ZXh0IHRvIGZyYW1lIHRoZSBmb2xsb3dpbmcgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWIuaD0yMjI9c3RydWN0IGttZW1fY2FjaGUge1xuLS1cbm1tL3NsYWIuaC0yODMtICovXG5tbS9zbGFiLmg6Mjg0OnN0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9oYXNfc2hlYXZlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWIuaC0yODUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS9zbGFiLmhgKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG1tL3NsYWIuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMjg0LiBUaGF0IHNlY3Rpb24gbGlrZWx5IGNvbnRhaW5zIHNvbWUgY3J1Y2lhbCBkZXRhaWxzIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSXQgY291bGQgYmUgb2JqZWN0IGFsbG9jYXRpb24sIGNhY2hlIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHdpdGhpbiB0aGUgU0xBQiBhbGxvY2F0b3ImIzM5O3MgcHVydmlldy4gS25vd2luZyB0aGUgY29udGV4dCwgdGhhdCBsb2NhdGlvbiBzaG91bGQgcHJvdmlkZSBzb21lIGhlbHBmdWwgaW5mb3JtYXRpb24gdG8gZ2V0IG1lIHN0YXJ0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbGFiLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFxuIDI3MTpcdCNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xuIDI3MjpcdFx0c3RydWN0IGttZW1fY2FjaGVfc3RhdHMgX19wZXJjcHUgKmNwdV9zdGF0cztcbiAyNzM6XHQjZW5kaWZcbiAyNzQ6XHRcbiAyNzU6XHRcdHN0cnVjdCBrbWVtX2NhY2hlX3Blcl9ub2RlX3B0cnMgcGVyX25vZGVbTUFYX05VTU5PREVTXTtcbiAyNzY6XHR9O1xuIDI3NzpcdFxuIDI3ODpcdC8qXG4gMjc5Olx0ICogRXZlcnkgY2FjaGUgaGFzICFOVUxMIHMtXHUwMDNlY3B1X3NoZWF2ZXMgYnV0IHRoZXkgbWF5IHBvaW50IHRvIHRoZVxuIDI4MDpcdCAqIGJvb3RzdHJhcF9zaGVhZiB0ZW1wb3JhcmlseSBkdXJpbmcgaW5pdCwgb3IgcGVybWFuZW50bHkgZm9yIHRoZSBib290IGNhY2hlc1xuIDI4MTpcdCAqIGFuZCBjYWNoZXMgd2l0aCBkZWJ1Z2dpbmcgZW5hYmxlZCwgb3IgYWxsIGNhY2hlcyB3aXRoIENPTkZJR19TTFVCX1RJTlkuIFRoaXNcbiAyODI6XHQgKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cbiAyODM6XHQgKi9cbiAyODQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfaGFzX3NoZWF2ZXMoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gMjg1Olx0e1xuIDI4NjpcdFx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXG4gMjg3Olx0XHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgXHUwMDI2XHUwMDI2IHMtXHUwMDNlc2hlYWZfY2FwYWNpdHk7XG4gMjg4Olx0fVxuIDI4OTpcdFxuIDI5MDpcdCNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19TTFVCX1RJTlkpXG4gMjkxOlx0I2RlZmluZSBTTEFCX1NVUFBPUlRTX1NZU0ZTIDFcbiAyOTI6XHR2b2lkIHN5c2ZzX3NsYWJfdW5saW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbiAyOTM6XHR2b2lkIHN5c2ZzX3NsYWJfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XG4gMjk0Olx0aW50IHN5c2ZzX3NsYWJfYWxpYXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUpO1xuIDI5NTpcdCNlbHNlXG4gMjk2Olx0c3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3NsYWJfdW5saW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKSB7IH1cbiAyOTc6XHRzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKSB7IH1cbiAyOTg6XHRzdGF0aWMgaW5saW5lIGludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lKVxuIDI5OTpcdFx0XHRcdFx0XHRcdFx0eyByZXR1cm4gMDsgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTFVCIE1lbW9yeSBNYW5hZ2VtZW50IGZvciBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGBjYWNoZV9oYXNfc2hlYXZlc2AgaXMgdHJ1ZSB3aGVuIGBDT05GSUdfU0xVQl9USU5ZYCBpcyAqbm90KiBlbmFibGVkLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBJdCBzZWVtcyBsaWtlIHRoZSBzdGFuZGFyZCBTTFVCIGNvbmZpZ3VyYXRpb24gaXMgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVubGVzcyBgQ09ORklHX1NMVUJfVElOWWAgaXMgZXhwbGljaXRseSBzZXQsIGFuZCBpZiB3ZSBhcmUgc2VlaW5nIGEgZGVmYXVsdCBjb25maWcsIHdlIGFyZSBwcm9iYWJseSBub3QgdXNpbmcgdGhlIFRJTlkgY29uZmlnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IGBDT05GSUdfU0xVQmAgaXMgdGhlIGRlZmF1bHQsIGJ1dCBhcmUgdGhlcmUgb3RoZXIsIHBvdGVudGlhbGx5IGxlc3MgY29tbW9uIG9uZXMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIGhlcmU/IExldCBtZSBjaGVjaywganVzdCB0byBiZSB0aG9yb3VnaC4KClRoZSBwYXRjaCBmb2N1c2VzIG9uIGBmcmVlX3RvX3Bjc19idWxrYCBhbmQgYF9fZnJlZV90b19wY3NfYmF0Y2hgLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBhYm91dCBidWxrIGZyZWVpbmcgd2l0aGluIFNMVUIuIE5vdywgYXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGJ1bGsgZnJlZWluZyBleHBsaWNpdGx5PyBObywgaXQgbG9va3MgbGlrZSB0aGF0JiMzOTtzIHN0YW5kYXJkIEFQSSBiZWhhdmlvciBmb3IgU0xVQiwgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgY29uZmlnLCBvdGhlciB0aGFuIGJlaW5nIGVuYWJsZWQgdW5sZXNzIHlvdSYjMzk7cmUgdXNpbmcgU0xVQl9USU5ZLiBTaW1pbGFybHksIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHNoZWF2ZXMgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIG90aGVyIHRoYW4gU0xVQiYjMzk7cyBkZWZhdWx0IGJlaGF2aW9yLgoKTXkgaW1tZWRpYXRlIGZvY3VzIGhlcmUgbmVlZHMgdG8gYmUgb24gdGhlc2UgdGhyZWUgc3ltYm9sczogYGZyZWVfdG9fcGNzX2J1bGtgLCBgX19mcmVlX3RvX3Bjc19iYXRjaGAsIGFuZCBga21lbV9jYWNoZV9mcmVlX2J1bGtgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCBhbmQgYGZyZWVfdG9fcGNzX2J1bGtgIGFyZSBpbmRlZWQgc3RhdGljIGZ1bmN0aW9ucy4gWWVzLCB0aGV5IGFyZS4gVGhhdCYjMzk7cyBnb29kLiBXaGljaCBtZWFucyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byBleHBsb3JlIGlzIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuIFN5emthbGxlciAqY2FuKiB0YXJnZXQgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5JiMzOTtyZSBpbiB0aGUga2VybmVsIGltYWdlLCBzbyBsaXN0aW5nIHRoZSBgX19mcmVlX3RvX3Bjc19iYXRjaGAgYW5kIGBmcmVlX3RvX3Bjc19idWxrYCBzeW1ib2xzIGlzIGhlbHBmdWwsIGFuZCBJJiMzOTtsbCBpbmNsdWRlIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AganVzdCBpbiBjYXNlLgoKT25lIGxhc3QgdGhpbmcsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19mcmVlX3RvX3Bjc19iYXRjaGAgaW4gYG1tL3NsdWIuY2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZyZWVfdG9fcGNzX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz02MTU0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBjYW5fZnJlZV90b19wY3Moc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTYyMTEtICovXG5tbS9zbHViLmM6NjIxMjpzdGF0aWMgdW5zaWduZWQgaW50IF9fZnJlZV90b19wY3NfYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbm1tL3NsdWIuYy02MjEzLXtcbi0tXG5tbS9zbHViLmM9NjI3OT1zdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxubW0vc2x1Yi5jLTYzMTAtXHR3aGlsZSAoc2l6ZSkge1xubW0vc2x1Yi5jOjYzMTE6XHRcdHVuc2lnbmVkIGludCBiYXRjaF9mcmVlZCA9IF9fZnJlZV90b19wY3NfYmF0Y2gocywgc2l6ZSwgcCk7XG5tbS9zbHViLmMtNjMxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtZXNzaW5nIHdpdGggdGhlIGNvcmUgbWVtb3J5IGFsbG9jYXRvciwgd2hpY2ggbWVhbnMgaXTigJlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gc3ViamVjdCB0byBzb21lIHNlcmlvdXMgZnV6emluZy4gVGhlIGZ1bmN0aW9uYWxpdHkgaXMgdGhlcmUsIGFuZCB0aGF04oCZcyB0aGUgbWFpbiB0aGluZy4gSSYjMzk7bSBzZWVpbmcgdGhyZWUga2V5IHN5bWJvbHMgSSBzaG91bGQgZm9jdXMgb246IGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCwgYGZyZWVfdG9fcGNzX2J1bGtgLCBhbmQgYGttZW1fY2FjaGVfZnJlZV9idWxrYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgZW50cnkgcG9pbnRzIHRvIHByb2JlLgoKQXMgZm9yIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2Ugd2UgZG9uJiMzOTt0IG5lZWQgYW55dGhpbmcgc3BlY2lhbCBoZXJlLCB3aGljaCBpcyBhIHJlbGllZi4gU3RhbmRhcmQgU0xVQiBzaG91bGQgYmUgc3VmZmljaWVudDsgZ29vZCB0aGluZyBTTFVCIGlzIHRoZSBkZWZhdWx0IHRoZXNlIGRheXMuIE5vIG5lZWQgdG8gc3BlY2lmeSBhbnl0aGluZyBpbiB0aGUgRW5hYmxlQ29uZmlncyBzZWN0aW9uLgoKV2FpdCBhIG1pbnV0ZSwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19TTFVCYCBpc24mIzM5O3QgKmV4cGxpY2l0bHkqIHJlcXVpcmVkLiBXaGlsZSBTTFVCIGlzIHRoZSBkZWZhdWx0IG5vdyB0aGF0IFNMQUIgYW5kIFNMT0IgYXJlIGdvbmUsIGJldHRlciBzYWZlIHRoYW4gc29ycnkuIExldCBtZSBqdXN0IHRha2UgYSBxdWljayBwZWVrIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1NMVUJgIGV4aXN0cyBpbiB0aGUgc3lzdGVtIG9yIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0xVQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNjY9bWVudSBcJiMzNDtTbGFiIGFsbG9jYXRvciBvcHRpb25zXCYjMzQ7XG5tbS9LY29uZmlnLTE2Ny1cbm1tL0tjb25maWc6MTY4OmNvbmZpZyBTTFVCXG5tbS9LY29uZmlnLTE2OS1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnPTE3Mj1jb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG4tLVxubW0vS2NvbmZpZy0xNzYtXG5tbS9LY29uZmlnOjE3Nzpjb25maWcgU0xVQl9USU5ZXG5tbS9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7Q29uZmlndXJlIGZvciBtaW5pbWFsIG1lbW9yeSBmb290cHJpbnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTIyMT1jb25maWcgU0xBQl9CVUNLRVRTXG4tLVxubW0vS2NvbmZpZy0yMzctXG5tbS9LY29uZmlnOjIzODpjb25maWcgU0xVQl9TVEFUU1xubW0vS2NvbmZpZy0yMzktXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYwMAoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTFVCIFBhdGNoKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGNoZWNrIGNvbmZpcm1zIGl0OiBgU0xVQmAgaXMgaW5kZWVkIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzIGZvciBub3cuCgpMZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBtb2RpZnlpbmcgdGhlIGJ1bGsgZnJlZWluZyBsb2dpYyB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHNwbGl0dGluZyBgZnJlZV90b19wY3NfYnVsa2AgaW50byB0d28gZnVuY3Rpb25zOiB0aGUgb3JpZ2luYWwgYGZyZWVfdG9fcGNzX2J1bGtgIGFuZCBhIG5ldyBgX19mcmVlX3RvX3Bjc19iYXRjaGAuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSByZWZhY3RvcmluZyBvZiBzb3J0cywgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb3JlLgoKTXkgdGhpbmtpbmcgaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by4gU2luY2UgdGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIHBhdGgsIGl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBob3cgU0xVQiBmcmVlcyBtZW1vcnkuIEV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGxpa2UgYF9fZnJlZV90b19wY3NfYmF0Y2hgIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBpbiB0aGUgbWVtb3J5IGZyZWVpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLgoKTXkgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczogYF9fZnJlZV90b19wY3NfYmF0Y2hgLCBgZnJlZV90b19wY3NfYnVsa2AsIGFuZCwgb2YgY291cnNlLCB0aGUgY2FsbGluZyBmdW5jdGlvbiBga21lbV9jYWNoZV9mcmVlX2J1bGtgLiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgb24uIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZyZWVfdG9fcGNzX2JhdGNoJiMzNDssCiAgICAmIzM0O2ZyZWVfdG9fcGNzX2J1bGsmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9mcmVlX2J1bGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJ1bGsgZnJlZWluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgYnkgZXh0cmFjdGluZyBhIGJhdGNoIHByb2Nlc3NpbmcgZnVuY3Rpb24gYF9fZnJlZV90b19wY3NfYmF0Y2hgLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIG1lbW9yeSBmcmVlaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZnJlZV90b19wY3NfYmF0Y2gmIzM0OywKICAgICYjMzQ7ZnJlZV90b19wY3NfYnVsayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2ZyZWVfYnVsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYnVsayBmcmVlaW5nIGxvZ2ljIGluIHRoZSBTTFVCIGFsbG9jYXRvciBieSBleHRyYWN0aW5nIGEgYmF0Y2ggcHJvY2Vzc2luZyBmdW5jdGlvbiBgX19mcmVlX3RvX3Bjc19iYXRjaGAuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGttZW1fY2FjaGVfZnJlZV9idWxrYCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gbWVtb3J5IGZyZWVpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0Mjo0OS44NDU2MTczNTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM0Njk5Mzk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZyZWVfdG9fcGNzX2JhdGNoXCIsXG4gICAgXCJmcmVlX3RvX3Bjc19idWxrXCIsXG4gICAgXCJrbWVtX2NhY2hlX2ZyZWVfYnVsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDI6NDkuODQ1NjIzNzk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjc5MTU3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkODhjZmJkZDUyNzdlNGE5MWY0Mjc2MmFmNDEzMmVmMjlmZGNiMTk5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjA6NDI6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggNjVmZWJlOTU3ODg2YjIuLjNmMTNmNDk3YWFiNGU1IDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC02MjAzLDUxICs2MjAzLDIxIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBjYW5fZnJlZV90b19wY3Moc3RydWN0IHNsYWIgKnNsYWIpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIEJ1bGsgZnJlZSBvYmplY3RzIHRvIHRoZSBwZXJjcHUgc2hlYXZlcy5cXG4tICogVW5saWtlIGZyZWVfdG9fcGNzKCkgdGhpcyBpbmNsdWRlcyB0aGUgY2FsbHMgdG8gYWxsIG5lY2Vzc2FyeSBob29rc1xcbi0gKiBhbmQgdGhlIGZhbGxiYWNrIHRvIGZyZWVpbmcgdG8gc2xhYiBwYWdlcy5cXG4rICogVHJ5IHRvIGZyZWUgYXMgbWFueSBvYmplY3RzIChhbHJlYWR5IHByb2Nlc3NlZCBieSBmcmVlIGhvb2tzKSBhcyBwb3NzaWJsZSB0b1xcbisgKiBhIHNpbmdsZSBwZXItY3B1IHNoZWFmLlxcbisgKlxcbisgKiBSZXR1cm5zIGhvdyBtYW55IG9iamVjdHMgd2VyZSBmcmVlZC4gWmVybyBtZWFucyBmYWlsdXJlIGFuZCB0aGUgY2FsbGVyIHNob3VsZFxcbisgKiBmYWxsIGJhY2sgdG8gX19rbWVtX2NhY2hlX2ZyZWVfYnVsaygpLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IF9fZnJlZV90b19wY3NfYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzO1xcbiBcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqbWFpbiwgKmVtcHR5O1xcbi1cXHRib29sIGluaXQgPSBzbGFiX3dhbnRfaW5pdF9vbl9mcmVlKHMpO1xcbi1cXHR1bnNpZ25lZCBpbnQgYmF0Y2gsIGkgPSAwO1xcbiBcXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xcbi1cXHR2b2lkICpyZW1vdGVfb2JqZWN0c1tQQ1NfQkFUQ0hfTUFYXTtcXG4tXFx0dW5zaWduZWQgaW50IHJlbW90ZV9uciA9IDA7XFxuLVxcbi1cXHR3aGlsZSAoaSBcXHUwMDNjIHNpemUpIHtcXG4tXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIocFtpXSk7XFxuLVxcbi1cXHRcXHRtZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICsgaSwgMSk7XFxuLVxcdFxcdGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCArIGksIDEpO1xcbi1cXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCBmYWxzZSkpKSB7XFxuLVxcdFxcdFxcdHBbaV0gPSBwWy0tc2l6ZV07XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRpZiAodW5saWtlbHkoIWNhbl9mcmVlX3RvX3BjcyhzbGFiKSkpIHtcXG4tXFx0XFx0XFx0cmVtb3RlX29iamVjdHNbcmVtb3RlX25yXSA9IHBbaV07XFxuLVxcdFxcdFxcdHBbaV0gPSBwWy0tc2l6ZV07XFxuLVxcdFxcdFxcdGlmICgrK3JlbW90ZV9uciBcXHUwMDNlPSBQQ1NfQkFUQ0hfTUFYKSB7XFxuLVxcdFxcdFxcdFxcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcXHUwMDI2cmVtb3RlX29iamVjdHNbMF0pO1xcbi1cXHRcXHRcXHRcXHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xcbi1cXHRcXHRcXHRcXHRyZW1vdGVfbnIgPSAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRpKys7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghc2l6ZSlcXG4tXFx0XFx0Z290byBmbHVzaF9yZW1vdGU7XFxuK1xcdHVuc2lnbmVkIGludCBiYXRjaDtcXG4gXFxuLW5leHRfYmF0Y2g6XFxuIFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKVxcbi1cXHRcXHRnb3RvIGZhbGxiYWNrO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVxcdTAwM2VjcHVfc2hlYXZlcyk7XFxuIFxcbkBAIC02MjkzLDI5ICs2MjYzLDY1IEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4gXFxuIFxcdHN0YXRfYWRkKHMsIEZSRUVfRkFTVFBBVEgsIGJhdGNoKTtcXG4gXFxuLVxcdGlmIChiYXRjaCBcXHUwMDNjIHNpemUpIHtcXG4tXFx0XFx0cCArPSBiYXRjaDtcXG4tXFx0XFx0c2l6ZSAtPSBiYXRjaDtcXG4tXFx0XFx0Z290byBuZXh0X2JhdGNoO1xcbitcXHRyZXR1cm4gYmF0Y2g7XFxuK1xcbitub19lbXB0eTpcXG4rXFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogQnVsayBmcmVlIG9iamVjdHMgdG8gdGhlIHBlcmNwdSBzaGVhdmVzLlxcbisgKiBVbmxpa2UgZnJlZV90b19wY3MoKSB0aGlzIGluY2x1ZGVzIHRoZSBjYWxscyB0byBhbGwgbmVjZXNzYXJ5IGhvb2tzXFxuKyAqIGFuZCB0aGUgZmFsbGJhY2sgdG8gZnJlZWluZyB0byBzbGFiIHBhZ2VzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbit7XFxuK1xcdGJvb2wgaW5pdCA9IHNsYWJfd2FudF9pbml0X29uX2ZyZWUocyk7XFxuK1xcdHZvaWQgKnJlbW90ZV9vYmplY3RzW1BDU19CQVRDSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBpbnQgcmVtb3RlX25yID0gMDtcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTspIHtcXG4rXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIocFtpXSk7XFxuK1xcbitcXHRcXHRtZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICsgaSwgMSk7XFxuK1xcdFxcdGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCArIGksIDEpO1xcbitcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCBmYWxzZSkpKSB7XFxuK1xcdFxcdFxcdHBbaV0gPSBwWy0tc2l6ZV07XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAodW5saWtlbHkoIWNhbl9mcmVlX3RvX3BjcyhzbGFiKSkpIHtcXG4rXFx0XFx0XFx0cmVtb3RlX29iamVjdHNbcmVtb3RlX25yXSA9IHBbaV07XFxuK1xcdFxcdFxcdHBbaV0gPSBwWy0tc2l6ZV07XFxuK1xcdFxcdFxcdGlmICgrK3JlbW90ZV9uciBcXHUwMDNlPSBQQ1NfQkFUQ0hfTUFYKSB7XFxuK1xcdFxcdFxcdFxcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcXHUwMDI2cmVtb3RlX29iamVjdHNbMF0pO1xcbitcXHRcXHRcXHRcXHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xcbitcXHRcXHRcXHRcXHRyZW1vdGVfbnIgPSAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpKys7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChyZW1vdGVfbnIpXFxuLVxcdFxcdGdvdG8gZmx1c2hfcmVtb3RlO1xcbitcXHR3aGlsZSAoc2l6ZSkge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2hfZnJlZWQgPSBfX2ZyZWVfdG9fcGNzX2JhdGNoKHMsIHNpemUsIHApO1xcbiBcXG4tXFx0cmV0dXJuO1xcbitcXHRcXHRpZiAoIWJhdGNoX2ZyZWVkKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFxuLW5vX2VtcHR5Olxcbi1cXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cCArPSBiYXRjaF9mcmVlZDtcXG4rXFx0XFx0c2l6ZSAtPSBiYXRjaF9mcmVlZDtcXG4rXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogaWYgd2UgZGVwbGV0ZWQgYWxsIGVtcHR5IHNoZWF2ZXMgaW4gdGhlIGJhcm4gb3IgdGhlcmUgYXJlIHRvb1xcbi1cXHQgKiBtYW55IGZ1bGwgc2hlYXZlcywgZnJlZSB0aGUgcmVzdCB0byBzbGFiIHBhZ2VzXFxuLVxcdCAqL1xcbi1mYWxsYmFjazpcXG4tXFx0X19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCBzaXplLCBwKTtcXG4tXFx0c3RhdF9hZGQocywgRlJFRV9TTE9XUEFUSCwgc2l6ZSk7XFxuK1xcdGlmIChzaXplKSB7XFxuK1xcdFxcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgc2l6ZSwgcCk7XFxuK1xcdFxcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHNpemUpO1xcbitcXHR9XFxuIFxcbi1mbHVzaF9yZW1vdGU6XFxuIFxcdGlmIChyZW1vdGVfbnIpIHtcXG4gXFx0XFx0X19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCByZW1vdGVfbnIsIFxcdTAwMjZyZW1vdGVfb2JqZWN0c1swXSk7XFxuIFxcdFxcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQyOjUwLjY3NDEzMDgyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1MTg0NzM1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mcmVlX3RvX3Bjc19iYXRjaFwiLFxuICAgIFwiZnJlZV90b19wY3NfYnVsa1wiLFxuICAgIFwia21lbV9jYWNoZV9mcmVlX2J1bGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYnVsayBmcmVlaW5nIGxvZ2ljIGluIHRoZSBTTFVCIGFsbG9jYXRvciBieSBleHRyYWN0aW5nIGEgYmF0Y2ggcHJvY2Vzc2luZyBmdW5jdGlvbiBgX19mcmVlX3RvX3Bjc19iYXRjaGAuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGttZW1fY2FjaGVfZnJlZV9idWxrYCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gbWVtb3J5IGZyZWVpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDg4Y2ZiZGQ1Mjc3ZTRhOTFmNDI3NjJhZjQxMzJlZjI5ZmRjYjE5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjA6NDI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDY1ZmViZTk1Nzg4NmIyLi4zZjEzZjQ5N2FhYjRlNSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNjIwMyw1MSArNjIwMywyMSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxuIH1cbiBcbiAvKlxuLSAqIEJ1bGsgZnJlZSBvYmplY3RzIHRvIHRoZSBwZXJjcHUgc2hlYXZlcy5cbi0gKiBVbmxpa2UgZnJlZV90b19wY3MoKSB0aGlzIGluY2x1ZGVzIHRoZSBjYWxscyB0byBhbGwgbmVjZXNzYXJ5IGhvb2tzXG4tICogYW5kIHRoZSBmYWxsYmFjayB0byBmcmVlaW5nIHRvIHNsYWIgcGFnZXMuXG4rICogVHJ5IHRvIGZyZWUgYXMgbWFueSBvYmplY3RzIChhbHJlYWR5IHByb2Nlc3NlZCBieSBmcmVlIGhvb2tzKSBhcyBwb3NzaWJsZSB0b1xuKyAqIGEgc2luZ2xlIHBlci1jcHUgc2hlYWYuXG4rICpcbisgKiBSZXR1cm5zIGhvdyBtYW55IG9iamVjdHMgd2VyZSBmcmVlZC4gWmVybyBtZWFucyBmYWlsdXJlIGFuZCB0aGUgY2FsbGVyIHNob3VsZFxuKyAqIGZhbGwgYmFjayB0byBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKCkuXG4gICovXG4tc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19mcmVlX3RvX3Bjc19iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqbWFpbiwgKmVtcHR5O1xuLVx0Ym9vbCBpbml0ID0gc2xhYl93YW50X2luaXRfb25fZnJlZShzKTtcbi1cdHVuc2lnbmVkIGludCBiYXRjaCwgaSA9IDA7XG4gXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xuLVx0dm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07XG4tXHR1bnNpZ25lZCBpbnQgcmVtb3RlX25yID0gMDtcbi1cbi1cdHdoaWxlIChpIFx1MDAzYyBzaXplKSB7XG4tXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuLVxuLVx0XHRtZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICsgaSwgMSk7XG4tXHRcdGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCArIGksIDEpO1xuLVxuLVx0XHRpZiAodW5saWtlbHkoIXNsYWJfZnJlZV9ob29rKHMsIHBbaV0sIGluaXQsIGZhbHNlKSkpIHtcbi1cdFx0XHRwW2ldID0gcFstLXNpemVdO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdGlmICh1bmxpa2VseSghY2FuX2ZyZWVfdG9fcGNzKHNsYWIpKSkge1xuLVx0XHRcdHJlbW90ZV9vYmplY3RzW3JlbW90ZV9ucl0gPSBwW2ldO1xuLVx0XHRcdHBbaV0gPSBwWy0tc2l6ZV07XG4tXHRcdFx0aWYgKCsrcmVtb3RlX25yIFx1MDAzZT0gUENTX0JBVENIX01BWCkge1xuLVx0XHRcdFx0X19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCByZW1vdGVfbnIsIFx1MDAyNnJlbW90ZV9vYmplY3RzWzBdKTtcbi1cdFx0XHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7XG4tXHRcdFx0XHRyZW1vdGVfbnIgPSAwO1xuLVx0XHRcdH1cbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRpKys7XG4tXHR9XG4tXG4tXHRpZiAoIXNpemUpXG4tXHRcdGdvdG8gZmx1c2hfcmVtb3RlO1xuK1x0dW5zaWduZWQgaW50IGJhdGNoO1xuIFxuLW5leHRfYmF0Y2g6XG4gXHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSlcbi1cdFx0Z290byBmYWxsYmFjaztcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cdTAwM2VjcHVfc2hlYXZlcyk7XG4gXG5AQCAtNjI5MywyOSArNjI2Myw2NSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4gXG4gXHRzdGF0X2FkZChzLCBGUkVFX0ZBU1RQQVRILCBiYXRjaCk7XG4gXG4tXHRpZiAoYmF0Y2ggXHUwMDNjIHNpemUpIHtcbi1cdFx0cCArPSBiYXRjaDtcbi1cdFx0c2l6ZSAtPSBiYXRjaDtcbi1cdFx0Z290byBuZXh0X2JhdGNoO1xuK1x0cmV0dXJuIGJhdGNoO1xuK1xuK25vX2VtcHR5OlxuK1x0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBCdWxrIGZyZWUgb2JqZWN0cyB0byB0aGUgcGVyY3B1IHNoZWF2ZXMuXG4rICogVW5saWtlIGZyZWVfdG9fcGNzKCkgdGhpcyBpbmNsdWRlcyB0aGUgY2FsbHMgdG8gYWxsIG5lY2Vzc2FyeSBob29rc1xuKyAqIGFuZCB0aGUgZmFsbGJhY2sgdG8gZnJlZWluZyB0byBzbGFiIHBhZ2VzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbit7XG4rXHRib29sIGluaXQgPSBzbGFiX3dhbnRfaW5pdF9vbl9mcmVlKHMpO1xuK1x0dm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07XG4rXHR1bnNpZ25lZCBpbnQgcmVtb3RlX25yID0gMDtcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBzaXplOykge1xuK1x0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTtcbitcbitcdFx0bWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCArIGksIDEpO1xuK1x0XHRhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAgKyBpLCAxKTtcbitcbitcdFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCBmYWxzZSkpKSB7XG4rXHRcdFx0cFtpXSA9IHBbLS1zaXplXTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAodW5saWtlbHkoIWNhbl9mcmVlX3RvX3BjcyhzbGFiKSkpIHtcbitcdFx0XHRyZW1vdGVfb2JqZWN0c1tyZW1vdGVfbnJdID0gcFtpXTtcbitcdFx0XHRwW2ldID0gcFstLXNpemVdO1xuK1x0XHRcdGlmICgrK3JlbW90ZV9uciBcdTAwM2U9IFBDU19CQVRDSF9NQVgpIHtcbitcdFx0XHRcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcdTAwMjZyZW1vdGVfb2JqZWN0c1swXSk7XG4rXHRcdFx0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xuK1x0XHRcdFx0cmVtb3RlX25yID0gMDtcbitcdFx0XHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aSsrO1xuIFx0fVxuIFxuLVx0aWYgKHJlbW90ZV9ucilcbi1cdFx0Z290byBmbHVzaF9yZW1vdGU7XG4rXHR3aGlsZSAoc2l6ZSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgYmF0Y2hfZnJlZWQgPSBfX2ZyZWVfdG9fcGNzX2JhdGNoKHMsIHNpemUsIHApO1xuIFxuLVx0cmV0dXJuO1xuK1x0XHRpZiAoIWJhdGNoX2ZyZWVkKVxuK1x0XHRcdGJyZWFrO1xuIFxuLW5vX2VtcHR5OlxuLVx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4rXHRcdHAgKz0gYmF0Y2hfZnJlZWQ7XG4rXHRcdHNpemUgLT0gYmF0Y2hfZnJlZWQ7XG4rXHR9XG4gXG4tXHQvKlxuLVx0ICogaWYgd2UgZGVwbGV0ZWQgYWxsIGVtcHR5IHNoZWF2ZXMgaW4gdGhlIGJhcm4gb3IgdGhlcmUgYXJlIHRvb1xuLVx0ICogbWFueSBmdWxsIHNoZWF2ZXMsIGZyZWUgdGhlIHJlc3QgdG8gc2xhYiBwYWdlc1xuLVx0ICovXG4tZmFsbGJhY2s6XG4tXHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHNpemUsIHApO1xuLVx0c3RhdF9hZGQocywgRlJFRV9TTE9XUEFUSCwgc2l6ZSk7XG4rXHRpZiAoc2l6ZSkge1xuK1x0XHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHNpemUsIHApO1xuK1x0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCBzaXplKTtcbitcdH1cbiBcbi1mbHVzaF9yZW1vdGU6XG4gXHRpZiAocmVtb3RlX25yKSB7XG4gXHRcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcdTAwMjZyZW1vdGVfb2JqZWN0c1swXSk7XG4gXHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0Mjo1MC42NzQxMzI0MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIwMDUyNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGNsZWFybHkgbWVzc2luZyB3aXRoIHRoZSBTTFVCIGFsbG9jYXRvciDigJMgdGhhdCdzIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gdGhpcyBpcyBoaWdoLXZhbHVlIHN0dWZmLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVmYWN0b3JpbmcgYGZyZWVfdG9fcGNzX2J1bGtgLiBUaGUgcGF0Y2ggc3BsaXRzIG9mZiBgX19mcmVlX3RvX3Bjc19iYXRjaGAsIHdoaWNoIGltcGxpZXMgdGhleSdyZSBjaGFuZ2luZyBob3cgb2JqZWN0cyBhcmUgZnJlZWQgaW4gYnVsayBpbnRvIHBlci1jcHUgc2hlYXZlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZGVlcCBkaXZlIGFuZCwgZnJhbmtseSwgbmVlZHMgZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcy5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zOiBgZnJlZV90b19wY3NfYnVsa2AgYW5kIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIFNMVUIgaXMgdGhlIGRlZmF1bHQsIHNvIGl0J3MgcHJvYmFibHkgZW5hYmxlZC4gSG93ZXZlciwgdGhlIHVzZSBvZiBwZXItY3B1IHNoZWF2ZXMgKFBDUykgZ2l2ZXMgbWUgcGF1c2Ug4oCTIGl0IG1pZ2h0IGJlIGJlaGluZCBhIGNvbmZpZ3VyYXRpb24gZmxhZy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgbW0vc2x1Yi5jYCBxdWlja2x5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhvc2UgZnVuY3Rpb24gbmFtZXMgYW5kIG1lbnRpb25zIG9mIGBjcHVfc2hlYXZlc2AgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscyBvciBvdGhlciBudWFuY2VzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQyOjU1LjI5NDE4NjUxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc5ODY2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfdG9fcGNzX2J1bGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz02MjEyPXN0YXRpYyB1bnNpZ25lZCBpbnQgX19mcmVlX3RvX3Bjc19iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTYyNzgtICovXFxubW0vc2x1Yi5jOjYyNzk6c3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbm1tL3NsdWIuYy02MjgwLXtcXG4tLVxcbm1tL3NsdWIuYz03MTU5PXZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYy03MTY4LVxcdGlmIChzIFxcdTAwMjZcXHUwMDI2IGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XFxubW0vc2x1Yi5jOjcxNjk6XFx0XFx0ZnJlZV90b19wY3NfYnVsayhzLCBzaXplLCBwKTtcXG5tbS9zbHViLmMtNzE3MC1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQyOjU3LjM3NDA1NzY4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzE5NTQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgU2x1YiBDYWNoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIGhlcmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBjYWNoZV9oYXNfc2hlYXZlc2Agb3IgYGNwdV9zaGVhdmVzYCBpcyBkZWZpbmVkIGFueXdoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBpbiB0aGUgdXN1YWwgc3VzcGVjdHMsIHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCBvZiBzaGVhdmVzIGFuZCBob3cgdGhvc2Ugc3RydWN0dXJlcyBtaWdodCBiZSBtYW5hZ2VkLCB0aGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSWYgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0aGVyZSwgSSdsbCB0aGVuIG1vdmUgb24gdG8gYG1tL0tjb25maWdgLiBJdOKAmXMgbGlrZWx5IG9uZSBvZiB0aGVzZSBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRldGVybWluaW5nIHRoZSB1c2Ugb3IgaGFuZGxpbmcgb2Ygc2hlYXZlcyB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDM6MDAuMjA2MDE0OTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTA4NDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWNoZV9oYXNfc2hlYXZlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTIyMj1zdHJ1Y3Qga21lbV9jYWNoZSB7XFxuLS1cXG5tbS9zbGFiLmgtMjgzLSAqL1xcbm1tL3NsYWIuaDoyODQ6c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWIuaC0yODUte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0yMTEwPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWJfY29tbW9uLmMtMjExMS17XFxubW0vc2xhYl9jb21tb24uYzoyMTEyOlxcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xcbm1tL3NsYWJfY29tbW9uLmMtMjExMy1cXHRcXHRjcHVzX3JlYWRfbG9jaygpO1xcbi0tXFxubW0vc2x1Yi5jPTMwNDE9c3RhdGljIHZvaWQgcGNzX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtMzA1Mi1cXHQvKiBwY3MtXFx1MDAzZW1haW4gY2FuIG9ubHkgcG9pbnQgdG8gdGhlIGJvb3RzdHJhcCBzaGVhZiwgbm90aGluZyB0byBmcmVlICovXFxubW0vc2x1Yi5jOjMwNTM6XFx0aWYgKCFjYWNoZV9oYXNfc2hlYXZlcyhzKSlcXG5tbS9zbHViLmMtMzA1NC1cXHRcXHRnb3RvIGZyZWVfcGNzO1xcbi0tXFxubW0vc2x1Yi5jPTM5ODI9c3RhdGljIGJvb2wgaGFzX3Bjc191c2VkKGludCBjcHUsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTM5ODUtXFxubW0vc2x1Yi5jOjM5ODY6XFx0aWYgKCFjYWNoZV9oYXNfc2hlYXZlcyhzKSlcXG5tbS9zbHViLmMtMzk4Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9zbHViLmM9Mzk5OT1zdGF0aWMgdm9pZCBmbHVzaF9jcHVfc2hlYXZlcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS9zbHViLmMtNDAwNy1cXG5tbS9zbHViLmM6NDAwODpcXHRpZiAoY2FjaGVfaGFzX3NoZWF2ZXMocykpXFxubW0vc2x1Yi5jLTQwMDktXFx0XFx0cGNzX2ZsdXNoX2FsbChzKTtcXG4tLVxcbm1tL3NsdWIuYz00MTA0PXZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpXFxuLS1cXG5tbS9zbHViLmMtNDExMS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsIFxcdTAwMjZzbGFiX2NhY2hlcywgbGlzdCkge1xcbm1tL3NsdWIuYzo0MTEyOlxcdFxcdGlmICghY2FjaGVfaGFzX3NoZWF2ZXMocykpXFxubW0vc2x1Yi5jLTQxMTMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9zbHViLmM9NDEyMz1zdGF0aWMgaW50IHNsdWJfY3B1X3NldHVwKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5tbS9zbHViLmMtNDE0Ni1cXHRcXHQgKi9cXG5tbS9zbHViLmM6NDE0NzpcXHRcXHRpZiAoIWNhY2hlX2hhc19zaGVhdmVzKHMpIHx8IGdldF9iYXJuX25vZGUocywgbmlkKSlcXG5tbS9zbHViLmMtNDE0OC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3NsdWIuYz00MTcyPXN0YXRpYyBpbnQgc2x1Yl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxubW0vc2x1Yi5jLTQxNzctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcXHUwMDI2c2xhYl9jYWNoZXMsIGxpc3QpIHtcXG5tbS9zbHViLmM6NDE3ODpcXHRcXHRpZiAoY2FjaGVfaGFzX3NoZWF2ZXMocykpXFxubW0vc2x1Yi5jLTQxNzktXFx0XFx0XFx0X19wY3NfZmx1c2hfYWxsX2NwdShzLCBjcHUpO1xcbi0tXFxubW0vc2x1Yi5jPTQ2NDM9X19wY3NfcmVwbGFjZV9lbXB0eV9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxcbi0tXFxubW0vc2x1Yi5jLTQ2NTMtXFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqL1xcbm1tL3NsdWIuYzo0NjU0OlxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxubW0vc2x1Yi5jLTQ2NTUtXFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zbHViLmM9NDgzMT11bnNpZ25lZCBpbnQgYWxsb2NfZnJvbV9wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTQ4NDgtXFxubW0vc2x1Yi5jOjQ4NDk6XFx0XFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcXG5tbS9zbHViLmMtNDg1MC1cXHRcXHRcXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm1tL3NsdWIuYz01ODM1PV9fcGNzX3JlcGxhY2VfZnVsbF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxcbi0tXFxubW0vc2x1Yi5jLTU4NDUtXFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqL1xcbm1tL3NsdWIuYzo1ODQ2OlxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxubW0vc2x1Yi5jLTU4NDctXFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zbHViLmM9NjA1Mz1ib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXFxuLS1cXG5tbS9zbHViLmMtNjA3My1cXHRcXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGZhbGwgYmFjayAqL1xcbm1tL3NsdWIuYzo2MDc0OlxcdFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxubW0vc2x1Yi5jLTYwNzUtXFx0XFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zbHViLmM9NzE1OT12b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxuLS1cXG5tbS9zbHViLmMtNzE2Ny1cXHQgKi9cXG5tbS9zbHViLmM6NzE2ODpcXHRpZiAocyBcXHUwMDI2XFx1MDAyNiBjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xcbm1tL3NsdWIuYy03MTY5LVxcdFxcdGZyZWVfdG9fcGNzX2J1bGsocywgc2l6ZSwgcCk7XFxuLS1cXG5tbS9zbHViLmM9Nzc1Nz1zdGF0aWMgaW50IGluaXRfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy03Nzc3LVxcbm1tL3NsdWIuYzo3Nzc4OlxcdGlmIChzbGFiX3N0YXRlID09IERPV04gfHwgIWNhY2hlX2hhc19zaGVhdmVzKHMpKVxcbm1tL3NsdWIuYy03Nzc5LVxcdFxcdHJldHVybiAxO1xcbi0tXFxubW0vc2x1Yi5jPTgwNzA9aW50IF9fa21lbV9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy04MDc3LVxcdC8qIHdlIG1pZ2h0IGhhdmUgcmN1IHNoZWF2ZXMgaW4gZmxpZ2h0ICovXFxubW0vc2x1Yi5jOjgwNzg6XFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKVxcbm1tL3NsdWIuYy04MDc5LVxcdFxcdHJjdV9iYXJyaWVyKCk7XFxuLS1cXG5tbS9zbHViLmM9ODM3Nj1zdGF0aWMgaW50IHNsYWJfbWVtX2dvaW5nX29ubGluZV9jYWxsYmFjayhpbnQgbmlkKVxcbi0tXFxubW0vc2x1Yi5jLTgzOTctXFxubW0vc2x1Yi5jOjgzOTg6XFx0XFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpIFxcdTAwMjZcXHUwMDI2ICFnZXRfYmFybl9ub2RlKHMsIG5pZCkpIHtcXG5tbS9zbHViLmMtODM5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDM6MDAuMzE3MTI3OTE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MDgwNTI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGBjYWNoZV9oYXNfc2hlYXZlc2AgaW4gYG1tL3NsYWIuaGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIHNsYWIgYWxsb2NhdG9yIGhhbmRsZXMgc2hlYXZlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBpbnRvIHRoZSBgbW0vc2xhYi5oYCBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBjYWNoZV9oYXNfc2hlYXZlc2AgYWN0dWFsbHkgKm1lYW5zKiBpbiB0aGUgY29udGV4dCBvZiBzbGFiIGFsbG9jYXRpb24uIElzIGl0IGEgYm9vbGVhbj8gQW4gZW51bT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIGNhY2hlICpoYXZpbmcqIHNoZWF2ZXM/IERvZXMgaXQgcmVsYXRlIHRvIHBhZ2UgZnJhZ21lbnRhdGlvbiBvciBOVU1BIGFmZmluaXR5IGluIGFueSB3YXk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgdG8gcmVhc29uIGFib3V0IHRoZSBsYXJnZXIgc2xhYiBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcsIHRoYXQgaXQgaXMgbGlrZWx5IGEgYm9vbGVhbiB2YXJpYWJsZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNhY2hlIGlzIHVzaW5nIHNoZWF2ZXMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZmxhZyBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgc2xhYiBhbGxvY2F0b3IgYXQgYm90aCBhbGxvY2F0aW9uIGFuZCBmcmVlIHRpbWUuIEVzc2VudGlhbGx5LCBJIGFtIHNlZWtpbmcgYSBjbGVhciBkZWZpbml0aW9uIGFuZCBjb250ZXh0IHRvIGZyYW1lIHRoZSBmb2xsb3dpbmcgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0MzowMy43MDc5MzU1MzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMjExNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9oYXNfc2hlYXZlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTIyMj1zdHJ1Y3Qga21lbV9jYWNoZSB7XFxuLS1cXG5tbS9zbGFiLmgtMjgzLSAqL1xcbm1tL3NsYWIuaDoyODQ6c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWIuaC0yODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0MzowMy45OTAxNTIwODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODAzNDMxNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9zbGFiLmhgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtbS9zbGFiLmhgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI4NC4gVGhhdCBzZWN0aW9uIGxpa2VseSBjb250YWlucyBzb21lIGNydWNpYWwgZGV0YWlscyByZWxhdGVkIHRvIHdoYXRldmVyIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSXQgY291bGQgYmUgb2JqZWN0IGFsbG9jYXRpb24sIGNhY2hlIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHdpdGhpbiB0aGUgU0xBQiBhbGxvY2F0b3IncyBwdXJ2aWV3LiBLbm93aW5nIHRoZSBjb250ZXh0LCB0aGF0IGxvY2F0aW9uIHNob3VsZCBwcm92aWRlIHNvbWUgaGVscGZ1bCBpbmZvcm1hdGlvbiB0byBnZXQgbWUgc3RhcnRlZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQzOjA2Ljc5MzU4NTc2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbGFiLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcbiAyNzE6XFx0I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxuIDI3MjpcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZV9zdGF0cyBfX3BlcmNwdSAqY3B1X3N0YXRzO1xcbiAyNzM6XFx0I2VuZGlmXFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlX3Blcl9ub2RlX3B0cnMgcGVyX25vZGVbTUFYX05VTU5PREVTXTtcXG4gMjc2OlxcdH07XFxuIDI3NzpcXHRcXG4gMjc4OlxcdC8qXFxuIDI3OTpcXHQgKiBFdmVyeSBjYWNoZSBoYXMgIU5VTEwgcy1cXHUwMDNlY3B1X3NoZWF2ZXMgYnV0IHRoZXkgbWF5IHBvaW50IHRvIHRoZVxcbiAyODA6XFx0ICogYm9vdHN0cmFwX3NoZWFmIHRlbXBvcmFyaWx5IGR1cmluZyBpbml0LCBvciBwZXJtYW5lbnRseSBmb3IgdGhlIGJvb3QgY2FjaGVzXFxuIDI4MTpcXHQgKiBhbmQgY2FjaGVzIHdpdGggZGVidWdnaW5nIGVuYWJsZWQsIG9yIGFsbCBjYWNoZXMgd2l0aCBDT05GSUdfU0xVQl9USU5ZLiBUaGlzXFxuIDI4MjpcXHQgKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cXG4gMjgzOlxcdCAqL1xcbiAyODQ6XFx0c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiAyODU6XFx0e1xcbiAyODY6XFx0XFx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXFxuIDI4NzpcXHRcXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHk7XFxuIDI4ODpcXHR9XFxuIDI4OTpcXHRcXG4gMjkwOlxcdCNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgIWRlZmluZWQoQ09ORklHX1NMVUJfVElOWSlcXG4gMjkxOlxcdCNkZWZpbmUgU0xBQl9TVVBQT1JUU19TWVNGUyAxXFxuIDI5MjpcXHR2b2lkIHN5c2ZzX3NsYWJfdW5saW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcXG4gMjkzOlxcdHZvaWQgc3lzZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcXG4gMjk0OlxcdGludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lKTtcXG4gMjk1OlxcdCNlbHNlXFxuIDI5NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfc2xhYl91bmxpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpIHsgfVxcbiAyOTc6XFx0c3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3NsYWJfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykgeyB9XFxuIDI5ODpcXHRzdGF0aWMgaW5saW5lIGludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lKVxcbiAyOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0eyByZXR1cm4gMDsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0MzowNi43OTM2NjM3OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3NTEwODkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0xVQiBNZW1vcnkgTWFuYWdlbWVudCBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGBjYWNoZV9oYXNfc2hlYXZlc2AgaXMgdHJ1ZSB3aGVuIGBDT05GSUdfU0xVQl9USU5ZYCBpcyAqbm90KiBlbmFibGVkLiBUaGF0J3MgYSBrZXkgcG9pbnQuIEl0IHNlZW1zIGxpa2UgdGhlIHN0YW5kYXJkIFNMVUIgY29uZmlndXJhdGlvbiBpcyB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB1bmxlc3MgYENPTkZJR19TTFVCX1RJTllgIGlzIGV4cGxpY2l0bHkgc2V0LCBhbmQgaWYgd2UgYXJlIHNlZWluZyBhIGRlZmF1bHQgY29uZmlnLCB3ZSBhcmUgcHJvYmFibHkgbm90IHVzaW5nIHRoZSBUSU5ZIGNvbmZpZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBgQ09ORklHX1NMVUJgIGlzIHRoZSBkZWZhdWx0LCBidXQgYXJlIHRoZXJlIG90aGVyLCBwb3RlbnRpYWxseSBsZXNzIGNvbW1vbiBvbmVzIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBoZXJlPyBMZXQgbWUgY2hlY2ssIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblRoZSBwYXRjaCBmb2N1c2VzIG9uIGBmcmVlX3RvX3Bjc19idWxrYCBhbmQgYF9fZnJlZV90b19wY3NfYmF0Y2hgLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBhYm91dCBidWxrIGZyZWVpbmcgd2l0aGluIFNMVUIuIE5vdywgYXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGJ1bGsgZnJlZWluZyBleHBsaWNpdGx5PyBObywgaXQgbG9va3MgbGlrZSB0aGF0J3Mgc3RhbmRhcmQgQVBJIGJlaGF2aW9yIGZvciBTTFVCLCBub3QgdGllZCB0byBhbnkgcGFydGljdWxhciBjb25maWcsIG90aGVyIHRoYW4gYmVpbmcgZW5hYmxlZCB1bmxlc3MgeW91J3JlIHVzaW5nIFNMVUJfVElOWS4gU2ltaWxhcmx5LCBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBzaGVhdmVzIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBvdGhlciB0aGFuIFNMVUIncyBkZWZhdWx0IGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSBvbiB0aGVzZSB0aHJlZSBzeW1ib2xzOiBgZnJlZV90b19wY3NfYnVsa2AsIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCwgYW5kIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGlmIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCBhbmQgYGZyZWVfdG9fcGNzX2J1bGtgIGFyZSBpbmRlZWQgc3RhdGljIGZ1bmN0aW9ucy4gWWVzLCB0aGV5IGFyZS4gVGhhdCdzIGdvb2QuIFdoaWNoIG1lYW5zIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIGV4cGxvcmUgaXMgYGttZW1fY2FjaGVfZnJlZV9idWxrYC4gU3l6a2FsbGVyICpjYW4qIHRhcmdldCBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgaW4gdGhlIGtlcm5lbCBpbWFnZSwgc28gbGlzdGluZyB0aGUgYF9fZnJlZV90b19wY3NfYmF0Y2hgIGFuZCBgZnJlZV90b19wY3NfYnVsa2Agc3ltYm9scyBpcyBoZWxwZnVsLCBhbmQgSSdsbCBpbmNsdWRlIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AganVzdCBpbiBjYXNlLlxuXG5PbmUgbGFzdCB0aGluZywgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZnJlZV90b19wY3NfYmF0Y2hgIGluIGBtbS9zbHViLmNgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDM6MTMuNDY4Nzc1MjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODc4NDE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZyZWVfdG9fcGNzX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9NjE1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTYyMTEtICovXFxubW0vc2x1Yi5jOjYyMTI6c3RhdGljIHVuc2lnbmVkIGludCBfX2ZyZWVfdG9fcGNzX2JhdGNoKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxubW0vc2x1Yi5jLTYyMTMte1xcbi0tXFxubW0vc2x1Yi5jPTYyNzk9c3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTYzMTAtXFx0d2hpbGUgKHNpemUpIHtcXG5tbS9zbHViLmM6NjMxMTpcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2hfZnJlZWQgPSBfX2ZyZWVfdG9fcGNzX2JhdGNoKHMsIHNpemUsIHApO1xcbm1tL3NsdWIuYy02MzEyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0MzoxMy44OTc1NjM4NThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMDMwNDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1lc3Npbmcgd2l0aCB0aGUgY29yZSBtZW1vcnkgYWxsb2NhdG9yLCB3aGljaCBtZWFucyBpdOKAmXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBzdWJqZWN0IHRvIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGUgZnVuY3Rpb25hbGl0eSBpcyB0aGVyZSwgYW5kIHRoYXTigJlzIHRoZSBtYWluIHRoaW5nLiBJJ20gc2VlaW5nIHRocmVlIGtleSBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uOiBgX19mcmVlX3RvX3Bjc19iYXRjaGAsIGBmcmVlX3RvX3Bjc19idWxrYCwgYW5kIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50cyB0byBwcm9iZS5cblxuQXMgZm9yIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2Ugd2UgZG9uJ3QgbmVlZCBhbnl0aGluZyBzcGVjaWFsIGhlcmUsIHdoaWNoIGlzIGEgcmVsaWVmLiBTdGFuZGFyZCBTTFVCIHNob3VsZCBiZSBzdWZmaWNpZW50OyBnb29kIHRoaW5nIFNMVUIgaXMgdGhlIGRlZmF1bHQgdGhlc2UgZGF5cy4gTm8gbmVlZCB0byBzcGVjaWZ5IGFueXRoaW5nIGluIHRoZSBFbmFibGVDb25maWdzIHNlY3Rpb24uXG5cbldhaXQgYSBtaW51dGUsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfU0xVQmAgaXNuJ3QgKmV4cGxpY2l0bHkqIHJlcXVpcmVkLiBXaGlsZSBTTFVCIGlzIHRoZSBkZWZhdWx0IG5vdyB0aGF0IFNMQUIgYW5kIFNMT0IgYXJlIGdvbmUsIGJldHRlciBzYWZlIHRoYW4gc29ycnkuIExldCBtZSBqdXN0IHRha2UgYSBxdWljayBwZWVrIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1NMVUJgIGV4aXN0cyBpbiB0aGUgc3lzdGVtIG9yIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQzOjE4LjAyNzg3MTkyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5ODYxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTFVCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNjY9bWVudSBcXFwiU2xhYiBhbGxvY2F0b3Igb3B0aW9uc1xcXCJcXG5tbS9LY29uZmlnLTE2Ny1cXG5tbS9LY29uZmlnOjE2ODpjb25maWcgU0xVQlxcbm1tL0tjb25maWctMTY5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWc9MTcyPWNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG4tLVxcbm1tL0tjb25maWctMTc2LVxcbm1tL0tjb25maWc6MTc3OmNvbmZpZyBTTFVCX1RJTllcXG5tbS9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MjIxPWNvbmZpZyBTTEFCX0JVQ0tFVFNcXG4tLVxcbm1tL0tjb25maWctMjM3LVxcbm1tL0tjb25maWc6MjM4OmNvbmZpZyBTTFVCX1NUQVRTXFxubW0vS2NvbmZpZy0yMzktXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQzOjE4LjI5Nzc0MDE5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODk0ODM0NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGNoZWNrIGNvbmZpcm1zIGl0OiBgU0xVQmAgaXMgaW5kZWVkIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzIGZvciBub3cuXG5cbkxldCdzIGRpdmUgYmFjayBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvci4gU3BlY2lmaWNhbGx5LCBpdCdzIHNwbGl0dGluZyBgZnJlZV90b19wY3NfYnVsa2AgaW50byB0d28gZnVuY3Rpb25zOiB0aGUgb3JpZ2luYWwgYGZyZWVfdG9fcGNzX2J1bGtgIGFuZCBhIG5ldyBgX19mcmVlX3RvX3Bjc19iYXRjaGAuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSByZWZhY3RvcmluZyBvZiBzb3J0cywgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb3JlLlxuXG5NeSB0aGlua2luZyBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLiBTaW5jZSB0aGlzIHBhdGNoIHRvdWNoZXMgdGhlIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AgcGF0aCwgaXQncyBwcmV0dHkgZnVuZGFtZW50YWwgdG8gaG93IFNMVUIgZnJlZXMgbWVtb3J5LiBFeHRyYWN0aW5nIGEgYmF0Y2ggcHJvY2Vzc2luZyBmdW5jdGlvbiBsaWtlIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBpbiB0aGUgbWVtb3J5IGZyZWVpbmcgcHJvY2Vzcy4gSXQncyBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuXG5cbk15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCwgYGZyZWVfdG9fcGNzX2J1bGtgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gYGttZW1fY2FjaGVfZnJlZV9idWxrYC4gSSdtIHJlYWR5IHRvIG1vdmUgb24uIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwMCwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDM6MjQuMTkyNTc2NTg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZyZWVfdG9fcGNzX2JhdGNoXCIsXG4gICAgXCJmcmVlX3RvX3Bjc19idWxrXCIsXG4gICAgXCJrbWVtX2NhY2hlX2ZyZWVfYnVsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZyZWVfdG9fcGNzX2JhdGNoXCIsXG4gICAgXCJmcmVlX3RvX3Bjc19idWxrXCIsXG4gICAgXCJrbWVtX2NhY2hlX2ZyZWVfYnVsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 20:21:10 +0000 UTC FinishedAt: 2026-07-07 20:43:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "72bb229f9161a1efcd5df32141b69fcc6ae81a13", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "72bb229f9161a1efcd5df32141b69fcc6ae81a13", "config_name": "upstream-apparmor-kasan.config", "series_id": "a571d2c2-9f25-46e5-8593-a00499c3cefb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__free_to_pcs_batch", "free_to_pcs_bulk", "kmem_cache_free_bulk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mcmVlX3RvX3Bjc19iYXRjaCYjMzQ7LAogICAgJiMzNDtmcmVlX3RvX3Bjc19idWxrJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfZnJlZV9idWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ4OGNmYmRkNTI3N2U0YTkxZjQyNzYyYWY0MTMyZWYyOWZkY2IxOTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIwOjQyOjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xuaW5kZXggNjVmZWJlOTU3ODg2YjIuLjNmMTNmNDk3YWFiNGU1IDEwMDY0NFxuLS0tIGEvbW0vc2x1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zbHViLmNcbkBAIC02MjAzLDUxICYjNDM7NjIwMywyMSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxuIH1cbiBcbiAvKlxuLSAqIEJ1bGsgZnJlZSBvYmplY3RzIHRvIHRoZSBwZXJjcHUgc2hlYXZlcy5cbi0gKiBVbmxpa2UgZnJlZV90b19wY3MoKSB0aGlzIGluY2x1ZGVzIHRoZSBjYWxscyB0byBhbGwgbmVjZXNzYXJ5IGhvb2tzXG4tICogYW5kIHRoZSBmYWxsYmFjayB0byBmcmVlaW5nIHRvIHNsYWIgcGFnZXMuXG4mIzQzOyAqIFRyeSB0byBmcmVlIGFzIG1hbnkgb2JqZWN0cyAoYWxyZWFkeSBwcm9jZXNzZWQgYnkgZnJlZSBob29rcykgYXMgcG9zc2libGUgdG9cbiYjNDM7ICogYSBzaW5nbGUgcGVyLWNwdSBzaGVhZi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyBob3cgbWFueSBvYmplY3RzIHdlcmUgZnJlZWQuIFplcm8gbWVhbnMgZmFpbHVyZSBhbmQgdGhlIGNhbGxlciBzaG91bGRcbiYjNDM7ICogZmFsbCBiYWNrIHRvIF9fa21lbV9jYWNoZV9mcmVlX2J1bGsoKS5cbiAgKi9cbi1zdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgX19mcmVlX3RvX3Bjc19iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqbWFpbiwgKmVtcHR5O1xuLVx0Ym9vbCBpbml0ID0gc2xhYl93YW50X2luaXRfb25fZnJlZShzKTtcbi1cdHVuc2lnbmVkIGludCBiYXRjaCwgaSA9IDA7XG4gXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xuLVx0dm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07XG4tXHR1bnNpZ25lZCBpbnQgcmVtb3RlX25yID0gMDtcbi1cbi1cdHdoaWxlIChpIFx1MDAzYyBzaXplKSB7XG4tXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuLVxuLVx0XHRtZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICYjNDM7IGksIDEpO1xuLVx0XHRhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAgJiM0MzsgaSwgMSk7XG4tXG4tXHRcdGlmICh1bmxpa2VseSghc2xhYl9mcmVlX2hvb2socywgcFtpXSwgaW5pdCwgZmFsc2UpKSkge1xuLVx0XHRcdHBbaV0gPSBwWy0tc2l6ZV07XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKHVubGlrZWx5KCFjYW5fZnJlZV90b19wY3Moc2xhYikpKSB7XG4tXHRcdFx0cmVtb3RlX29iamVjdHNbcmVtb3RlX25yXSA9IHBbaV07XG4tXHRcdFx0cFtpXSA9IHBbLS1zaXplXTtcbi1cdFx0XHRpZiAoJiM0MzsmIzQzO3JlbW90ZV9uciBcdTAwM2U9IFBDU19CQVRDSF9NQVgpIHtcbi1cdFx0XHRcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcdTAwMjZyZW1vdGVfb2JqZWN0c1swXSk7XG4tXHRcdFx0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xuLVx0XHRcdFx0cmVtb3RlX25yID0gMDtcbi1cdFx0XHR9XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0aSYjNDM7JiM0Mzs7XG4tXHR9XG4tXG4tXHRpZiAoIXNpemUpXG4tXHRcdGdvdG8gZmx1c2hfcmVtb3RlO1xuJiM0MztcdHVuc2lnbmVkIGludCBiYXRjaDtcbiBcbi1uZXh0X2JhdGNoOlxuIFx0aWYgKCFsb2NhbF90cnlsb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jaykpXG4tXHRcdGdvdG8gZmFsbGJhY2s7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbiBcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVx1MDAzZWNwdV9zaGVhdmVzKTtcbiBcbkBAIC02MjkzLDI5ICYjNDM7NjI2Myw2NSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4gXG4gXHRzdGF0X2FkZChzLCBGUkVFX0ZBU1RQQVRILCBiYXRjaCk7XG4gXG4tXHRpZiAoYmF0Y2ggXHUwMDNjIHNpemUpIHtcbi1cdFx0cCAmIzQzOz0gYmF0Y2g7XG4tXHRcdHNpemUgLT0gYmF0Y2g7XG4tXHRcdGdvdG8gbmV4dF9iYXRjaDtcbiYjNDM7XHRyZXR1cm4gYmF0Y2g7XG4mIzQzO1xuJiM0Mztub19lbXB0eTpcbiYjNDM7XHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEJ1bGsgZnJlZSBvYmplY3RzIHRvIHRoZSBwZXJjcHUgc2hlYXZlcy5cbiYjNDM7ICogVW5saWtlIGZyZWVfdG9fcGNzKCkgdGhpcyBpbmNsdWRlcyB0aGUgY2FsbHMgdG8gYWxsIG5lY2Vzc2FyeSBob29rc1xuJiM0MzsgKiBhbmQgdGhlIGZhbGxiYWNrIHRvIGZyZWVpbmcgdG8gc2xhYiBwYWdlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbiYjNDM7e1xuJiM0MztcdGJvb2wgaW5pdCA9IHNsYWJfd2FudF9pbml0X29uX2ZyZWUocyk7XG4mIzQzO1x0dm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgaW50IHJlbW90ZV9uciA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBzaXplOykge1xuJiM0MztcdFx0c3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIocFtpXSk7XG4mIzQzO1xuJiM0MztcdFx0bWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTtcbiYjNDM7XHRcdGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXNsYWJfZnJlZV9ob29rKHMsIHBbaV0sIGluaXQsIGZhbHNlKSkpIHtcbiYjNDM7XHRcdFx0cFtpXSA9IHBbLS1zaXplXTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KCFjYW5fZnJlZV90b19wY3Moc2xhYikpKSB7XG4mIzQzO1x0XHRcdHJlbW90ZV9vYmplY3RzW3JlbW90ZV9ucl0gPSBwW2ldO1xuJiM0MztcdFx0XHRwW2ldID0gcFstLXNpemVdO1xuJiM0MztcdFx0XHRpZiAoJiM0MzsmIzQzO3JlbW90ZV9uciBcdTAwM2U9IFBDU19CQVRDSF9NQVgpIHtcbiYjNDM7XHRcdFx0XHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHJlbW90ZV9uciwgXHUwMDI2cmVtb3RlX29iamVjdHNbMF0pO1xuJiM0MztcdFx0XHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7XG4mIzQzO1x0XHRcdFx0cmVtb3RlX25yID0gMDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpJiM0MzsmIzQzOztcbiBcdH1cbiBcbi1cdGlmIChyZW1vdGVfbnIpXG4tXHRcdGdvdG8gZmx1c2hfcmVtb3RlO1xuJiM0MztcdHdoaWxlIChzaXplKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgYmF0Y2hfZnJlZWQgPSBfX2ZyZWVfdG9fcGNzX2JhdGNoKHMsIHNpemUsIHApO1xuIFxuLVx0cmV0dXJuO1xuJiM0MztcdFx0aWYgKCFiYXRjaF9mcmVlZClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXG4tbm9fZW1wdHk6XG4tXHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHAgJiM0Mzs9IGJhdGNoX2ZyZWVkO1xuJiM0MztcdFx0c2l6ZSAtPSBiYXRjaF9mcmVlZDtcbiYjNDM7XHR9XG4gXG4tXHQvKlxuLVx0ICogaWYgd2UgZGVwbGV0ZWQgYWxsIGVtcHR5IHNoZWF2ZXMgaW4gdGhlIGJhcm4gb3IgdGhlcmUgYXJlIHRvb1xuLVx0ICogbWFueSBmdWxsIHNoZWF2ZXMsIGZyZWUgdGhlIHJlc3QgdG8gc2xhYiBwYWdlc1xuLVx0ICovXG4tZmFsbGJhY2s6XG4tXHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHNpemUsIHApO1xuLVx0c3RhdF9hZGQocywgRlJFRV9TTE9XUEFUSCwgc2l6ZSk7XG4mIzQzO1x0aWYgKHNpemUpIHtcbiYjNDM7XHRcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgc2l6ZSwgcCk7XG4mIzQzO1x0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCBzaXplKTtcbiYjNDM7XHR9XG4gXG4tZmx1c2hfcmVtb3RlOlxuIFx0aWYgKHJlbW90ZV9ucikge1xuIFx0XHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHJlbW90ZV9uciwgXHUwMDI2cmVtb3RlX29iamVjdHNbMF0pO1xuIFx0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mcmVlX3RvX3Bjc19iYXRjaCYjMzQ7LAogICAgJiMzNDtmcmVlX3RvX3Bjc19idWxrJiMzNDssCiAgICAmIzM0O2ttZW1fY2FjaGVfZnJlZV9idWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDg4Y2ZiZGQ1Mjc3ZTRhOTFmNDI3NjJhZjQxMzJlZjI5ZmRjYjE5OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMjA6NDI6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggNjVmZWJlOTU3ODg2YjIuLjNmMTNmNDk3YWFiNGU1IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jCkBAIC02MjAzLDUxICYjNDM7NjIwMywyMSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKQogfQogCiAvKgotICogQnVsayBmcmVlIG9iamVjdHMgdG8gdGhlIHBlcmNwdSBzaGVhdmVzLgotICogVW5saWtlIGZyZWVfdG9fcGNzKCkgdGhpcyBpbmNsdWRlcyB0aGUgY2FsbHMgdG8gYWxsIG5lY2Vzc2FyeSBob29rcwotICogYW5kIHRoZSBmYWxsYmFjayB0byBmcmVlaW5nIHRvIHNsYWIgcGFnZXMuCiYjNDM7ICogVHJ5IHRvIGZyZWUgYXMgbWFueSBvYmplY3RzIChhbHJlYWR5IHByb2Nlc3NlZCBieSBmcmVlIGhvb2tzKSBhcyBwb3NzaWJsZSB0bwomIzQzOyAqIGEgc2luZ2xlIHBlci1jcHUgc2hlYWYuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIGhvdyBtYW55IG9iamVjdHMgd2VyZSBmcmVlZC4gWmVybyBtZWFucyBmYWlsdXJlIGFuZCB0aGUgY2FsbGVyIHNob3VsZAomIzQzOyAqIGZhbGwgYmFjayB0byBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKCkuCiAgKi8KLXN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCkKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IF9fZnJlZV90b19wY3NfYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcCkKIHsKIAlzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzOwogCXN0cnVjdCBzbGFiX3NoZWFmICptYWluLCAqZW1wdHk7Ci0JYm9vbCBpbml0ID0gc2xhYl93YW50X2luaXRfb25fZnJlZShzKTsKLQl1bnNpZ25lZCBpbnQgYmF0Y2gsIGkgPSAwOwogCXN0cnVjdCBub2RlX2Jhcm4gKmJhcm47Ci0Jdm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07Ci0JdW5zaWduZWQgaW50IHJlbW90ZV9uciA9IDA7Ci0KLQl3aGlsZSAoaSAmbHQ7IHNpemUpIHsKLQkJc3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIocFtpXSk7Ci0KLQkJbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTsKLQkJYWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICYjNDM7IGksIDEpOwotCi0JCWlmICh1bmxpa2VseSghc2xhYl9mcmVlX2hvb2socywgcFtpXSwgaW5pdCwgZmFsc2UpKSkgewotCQkJcFtpXSA9IHBbLS1zaXplXTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KCFjYW5fZnJlZV90b19wY3Moc2xhYikpKSB7Ci0JCQlyZW1vdGVfb2JqZWN0c1tyZW1vdGVfbnJdID0gcFtpXTsKLQkJCXBbaV0gPSBwWy0tc2l6ZV07Ci0JCQlpZiAoJiM0MzsmIzQzO3JlbW90ZV9uciAmZ3Q7PSBQQ1NfQkFUQ0hfTUFYKSB7Ci0JCQkJX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCByZW1vdGVfbnIsICZhbXA7cmVtb3RlX29iamVjdHNbMF0pOwotCQkJCXN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7Ci0JCQkJcmVtb3RlX25yID0gMDsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaSYjNDM7JiM0Mzs7Ci0JfQotCi0JaWYgKCFzaXplKQotCQlnb3RvIGZsdXNoX3JlbW90ZTsKJiM0MzsJdW5zaWduZWQgaW50IGJhdGNoOwogCi1uZXh0X2JhdGNoOgogCWlmICghbG9jYWxfdHJ5bG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKSkKLQkJZ290byBmYWxsYmFjazsKJiM0MzsJCXJldHVybiAwOwogCiAJcGNzID0gdGhpc19jcHVfcHRyKHMtJmd0O2NwdV9zaGVhdmVzKTsKIApAQCAtNjI5MywyOSAmIzQzOzYyNjMsNjUgQEAgc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKQogCiAJc3RhdF9hZGQocywgRlJFRV9GQVNUUEFUSCwgYmF0Y2gpOwogCi0JaWYgKGJhdGNoICZsdDsgc2l6ZSkgewotCQlwICYjNDM7PSBiYXRjaDsKLQkJc2l6ZSAtPSBiYXRjaDsKLQkJZ290byBuZXh0X2JhdGNoOwomIzQzOwlyZXR1cm4gYmF0Y2g7CiYjNDM7CiYjNDM7bm9fZW1wdHk6CiYjNDM7CWxvY2FsX3VubG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQnVsayBmcmVlIG9iamVjdHMgdG8gdGhlIHBlcmNwdSBzaGVhdmVzLgomIzQzOyAqIFVubGlrZSBmcmVlX3RvX3BjcygpIHRoaXMgaW5jbHVkZXMgdGhlIGNhbGxzIHRvIGFsbCBuZWNlc3NhcnkgaG9va3MKJiM0MzsgKiBhbmQgdGhlIGZhbGxiYWNrIHRvIGZyZWVpbmcgdG8gc2xhYiBwYWdlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApCiYjNDM7ewomIzQzOwlib29sIGluaXQgPSBzbGFiX3dhbnRfaW5pdF9vbl9mcmVlKHMpOwomIzQzOwl2b2lkICpyZW1vdGVfb2JqZWN0c1tQQ1NfQkFUQ0hfTUFYXTsKJiM0MzsJdW5zaWduZWQgaW50IHJlbW90ZV9uciA9IDA7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgc2l6ZTspIHsKJiM0MzsJCXN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKHBbaV0pOwomIzQzOwomIzQzOwkJbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTsKJiM0MzsJCWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCAmIzQzOyBpLCAxKTsKJiM0MzsKJiM0MzsJCWlmICh1bmxpa2VseSghc2xhYl9mcmVlX2hvb2socywgcFtpXSwgaW5pdCwgZmFsc2UpKSkgewomIzQzOwkJCXBbaV0gPSBwWy0tc2l6ZV07CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAodW5saWtlbHkoIWNhbl9mcmVlX3RvX3BjcyhzbGFiKSkpIHsKJiM0MzsJCQlyZW1vdGVfb2JqZWN0c1tyZW1vdGVfbnJdID0gcFtpXTsKJiM0MzsJCQlwW2ldID0gcFstLXNpemVdOwomIzQzOwkJCWlmICgmIzQzOyYjNDM7cmVtb3RlX25yICZndDs9IFBDU19CQVRDSF9NQVgpIHsKJiM0MzsJCQkJX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCByZW1vdGVfbnIsICZhbXA7cmVtb3RlX29iamVjdHNbMF0pOwomIzQzOwkJCQlzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpOwomIzQzOwkJCQlyZW1vdGVfbnIgPSAwOwomIzQzOwkJCX0KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWkmIzQzOyYjNDM7OwogCX0KIAotCWlmIChyZW1vdGVfbnIpCi0JCWdvdG8gZmx1c2hfcmVtb3RlOwomIzQzOwl3aGlsZSAoc2l6ZSkgewomIzQzOwkJdW5zaWduZWQgaW50IGJhdGNoX2ZyZWVkID0gX19mcmVlX3RvX3Bjc19iYXRjaChzLCBzaXplLCBwKTsKIAotCXJldHVybjsKJiM0MzsJCWlmICghYmF0Y2hfZnJlZWQpCiYjNDM7CQkJYnJlYWs7CiAKLW5vX2VtcHR5OgotCWxvY2FsX3VubG9jaygmYW1wO3MtJmd0O2NwdV9zaGVhdmVzLSZndDtsb2NrKTsKJiM0MzsJCXAgJiM0Mzs9IGJhdGNoX2ZyZWVkOwomIzQzOwkJc2l6ZSAtPSBiYXRjaF9mcmVlZDsKJiM0MzsJfQogCi0JLyoKLQkgKiBpZiB3ZSBkZXBsZXRlZCBhbGwgZW1wdHkgc2hlYXZlcyBpbiB0aGUgYmFybiBvciB0aGVyZSBhcmUgdG9vCi0JICogbWFueSBmdWxsIHNoZWF2ZXMsIGZyZWUgdGhlIHJlc3QgdG8gc2xhYiBwYWdlcwotCSAqLwotZmFsbGJhY2s6Ci0JX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCBzaXplLCBwKTsKLQlzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCBzaXplKTsKJiM0MzsJaWYgKHNpemUpIHsKJiM0MzsJCV9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgc2l6ZSwgcCk7CiYjNDM7CQlzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCBzaXplKTsKJiM0MzsJfQogCi1mbHVzaF9yZW1vdGU6CiAJaWYgKHJlbW90ZV9ucikgewogCQlfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHJlbW90ZV9uciwgJmFtcDtyZW1vdGVfb2JqZWN0c1swXSk7CiAJCXN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgY2xlYXJseSBtZXNzaW5nIHdpdGggdGhlIFNMVUIgYWxsb2NhdG9yIOKAkyB0aGF0JiMzOTtzIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gdGhpcyBpcyBoaWdoLXZhbHVlIHN0dWZmLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlZmFjdG9yaW5nIGBmcmVlX3RvX3Bjc19idWxrYC4gVGhlIHBhdGNoIHNwbGl0cyBvZmYgYF9fZnJlZV90b19wY3NfYmF0Y2hgLCB3aGljaCBpbXBsaWVzIHRoZXkmIzM5O3JlIGNoYW5naW5nIGhvdyBvYmplY3RzIGFyZSBmcmVlZCBpbiBidWxrIGludG8gcGVyLWNwdSBzaGVhdmVzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBkZWVwIGRpdmUgYW5kLCBmcmFua2x5LCBuZWVkcyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzLgoKTGV0IG1lIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zOiBgZnJlZV90b19wY3NfYnVsa2AgYW5kIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIFNMVUIgaXMgdGhlIGRlZmF1bHQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGVuYWJsZWQuIEhvd2V2ZXIsIHRoZSB1c2Ugb2YgcGVyLWNwdSBzaGVhdmVzIChQQ1MpIGdpdmVzIG1lIHBhdXNlIOKAkyBpdCBtaWdodCBiZSBiZWhpbmQgYSBjb25maWd1cmF0aW9uIGZsYWcuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aHJvdWdoIGBtbS9zbHViLmNgIHF1aWNrbHksIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aG9zZSBmdW5jdGlvbiBuYW1lcyBhbmQgbWVudGlvbnMgb2YgYGNwdV9zaGVhdmVzYCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscyBvciBvdGhlciBudWFuY2VzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcmVlX3RvX3Bjc19idWxrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz02MjEyPXN0YXRpYyB1bnNpZ25lZCBpbnQgX19mcmVlX3RvX3Bjc19iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuLS1cbm1tL3NsdWIuYy02Mjc4LSAqL1xubW0vc2x1Yi5jOjYyNzk6c3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxubW0vc2x1Yi5jLTYyODAte1xuLS1cbm1tL3NsdWIuYz03MTU5PXZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNzE2OC1cdGlmIChzIFx1MDAyNlx1MDAyNiBjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xubW0vc2x1Yi5jOjcxNjk6XHRcdGZyZWVfdG9fcGNzX2J1bGsocywgc2l6ZSwgcCk7XG5tbS9zbHViLmMtNzE3MC1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFNsdWIgQ2FjaGUgTGFuZHNjYXBlKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBjYWNoZV9oYXNfc2hlYXZlc2Agb3IgYGNwdV9zaGVhdmVzYCBpcyBkZWZpbmVkIGFueXdoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBpbiB0aGUgdXN1YWwgc3VzcGVjdHMsIHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCBvZiBzaGVhdmVzIGFuZCBob3cgdGhvc2Ugc3RydWN0dXJlcyBtaWdodCBiZSBtYW5hZ2VkLCB0aGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSWYgaXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdGhlcmUsIEkmIzM5O2xsIHRoZW4gbW92ZSBvbiB0byBgbW0vS2NvbmZpZ2AuIEl04oCZcyBsaWtlbHkgb25lIG9mIHRoZXNlIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gZGV0ZXJtaW5pbmcgdGhlIHVzZSBvciBoYW5kbGluZyBvZiBzaGVhdmVzIHdpdGhpbiB0aGUgU0xVQiBhbGxvY2F0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FjaGVfaGFzX3NoZWF2ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2xhYi5oPTIyMj1zdHJ1Y3Qga21lbV9jYWNoZSB7XG4tLVxubW0vc2xhYi5oLTI4My0gKi9cbm1tL3NsYWIuaDoyODQ6c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2xhYi5oLTI4NS17XG4tLVxubW0vc2xhYl9jb21tb24uYz0yMTEwPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2xhYl9jb21tb24uYy0yMTExLXtcbm1tL3NsYWJfY29tbW9uLmM6MjExMjpcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xubW0vc2xhYl9jb21tb24uYy0yMTEzLVx0XHRjcHVzX3JlYWRfbG9jaygpO1xuLS1cbm1tL3NsdWIuYz0zMDQxPXN0YXRpYyB2b2lkIHBjc19kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy0zMDUyLVx0LyogcGNzLVx1MDAzZW1haW4gY2FuIG9ubHkgcG9pbnQgdG8gdGhlIGJvb3RzdHJhcCBzaGVhZiwgbm90aGluZyB0byBmcmVlICovXG5tbS9zbHViLmM6MzA1MzpcdGlmICghY2FjaGVfaGFzX3NoZWF2ZXMocykpXG5tbS9zbHViLmMtMzA1NC1cdFx0Z290byBmcmVlX3Bjcztcbi0tXG5tbS9zbHViLmM9Mzk4Mj1zdGF0aWMgYm9vbCBoYXNfcGNzX3VzZWQoaW50IGNwdSwgc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTM5ODUtXG5tbS9zbHViLmM6Mzk4NjpcdGlmICghY2FjaGVfaGFzX3NoZWF2ZXMocykpXG5tbS9zbHViLmMtMzk4Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3NsdWIuYz0zOTk5PXN0YXRpYyB2b2lkIGZsdXNoX2NwdV9zaGVhdmVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS9zbHViLmMtNDAwNy1cbm1tL3NsdWIuYzo0MDA4Olx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKVxubW0vc2x1Yi5jLTQwMDktXHRcdHBjc19mbHVzaF9hbGwocyk7XG4tLVxubW0vc2x1Yi5jPTQxMDQ9dm9pZCBmbHVzaF9hbGxfcmN1X3NoZWF2ZXModm9pZClcbi0tXG5tbS9zbHViLmMtNDExMS1cdGxpc3RfZm9yX2VhY2hfZW50cnkocywgXHUwMDI2c2xhYl9jYWNoZXMsIGxpc3QpIHtcbm1tL3NsdWIuYzo0MTEyOlx0XHRpZiAoIWNhY2hlX2hhc19zaGVhdmVzKHMpKVxubW0vc2x1Yi5jLTQxMTMtXHRcdFx0Y29udGludWU7XG4tLVxubW0vc2x1Yi5jPTQxMjM9c3RhdGljIGludCBzbHViX2NwdV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm1tL3NsdWIuYy00MTQ2LVx0XHQgKi9cbm1tL3NsdWIuYzo0MTQ3Olx0XHRpZiAoIWNhY2hlX2hhc19zaGVhdmVzKHMpIHx8IGdldF9iYXJuX25vZGUocywgbmlkKSlcbm1tL3NsdWIuYy00MTQ4LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3NsdWIuYz00MTcyPXN0YXRpYyBpbnQgc2x1Yl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm1tL3NsdWIuYy00MTc3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcdTAwMjZzbGFiX2NhY2hlcywgbGlzdCkge1xubW0vc2x1Yi5jOjQxNzg6XHRcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSlcbm1tL3NsdWIuYy00MTc5LVx0XHRcdF9fcGNzX2ZsdXNoX2FsbF9jcHUocywgY3B1KTtcbi0tXG5tbS9zbHViLmM9NDY0Mz1fX3Bjc19yZXBsYWNlX2VtcHR5X21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXG4tLVxubW0vc2x1Yi5jLTQ2NTMtXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXG5tbS9zbHViLmM6NDY1NDpcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5tbS9zbHViLmMtNDY1NS1cdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4tLVxubW0vc2x1Yi5jPTQ4MzE9dW5zaWduZWQgaW50IGFsbG9jX2Zyb21fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbi0tXG5tbS9zbHViLmMtNDg0OC1cbm1tL3NsdWIuYzo0ODQ5Olx0XHRpZiAodW5saWtlbHkoIWNhY2hlX2hhc19zaGVhdmVzKHMpKSkge1xubW0vc2x1Yi5jLTQ4NTAtXHRcdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4tLVxubW0vc2x1Yi5jPTU4MzU9X19wY3NfcmVwbGFjZV9mdWxsX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3MsXG4tLVxubW0vc2x1Yi5jLTU4NDUtXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGJhY2sgb2ZmICovXG5tbS9zbHViLmM6NTg0NjpcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5tbS9zbHViLmMtNTg0Ny1cdFx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4tLVxubW0vc2x1Yi5jPTYwNTM9Ym9vbCBfX2tmcmVlX3JjdV9zaGVhZihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqKVxuLS1cbm1tL3NsdWIuYy02MDczLVx0XHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGZhbGwgYmFjayAqL1xubW0vc2x1Yi5jOjYwNzQ6XHRcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XG5tbS9zbHViLmMtNjA3NS1cdFx0XHRsb2NhbF91bmxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKTtcbi0tXG5tbS9zbHViLmM9NzE1OT12b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxubW0vc2x1Yi5jLTcxNjctXHQgKi9cbm1tL3NsdWIuYzo3MTY4Olx0aWYgKHMgXHUwMDI2XHUwMDI2IGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XG5tbS9zbHViLmMtNzE2OS1cdFx0ZnJlZV90b19wY3NfYnVsayhzLCBzaXplLCBwKTtcbi0tXG5tbS9zbHViLmM9Nzc1Nz1zdGF0aWMgaW50IGluaXRfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtNzc3Ny1cbm1tL3NsdWIuYzo3Nzc4Olx0aWYgKHNsYWJfc3RhdGUgPT0gRE9XTiB8fCAhY2FjaGVfaGFzX3NoZWF2ZXMocykpXG5tbS9zbHViLmMtNzc3OS1cdFx0cmV0dXJuIDE7XG4tLVxubW0vc2x1Yi5jPTgwNzA9aW50IF9fa21lbV9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmMtODA3Ny1cdC8qIHdlIG1pZ2h0IGhhdmUgcmN1IHNoZWF2ZXMgaW4gZmxpZ2h0ICovXG5tbS9zbHViLmM6ODA3ODpcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSlcbm1tL3NsdWIuYy04MDc5LVx0XHRyY3VfYmFycmllcigpO1xuLS1cbm1tL3NsdWIuYz04Mzc2PXN0YXRpYyBpbnQgc2xhYl9tZW1fZ29pbmdfb25saW5lX2NhbGxiYWNrKGludCBuaWQpXG4tLVxubW0vc2x1Yi5jLTgzOTctXG5tbS9zbHViLmM6ODM5ODpcdFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpIFx1MDAyNlx1MDAyNiAhZ2V0X2Jhcm5fbm9kZShzLCBuaWQpKSB7XG5tbS9zbHViLmMtODM5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGBjYWNoZV9oYXNfc2hlYXZlc2AgaW4gYG1tL3NsYWIuaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBzbGFiIGFsbG9jYXRvciBoYW5kbGVzIHNoZWF2ZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgaW50byB0aGUgYG1tL3NsYWIuaGAgaGVhZGVyIGZpbGUuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBgY2FjaGVfaGFzX3NoZWF2ZXNgIGFjdHVhbGx5ICptZWFucyogaW4gdGhlIGNvbnRleHQgb2Ygc2xhYiBhbGxvY2F0aW9uLiBJcyBpdCBhIGJvb2xlYW4/IEFuIGVudW0/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSBjYWNoZSAqaGF2aW5nKiBzaGVhdmVzPyBEb2VzIGl0IHJlbGF0ZSB0byBwYWdlIGZyYWdtZW50YXRpb24gb3IgTlVNQSBhZmZpbml0eSBpbiBhbnkgd2F5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIHRvIHJlYXNvbiBhYm91dCB0aGUgbGFyZ2VyIHNsYWIgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZywgdGhhdCBpdCBpcyBsaWtlbHkgYSBib29sZWFuIHZhcmlhYmxlIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2FjaGUgaXMgdXNpbmcgc2hlYXZlcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZmxhZyBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgc2xhYiBhbGxvY2F0b3IgYXQgYm90aCBhbGxvY2F0aW9uIGFuZCBmcmVlIHRpbWUuIEVzc2VudGlhbGx5LCBJIGFtIHNlZWtpbmcgYSBjbGVhciBkZWZpbml0aW9uIGFuZCBjb250ZXh0IHRvIGZyYW1lIHRoZSBmb2xsb3dpbmcgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2xhYi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsYWIuaD0yMjI9c3RydWN0IGttZW1fY2FjaGUge1xuLS1cbm1tL3NsYWIuaC0yODMtICovXG5tbS9zbGFiLmg6Mjg0OnN0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9oYXNfc2hlYXZlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsYWIuaC0yODUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBtbS9zbGFiLmhgKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG1tL3NsYWIuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMjg0LiBUaGF0IHNlY3Rpb24gbGlrZWx5IGNvbnRhaW5zIHNvbWUgY3J1Y2lhbCBkZXRhaWxzIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSXQgY291bGQgYmUgb2JqZWN0IGFsbG9jYXRpb24sIGNhY2hlIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHdpdGhpbiB0aGUgU0xBQiBhbGxvY2F0b3ImIzM5O3MgcHVydmlldy4gS25vd2luZyB0aGUgY29udGV4dCwgdGhhdCBsb2NhdGlvbiBzaG91bGQgcHJvdmlkZSBzb21lIGhlbHBmdWwgaW5mb3JtYXRpb24gdG8gZ2V0IG1lIHN0YXJ0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbGFiLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFxuIDI3MTpcdCNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xuIDI3MjpcdFx0c3RydWN0IGttZW1fY2FjaGVfc3RhdHMgX19wZXJjcHUgKmNwdV9zdGF0cztcbiAyNzM6XHQjZW5kaWZcbiAyNzQ6XHRcbiAyNzU6XHRcdHN0cnVjdCBrbWVtX2NhY2hlX3Blcl9ub2RlX3B0cnMgcGVyX25vZGVbTUFYX05VTU5PREVTXTtcbiAyNzY6XHR9O1xuIDI3NzpcdFxuIDI3ODpcdC8qXG4gMjc5Olx0ICogRXZlcnkgY2FjaGUgaGFzICFOVUxMIHMtXHUwMDNlY3B1X3NoZWF2ZXMgYnV0IHRoZXkgbWF5IHBvaW50IHRvIHRoZVxuIDI4MDpcdCAqIGJvb3RzdHJhcF9zaGVhZiB0ZW1wb3JhcmlseSBkdXJpbmcgaW5pdCwgb3IgcGVybWFuZW50bHkgZm9yIHRoZSBib290IGNhY2hlc1xuIDI4MTpcdCAqIGFuZCBjYWNoZXMgd2l0aCBkZWJ1Z2dpbmcgZW5hYmxlZCwgb3IgYWxsIGNhY2hlcyB3aXRoIENPTkZJR19TTFVCX1RJTlkuIFRoaXNcbiAyODI6XHQgKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cbiAyODM6XHQgKi9cbiAyODQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgY2FjaGVfaGFzX3NoZWF2ZXMoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4gMjg1Olx0e1xuIDI4NjpcdFx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXG4gMjg3Olx0XHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgXHUwMDI2XHUwMDI2IHMtXHUwMDNlc2hlYWZfY2FwYWNpdHk7XG4gMjg4Olx0fVxuIDI4OTpcdFxuIDI5MDpcdCNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19TTFVCX1RJTlkpXG4gMjkxOlx0I2RlZmluZSBTTEFCX1NVUFBPUlRTX1NZU0ZTIDFcbiAyOTI6XHR2b2lkIHN5c2ZzX3NsYWJfdW5saW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcbiAyOTM6XHR2b2lkIHN5c2ZzX3NsYWJfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyk7XG4gMjk0Olx0aW50IHN5c2ZzX3NsYWJfYWxpYXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm5hbWUpO1xuIDI5NTpcdCNlbHNlXG4gMjk2Olx0c3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3NsYWJfdW5saW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKSB7IH1cbiAyOTc6XHRzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKSB7IH1cbiAyOTg6XHRzdGF0aWMgaW5saW5lIGludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lKVxuIDI5OTpcdFx0XHRcdFx0XHRcdFx0eyByZXR1cm4gMDsgfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTFVCIE1lbW9yeSBNYW5hZ2VtZW50IGZvciBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGBjYWNoZV9oYXNfc2hlYXZlc2AgaXMgdHJ1ZSB3aGVuIGBDT05GSUdfU0xVQl9USU5ZYCBpcyAqbm90KiBlbmFibGVkLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBJdCBzZWVtcyBsaWtlIHRoZSBzdGFuZGFyZCBTTFVCIGNvbmZpZ3VyYXRpb24gaXMgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVubGVzcyBgQ09ORklHX1NMVUJfVElOWWAgaXMgZXhwbGljaXRseSBzZXQsIGFuZCBpZiB3ZSBhcmUgc2VlaW5nIGEgZGVmYXVsdCBjb25maWcsIHdlIGFyZSBwcm9iYWJseSBub3QgdXNpbmcgdGhlIFRJTlkgY29uZmlnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IGBDT05GSUdfU0xVQmAgaXMgdGhlIGRlZmF1bHQsIGJ1dCBhcmUgdGhlcmUgb3RoZXIsIHBvdGVudGlhbGx5IGxlc3MgY29tbW9uIG9uZXMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIGhlcmU/IExldCBtZSBjaGVjaywganVzdCB0byBiZSB0aG9yb3VnaC4KClRoZSBwYXRjaCBmb2N1c2VzIG9uIGBmcmVlX3RvX3Bjc19idWxrYCBhbmQgYF9fZnJlZV90b19wY3NfYmF0Y2hgLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBhYm91dCBidWxrIGZyZWVpbmcgd2l0aGluIFNMVUIuIE5vdywgYXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGJ1bGsgZnJlZWluZyBleHBsaWNpdGx5PyBObywgaXQgbG9va3MgbGlrZSB0aGF0JiMzOTtzIHN0YW5kYXJkIEFQSSBiZWhhdmlvciBmb3IgU0xVQiwgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgY29uZmlnLCBvdGhlciB0aGFuIGJlaW5nIGVuYWJsZWQgdW5sZXNzIHlvdSYjMzk7cmUgdXNpbmcgU0xVQl9USU5ZLiBTaW1pbGFybHksIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHNoZWF2ZXMgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIG90aGVyIHRoYW4gU0xVQiYjMzk7cyBkZWZhdWx0IGJlaGF2aW9yLgoKTXkgaW1tZWRpYXRlIGZvY3VzIGhlcmUgbmVlZHMgdG8gYmUgb24gdGhlc2UgdGhyZWUgc3ltYm9sczogYGZyZWVfdG9fcGNzX2J1bGtgLCBgX19mcmVlX3RvX3Bjc19iYXRjaGAsIGFuZCBga21lbV9jYWNoZV9mcmVlX2J1bGtgLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCBhbmQgYGZyZWVfdG9fcGNzX2J1bGtgIGFyZSBpbmRlZWQgc3RhdGljIGZ1bmN0aW9ucy4gWWVzLCB0aGV5IGFyZS4gVGhhdCYjMzk7cyBnb29kLiBXaGljaCBtZWFucyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byBleHBsb3JlIGlzIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuIFN5emthbGxlciAqY2FuKiB0YXJnZXQgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5JiMzOTtyZSBpbiB0aGUga2VybmVsIGltYWdlLCBzbyBsaXN0aW5nIHRoZSBgX19mcmVlX3RvX3Bjc19iYXRjaGAgYW5kIGBmcmVlX3RvX3Bjc19idWxrYCBzeW1ib2xzIGlzIGhlbHBmdWwsIGFuZCBJJiMzOTtsbCBpbmNsdWRlIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AganVzdCBpbiBjYXNlLgoKT25lIGxhc3QgdGhpbmcsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19mcmVlX3RvX3Bjc19iYXRjaGAgaW4gYG1tL3NsdWIuY2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZyZWVfdG9fcGNzX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz02MTU0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBjYW5fZnJlZV90b19wY3Moc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTYyMTEtICovXG5tbS9zbHViLmM6NjIxMjpzdGF0aWMgdW5zaWduZWQgaW50IF9fZnJlZV90b19wY3NfYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbm1tL3NsdWIuYy02MjEzLXtcbi0tXG5tbS9zbHViLmM9NjI3OT1zdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4tLVxubW0vc2x1Yi5jLTYzMTAtXHR3aGlsZSAoc2l6ZSkge1xubW0vc2x1Yi5jOjYzMTE6XHRcdHVuc2lnbmVkIGludCBiYXRjaF9mcmVlZCA9IF9fZnJlZV90b19wY3NfYmF0Y2gocywgc2l6ZSwgcCk7XG5tbS9zbHViLmMtNjMxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAxOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtZXNzaW5nIHdpdGggdGhlIGNvcmUgbWVtb3J5IGFsbG9jYXRvciwgd2hpY2ggbWVhbnMgaXTigJlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gc3ViamVjdCB0byBzb21lIHNlcmlvdXMgZnV6emluZy4gVGhlIGZ1bmN0aW9uYWxpdHkgaXMgdGhlcmUsIGFuZCB0aGF04oCZcyB0aGUgbWFpbiB0aGluZy4gSSYjMzk7bSBzZWVpbmcgdGhyZWUga2V5IHN5bWJvbHMgSSBzaG91bGQgZm9jdXMgb246IGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCwgYGZyZWVfdG9fcGNzX2J1bGtgLCBhbmQgYGttZW1fY2FjaGVfZnJlZV9idWxrYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgZW50cnkgcG9pbnRzIHRvIHByb2JlLgoKQXMgZm9yIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2Ugd2UgZG9uJiMzOTt0IG5lZWQgYW55dGhpbmcgc3BlY2lhbCBoZXJlLCB3aGljaCBpcyBhIHJlbGllZi4gU3RhbmRhcmQgU0xVQiBzaG91bGQgYmUgc3VmZmljaWVudDsgZ29vZCB0aGluZyBTTFVCIGlzIHRoZSBkZWZhdWx0IHRoZXNlIGRheXMuIE5vIG5lZWQgdG8gc3BlY2lmeSBhbnl0aGluZyBpbiB0aGUgRW5hYmxlQ29uZmlncyBzZWN0aW9uLgoKV2FpdCBhIG1pbnV0ZSwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19TTFVCYCBpc24mIzM5O3QgKmV4cGxpY2l0bHkqIHJlcXVpcmVkLiBXaGlsZSBTTFVCIGlzIHRoZSBkZWZhdWx0IG5vdyB0aGF0IFNMQUIgYW5kIFNMT0IgYXJlIGdvbmUsIGJldHRlciBzYWZlIHRoYW4gc29ycnkuIExldCBtZSBqdXN0IHRha2UgYSBxdWljayBwZWVrIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1NMVUJgIGV4aXN0cyBpbiB0aGUgc3lzdGVtIG9yIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0xVQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNjY9bWVudSBcJiMzNDtTbGFiIGFsbG9jYXRvciBvcHRpb25zXCYjMzQ7XG5tbS9LY29uZmlnLTE2Ny1cbm1tL0tjb25maWc6MTY4OmNvbmZpZyBTTFVCXG5tbS9LY29uZmlnLTE2OS1cdGRlZl9ib29sIHlcbi0tXG5tbS9LY29uZmlnPTE3Mj1jb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG4tLVxubW0vS2NvbmZpZy0xNzYtXG5tbS9LY29uZmlnOjE3Nzpjb25maWcgU0xVQl9USU5ZXG5tbS9LY29uZmlnLTE3OC1cdGJvb2wgXCYjMzQ7Q29uZmlndXJlIGZvciBtaW5pbWFsIG1lbW9yeSBmb290cHJpbnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTIyMT1jb25maWcgU0xBQl9CVUNLRVRTXG4tLVxubW0vS2NvbmZpZy0yMzctXG5tbS9LY29uZmlnOjIzODpjb25maWcgU0xVQl9TVEFUU1xubW0vS2NvbmZpZy0yMzktXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYwMAoJCQkJCQkJb3V0cHV0OiAxMjQKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTFVCIFBhdGNoKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGNoZWNrIGNvbmZpcm1zIGl0OiBgU0xVQmAgaXMgaW5kZWVkIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzIGZvciBub3cuCgpMZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBtb2RpZnlpbmcgdGhlIGJ1bGsgZnJlZWluZyBsb2dpYyB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHNwbGl0dGluZyBgZnJlZV90b19wY3NfYnVsa2AgaW50byB0d28gZnVuY3Rpb25zOiB0aGUgb3JpZ2luYWwgYGZyZWVfdG9fcGNzX2J1bGtgIGFuZCBhIG5ldyBgX19mcmVlX3RvX3Bjc19iYXRjaGAuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSByZWZhY3RvcmluZyBvZiBzb3J0cywgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb3JlLgoKTXkgdGhpbmtpbmcgaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by4gU2luY2UgdGhpcyBwYXRjaCB0b3VjaGVzIHRoZSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIHBhdGgsIGl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBob3cgU0xVQiBmcmVlcyBtZW1vcnkuIEV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGxpa2UgYF9fZnJlZV90b19wY3NfYmF0Y2hgIHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBpbiB0aGUgbWVtb3J5IGZyZWVpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLgoKTXkgZm9jdXMgaXMgb24gdGhlc2Ugc3ltYm9sczogYF9fZnJlZV90b19wY3NfYmF0Y2hgLCBgZnJlZV90b19wY3NfYnVsa2AsIGFuZCwgb2YgY291cnNlLCB0aGUgY2FsbGluZyBmdW5jdGlvbiBga21lbV9jYWNoZV9mcmVlX2J1bGtgLiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgb24uIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZyZWVfdG9fcGNzX2JhdGNoJiMzNDssCiAgICAmIzM0O2ZyZWVfdG9fcGNzX2J1bGsmIzM0OywKICAgICYjMzQ7a21lbV9jYWNoZV9mcmVlX2J1bGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJ1bGsgZnJlZWluZyBsb2dpYyBpbiB0aGUgU0xVQiBhbGxvY2F0b3IgYnkgZXh0cmFjdGluZyBhIGJhdGNoIHByb2Nlc3NpbmcgZnVuY3Rpb24gYF9fZnJlZV90b19wY3NfYmF0Y2hgLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIG1lbW9yeSBmcmVlaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZnJlZV90b19wY3NfYmF0Y2gmIzM0OywKICAgICYjMzQ7ZnJlZV90b19wY3NfYnVsayYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2ZyZWVfYnVsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYnVsayBmcmVlaW5nIGxvZ2ljIGluIHRoZSBTTFVCIGFsbG9jYXRvciBieSBleHRyYWN0aW5nIGEgYmF0Y2ggcHJvY2Vzc2luZyBmdW5jdGlvbiBgX19mcmVlX3RvX3Bjc19iYXRjaGAuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGttZW1fY2FjaGVfZnJlZV9idWxrYCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gbWVtb3J5IGZyZWVpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0Mjo0OS44NDU2MTczNTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM0Njk5Mzk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZyZWVfdG9fcGNzX2JhdGNoXCIsXG4gICAgXCJmcmVlX3RvX3Bjc19idWxrXCIsXG4gICAgXCJrbWVtX2NhY2hlX2ZyZWVfYnVsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDI6NDkuODQ1NjIzNzk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjc5MTU3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkODhjZmJkZDUyNzdlNGE5MWY0Mjc2MmFmNDEzMmVmMjlmZGNiMTk5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjA6NDI6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jXFxuaW5kZXggNjVmZWJlOTU3ODg2YjIuLjNmMTNmNDk3YWFiNGU1IDEwMDY0NFxcbi0tLSBhL21tL3NsdWIuY1xcbisrKyBiL21tL3NsdWIuY1xcbkBAIC02MjAzLDUxICs2MjAzLDIxIEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBjYW5fZnJlZV90b19wY3Moc3RydWN0IHNsYWIgKnNsYWIpXFxuIH1cXG4gXFxuIC8qXFxuLSAqIEJ1bGsgZnJlZSBvYmplY3RzIHRvIHRoZSBwZXJjcHUgc2hlYXZlcy5cXG4tICogVW5saWtlIGZyZWVfdG9fcGNzKCkgdGhpcyBpbmNsdWRlcyB0aGUgY2FsbHMgdG8gYWxsIG5lY2Vzc2FyeSBob29rc1xcbi0gKiBhbmQgdGhlIGZhbGxiYWNrIHRvIGZyZWVpbmcgdG8gc2xhYiBwYWdlcy5cXG4rICogVHJ5IHRvIGZyZWUgYXMgbWFueSBvYmplY3RzIChhbHJlYWR5IHByb2Nlc3NlZCBieSBmcmVlIGhvb2tzKSBhcyBwb3NzaWJsZSB0b1xcbisgKiBhIHNpbmdsZSBwZXItY3B1IHNoZWFmLlxcbisgKlxcbisgKiBSZXR1cm5zIGhvdyBtYW55IG9iamVjdHMgd2VyZSBmcmVlZC4gWmVybyBtZWFucyBmYWlsdXJlIGFuZCB0aGUgY2FsbGVyIHNob3VsZFxcbisgKiBmYWxsIGJhY2sgdG8gX19rbWVtX2NhY2hlX2ZyZWVfYnVsaygpLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IF9fZnJlZV90b19wY3NfYmF0Y2goc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzO1xcbiBcXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqbWFpbiwgKmVtcHR5O1xcbi1cXHRib29sIGluaXQgPSBzbGFiX3dhbnRfaW5pdF9vbl9mcmVlKHMpO1xcbi1cXHR1bnNpZ25lZCBpbnQgYmF0Y2gsIGkgPSAwO1xcbiBcXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xcbi1cXHR2b2lkICpyZW1vdGVfb2JqZWN0c1tQQ1NfQkFUQ0hfTUFYXTtcXG4tXFx0dW5zaWduZWQgaW50IHJlbW90ZV9uciA9IDA7XFxuLVxcbi1cXHR3aGlsZSAoaSBcXHUwMDNjIHNpemUpIHtcXG4tXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIocFtpXSk7XFxuLVxcbi1cXHRcXHRtZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICsgaSwgMSk7XFxuLVxcdFxcdGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCArIGksIDEpO1xcbi1cXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCBmYWxzZSkpKSB7XFxuLVxcdFxcdFxcdHBbaV0gPSBwWy0tc2l6ZV07XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRpZiAodW5saWtlbHkoIWNhbl9mcmVlX3RvX3BjcyhzbGFiKSkpIHtcXG4tXFx0XFx0XFx0cmVtb3RlX29iamVjdHNbcmVtb3RlX25yXSA9IHBbaV07XFxuLVxcdFxcdFxcdHBbaV0gPSBwWy0tc2l6ZV07XFxuLVxcdFxcdFxcdGlmICgrK3JlbW90ZV9uciBcXHUwMDNlPSBQQ1NfQkFUQ0hfTUFYKSB7XFxuLVxcdFxcdFxcdFxcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcXHUwMDI2cmVtb3RlX29iamVjdHNbMF0pO1xcbi1cXHRcXHRcXHRcXHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xcbi1cXHRcXHRcXHRcXHRyZW1vdGVfbnIgPSAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRpKys7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghc2l6ZSlcXG4tXFx0XFx0Z290byBmbHVzaF9yZW1vdGU7XFxuK1xcdHVuc2lnbmVkIGludCBiYXRjaDtcXG4gXFxuLW5leHRfYmF0Y2g6XFxuIFxcdGlmICghbG9jYWxfdHJ5bG9jayhcXHUwMDI2cy1cXHUwMDNlY3B1X3NoZWF2ZXMtXFx1MDAzZWxvY2spKVxcbi1cXHRcXHRnb3RvIGZhbGxiYWNrO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHBjcyA9IHRoaXNfY3B1X3B0cihzLVxcdTAwM2VjcHVfc2hlYXZlcyk7XFxuIFxcbkBAIC02MjkzLDI5ICs2MjYzLDY1IEBAIHN0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4gXFxuIFxcdHN0YXRfYWRkKHMsIEZSRUVfRkFTVFBBVEgsIGJhdGNoKTtcXG4gXFxuLVxcdGlmIChiYXRjaCBcXHUwMDNjIHNpemUpIHtcXG4tXFx0XFx0cCArPSBiYXRjaDtcXG4tXFx0XFx0c2l6ZSAtPSBiYXRjaDtcXG4tXFx0XFx0Z290byBuZXh0X2JhdGNoO1xcbitcXHRyZXR1cm4gYmF0Y2g7XFxuK1xcbitub19lbXB0eTpcXG4rXFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogQnVsayBmcmVlIG9iamVjdHMgdG8gdGhlIHBlcmNwdSBzaGVhdmVzLlxcbisgKiBVbmxpa2UgZnJlZV90b19wY3MoKSB0aGlzIGluY2x1ZGVzIHRoZSBjYWxscyB0byBhbGwgbmVjZXNzYXJ5IGhvb2tzXFxuKyAqIGFuZCB0aGUgZmFsbGJhY2sgdG8gZnJlZWluZyB0byBzbGFiIHBhZ2VzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbit7XFxuK1xcdGJvb2wgaW5pdCA9IHNsYWJfd2FudF9pbml0X29uX2ZyZWUocyk7XFxuK1xcdHZvaWQgKnJlbW90ZV9vYmplY3RzW1BDU19CQVRDSF9NQVhdO1xcbitcXHR1bnNpZ25lZCBpbnQgcmVtb3RlX25yID0gMDtcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTspIHtcXG4rXFx0XFx0c3RydWN0IHNsYWIgKnNsYWIgPSB2aXJ0X3RvX3NsYWIocFtpXSk7XFxuK1xcbitcXHRcXHRtZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICsgaSwgMSk7XFxuK1xcdFxcdGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCArIGksIDEpO1xcbitcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCBmYWxzZSkpKSB7XFxuK1xcdFxcdFxcdHBbaV0gPSBwWy0tc2l6ZV07XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAodW5saWtlbHkoIWNhbl9mcmVlX3RvX3BjcyhzbGFiKSkpIHtcXG4rXFx0XFx0XFx0cmVtb3RlX29iamVjdHNbcmVtb3RlX25yXSA9IHBbaV07XFxuK1xcdFxcdFxcdHBbaV0gPSBwWy0tc2l6ZV07XFxuK1xcdFxcdFxcdGlmICgrK3JlbW90ZV9uciBcXHUwMDNlPSBQQ1NfQkFUQ0hfTUFYKSB7XFxuK1xcdFxcdFxcdFxcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcXHUwMDI2cmVtb3RlX29iamVjdHNbMF0pO1xcbitcXHRcXHRcXHRcXHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xcbitcXHRcXHRcXHRcXHRyZW1vdGVfbnIgPSAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpKys7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChyZW1vdGVfbnIpXFxuLVxcdFxcdGdvdG8gZmx1c2hfcmVtb3RlO1xcbitcXHR3aGlsZSAoc2l6ZSkge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2hfZnJlZWQgPSBfX2ZyZWVfdG9fcGNzX2JhdGNoKHMsIHNpemUsIHApO1xcbiBcXG4tXFx0cmV0dXJuO1xcbitcXHRcXHRpZiAoIWJhdGNoX2ZyZWVkKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFxuLW5vX2VtcHR5Olxcbi1cXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cCArPSBiYXRjaF9mcmVlZDtcXG4rXFx0XFx0c2l6ZSAtPSBiYXRjaF9mcmVlZDtcXG4rXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogaWYgd2UgZGVwbGV0ZWQgYWxsIGVtcHR5IHNoZWF2ZXMgaW4gdGhlIGJhcm4gb3IgdGhlcmUgYXJlIHRvb1xcbi1cXHQgKiBtYW55IGZ1bGwgc2hlYXZlcywgZnJlZSB0aGUgcmVzdCB0byBzbGFiIHBhZ2VzXFxuLVxcdCAqL1xcbi1mYWxsYmFjazpcXG4tXFx0X19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCBzaXplLCBwKTtcXG4tXFx0c3RhdF9hZGQocywgRlJFRV9TTE9XUEFUSCwgc2l6ZSk7XFxuK1xcdGlmIChzaXplKSB7XFxuK1xcdFxcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgc2l6ZSwgcCk7XFxuK1xcdFxcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHNpemUpO1xcbitcXHR9XFxuIFxcbi1mbHVzaF9yZW1vdGU6XFxuIFxcdGlmIChyZW1vdGVfbnIpIHtcXG4gXFx0XFx0X19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCByZW1vdGVfbnIsIFxcdTAwMjZyZW1vdGVfb2JqZWN0c1swXSk7XFxuIFxcdFxcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQyOjUwLjY3NDEzMDgyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1MTg0NzM1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mcmVlX3RvX3Bjc19iYXRjaFwiLFxuICAgIFwiZnJlZV90b19wY3NfYnVsa1wiLFxuICAgIFwia21lbV9jYWNoZV9mcmVlX2J1bGtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYnVsayBmcmVlaW5nIGxvZ2ljIGluIHRoZSBTTFVCIGFsbG9jYXRvciBieSBleHRyYWN0aW5nIGEgYmF0Y2ggcHJvY2Vzc2luZyBmdW5jdGlvbiBgX19mcmVlX3RvX3Bjc19iYXRjaGAuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGttZW1fY2FjaGVfZnJlZV9idWxrYCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gbWVtb3J5IGZyZWVpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDg4Y2ZiZGQ1Mjc3ZTRhOTFmNDI3NjJhZjQxMzJlZjI5ZmRjYjE5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjA6NDI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDY1ZmViZTk1Nzg4NmIyLi4zZjEzZjQ5N2FhYjRlNSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtNjIwMyw1MSArNjIwMywyMSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxuIH1cbiBcbiAvKlxuLSAqIEJ1bGsgZnJlZSBvYmplY3RzIHRvIHRoZSBwZXJjcHUgc2hlYXZlcy5cbi0gKiBVbmxpa2UgZnJlZV90b19wY3MoKSB0aGlzIGluY2x1ZGVzIHRoZSBjYWxscyB0byBhbGwgbmVjZXNzYXJ5IGhvb2tzXG4tICogYW5kIHRoZSBmYWxsYmFjayB0byBmcmVlaW5nIHRvIHNsYWIgcGFnZXMuXG4rICogVHJ5IHRvIGZyZWUgYXMgbWFueSBvYmplY3RzIChhbHJlYWR5IHByb2Nlc3NlZCBieSBmcmVlIGhvb2tzKSBhcyBwb3NzaWJsZSB0b1xuKyAqIGEgc2luZ2xlIHBlci1jcHUgc2hlYWYuXG4rICpcbisgKiBSZXR1cm5zIGhvdyBtYW55IG9iamVjdHMgd2VyZSBmcmVlZC4gWmVybyBtZWFucyBmYWlsdXJlIGFuZCB0aGUgY2FsbGVyIHNob3VsZFxuKyAqIGZhbGwgYmFjayB0byBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKCkuXG4gICovXG4tc3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19mcmVlX3RvX3Bjc19iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxuIHtcbiBcdHN0cnVjdCBzbHViX3BlcmNwdV9zaGVhdmVzICpwY3M7XG4gXHRzdHJ1Y3Qgc2xhYl9zaGVhZiAqbWFpbiwgKmVtcHR5O1xuLVx0Ym9vbCBpbml0ID0gc2xhYl93YW50X2luaXRfb25fZnJlZShzKTtcbi1cdHVuc2lnbmVkIGludCBiYXRjaCwgaSA9IDA7XG4gXHRzdHJ1Y3Qgbm9kZV9iYXJuICpiYXJuO1xuLVx0dm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07XG4tXHR1bnNpZ25lZCBpbnQgcmVtb3RlX25yID0gMDtcbi1cbi1cdHdoaWxlIChpIFx1MDAzYyBzaXplKSB7XG4tXHRcdHN0cnVjdCBzbGFiICpzbGFiID0gdmlydF90b19zbGFiKHBbaV0pO1xuLVxuLVx0XHRtZW1jZ19zbGFiX2ZyZWVfaG9vayhzLCBzbGFiLCBwICsgaSwgMSk7XG4tXHRcdGFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCArIGksIDEpO1xuLVxuLVx0XHRpZiAodW5saWtlbHkoIXNsYWJfZnJlZV9ob29rKHMsIHBbaV0sIGluaXQsIGZhbHNlKSkpIHtcbi1cdFx0XHRwW2ldID0gcFstLXNpemVdO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4tXHRcdGlmICh1bmxpa2VseSghY2FuX2ZyZWVfdG9fcGNzKHNsYWIpKSkge1xuLVx0XHRcdHJlbW90ZV9vYmplY3RzW3JlbW90ZV9ucl0gPSBwW2ldO1xuLVx0XHRcdHBbaV0gPSBwWy0tc2l6ZV07XG4tXHRcdFx0aWYgKCsrcmVtb3RlX25yIFx1MDAzZT0gUENTX0JBVENIX01BWCkge1xuLVx0XHRcdFx0X19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCByZW1vdGVfbnIsIFx1MDAyNnJlbW90ZV9vYmplY3RzWzBdKTtcbi1cdFx0XHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7XG4tXHRcdFx0XHRyZW1vdGVfbnIgPSAwO1xuLVx0XHRcdH1cbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHRpKys7XG4tXHR9XG4tXG4tXHRpZiAoIXNpemUpXG4tXHRcdGdvdG8gZmx1c2hfcmVtb3RlO1xuK1x0dW5zaWduZWQgaW50IGJhdGNoO1xuIFxuLW5leHRfYmF0Y2g6XG4gXHRpZiAoIWxvY2FsX3RyeWxvY2soXHUwMDI2cy1cdTAwM2VjcHVfc2hlYXZlcy1cdTAwM2Vsb2NrKSlcbi1cdFx0Z290byBmYWxsYmFjaztcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHRwY3MgPSB0aGlzX2NwdV9wdHIocy1cdTAwM2VjcHVfc2hlYXZlcyk7XG4gXG5AQCAtNjI5MywyOSArNjI2Myw2NSBAQCBzdGF0aWMgdm9pZCBmcmVlX3RvX3Bjc19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXG4gXG4gXHRzdGF0X2FkZChzLCBGUkVFX0ZBU1RQQVRILCBiYXRjaCk7XG4gXG4tXHRpZiAoYmF0Y2ggXHUwMDNjIHNpemUpIHtcbi1cdFx0cCArPSBiYXRjaDtcbi1cdFx0c2l6ZSAtPSBiYXRjaDtcbi1cdFx0Z290byBuZXh0X2JhdGNoO1xuK1x0cmV0dXJuIGJhdGNoO1xuK1xuK25vX2VtcHR5OlxuK1x0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBCdWxrIGZyZWUgb2JqZWN0cyB0byB0aGUgcGVyY3B1IHNoZWF2ZXMuXG4rICogVW5saWtlIGZyZWVfdG9fcGNzKCkgdGhpcyBpbmNsdWRlcyB0aGUgY2FsbHMgdG8gYWxsIG5lY2Vzc2FyeSBob29rc1xuKyAqIGFuZCB0aGUgZmFsbGJhY2sgdG8gZnJlZWluZyB0byBzbGFiIHBhZ2VzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGZyZWVfdG9fcGNzX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcbit7XG4rXHRib29sIGluaXQgPSBzbGFiX3dhbnRfaW5pdF9vbl9mcmVlKHMpO1xuK1x0dm9pZCAqcmVtb3RlX29iamVjdHNbUENTX0JBVENIX01BWF07XG4rXHR1bnNpZ25lZCBpbnQgcmVtb3RlX25yID0gMDtcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBzaXplOykge1xuK1x0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHZpcnRfdG9fc2xhYihwW2ldKTtcbitcbitcdFx0bWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCArIGksIDEpO1xuK1x0XHRhbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAgKyBpLCAxKTtcbitcbitcdFx0aWYgKHVubGlrZWx5KCFzbGFiX2ZyZWVfaG9vayhzLCBwW2ldLCBpbml0LCBmYWxzZSkpKSB7XG4rXHRcdFx0cFtpXSA9IHBbLS1zaXplXTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAodW5saWtlbHkoIWNhbl9mcmVlX3RvX3BjcyhzbGFiKSkpIHtcbitcdFx0XHRyZW1vdGVfb2JqZWN0c1tyZW1vdGVfbnJdID0gcFtpXTtcbitcdFx0XHRwW2ldID0gcFstLXNpemVdO1xuK1x0XHRcdGlmICgrK3JlbW90ZV9uciBcdTAwM2U9IFBDU19CQVRDSF9NQVgpIHtcbitcdFx0XHRcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcdTAwMjZyZW1vdGVfb2JqZWN0c1swXSk7XG4rXHRcdFx0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCByZW1vdGVfbnIpO1xuK1x0XHRcdFx0cmVtb3RlX25yID0gMDtcbitcdFx0XHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aSsrO1xuIFx0fVxuIFxuLVx0aWYgKHJlbW90ZV9ucilcbi1cdFx0Z290byBmbHVzaF9yZW1vdGU7XG4rXHR3aGlsZSAoc2l6ZSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgYmF0Y2hfZnJlZWQgPSBfX2ZyZWVfdG9fcGNzX2JhdGNoKHMsIHNpemUsIHApO1xuIFxuLVx0cmV0dXJuO1xuK1x0XHRpZiAoIWJhdGNoX2ZyZWVkKVxuK1x0XHRcdGJyZWFrO1xuIFxuLW5vX2VtcHR5OlxuLVx0bG9jYWxfdW5sb2NrKFx1MDAyNnMtXHUwMDNlY3B1X3NoZWF2ZXMtXHUwMDNlbG9jayk7XG4rXHRcdHAgKz0gYmF0Y2hfZnJlZWQ7XG4rXHRcdHNpemUgLT0gYmF0Y2hfZnJlZWQ7XG4rXHR9XG4gXG4tXHQvKlxuLVx0ICogaWYgd2UgZGVwbGV0ZWQgYWxsIGVtcHR5IHNoZWF2ZXMgaW4gdGhlIGJhcm4gb3IgdGhlcmUgYXJlIHRvb1xuLVx0ICogbWFueSBmdWxsIHNoZWF2ZXMsIGZyZWUgdGhlIHJlc3QgdG8gc2xhYiBwYWdlc1xuLVx0ICovXG4tZmFsbGJhY2s6XG4tXHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHNpemUsIHApO1xuLVx0c3RhdF9hZGQocywgRlJFRV9TTE9XUEFUSCwgc2l6ZSk7XG4rXHRpZiAoc2l6ZSkge1xuK1x0XHRfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIHNpemUsIHApO1xuK1x0XHRzdGF0X2FkZChzLCBGUkVFX1NMT1dQQVRILCBzaXplKTtcbitcdH1cbiBcbi1mbHVzaF9yZW1vdGU6XG4gXHRpZiAocmVtb3RlX25yKSB7XG4gXHRcdF9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgcmVtb3RlX25yLCBcdTAwMjZyZW1vdGVfb2JqZWN0c1swXSk7XG4gXHRcdHN0YXRfYWRkKHMsIEZSRUVfU0xPV1BBVEgsIHJlbW90ZV9ucik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0Mjo1MC42NzQxMzI0MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIwMDUyNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGNsZWFybHkgbWVzc2luZyB3aXRoIHRoZSBTTFVCIGFsbG9jYXRvciDigJMgdGhhdCdzIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gdGhpcyBpcyBoaWdoLXZhbHVlIHN0dWZmLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVmYWN0b3JpbmcgYGZyZWVfdG9fcGNzX2J1bGtgLiBUaGUgcGF0Y2ggc3BsaXRzIG9mZiBgX19mcmVlX3RvX3Bjc19iYXRjaGAsIHdoaWNoIGltcGxpZXMgdGhleSdyZSBjaGFuZ2luZyBob3cgb2JqZWN0cyBhcmUgZnJlZWQgaW4gYnVsayBpbnRvIHBlci1jcHUgc2hlYXZlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgZGVlcCBkaXZlIGFuZCwgZnJhbmtseSwgbmVlZHMgZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcy5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhvc2UgZnVuY3Rpb25zOiBgZnJlZV90b19wY3NfYnVsa2AgYW5kIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIFNMVUIgaXMgdGhlIGRlZmF1bHQsIHNvIGl0J3MgcHJvYmFibHkgZW5hYmxlZC4gSG93ZXZlciwgdGhlIHVzZSBvZiBwZXItY3B1IHNoZWF2ZXMgKFBDUykgZ2l2ZXMgbWUgcGF1c2Ug4oCTIGl0IG1pZ2h0IGJlIGJlaGluZCBhIGNvbmZpZ3VyYXRpb24gZmxhZy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgbW0vc2x1Yi5jYCBxdWlja2x5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhvc2UgZnVuY3Rpb24gbmFtZXMgYW5kIG1lbnRpb25zIG9mIGBjcHVfc2hlYXZlc2AgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscyBvciBvdGhlciBudWFuY2VzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQyOjU1LjI5NDE4NjUxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc5ODY2OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZyZWVfdG9fcGNzX2J1bGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz02MjEyPXN0YXRpYyB1bnNpZ25lZCBpbnQgX19mcmVlX3RvX3Bjc19iYXRjaChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTYyNzgtICovXFxubW0vc2x1Yi5jOjYyNzk6c3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbm1tL3NsdWIuYy02MjgwLXtcXG4tLVxcbm1tL3NsdWIuYz03MTU5PXZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHNpemVfdCBzaXplLCB2b2lkICoqcClcXG4tLVxcbm1tL3NsdWIuYy03MTY4LVxcdGlmIChzIFxcdTAwMjZcXHUwMDI2IGNhY2hlX2hhc19zaGVhdmVzKHMpKSB7XFxubW0vc2x1Yi5jOjcxNjk6XFx0XFx0ZnJlZV90b19wY3NfYnVsayhzLCBzaXplLCBwKTtcXG5tbS9zbHViLmMtNzE3MC1cXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQyOjU3LjM3NDA1NzY4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzE5NTQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgU2x1YiBDYWNoZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIGhlcmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBjYWNoZV9oYXNfc2hlYXZlc2Agb3IgYGNwdV9zaGVhdmVzYCBpcyBkZWZpbmVkIGFueXdoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBpbiB0aGUgdXN1YWwgc3VzcGVjdHMsIHRoZSBgbW0vc2x1Yi5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCBvZiBzaGVhdmVzIGFuZCBob3cgdGhvc2Ugc3RydWN0dXJlcyBtaWdodCBiZSBtYW5hZ2VkLCB0aGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSWYgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0aGVyZSwgSSdsbCB0aGVuIG1vdmUgb24gdG8gYG1tL0tjb25maWdgLiBJdOKAmXMgbGlrZWx5IG9uZSBvZiB0aGVzZSBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRldGVybWluaW5nIHRoZSB1c2Ugb3IgaGFuZGxpbmcgb2Ygc2hlYXZlcyB3aXRoaW4gdGhlIFNMVUIgYWxsb2NhdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTE0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDM6MDAuMjA2MDE0OTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTA4NDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWNoZV9oYXNfc2hlYXZlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTIyMj1zdHJ1Y3Qga21lbV9jYWNoZSB7XFxuLS1cXG5tbS9zbGFiLmgtMjgzLSAqL1xcbm1tL3NsYWIuaDoyODQ6c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWIuaC0yODUte1xcbi0tXFxubW0vc2xhYl9jb21tb24uYz0yMTEwPXZvaWQga3ZmcmVlX3JjdV9iYXJyaWVyX29uX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWJfY29tbW9uLmMtMjExMS17XFxubW0vc2xhYl9jb21tb24uYzoyMTEyOlxcdGlmIChjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xcbm1tL3NsYWJfY29tbW9uLmMtMjExMy1cXHRcXHRjcHVzX3JlYWRfbG9jaygpO1xcbi0tXFxubW0vc2x1Yi5jPTMwNDE9c3RhdGljIHZvaWQgcGNzX2Rlc3Ryb3koc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtMzA1Mi1cXHQvKiBwY3MtXFx1MDAzZW1haW4gY2FuIG9ubHkgcG9pbnQgdG8gdGhlIGJvb3RzdHJhcCBzaGVhZiwgbm90aGluZyB0byBmcmVlICovXFxubW0vc2x1Yi5jOjMwNTM6XFx0aWYgKCFjYWNoZV9oYXNfc2hlYXZlcyhzKSlcXG5tbS9zbHViLmMtMzA1NC1cXHRcXHRnb3RvIGZyZWVfcGNzO1xcbi0tXFxubW0vc2x1Yi5jPTM5ODI9c3RhdGljIGJvb2wgaGFzX3Bjc191c2VkKGludCBjcHUsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTM5ODUtXFxubW0vc2x1Yi5jOjM5ODY6XFx0aWYgKCFjYWNoZV9oYXNfc2hlYXZlcyhzKSlcXG5tbS9zbHViLmMtMzk4Ny1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9zbHViLmM9Mzk5OT1zdGF0aWMgdm9pZCBmbHVzaF9jcHVfc2hlYXZlcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS9zbHViLmMtNDAwNy1cXG5tbS9zbHViLmM6NDAwODpcXHRpZiAoY2FjaGVfaGFzX3NoZWF2ZXMocykpXFxubW0vc2x1Yi5jLTQwMDktXFx0XFx0cGNzX2ZsdXNoX2FsbChzKTtcXG4tLVxcbm1tL3NsdWIuYz00MTA0PXZvaWQgZmx1c2hfYWxsX3JjdV9zaGVhdmVzKHZvaWQpXFxuLS1cXG5tbS9zbHViLmMtNDExMS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsIFxcdTAwMjZzbGFiX2NhY2hlcywgbGlzdCkge1xcbm1tL3NsdWIuYzo0MTEyOlxcdFxcdGlmICghY2FjaGVfaGFzX3NoZWF2ZXMocykpXFxubW0vc2x1Yi5jLTQxMTMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9zbHViLmM9NDEyMz1zdGF0aWMgaW50IHNsdWJfY3B1X3NldHVwKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5tbS9zbHViLmMtNDE0Ni1cXHRcXHQgKi9cXG5tbS9zbHViLmM6NDE0NzpcXHRcXHRpZiAoIWNhY2hlX2hhc19zaGVhdmVzKHMpIHx8IGdldF9iYXJuX25vZGUocywgbmlkKSlcXG5tbS9zbHViLmMtNDE0OC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3NsdWIuYz00MTcyPXN0YXRpYyBpbnQgc2x1Yl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxubW0vc2x1Yi5jLTQxNzctXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcXHUwMDI2c2xhYl9jYWNoZXMsIGxpc3QpIHtcXG5tbS9zbHViLmM6NDE3ODpcXHRcXHRpZiAoY2FjaGVfaGFzX3NoZWF2ZXMocykpXFxubW0vc2x1Yi5jLTQxNzktXFx0XFx0XFx0X19wY3NfZmx1c2hfYWxsX2NwdShzLCBjcHUpO1xcbi0tXFxubW0vc2x1Yi5jPTQ2NDM9X19wY3NfcmVwbGFjZV9lbXB0eV9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxcbi0tXFxubW0vc2x1Yi5jLTQ2NTMtXFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqL1xcbm1tL3NsdWIuYzo0NjU0OlxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxubW0vc2x1Yi5jLTQ2NTUtXFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zbHViLmM9NDgzMT11bnNpZ25lZCBpbnQgYWxsb2NfZnJvbV9wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTQ4NDgtXFxubW0vc2x1Yi5jOjQ4NDk6XFx0XFx0aWYgKHVubGlrZWx5KCFjYWNoZV9oYXNfc2hlYXZlcyhzKSkpIHtcXG5tbS9zbHViLmMtNDg1MC1cXHRcXHRcXHRsb2NhbF91bmxvY2soXFx1MDAyNnMtXFx1MDAzZWNwdV9zaGVhdmVzLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm1tL3NsdWIuYz01ODM1PV9fcGNzX3JlcGxhY2VfZnVsbF9tYWluKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2x1Yl9wZXJjcHVfc2hlYXZlcyAqcGNzLFxcbi0tXFxubW0vc2x1Yi5jLTU4NDUtXFx0LyogQm9vdHN0cmFwIG9yIGRlYnVnIGNhY2hlLCBiYWNrIG9mZiAqL1xcbm1tL3NsdWIuYzo1ODQ2OlxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxubW0vc2x1Yi5jLTU4NDctXFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zbHViLmM9NjA1Mz1ib29sIF9fa2ZyZWVfcmN1X3NoZWFmKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmopXFxuLS1cXG5tbS9zbHViLmMtNjA3My1cXHRcXHQvKiBCb290c3RyYXAgb3IgZGVidWcgY2FjaGUsIGZhbGwgYmFjayAqL1xcbm1tL3NsdWIuYzo2MDc0OlxcdFxcdGlmICh1bmxpa2VseSghY2FjaGVfaGFzX3NoZWF2ZXMocykpKSB7XFxubW0vc2x1Yi5jLTYwNzUtXFx0XFx0XFx0bG9jYWxfdW5sb2NrKFxcdTAwMjZzLVxcdTAwM2VjcHVfc2hlYXZlcy1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zbHViLmM9NzE1OT12b2lkIGttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxuLS1cXG5tbS9zbHViLmMtNzE2Ny1cXHQgKi9cXG5tbS9zbHViLmM6NzE2ODpcXHRpZiAocyBcXHUwMDI2XFx1MDAyNiBjYWNoZV9oYXNfc2hlYXZlcyhzKSkge1xcbm1tL3NsdWIuYy03MTY5LVxcdFxcdGZyZWVfdG9fcGNzX2J1bGsocywgc2l6ZSwgcCk7XFxuLS1cXG5tbS9zbHViLmM9Nzc1Nz1zdGF0aWMgaW50IGluaXRfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy03Nzc3LVxcbm1tL3NsdWIuYzo3Nzc4OlxcdGlmIChzbGFiX3N0YXRlID09IERPV04gfHwgIWNhY2hlX2hhc19zaGVhdmVzKHMpKVxcbm1tL3NsdWIuYy03Nzc5LVxcdFxcdHJldHVybiAxO1xcbi0tXFxubW0vc2x1Yi5jPTgwNzA9aW50IF9fa21lbV9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy04MDc3LVxcdC8qIHdlIG1pZ2h0IGhhdmUgcmN1IHNoZWF2ZXMgaW4gZmxpZ2h0ICovXFxubW0vc2x1Yi5jOjgwNzg6XFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpKVxcbm1tL3NsdWIuYy04MDc5LVxcdFxcdHJjdV9iYXJyaWVyKCk7XFxuLS1cXG5tbS9zbHViLmM9ODM3Nj1zdGF0aWMgaW50IHNsYWJfbWVtX2dvaW5nX29ubGluZV9jYWxsYmFjayhpbnQgbmlkKVxcbi0tXFxubW0vc2x1Yi5jLTgzOTctXFxubW0vc2x1Yi5jOjgzOTg6XFx0XFx0aWYgKGNhY2hlX2hhc19zaGVhdmVzKHMpIFxcdTAwMjZcXHUwMDI2ICFnZXRfYmFybl9ub2RlKHMsIG5pZCkpIHtcXG5tbS9zbHViLmMtODM5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDM6MDAuMzE3MTI3OTE0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MDgwNTI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGBjYWNoZV9oYXNfc2hlYXZlc2AgaW4gYG1tL3NsYWIuaGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIHNsYWIgYWxsb2NhdG9yIGhhbmRsZXMgc2hlYXZlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBpbnRvIHRoZSBgbW0vc2xhYi5oYCBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBjYWNoZV9oYXNfc2hlYXZlc2AgYWN0dWFsbHkgKm1lYW5zKiBpbiB0aGUgY29udGV4dCBvZiBzbGFiIGFsbG9jYXRpb24uIElzIGl0IGEgYm9vbGVhbj8gQW4gZW51bT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBhIGNhY2hlICpoYXZpbmcqIHNoZWF2ZXM/IERvZXMgaXQgcmVsYXRlIHRvIHBhZ2UgZnJhZ21lbnRhdGlvbiBvciBOVU1BIGFmZmluaXR5IGluIGFueSB3YXk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgdG8gcmVhc29uIGFib3V0IHRoZSBsYXJnZXIgc2xhYiBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcsIHRoYXQgaXQgaXMgbGlrZWx5IGEgYm9vbGVhbiB2YXJpYWJsZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNhY2hlIGlzIHVzaW5nIHNoZWF2ZXMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZmxhZyBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgc2xhYiBhbGxvY2F0b3IgYXQgYm90aCBhbGxvY2F0aW9uIGFuZCBmcmVlIHRpbWUuIEVzc2VudGlhbGx5LCBJIGFtIHNlZWtpbmcgYSBjbGVhciBkZWZpbml0aW9uIGFuZCBjb250ZXh0IHRvIGZyYW1lIHRoZSBmb2xsb3dpbmcgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0MzowMy43MDc5MzU1MzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMjExNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgYm9vbCBjYWNoZV9oYXNfc2hlYXZlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbGFiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2xhYi5oPTIyMj1zdHJ1Y3Qga21lbV9jYWNoZSB7XFxuLS1cXG5tbS9zbGFiLmgtMjgzLSAqL1xcbm1tL3NsYWIuaDoyODQ6c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsYWIuaC0yODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0MzowMy45OTAxNTIwODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODAzNDMxNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9zbGFiLmhgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtbS9zbGFiLmhgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI4NC4gVGhhdCBzZWN0aW9uIGxpa2VseSBjb250YWlucyBzb21lIGNydWNpYWwgZGV0YWlscyByZWxhdGVkIHRvIHdoYXRldmVyIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSXQgY291bGQgYmUgb2JqZWN0IGFsbG9jYXRpb24sIGNhY2hlIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHdpdGhpbiB0aGUgU0xBQiBhbGxvY2F0b3IncyBwdXJ2aWV3LiBLbm93aW5nIHRoZSBjb250ZXh0LCB0aGF0IGxvY2F0aW9uIHNob3VsZCBwcm92aWRlIHNvbWUgaGVscGZ1bCBpbmZvcm1hdGlvbiB0byBnZXQgbWUgc3RhcnRlZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE3MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQzOjA2Ljc5MzU4NTc2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbGFiLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcbiAyNzE6XFx0I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxuIDI3MjpcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZV9zdGF0cyBfX3BlcmNwdSAqY3B1X3N0YXRzO1xcbiAyNzM6XFx0I2VuZGlmXFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlX3Blcl9ub2RlX3B0cnMgcGVyX25vZGVbTUFYX05VTU5PREVTXTtcXG4gMjc2OlxcdH07XFxuIDI3NzpcXHRcXG4gMjc4OlxcdC8qXFxuIDI3OTpcXHQgKiBFdmVyeSBjYWNoZSBoYXMgIU5VTEwgcy1cXHUwMDNlY3B1X3NoZWF2ZXMgYnV0IHRoZXkgbWF5IHBvaW50IHRvIHRoZVxcbiAyODA6XFx0ICogYm9vdHN0cmFwX3NoZWFmIHRlbXBvcmFyaWx5IGR1cmluZyBpbml0LCBvciBwZXJtYW5lbnRseSBmb3IgdGhlIGJvb3QgY2FjaGVzXFxuIDI4MTpcXHQgKiBhbmQgY2FjaGVzIHdpdGggZGVidWdnaW5nIGVuYWJsZWQsIG9yIGFsbCBjYWNoZXMgd2l0aCBDT05GSUdfU0xVQl9USU5ZLiBUaGlzXFxuIDI4MjpcXHQgKiBoZWxwZXIgZGlzdGluZ3Vpc2hlcyB3aGV0aGVyIGNhY2hlIGhhcyByZWFsIG5vbi1ib290c3RyYXAgc2hlYXZlcy5cXG4gMjgzOlxcdCAqL1xcbiAyODQ6XFx0c3RhdGljIGlubGluZSBib29sIGNhY2hlX2hhc19zaGVhdmVzKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbiAyODU6XFx0e1xcbiAyODY6XFx0XFx0LyogVGVzdCBDT05GSUdfU0xVQl9USU5ZIGZvciBjb2RlIGVsaW1pbmF0aW9uIHB1cnBvc2VzICovXFxuIDI4NzpcXHRcXHRyZXR1cm4gIUlTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlc2hlYWZfY2FwYWNpdHk7XFxuIDI4ODpcXHR9XFxuIDI4OTpcXHRcXG4gMjkwOlxcdCNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgIWRlZmluZWQoQ09ORklHX1NMVUJfVElOWSlcXG4gMjkxOlxcdCNkZWZpbmUgU0xBQl9TVVBQT1JUU19TWVNGUyAxXFxuIDI5MjpcXHR2b2lkIHN5c2ZzX3NsYWJfdW5saW5rKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcXG4gMjkzOlxcdHZvaWQgc3lzZnNfc2xhYl9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKTtcXG4gMjk0OlxcdGludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lKTtcXG4gMjk1OlxcdCNlbHNlXFxuIDI5NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfc2xhYl91bmxpbmsoc3RydWN0IGttZW1fY2FjaGUgKnMpIHsgfVxcbiAyOTc6XFx0c3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3NsYWJfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykgeyB9XFxuIDI5ODpcXHRzdGF0aWMgaW5saW5lIGludCBzeXNmc19zbGFiX2FsaWFzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lKVxcbiAyOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0eyByZXR1cm4gMDsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0MzowNi43OTM2NjM3OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3NTEwODkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0xVQiBNZW1vcnkgTWFuYWdlbWVudCBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGBjYWNoZV9oYXNfc2hlYXZlc2AgaXMgdHJ1ZSB3aGVuIGBDT05GSUdfU0xVQl9USU5ZYCBpcyAqbm90KiBlbmFibGVkLiBUaGF0J3MgYSBrZXkgcG9pbnQuIEl0IHNlZW1zIGxpa2UgdGhlIHN0YW5kYXJkIFNMVUIgY29uZmlndXJhdGlvbiBpcyB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB1bmxlc3MgYENPTkZJR19TTFVCX1RJTllgIGlzIGV4cGxpY2l0bHkgc2V0LCBhbmQgaWYgd2UgYXJlIHNlZWluZyBhIGRlZmF1bHQgY29uZmlnLCB3ZSBhcmUgcHJvYmFibHkgbm90IHVzaW5nIHRoZSBUSU5ZIGNvbmZpZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBgQ09ORklHX1NMVUJgIGlzIHRoZSBkZWZhdWx0LCBidXQgYXJlIHRoZXJlIG90aGVyLCBwb3RlbnRpYWxseSBsZXNzIGNvbW1vbiBvbmVzIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBoZXJlPyBMZXQgbWUgY2hlY2ssIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblRoZSBwYXRjaCBmb2N1c2VzIG9uIGBmcmVlX3RvX3Bjc19idWxrYCBhbmQgYF9fZnJlZV90b19wY3NfYmF0Y2hgLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBhYm91dCBidWxrIGZyZWVpbmcgd2l0aGluIFNMVUIuIE5vdywgYXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIGJ1bGsgZnJlZWluZyBleHBsaWNpdGx5PyBObywgaXQgbG9va3MgbGlrZSB0aGF0J3Mgc3RhbmRhcmQgQVBJIGJlaGF2aW9yIGZvciBTTFVCLCBub3QgdGllZCB0byBhbnkgcGFydGljdWxhciBjb25maWcsIG90aGVyIHRoYW4gYmVpbmcgZW5hYmxlZCB1bmxlc3MgeW91J3JlIHVzaW5nIFNMVUJfVElOWS4gU2ltaWxhcmx5LCBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBzaGVhdmVzIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBvdGhlciB0aGFuIFNMVUIncyBkZWZhdWx0IGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaGVyZSBuZWVkcyB0byBiZSBvbiB0aGVzZSB0aHJlZSBzeW1ib2xzOiBgZnJlZV90b19wY3NfYnVsa2AsIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCwgYW5kIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGlmIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCBhbmQgYGZyZWVfdG9fcGNzX2J1bGtgIGFyZSBpbmRlZWQgc3RhdGljIGZ1bmN0aW9ucy4gWWVzLCB0aGV5IGFyZS4gVGhhdCdzIGdvb2QuIFdoaWNoIG1lYW5zIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIGV4cGxvcmUgaXMgYGttZW1fY2FjaGVfZnJlZV9idWxrYC4gU3l6a2FsbGVyICpjYW4qIHRhcmdldCBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgaW4gdGhlIGtlcm5lbCBpbWFnZSwgc28gbGlzdGluZyB0aGUgYF9fZnJlZV90b19wY3NfYmF0Y2hgIGFuZCBgZnJlZV90b19wY3NfYnVsa2Agc3ltYm9scyBpcyBoZWxwZnVsLCBhbmQgSSdsbCBpbmNsdWRlIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AganVzdCBpbiBjYXNlLlxuXG5PbmUgbGFzdCB0aGluZywgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZnJlZV90b19wY3NfYmF0Y2hgIGluIGBtbS9zbHViLmNgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDM6MTMuNDY4Nzc1MjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODc4NDE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZyZWVfdG9fcGNzX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9NjE1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY2FuX2ZyZWVfdG9fcGNzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTYyMTEtICovXFxubW0vc2x1Yi5jOjYyMTI6c3RhdGljIHVuc2lnbmVkIGludCBfX2ZyZWVfdG9fcGNzX2JhdGNoKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApXFxubW0vc2x1Yi5jLTYyMTMte1xcbi0tXFxubW0vc2x1Yi5jPTYyNzk9c3RhdGljIHZvaWQgZnJlZV90b19wY3NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKVxcbi0tXFxubW0vc2x1Yi5jLTYzMTAtXFx0d2hpbGUgKHNpemUpIHtcXG5tbS9zbHViLmM6NjMxMTpcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2hfZnJlZWQgPSBfX2ZyZWVfdG9fcGNzX2JhdGNoKHMsIHNpemUsIHApO1xcbm1tL3NsdWIuYy02MzEyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMDo0MzoxMy44OTc1NjM4NThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzMDMwNDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdG9yIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1lc3Npbmcgd2l0aCB0aGUgY29yZSBtZW1vcnkgYWxsb2NhdG9yLCB3aGljaCBtZWFucyBpdOKAmXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBzdWJqZWN0IHRvIHNvbWUgc2VyaW91cyBmdXp6aW5nLiBUaGUgZnVuY3Rpb25hbGl0eSBpcyB0aGVyZSwgYW5kIHRoYXTigJlzIHRoZSBtYWluIHRoaW5nLiBJJ20gc2VlaW5nIHRocmVlIGtleSBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uOiBgX19mcmVlX3RvX3Bjc19iYXRjaGAsIGBmcmVlX3RvX3Bjc19idWxrYCwgYW5kIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AuIFRob3NlIHNlZW0gbGlrZSB0aGUgbGlrZWx5IGVudHJ5IHBvaW50cyB0byBwcm9iZS5cblxuQXMgZm9yIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2Ugd2UgZG9uJ3QgbmVlZCBhbnl0aGluZyBzcGVjaWFsIGhlcmUsIHdoaWNoIGlzIGEgcmVsaWVmLiBTdGFuZGFyZCBTTFVCIHNob3VsZCBiZSBzdWZmaWNpZW50OyBnb29kIHRoaW5nIFNMVUIgaXMgdGhlIGRlZmF1bHQgdGhlc2UgZGF5cy4gTm8gbmVlZCB0byBzcGVjaWZ5IGFueXRoaW5nIGluIHRoZSBFbmFibGVDb25maWdzIHNlY3Rpb24uXG5cbldhaXQgYSBtaW51dGUsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfU0xVQmAgaXNuJ3QgKmV4cGxpY2l0bHkqIHJlcXVpcmVkLiBXaGlsZSBTTFVCIGlzIHRoZSBkZWZhdWx0IG5vdyB0aGF0IFNMQUIgYW5kIFNMT0IgYXJlIGdvbmUsIGJldHRlciBzYWZlIHRoYW4gc29ycnkuIExldCBtZSBqdXN0IHRha2UgYSBxdWljayBwZWVrIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1NMVUJgIGV4aXN0cyBpbiB0aGUgc3lzdGVtIG9yIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBuZWVkIHRvIGJlIHN1cmUgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQzOjE4LjAyNzg3MTkyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5ODYxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTFVCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNjY9bWVudSBcXFwiU2xhYiBhbGxvY2F0b3Igb3B0aW9uc1xcXCJcXG5tbS9LY29uZmlnLTE2Ny1cXG5tbS9LY29uZmlnOjE2ODpjb25maWcgU0xVQlxcbm1tL0tjb25maWctMTY5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWc9MTcyPWNvbmZpZyBLVkZSRUVfUkNVX0JBVENIRURcXG4tLVxcbm1tL0tjb25maWctMTc2LVxcbm1tL0tjb25maWc6MTc3OmNvbmZpZyBTTFVCX1RJTllcXG5tbS9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJDb25maWd1cmUgZm9yIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MjIxPWNvbmZpZyBTTEFCX0JVQ0tFVFNcXG4tLVxcbm1tL0tjb25maWctMjM3LVxcbm1tL0tjb25maWc6MjM4OmNvbmZpZyBTTFVCX1NUQVRTXFxubW0vS2NvbmZpZy0yMzktXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIwOjQzOjE4LjI5Nzc0MDE5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODk0ODM0NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0xVQiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGNoZWNrIGNvbmZpcm1zIGl0OiBgU0xVQmAgaXMgaW5kZWVkIGRlZmluZWQgYXMgYGRlZl9ib29sIHlgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWdzIGZvciBub3cuXG5cbkxldCdzIGRpdmUgYmFjayBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBTTFVCIGFsbG9jYXRvci4gU3BlY2lmaWNhbGx5LCBpdCdzIHNwbGl0dGluZyBgZnJlZV90b19wY3NfYnVsa2AgaW50byB0d28gZnVuY3Rpb25zOiB0aGUgb3JpZ2luYWwgYGZyZWVfdG9fcGNzX2J1bGtgIGFuZCBhIG5ldyBgX19mcmVlX3RvX3Bjc19iYXRjaGAuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSByZWZhY3RvcmluZyBvZiBzb3J0cywgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb3JlLlxuXG5NeSB0aGlua2luZyBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLiBTaW5jZSB0aGlzIHBhdGNoIHRvdWNoZXMgdGhlIGBrbWVtX2NhY2hlX2ZyZWVfYnVsa2AgcGF0aCwgaXQncyBwcmV0dHkgZnVuZGFtZW50YWwgdG8gaG93IFNMVUIgZnJlZXMgbWVtb3J5LiBFeHRyYWN0aW5nIGEgYmF0Y2ggcHJvY2Vzc2luZyBmdW5jdGlvbiBsaWtlIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBpbiB0aGUgbWVtb3J5IGZyZWVpbmcgcHJvY2Vzcy4gSXQncyBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuXG5cbk15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBfX2ZyZWVfdG9fcGNzX2JhdGNoYCwgYGZyZWVfdG9fcGNzX2J1bGtgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gYGttZW1fY2FjaGVfZnJlZV9idWxrYC4gSSdtIHJlYWR5IHRvIG1vdmUgb24uIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwMCwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjA6NDM6MjQuMTkyNTc2NTg4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZyZWVfdG9fcGNzX2JhdGNoXCIsXG4gICAgXCJmcmVlX3RvX3Bjc19idWxrXCIsXG4gICAgXCJrbWVtX2NhY2hlX2ZyZWVfYnVsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZyZWVfdG9fcGNzX2JhdGNoXCIsXG4gICAgXCJmcmVlX3RvX3Bjc19idWxrXCIsXG4gICAgXCJrbWVtX2NhY2hlX2ZyZWVfYnVsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBidWxrIGZyZWVpbmcgbG9naWMgaW4gdGhlIFNMVUIgYWxsb2NhdG9yIGJ5IGV4dHJhY3RpbmcgYSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9uIGBfX2ZyZWVfdG9fcGNzX2JhdGNoYC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBga21lbV9jYWNoZV9mcmVlX2J1bGtgIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBtZW1vcnkgZnJlZWluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[1] Phase: Succeeded StartedAt: 2026-07-07 20:43:35 +0000 UTC FinishedAt: 2026-07-07 20:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 20:43:35 +0000 UTC FinishedAt: 2026-07-07 20:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2] Phase: Succeeded StartedAt: 2026-07-07 20:43:35 +0000 UTC FinishedAt: 2026-07-08 01:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 20:43:35 +0000 UTC FinishedAt: 2026-07-08 01:19:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 20:43:35 +0000 UTC FinishedAt: 2026-07-07 20:43:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 20:43:35 +0000 UTC FinishedAt: 2026-07-07 20:43:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmhv9l/series-workflowmhv9l-convert-artifact-2020937633/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 20:43:55 +0000 UTC FinishedAt: 2026-07-07 21:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 20:43:55 +0000 UTC FinishedAt: 2026-07-07 21:16:10 +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:*f1774b9e-240b-4df2-ba4c-470bfac26e85,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-workflowmhv9l/series-workflowmhv9l-convert-artifact-2020937633/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": "13f8f116-c710-4d8f-bd49-12aa1e42e69d", "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-workflowmhv9l/series-workflowmhv9l-build-action-1492510415/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 20:43:55 +0000 UTC FinishedAt: 2026-07-07 21:15:46 +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:*f1774b9e-240b-4df2-ba4c-470bfac26e85,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-workflowmhv9l/series-workflowmhv9l-convert-artifact-2020937633/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": "13f8f116-c710-4d8f-bd49-12aa1e42e69d", "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-workflowmhv9l/series-workflowmhv9l-build-action-1492510415/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 21:16:10 +0000 UTC FinishedAt: 2026-07-07 21:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 21:16:10 +0000 UTC FinishedAt: 2026-07-07 21:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 21:16:10 +0000 UTC FinishedAt: 2026-07-07 21:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 21:16:10 +0000 UTC FinishedAt: 2026-07-07 21:16:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmhv9l/series-workflowmhv9l-convert-artifact-211171316/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 21:16:30 +0000 UTC FinishedAt: 2026-07-07 21:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 21:16:30 +0000 UTC FinishedAt: 2026-07-07 21:18:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13f8f116-c710-4d8f-bd49-12aa1e42e69d,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-workflowmhv9l/series-workflowmhv9l-build-action-1492510415/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-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 21:18:42 +0000 UTC FinishedAt: 2026-07-07 21:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 21:18:42 +0000 UTC FinishedAt: 2026-07-07 21:18:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 21:18:42 +0000 UTC FinishedAt: 2026-07-07 22:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 21:18:42 +0000 UTC FinishedAt: 2026-07-07 22:13:14 +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:*f1774b9e-240b-4df2-ba4c-470bfac26e85,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-workflowmhv9l/series-workflowmhv9l-convert-artifact-211171316/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": "25d73762-2f5d-4500-a0d3-c5ed8628b52a", "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-workflowmhv9l/series-workflowmhv9l-build-action-3235212480/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 21:18:42 +0000 UTC FinishedAt: 2026-07-07 22:13:04 +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:*f1774b9e-240b-4df2-ba4c-470bfac26e85,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-workflowmhv9l/series-workflowmhv9l-convert-artifact-211171316/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": "25d73762-2f5d-4500-a0d3-c5ed8628b52a", "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-workflowmhv9l/series-workflowmhv9l-build-action-3235212480/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 22:13:14 +0000 UTC FinishedAt: 2026-07-07 22:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 22:13:14 +0000 UTC FinishedAt: 2026-07-07 22:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 22:13:14 +0000 UTC FinishedAt: 2026-07-07 22:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 22:13:14 +0000 UTC FinishedAt: 2026-07-07 22:15:08 +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:*25d73762-2f5d-4500-a0d3-c5ed8628b52a,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-workflowmhv9l/series-workflowmhv9l-build-action-3235212480/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-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 22:15:18 +0000 UTC FinishedAt: 2026-07-08 01:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 22:15:18 +0000 UTC FinishedAt: 2026-07-08 01:19:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},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:*13f8f116-c710-4d8f-bd49-12aa1e42e69d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*25d73762-2f5d-4500-a0d3-c5ed8628b52a,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-workflowmhv9l/series-workflowmhv9l-build-action-1492510415/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-workflowmhv9l/series-workflowmhv9l-build-action-3235212480/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 22:15:18 +0000 UTC FinishedAt: 2026-07-07 22:15:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 22:15:18 +0000 UTC FinishedAt: 2026-07-07 22:15:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},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-workflowmhv9l/series-workflowmhv9l-convert-artifact-137391133/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 22:15:18 +0000 UTC FinishedAt: 2026-07-07 22:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 22:15:18 +0000 UTC FinishedAt: 2026-07-07 22:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 22:15:18 +0000 UTC FinishedAt: 2026-07-07 22:15:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 22:15:38 +0000 UTC FinishedAt: 2026-07-08 01:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhv9l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__free_to_pcs_batch","free_to_pcs_bulk","kmem_cache_free_bulk"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"72bb229f9161a1efcd5df32141b69fcc6ae81a13","config_name":"upstream-apparmor-kasan.config","series_id":"a571d2c2-9f25-46e5-8593-a00499c3cefb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 22:15:38 +0000 UTC FinishedAt: 2026-07-08 01:19:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13f8f116-c710-4d8f-bd49-12aa1e42e69d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*25d73762-2f5d-4500-a0d3-c5ed8628b52a,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-workflowmhv9l/series-workflowmhv9l-build-action-1492510415/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-workflowmhv9l/series-workflowmhv9l-build-action-3235212480/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-workflowmhv9l/series-workflowmhv9l-convert-artifact-137391133/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,}