Name: series-workflowzlxhm Phase: Succeeded StartedAt: 2026-09-03 09:32:36 +0000 UTC FinishedAt: 2026-09-03 13:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[0] Phase: Succeeded StartedAt: 2026-09-03 09:32:36 +0000 UTC FinishedAt: 2026-09-03 09:53:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 09:32:36 +0000 UTC FinishedAt: 2026-09-03 09:53:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "SWAP", "FS_IOMAP", "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "SWAP", "FS_IOMAP", "XFS_FS" ], "series_id": "1d80e1c0-8d09-4a49-8dcd-042bc2288daa" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "iomap_writepages", "current_is_kswapd", "current_is_kcompactd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O2N1cnJlbnRfaXNfa3N3YXBkJiMzNDssCiAgICAmIzM0O2N1cnJlbnRfaXNfa2NvbXBhY3RkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyOWVkOTlkMmRkYWYxOWNjYjIwMDhhYmE0NmQ5Zjg1YTgwNTM5MGY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwOTo1MTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggMGE1ZWJmZGE5MGYxMi4uNjMwNmNhNzQ3ZjNiYSAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC0yMDc3LDggJiM0MzsyMDc3LDcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKVxuIFx0ICogV3JpdGViYWNrIGZyb20gcmVjbGFpbSBjb250ZXh0IHNob3VsZCBuZXZlciBoYXBwZW4gZXhjZXB0IGluIHRoZSBjYXNlXG4gXHQgKiBvZiBhIFZNIHJlZ3Jlc3Npb24gc28gd2FybiBhYm91dCBpdCBhbmQgcmVmdXNlIHRvIHdyaXRlIHRoZSBkYXRhLlxuIFx0ICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpKSA9PVxuLVx0XHRcdFBGX01FTUFMTE9DKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCB3cGMtXHUwMDNld2JjLCBmb2xpbywgXHUwMDI2ZXJyb3IpKSkge1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXG5pbmRleCA2MGVmN2YwOGIxZDMwLi42NzM4ZDlkMTUxMWJjIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xuQEAgLTI5OTQsNyAmIzQzOzI5OTQsNiBAQCBzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3Mge1xuIFx0c3RydWN0IHhmc19idHJlZV9jdXJcdCoqY3VycDtcbiBcdGludFx0XHRcdCpzdGF0O1x0XHQvKiBzdWNjZXNzL2ZhaWx1cmUgKi9cbiBcdGludFx0XHRcdHJlc3VsdDtcbi1cdGJvb2xcdFx0XHRrc3dhcGQ7XHQvKiBhbGxvY2F0aW9uIGluIGtzd2FwZCBjb250ZXh0ICovXG4gXHRzdHJ1Y3QgY29tcGxldGlvblx0KmRvbmU7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG4gfTtcbkBAIC0zMDA4LDMzICYjNDM7MzAwNywxOCBAQCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKFxuIHtcbiBcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1x0KmFyZ3MgPSBjb250YWluZXJfb2Yod29yayxcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3MsIHdvcmspO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRwZmxhZ3M7XG4tXHR1bnNpZ25lZCBsb25nXHRcdG5ld19wZmxhZ3MgPSAwO1xuLVxuLVx0Lypcbi1cdCAqIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbnRleHQgaGVyZSwgYnV0IG1heSBhbHNvIGJlIGRvaW5nIHdvcmtcbi1cdCAqIGluIGtzd2FwZCBjb250ZXh0LCBhbmQgaGVuY2Ugd2UgbWF5IG5lZWQgdG8gaW5oZXJpdCB0aGF0IHN0YXRlXG4tXHQgKiB0ZW1wb3JhcmlseSB0byBlbnN1cmUgdGhhdCB3ZSBkb24mIzM5O3QgYmxvY2sgd2FpdGluZyBmb3IgbWVtb3J5IHJlY2xhaW1cbi1cdCAqIGluIGFueSB3YXkuXG4tXHQgKi9cbi1cdGlmIChhcmdzLVx1MDAzZWtzd2FwZClcbi1cdFx0bmV3X3BmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcbi1cbi1cdGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChcdTAwMjZwZmxhZ3MsIG5ld19wZmxhZ3MpO1xuIFx0eGZzX3RyYW5zX3NldF9jb250ZXh0KGFyZ3MtXHUwMDNlY3VyLVx1MDAzZWJjX3RwKTtcbiBcbiBcdGFyZ3MtXHUwMDNlcmVzdWx0ID0gX194ZnNfYnRyZWVfc3BsaXQoYXJncy1cdTAwM2VjdXIsIGFyZ3MtXHUwMDNlbGV2ZWwsIGFyZ3MtXHUwMDNlcHRycCxcbiBcdFx0XHRcdFx0IGFyZ3MtXHUwMDNla2V5LCBhcmdzLVx1MDAzZWN1cnAsIGFyZ3MtXHUwMDNlc3RhdCk7XG4gXG4gXHR4ZnNfdHJhbnNfY2xlYXJfY29udGV4dChhcmdzLVx1MDAzZWN1ci1cdTAwM2ViY190cCk7XG4tXHRjdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKFx1MDAyNnBmbGFncywgbmV3X3BmbGFncyk7XG4gXG4gXHQvKlxuIFx0ICogRG8gbm90IGFjY2VzcyBhcmdzIGFmdGVyIGNvbXBsZXRlKCkgaGFzIHJ1biBoZXJlLiBXZSBkb24mIzM5O3Qgb3duIGFyZ3NcbiBcdCAqIGFuZCB0aGUgb3duZXIgbWF5IHJ1biBhbmQgZnJlZSBhcmdzIGJlZm9yZSB3ZSByZXR1cm4gaGVyZS5cbiBcdCAqL1xuIFx0Y29tcGxldGUoYXJncy1cdTAwM2Vkb25lKTtcbi1cbiB9XG4gXG4gLypcbkBAIC0zMDc4LDcgJiM0MzszMDYyLDcgQEAgeGZzX2J0cmVlX3NwbGl0KFxuIFx0YXJncy5jdXJwID0gY3VycDtcbiBcdGFyZ3Muc3RhdCA9IHN0YXQ7XG4gXHRhcmdzLmRvbmUgPSBcdTAwMjZkb25lO1xuLVx0YXJncy5rc3dhcGQgPSBjdXJyZW50X2lzX2tzd2FwZCgpO1xuJiM0MztcbiBcdElOSVRfV09SS19PTlNUQUNLKFx1MDAyNmFyZ3Mud29yaywgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcik7XG4gXHRxdWV1ZV93b3JrKHhmc19hbGxvY193cSwgXHUwMDI2YXJncy53b3JrKTtcbiBcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZG9uZSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oIGIvZnMveGZzL3hmc19wbGF0Zm9ybS5oXG5pbmRleCA1ZDU0MmU5NWZlNDQ0Li5hNDlmYTE1OTg5NGRlIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX3BsYXRmb3JtLmhcbkBAIC0xMTUsMTAgJiM0MzsxMTUsNiBAQCB0eXBlZGVmIF9fdTMyXHRcdFx0eGZzX25saW5rX3Q7XG4gI2RlZmluZSB4ZnNfYmxvY2tnY19zZWNzXHR4ZnNfcGFyYW1zLmJsb2NrZ2NfdGltZXIudmFsXG4gXG4gI2RlZmluZSBjdXJyZW50X2NwdSgpXHRcdChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKVxuLSNkZWZpbmUgY3VycmVudF9zZXRfZmxhZ3NfbmVzdGVkKHNwLCBmKVx0XHRcXFxuLVx0XHQoKihzcCkgPSBjdXJyZW50LVx1MDAzZWZsYWdzLCBjdXJyZW50LVx1MDAzZWZsYWdzIHw9IChmKSlcbi0jZGVmaW5lIGN1cnJlbnRfcmVzdG9yZV9mbGFnc19uZXN0ZWQoc3AsIGYpXHRcXFxuLVx0XHQoY3VycmVudC1cdTAwM2VmbGFncyA9ICgoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgfihmKSkgfCAoKihzcCkgXHUwMDI2IChmKSkpKVxuIFxuICNkZWZpbmUgTkJCWVx0XHQ4XHRcdC8qIG51bWJlciBvZiBiaXRzIHBlciBieXRlICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuaW5kZXggNjZhMmY3MGU5ZTAxOS4uNjkxYzA5ZjBhNjk3MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuQEAgLTgxLDEwICYjNDM7ODEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcGFjdF9nYXAodW5zaWduZWQgaW50IG9yZGVyKVxuIFx0cmV0dXJuIG1pbigyVUwgXHUwMDNjXHUwMDNjIG9yZGVyLCBDT01QQUNUX0NMVVNURVJfTUFYKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcbi17XG4tXHRyZXR1cm4gY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS0NPTVBBQ1REO1xuLX1cbiBcbiAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbiBcbkBAIC0xMDMsNyAmIzQzOzk5LDcgQEAgZXh0ZXJuIHZvaWQgY29tcGFjdGlvbl9kZWZlcl9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFxuIGJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbiBcdFx0XHRcdFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG4tXG4mIzQzO2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9ydW4oaW50IG5pZCk7XG4gZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpO1xuIGV4dGVybiB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbkBAIC0xMjAsNiAmIzQzOzExNiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGtjb21wYWN0ZF9ydW4oaW50IG5pZClcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggOGIzZDQ3YTMyNWNjYS4uZWIxMmZmNGNlYTZjMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5AQCAtMTgwOCw4ICYjNDM7MTgwOCw4IEBAIGV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xuICNkZWZpbmUgUEZfVVNFRF9NQVRIXHRcdDB4MDAwMDIwMDBcdC8qIElmIHVuc2V0IHRoZSBmcHUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICovXG4gI2RlZmluZSBQRl9VU0VSX1dPUktFUlx0XHQweDAwMDA0MDAwXHQvKiBLZXJuZWwgdGhyZWFkIGNsb25lZCBmcm9tIHVzZXJzcGFjZSB0aHJlYWQgKi9cbiAjZGVmaW5lIFBGX05PRlJFRVpFXHRcdDB4MDAwMDgwMDBcdC8qIFRoaXMgdGhyZWFkIHNob3VsZCBub3QgYmUgZnJvemVuICovXG4tI2RlZmluZSBQRl9LQ09NUEFDVERcdFx0MHgwMDAxMDAwMFx0LyogSSBhbSBrY29tcGFjdGQgKi9cbi0jZGVmaW5lIFBGX0tTV0FQRFx0XHQweDAwMDIwMDAwXHQvKiBJIGFtIGtzd2FwZCAqL1xuJiM0MzsjZGVmaW5lIFBGX19IT0xFX18wMDAxMDAwMFx0MHgwMDAxMDAwMFxuJiM0MzsjZGVmaW5lIFBGX19IT0xFX18wMDAyMDAwMFx0MHgwMDAyMDAwMFxuICNkZWZpbmUgUEZfTUVNQUxMT0NfTk9GU1x0MHgwMDA0MDAwMFx0LyogQWxsIGFsbG9jYXRpb25zIGluaGVyaXQgR0ZQX05PRlMuIFNlZSBtZW1hbGxvY19uZnNfc2F2ZSgpICovXG4gI2RlZmluZSBQRl9NRU1BTExPQ19OT0lPXHQweDAwMDgwMDAwXHQvKiBBbGwgYWxsb2NhdGlvbnMgaW5oZXJpdCBHRlBfTk9JTy4gU2VlIG1lbWFsbG9jX25vaW9fc2F2ZSgpICovXG4gI2RlZmluZSBQRl9MT0NBTF9USFJPVFRMRVx0MHgwMDEwMDAwMFx0LyogVGhyb3R0bGUgd3JpdGVzIG9ubHkgYWdhaW5zdCB0aGUgYmRpIEkgd3JpdGUgdG8sXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggYTcyZWNmMTJjMDBkYi4uZmMyOTBlMjllNGE5ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI1LDEyICYjNDM7MjUsNiBAQFxuICNkZWZpbmUgU1dBUF9GTEFHU19WQUxJRFx0KFNXQVBfRkxBR19QUklPX01BU0sgfCBTV0FQX0ZMQUdfUFJFRkVSIHwgXFxcbiBcdFx0XHRcdCBTV0FQX0ZMQUdfRElTQ0FSRCB8IFNXQVBfRkxBR19ESVNDQVJEX09OQ0UgfCBcXFxuIFx0XHRcdFx0IFNXQVBfRkxBR19ESVNDQVJEX1BBR0VTKVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXG4te1xuLVx0cmV0dXJuIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tTV0FQRDtcbi19XG4tXG4gLypcbiAgKiBNQVhfU1dBUEZJTEVTIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN3YXB0eXBlczogdGhpbmdzIHdoaWNoIGNhblxuICAqIGJlIHN3YXBwZWQgdG8uICBUaGUgc3dhcCB0eXBlIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhhdCBzd2FwIHR5cGUgYXJlXG5AQCAtMzM5LDYgJiM0MzszMzMsNyBAQCB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTtcbiBcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKTtcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XG4mIzQzO2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZCk7XG4gXG4gI2lmZGVmIENPTkZJR19TV0FQXG4gaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsXG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXG5pbmRleCBhMDQ5NDE1NTEyYzY3Li40OTk0ZTIwMGJiZWNkIDEwMDY0NFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmNcbkBAIC0zMTk3LDcgJiM0MzszMTk3LDYgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdGxvbmcgZGVmYXVsdF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhIUEFHRV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpO1xuIFx0bG9uZyB0aW1lb3V0ID0gZGVmYXVsdF90aW1lb3V0O1xuIFxuLVx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9LQ09NUEFDVEQ7XG4gXHRzZXRfZnJlZXphYmxlKCk7XG4gXG4gXHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyID0gMDtcbkBAIC0zMjU0LDExICYjNDM7MzI1MywxNSBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxuIFx0XHRcdHBnZGF0LVx1MDAzZXByb2FjdGl2ZV9jb21wYWN0X3RyaWdnZXIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfS0NPTVBBQ1REO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mztib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tjb21wYWN0ZCk7XG4mIzQzO1xuIC8qXG4gICogVGhpcyBrY29tcGFjdGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxuICAqIE9uIG5vZGUtaG90LWFkZCwga2NvbXBhY3RkIHdpbGwgbW92ZWQgdG8gcHJvcGVyIGNwdXMgaWYgY3B1cyBhcmUgaG90LWFkZGVkLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJmMjc4NmM3MjQ3ZDQuLjlmOTk2MzNkN2RjMWUgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC03NTM5LDcgJiM0Mzs3NTM5LDcgQEAgc3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbiBcdCAqIHVzIGZyb20gcmVjdXJzaXZlbHkgdHJ5aW5nIHRvIGZyZWUgbW9yZSBtZW1vcnkgYXMgd2UmIzM5O3JlXG4gXHQgKiB0cnlpbmcgdG8gZnJlZSB0aGUgZmlyc3QgcGllY2Ugb2YgbWVtb3J5IGluIHRoZSBmaXJzdCBwbGFjZSkuXG4gXHQgKi9cbi1cdHRzay1cdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcbiYjNDM7XHR0c2stXHUwMDNlZmxhZ3MgfD0gUEZfTUVNQUxMT0M7XG4gXHRzZXRfZnJlZXphYmxlKCk7XG4gXG4gXHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5AQCAtNzU4OSwxMSAmIzQzOzc1ODksMTcgQEAgc3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbiBcdFx0XHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XG4gXHR9XG4gXG4tXHR0c2stXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKTtcbiYjNDM7XHR0c2stXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfTUVNQUxMT0M7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaXNfa3N3YXBkKTtcbiYjNDM7XG4gLypcbiAgKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXG4gICoga3N3YXBkIHNob3VsZCByZWNsYWltIChkaXJlY3QgcmVjbGFpbSBpcyBkZWZlcnJlZCksIHdha2UgaXQgdXAgZm9yIHRoZSB6b25lJiMzOTtzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaCBiL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmhcbmluZGV4IDc2ZjVlMDI1ZTEwNzYuLjgwN2VmODgxY2UyZDQgMTAwNjQ0XG4tLS0gYS90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXG5AQCAtMzEsOCAmIzQzOzMxLDYgQEBcbiAjZGVmaW5lIFBGX0lETEVcdFx0XHRcdDB4MDAwMDAwMDJcdC8qIEkgYW0gYW4gSURMRSB0aHJlYWQgKi9cbiAjZGVmaW5lIFBGX0lPX1dPUktFUlx0XHRcdDB4MDAwMDAwMTBcdC8qIFRhc2sgaXMgYW4gSU8gd29ya2VyICovXG4gI2RlZmluZSBQRl9XUV9XT1JLRVJcdFx0XHQweDAwMDAwMDIwXHQvKiBJJiMzOTttIGEgd29ya3F1ZXVlIHdvcmtlciAqL1xuLSNkZWZpbmUgUEZfS0NPTVBBQ1REXHRcdFx0MHgwMDAxMDAwMCAgICAgIC8qIEkgYW0ga2NvbXBhY3RkICovXG4tI2RlZmluZSBQRl9LU1dBUERcdFx0XHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cbiAjZGVmaW5lIFBGX0tUSFJFQURcdFx0XHQweDAwMjAwMDAwXHQvKiBJIGFtIGEga2VybmVsIHRocmVhZCAqL1xuICNkZWZpbmUgUEZfRVhJVElOR1x0XHRcdDB4MDAwMDAwMDRcbiAjZGVmaW5lIENMT0NLX01PTk9UT05JQ1x0XHRcdDFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tzd2FwZCYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tjb21wYWN0ZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHByb2Nlc3MgZmxhZ3MgUEZfS1NXQVBEIGFuZCBQRl9LQ09NUEFDVEQgaW4gZmF2b3Igb2Yga3RocmVhZCBmdW5jdGlvbiBwb2ludGVyIGNvbXBhcmlzb25zIHZpYSBjdXJyZW50X2lzX2tzd2FwZCgpIGFuZCBjdXJyZW50X2lzX2tjb21wYWN0ZCgpLiBJdCB1cGRhdGVzIHJlY2xhaW0gYW5kIHdyaXRlYmFjayBoYW5kbGluZyBpbiBpb21hcF93cml0ZXBhZ2VzKCkgYW5kIHJlbW92ZXMgdGhlIGluaGVyaXRhbmNlIG9mIGtzd2FwZCBmbGFncyBpbiBYRlMgQi10cmVlIHNwbGl0IHdvcmsgaXRlbXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjllZDk5ZDJkZGFmMTljY2IyMDA4YWJhNDZkOWY4NWE4MDUzOTBmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDk6NTE6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwppbmRleCAwYTVlYmZkYTkwZjEyLi42MzA2Y2E3NDdmM2JhIDEwMDY0NAotLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKQEAgLTIwNzcsOCAmIzQzOzIwNzcsNyBAQCBpb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpCiAJICogV3JpdGViYWNrIGZyb20gcmVjbGFpbSBjb250ZXh0IHNob3VsZCBuZXZlciBoYXBwZW4gZXhjZXB0IGluIHRoZSBjYXNlCiAJICogb2YgYSBWTSByZWdyZXNzaW9uIHNvIHdhcm4gYWJvdXQgaXQgYW5kIHJlZnVzZSB0byB3cml0ZSB0aGUgZGF0YS4KIAkgKi8KLQlpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LSZndDtmbGFncyAmYW1wOyAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpKSA9PQotCQkJUEZfTUVNQUxMT0MpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9NRU1BTExPQykpKQogCQlyZXR1cm4gLUVJTzsKIAogCXdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCB3cGMtJmd0O3diYywgZm9saW8sICZhbXA7ZXJyb3IpKSkgewpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMKaW5kZXggNjBlZjdmMDhiMWQzMC4uNjczOGQ5ZDE1MTFiYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jCkBAIC0yOTk0LDcgJiM0MzsyOTk0LDYgQEAgc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzIHsKIAlzdHJ1Y3QgeGZzX2J0cmVlX2N1cgkqKmN1cnA7CiAJaW50CQkJKnN0YXQ7CQkvKiBzdWNjZXNzL2ZhaWx1cmUgKi8KIAlpbnQJCQlyZXN1bHQ7Ci0JYm9vbAkJCWtzd2FwZDsJLyogYWxsb2NhdGlvbiBpbiBrc3dhcGQgY29udGV4dCAqLwogCXN0cnVjdCBjb21wbGV0aW9uCSpkb25lOwogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogfTsKQEAgLTMwMDgsMzMgJiM0MzszMDA3LDE4IEBAIHhmc19idHJlZV9zcGxpdF93b3JrZXIoCiB7CiAJc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzCSphcmdzID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCQlzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3MsIHdvcmspOwotCXVuc2lnbmVkIGxvbmcJCXBmbGFnczsKLQl1bnNpZ25lZCBsb25nCQluZXdfcGZsYWdzID0gMDsKLQotCS8qCi0JICogd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29udGV4dCBoZXJlLCBidXQgbWF5IGFsc28gYmUgZG9pbmcgd29yawotCSAqIGluIGtzd2FwZCBjb250ZXh0LCBhbmQgaGVuY2Ugd2UgbWF5IG5lZWQgdG8gaW5oZXJpdCB0aGF0IHN0YXRlCi0JICogdGVtcG9yYXJpbHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJiMzOTt0IGJsb2NrIHdhaXRpbmcgZm9yIG1lbW9yeSByZWNsYWltCi0JICogaW4gYW55IHdheS4KLQkgKi8KLQlpZiAoYXJncy0mZ3Q7a3N3YXBkKQotCQluZXdfcGZsYWdzIHw9IFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEOwotCi0JY3VycmVudF9zZXRfZmxhZ3NfbmVzdGVkKCZhbXA7cGZsYWdzLCBuZXdfcGZsYWdzKTsKIAl4ZnNfdHJhbnNfc2V0X2NvbnRleHQoYXJncy0mZ3Q7Y3VyLSZndDtiY190cCk7CiAKIAlhcmdzLSZndDtyZXN1bHQgPSBfX3hmc19idHJlZV9zcGxpdChhcmdzLSZndDtjdXIsIGFyZ3MtJmd0O2xldmVsLCBhcmdzLSZndDtwdHJwLAogCQkJCQkgYXJncy0mZ3Q7a2V5LCBhcmdzLSZndDtjdXJwLCBhcmdzLSZndDtzdGF0KTsKIAogCXhmc190cmFuc19jbGVhcl9jb250ZXh0KGFyZ3MtJmd0O2N1ci0mZ3Q7YmNfdHApOwotCWN1cnJlbnRfcmVzdG9yZV9mbGFnc19uZXN0ZWQoJmFtcDtwZmxhZ3MsIG5ld19wZmxhZ3MpOwogCiAJLyoKIAkgKiBEbyBub3QgYWNjZXNzIGFyZ3MgYWZ0ZXIgY29tcGxldGUoKSBoYXMgcnVuIGhlcmUuIFdlIGRvbiYjMzk7dCBvd24gYXJncwogCSAqIGFuZCB0aGUgb3duZXIgbWF5IHJ1biBhbmQgZnJlZSBhcmdzIGJlZm9yZSB3ZSByZXR1cm4gaGVyZS4KIAkgKi8KIAljb21wbGV0ZShhcmdzLSZndDtkb25lKTsKLQogfQogCiAvKgpAQCAtMzA3OCw3ICYjNDM7MzA2Miw3IEBAIHhmc19idHJlZV9zcGxpdCgKIAlhcmdzLmN1cnAgPSBjdXJwOwogCWFyZ3Muc3RhdCA9IHN0YXQ7CiAJYXJncy5kb25lID0gJmFtcDtkb25lOwotCWFyZ3Mua3N3YXBkID0gY3VycmVudF9pc19rc3dhcGQoKTsKJiM0MzsKIAlJTklUX1dPUktfT05TVEFDSygmYW1wO2FyZ3Mud29yaywgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcik7CiAJcXVldWVfd29yayh4ZnNfYWxsb2Nfd3EsICZhbXA7YXJncy53b3JrKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7ZG9uZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3BsYXRmb3JtLmggYi9mcy94ZnMveGZzX3BsYXRmb3JtLmgKaW5kZXggNWQ1NDJlOTVmZTQ0NC4uYTQ5ZmExNTk4OTRkZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfcGxhdGZvcm0uaApAQCAtMTE1LDEwICYjNDM7MTE1LDYgQEAgdHlwZWRlZiBfX3UzMgkJCXhmc19ubGlua190OwogI2RlZmluZSB4ZnNfYmxvY2tnY19zZWNzCXhmc19wYXJhbXMuYmxvY2tnY190aW1lci52YWwKIAogI2RlZmluZSBjdXJyZW50X2NwdSgpCQkocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkKLSNkZWZpbmUgY3VycmVudF9zZXRfZmxhZ3NfbmVzdGVkKHNwLCBmKQkJXAotCQkoKihzcCkgPSBjdXJyZW50LSZndDtmbGFncywgY3VycmVudC0mZ3Q7ZmxhZ3MgfD0gKGYpKQotI2RlZmluZSBjdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKHNwLCBmKQlcCi0JCShjdXJyZW50LSZndDtmbGFncyA9ICgoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgfihmKSkgfCAoKihzcCkgJmFtcDsgKGYpKSkpCiAKICNkZWZpbmUgTkJCWQkJOAkJLyogbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaAppbmRleCA2NmEyZjcwZTllMDE5Li42OTFjMDlmMGE2OTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaApAQCAtODEsMTAgJiM0Mzs4MSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wYWN0X2dhcCh1bnNpZ25lZCBpbnQgb3JkZXIpCiAJcmV0dXJuIG1pbigyVUwgJmx0OyZsdDsgb3JkZXIsIENPTVBBQ1RfQ0xVU1RFUl9NQVgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKQotewotCXJldHVybiBjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LQ09NUEFDVEQ7Ci19CiAKICNpZmRlZiBDT05GSUdfQ09NUEFDVElPTgogCkBAIC0xMDMsNyAmIzQzOzk5LDcgQEAgZXh0ZXJuIHZvaWQgY29tcGFjdGlvbl9kZWZlcl9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAogCiBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsCiAJCQkJCWludCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spOwotCiYjNDM7Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfcnVuKGludCBuaWQpOwogZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpOwogZXh0ZXJuIHZvaWQgd2FrZXVwX2tjb21wYWN0ZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpOwpAQCAtMTIwLDYgJiM0MzsxMTYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQga2NvbXBhY3RkX3J1bihpbnQgbmlkKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhiM2Q0N2EzMjVjY2EuLmViMTJmZjRjZWE2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTE4MDgsOCAmIzQzOzE4MDgsOCBAQCBleHRlcm4gc3RydWN0IHBpZCAqY2FkX3BpZDsKICNkZWZpbmUgUEZfVVNFRF9NQVRICQkweDAwMDAyMDAwCS8qIElmIHVuc2V0IHRoZSBmcHUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICovCiAjZGVmaW5lIFBGX1VTRVJfV09SS0VSCQkweDAwMDA0MDAwCS8qIEtlcm5lbCB0aHJlYWQgY2xvbmVkIGZyb20gdXNlcnNwYWNlIHRocmVhZCAqLwogI2RlZmluZSBQRl9OT0ZSRUVaRQkJMHgwMDAwODAwMAkvKiBUaGlzIHRocmVhZCBzaG91bGQgbm90IGJlIGZyb3plbiAqLwotI2RlZmluZSBQRl9LQ09NUEFDVEQJCTB4MDAwMTAwMDAJLyogSSBhbSBrY29tcGFjdGQgKi8KLSNkZWZpbmUgUEZfS1NXQVBECQkweDAwMDIwMDAwCS8qIEkgYW0ga3N3YXBkICovCiYjNDM7I2RlZmluZSBQRl9fSE9MRV9fMDAwMTAwMDAJMHgwMDAxMDAwMAomIzQzOyNkZWZpbmUgUEZfX0hPTEVfXzAwMDIwMDAwCTB4MDAwMjAwMDAKICNkZWZpbmUgUEZfTUVNQUxMT0NfTk9GUwkweDAwMDQwMDAwCS8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0ZTLiBTZWUgbWVtYWxsb2NfbmZzX3NhdmUoKSAqLwogI2RlZmluZSBQRl9NRU1BTExPQ19OT0lPCTB4MDAwODAwMDAJLyogQWxsIGFsbG9jYXRpb25zIGluaGVyaXQgR0ZQX05PSU8uIFNlZSBtZW1hbGxvY19ub2lvX3NhdmUoKSAqLwogI2RlZmluZSBQRl9MT0NBTF9USFJPVFRMRQkweDAwMTAwMDAwCS8qIFRocm90dGxlIHdyaXRlcyBvbmx5IGFnYWluc3QgdGhlIGJkaSBJIHdyaXRlIHRvLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBhNzJlY2YxMmMwMGRiLi5mYzI5MGUyOWU0YTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMjUsMTIgJiM0MzsyNSw2IEBACiAjZGVmaW5lIFNXQVBfRkxBR1NfVkFMSUQJKFNXQVBfRkxBR19QUklPX01BU0sgfCBTV0FQX0ZMQUdfUFJFRkVSIHwgXAogCQkJCSBTV0FQX0ZMQUdfRElTQ0FSRCB8IFNXQVBfRkxBR19ESVNDQVJEX09OQ0UgfCBcCiAJCQkJIFNXQVBfRkxBR19ESVNDQVJEX1BBR0VTKQotCi1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKQotewotCXJldHVybiBjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LU1dBUEQ7Ci19Ci0KIC8qCiAgKiBNQVhfU1dBUEZJTEVTIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN3YXB0eXBlczogdGhpbmdzIHdoaWNoIGNhbgogICogYmUgc3dhcHBlZCB0by4gIFRoZSBzd2FwIHR5cGUgYW5kIHRoZSBvZmZzZXQgaW50byB0aGF0IHN3YXAgdHlwZSBhcmUKQEAgLTMzOSw2ICYjNDM7MzMzLDcgQEAgdm9pZCBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7CiAKIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpOwogZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpOwomIzQzO2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfU1dBUAogaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsCmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmMKaW5kZXggYTA0OTQxNTUxMmM2Ny4uNDk5NGUyMDBiYmVjZCAxMDA2NDQKLS0tIGEvbW0vY29tcGFjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uYwpAQCAtMzE5Nyw3ICYjNDM7MzE5Nyw2IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApCiAJbG9uZyBkZWZhdWx0X3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhQQUdFX0ZSQUdfQ0hFQ0tfSU5URVJWQUxfTVNFQyk7CiAJbG9uZyB0aW1lb3V0ID0gZGVmYXVsdF90aW1lb3V0OwogCi0JY3VycmVudC0mZ3Q7ZmxhZ3MgfD0gUEZfS0NPTVBBQ1REOwogCXNldF9mcmVlemFibGUoKTsKIAogCXBnZGF0LSZndDtrY29tcGFjdGRfbWF4X29yZGVyID0gMDsKQEAgLTMyNTQsMTEgJiM0MzszMjUzLDE1IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApCiAJCQlwZ2RhdC0mZ3Q7cHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IGZhbHNlOwogCX0KIAotCWN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7PSB+UEZfS0NPTVBBQ1REOwotCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mztib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rY29tcGFjdGQpOwomIzQzOwogLyoKICAqIFRoaXMga2NvbXBhY3RkIHN0YXJ0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGluaXQgYW5kIG5vZGUtaG90LWFkZC4KICAqIE9uIG5vZGUtaG90LWFkZCwga2NvbXBhY3RkIHdpbGwgbW92ZWQgdG8gcHJvcGVyIGNwdXMgaWYgY3B1cyBhcmUgaG90LWFkZGVkLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiZjI3ODZjNzI0N2Q0Li45Zjk5NjMzZDdkYzFlIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzUzOSw3ICYjNDM7NzUzOSw3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApCiAJICogdXMgZnJvbSByZWN1cnNpdmVseSB0cnlpbmcgdG8gZnJlZSBtb3JlIG1lbW9yeSBhcyB3ZSYjMzk7cmUKIAkgKiB0cnlpbmcgdG8gZnJlZSB0aGUgZmlyc3QgcGllY2Ugb2YgbWVtb3J5IGluIHRoZSBmaXJzdCBwbGFjZSkuCiAJICovCi0JdHNrLSZndDtmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDsKJiM0MzsJdHNrLSZndDtmbGFncyB8PSBQRl9NRU1BTExPQzsKIAlzZXRfZnJlZXphYmxlKCk7CiAKIAlXUklURV9PTkNFKHBnZGF0LSZndDtrc3dhcGRfb3JkZXIsIDApOwpAQCAtNzU4OSwxMSAmIzQzOzc1ODksMTcgQEAgc3RhdGljIGludCBrc3dhcGQodm9pZCAqcCkKIAkJCWdvdG8ga3N3YXBkX3RyeV9zbGVlcDsKIAl9CiAKLQl0c2stJmd0O2ZsYWdzICZhbXA7PSB+KFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKTsKJiM0MzsJdHNrLSZndDtmbGFncyAmYW1wOz0gflBGX01FTUFMTE9DOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mztib29sIGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtzd2FwZDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rc3dhcGQpOwomIzQzOwogLyoKICAqIEEgem9uZSBpcyBsb3cgb24gZnJlZSBtZW1vcnkgb3IgdG9vIGZyYWdtZW50ZWQgZm9yIGhpZ2gtb3JkZXIgbWVtb3J5LiAgSWYKICAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSYjMzk7cwpkaWZmIC0tZ2l0IGEvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaCBiL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmgKaW5kZXggNzZmNWUwMjVlMTA3Ni4uODA3ZWY4ODFjZTJkNCAxMDA2NDQKLS0tIGEvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oCkBAIC0zMSw4ICYjNDM7MzEsNiBAQAogI2RlZmluZSBQRl9JRExFCQkJCTB4MDAwMDAwMDIJLyogSSBhbSBhbiBJRExFIHRocmVhZCAqLwogI2RlZmluZSBQRl9JT19XT1JLRVIJCQkweDAwMDAwMDEwCS8qIFRhc2sgaXMgYW4gSU8gd29ya2VyICovCiAjZGVmaW5lIFBGX1dRX1dPUktFUgkJCTB4MDAwMDAwMjAJLyogSSYjMzk7bSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi8KLSNkZWZpbmUgUEZfS0NPTVBBQ1RECQkJMHgwMDAxMDAwMCAgICAgIC8qIEkgYW0ga2NvbXBhY3RkICovCi0jZGVmaW5lIFBGX0tTV0FQRAkJCTB4MDAwMjAwMDAgICAgICAvKiBJIGFtIGtzd2FwZCAqLwogI2RlZmluZSBQRl9LVEhSRUFECQkJMHgwMDIwMDAwMAkvKiBJIGFtIGEga2VybmVsIHRocmVhZCAqLwogI2RlZmluZSBQRl9FWElUSU5HCQkJMHgwMDAwMDAwNAogI2RlZmluZSBDTE9DS19NT05PVE9OSUMJCQkxCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6eiBhbmQsIGlmIHNvLCBob3cgdG8gYmVzdCBhcHByb2FjaCBpdC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdpbmcgYW5kIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGFyZS4gTG9va3MgbGlrZSB3ZSBoYXZlIGEgZmV3IGZpbGVzIGFmZmVjdGVkLCBzbyBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZW0uCgoxLiAgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgOiBUaGlzIG9uZSYjMzk7cyBzdHJhaWdodGZvcndhcmQ7IGEgYml0d2lzZSBjaGVjayB1c2luZyBgUEZfTUVNQUxMT0NgIGlzIHNpbXBsaWZpZWQuIExpa2VseSBub3QgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcsIGJ1dCB3ZSBjYW4mIzM5O3QgY29tcGxldGVseSBkaXNtaXNzIGl0IHdpdGhvdXQgbW9yZSBjb250ZXh0LiBNaW5pbWFsIGltcGFjdCBJIHdvdWxkIHRoaW5rLgoKMi4gIGBmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jYDogQWgsIG5vdyB0aGlzIGlzIG1vcmUgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSByZW1vdmluZyBga3N3YXBkYCB0cmFja2luZyBhbmQgbmVzdGVkIGZsYWcgbWFuaXB1bGF0aW9ucyB3aXRoaW4gdGhlIFhGUyBiLXRyZWUgc3BsaXR0aW5nIGNvZGUuIFhGUyBpcyBhbHdheXMgYSBnb29kIHRhcmdldC4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHNpbXBsaWZpY2F0aW9uIG9mIGxvY2tpbmcgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBzcGxpdHRpbmcgb3BlcmF0aW9ucywgYW5kIHRoYXQmIzM5O3MgdGhlIGtpbmQgb2YgcGxhY2Ugd2hlcmUgZnV6emluZyBvZnRlbiBmaW5kcyBpbnRlcmVzdGluZyBiZWhhdmlvci4gTmVlZCB0byBpbnZlc3RpZ2F0ZSB3aHkgdGhvc2UgZmxhZ3MgYXJlIGJlaW5nIHJlbW92ZWQuIENvdWxkIGJlIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYnV0IGNvdWxkIGFsc28gYmUgYSBzdWJ0bGUgYnVnIGZpeC4KCjMuICBgaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhgOiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcsIG1vdmluZyB0aGUgYGN1cnJlbnRfaXNfa2NvbXBhY3RkYCBjaGVjayB0byBhIGZ1bmN0aW9uLiBOb3RoaW5nIHRvbyBleGNpdGluZyBoZXJlLCBqdXN0IGNsZWFuIHVwLgoKNC4gIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgOiBEcm9wcGluZyBgUEZfS0NPTVBBQ1REYCBhbmQgYFBGX0tTV0FQRGAgZmxhZ3MuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IHNpZ25hbHMgYSBzaGlmdCBpbiBob3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgb3IgdHJhY2tlZC4gVGhlIGhvbGVzIGxlZnQgYmVoaW5kIGFyZSBhIGJpdCBjb25jZXJuaW5nLiBOZWVkIHRvIGZvbGxvdyB1cCBvbiB0aGlzIGFuZCBzZWUgd2hhdCBpbXBhY3QgdGhpcyBoYXMuCgo1LiAgYGluY2x1ZGUvbGludXgvc3dhcC5oYDogQWdhaW4sIHJlZmFjdG9yaW5nLCBtb3ZpbmcgYGN1cnJlbnRfaXNfa3N3YXBkYCB0byBhIGZ1bmN0aW9uLiBMZXNzIGNyaXRpY2FsIG9uIGl0cyBvd24uCgo2LiAgYG1tL2NvbXBhY3Rpb24uY2A6IEltcGxlbWVudGF0aW9uIG9mIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAuCgo3LiAgYG1tL3Ztc2Nhbi5jYDogSW1wbGVtZW50YXRpb24gb2YgYGN1cnJlbnRfaXNfa3N3YXBkYC4KCjguICBgdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaGA6IFJlbW92aW5nIHRoZSBtYWNyb3MgZm9yIHRoZSBmbGFncy4gU2VlbXMgY29uc2lzdGVudCB3aXRoIHRoZSBvdGhlciBjaGFuZ2VzLgoKU28sIHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJlc3Qgc2VlbSB0byBiZSB0aGUgYFhGU2AgY2hhbmdlcyBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIGZsYWdzIGBQRl9LQ09NUEFDVERgIGFuZCBgUEZfS1NXQVBEYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayB0aGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24uIFRoZSByZW1vdmFsIG9mIHRoZSBmbGFncyBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBmbGFncyBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50LCBvciB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIGNoZWNraW5nIHRob3NlIGZsYWdzIGlzIGJlaW5nIGNoYW5nZWQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGVyZSBgY3VycmVudF9pc19rc3dhcGRgIGFuZCBgY3VycmVudF9pc19rY29tcGFjdGRgIGFyZSBiZWluZyBjYWxsZWQsIHRvIHVuZGVyc3RhbmQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIGZpcmUgdXAgYGdpdCBncmVwYCBhbmQgbG9vayBmb3IgdGhvc2UgY2FsbHMgYWNyb3NzIHRoZSBrZXJuZWwgdG8gZGV0ZXJtaW5lIHRoZSBmdWxsIHNjb3BlLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcgYW5kIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3VycmVudF9pc19rc3dhcGR8Y3VycmVudF9pc19rY29tcGFjdGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM9MzE4PWk5MTVfZ2VtX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy0zMjktXHRcdFx0XHRJOTE1X1NIUklOS19VTkJPVU5EKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jOjMzMDpcdGlmIChzYy1cdTAwM2Vucl9zY2FubmVkIFx1MDAzYyBzYy1cdTAwM2Vucl90b19zY2FuIFx1MDAyNlx1MDAyNiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy0zMzEtXHRcdGludGVsX3dha2VyZWZfdCB3YWtlcmVmO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9zaHJpbmtlci5jPTI3PXN0YXRpYyBib29sIGNhbl9ibG9jayhzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9zaHJpbmtlci5jLTI5LVx0cmV0dXJuIChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pIHx8XG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fc2hyaW5rZXIuYzozMDpcdCAgICAgICAoY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjYgKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9LU1dBUERfUkVDTEFJTSkpO1xuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3Nocmlua2VyLmMtMzEtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9MTM3Nz1zdGF0aWMgYm9vbCBjYW5fYmxvY2soc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTEzODMtXHRyZXR1cm4gKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfHxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6MTM4NDpcdCAgICAgICAoKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9LU1dBUERfUkVDTEFJTSkgXHUwMDI2XHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy0xMzg1LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmM9MTE2Mz1ib29sIHR0bV9ib19zaHJpbmtfYXZvaWRfd2FpdCh2b2lkKVxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jLTExNjQte1xuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jOjExNjU6XHRyZXR1cm4gIWN1cnJlbnRfaXNfa3N3YXBkKCk7XG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMtMTE2Ni19XG4tLVxuZnMvZjJmcy9pbm9kZS5jPTEwMjE9c3RhdGljIHZvaWQgZjJmc19wb3N0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZjJmcy9pbm9kZS5jLTEwNjUtXHQvKiBMZXQmIzM5O3MgZG8gdGhpcyBpbiB3b3JrcXVldWUgb3V0IG9mIHRoZSBkaXJlY3QgcmVjbGFpbSBwYXRoLiAqL1xuZnMvZjJmcy9pbm9kZS5jOjEwNjY6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSkge1xuZnMvZjJmcy9pbm9kZS5jLTEwNjctXHRcdGYyZnNfcmVjb3JkX2lub2RlX3N0YXRlKHNiaSwgaW5vZGUtXHUwMDNlaV9pbm8sIHJlY29yZF9iaXRzKTtcbi0tXG5mcy9pbm9kZS5jPTkzMz1zdGF0aWMgZW51bSBscnVfc3RhdHVzIGlub2RlX2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxuZnMvaW5vZGUuYy05NzktXHRcdHJlYXAgPSBpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhLCAwLCAtMSk7XG5mcy9pbm9kZS5jOjk4MDpcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5mcy9pbm9kZS5jLTk4MS1cdFx0XHRfX2NvdW50X3ZtX2V2ZW50cyhLU1dBUERfSU5PREVTVEVBTCwgcmVhcCk7XG4tLVxuZnMvbmV0ZnMvbWlzYy5jPTMwND1ib29sIG5ldGZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25ldGZzL21pc2MuYy0zMjUtXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pKSkgeyAvKiBbREVQUkVDQVRFRF0gKi9cbmZzL25ldGZzL21pc2MuYzozMjY6XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8ICEoZ2ZwIFx1MDAyNiBfX0dGUF9GUykpXG5mcy9uZXRmcy9taXNjLmMtMzI3LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9uZnMvZmlsZS5jPTUxMj1zdGF0aWMgYm9vbCBuZnNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxuZnMvbmZzL2ZpbGUuYy01MTgtXHRcdGlmICgoY3VycmVudF9nZnBfY29udGV4dChnZnApIFx1MDAyNiBHRlBfS0VSTkVMKSAhPSBHRlBfS0VSTkVMIHx8XG5mcy9uZnMvZmlsZS5jOjUxOTpcdFx0ICAgIGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY3VycmVudF9pc19rY29tcGFjdGQoKSlcbmZzL25mcy9maWxlLmMtNTIwLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9uZnMvZnNjYWNoZS5oPTEwMj1zdGF0aWMgaW5saW5lIGJvb2wgbmZzX2ZzY2FjaGVfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxuZnMvbmZzL2ZzY2FjaGUuaC0xMDQtXHRpZiAoZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pKSB7IC8qIFtERVBSRUNBVEVEXSAqL1xuZnMvbmZzL2ZzY2FjaGUuaDoxMDU6XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8ICEoZ2ZwIFx1MDAyNiBfX0dGUF9GUykpXG5mcy9uZnMvZnNjYWNoZS5oLTEwNi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTAwPWJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwMS1cdFx0XHRcdFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDI6Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwMy1leHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3J1bihpbnQgbmlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMTI9c3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMTgtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMTk6c3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjAte1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTMzNT1leHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozMzY6Ym9vbCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTMzNy1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MzE5ND1zdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjU4LVxubW0vY29tcGFjdGlvbi5jOjMyNTk6Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKVxubW0vY29tcGFjdGlvbi5jLTMyNjAte1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjYyLX1cbm1tL2NvbXBhY3Rpb24uYzozMjYzOkVYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaXNfa2NvbXBhY3RkKTtcbm1tL2NvbXBhY3Rpb24uYy0zMjY0LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ2Nz1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDcyLVxubW0vdm1zY2FuLmM6NDczOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy00NzQtXHRcdHJldHVybiAwO1xuLS1cbm1tL3Ztc2Nhbi5jPTUzMT12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0MS1cdCAqL1xubW0vdm1zY2FuLmM6NTQyOlx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNTQzLVx0ICAgIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTEwNzg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEyMTAtXHRcdFx0LyogQ2FzZSAxIGFib3ZlICovXG5tbS92bXNjYW4uYzoxMjExOlx0XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMTIxMi1cdFx0XHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYz0xODQ3PXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxuLS1cbm1tL3Ztc2Nhbi5jLTE4NTItXG5tbS92bXNjYW4uYzoxODUzOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy0xODU0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9MzkwNj1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbi0tXG5tbS92bXNjYW4uYy0zOTA5LVxubW0vdm1zY2FuLmM6MzkxMDpcdGlmIChwZ2RhdCBcdTAwMjZcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xubW0vdm1zY2FuLmMtMzkxMS1cdFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5MTQtXHR9IGVsc2UgaWYgKCF3YWxrIFx1MDAyNlx1MDAyNiBmb3JjZV9hbGxvYykge1xubW0vdm1zY2FuLmM6MzkxNTpcdFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xubW0vdm1zY2FuLmMtMzkxNi1cbi0tXG5tbS92bXNjYW4uYz0zOTI2PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbi0tXG5tbS92bXNjYW4uYy0zOTM0LVxubW0vdm1zY2FuLmM6MzkzNTpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTM5MzYtXHRcdGtmcmVlKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jPTQyOTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00Mjk1LVxubW0vdm1zY2FuLmM6NDI5NjpcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XG5tbS92bXNjYW4uYy00Mjk3LVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMDI9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTEzLVx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjUxMTQ6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG5tbS92bXNjYW4uYy01MTE1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9NTMxND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzMzYtXG5tbS92bXNjYW4uYzo1MzM3Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy01MzM4LVx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xuLS1cbm1tL3Ztc2Nhbi5jLTUzNDQtXG5tbS92bXNjYW4uYzo1MzQ1Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy01MzQ2LVx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbi0tXG5tbS92bXNjYW4uYz02MDY4PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTAyLVx0ICovXG5tbS92bXNjYW4uYzo2MTAzOlx0cHJvcG9ydGlvbmFsX3JlY2xhaW0gPSAoIWNncm91cF9yZWNsYWltKHNjKSBcdTAwMjZcdTAwMjYgIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02MTA0LVx0XHRcdFx0c2MtXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZKTtcbi0tXG5tbS92bXNjYW4uYz02MjU5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02Mjc2LVx0ICovXG5tbS92bXNjYW4uYzo2Mjc3Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlbWVtY2dfZnVsbF93YWxrKVxubW0vdm1zY2FuLmMtNjI3OC1cdFx0cGFydGlhbCA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmM9NjMzOD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02Mzc2LVxubW0vdm1zY2FuLmM6NjM3NzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7XG5tbS92bXNjYW4uYy02Mzc4LVx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTY0MTktXG5tbS92bXNjYW4uYzo2NDIwOlx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTY0MjEtXHRcdFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTY0MjktXHQgKi9cbm1tL3Ztc2Nhbi5jOjY0MzA6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2IGN1cnJlbnRfbWF5X3Rocm90dGxlKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02NDMxLVx0ICAgICFzYy1cdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jPTY0ODU9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02NTA2LVx0ICovXG5tbS92bXNjYW4uYzo2NTA3Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY2dyb3VwX3JlY2xhaW0oc2MpKVxubW0vdm1zY2FuLmMtNjUwOC1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTc1MjM9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbi0tXG5tbS92bXNjYW4uYy03NTk2LVxubW0vdm1zY2FuLmM6NzU5Nzpib29sIGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXG5tbS92bXNjYW4uYy03NTk4LXtcbi0tXG5tbS92bXNjYW4uYy03NjAwLX1cbm1tL3Ztc2Nhbi5jOjc2MDE6RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rc3dhcGQpO1xubW0vdm1zY2FuLmMtNzYwMi1cbi0tXG5tbS92bXNjYW4uYz03NjY4PXZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTc2NzEtXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxubW0vdm1zY2FuLmM6NzY3MjpcdFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cbm1tL3Ztc2Nhbi5jLTc2NzMtXHRcdFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjA2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdm9sdXRpb24gb2YgS2VybmVsIFRocmVhZCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBpZGVudGlmeWluZyB0aGUga3N3YXBkIGFuZCBrY29tcGFjdGQgcHJvY2Vzc2VzIG5vdy4gSSByZWNhbGwgdGhleSB1c2VkIHRvIHVzZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyDigJMgdGhhdCB3YXMgdGhlIG9sZCB3YXkuIE5vdywgdGhlIGNoZWNrcyBoYXZlIGJlZW4gdXBkYXRlZCB0byB1c2UgYGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrc3dhcGRgIGFuZCBga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZGAuIEludGVyZXN0aW5nLiBUaGlzIHN1Z2dlc3RzIGEgc2hpZnQgaW4gaG93IHRoZXNlIGtlcm5lbCB0aHJlYWRzIGFyZSBiZWluZyBjYXRlZ29yaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBuZXcgbWV0aG9kLCBzcGVjaWZpY2FsbHksIHdoYXQgYGt0aHJlYWRfZnVuY2AgaXMgYWN0dWFsbHkgKmRvaW5nKi4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGt0aHJlYWRfZnVuY2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIHJldmVhbHMuIFRoaXMgY2hhbmdlIGxpa2VseSBoYXMgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIG1hbmFnZSBhbmQgbW9uaXRvciB0aGVzZSBjcnVjaWFsIG1lbW9yeSBtYW5hZ2VtZW50IHRocmVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3RocmVhZF9mdW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYz01OTY9c3RhdGljIHN0cnVjdCBzaW1wbGVfd29ya19xdWV1ZSAqZ2V0X2N1cnJlbnRfdGhyZWFkX3dvcmtfcXVldWUodm9pZClcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9mdW5uZWwtd29ya3F1ZXVlLmMtNjA2LVxuZHJpdmVycy9tZC9kbS12ZG8vZnVubmVsLXdvcmtxdWV1ZS5jOjYwNzpcdGlmIChrdGhyZWFkX2Z1bmMoY3VycmVudCkgIT0gd29ya19xdWV1ZV9ydW5uZXIpXG5kcml2ZXJzL21kL2RtLXZkby9mdW5uZWwtd29ya3F1ZXVlLmMtNjA4LVx0XHQvKiBOb3QgYSBWRE8gd29yayBxdWV1ZSB0aHJlYWQuICovXG4tLVxuZnMvbmZzZC9uZnNzdmMuYz01OTU9c3RydWN0IHN2Y19ycXN0ICpuZnNkX2N1cnJlbnRfcnFzdCh2b2lkKVxuZnMvbmZzZC9uZnNzdmMuYy01OTYte1xuZnMvbmZzZC9uZnNzdmMuYzo1OTc6XHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpID09IG5mc2QpXG5mcy9uZnNkL25mc3N2Yy5jLTU5OC1cdFx0cmV0dXJuIGt0aHJlYWRfZGF0YShjdXJyZW50KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaD0xMTI9Ym9vbCBrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcChib29sICp3YXNfZnJvemVuKTtcbmluY2x1ZGUvbGludXgva3RocmVhZC5oOjExMzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcbmluY2x1ZGUvbGludXgva3RocmVhZC5oLTExNC12b2lkICprdGhyZWFkX2RhdGEoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcbi0tXG5rZXJuZWwva3RocmVhZC5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcCk7XG4tLVxua2VybmVsL2t0aHJlYWQuYy0yMTEtLyoqXG5rZXJuZWwva3RocmVhZC5jOjIxMjogKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXG5rZXJuZWwva3RocmVhZC5jLTIxMy0gKiBAdGFzazoga3RocmVhZCB0YXNrIGluIHF1ZXN0aW9uXG4tLVxua2VybmVsL2t0aHJlYWQuYy0yMTYtICovXG5rZXJuZWwva3RocmVhZC5jOjIxNzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxua2VybmVsL2t0aHJlYWQuYy0yMTgte1xuLS1cbmtlcm5lbC9rdGhyZWFkLmMtMjIzLX1cbmtlcm5lbC9rdGhyZWFkLmM6MjI0OkVYUE9SVF9TWU1CT0xfR1BMKGt0aHJlYWRfZnVuYyk7XG5rZXJuZWwva3RocmVhZC5jLTIyNS1cbi0tXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBuYmNvbl9rdGhyZWFkX3dha2Uoc3RydWN0IGNvbnNvbGUgKmNvbilcbi0tXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmgtMTI4LVx0ICpcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaDoxMjk6XHQgKiBUaGlzIHBhaXJzIHdpdGggbmJjb25fa3RocmVhZF9mdW5jOkEuXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmgtMTMwLVx0ICovXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jPTExODA9c3RhdGljIGJvb2wgbmJjb25fa3RocmVhZF9zaG91bGRfd2FrZXVwKHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBuYmNvbl9jb250ZXh0ICpjdHh0KVxuLS1cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjE0LS8qKlxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEyMTU6ICogbmJjb25fa3RocmVhZF9mdW5jIC0gVGhlIHByaW50ZXIgdGhyZWFkIGZ1bmN0aW9uXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNi0gKiBAX19jb25zb2xlOlx0Q29uc29sZSB0byBvcGVyYXRlIG9uXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyMTktICovXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTIyMDpzdGF0aWMgaW50IG5iY29uX2t0aHJlYWRfZnVuYyh2b2lkICpfX2NvbnNvbGUpXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIyMS17XG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyNDQtXHRcdFx0ICAgbmJjb25fa3RocmVhZF9zaG91bGRfd2FrZXVwKGNvbiwgY3R4dCksXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTI0NTpcdFx0XHQgICBUQVNLX0lOVEVSUlVQVElCTEUpOyAvKiBMTU0obmJjb25fa3RocmVhZF9mdW5jOkEpICovXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTI0Ni1cbi0tXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTI5Mz1zdGF0aWMgaW5saW5lIGJvb2wgcmN1d2FpdF9oYXNfc2xlZXBlcihzdHJ1Y3QgcmN1d2FpdCAqdylcbi0tXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTMwMy1cdCAqXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTMwNDpcdCAqIFRoaXMgcGFpcnMgd2l0aCBuYmNvbl9rdGhyZWFkX2Z1bmM6QS5cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzA1LVx0ICovXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jPTEzNzU9Ym9vbCBuYmNvbl9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgY29uc29sZSAqY29uKVxuLS1cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzgzLVxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEzODQ6XHRrdCA9IGt0aHJlYWRfcnVuKG5iY29uX2t0aHJlYWRfZnVuYywgY29uLCBcJiMzNDtwci8lcyVkXCYjMzQ7LCBjb24tXHUwMDNlbmFtZSwgY29uLVx1MDAzZWluZGV4KTtcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzg1LVx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcbi0tXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTM2NTY9c3RhdGljIGJvb2wgbGVnYWN5X2t0aHJlYWRfc2hvdWxkX3dha2V1cCh2b2lkKVxuLS1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzcwMy1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzcwNDpzdGF0aWMgaW50IGxlZ2FjeV9rdGhyZWFkX2Z1bmModm9pZCAqdW51c2VkKVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzA1LXtcbi0tXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTM3Mjg9c3RhdGljIGJvb2wgbGVnYWN5X2t0aHJlYWRfY3JlYXRlKHZvaWQpXG4tLVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzMzLVxua2VybmVsL3ByaW50ay9wcmludGsuYzozNzM0Olx0a3QgPSBrdGhyZWFkX3J1bihsZWdhY3lfa3RocmVhZF9mdW5jLCBOVUxMLCBcJiMzNDtwci9sZWdhY3lcJiMzNDspO1xua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzM1LVx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MzI1OT1ib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG5tbS9jb21wYWN0aW9uLmMtMzI2MC17XG5tbS9jb21wYWN0aW9uLmM6MzI2MTpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xubW0vY29tcGFjdGlvbi5jLTMyNjItfVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTc0PWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtMzE3NS17XG5tbS9raHVnZXBhZ2VkLmM6MzE3NjpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2h1Z2VwYWdlZDtcbm1tL2todWdlcGFnZWQuYy0zMTc3LX1cbi0tXG5tbS92bXNjYW4uYz03NTk3PWJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcbm1tL3Ztc2Nhbi5jLTc1OTgte1xubW0vdm1zY2FuLmM6NzU5OTpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xubW0vdm1zY2FuLmMtNzYwMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgVGhyZWFkIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Uga2VybmVsIHRocmVhZHMgYXJlIGJlaGF2aW5nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwva3RocmVhZC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGtlcm5lbCB0aHJlYWQgbWFuYWdlbWVudCBzaG91bGQgcmVzaWRlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYGt0aHJlYWRfZnVuY2AgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgdGhyZWFkLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgaW52b2tlZCBpcyBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYW5kIGZyb20gYGt0aHJlYWRfZnVuY2AuIFRoaXMgbWVhbnMgZXhhbWluaW5nIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcywgbGlrZSB0aGUgYGt0aHJlYWRgIHN0cnVjdCwgYW5kIGhvdyB0aGUgc2NoZWR1bGVyIGludGVyYWN0cyB3aXRoIGl0LiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdW51c3VhbCBiZWhhdmlvciBpbiB0aGUgc2V0dXAgYW5kIHRlYXJkb3duIG9mIHRoZXNlIHRocmVhZHMuIEkgZXhwZWN0IHRvIGJlIGRpZ2dpbmcgaW50byB0aGUgc2NoZWR1bGluZyBwb2xpY2llcywgc2lnbmFscywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBlbXBsb3llZCwgc2luY2UgdGhlc2UgYXJlIGFsd2F5cyBhcmVhcyBvZiBwb3RlbnRpYWwgY29tcGxleGl0eSBhbmQgYnVncy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJlZW1wdGlvbiBtb2RlbCBoZXJlLCB0byBiZSBzdXJlIEkgY2FuIHZpc3VhbGl6ZSBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aGVuIHRoZSB0aHJlYWQgaXMgaW4gYW4gYWN0aXZlIG9yIHdhaXRpbmcgc3RhdGUuIFRoaXMgd2lsbCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCB0byBmb2xsb3cgdGhpcyB0cmFjZSBmcm9tIHRoZSBrdGhyZWFkIGZ1bmN0aW9uIHRocm91Z2ggdGhlIHZhcmlvdXMgc3RhZ2VzIHRoYXQgdGhlIGt0aHJlYWQgaGFzIHVudGlsIGl0cyBjb21wbGV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2t0aHJlYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XG4gMjExOlx0LyoqXG4gMjEyOlx0ICoga3RocmVhZF9mdW5jIC0gcmV0dXJuIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgb24ga3RocmVhZCBjcmVhdGlvblxuIDIxMzpcdCAqIEB0YXNrOiBrdGhyZWFkIHRhc2sgaW4gcXVlc3Rpb25cbiAyMTQ6XHQgKlxuIDIxNTpcdCAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFzayBpcyBub3QgYSBrdGhyZWFkLlxuIDIxNjpcdCAqL1xuIDIxNzpcdHZvaWQgKmt0aHJlYWRfZnVuYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gMjE4Olx0e1xuIDIxOTpcdFx0c3RydWN0IGt0aHJlYWQgKmt0aHJlYWQgPSB0c2tfaXNfa3RocmVhZCh0YXNrKTtcbiAyMjA6XHRcdGlmIChrdGhyZWFkKVxuIDIyMTpcdFx0XHRyZXR1cm4ga3RocmVhZC1cdTAwM2V0aHJlYWRmbjtcbiAyMjI6XHRcdHJldHVybiBOVUxMO1xuIDIyMzpcdH1cbiAyMjQ6XHRFWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2Z1bmMpO1xuIDIyNTpcdFxuIDIyNjpcdC8qKlxuIDIyNzpcdCAqIGt0aHJlYWRfZGF0YSAtIHJldHVybiBkYXRhIHZhbHVlIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXG4gMjI4Olx0ICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxuIDIyOTpcdCAqXG4gMjMwOlx0ICogUmV0dXJuIHRoZSBkYXRhIHZhbHVlIHNwZWNpZmllZCB3aGVuIGt0aHJlYWQgQHRhc2sgd2FzIGNyZWF0ZWQuXG4gMjMxOlx0ICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhlIHZhbGlkaXR5IG9mIEB0YXNrIHdoZW5cbiAyMzI6XHQgKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gMjMzOlx0ICovXG4gMjM0Olx0dm9pZCAqa3RocmVhZF9kYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlbW92YWwgb2YgUEZfS1NXQVBEIGFuZCBJdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYFBGX0tTV0FQRGAgYW5kIGBQRl9LQ09NUEFDVERgIHdlcmUgcmVtb3ZlZCBiZWNhdXNlIHdlJiMzOTtyZSBub3cgdXNpbmcgYGt0aHJlYWRfZnVuYyhjdXJyZW50KWAgaW5zdGVhZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGlzIGNoYW5nZSByaXBwbGVzIG91dCBmdXJ0aGVyLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KClRoZSBmaXJzdCBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gSXQgd2VudCBmcm9tIGNoZWNraW5nIGAoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKSkgPT0gUEZfTUVNQUxMT0NgIHRvIHNpbXBseSBgKGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IFBGX01FTUFMTE9DKWAuIFRoZSBvbGQgY2hlY2sgc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGV4Y2x1ZGUga3N3YXBkIGZyb20gYSBtZW1vcnkgYWxsb2NhdGlvbiBjaGVjay4gV2h5PwoKSSByZW1lbWJlciB0aGF0IGBrc3dhcGRgIHNldHMgYFBGX01FTUFMTE9DYCAoIGB0c2stJmd0O2ZsYWdzIHw9IFBGX01FTUFMTE9DO2ApIHdoaWNoIGlzIGNsZWFyIGluIGBtbS92bXNjYW4uY2AuIEJ1dCBgUEZfS1NXQVBEYCB3YXMgYWxzbyBzZXQgb24ga3N3YXBkIHByZXZpb3VzbHkgYW5kIGl0IHNlZW1zIHRvIGhhdmUgYmVlbiByZW1vdmVkIHRvby4gVGhpcyBpcyB0aGUgY3J1eCBvZiBpdC4gVGhlIGNvZGUgaW4gYGlvbWFwX3dyaXRlcGFnZXNgIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgd3JpdGViYWNrIGZyb20gYSByZWNsYWltIGNvbnRleHQgKGxpa2Uga3N3YXBkKSAqc2hvdWxkIG5ldmVyKiBoYXBwZW4gZXhjZXB0IGluIGEgVk0gcmVncmVzc2lvbi4gU28sIHRoZSBvcmlnaW5hbCBjaGVjayB3YXMgZGVzaWduZWQgdG8gZW5zdXJlIHRoYXQgaWYgdGhlIHByb2Nlc3MgaGFkIGBQRl9LU1dBUERgIHNldCwgdGhhdCB0aGUgYFdBUk5fT05fT05DRWAgaW4gYGlvbWFwX3dyaXRlcGFnZXNgIHdvdWxkbiYjMzk7dCBiZSB0cmlnZ2VyZWQsIGJlY2F1c2Uga3N3YXBkIHdvdWxkbiYjMzk7dCB0cmlnZ2VyIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlIHBhdGguCgpCdXQgbm93LCBzaW5jZSBrc3dhcGQgb25seSBoYXMgYFBGX01FTUFMTE9DYCwgdGhlIGNoZWNrIGluIGBpb21hcF93cml0ZXBhZ2VzYCBpcyBnb2luZyB0byB0cmlnZ2VyIGlmIGtzd2FwZCAqZG9lcyogcnVuIHRoYXQgY29kZS4gQnV0LCBpZiBrc3dhcGQgaXMgY2FsbGluZyB0aGF0IGNvZGUsIGl0ICpzaG91bGRuJiMzOTt0KiBiZS4gVGhpcyBzdWdnZXN0cyB0aGF0IHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpcyBwb3RlbnRpYWxseSBicm9rZW4uIFdlIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGtzd2FwZCAqY2FuKiBlbnRlciBgaW9tYXBfd3JpdGVwYWdlc2AsIG9yIGlmIHNvbWV0aGluZyBlbHNlIGlzIGdvaW5nIG9uLiBJdCByZWFsbHkgbmVlZHMgdG8gYmUgZW5zdXJlZCB0aGF0IGtzd2FwZCBuZXZlciwgZXZlciwgY2FsbHMgdGhhdCBmdW5jdGlvbi4KClRoZSBYRlMgYnRyZWUgc3BsaXQgd29ya2VyIGFsc28gcHJldmlvdXNseSBzZXQgYFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEYCBpbiBgbmV3X3BmbGFnc2AsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnkgYW5kIGNvbW1lbnRzIG9uIHRoYXQgY29kZSB0byB1bmRlcnN0YW5kICp3aHkqIGBQRl9LU1dBUERgIHdhcyBpbmNsdWRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgbWF5IGdpdmUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHByZXZpb3VzIGxvZ2ljLCBiZWZvcmUgdGhlIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIHJlZmFjdG9yaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5OTA6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHQqY3VyO1xuMjk5MTpcdFx0aW50XHRcdFx0bGV2ZWw7XG4yOTkyOlx0XHR1bmlvbiB4ZnNfYnRyZWVfcHRyXHQqcHRycDtcbjI5OTM6XHRcdHVuaW9uIHhmc19idHJlZV9rZXlcdCprZXk7XG4yOTk0Olx0XHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0KipjdXJwO1xuMjk5NTpcdFx0aW50XHRcdFx0KnN0YXQ7XHRcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xuMjk5NjpcdFx0aW50XHRcdFx0cmVzdWx0O1xuMjk5NzpcdFx0c3RydWN0IGNvbXBsZXRpb25cdCpkb25lO1xuMjk5ODpcdFx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuMjk5OTpcdH07XG4zMDAwOlx0XG4zMDAxOlx0LypcbjMwMDI6XHQgKiBTdGFjayBzd2l0Y2hpbmcgaW50ZXJmYWNlcyBmb3IgYWxsb2NhdGlvblxuMzAwMzpcdCAqL1xuMzAwNDpcdHN0YXRpYyB2b2lkXG4zMDA1Olx0eGZzX2J0cmVlX3NwbGl0X3dvcmtlcihcbjMwMDY6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdFx0KndvcmspXG4zMDA3Olx0e1xuMzAwODpcdFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzXHQqYXJncyA9IGNvbnRhaW5lcl9vZih3b3JrLFxuMzAwOTpcdFx0XHRcdFx0XHRcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncywgd29yayk7XG4zMDEwOlx0XHR4ZnNfdHJhbnNfc2V0X2NvbnRleHQoYXJncy1cdTAwM2VjdXItXHUwMDNlYmNfdHApO1xuMzAxMTpcdFxuMzAxMjpcdFx0YXJncy1cdTAwM2VyZXN1bHQgPSBfX3hmc19idHJlZV9zcGxpdChhcmdzLVx1MDAzZWN1ciwgYXJncy1cdTAwM2VsZXZlbCwgYXJncy1cdTAwM2VwdHJwLFxuMzAxMzpcdFx0XHRcdFx0XHQgYXJncy1cdTAwM2VrZXksIGFyZ3MtXHUwMDNlY3VycCwgYXJncy1cdTAwM2VzdGF0KTtcbjMwMTQ6XHRcbjMwMTU6XHRcdHhmc190cmFuc19jbGVhcl9jb250ZXh0KGFyZ3MtXHUwMDNlY3VyLVx1MDAzZWJjX3RwKTtcbjMwMTY6XHRcbjMwMTc6XHRcdC8qXG4zMDE4Olx0XHQgKiBEbyBub3QgYWNjZXNzIGFyZ3MgYWZ0ZXIgY29tcGxldGUoKSBoYXMgcnVuIGhlcmUuIFdlIGRvbiYjMzk7dCBvd24gYXJnc1xuMzAxOTpcdFx0ICogYW5kIHRoZSBvd25lciBtYXkgcnVuIGFuZCBmcmVlIGFyZ3MgYmVmb3JlIHdlIHJldHVybiBoZXJlLlxuMzAyMDpcdFx0ICovXG4zMDIxOlx0XHRjb21wbGV0ZShhcmdzLVx1MDAzZWRvbmUpO1xuMzAyMjpcdH1cbjMwMjM6XHRcbjMwMjQ6XHQvKlxuMzAyNTpcdCAqIEJNQlQgc3BsaXQgcmVxdWVzdHMgb2Z0ZW4gY29tZSBpbiB3aXRoIGxpdHRsZSBzdGFjayB0byB3b3JrIG9uIHNvIHdlIHB1c2hcbjMwMjY6XHQgKiB0aGVtIG9mZiB0byBhIHdvcmtlciB0aHJlYWQgc28gdGhlcmUgaXMgbG90cyBvZiBzdGFjayB0byB1c2UuIEZvciB0aGUgb3RoZXJcbjMwMjc6XHQgKiBidHJlZSB0eXBlcywganVzdCBjYWxsIGRpcmVjdGx5IHRvIGF2b2lkIHRoZSBjb250ZXh0IHN3aXRjaCBvdmVyaGVhZCBoZXJlLlxuMzAyODpcdCAqXG4zMDI5Olx0ICogQ2FyZSBtdXN0IGJlIHRha2VuIGhlcmUgLSB0aGUgd29yayBxdWV1ZSByZXNjdWVyIHRocmVhZCBpbnRyb2R1Y2VzIHBvdGVudGlhbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHhmc19idHJlZV9zcGxpdGAqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgYHhmc19idHJlZV9zcGxpdGAgZnVuY3Rpb24uIEkgYWxyZWFkeSB1bmRlcnN0YW5kIHRoZSBoaWdoLWxldmVsIGNvbmNlcHQ6IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIG1lY2hhbmljcyBvZiBob3cgd2UgZGl2aWRlIGEgQi10cmVlIG5vZGUgd2hlbiBpdCBvdmVyZmxvd3MuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIHNwbGl0IHBvaW50IGFuZCBwb3RlbnRpYWxseSBzb21lIGluaXRpYWwgbm9kZSBhZGp1c3RtZW50cy4gTm93LCBJJiMzOTttIGFudGljaXBhdGluZyB0aGUgbml0dHktZ3JpdHR5OiBob3cgdGhlIGRhdGEgYW5kIG1ldGFkYXRhIGFyZSBhY3R1YWxseSBtb3ZlZCwgaG93IHBvaW50ZXJzIGFyZSB1cGRhdGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgd2UgbWFpbnRhaW4gdGhlIEItdHJlZSYjMzk7cyBjcnVjaWFsIHByb3BlcnRpZXMgYWZ0ZXIgdGhpcyBzcGxpdC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZSBzcGxpdCDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgcmVhbCBlbGVnYW5jZSAob3IgdWdsaW5lc3MhKSBvZiB0aGVzZSBhbGdvcml0aG1zIHJlc2lkZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGluZ3MgbGlrZSBqb3VybmFsIGxvZyBzdHJ1Y3R1cmVzIGlmIGFueSwgYW5kIGVycm9yIGhhbmRsaW5nLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBpbXBsZW1lbnRlZCB0byBtaW5pbWl6ZSBJL08gb3IgbG9ja2luZyBvdmVyaGVhZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMzA6XHQgKiBBR0YgXHUwMDNjXHUwMDNlIHdvcmtlciBxdWV1ZSBkZWFkbG9ja3MgaWYgdGhlIEJNQlQgYmxvY2sgYWxsb2NhdGlvbiBoYXMgdG8gbG9jayBuZXdcbjMwMzE6XHQgKiBBR0ZzIHRvIGFsbG9jYXRlIGJsb2Nrcy4gQSB0YXNrIGJlaW5nIHJ1biBieSB0aGUgcmVzY3VlciBjb3VsZCBhdHRlbXB0IHRvXG4zMDMyOlx0ICogbG9jayBhbiBBR0YgdGhhdCBpcyBhbHJlYWR5IGxvY2tlZCBieSBhIHRhc2sgcXVldWVkIHRvIHJ1biBieSB0aGUgcmVzY3VlcixcbjMwMzM6XHQgKiByZXN1bHRpbmcgaW4gYW4gQUJCQSBkZWFkbG9jayBhcyB0aGUgcmVzY3VlciBjYW5ub3QgcnVuIHRoZSBsb2NrIGhvbGRlciB0b1xuMzAzNDpcdCAqIHJlbGVhc2UgaXQgdW50aWwgdGhlIGN1cnJlbnQgdGhyZWFkIGl0IGlzIHJ1bm5pbmcgZ2FpbnMgdGhlIGxvY2suXG4zMDM1Olx0ICpcbjMwMzY6XHQgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB3ZSBvbmx5IGV2ZXIgcXVldWUgQk1CVCBzcGxpdHMgdGhhdCBkb24mIzM5O3QgaGF2ZSBhbiBBR0ZcbjMwMzc6XHQgKiBhbHJlYWR5IGxvY2tlZCB0byBhbGxvY2F0ZSBmcm9tLiBUaGUgb25seSBwbGFjZSB0aGF0IGRvZXNuJiMzOTt0IGhvbGQgYW4gQUdGXG4zMDM4Olx0ICogbG9ja2VkIGlzIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiBhdCBJTyBjb21wbGV0aW9uLCBidXQgdGhhdCBoYXMgYWxyZWFkeVxuMzAzOTpcdCAqIGJlZW4gb2ZmbG9hZGVkIHRvIGEgd29ya2VyIHRocmVhZCBhbmQgaGVuY2UgaGFzIG5vIHN0YWNrIGNvbnN1bXB0aW9uIGlzc3Vlc1xuMzA0MDpcdCAqIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQuXG4zMDQxOlx0ICovXG4zMDQyOlx0U1RBVElDIGludFx0XHRcdFx0XHQvKiBlcnJvciAqL1xuMzA0MzpcdHhmc19idHJlZV9zcGxpdChcbjMwNDQ6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHQqY3VyLFxuMzA0NTpcdFx0aW50XHRcdFx0bGV2ZWwsXG4zMDQ2Olx0XHR1bmlvbiB4ZnNfYnRyZWVfcHRyXHQqcHRycCxcbjMwNDc6XHRcdHVuaW9uIHhmc19idHJlZV9rZXlcdCprZXksXG4zMDQ4Olx0XHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0KipjdXJwLFxuMzA0OTpcdFx0aW50XHRcdFx0KnN0YXQpXHRcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xuMzA1MDpcdHtcbjMwNTE6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1x0YXJncztcbjMwNTI6XHRcdERFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpO1xuMzA1MzpcdFxuMzA1NDpcdFx0aWYgKCF4ZnNfYnRyZWVfaXNfYm1hcChjdXItXHUwMDNlYmNfb3BzKSB8fFxuMzA1NTpcdFx0ICAgIGN1ci1cdTAwM2ViY190cC1cdTAwM2V0X2hpZ2hlc3RfYWdubyA9PSBOVUxMQUdOVU1CRVIpXG4zMDU2Olx0XHRcdHJldHVybiBfX3hmc19idHJlZV9zcGxpdChjdXIsIGxldmVsLCBwdHJwLCBrZXksIGN1cnAsIHN0YXQpO1xuMzA1NzpcdFxuMzA1ODpcdFx0YXJncy5jdXIgPSBjdXI7XG4zMDU5Olx0XHRhcmdzLmxldmVsID0gbGV2ZWw7XG4zMDYwOlx0XHRhcmdzLnB0cnAgPSBwdHJwO1xuMzA2MTpcdFx0YXJncy5rZXkgPSBrZXk7XG4zMDYyOlx0XHRhcmdzLmN1cnAgPSBjdXJwO1xuMzA2MzpcdFx0YXJncy5zdGF0ID0gc3RhdDtcbjMwNjQ6XHRcdGFyZ3MuZG9uZSA9IFx1MDAyNmRvbmU7XG4zMDY1Olx0XG4zMDY2Olx0XHRJTklUX1dPUktfT05TVEFDSyhcdTAwMjZhcmdzLndvcmssIHhmc19idHJlZV9zcGxpdF93b3JrZXIpO1xuMzA2NzpcdFx0cXVldWVfd29yayh4ZnNfYWxsb2Nfd3EsIFx1MDAyNmFyZ3Mud29yayk7XG4zMDY4Olx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmRvbmUpO1xuMzA2OTpcdFx0ZGVzdHJveV93b3JrX29uX3N0YWNrKFx1MDAyNmFyZ3Mud29yayk7XG4zMDcwOlx0XHRyZXR1cm4gYXJncy5yZXN1bHQ7XG4zMDcxOlx0fVxuMzA3MjpcdCNlbHNlXG4zMDczOlx0I2RlZmluZSB4ZnNfYnRyZWVfc3BsaXRcdF9feGZzX2J0cmVlX3NwbGl0XG4zMDc0Olx0I2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgS2VybmVsIFJlZmFjdG9yaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBjaGFuZ2UsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBYRlMgaW50ZXJhY3RzIHdpdGgga3N3YXBkIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0cy4gSXQgYXBwZWFycyB0aGUgb2xkIGFwcHJvYWNoIHVzZWQgYFBGX01FTUFMTE9DYCBhbmQgYFBGX0tTV0FQRGAgZmxhZ3MgdG8gbWltaWMga3N3YXBkIGJlaGF2aW9yIHdpdGhpbiB3b3JrZXIgdGhyZWFkcywgcGFydGljdWxhcmx5IGluIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYC4gVGhlIGdvYWwgd2FzIHRvIHByZXZlbnQgYmxvY2tpbmcgZHVyaW5nIHJlY2xhaW0gb3BlcmF0aW9ucy4gVGhpcyByZWZhY3RvcmluZyBjbGVhcmx5IGNoYW5nZXMgaG93IHRoYXQgY29udGV4dCBpcyBkZXRlcm1pbmVkLgoKTm93IEkmIzM5O20gZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggc2VyaWVzIGlzIG1vZGlmeWluZyBob3cgd2UgZGV0ZWN0IHRoZSBrc3dhcGQgYW5kIGtjb21wYWN0ZCBjb250ZXh0cy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgZGlyZWN0IGZsYWcgY2hlY2tzIChgY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfS1NXQVBEYCwgZXRjLikgd2l0aCBjYWxscyB0byBga3RocmVhZF9mdW5jKGN1cnJlbnQpYCwgd2hpY2ggY2hlY2tzIGlmIHRoZSBjdXJyZW50IHRhc2sgKmlzKiBhIGtlcm5lbCB0aHJlYWQgYW5kLCBpZiBzbywgcmV0dXJucyBpdHMgdGhyZWFkIGZ1bmN0aW9uIChga3N3YXBkYCBvciBga2NvbXBhY3RkYCkuIEltcG9ydGFudGx5LCBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgYXJlICpyZW1vdmVkKiBmcm9tIHRoZSB0YXNrIGZsYWdzLiBUaGVyZSYjMzk7cyBhbHNvIGEgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBhbmQgaW4gWEZTJiMzOTtzIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYC4KCklzIHRoaXMgcmVmYWN0b3JpbmcganVzdCBjb3NtZXRpYz8gTGV0JiMzOTtzIGNoZWNrIGFnYWluc3QgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEuIE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyAqbm90KiBqdXN0IGRvY3VtZW50YXRpb24gb3IgbG9nZ2luZy4gSXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBmaWxlc3lzdGVtcy4gSXQmIzM5O3MgbGlrZWx5IGV4ZWN1dGFibGUsIHNvIHllcywgdGhpcyB3YXJyYW50cyBkZWVwZXIgc2NydXRpbnkgYW5kIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgdGhlIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIGNoYW5nZSBhZmZlY3RzIHJlY2xhaW0sIGNvbXBhY3Rpb24sIGFuZCBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBIb3cgZG9lcyB0aGlzIGltcGFjdCBYRlMgYW5kIGlvbWFwLCB3aGljaCBhcmUga2V5IGFyZWFzIG9mIGludGVyZXN0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIGRpZmZlcmVudCB0aHJlYWQgdHlwZXMg4oCTIHdoYXQgaGFwcGVucyBpZiBgY3VycmVudGAgaXNuJiMzOTt0IGEga3RocmVhZD8gVGhlIGBrdGhyZWFkX2Z1bmMoKWAgY2hlY2tzIGBQRl9LVEhSRUFEYC4gSWYgaXQmIzM5O3Mgbm90IGEga3RocmVhZCwgaXQmIzM5O3MgcmV0dXJuaW5nIGBOVUxMYCBzbyBvdXIgY3VycmVudCBjb250ZXh0IGZ1bmN0aW9ucyB3aWxsIHJldHVybiBgZmFsc2VgLgoKRm9jdXNpbmcgb24gWEZTIGFuZCB0aGF0IGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYDogUHJldmlvdXNseSwgd29ya2VyIHRocmVhZHMgd2VyZSBzZXR0aW5nIGBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRGAgdG8gYWN0IGFzIGtzd2FwZC4gVGhpcyBpcyBub3cgcmVtb3ZlZC4gSW4gYGlvbWFwX3dyaXRlcGFnZXNgLCB3ZSBzZWUgYSBzaGlmdCBmcm9tIGNoZWNraW5nIGEgY29tYmluZWQgZmxhZyAoYFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEYCkgdG8ganVzdCBgUEZfTUVNQUxMT0NgLiBDcnVjaWFsbHksIGtzd2FwZCBzdGlsbCBzZXRzIGBQRl9NRU1BTExPQ2Agd2hlbiBpdCBzdGFydHMuIFRoZSBvbGQgbG9naWMgbWlnaHQgaGF2ZSAqbWlzc2VkKiB0aGUgcmVjbGFpbSB3cml0ZWJhY2sgaWYgaXQgKndhcyoga3N3YXBkLCBidXQgbm93IGl0IHVuY29uZGl0aW9uYWxseSAqd2FybnMqIG9uIHRoZSBgUEZfTUVNQUxMT0NgIGZsYWcuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSB0aGUgb3JpZ2luYWwgV0FSTl9PTiB3YXMgbWVhbnQgdG8gY2F0Y2ggcmVjbGFpbSB3cml0ZWJhY2sgaXNzdWVzLiBUaGUgY29tbWVudCBjb25maXJtcyB0aGlzLiBUaGUgY2hlY2sgdXNlZCB0byBvbmx5IGZsYWcgZGlyZWN0IHJlY2xhaW0sIGJ1dCBub3cgaXQgZmxhZ3MgKmFueSogcmVjbGFpbSBjb250ZXh0LgoKVGhpcyBhbHRlcnMgaG93IGVycm9ycyByZWxhdGVkIHRvIHdyaXRlYmFjayBpbiByZWNsYWltIGFyZSBoYW5kbGVkLiBUaGlzIG1vZGlmaWNhdGlvbiBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBob3cgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3RzIHdpdGggZmlsZXN5c3RlbXMhIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlncyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgYW5kIHJ1biB0aGUgbW9kaWZpZWQgY29kZS4gYENPTkZJR19GU19JT01BUGAgb3IgYSBmaWxlc3lzdGVtIGNvbmZpZyAoWEZTLCBFWFQ0LCBldGMuKSBhcmUgbmVlZGVkLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGFuZCBJIHNob3VsZCBkb3VibGUtY2hlY2sgS2NvbmZpZyBmb3IgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgIGFuZCBgZnMveGZzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHRlc3RhYmxlIGFuZCBmaW5kIHRoZSBiZXN0IHdheSB0byBmdXp6IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCVUZGRVJFRF9JTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mMmZzL2YyZnMuaD0xMzEzPWVudW0gaW9zdGF0X3R5cGUge1xuLS1cbmZzL2YyZnMvZjJmcy5oLTEzMTUtXHRBUFBfRElSRUNUX0lPLFx0XHRcdC8qIGFwcCBkaXJlY3Qgd3JpdGUgSU9zICovXG5mcy9mMmZzL2YyZnMuaDoxMzE2Olx0QVBQX0JVRkZFUkVEX0lPLFx0XHQvKiBhcHAgYnVmZmVyZWQgd3JpdGUgSU9zICovXG5mcy9mMmZzL2YyZnMuaC0xMzE3LVx0QVBQX1dSSVRFX0lPLFx0XHRcdC8qIGFwcCB3cml0ZSBJT3MgKi9cbi0tXG5mcy9mMmZzL2ZpbGUuYz01NDMyPXN0YXRpYyBzc2l6ZV90IGYyZnNfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZjJmcy9maWxlLmMtNTQ0NS1cdFx0ZjJmc191cGRhdGVfaW9zdGF0KEYyRlNfSV9TQihpbm9kZSksIGlub2RlLFxuZnMvZjJmcy9maWxlLmM6NTQ0NjpcdFx0XHRcdFx0XHRBUFBfQlVGRkVSRURfSU8sIHJldCk7XG5mcy9mMmZzL2ZpbGUuYy01NDQ3LVx0fVxuLS1cbmZzL2YyZnMvaW9zdGF0LmM9MzM9aW50IF9fbWF5YmVfdW51c2VkIGlvc3RhdF9pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpXG4tLVxuZnMvZjJmcy9pb3N0YXQuYy00Ny1cdHNlcV9wdXRzKHNlcSwgXCYjMzQ7W1dSSVRFXVxcblwmIzM0Oyk7XG5mcy9mMmZzL2lvc3RhdC5jOjQ4Olx0SU9TVEFUX0lORk9fU0hPVyhcJiMzNDthcHAgYnVmZmVyZWQgZGF0YVwmIzM0OywgQVBQX0JVRkZFUkVEX0lPKTtcbmZzL2YyZnMvaW9zdGF0LmMtNDktXHRJT1NUQVRfSU5GT19TSE9XKFwmIzM0O2FwcCBkaXJlY3QgZGF0YVwmIzM0OywgQVBQX0RJUkVDVF9JTyk7XG4tLVxuZnMvZjJmcy9pb3N0YXQuYz0yMDQ9dm9pZCBmMmZzX3VwZGF0ZV9pb3N0YXQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2YyZnMvaW9zdGF0LmMtMjE0LVxuZnMvZjJmcy9pb3N0YXQuYzoyMTU6XHRpZiAodHlwZSA9PSBBUFBfQlVGRkVSRURfSU8gfHwgdHlwZSA9PSBBUFBfRElSRUNUX0lPKVxuZnMvZjJmcy9pb3N0YXQuYy0yMTYtXHRcdF9fZjJmc191cGRhdGVfaW9zdGF0KHNiaSwgQVBQX1dSSVRFX0lPLCBpb19ieXRlcyk7XG4tLVxuZnMvZjJmcy9pb3N0YXQuYy0yMjItXHRpZiAoaW5vZGUgXHUwMDI2XHUwMDI2IGYyZnNfY29tcHJlc3NlZF9maWxlKGlub2RlKSkge1xuZnMvZjJmcy9pb3N0YXQuYzoyMjM6XHRcdGlmICh0eXBlID09IEFQUF9CVUZGRVJFRF9JTylcbmZzL2YyZnMvaW9zdGF0LmMtMjI0LVx0XHRcdF9fZjJmc191cGRhdGVfaW9zdGF0KHNiaSwgQVBQX0JVRkZFUkVEX0NEQVRBX0lPLCBpb19ieXRlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjU0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlc2UgZmlsZXM6CgoqKkluaXRpYWwgRGlhZ25vc3RpYyBTY2FuKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBvciBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZmFjdCB0aGF0IEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgb2YgYGZzL2lvbWFwL01ha2VmaWxlYCBhbmQgYGZzL3hmcy9LY29uZmlnYCBpcyBwcmV0dHkgdGVsbGluZy4gVGhlIGBNYWtlZmlsZWAgc3VnZ2VzdHMgSSBtaWdodCBiZSBkZWJ1Z2dpbmcgYnVpbGQgZGVwZW5kZW5jaWVzIG9yIGludmVzdGlnYXRpbmcgaG93IEkvTyBtYXBwaW5nIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSU9NQVAgc3Vic3lzdGVtLiBDb252ZXJzZWx5LCBgZnMveGZzL0tjb25maWdgIGluZGljYXRlcyBJIG1pZ2h0IG5lZWQgdG8gdmVyaWZ5IG9yIGFsdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIFhGUyBmaWxlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZXNlIGFyZSByZWxhdGVkLCBidXQgbGlrZWx5IGF0IHNlcGFyYXRlIGxldmVscy4gVGhlIGZpcnN0IGJlaW5nIHRoZSBsb3dlci1sZXZlbCBJL08gbWFwcGluZyBhbmQgdGhlIHNlY29uZCBiZWluZyB0aGUgaGlnaGVyLWxldmVsIGZpbGVzeXN0ZW0gdGhhdCBtYXkgYmUgdGFraW5nIGFkdmFudGFnZSBvZiBpdC4gSXQmIzM5O3MgYSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uLCBmb2N1c2luZyBvbiB0aGVzZSBzcGVjaWZpYyBmaWxlIHN5c3RlbSBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdCNcbiAgIDM6XHQjIENvcHlyaWdodCAoYykgMjAxOSBPcmFjbGUuXG4gICA0Olx0IyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgNTpcdCNcbiAgIDY6XHRcbiAgIDc6XHRjY2ZsYWdzLXkgJiM0Mzs9IC1JICQoc3JjKVx0XHQjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX0ZTX0lPTUFQKVx0XHQmIzQzOz0gaW9tYXAub1xuICAxMDpcdFxuICAxMTpcdGlvbWFwLXlcdFx0XHRcdCYjNDM7PSB0cmFjZS5vIFxcXG4gIDEyOlx0XHRcdFx0XHQgICBpdGVyLm8gXFxcbiAgMTM6XHRcdFx0XHRcdCAgIGJ1ZmZlcmVkLWlvLm9cbiAgMTQ6XHRpb21hcC0kKENPTkZJR19CTE9DSylcdFx0JiM0Mzs9IGRpcmVjdC1pby5vIFxcXG4gIDE1Olx0XHRcdFx0XHQgICBpb2VuZC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRlMgQ29uZmlndXJhdGlvbiBBdWRpdCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGZzL3hmcy9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZXhwZWN0ZWQgZmVhdHVyZXMgYW5kIG9wdGlvbnMgZm9yIFhGUyBhcmUgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcHJvamVjdCYjMzk7cyByZXF1aXJlbWVudHMsIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgZGVmYXVsdHMgb3IgZGVwZW5kZW5jaWVzIGhhdmVuJiMzOTt0IGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBtaWdodCBpbXBhY3QgdXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IGBDT05GSUdfWEZTXypgIHN5bWJvbHMsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBYRlMgZmVhdHVyZXMgd2UmIzM5O3JlIGxldmVyYWdpbmcsIGxpa2UgcXVvdGFzLCBsYXJnZSBmaWxlIHN1cHBvcnQsIG1ldGFkYXRhIGpvdXJuYWxpbmcsIGFuZCBhbnkgbmV3IG9wdGlvbnMgaW50cm9kdWNlZCB0aGF0IG1pZ2h0IG9wdGltaXplIHBlcmZvcm1hbmNlIG9yIGFkZHJlc3Mgc3BlY2lmaWMga25vd24gaXNzdWVzLgoKSSYjMzk7bSBhbHNvIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IHB1bGwgaW4gb3RoZXIgcmVsYXRlZCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LCBvciBpZiBhbnkgbmV3IGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gVWx0aW1hdGVseSBJJiMzOTtsbCBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaG93IFhGUyBpcyBiZWluZyBidWlsdCwgYW5kIHdoaWNoIGZlYXR1cmVzIGFyZSB0cnVseSBhdmFpbGFibGUgYXQgcnVudGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy94ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBYRlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1hGUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBFWFBPUlRGU1xuICAgNjpcdFx0c2VsZWN0IENSQzMyXG4gICA3Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgWEZTIGlzIGEgaGlnaCBwZXJmb3JtYW5jZSBqb3VybmFsaW5nIGZpbGVzeXN0ZW0gd2hpY2ggb3JpZ2luYXRlZFxuICAxMDpcdFx0ICBvbiB0aGUgU0dJIElSSVggcGxhdGZvcm0uICBJdCBpcyBjb21wbGV0ZWx5IG11bHRpLXRocmVhZGVkLCBjYW5cbiAgMTE6XHRcdCAgc3VwcG9ydCBsYXJnZSBmaWxlcyBhbmQgbGFyZ2UgZmlsZXN5c3RlbXMsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsXG4gIDEyOlx0XHQgIHZhcmlhYmxlIGJsb2NrIHNpemVzLCBpcyBleHRlbnQgYmFzZWQsIGFuZCBtYWtlcyBleHRlbnNpdmUgdXNlIG9mXG4gIDEzOlx0XHQgIEJ0cmVlcyAoZGlyZWN0b3JpZXMsIGV4dGVudHMsIGZyZWUgc3BhY2UpIHRvIGFpZCBib3RoIHBlcmZvcm1hbmNlXG4gIDE0Olx0XHQgIGFuZCBzY2FsYWJpbGl0eS5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gYXQgXHUwMDNjaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcy9cdTAwM2VcbiAgMTc6XHRcdCAgZm9yIGNvbXBsZXRlIGRldGFpbHMuICBUaGlzIGltcGxlbWVudGF0aW9uIGlzIG9uLWRpc2sgY29tcGF0aWJsZVxuICAxODpcdFx0ICB3aXRoIHRoZSBJUklYIHZlcnNpb24gb2YgWEZTLlxuICAxOTpcdFxuICAyMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDIxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB4ZnMuICBCZSBhd2FyZSwgaG93ZXZlciwgdGhhdCBpZiB0aGUgZmlsZVxuICAyMjpcdFx0ICBzeXN0ZW0gb2YgeW91ciByb290IHBhcnRpdGlvbiBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgeW91JiMzOTtsbCBuZWVkXG4gIDIzOlx0XHQgIHRvIHVzZSBhbiBpbml0aWFsIHJhbWRpc2sgKGluaXRyZCkgdG8gYm9vdC5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgWEZTX1NVUFBPUlRfVjRcbiAgMjY6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBkZXByZWNhdGVkIFY0IChjcmM9MCkgZm9ybWF0XCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIFhGU19GU1xuICAyODpcdFx0ZGVmYXVsdCBuXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIFRoZSBWNCBmaWxlc3lzdGVtIGZvcm1hdCBsYWNrcyBjZXJ0YWluIGZlYXR1cmVzIHRoYXQgYXJlIHN1cHBvcnRlZFxuICAzMTpcdFx0ICBieSB0aGUgVjUgZm9ybWF0LCBzdWNoIGFzIG1ldGFkYXRhIGNoZWNrc3VtbWluZywgc3RyZW5ndGhlbmVkXG4gIDMyOlx0XHQgIG1ldGFkYXRhIHZlcmlmaWNhdGlvbiwgYW5kIHRoZSBhYmlsaXR5IHRvIHN0b3JlIHRpbWVzdGFtcHMgcGFzdCB0aGVcbiAgMzM6XHRcdCAgeWVhciAyMDM4LiAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgVjQgZm9ybWF0IGlzIGRlcHJlY2F0ZWQuICBBbGwgdXNlcnNcbiAgMzQ6XHRcdCAgc2hvdWxkIHVwZ3JhZGUgYnkgYmFja2luZyB1cCB0aGVpciBmaWxlcywgcmVmb3JtYXR0aW5nLCBhbmQgcmVzdG9yaW5nXG4gIDM1Olx0XHQgIGZyb20gdGhlIGJhY2t1cC5cbiAgMzY6XHRcbiAgMzc6XHRcdCAgQWRtaW5pc3RyYXRvcnMgYW5kIHVzZXJzIGNhbiBkZXRlY3QgYSBWNCBmaWxlc3lzdGVtIGJ5IHJ1bm5pbmdcbiAgMzg6XHRcdCAgeGZzX2luZm8gYWdhaW5zdCBhIGZpbGVzeXN0ZW0gbW91bnRwb2ludCBhbmQgY2hlY2tpbmcgZm9yIGEgc3RyaW5nXG4gIDM5Olx0XHQgIGJlZ2lubmluZyB3aXRoIFwmIzM0O2NyYz1cJiMzNDsuICBJZiB0aGUgc3RyaW5nIFwmIzM0O2NyYz0wXCYjMzQ7IGlzIGZvdW5kLCB0aGVcbiAgNDA6XHRcdCAgZmlsZXN5c3RlbSBpcyBhIFY0IGZpbGVzeXN0ZW0uICBJZiBubyBzdWNoIHN0cmluZyBpcyBmb3VuZCwgcGxlYXNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDM5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2Ugb3B0aW9uczoKCioqS2NvbmZpZyBEaXZlIGZvciBNZW1vcnkgTWFuYWdlbWVudCBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYENPTVBBQ1RJT05gIGFuZCBgU1dBUGAuIEkgbmVlZCB0byByZXZpZXcgdGhlc2UgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIHNldCBwcm9wZXJseSBvciBoYXZlIHRoZSBjb3JyZWN0IGRlcGVuZGVuY2llcyBzZXQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyBoZXJlIGFyZSBjcml0aWNhbCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpdGggdGhlIHN5c3RlbSBJIGhhdmUgaW4gbWluZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgYXNzb2NpYXRlZCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGNydWNpYWwuIENoZWNraW5nIHRoZSBLY29uZmlnIGlzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjI1PWNvbmZpZyBCQUxMT09OX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjM2LSMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cbm1tL0tjb25maWc6NjM3OmNvbmZpZyBDT01QQUNUSU9OXG5tbS9LY29uZmlnLTYzOC1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBjb21wYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzExCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHByb2JhYmx5IHdpdGhpbiBgbW0vS2NvbmZpZ2AuIEJhc2VkIG9uIGV4cGVyaWVuY2Ugd2l0aCB0aGlzIHBhcnRpY3VsYXIgYXJlYSwgbXkgaW50dWl0aW9uIHBvaW50cyBtZSB0b3dhcmQgdGhlIHZpY2luaXR5IG9mIGxpbmUgNjM1LiBJJiMzOTtsbCBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIGEgYnJvYWQgc3RhcnRpbmcgcG9pbnQsIGJ1dCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCB0aGUgcGVydGluZW50IG9wdGlvbnMvbG9naWMgYXJlIGZyZXF1ZW50bHkgZ3JvdXBlZCBpbiB0aGUgbWlkLXJhbmdlIG9mIHRoZXNlIGZpbGVzLCBnaXZlbiB0aGUgYnJlYWR0aCBvZiBjb25maWd1cmFibGUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgc29ydCBvZiBtYWNybyBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBzdGF0ZW1lbnQgZm9yIHRoZSBmZWF0dXJlIG9mIGludGVyZXN0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0I1xuIDYzNjpcdCMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cbiA2Mzc6XHRjb25maWcgQ09NUEFDVElPTlxuIDYzODpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cJiMzNDtcbiA2Mzk6XHRcdGRlZmF1bHQgeVxuIDY0MDpcdFx0c2VsZWN0IE1JR1JBVElPTlxuIDY0MTpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA2NDI6XHRcdGhlbHBcbiA2NDM6XHRcdCAgQ29tcGFjdGlvbiBpcyB0aGUgb25seSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQgdG8gZm9ybVxuIDY0NDpcdFx0ICBoaWdoIG9yZGVyIChsYXJnZXIgcGh5c2ljYWxseSBjb250aWd1b3VzKSBtZW1vcnkgYmxvY2tzXG4gNjQ1Olx0XHQgIHJlbGlhYmx5LiBUaGUgcGFnZSBhbGxvY2F0b3IgcmVsaWVzIG9uIGNvbXBhY3Rpb24gaGVhdmlseSBhbmRcbiA2NDY6XHRcdCAgdGhlIGxhY2sgb2YgdGhlIGZlYXR1cmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBPT00ga2lsbGVyXG4gNjQ3Olx0XHQgIGludm9jYXRpb25zIGZvciBoaWdoIG9yZGVyIG1lbW9yeSByZXF1ZXN0cy4gWW91IHNob3VsZG4mIzM5O3RcbiA2NDg6XHRcdCAgZGlzYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgdGhlcmUgcmVhbGx5IGlzIGEgc3Ryb25nIHJlYXNvbiBmb3JcbiA2NDk6XHRcdCAgaXQgYW5kIHRoZW4gd2Ugd291bGQgYmUgcmVhbGx5IGludGVyZXN0ZWQgdG8gaGVhciBhYm91dCB0aGF0IGF0XG4gNjUwOlx0XHQgIGxpbnV4LW1tQGt2YWNrLm9yZy5cbiA2NTE6XHRcbiA2NTI6XHRjb25maWcgQ09NUEFDVF9VTkVWSUNUQUJMRV9ERUZBVUxUXG4gNjUzOlx0XHRpbnRcbiA2NTQ6XHRcdGRlcGVuZHMgb24gQ09NUEFDVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgU1dBUCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBTV0FQYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24gaXMgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJiMzOTtzIHN0cnVjdHVyZSwgSSYjMzk7bGwgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHRoZW4gc2VhcmNoIHRocm91Z2ggaXQsIGxvb2tpbmcgZm9yIHRoZSBgU1dBUGAgb3B0aW9uIGRlZmluaXRpb24uIEkgZXhwZWN0IHRoaXMgd2lsbCByZXZlYWwgd2hldGhlciBpdCYjMzk7cyBhIGRpcmVjdCBvcHRpb24sIGEgZGVwZW5kZW5jeSBvZiBhbm90aGVyIG9wdGlvbiwgb3IgYSBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gdmFsdWUuIFRoaXMgd2lsbCBwcm92aWRlIHRoZSBkZXRhaWxzIG5lY2Vzc2FyeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNzUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgRnVuY3Rpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiByZWNlbnQgbW9kaWZpY2F0aW9ucywgc28gSSYjMzk7bGwgc3RhcnQgYnkgcGlucG9pbnRpbmcgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGFsdGVyZWQgb3IgZnJlc2hseSBpbnRyb2R1Y2VkLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbXBhY3RlZC4gSSBzZWUgdGhlIGZvbGxvd2luZyBhcyBsaWtlbHkgYXJlYXMgb2YgaW50ZXJlc3Q6CgoqICAgYGN1cnJlbnRfaXNfa3N3YXBkYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSB0byBtb25pdG9yIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLCBhcyBrc3dhcGQgaXMgdGhlIGtlcm5lbCYjMzk7cyBiYWNrZ3JvdW5kIG1lbW9yeSByZWNsYW1hdGlvbiBwcm9jZXNzLgoqICAgU2ltaWxhcmx5LCBgY3VycmVudF9pc19rY29tcGFjdGRgIGZyb20gYG1tL2NvbXBhY3Rpb24uY2AgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQsIHNpbmNlIGtjb21wYWN0ZCBtYW5hZ2VzIG1lbW9yeSBjb21wYWN0aW9uLCBzbyB0aGUgaW50ZXJmYWNlIHRvIHRoaXMgcHJvY2VzcyBpcyBjcml0aWNhbC4KKiAgIGBpb21hcF93cml0ZXBhZ2VzYCBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AgaXMgaW1wb3J0YW50IHRvIGV4YW1pbmUsIGVzcGVjaWFsbHkgd2l0aCBpdHMgaW1wYWN0IG9uIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTywgYXMgZmlsZSBzeXN0ZW0gcGVyZm9ybWFuY2Ugb2Z0ZW4gc2VlcyBpbXByb3ZlbWVudCBoZXJlLgoqICAgQW5kIGZpbmFsbHksIGB4ZnNfYnRyZWVfc3BsaXRgIHdpdGhpbiBgZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY2AuIFdhaXQsIGlzIHRoaXMgc3RhdGljIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSwgYmVjYXVzZSB0aGF0IHdpbGwgc2lnbmlmaWNhbnRseSBhZmZlY3QgdGhlIGltcGxpY2F0aW9ucy4gSSB0aGluayBJJiMzOTtsbCBsb29rIGFyb3VuZCBsaW5lIDMwNDIgaW4gYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgIHRvIGNsYXJpZnkuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBCLXRyZWUgc3BsaXR0aW5nIGlzIGZ1bmRhbWVudGFsIHRvIFhGUyYjMzk7cyBzY2FsYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzA0MDpcdCAqIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQuXG4zMDQxOlx0ICovXG4zMDQyOlx0U1RBVElDIGludFx0XHRcdFx0XHQvKiBlcnJvciAqL1xuMzA0MzpcdHhmc19idHJlZV9zcGxpdChcbjMwNDQ6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHQqY3VyLFxuMzA0NTpcdFx0aW50XHRcdFx0bGV2ZWwsXG4zMDQ2Olx0XHR1bmlvbiB4ZnNfYnRyZWVfcHRyXHQqcHRycCxcbjMwNDc6XHRcdHVuaW9uIHhmc19idHJlZV9rZXlcdCprZXksXG4zMDQ4Olx0XHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0KipjdXJwLFxuMzA0OTpcdFx0aW50XHRcdFx0KnN0YXQpXHRcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xuMzA1MDpcdHtcbjMwNTE6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1x0YXJncztcbjMwNTI6XHRcdERFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpO1xuMzA1MzpcdFxuMzA1NDpcdFx0aWYgKCF4ZnNfYnRyZWVfaXNfYm1hcChjdXItXHUwMDNlYmNfb3BzKSB8fFxuMzA1NTpcdFx0ICAgIGN1ci1cdTAwM2ViY190cC1cdTAwM2V0X2hpZ2hlc3RfYWdubyA9PSBOVUxMQUdOVU1CRVIpXG4zMDU2Olx0XHRcdHJldHVybiBfX3hmc19idHJlZV9zcGxpdChjdXIsIGxldmVsLCBwdHJwLCBrZXksIGN1cnAsIHN0YXQpO1xuMzA1NzpcdFxuMzA1ODpcdFx0YXJncy5jdXIgPSBjdXI7XG4zMDU5Olx0XHRhcmdzLmxldmVsID0gbGV2ZWw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTQ2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBLZXJuZWwgU3ltYm9sIExvY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIGxvY2F0aW9ucyBvZiBhIGZldyBrZXkga2VybmVsIHN5bWJvbHMuIEkgc2VlIHRoYXQgYGN1cnJlbnRfaXNfa3N3YXBkYCByZXNpZGVzIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBleHBvcnRlZCwgc28gaXQmIzM5O3MgYWNjZXNzaWJsZSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgZmlsZSwgYW5kIGltcG9ydGFudGx5LCBpdCYjMzk7cyB1bmRlciB0aGUgR1BMIGxpY2Vuc2UgYW5kIGlzIG5vdCBzdGF0aWMgd2hpY2ggbWVhbnMgZXh0ZXJuYWwgbW9kdWxlcyBjYW4gdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uLiBOZXh0LCBJJiMzOTttIGNoZWNraW5nIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAsIHdoaWNoIEkgZmluZCBpbiBgbW0vY29tcGFjdGlvbi5jYCDigJMgYWdhaW4sIGV4cG9ydGVkLCBHUEwsIGFuZCBub24tc3RhdGljLiBGaW5hbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgYGlvbWFwX3dyaXRlcGFnZXNgLCBkZWZpbmVkIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gVGhpcyB0b28gaXMgZXhwb3J0ZWQsIGFuZCBpdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMuIE5vdywgSSBzaG91bGQgaW52ZXN0aWdhdGUgYGlvbWFwX3dyaXRlcGFnZXNgIG1vcmUgY2xvc2VseTsgSSYjMzk7bGwgY2hlY2sgaXRzIGRlY2xhcmF0aW9uIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQmIzM5O3MgZXhwb3J0ZWQgdG8gdW5kZXJzdGFuZCBpdHMgdmlzaWJpbGl0eSBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF93cml0ZXBhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0yMDY5PWludFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyMDcwOmlvbWFwX3dyaXRlcGFnZXMoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYylcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjA3MS17XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMTAwLX1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjEwMTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF93cml0ZXBhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MzkKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBDb2RlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcgdGhhdCYjMzk7cyBjaGFuZ2VkLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhhdCB0aGVyZSBhcmUgYSBmZXcgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQuIEluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCwgaXQmIzM5O3MgYGlvbWFwX3dyaXRlcGFnZXNgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgYnVmZmVyZWQgSS9PLiBUaGVuLCBpbiB0aGUgWEZTIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgLCBJIHNlZSBib3RoIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYCBhbmQgdGhlIHN0YXRpYyBmdW5jdGlvbiBgeGZzX2J0cmVlX3NwbGl0YCB3ZXJlIG1vZGlmaWVkLiBUaGF0IGNvdWxkIGJlIHNpZ25pZmljYW50IGZvciBiLXRyZWUgcGVyZm9ybWFuY2UuIEZpbmFsbHksIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbSBhbmQgY29tcGFjdGlvbjogc3BlY2lmaWNhbGx5LCBgY3VycmVudF9pc19rY29tcGFjdGRgIGFuZCBga2NvbXBhY3RkYCBpbiBgbW0vY29tcGFjdGlvbi5jYCwgYW5kIGBjdXJyZW50X2lzX2tzd2FwZGAgYW5kIGBrc3dhcGRgIGluIGBtbS92bXNjYW4uY2AuCgpOb3csIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEl0JiMzOTtzIG1hcmtlZCBhcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHdoaWNoIG1lYW5zIHRoZXJlIGFyZSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBtZW1vcnkgcmVjbGFpbS9jb21wYWN0aW9uIChwcm9iYWJseSB0aGUgYmlnZ2VzdCBjaGFuZ2UpIGFuZCBzb21lIGludGVyZXN0aW5nIHVwZGF0ZXMgdG8gSU9NQVAgd3JpdGViYWNrIGFuZCBYRlMgYi10cmVlIGhhbmRsaW5nLiBUaGF0IElPTUFQIHRoaW5nIGlzIGFsd2F5cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB3aGVuIGl0IGRlYWxzIHdpdGggd3JpdGViYWNrLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcGVjaWZpY2FsbHk6IGBpb21hcF93cml0ZXBhZ2VzYCwgYGN1cnJlbnRfaXNfa3N3YXBkYCwgYW5kIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAsIHdoaWNoIGFsaWducyB3aXRoIHRob3NlIGZ1bmN0aW9uIGNhbGwgbW9kaWZpY2F0aW9ucy4gU28gdGhhdCYjMzk7cyB0aGUgY29yZSBmb2N1cyBvZiB0aGUgY2hhbmdlcy4KCkZpbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlOiBgQ09NUEFDVElPTmAsIGBTV0FQYCwgYEZTX0lPTUFQYCwgYW5kIGBYRlNfRlNgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5IGxpc3Qg4oCTIHdlIGtub3cgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgdGhlc2UgZmVhdHVyZXMuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZCB0aGF0IEkmIzM5O3ZlIGdvdCB0aGUgbGF5IG9mIHRoZSBsYW5kIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8ga2ljayBvZmYgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tzd2FwZCYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tjb21wYWN0ZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHByb2Nlc3MgZmxhZ3MgUEZfS1NXQVBEIGFuZCBQRl9LQ09NUEFDVEQgaW4gZmF2b3Igb2Yga3RocmVhZCBmdW5jdGlvbiBwb2ludGVyIGNvbXBhcmlzb25zIHZpYSBjdXJyZW50X2lzX2tzd2FwZCgpIGFuZCBjdXJyZW50X2lzX2tjb21wYWN0ZCgpLiBJdCB1cGRhdGVzIHJlY2xhaW0gYW5kIHdyaXRlYmFjayBoYW5kbGluZyBpbiBpb21hcF93cml0ZXBhZ2VzKCkgYW5kIHJlbW92ZXMgdGhlIGluaGVyaXRhbmNlIG9mIGtzd2FwZCBmbGFncyBpbiBYRlMgQi10cmVlIHNwbGl0IHdvcmsgaXRlbXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tzd2FwZCYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tjb21wYWN0ZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHByb2Nlc3MgZmxhZ3MgUEZfS1NXQVBEIGFuZCBQRl9LQ09NUEFDVEQgaW4gZmF2b3Igb2Yga3RocmVhZCBmdW5jdGlvbiBwb2ludGVyIGNvbXBhcmlzb25zIHZpYSBjdXJyZW50X2lzX2tzd2FwZCgpIGFuZCBjdXJyZW50X2lzX2tjb21wYWN0ZCgpLiBJdCB1cGRhdGVzIHJlY2xhaW0gYW5kIHdyaXRlYmFjayBoYW5kbGluZyBpbiBpb21hcF93cml0ZXBhZ2VzKCkgYW5kIHJlbW92ZXMgdGhlIGluaGVyaXRhbmNlIG9mIGtzd2FwZCBmbGFncyBpbiBYRlMgQi10cmVlIHNwbGl0IHdvcmsgaXRlbXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5ZWQ5OWQyZGRhZjE5Y2NiMjAwOGFiYTQ2ZDlmODVhODA1MzkwZjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA5OjUxOjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKaW5kZXggMGE1ZWJmZGE5MGYxMi4uNjMwNmNhNzQ3ZjNiYSAxMDA2NDQKLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCkBAIC0yMDc3LDggJiM0MzsyMDc3LDcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKQogCSAqIFdyaXRlYmFjayBmcm9tIHJlY2xhaW0gY29udGV4dCBzaG91bGQgbmV2ZXIgaGFwcGVuIGV4Y2VwdCBpbiB0aGUgY2FzZQogCSAqIG9mIGEgVk0gcmVncmVzc2lvbiBzbyB3YXJuIGFib3V0IGl0IGFuZCByZWZ1c2UgdG8gd3JpdGUgdGhlIGRhdGEuCiAJICovCi0JaWYgKFdBUk5fT05fT05DRSgoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKSkgPT0KLQkJCVBGX01FTUFMTE9DKSkKJiM0MzsJaWYgKFdBUk5fT05fT05DRSgoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpKSkKIAkJcmV0dXJuIC1FSU87CiAKIAl3aGlsZSAoKGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd3BjLSZndDt3YmMsIGZvbGlvLCAmYW1wO2Vycm9yKSkpIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jCmluZGV4IDYwZWY3ZjA4YjFkMzAuLjY3MzhkOWQxNTExYmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYwpAQCAtMjk5NCw3ICYjNDM7Mjk5NCw2IEBAIHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncyB7CiAJc3RydWN0IHhmc19idHJlZV9jdXIJKipjdXJwOwogCWludAkJCSpzdGF0OwkJLyogc3VjY2Vzcy9mYWlsdXJlICovCiAJaW50CQkJcmVzdWx0OwotCWJvb2wJCQlrc3dhcGQ7CS8qIGFsbG9jYXRpb24gaW4ga3N3YXBkIGNvbnRleHQgKi8KIAlzdHJ1Y3QgY29tcGxldGlvbgkqZG9uZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CkBAIC0zMDA4LDMzICYjNDM7MzAwNywxOCBAQCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKAogewogCXN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncwkqYXJncyA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQkJc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzLCB3b3JrKTsKLQl1bnNpZ25lZCBsb25nCQlwZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZwkJbmV3X3BmbGFncyA9IDA7Ci0KLQkvKgotCSAqIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbnRleHQgaGVyZSwgYnV0IG1heSBhbHNvIGJlIGRvaW5nIHdvcmsKLQkgKiBpbiBrc3dhcGQgY29udGV4dCwgYW5kIGhlbmNlIHdlIG1heSBuZWVkIHRvIGluaGVyaXQgdGhhdCBzdGF0ZQotCSAqIHRlbXBvcmFyaWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbiYjMzk7dCBibG9jayB3YWl0aW5nIGZvciBtZW1vcnkgcmVjbGFpbQotCSAqIGluIGFueSB3YXkuCi0JICovCi0JaWYgKGFyZ3MtJmd0O2tzd2FwZCkKLQkJbmV3X3BmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDsKLQotCWN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZCgmYW1wO3BmbGFncywgbmV3X3BmbGFncyk7CiAJeGZzX3RyYW5zX3NldF9jb250ZXh0KGFyZ3MtJmd0O2N1ci0mZ3Q7YmNfdHApOwogCiAJYXJncy0mZ3Q7cmVzdWx0ID0gX194ZnNfYnRyZWVfc3BsaXQoYXJncy0mZ3Q7Y3VyLCBhcmdzLSZndDtsZXZlbCwgYXJncy0mZ3Q7cHRycCwKIAkJCQkJIGFyZ3MtJmd0O2tleSwgYXJncy0mZ3Q7Y3VycCwgYXJncy0mZ3Q7c3RhdCk7CiAKIAl4ZnNfdHJhbnNfY2xlYXJfY29udGV4dChhcmdzLSZndDtjdXItJmd0O2JjX3RwKTsKLQljdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKCZhbXA7cGZsYWdzLCBuZXdfcGZsYWdzKTsKIAogCS8qCiAJICogRG8gbm90IGFjY2VzcyBhcmdzIGFmdGVyIGNvbXBsZXRlKCkgaGFzIHJ1biBoZXJlLiBXZSBkb24mIzM5O3Qgb3duIGFyZ3MKIAkgKiBhbmQgdGhlIG93bmVyIG1heSBydW4gYW5kIGZyZWUgYXJncyBiZWZvcmUgd2UgcmV0dXJuIGhlcmUuCiAJICovCiAJY29tcGxldGUoYXJncy0mZ3Q7ZG9uZSk7Ci0KIH0KIAogLyoKQEAgLTMwNzgsNyAmIzQzOzMwNjIsNyBAQCB4ZnNfYnRyZWVfc3BsaXQoCiAJYXJncy5jdXJwID0gY3VycDsKIAlhcmdzLnN0YXQgPSBzdGF0OwogCWFyZ3MuZG9uZSA9ICZhbXA7ZG9uZTsKLQlhcmdzLmtzd2FwZCA9IGN1cnJlbnRfaXNfa3N3YXBkKCk7CiYjNDM7CiAJSU5JVF9XT1JLX09OU1RBQ0soJmFtcDthcmdzLndvcmssIHhmc19idHJlZV9zcGxpdF93b3JrZXIpOwogCXF1ZXVlX3dvcmsoeGZzX2FsbG9jX3dxLCAmYW1wO2FyZ3Mud29yayk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2RvbmUpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oIGIvZnMveGZzL3hmc19wbGF0Zm9ybS5oCmluZGV4IDVkNTQyZTk1ZmU0NDQuLmE0OWZhMTU5ODk0ZGUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcGxhdGZvcm0uaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX3BsYXRmb3JtLmgKQEAgLTExNSwxMCAmIzQzOzExNSw2IEBAIHR5cGVkZWYgX191MzIJCQl4ZnNfbmxpbmtfdDsKICNkZWZpbmUgeGZzX2Jsb2NrZ2Nfc2Vjcwl4ZnNfcGFyYW1zLmJsb2NrZ2NfdGltZXIudmFsCiAKICNkZWZpbmUgY3VycmVudF9jcHUoKQkJKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpCi0jZGVmaW5lIGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChzcCwgZikJCVwKLQkJKCooc3ApID0gY3VycmVudC0mZ3Q7ZmxhZ3MsIGN1cnJlbnQtJmd0O2ZsYWdzIHw9IChmKSkKLSNkZWZpbmUgY3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZChzcCwgZikJXAotCQkoY3VycmVudC0mZ3Q7ZmxhZ3MgPSAoKGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IH4oZikpIHwgKCooc3ApICZhbXA7IChmKSkpKQogCiAjZGVmaW5lIE5CQlkJCTgJCS8qIG51bWJlciBvZiBiaXRzIHBlciBieXRlICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKaW5kZXggNjZhMmY3MGU5ZTAxOS4uNjkxYzA5ZjBhNjk3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKQEAgLTgxLDEwICYjNDM7ODEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcGFjdF9nYXAodW5zaWduZWQgaW50IG9yZGVyKQogCXJldHVybiBtaW4oMlVMICZsdDsmbHQ7IG9yZGVyLCBDT01QQUNUX0NMVVNURVJfTUFYKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfS0NPTVBBQ1REOwotfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT04KIApAQCAtMTAzLDcgJiM0Mzs5OSw3IEBAIGV4dGVybiB2b2lkIGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAogYm9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLAogCQkJCQlpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTsKLQomIzQzO2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCk7CiBleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3J1bihpbnQgbmlkKTsKIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfc3RvcChpbnQgbmlkKTsKIGV4dGVybiB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTsKQEAgLTEyMCw2ICYjNDM7MTE2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGtjb21wYWN0ZF9ydW4oaW50IG5pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA4YjNkNDdhMzI1Y2NhLi5lYjEyZmY0Y2VhNmMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xODA4LDggJiM0MzsxODA4LDggQEAgZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7CiAjZGVmaW5lIFBGX1VTRURfTUFUSAkJMHgwMDAwMjAwMAkvKiBJZiB1bnNldCB0aGUgZnB1IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAqLwogI2RlZmluZSBQRl9VU0VSX1dPUktFUgkJMHgwMDAwNDAwMAkvKiBLZXJuZWwgdGhyZWFkIGNsb25lZCBmcm9tIHVzZXJzcGFjZSB0aHJlYWQgKi8KICNkZWZpbmUgUEZfTk9GUkVFWkUJCTB4MDAwMDgwMDAJLyogVGhpcyB0aHJlYWQgc2hvdWxkIG5vdCBiZSBmcm96ZW4gKi8KLSNkZWZpbmUgUEZfS0NPTVBBQ1RECQkweDAwMDEwMDAwCS8qIEkgYW0ga2NvbXBhY3RkICovCi0jZGVmaW5lIFBGX0tTV0FQRAkJMHgwMDAyMDAwMAkvKiBJIGFtIGtzd2FwZCAqLwomIzQzOyNkZWZpbmUgUEZfX0hPTEVfXzAwMDEwMDAwCTB4MDAwMTAwMDAKJiM0MzsjZGVmaW5lIFBGX19IT0xFX18wMDAyMDAwMAkweDAwMDIwMDAwCiAjZGVmaW5lIFBGX01FTUFMTE9DX05PRlMJMHgwMDA0MDAwMAkvKiBBbGwgYWxsb2NhdGlvbnMgaW5oZXJpdCBHRlBfTk9GUy4gU2VlIG1lbWFsbG9jX25mc19zYXZlKCkgKi8KICNkZWZpbmUgUEZfTUVNQUxMT0NfTk9JTwkweDAwMDgwMDAwCS8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0lPLiBTZWUgbWVtYWxsb2Nfbm9pb19zYXZlKCkgKi8KICNkZWZpbmUgUEZfTE9DQUxfVEhST1RUTEUJMHgwMDEwMDAwMAkvKiBUaHJvdHRsZSB3cml0ZXMgb25seSBhZ2FpbnN0IHRoZSBiZGkgSSB3cml0ZSB0bywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggYTcyZWNmMTJjMDBkYi4uZmMyOTBlMjllNGE5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTI1LDEyICYjNDM7MjUsNiBAQAogI2RlZmluZSBTV0FQX0ZMQUdTX1ZBTElECShTV0FQX0ZMQUdfUFJJT19NQVNLIHwgU1dBUF9GTEFHX1BSRUZFUiB8IFwKIAkJCQkgU1dBUF9GTEFHX0RJU0NBUkQgfCBTV0FQX0ZMQUdfRElTQ0FSRF9PTkNFIHwgXAogCQkJCSBTV0FQX0ZMQUdfRElTQ0FSRF9QQUdFUykKLQotc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfS1NXQVBEOwotfQotCiAvKgogICogTUFYX1NXQVBGSUxFUyBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2FwdHlwZXM6IHRoaW5ncyB3aGljaCBjYW4KICAqIGJlIHN3YXBwZWQgdG8uICBUaGUgc3dhcCB0eXBlIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhhdCBzd2FwIHR5cGUgYXJlCkBAIC0zMzksNiAmIzQzOzMzMyw3IEBAIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpOwogCiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKTsKIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKTsKJiM0Mztib29sIGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NXQVAKIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywgdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLApkaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jCmluZGV4IGEwNDk0MTU1MTJjNjcuLjQ5OTRlMjAwYmJlY2QgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmMKQEAgLTMxOTcsNyAmIzQzOzMxOTcsNiBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKQogCWxvbmcgZGVmYXVsdF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhIUEFHRV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpOwogCWxvbmcgdGltZW91dCA9IGRlZmF1bHRfdGltZW91dDsKIAotCWN1cnJlbnQtJmd0O2ZsYWdzIHw9IFBGX0tDT01QQUNURDsKIAlzZXRfZnJlZXphYmxlKCk7CiAKIAlwZ2RhdC0mZ3Q7a2NvbXBhY3RkX21heF9vcmRlciA9IDA7CkBAIC0zMjU0LDExICYjNDM7MzI1MywxNSBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKQogCQkJcGdkYXQtJmd0O3Byb2FjdGl2ZV9jb21wYWN0X3RyaWdnZXIgPSBmYWxzZTsKIAl9CiAKLQljdXJyZW50LSZndDtmbGFncyAmYW1wOz0gflBGX0tDT01QQUNURDsKLQogCXJldHVybiAwOwogfQogCiYjNDM7Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrY29tcGFjdGQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaXNfa2NvbXBhY3RkKTsKJiM0MzsKIC8qCiAgKiBUaGlzIGtjb21wYWN0ZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuCiAgKiBPbiBub2RlLWhvdC1hZGQsIGtjb21wYWN0ZCB3aWxsIG1vdmVkIHRvIHByb3BlciBjcHVzIGlmIGNwdXMgYXJlIGhvdC1hZGRlZC4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYmYyNzg2YzcyNDdkNC4uOWY5OTYzM2Q3ZGMxZSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc1MzksNyAmIzQzOzc1MzksNyBAQCBzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKQogCSAqIHVzIGZyb20gcmVjdXJzaXZlbHkgdHJ5aW5nIHRvIGZyZWUgbW9yZSBtZW1vcnkgYXMgd2UmIzM5O3JlCiAJICogdHJ5aW5nIHRvIGZyZWUgdGhlIGZpcnN0IHBpZWNlIG9mIG1lbW9yeSBpbiB0aGUgZmlyc3QgcGxhY2UpLgogCSAqLwotCXRzay0mZ3Q7ZmxhZ3MgfD0gUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQ7CiYjNDM7CXRzay0mZ3Q7ZmxhZ3MgfD0gUEZfTUVNQUxMT0M7CiAJc2V0X2ZyZWV6YWJsZSgpOwogCiAJV1JJVEVfT05DRShwZ2RhdC0mZ3Q7a3N3YXBkX29yZGVyLCAwKTsKQEAgLTc1ODksMTEgJiM0Mzs3NTg5LDE3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApCiAJCQlnb3RvIGtzd2FwZF90cnlfc2xlZXA7CiAJfQogCi0JdHNrLSZndDtmbGFncyAmYW1wOz0gfihQRl9NRU1BTExPQyB8IFBGX0tTV0FQRCk7CiYjNDM7CXRzay0mZ3Q7ZmxhZ3MgJmFtcDs9IH5QRl9NRU1BTExPQzsKIAogCXJldHVybiAwOwogfQogCiYjNDM7Ym9vbCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrc3dhcGQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaXNfa3N3YXBkKTsKJiM0MzsKIC8qCiAgKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmCiAgKiBrc3dhcGQgc2hvdWxkIHJlY2xhaW0gKGRpcmVjdCByZWNsYWltIGlzIGRlZmVycmVkKSwgd2FrZSBpdCB1cCBmb3IgdGhlIHpvbmUmIzM5O3MKZGlmZiAtLWdpdCBhL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmggYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oCmluZGV4IDc2ZjVlMDI1ZTEwNzYuLjgwN2VmODgxY2UyZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaApAQCAtMzEsOCAmIzQzOzMxLDYgQEAKICNkZWZpbmUgUEZfSURMRQkJCQkweDAwMDAwMDAyCS8qIEkgYW0gYW4gSURMRSB0aHJlYWQgKi8KICNkZWZpbmUgUEZfSU9fV09SS0VSCQkJMHgwMDAwMDAxMAkvKiBUYXNrIGlzIGFuIElPIHdvcmtlciAqLwogI2RlZmluZSBQRl9XUV9XT1JLRVIJCQkweDAwMDAwMDIwCS8qIEkmIzM5O20gYSB3b3JrcXVldWUgd29ya2VyICovCi0jZGVmaW5lIFBGX0tDT01QQUNURAkJCTB4MDAwMTAwMDAgICAgICAvKiBJIGFtIGtjb21wYWN0ZCAqLwotI2RlZmluZSBQRl9LU1dBUEQJCQkweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi8KICNkZWZpbmUgUEZfS1RIUkVBRAkJCTB4MDAyMDAwMDAJLyogSSBhbSBhIGtlcm5lbCB0aHJlYWQgKi8KICNkZWZpbmUgUEZfRVhJVElORwkJCTB4MDAwMDAwMDQKICNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDCQkJMQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBSZWZhY3RvcmluZyBUYXNrIEZsYWdzIGFuZCBUaHJlYWQgSWRlbnRpZmljYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBjbGVhbmluZyB1cCBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGFuZCBtYW5hZ2VzIHRhc2tzLCBzcGVjaWZpY2FsbHkgYGtjb21wYWN0ZGAgYW5kIGBrc3dhcGRgLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBmbGFncy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbW92aW5nIGF3YXkgZnJvbSBkaXJlY3RseSBjaGVja2luZyB0YXNrIGZsYWdzIChgUEZfTUVNQUxMT0NgLCBgUEZfS1NXQVBEYCwgYFBGX0tDT01QQUNURGApIGluIGZhdm9yIG9mIGEgbW9yZSB0YXJnZXRlZCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiB0YXNrIGlzIHRoZSBrY29tcGFjdGQgb3Iga3N3YXBkIHRocmVhZC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSByZWZhY3RvcmluZyB0byBtZS4KClNwZWNpZmljYWxseToKCiogICAqKmBmcy9pb21hcC9idWZmZXJlZC1pby5jYDoqKiBUaGUgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBpcyBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gIFRoZSBvcmlnaW5hbCBjaGVjayBhZ2FpbnN0IGAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpYCBpcyBiZWluZyBzaW1wbGlmaWVkIHRvIGp1c3QgYFBGX01FTUFMTE9DYC4gVGhpcyBzdWdnZXN0cyBhbiBpbXBsaWNpdCBkZXBlbmRlbmN5IG9uIGBQRl9LU1dBUERgIGlzIGJlaW5nIHJlbW92ZWQsIHNvIHdlIHdpbGwgbmVlZCB0byBjaGVjayB0aGUgcmF0aW9uYWxlIGFuZCB0aGUgY29udGV4dC4KKiAgICoqYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgIGFuZCBgZnMveGZzL3hmc19wbGF0Zm9ybS5oYDoqKiAgWEZTIHNlZW1zIHRvIGJlIGEga2V5IGJlbmVmaWNpYXJ5IG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyByZW1vdmluZyBtZW50aW9ucyBvZiBga3N3YXBkYCBmcm9tIGl0cyBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3Jvcywgd2hpY2ggYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZ29hbCBvZiBkZWNvdXBsaW5nIHRoZXNlIHByb2Nlc3NlcyBmcm9tIGRpcmVjdGx5IHVzaW5nIHRoZSBmbGFncy4KKiAgICoqYGluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oYCwgYGluY2x1ZGUvbGludXgvc3dhcC5oYCwgYGluY2x1ZGUvbGludXgvc2NoZWQuaGA6KiogIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gdGhlc2UgaGVhZGVycy4gIFdlJiMzOTtyZSBzZWVpbmcgdGhlIHJlbW92YWwgb2YgaW5saW5lIGZ1bmN0aW9ucyBsaWtlIGBjdXJyZW50X2lzX2tjb21wYWN0ZCgpYCBhbmQgYGN1cnJlbnRfaXNfa3N3YXBkKClgLCB3aGljaCBwcmV2aW91c2x5IHJlbGllZCBvbiBkaXJlY3QgZmxhZyBjaGVja2luZy4gIFRoZXNlIGFyZSBiZWluZyByZXBsYWNlZCB3aXRoIGRlY2xhcmF0aW9ucyBvZiBtb3JlIGdlbmVyaWMgYGJvb2xgIGZ1bmN0aW9ucy4gIEltcG9ydGFudGx5LCB0aGUgdW5kZXJseWluZyBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgYml0IGZsYWdzIGFyZSBiZWluZyByZW1hcHBlZCB0byAmIzM0O2hvbGUmIzM0OyBmbGFncywgd2hpY2ggaW1wbGllcyB0aGVzZSBmbGFncyBtYXkgYmUgZnJlZWQgdXAgZm9yIG90aGVyIHVzZXMuCiogICAqKmBtbS9jb21wYWN0aW9uLmNgIGFuZCBgbW0vdm1zY2FuLmNgOioqIFRoaXMgaXMgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIHNoaWZ0IG9jY3Vycy4gIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIGZsYWdzLCB0aGUgY29kZSBub3cgdXRpbGl6ZXMgYGt0aHJlYWRfZnVuYyhjdXJyZW50KWAgdG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gdGhyZWFkIGlzIHRoZSBrY29tcGFjdGQgb3Iga3N3YXBkIGtlcm5lbCB0aHJlYWQuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBjaGVjayBob3cgYGt0aHJlYWRfZnVuY2Agd29ya3MuIFRoYXQmIzM5O3MgYSBuZXcgYWJzdHJhY3Rpb24gaGVyZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdG8gYmUgc3VyZSB0aGlzIGlzIGNvcnJlY3QuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3IgcmVnYXJkaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb21wYWN0aW9uLCBhbmQgc3dhcHBpbmcsIG5vdyB0aGF0IGZsYWdzIGFyZSBub3QgZGlyZWN0bHkgZW1wbG95ZWQuCiogICAqKmB0b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oYDoqKiAgVGhlIEJQRiB0b29scyBhcmUgYWxzbyBiZWluZyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBmbGFnIGRlZmluaXRpb25zIGFuZCBob3BlZnVsbHkgdGhlIHRocmVhZCBpZGVudGlmaWNhdGlvbiBjaGFuZ2UuCgpTbyB0aGUgbWFpbiB0aHJ1c3QgYXBwZWFycyB0byBiZToKCjEuICAqKlJlZmFjdG9yaW5nIFRocmVhZCBJZGVudGlmaWNhdGlvbjoqKiAgTW92aW5nIGF3YXkgZnJvbSBkaXJlY3QgZmxhZyBjaGVja3MgKGBQRl9LQ09NUEFDVERgLCBgUEZfS1NXQVBEYCkgdG93YXJkcyBhIGRlZGljYXRlZCBmdW5jdGlvbiAoYGt0aHJlYWRfZnVuYyhjdXJyZW50KWApIHRvIGlkZW50aWZ5IGtjb21wYWN0ZCBhbmQga3N3YXBkIHRocmVhZHMuCjIuICAqKkZsYWcgQ29uc29saWRhdGlvbi9SZS11c2UqKjogQnkgY2hhbmdpbmcgdGhlIGV4aXN0aW5nIGZsYWdzIHRvIGBQRl9fSE9MRV9fMDAwMTAwMDBgIGFuZCBgUEZfX0hPTEVfXzAwMDIwMDAwYCB0aGUgbWVtb3J5IGFyZWEgaXMgZnJlZWQgdXAgZm9yIHJlLXVzZS4KMy4gICoqRW5jYXBzdWxhdGlvbjoqKiBJbXByb3ZlZCBlbmNhcHN1bGF0aW9uIGJ5IGNlbnRyYWxpemluZyB0aGUgdGhyZWFkIGlkZW50aXR5IGxvZ2ljLCBpbXByb3ZpbmcgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGBrdGhyZWFkX2Z1bmModHNrKWAgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBncmVwIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgdGhyb3VnaG91dCB0aGUga2VybmVsIHRvIHZlcmlmeSB0aGlzIGFic3RyYWN0aW9uIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIEkgbXVzdCB1bmRlcnN0YW5kIGlmIHRoaXMgbmV3IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlIGFuZCBlZmZpY2llbnQsIGFuZCBpZiBpdCBhZmZlY3RzIGhvdyB0aGVzZSBwcm9jZXNzZXMgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBXZSB3aWxsIG5lZWQgdG8gY2hlY2sgd2hhdCBpbXBsaWNhdGlvbnMgdGhpcyBoYXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3RocmVhZF9mdW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYz01OTY9c3RhdGljIHN0cnVjdCBzaW1wbGVfd29ya19xdWV1ZSAqZ2V0X2N1cnJlbnRfdGhyZWFkX3dvcmtfcXVldWUodm9pZClcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9mdW5uZWwtd29ya3F1ZXVlLmMtNjA2LVxuZHJpdmVycy9tZC9kbS12ZG8vZnVubmVsLXdvcmtxdWV1ZS5jOjYwNzpcdGlmIChrdGhyZWFkX2Z1bmMoY3VycmVudCkgIT0gd29ya19xdWV1ZV9ydW5uZXIpXG5kcml2ZXJzL21kL2RtLXZkby9mdW5uZWwtd29ya3F1ZXVlLmMtNjA4LVx0XHQvKiBOb3QgYSBWRE8gd29yayBxdWV1ZSB0aHJlYWQuICovXG4tLVxuZnMvbmZzZC9uZnNzdmMuYz01OTU9c3RydWN0IHN2Y19ycXN0ICpuZnNkX2N1cnJlbnRfcnFzdCh2b2lkKVxuZnMvbmZzZC9uZnNzdmMuYy01OTYte1xuZnMvbmZzZC9uZnNzdmMuYzo1OTc6XHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpID09IG5mc2QpXG5mcy9uZnNkL25mc3N2Yy5jLTU5OC1cdFx0cmV0dXJuIGt0aHJlYWRfZGF0YShjdXJyZW50KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaD0xMTI9Ym9vbCBrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcChib29sICp3YXNfZnJvemVuKTtcbmluY2x1ZGUvbGludXgva3RocmVhZC5oOjExMzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcbmluY2x1ZGUvbGludXgva3RocmVhZC5oLTExNC12b2lkICprdGhyZWFkX2RhdGEoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcbi0tXG5rZXJuZWwva3RocmVhZC5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcCk7XG4tLVxua2VybmVsL2t0aHJlYWQuYy0yMTEtLyoqXG5rZXJuZWwva3RocmVhZC5jOjIxMjogKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXG5rZXJuZWwva3RocmVhZC5jLTIxMy0gKiBAdGFzazoga3RocmVhZCB0YXNrIGluIHF1ZXN0aW9uXG4tLVxua2VybmVsL2t0aHJlYWQuYy0yMTYtICovXG5rZXJuZWwva3RocmVhZC5jOjIxNzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxua2VybmVsL2t0aHJlYWQuYy0yMTgte1xuLS1cbmtlcm5lbC9rdGhyZWFkLmMtMjIzLX1cbmtlcm5lbC9rdGhyZWFkLmM6MjI0OkVYUE9SVF9TWU1CT0xfR1BMKGt0aHJlYWRfZnVuYyk7XG5rZXJuZWwva3RocmVhZC5jLTIyNS1cbi0tXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBuYmNvbl9rdGhyZWFkX3dha2Uoc3RydWN0IGNvbnNvbGUgKmNvbilcbi0tXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmgtMTI4LVx0ICpcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaDoxMjk6XHQgKiBUaGlzIHBhaXJzIHdpdGggbmJjb25fa3RocmVhZF9mdW5jOkEuXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmgtMTMwLVx0ICovXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jPTExODA9c3RhdGljIGJvb2wgbmJjb25fa3RocmVhZF9zaG91bGRfd2FrZXVwKHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBuYmNvbl9jb250ZXh0ICpjdHh0KVxuLS1cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjE0LS8qKlxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEyMTU6ICogbmJjb25fa3RocmVhZF9mdW5jIC0gVGhlIHByaW50ZXIgdGhyZWFkIGZ1bmN0aW9uXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNi0gKiBAX19jb25zb2xlOlx0Q29uc29sZSB0byBvcGVyYXRlIG9uXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyMTktICovXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTIyMDpzdGF0aWMgaW50IG5iY29uX2t0aHJlYWRfZnVuYyh2b2lkICpfX2NvbnNvbGUpXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIyMS17XG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyNDQtXHRcdFx0ICAgbmJjb25fa3RocmVhZF9zaG91bGRfd2FrZXVwKGNvbiwgY3R4dCksXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTI0NTpcdFx0XHQgICBUQVNLX0lOVEVSUlVQVElCTEUpOyAvKiBMTU0obmJjb25fa3RocmVhZF9mdW5jOkEpICovXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTI0Ni1cbi0tXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTI5Mz1zdGF0aWMgaW5saW5lIGJvb2wgcmN1d2FpdF9oYXNfc2xlZXBlcihzdHJ1Y3QgcmN1d2FpdCAqdylcbi0tXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTMwMy1cdCAqXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTMwNDpcdCAqIFRoaXMgcGFpcnMgd2l0aCBuYmNvbl9rdGhyZWFkX2Z1bmM6QS5cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzA1LVx0ICovXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jPTEzNzU9Ym9vbCBuYmNvbl9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgY29uc29sZSAqY29uKVxuLS1cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzgzLVxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEzODQ6XHRrdCA9IGt0aHJlYWRfcnVuKG5iY29uX2t0aHJlYWRfZnVuYywgY29uLCBcJiMzNDtwci8lcyVkXCYjMzQ7LCBjb24tXHUwMDNlbmFtZSwgY29uLVx1MDAzZWluZGV4KTtcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzg1LVx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcbi0tXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTM2NTY9c3RhdGljIGJvb2wgbGVnYWN5X2t0aHJlYWRfc2hvdWxkX3dha2V1cCh2b2lkKVxuLS1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzcwMy1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzcwNDpzdGF0aWMgaW50IGxlZ2FjeV9rdGhyZWFkX2Z1bmModm9pZCAqdW51c2VkKVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzA1LXtcbi0tXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTM3Mjg9c3RhdGljIGJvb2wgbGVnYWN5X2t0aHJlYWRfY3JlYXRlKHZvaWQpXG4tLVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzMzLVxua2VybmVsL3ByaW50ay9wcmludGsuYzozNzM0Olx0a3QgPSBrdGhyZWFkX3J1bihsZWdhY3lfa3RocmVhZF9mdW5jLCBOVUxMLCBcJiMzNDtwci9sZWdhY3lcJiMzNDspO1xua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzM1LVx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MzI1OT1ib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG5tbS9jb21wYWN0aW9uLmMtMzI2MC17XG5tbS9jb21wYWN0aW9uLmM6MzI2MTpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xubW0vY29tcGFjdGlvbi5jLTMyNjItfVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTc0PWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtMzE3NS17XG5tbS9raHVnZXBhZ2VkLmM6MzE3NjpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2h1Z2VwYWdlZDtcbm1tL2todWdlcGFnZWQuYy0zMTc3LX1cbi0tXG5tbS92bXNjYW4uYz03NTk3PWJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcbm1tL3Ztc2Nhbi5jLTc1OTgte1xubW0vdm1zY2FuLmM6NzU5OTpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xubW0vdm1zY2FuLmMtNzYwMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBrdGhyZWFkX2Z1bmNgIGluIGBrZXJuZWwva3RocmVhZC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCBga3RocmVhZF9mdW5jYCB3aXRoaW4gYGtlcm5lbC9rdGhyZWFkLmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2Uga2VybmVsIHRocmVhZHMgYXJlIGFjdHVhbGx5ICpkb2luZyogdGhlaXIgd29yay4gSSBrbm93IHRoZSBjb3JlIGNvbmNlcHQ6IHRoZXNlIGFyZSBsaWdodHdlaWdodCBwcm9jZXNzZXMgd2l0aGluIHRoZSBrZXJuZWwsIGJ1dCB0aGUgc3BlY2lmaWNzIGFyZSB3aGVyZSB0aGUgZGV2aWwgaXMuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGV4ZWN1dGlvbiBsb29wLCBwb3RlbnRpYWxseSBtYW5hZ2luZyB0aGUgdGhyZWFkJiMzOTtzIHN0YXRlLCBhbmQgcHJvYmFibHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc2NoZWR1bGVyLiBJJiMzOTttIGFsc28gYmV0dGluZyB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGBrdGhyZWFkX2NyZWF0ZWAgZnVuY3Rpb24sIGxpa2VseSBzZXR0aW5nIHVwIHRoZSB0aHJlYWQmIzM5O3MgaW5pdGlhbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXPigJRtdXRleGVzLCBzZW1hcGhvcmVzLCBtYXliZSBldmVuIHNwaW5sb2Nrc+KAlHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRocmVhZHMgY29vcGVyYXRlIChvciBkb24mIzM5O3QpIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCB1c2VyLXNwYWNlIHByb2Nlc3Nlcy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGxvZ2ljIGZvciBoYW5kbGluZyBzaWduYWxzIG9yIG90aGVyIGZvcm1zIG9mIGludGVyLXRocmVhZCBjb21tdW5pY2F0aW9uLCB0b28uIEZpbmFsbHksIEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIHNvbGlkIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5OyBhIHJvYnVzdCBrZXJuZWwgbmVlZHMgdG8gZ3JhY2VmdWxseSBtYW5hZ2UgdW5leHBlY3RlZCBzaXR1YXRpb25zIHdpdGhpbiBpdHMgdGhyZWFkcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgYWNjdXJhdGUgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBhcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2t0aHJlYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjExOlx0LyoqXG4gMjEyOlx0ICoga3RocmVhZF9mdW5jIC0gcmV0dXJuIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgb24ga3RocmVhZCBjcmVhdGlvblxuIDIxMzpcdCAqIEB0YXNrOiBrdGhyZWFkIHRhc2sgaW4gcXVlc3Rpb25cbiAyMTQ6XHQgKlxuIDIxNTpcdCAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFzayBpcyBub3QgYSBrdGhyZWFkLlxuIDIxNjpcdCAqL1xuIDIxNzpcdHZvaWQgKmt0aHJlYWRfZnVuYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gMjE4Olx0e1xuIDIxOTpcdFx0c3RydWN0IGt0aHJlYWQgKmt0aHJlYWQgPSB0c2tfaXNfa3RocmVhZCh0YXNrKTtcbiAyMjA6XHRcdGlmIChrdGhyZWFkKVxuIDIyMTpcdFx0XHRyZXR1cm4ga3RocmVhZC1cdTAwM2V0aHJlYWRmbjtcbiAyMjI6XHRcdHJldHVybiBOVUxMO1xuIDIyMzpcdH1cbiAyMjQ6XHRFWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2Z1bmMpO1xuIDIyNTpcdFxuIDIyNjpcdC8qKlxuIDIyNzpcdCAqIGt0aHJlYWRfZGF0YSAtIHJldHVybiBkYXRhIHZhbHVlIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXG4gMjI4Olx0ICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxuIDIyOTpcdCAqXG4gMjMwOlx0ICogUmV0dXJuIHRoZSBkYXRhIHZhbHVlIHNwZWNpZmllZCB3aGVuIGt0aHJlYWQgQHRhc2sgd2FzIGNyZWF0ZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDMKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhcnRpY3VsYXJseSB3aGVyZSBrZXJuZWwgZGF0YSBpbnRlcmFjdHMgd2l0aCB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKRmlyc3QsIEkgZXhhbWluZWQgZm9yIGFueSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgcGFkZGluZyBvciBmaWVsZHMgbWlnaHQgbm90IGJlIHByb3Blcmx5IGluaXRpYWxpemVkLiAqKkdvb2QgbmV3cyoqLCBub3RoaW5nIGp1bXBlZCBvdXQuIEkgYWxzbyBjaGVja2VkIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFnYWluLCAqKmNsZWFyKiouIEkgY2FyZWZ1bGx5IGxvb2tlZCBhdCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aG9zZSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIHRoZSBga3N3YXBkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3NgIHBpcXVlZCBteSBpbnRlcmVzdC4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIGl0JiMzOTtzIHJlbW92aW5nIGEgc3RhY2stYWxsb2NhdGVkIGZpZWxkLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcgYXMgaXQgcmVkdWNlcyBtZW1vcnkgZm9vdHByaW50IGFuZCBtaXRpZ2F0ZXMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IHJpc2tzLCBzbyBubyBwcm9ibGVtcyB0aGVyZS4gRmluYWxseSwgSSBkb3VibGUgY2hlY2tlZCBmb3IgYW55IGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcyBmcm9tIGV4aXN0aW5nIGJ1ZmZlcnMsIGJ1dCBJIGZvdW5kIG5vdGhpbmcgb2YgY29uY2Vybi4KCk5leHQsIEkgbG9va2VkIGF0IHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgaW9tYXBfd3JpdGVwYWdlc2AgdG8gY2hhbmdlIGEgV0FSTl9PTiBjaGVjayBmb3IgcmVjbGFpbSBjb250ZXh0LCBjaGFuZ2luZyBob3cgdGhlIHJlY2xhaW0gY29udGV4dCBpcyBldmFsdWF0ZWQuIFRoaXMgc2VlbXMgdG8gYmUgYSBiZWhhdmlvcmFsIGNoYW5nZS4gVGhlIGB4ZnNfYnRyZWUuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gcmVtb3ZlIGtzd2FwZCBmbGFnIGluaGVyaXRhbmNlLiBTZXZlcmFsIGZpbGVzIGxpa2UgYGNvbXBhY3Rpb24uaGAsIGBzd2FwLmhgLCBgc2NoZWQuaGAsIGBjb21wYWN0aW9uLmNgLCBhbmQgYHZtc2Nhbi5jYCBhcmUgcmVtb3ZpbmcgYFBGX0tDT01QQUNURGAgYW5kIGBQRl9LU1dBUERgIHRhc2sgZmxhZ3MsIHJlcGxhY2luZyBgY3VycmVudF9pc19rY29tcGFjdGQoKWAgYW5kIGBjdXJyZW50X2lzX2tzd2FwZCgpYCB3aXRoIGEga3RocmVhZCBmdW5jdGlvbiBjaGVjayAoYGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrY29tcGFjdGQgLyBrc3dhcGRgKS4gVGhpcyBpcyBhIHJlZmFjdG9yaW5nIGFyb3VuZCB0YXNrIGlkZW50aWZpY2F0aW9uLgoKTXkgY2VudHJhbCBxdWVzdGlvbiBpcyBhbHdheXMgJiMzNDtBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcz8mIzM0OyBBbmQgdGhlIGFuc3dlciwgYmFzZWQgb24gdGhpcyByZXZpZXcsIGlzIGEgZGVmaW5pdGUgKipubyoqLiBUaGVzZSBjaGFuZ2VzIGFwcGVhciB0byBiZSByZWZhY3RvcmluZyB0aGUgcHJvY2VzcyBmbGFncyBhbmQgdXNlIG9mIGt0aHJlYWQgZnVuY3Rpb25zLiBUaGlzIGlzIGEgZ29vZCBzaWduOyBJIHNlZSBubyByaXNrLgoKUmVnYXJkaW5nIEtNU0FOIHZlcnN1cyBLQVNBTiwgdGhpcyBwYXRjaCBpcyB1bmxpa2VseSB0byBiZSBmbGFnZ2VkLiBLQVNBTiBhbmQgdGhlIG90aGVyIGRldGVjdG9ycyBhcmUgZ3JlYXQgZm9yIGZ1bmN0aW9uYWwgdmVyaWZpY2F0aW9uIGFuZCBtZW1vcnkgY29ycnVwdGlvbi4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgZ2VhcmVkIHRvd2FyZHMgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBwb3RlbnRpYWwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFNpbmNlIEkmIzM5O3ZlIGZvdW5kIG5vIGV2aWRlbmNlIG9mIHRob3NlLCB0aGlzIHBhdGNoIHNob3VsZG4mIzM5O3QgbmVlZCBhIEtNU0FOIGZsYWcuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjaGVja2xpc3Qgb25lIG1vcmUgdGltZTogRG8gYW55IHN0cnVjdHMgaGF2ZSB1bmluaXRpYWxpemVkIHBhZGRpbmc/IE5vLiBJcyBhbnl0aGluZyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gQXJlIHRoZXJlIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBjaGFuZ2VzIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgcmVnaW9ucz8gTm8uCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIGNoYW5nZXMgYXJlIHdlbGwtZGVmaW5lZC4gSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBJJiMzOTttIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgaG93IHRoZSBrZXJuZWwgaWRlbnRpZmllcyBga3N3YXBkYCBhbmQgYGtjb21wYWN0ZGAgdGhyZWFkcy4gSXQgZWxpbWluYXRlcyB0aGUgYFBGX0tTV0FQRGAgYW5kIGBQRl9LQ09NUEFDVERgIHByb2Nlc3MgZmxhZ3MgaW4gZmF2b3Igb2YgY2hlY2tpbmcgdGhlIGt0aHJlYWQgY3JlYXRpb24gZnVuY3Rpb24gcG9pbnRlciAoYGt0aHJlYWRfZnVuYyhjdXJyZW50KWApLCBzaW1wbGlmaWVzIHdhcm5pbmcgY2hlY2tzIGluIGBpb21hcF93cml0ZXBhZ2VzYCwgYW5kIHJlbW92ZXMgdW51c2VkIGZsYWcgaW5oZXJpdGFuY2UgaW4gWEZTIGJ0cmVlIHNwbGl0IHdvcmtxdWV1ZSBpdGVtcy5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGRhdGEgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUxOjMxLjM2MTc0Njk3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzkxNzEyMzI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfd3JpdGVwYWdlc1wiLFxuICAgIFwiY3VycmVudF9pc19rc3dhcGRcIixcbiAgICBcImN1cnJlbnRfaXNfa2NvbXBhY3RkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIGhvdyB0aGUga2VybmVsIGlkZW50aWZpZXMgYGtzd2FwZGAgYW5kIGBrY29tcGFjdGRgIHRocmVhZHMuIEl0IGVsaW1pbmF0ZXMgdGhlIGBQRl9LU1dBUERgIGFuZCBgUEZfS0NPTVBBQ1REYCBwcm9jZXNzIGZsYWdzIGluIGZhdm9yIG9mIGNoZWNraW5nIHRoZSBrdGhyZWFkIGNyZWF0aW9uIGZ1bmN0aW9uIHBvaW50ZXIgKGBrdGhyZWFkX2Z1bmMoY3VycmVudClgKSwgc2ltcGxpZmllcyB3YXJuaW5nIGNoZWNrcyBpbiBgaW9tYXBfd3JpdGVwYWdlc2AsIGFuZCByZW1vdmVzIHVudXNlZCBmbGFnIGluaGVyaXRhbmNlIGluIFhGUyBidHJlZSBzcGxpdCB3b3JrcXVldWUgaXRlbXMuXFxuXFxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGRhdGEgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUxOjMxLjM2MTc1Mjc2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NjQ3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjllZDk5ZDJkZGFmMTljY2IyMDA4YWJhNDZkOWY4NWE4MDUzOTBmNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjUxOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuaW5kZXggMGE1ZWJmZGE5MGYxMi4uNjMwNmNhNzQ3ZjNiYSAxMDA2NDRcXG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xcbkBAIC0yMDc3LDggKzIwNzcsNyBAQCBpb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpXFxuIFxcdCAqIFdyaXRlYmFjayBmcm9tIHJlY2xhaW0gY29udGV4dCBzaG91bGQgbmV2ZXIgaGFwcGVuIGV4Y2VwdCBpbiB0aGUgY2FzZVxcbiBcXHQgKiBvZiBhIFZNIHJlZ3Jlc3Npb24gc28gd2FybiBhYm91dCBpdCBhbmQgcmVmdXNlIHRvIHdyaXRlIHRoZSBkYXRhLlxcbiBcXHQgKi9cXG4tXFx0aWYgKFdBUk5fT05fT05DRSgoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpKSA9PVxcbi1cXHRcXHRcXHRQRl9NRU1BTExPQykpXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHR3aGlsZSAoKGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd3BjLVxcdTAwM2V3YmMsIGZvbGlvLCBcXHUwMDI2ZXJyb3IpKSkge1xcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jIGIvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xcbmluZGV4IDYwZWY3ZjA4YjFkMzAuLjY3MzhkOWQxNTExYmMgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNcXG5AQCAtMjk5NCw3ICsyOTk0LDYgQEAgc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzIHtcXG4gXFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHQqKmN1cnA7XFxuIFxcdGludFxcdFxcdFxcdCpzdGF0O1xcdFxcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xcbiBcXHRpbnRcXHRcXHRcXHRyZXN1bHQ7XFxuLVxcdGJvb2xcXHRcXHRcXHRrc3dhcGQ7XFx0LyogYWxsb2NhdGlvbiBpbiBrc3dhcGQgY29udGV4dCAqL1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvblxcdCpkb25lO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHR3b3JrO1xcbiB9O1xcbkBAIC0zMDA4LDMzICszMDA3LDE4IEBAIHhmc19idHJlZV9zcGxpdF93b3JrZXIoXFxuIHtcXG4gXFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzXFx0KmFyZ3MgPSBjb250YWluZXJfb2Yod29yayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzLCB3b3JrKTtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHBmbGFncztcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG5ld19wZmxhZ3MgPSAwO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29udGV4dCBoZXJlLCBidXQgbWF5IGFsc28gYmUgZG9pbmcgd29ya1xcbi1cXHQgKiBpbiBrc3dhcGQgY29udGV4dCwgYW5kIGhlbmNlIHdlIG1heSBuZWVkIHRvIGluaGVyaXQgdGhhdCBzdGF0ZVxcbi1cXHQgKiB0ZW1wb3JhcmlseSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBibG9jayB3YWl0aW5nIGZvciBtZW1vcnkgcmVjbGFpbVxcbi1cXHQgKiBpbiBhbnkgd2F5Llxcbi1cXHQgKi9cXG4tXFx0aWYgKGFyZ3MtXFx1MDAzZWtzd2FwZClcXG4tXFx0XFx0bmV3X3BmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcXG4tXFxuLVxcdGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChcXHUwMDI2cGZsYWdzLCBuZXdfcGZsYWdzKTtcXG4gXFx0eGZzX3RyYW5zX3NldF9jb250ZXh0KGFyZ3MtXFx1MDAzZWN1ci1cXHUwMDNlYmNfdHApO1xcbiBcXG4gXFx0YXJncy1cXHUwMDNlcmVzdWx0ID0gX194ZnNfYnRyZWVfc3BsaXQoYXJncy1cXHUwMDNlY3VyLCBhcmdzLVxcdTAwM2VsZXZlbCwgYXJncy1cXHUwMDNlcHRycCxcXG4gXFx0XFx0XFx0XFx0XFx0IGFyZ3MtXFx1MDAzZWtleSwgYXJncy1cXHUwMDNlY3VycCwgYXJncy1cXHUwMDNlc3RhdCk7XFxuIFxcbiBcXHR4ZnNfdHJhbnNfY2xlYXJfY29udGV4dChhcmdzLVxcdTAwM2VjdXItXFx1MDAzZWJjX3RwKTtcXG4tXFx0Y3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZChcXHUwMDI2cGZsYWdzLCBuZXdfcGZsYWdzKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIERvIG5vdCBhY2Nlc3MgYXJncyBhZnRlciBjb21wbGV0ZSgpIGhhcyBydW4gaGVyZS4gV2UgZG9uJ3Qgb3duIGFyZ3NcXG4gXFx0ICogYW5kIHRoZSBvd25lciBtYXkgcnVuIGFuZCBmcmVlIGFyZ3MgYmVmb3JlIHdlIHJldHVybiBoZXJlLlxcbiBcXHQgKi9cXG4gXFx0Y29tcGxldGUoYXJncy1cXHUwMDNlZG9uZSk7XFxuLVxcbiB9XFxuIFxcbiAvKlxcbkBAIC0zMDc4LDcgKzMwNjIsNyBAQCB4ZnNfYnRyZWVfc3BsaXQoXFxuIFxcdGFyZ3MuY3VycCA9IGN1cnA7XFxuIFxcdGFyZ3Muc3RhdCA9IHN0YXQ7XFxuIFxcdGFyZ3MuZG9uZSA9IFxcdTAwMjZkb25lO1xcbi1cXHRhcmdzLmtzd2FwZCA9IGN1cnJlbnRfaXNfa3N3YXBkKCk7XFxuK1xcbiBcXHRJTklUX1dPUktfT05TVEFDSyhcXHUwMDI2YXJncy53b3JrLCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKTtcXG4gXFx0cXVldWVfd29yayh4ZnNfYWxsb2Nfd3EsIFxcdTAwMjZhcmdzLndvcmspO1xcbiBcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZkb25lKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oIGIvZnMveGZzL3hmc19wbGF0Zm9ybS5oXFxuaW5kZXggNWQ1NDJlOTVmZTQ0NC4uYTQ5ZmExNTk4OTRkZSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX3BsYXRmb3JtLmhcXG4rKysgYi9mcy94ZnMveGZzX3BsYXRmb3JtLmhcXG5AQCAtMTE1LDEwICsxMTUsNiBAQCB0eXBlZGVmIF9fdTMyXFx0XFx0XFx0eGZzX25saW5rX3Q7XFxuICNkZWZpbmUgeGZzX2Jsb2NrZ2Nfc2Vjc1xcdHhmc19wYXJhbXMuYmxvY2tnY190aW1lci52YWxcXG4gXFxuICNkZWZpbmUgY3VycmVudF9jcHUoKVxcdFxcdChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKVxcbi0jZGVmaW5lIGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChzcCwgZilcXHRcXHRcXFxcXFxuLVxcdFxcdCgqKHNwKSA9IGN1cnJlbnQtXFx1MDAzZWZsYWdzLCBjdXJyZW50LVxcdTAwM2VmbGFncyB8PSAoZikpXFxuLSNkZWZpbmUgY3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZChzcCwgZilcXHRcXFxcXFxuLVxcdFxcdChjdXJyZW50LVxcdTAwM2VmbGFncyA9ICgoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+KGYpKSB8ICgqKHNwKSBcXHUwMDI2IChmKSkpKVxcbiBcXG4gI2RlZmluZSBOQkJZXFx0XFx0OFxcdFxcdC8qIG51bWJlciBvZiBiaXRzIHBlciBieXRlICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXFxuaW5kZXggNjZhMmY3MGU5ZTAxOS4uNjkxYzA5ZjBhNjk3MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXFxuQEAgLTgxLDEwICs4MSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wYWN0X2dhcCh1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIFxcdHJldHVybiBtaW4oMlVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBDT01QQUNUX0NMVVNURVJfTUFYKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LQ09NUEFDVEQ7XFxuLX1cXG4gXFxuICNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbiBcXG5AQCAtMTAzLDcgKzk5LDcgQEAgZXh0ZXJuIHZvaWQgY29tcGFjdGlvbl9kZWZlcl9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXG4gYm9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHRcXHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcXG4tXFxuK2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCk7XFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfcnVuKGludCBuaWQpO1xcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3N0b3AoaW50IG5pZCk7XFxuIGV4dGVybiB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTtcXG5AQCAtMTIwLDYgKzExNiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGtjb21wYWN0ZF9ydW4oaW50IG5pZClcXG4ge1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLmViMTJmZjRjZWE2YzIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuQEAgLTE4MDgsOCArMTgwOCw4IEBAIGV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xcbiAjZGVmaW5lIFBGX1VTRURfTUFUSFxcdFxcdDB4MDAwMDIwMDBcXHQvKiBJZiB1bnNldCB0aGUgZnB1IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAqL1xcbiAjZGVmaW5lIFBGX1VTRVJfV09SS0VSXFx0XFx0MHgwMDAwNDAwMFxcdC8qIEtlcm5lbCB0aHJlYWQgY2xvbmVkIGZyb20gdXNlcnNwYWNlIHRocmVhZCAqL1xcbiAjZGVmaW5lIFBGX05PRlJFRVpFXFx0XFx0MHgwMDAwODAwMFxcdC8qIFRoaXMgdGhyZWFkIHNob3VsZCBub3QgYmUgZnJvemVuICovXFxuLSNkZWZpbmUgUEZfS0NPTVBBQ1REXFx0XFx0MHgwMDAxMDAwMFxcdC8qIEkgYW0ga2NvbXBhY3RkICovXFxuLSNkZWZpbmUgUEZfS1NXQVBEXFx0XFx0MHgwMDAyMDAwMFxcdC8qIEkgYW0ga3N3YXBkICovXFxuKyNkZWZpbmUgUEZfX0hPTEVfXzAwMDEwMDAwXFx0MHgwMDAxMDAwMFxcbisjZGVmaW5lIFBGX19IT0xFX18wMDAyMDAwMFxcdDB4MDAwMjAwMDBcXG4gI2RlZmluZSBQRl9NRU1BTExPQ19OT0ZTXFx0MHgwMDA0MDAwMFxcdC8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0ZTLiBTZWUgbWVtYWxsb2NfbmZzX3NhdmUoKSAqL1xcbiAjZGVmaW5lIFBGX01FTUFMTE9DX05PSU9cXHQweDAwMDgwMDAwXFx0LyogQWxsIGFsbG9jYXRpb25zIGluaGVyaXQgR0ZQX05PSU8uIFNlZSBtZW1hbGxvY19ub2lvX3NhdmUoKSAqL1xcbiAjZGVmaW5lIFBGX0xPQ0FMX1RIUk9UVExFXFx0MHgwMDEwMDAwMFxcdC8qIFRocm90dGxlIHdyaXRlcyBvbmx5IGFnYWluc3QgdGhlIGJkaSBJIHdyaXRlIHRvLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggYTcyZWNmMTJjMDBkYi4uZmMyOTBlMjllNGE5ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuQEAgLTI1LDEyICsyNSw2IEBAXFxuICNkZWZpbmUgU1dBUF9GTEFHU19WQUxJRFxcdChTV0FQX0ZMQUdfUFJJT19NQVNLIHwgU1dBUF9GTEFHX1BSRUZFUiB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFNXQVBfRkxBR19ESVNDQVJEIHwgU1dBUF9GTEFHX0RJU0NBUkRfT05DRSB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFNXQVBfRkxBR19ESVNDQVJEX1BBR0VTKVxcbi1cXG4tc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LU1dBUEQ7XFxuLX1cXG4tXFxuIC8qXFxuICAqIE1BWF9TV0FQRklMRVMgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3dhcHR5cGVzOiB0aGluZ3Mgd2hpY2ggY2FuXFxuICAqIGJlIHN3YXBwZWQgdG8uICBUaGUgc3dhcCB0eXBlIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhhdCBzd2FwIHR5cGUgYXJlXFxuQEAgLTMzOSw2ICszMzMsNyBAQCB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTtcXG4gXFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpO1xcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XFxuK2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NXQVBcXG4gaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsXFxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xcbmluZGV4IGEwNDk0MTU1MTJjNjcuLjQ5OTRlMjAwYmJlY2QgMTAwNjQ0XFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXFxuKysrIGIvbW0vY29tcGFjdGlvbi5jXFxuQEAgLTMxOTcsNyArMzE5Nyw2IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApXFxuIFxcdGxvbmcgZGVmYXVsdF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhIUEFHRV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpO1xcbiBcXHRsb25nIHRpbWVvdXQgPSBkZWZhdWx0X3RpbWVvdXQ7XFxuIFxcbi1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyB8PSBQRl9LQ09NUEFDVEQ7XFxuIFxcdHNldF9mcmVlemFibGUoKTtcXG4gXFxuIFxcdHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyID0gMDtcXG5AQCAtMzI1NCwxMSArMzI1MywxNSBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxcbiBcXHRcXHRcXHRwZ2RhdC1cXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UEZfS0NPTVBBQ1REO1xcbi1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG4re1xcbitcXHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tjb21wYWN0ZCk7XFxuK1xcbiAvKlxcbiAgKiBUaGlzIGtjb21wYWN0ZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXFxuICAqIE9uIG5vZGUtaG90LWFkZCwga2NvbXBhY3RkIHdpbGwgbW92ZWQgdG8gcHJvcGVyIGNwdXMgaWYgY3B1cyBhcmUgaG90LWFkZGVkLlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggYmYyNzg2YzcyNDdkNC4uOWY5OTYzM2Q3ZGMxZSAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTc1MzksNyArNzUzOSw3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxuIFxcdCAqIHVzIGZyb20gcmVjdXJzaXZlbHkgdHJ5aW5nIHRvIGZyZWUgbW9yZSBtZW1vcnkgYXMgd2UncmVcXG4gXFx0ICogdHJ5aW5nIHRvIGZyZWUgdGhlIGZpcnN0IHBpZWNlIG9mIG1lbW9yeSBpbiB0aGUgZmlyc3QgcGxhY2UpLlxcbiBcXHQgKi9cXG4tXFx0dHNrLVxcdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcXG4rXFx0dHNrLVxcdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQztcXG4gXFx0c2V0X2ZyZWV6YWJsZSgpO1xcbiBcXG4gXFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcXG5AQCAtNzU4OSwxMSArNzU4OSwxNyBAQCBzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbiBcXHRcXHRcXHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XFxuIFxcdH1cXG4gXFxuLVxcdHRzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfihQRl9NRU1BTExPQyB8IFBGX0tTV0FQRCk7XFxuK1xcdHRzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflBGX01FTUFMTE9DO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG4re1xcbitcXHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtzd2FwZDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tzd2FwZCk7XFxuK1xcbiAvKlxcbiAgKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXFxuICAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmggYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXFxuaW5kZXggNzZmNWUwMjVlMTA3Ni4uODA3ZWY4ODFjZTJkNCAxMDA2NDRcXG4tLS0gYS90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXFxuKysrIGIvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaFxcbkBAIC0zMSw4ICszMSw2IEBAXFxuICNkZWZpbmUgUEZfSURMRVxcdFxcdFxcdFxcdDB4MDAwMDAwMDJcXHQvKiBJIGFtIGFuIElETEUgdGhyZWFkICovXFxuICNkZWZpbmUgUEZfSU9fV09SS0VSXFx0XFx0XFx0MHgwMDAwMDAxMFxcdC8qIFRhc2sgaXMgYW4gSU8gd29ya2VyICovXFxuICNkZWZpbmUgUEZfV1FfV09SS0VSXFx0XFx0XFx0MHgwMDAwMDAyMFxcdC8qIEknbSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi9cXG4tI2RlZmluZSBQRl9LQ09NUEFDVERcXHRcXHRcXHQweDAwMDEwMDAwICAgICAgLyogSSBhbSBrY29tcGFjdGQgKi9cXG4tI2RlZmluZSBQRl9LU1dBUERcXHRcXHRcXHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cXG4gI2RlZmluZSBQRl9LVEhSRUFEXFx0XFx0XFx0MHgwMDIwMDAwMFxcdC8qIEkgYW0gYSBrZXJuZWwgdGhyZWFkICovXFxuICNkZWZpbmUgUEZfRVhJVElOR1xcdFxcdFxcdDB4MDAwMDAwMDRcXG4gI2RlZmluZSBDTE9DS19NT05PVE9OSUNcXHRcXHRcXHQxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUxOjMxLjg0MTA0MjgyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTUwNzY0MjgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX3dyaXRlcGFnZXNcIixcbiAgICBcImN1cnJlbnRfaXNfa3N3YXBkXCIsXG4gICAgXCJjdXJyZW50X2lzX2tjb21wYWN0ZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5ZWQ5OWQyZGRhZjE5Y2NiMjAwOGFiYTQ2ZDlmODVhODA1MzkwZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjUxOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbmluZGV4IDBhNWViZmRhOTBmMTIuLjYzMDZjYTc0N2YzYmEgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXG4rKysgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5AQCAtMjA3Nyw4ICsyMDc3LDcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKVxuIFx0ICogV3JpdGViYWNrIGZyb20gcmVjbGFpbSBjb250ZXh0IHNob3VsZCBuZXZlciBoYXBwZW4gZXhjZXB0IGluIHRoZSBjYXNlXG4gXHQgKiBvZiBhIFZNIHJlZ3Jlc3Npb24gc28gd2FybiBhYm91dCBpdCBhbmQgcmVmdXNlIHRvIHdyaXRlIHRoZSBkYXRhLlxuIFx0ICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpKSA9PVxuLVx0XHRcdFBGX01FTUFMTE9DKSlcbitcdGlmIChXQVJOX09OX09OQ0UoKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0d2hpbGUgKChmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdwYy1cdTAwM2V3YmMsIGZvbGlvLCBcdTAwMjZlcnJvcikpKSB7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNcbmluZGV4IDYwZWY3ZjA4YjFkMzAuLjY3MzhkOWQxNTExYmMgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXG5AQCAtMjk5NCw3ICsyOTk0LDYgQEAgc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzIHtcbiBcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHQqKmN1cnA7XG4gXHRpbnRcdFx0XHQqc3RhdDtcdFx0Lyogc3VjY2Vzcy9mYWlsdXJlICovXG4gXHRpbnRcdFx0XHRyZXN1bHQ7XG4tXHRib29sXHRcdFx0a3N3YXBkO1x0LyogYWxsb2NhdGlvbiBpbiBrc3dhcGQgY29udGV4dCAqL1xuIFx0c3RydWN0IGNvbXBsZXRpb25cdCpkb25lO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuIH07XG5AQCAtMzAwOCwzMyArMzAwNywxOCBAQCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKFxuIHtcbiBcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1x0KmFyZ3MgPSBjb250YWluZXJfb2Yod29yayxcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3MsIHdvcmspO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRwZmxhZ3M7XG4tXHR1bnNpZ25lZCBsb25nXHRcdG5ld19wZmxhZ3MgPSAwO1xuLVxuLVx0Lypcbi1cdCAqIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbnRleHQgaGVyZSwgYnV0IG1heSBhbHNvIGJlIGRvaW5nIHdvcmtcbi1cdCAqIGluIGtzd2FwZCBjb250ZXh0LCBhbmQgaGVuY2Ugd2UgbWF5IG5lZWQgdG8gaW5oZXJpdCB0aGF0IHN0YXRlXG4tXHQgKiB0ZW1wb3JhcmlseSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBibG9jayB3YWl0aW5nIGZvciBtZW1vcnkgcmVjbGFpbVxuLVx0ICogaW4gYW55IHdheS5cbi1cdCAqL1xuLVx0aWYgKGFyZ3MtXHUwMDNla3N3YXBkKVxuLVx0XHRuZXdfcGZsYWdzIHw9IFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEO1xuLVxuLVx0Y3VycmVudF9zZXRfZmxhZ3NfbmVzdGVkKFx1MDAyNnBmbGFncywgbmV3X3BmbGFncyk7XG4gXHR4ZnNfdHJhbnNfc2V0X2NvbnRleHQoYXJncy1cdTAwM2VjdXItXHUwMDNlYmNfdHApO1xuIFxuIFx0YXJncy1cdTAwM2VyZXN1bHQgPSBfX3hmc19idHJlZV9zcGxpdChhcmdzLVx1MDAzZWN1ciwgYXJncy1cdTAwM2VsZXZlbCwgYXJncy1cdTAwM2VwdHJwLFxuIFx0XHRcdFx0XHQgYXJncy1cdTAwM2VrZXksIGFyZ3MtXHUwMDNlY3VycCwgYXJncy1cdTAwM2VzdGF0KTtcbiBcbiBcdHhmc190cmFuc19jbGVhcl9jb250ZXh0KGFyZ3MtXHUwMDNlY3VyLVx1MDAzZWJjX3RwKTtcbi1cdGN1cnJlbnRfcmVzdG9yZV9mbGFnc19uZXN0ZWQoXHUwMDI2cGZsYWdzLCBuZXdfcGZsYWdzKTtcbiBcbiBcdC8qXG4gXHQgKiBEbyBub3QgYWNjZXNzIGFyZ3MgYWZ0ZXIgY29tcGxldGUoKSBoYXMgcnVuIGhlcmUuIFdlIGRvbid0IG93biBhcmdzXG4gXHQgKiBhbmQgdGhlIG93bmVyIG1heSBydW4gYW5kIGZyZWUgYXJncyBiZWZvcmUgd2UgcmV0dXJuIGhlcmUuXG4gXHQgKi9cbiBcdGNvbXBsZXRlKGFyZ3MtXHUwMDNlZG9uZSk7XG4tXG4gfVxuIFxuIC8qXG5AQCAtMzA3OCw3ICszMDYyLDcgQEAgeGZzX2J0cmVlX3NwbGl0KFxuIFx0YXJncy5jdXJwID0gY3VycDtcbiBcdGFyZ3Muc3RhdCA9IHN0YXQ7XG4gXHRhcmdzLmRvbmUgPSBcdTAwMjZkb25lO1xuLVx0YXJncy5rc3dhcGQgPSBjdXJyZW50X2lzX2tzd2FwZCgpO1xuK1xuIFx0SU5JVF9XT1JLX09OU1RBQ0soXHUwMDI2YXJncy53b3JrLCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKTtcbiBcdHF1ZXVlX3dvcmsoeGZzX2FsbG9jX3dxLCBcdTAwMjZhcmdzLndvcmspO1xuIFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZkb25lKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3BsYXRmb3JtLmggYi9mcy94ZnMveGZzX3BsYXRmb3JtLmhcbmluZGV4IDVkNTQyZTk1ZmU0NDQuLmE0OWZhMTU5ODk0ZGUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX3BsYXRmb3JtLmhcbisrKyBiL2ZzL3hmcy94ZnNfcGxhdGZvcm0uaFxuQEAgLTExNSwxMCArMTE1LDYgQEAgdHlwZWRlZiBfX3UzMlx0XHRcdHhmc19ubGlua190O1xuICNkZWZpbmUgeGZzX2Jsb2NrZ2Nfc2Vjc1x0eGZzX3BhcmFtcy5ibG9ja2djX3RpbWVyLnZhbFxuIFxuICNkZWZpbmUgY3VycmVudF9jcHUoKVx0XHQocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSlcbi0jZGVmaW5lIGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChzcCwgZilcdFx0XFxcbi1cdFx0KCooc3ApID0gY3VycmVudC1cdTAwM2VmbGFncywgY3VycmVudC1cdTAwM2VmbGFncyB8PSAoZikpXG4tI2RlZmluZSBjdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKHNwLCBmKVx0XFxcbi1cdFx0KGN1cnJlbnQtXHUwMDNlZmxhZ3MgPSAoKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IH4oZikpIHwgKCooc3ApIFx1MDAyNiAoZikpKSlcbiBcbiAjZGVmaW5lIE5CQllcdFx0OFx0XHQvKiBudW1iZXIgb2YgYml0cyBwZXIgYnl0ZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbmluZGV4IDY2YTJmNzBlOWUwMTkuLjY5MWMwOWYwYTY5NzEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbkBAIC04MSwxMCArODEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcGFjdF9nYXAodW5zaWduZWQgaW50IG9yZGVyKVxuIFx0cmV0dXJuIG1pbigyVUwgXHUwMDNjXHUwMDNjIG9yZGVyLCBDT01QQUNUX0NMVVNURVJfTUFYKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcbi17XG4tXHRyZXR1cm4gY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS0NPTVBBQ1REO1xuLX1cbiBcbiAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbiBcbkBAIC0xMDMsNyArOTksNyBAQCBleHRlcm4gdm9pZCBjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gXG4gYm9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxuIFx0XHRcdFx0XHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcbi1cbitib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpO1xuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfcnVuKGludCBuaWQpO1xuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfc3RvcChpbnQgbmlkKTtcbiBleHRlcm4gdm9pZCB3YWtldXBfa2NvbXBhY3RkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XG5AQCAtMTIwLDYgKzExNiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBrY29tcGFjdGRfcnVuKGludCBuaWQpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLmViMTJmZjRjZWE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTE4MDgsOCArMTgwOCw4IEBAIGV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xuICNkZWZpbmUgUEZfVVNFRF9NQVRIXHRcdDB4MDAwMDIwMDBcdC8qIElmIHVuc2V0IHRoZSBmcHUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICovXG4gI2RlZmluZSBQRl9VU0VSX1dPUktFUlx0XHQweDAwMDA0MDAwXHQvKiBLZXJuZWwgdGhyZWFkIGNsb25lZCBmcm9tIHVzZXJzcGFjZSB0aHJlYWQgKi9cbiAjZGVmaW5lIFBGX05PRlJFRVpFXHRcdDB4MDAwMDgwMDBcdC8qIFRoaXMgdGhyZWFkIHNob3VsZCBub3QgYmUgZnJvemVuICovXG4tI2RlZmluZSBQRl9LQ09NUEFDVERcdFx0MHgwMDAxMDAwMFx0LyogSSBhbSBrY29tcGFjdGQgKi9cbi0jZGVmaW5lIFBGX0tTV0FQRFx0XHQweDAwMDIwMDAwXHQvKiBJIGFtIGtzd2FwZCAqL1xuKyNkZWZpbmUgUEZfX0hPTEVfXzAwMDEwMDAwXHQweDAwMDEwMDAwXG4rI2RlZmluZSBQRl9fSE9MRV9fMDAwMjAwMDBcdDB4MDAwMjAwMDBcbiAjZGVmaW5lIFBGX01FTUFMTE9DX05PRlNcdDB4MDAwNDAwMDBcdC8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0ZTLiBTZWUgbWVtYWxsb2NfbmZzX3NhdmUoKSAqL1xuICNkZWZpbmUgUEZfTUVNQUxMT0NfTk9JT1x0MHgwMDA4MDAwMFx0LyogQWxsIGFsbG9jYXRpb25zIGluaGVyaXQgR0ZQX05PSU8uIFNlZSBtZW1hbGxvY19ub2lvX3NhdmUoKSAqL1xuICNkZWZpbmUgUEZfTE9DQUxfVEhST1RUTEVcdDB4MDAxMDAwMDBcdC8qIFRocm90dGxlIHdyaXRlcyBvbmx5IGFnYWluc3QgdGhlIGJkaSBJIHdyaXRlIHRvLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IGE3MmVjZjEyYzAwZGIuLmZjMjkwZTI5ZTRhOWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0yNSwxMiArMjUsNiBAQFxuICNkZWZpbmUgU1dBUF9GTEFHU19WQUxJRFx0KFNXQVBfRkxBR19QUklPX01BU0sgfCBTV0FQX0ZMQUdfUFJFRkVSIHwgXFxcbiBcdFx0XHRcdCBTV0FQX0ZMQUdfRElTQ0FSRCB8IFNXQVBfRkxBR19ESVNDQVJEX09OQ0UgfCBcXFxuIFx0XHRcdFx0IFNXQVBfRkxBR19ESVNDQVJEX1BBR0VTKVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXG4te1xuLVx0cmV0dXJuIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tTV0FQRDtcbi19XG4tXG4gLypcbiAgKiBNQVhfU1dBUEZJTEVTIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN3YXB0eXBlczogdGhpbmdzIHdoaWNoIGNhblxuICAqIGJlIHN3YXBwZWQgdG8uICBUaGUgc3dhcCB0eXBlIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhhdCBzd2FwIHR5cGUgYXJlXG5AQCAtMzM5LDYgKzMzMyw3IEBAIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xuIFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpO1xuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKTtcbitib29sIGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpO1xuIFxuICNpZmRlZiBDT05GSUdfU1dBUFxuIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywgdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLFxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggYTA0OTQxNTUxMmM2Ny4uNDk5NGUyMDBiYmVjZCAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuKysrIGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtMzE5Nyw3ICszMTk3LDYgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdGxvbmcgZGVmYXVsdF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhIUEFHRV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpO1xuIFx0bG9uZyB0aW1lb3V0ID0gZGVmYXVsdF90aW1lb3V0O1xuIFxuLVx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9LQ09NUEFDVEQ7XG4gXHRzZXRfZnJlZXphYmxlKCk7XG4gXG4gXHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyID0gMDtcbkBAIC0zMjU0LDExICszMjUzLDE1IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApXG4gXHRcdFx0cGdkYXQtXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0Y3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjY9IH5QRl9LQ09NUEFDVEQ7XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rYm9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKVxuK3tcbitcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tjb21wYWN0ZCk7XG4rXG4gLypcbiAgKiBUaGlzIGtjb21wYWN0ZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXG4gICogT24gbm9kZS1ob3QtYWRkLCBrY29tcGFjdGQgd2lsbCBtb3ZlZCB0byBwcm9wZXIgY3B1cyBpZiBjcHVzIGFyZSBob3QtYWRkZWQuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmYyNzg2YzcyNDdkNC4uOWY5OTYzM2Q3ZGMxZSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTc1MzksNyArNzUzOSw3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4gXHQgKiB1cyBmcm9tIHJlY3Vyc2l2ZWx5IHRyeWluZyB0byBmcmVlIG1vcmUgbWVtb3J5IGFzIHdlJ3JlXG4gXHQgKiB0cnlpbmcgdG8gZnJlZSB0aGUgZmlyc3QgcGllY2Ugb2YgbWVtb3J5IGluIHRoZSBmaXJzdCBwbGFjZSkuXG4gXHQgKi9cbi1cdHRzay1cdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcbitcdHRzay1cdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQztcbiBcdHNldF9mcmVlemFibGUoKTtcbiBcbiBcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcbkBAIC03NTg5LDExICs3NTg5LDE3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4gXHRcdFx0Z290byBrc3dhcGRfdHJ5X3NsZWVwO1xuIFx0fVxuIFxuLVx0dHNrLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihQRl9NRU1BTExPQyB8IFBGX0tTV0FQRCk7XG4rXHR0c2stXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfTUVNQUxMT0M7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rYm9vbCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxuK3tcbitcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tzd2FwZCk7XG4rXG4gLypcbiAgKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXG4gICoga3N3YXBkIHNob3VsZCByZWNsYWltIChkaXJlY3QgcmVjbGFpbSBpcyBkZWZlcnJlZCksIHdha2UgaXQgdXAgZm9yIHRoZSB6b25lJ3NcbmRpZmYgLS1naXQgYS90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oIGIvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaFxuaW5kZXggNzZmNWUwMjVlMTA3Ni4uODA3ZWY4ODFjZTJkNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmhcbisrKyBiL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmhcbkBAIC0zMSw4ICszMSw2IEBAXG4gI2RlZmluZSBQRl9JRExFXHRcdFx0XHQweDAwMDAwMDAyXHQvKiBJIGFtIGFuIElETEUgdGhyZWFkICovXG4gI2RlZmluZSBQRl9JT19XT1JLRVJcdFx0XHQweDAwMDAwMDEwXHQvKiBUYXNrIGlzIGFuIElPIHdvcmtlciAqL1xuICNkZWZpbmUgUEZfV1FfV09SS0VSXHRcdFx0MHgwMDAwMDAyMFx0LyogSSdtIGEgd29ya3F1ZXVlIHdvcmtlciAqL1xuLSNkZWZpbmUgUEZfS0NPTVBBQ1REXHRcdFx0MHgwMDAxMDAwMCAgICAgIC8qIEkgYW0ga2NvbXBhY3RkICovXG4tI2RlZmluZSBQRl9LU1dBUERcdFx0XHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cbiAjZGVmaW5lIFBGX0tUSFJFQURcdFx0XHQweDAwMjAwMDAwXHQvKiBJIGFtIGEga2VybmVsIHRocmVhZCAqL1xuICNkZWZpbmUgUEZfRVhJVElOR1x0XHRcdDB4MDAwMDAwMDRcbiAjZGVmaW5lIENMT0NLX01PTk9UT05JQ1x0XHRcdDFcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUxOjMxLjg0MTA0NDYzNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODE2NDE5MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enogYW5kLCBpZiBzbywgaG93IHRvIGJlc3QgYXBwcm9hY2ggaXQuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdpbmcgYW5kIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGFyZS4gTG9va3MgbGlrZSB3ZSBoYXZlIGEgZmV3IGZpbGVzIGFmZmVjdGVkLCBzbyBsZXQncyB3YWxrIHRocm91Z2ggdGhlbS5cblxuMS4gIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYDogVGhpcyBvbmUncyBzdHJhaWdodGZvcndhcmQ7IGEgYml0d2lzZSBjaGVjayB1c2luZyBgUEZfTUVNQUxMT0NgIGlzIHNpbXBsaWZpZWQuIExpa2VseSBub3QgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcsIGJ1dCB3ZSBjYW4ndCBjb21wbGV0ZWx5IGRpc21pc3MgaXQgd2l0aG91dCBtb3JlIGNvbnRleHQuIE1pbmltYWwgaW1wYWN0IEkgd291bGQgdGhpbmsuXG5cbjIuICBgZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY2A6IEFoLCBub3cgdGhpcyBpcyBtb3JlIGludGVyZXN0aW5nLiBXZSdyZSByZW1vdmluZyBga3N3YXBkYCB0cmFja2luZyBhbmQgbmVzdGVkIGZsYWcgbWFuaXB1bGF0aW9ucyB3aXRoaW4gdGhlIFhGUyBiLXRyZWUgc3BsaXR0aW5nIGNvZGUuIFhGUyBpcyBhbHdheXMgYSBnb29kIHRhcmdldC4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHNpbXBsaWZpY2F0aW9uIG9mIGxvY2tpbmcgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBzcGxpdHRpbmcgb3BlcmF0aW9ucywgYW5kIHRoYXQncyB0aGUga2luZCBvZiBwbGFjZSB3aGVyZSBmdXp6aW5nIG9mdGVuIGZpbmRzIGludGVyZXN0aW5nIGJlaGF2aW9yLiBOZWVkIHRvIGludmVzdGlnYXRlIHdoeSB0aG9zZSBmbGFncyBhcmUgYmVpbmcgcmVtb3ZlZC4gQ291bGQgYmUgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBidXQgY291bGQgYWxzbyBiZSBhIHN1YnRsZSBidWcgZml4LlxuXG4zLiAgYGluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oYDogVGhpcyBpcyBhIHJlZmFjdG9yaW5nLCBtb3ZpbmcgdGhlIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAgY2hlY2sgdG8gYSBmdW5jdGlvbi4gTm90aGluZyB0b28gZXhjaXRpbmcgaGVyZSwganVzdCBjbGVhbiB1cC5cblxuNC4gIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgOiBEcm9wcGluZyBgUEZfS0NPTVBBQ1REYCBhbmQgYFBGX0tTV0FQRGAgZmxhZ3MuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IHNpZ25hbHMgYSBzaGlmdCBpbiBob3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgb3IgdHJhY2tlZC4gVGhlIGhvbGVzIGxlZnQgYmVoaW5kIGFyZSBhIGJpdCBjb25jZXJuaW5nLiBOZWVkIHRvIGZvbGxvdyB1cCBvbiB0aGlzIGFuZCBzZWUgd2hhdCBpbXBhY3QgdGhpcyBoYXMuXG5cbjUuICBgaW5jbHVkZS9saW51eC9zd2FwLmhgOiBBZ2FpbiwgcmVmYWN0b3JpbmcsIG1vdmluZyBgY3VycmVudF9pc19rc3dhcGRgIHRvIGEgZnVuY3Rpb24uIExlc3MgY3JpdGljYWwgb24gaXRzIG93bi5cblxuNi4gIGBtbS9jb21wYWN0aW9uLmNgOiBJbXBsZW1lbnRhdGlvbiBvZiBgY3VycmVudF9pc19rY29tcGFjdGRgLlxuXG43LiAgYG1tL3Ztc2Nhbi5jYDogSW1wbGVtZW50YXRpb24gb2YgYGN1cnJlbnRfaXNfa3N3YXBkYC5cblxuOC4gIGB0b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oYDogUmVtb3ZpbmcgdGhlIG1hY3JvcyBmb3IgdGhlIGZsYWdzLiBTZWVtcyBjb25zaXN0ZW50IHdpdGggdGhlIG90aGVyIGNoYW5nZXMuXG5cblNvLCB0aGUga2V5IGFyZWFzIG9mIGludGVyZXN0IHNlZW0gdG8gYmUgdGhlIGBYRlNgIGNoYW5nZXMgYW5kIHRoZSByZW1vdmFsIG9mIHRoZSBmbGFncyBgUEZfS0NPTVBBQ1REYCBhbmQgYFBGX0tTV0FQRGAuIEknbSBzdGFydGluZyB0byB0aGluayB0aGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24uIFRoZSByZW1vdmFsIG9mIHRoZSBmbGFncyBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBmbGFncyBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50LCBvciB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIGNoZWNraW5nIHRob3NlIGZsYWdzIGlzIGJlaW5nIGNoYW5nZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBjdXJyZW50X2lzX2tzd2FwZGAgYW5kIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAgYXJlIGJlaW5nIGNhbGxlZCwgdG8gdW5kZXJzdGFuZCB0aGUgZG93bnN0cmVhbSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBmaXJlIHVwIGBnaXQgZ3JlcGAgYW5kIGxvb2sgZm9yIHRob3NlIGNhbGxzIGFjcm9zcyB0aGUga2VybmVsIHRvIGRldGVybWluZSB0aGUgZnVsbCBzY29wZS4gQmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiwgSSdsbCBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcgYW5kIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MTo1MC42NTc0NjU5NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5OTI5Mjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdXJyZW50X2lzX2tzd2FwZHxjdXJyZW50X2lzX2tjb21wYWN0ZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYz0zMTg9aTkxNV9nZW1fc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmMtMzI5LVxcdFxcdFxcdFxcdEk5MTVfU0hSSU5LX1VOQk9VTkQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jOjMzMDpcXHRpZiAoc2MtXFx1MDAzZW5yX3NjYW5uZWQgXFx1MDAzYyBzYy1cXHUwMDNlbnJfdG9fc2NhbiBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmMtMzMxLVxcdFxcdGludGVsX3dha2VyZWZfdCB3YWtlcmVmO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3Nocmlua2VyLmM9Mjc9c3RhdGljIGJvb2wgY2FuX2Jsb2NrKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fc2hyaW5rZXIuYy0yOS1cXHRyZXR1cm4gKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKSB8fFxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9zaHJpbmtlci5jOjMwOlxcdCAgICAgICAoY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNiAoc2MtXFx1MDAzZWdmcF9tYXNrIFxcdTAwMjYgX19HRlBfS1NXQVBEX1JFQ0xBSU0pKTtcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fc2hyaW5rZXIuYy0zMS19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTEzNzc9c3RhdGljIGJvb2wgY2FuX2Jsb2NrKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTEzODMtXFx0cmV0dXJuIChzYy1cXHUwMDNlZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfHxcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjEzODQ6XFx0ICAgICAgICgoc2MtXFx1MDAzZWdmcF9tYXNrIFxcdTAwMjYgX19HRlBfS1NXQVBEX1JFQ0xBSU0pIFxcdTAwMjZcXHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtMTM4NS19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmM9MTE2Mz1ib29sIHR0bV9ib19zaHJpbmtfYXZvaWRfd2FpdCh2b2lkKVxcbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYy0xMTY0LXtcXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmM6MTE2NTpcXHRyZXR1cm4gIWN1cnJlbnRfaXNfa3N3YXBkKCk7XFxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jLTExNjYtfVxcbi0tXFxuZnMvZjJmcy9pbm9kZS5jPTEwMjE9c3RhdGljIHZvaWQgZjJmc19wb3N0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9mMmZzL2lub2RlLmMtMTA2NS1cXHQvKiBMZXQncyBkbyB0aGlzIGluIHdvcmtxdWV1ZSBvdXQgb2YgdGhlIGRpcmVjdCByZWNsYWltIHBhdGguICovXFxuZnMvZjJmcy9pbm9kZS5jOjEwNjY6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcXG5mcy9mMmZzL2lub2RlLmMtMTA2Ny1cXHRcXHRmMmZzX3JlY29yZF9pbm9kZV9zdGF0ZShzYmksIGlub2RlLVxcdTAwM2VpX2lubywgcmVjb3JkX2JpdHMpO1xcbi0tXFxuZnMvaW5vZGUuYz05MzM9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBpbm9kZV9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbi0tXFxuZnMvaW5vZGUuYy05NzktXFx0XFx0cmVhcCA9IGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGF0YSwgMCwgLTEpO1xcbmZzL2lub2RlLmM6OTgwOlxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbmZzL2lub2RlLmMtOTgxLVxcdFxcdFxcdF9fY291bnRfdm1fZXZlbnRzKEtTV0FQRF9JTk9ERVNURUFMLCByZWFwKTtcXG4tLVxcbmZzL25ldGZzL21pc2MuYz0zMDQ9Ym9vbCBuZXRmc19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbmZzL25ldGZzL21pc2MuYy0zMjUtXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfcHJpdmF0ZV8yKGZvbGlvKSkpIHsgLyogW0RFUFJFQ0FURURdICovXFxuZnMvbmV0ZnMvbWlzYy5jOjMyNjpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCAhKGdmcCBcXHUwMDI2IF9fR0ZQX0ZTKSlcXG5mcy9uZXRmcy9taXNjLmMtMzI3LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL25mcy9maWxlLmM9NTEyPXN0YXRpYyBib29sIG5mc19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbmZzL25mcy9maWxlLmMtNTE4LVxcdFxcdGlmICgoY3VycmVudF9nZnBfY29udGV4dChnZnApIFxcdTAwMjYgR0ZQX0tFUk5FTCkgIT0gR0ZQX0tFUk5FTCB8fFxcbmZzL25mcy9maWxlLmM6NTE5OlxcdFxcdCAgICBjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkpXFxuZnMvbmZzL2ZpbGUuYy01MjAtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvbmZzL2ZzY2FjaGUuaD0xMDI9c3RhdGljIGlubGluZSBib29sIG5mc19mc2NhY2hlX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbmZzL2ZzY2FjaGUuaC0xMDQtXFx0aWYgKGZvbGlvX3Rlc3RfcHJpdmF0ZV8yKGZvbGlvKSkgeyAvKiBbREVQUkVDQVRFRF0gKi9cXG5mcy9uZnMvZnNjYWNoZS5oOjEwNTpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCAhKGdmcCBcXHUwMDI2IF9fR0ZQX0ZTKSlcXG5mcy9uZnMvZnNjYWNoZS5oLTEwNi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMDA9Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwMS1cXHRcXHRcXHRcXHRcXHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDI6Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMDMtZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9ydW4oaW50IG5pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMTI9c3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTExOC1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMTk6c3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTIwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTMzNT1leHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6MzM2OmJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzM3LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTMxOTQ9c3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMjU4LVxcbm1tL2NvbXBhY3Rpb24uYzozMjU5OmJvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG5tbS9jb21wYWN0aW9uLmMtMzI2MC17XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzI2Mi19XFxubW0vY29tcGFjdGlvbi5jOjMyNjM6RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rY29tcGFjdGQpO1xcbm1tL2NvbXBhY3Rpb24uYy0zMjY0LVxcbi0tXFxubW0vdm1zY2FuLmM9NDY3PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3Mi1cXG5tbS92bXNjYW4uYzo0NzM6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNDc0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NTMxPXZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pXFxuLS1cXG5tbS92bXNjYW4uYy01NDEtXFx0ICovXFxubW0vdm1zY2FuLmM6NTQyOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTU0My1cXHQgICAgY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUEZfVVNFUl9XT1JLRVJ8UEZfS1RIUkVBRCkpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNzg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTIxMC1cXHRcXHRcXHQvKiBDYXNlIDEgYWJvdmUgKi9cXG5tbS92bXNjYW4uYzoxMjExOlxcdFxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtMTIxMi1cXHRcXHRcXHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmM9MTg0Nz1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4NTItXFxubW0vdm1zY2FuLmM6MTg1MzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy0xODU0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5MDY9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnNldF9tbV93YWxrKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZm9yY2VfYWxsb2MpXFxuLS1cXG5tbS92bXNjYW4uYy0zOTA5LVxcbm1tL3Ztc2Nhbi5jOjM5MTA6XFx0aWYgKHBnZGF0IFxcdTAwMjZcXHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcXG5tbS92bXNjYW4uYy0zOTExLVxcdFxcdFZNX1dBUk5fT05fT05DRSh3YWxrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MTQtXFx0fSBlbHNlIGlmICghd2FsayBcXHUwMDI2XFx1MDAyNiBmb3JjZV9hbGxvYykge1xcbm1tL3Ztc2Nhbi5jOjM5MTU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbm1tL3Ztc2Nhbi5jLTM5MTYtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTI2PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MzQtXFxubW0vdm1zY2FuLmM6MzkzNTpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtMzkzNi1cXHRcXHRrZnJlZSh3YWxrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyOTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyOTUtXFxubW0vdm1zY2FuLmM6NDI5NjpcXHRWTV9XQVJOX09OX09OQ0UoIWN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbm1tL3Ztc2Nhbi5jLTQyOTctXFxuLS1cXG5tbS92bXNjYW4uYz01MTAyPXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTEzLVxcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXFxubW0vdm1zY2FuLmM6NTExNDpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTUxMTUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTMxND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTMzNi1cXG5tbS92bXNjYW4uYzo1MzM3OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTUzMzgtXFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MzQ0LVxcbm1tL3Ztc2Nhbi5jOjUzNDU6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNTM0Ni1cXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwNjg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEwMi1cXHQgKi9cXG5tbS92bXNjYW4uYzo2MTAzOlxcdHByb3BvcnRpb25hbF9yZWNsYWltID0gKCFjZ3JvdXBfcmVjbGFpbShzYykgXFx1MDAyNlxcdTAwMjYgIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy02MTA0LVxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjI1OT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02Mjc2LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjYyNzc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW1lbWNnX2Z1bGxfd2FsaylcXG5tbS92bXNjYW4uYy02Mjc4LVxcdFxcdHBhcnRpYWwgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmM9NjMzOD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNzYtXFxubW0vdm1zY2FuLmM6NjM3NzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSkge1xcbm1tL3Ztc2Nhbi5jLTYzNzgtXFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY0MTktXFxubW0vdm1zY2FuLmM6NjQyMDpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy02NDIxLVxcdFxcdFxcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtNjQyOS1cXHQgKi9cXG5tbS92bXNjYW4uYzo2NDMwOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X21heV90aHJvdHRsZSgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNjQzMS1cXHQgICAgIXNjLVxcdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYz02NDg1PXN0YXRpYyB2b2lkIGNvbnNpZGVyX3JlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02NTA2LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY1MDc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY2dyb3VwX3JlY2xhaW0oc2MpKVxcbm1tL3Ztc2Nhbi5jLTY1MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NzUyMz1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbi0tXFxubW0vdm1zY2FuLmMtNzU5Ni1cXG5tbS92bXNjYW4uYzo3NTk3OmJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG5tbS92bXNjYW4uYy03NTk4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MDAtfVxcbm1tL3Ztc2Nhbi5jOjc2MDE6RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rc3dhcGQpO1xcbm1tL3Ztc2Nhbi5jLTc2MDItXFxuLS1cXG5tbS92bXNjYW4uYz03NjY4PXZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNzY3MS1cXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxcbm1tL3Ztc2Nhbi5jOjc2NzI6XFx0XFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cXG5tbS92bXNjYW4uYy03NjczLVxcdFxcdFxcdEtTV0FQRF9DTEVBUl9IT1BFTEVTU19LU1dBUEQgOiBLU1dBUERfQ0xFQVJfSE9QRUxFU1NfRElSRUNUKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTE6NTMuMDU2NzYzNjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzQ3NjUxMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXZvbHV0aW9uIG9mIEtlcm5lbCBUaHJlYWQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgaWRlbnRpZnlpbmcgdGhlIGtzd2FwZCBhbmQga2NvbXBhY3RkIHByb2Nlc3NlcyBub3cuIEkgcmVjYWxsIHRoZXkgdXNlZCB0byB1c2UgYFBGX0tTV0FQRGAgYW5kIGBQRl9LQ09NUEFDVERgIHByb2Nlc3MgZmxhZ3Mg4oCTIHRoYXQgd2FzIHRoZSBvbGQgd2F5LiBOb3csIHRoZSBjaGVja3MgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkYCBhbmQgYGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrY29tcGFjdGRgLiBJbnRlcmVzdGluZy4gVGhpcyBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyB0aGVzZSBrZXJuZWwgdGhyZWFkcyBhcmUgYmVpbmcgY2F0ZWdvcml6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbmV3IG1ldGhvZCwgc3BlY2lmaWNhbGx5LCB3aGF0IGBrdGhyZWFkX2Z1bmNgIGlzIGFjdHVhbGx5ICpkb2luZyouIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBrdGhyZWFkX2Z1bmNgLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIHJldmVhbHMuIFRoaXMgY2hhbmdlIGxpa2VseSBoYXMgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIG1hbmFnZSBhbmQgbW9uaXRvciB0aGVzZSBjcnVjaWFsIG1lbW9yeSBtYW5hZ2VtZW50IHRocmVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjA2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTE6NTcuNDA0NDE3ODQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTExNDY4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3RocmVhZF9mdW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYz01OTY9c3RhdGljIHN0cnVjdCBzaW1wbGVfd29ya19xdWV1ZSAqZ2V0X2N1cnJlbnRfdGhyZWFkX3dvcmtfcXVldWUodm9pZClcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYy02MDYtXFxuZHJpdmVycy9tZC9kbS12ZG8vZnVubmVsLXdvcmtxdWV1ZS5jOjYwNzpcXHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpICE9IHdvcmtfcXVldWVfcnVubmVyKVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYy02MDgtXFx0XFx0LyogTm90IGEgVkRPIHdvcmsgcXVldWUgdGhyZWFkLiAqL1xcbi0tXFxuZnMvbmZzZC9uZnNzdmMuYz01OTU9c3RydWN0IHN2Y19ycXN0ICpuZnNkX2N1cnJlbnRfcnFzdCh2b2lkKVxcbmZzL25mc2QvbmZzc3ZjLmMtNTk2LXtcXG5mcy9uZnNkL25mc3N2Yy5jOjU5NzpcXHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpID09IG5mc2QpXFxuZnMvbmZzZC9uZnNzdmMuYy01OTgtXFx0XFx0cmV0dXJuIGt0aHJlYWRfZGF0YShjdXJyZW50KTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3RocmVhZC5oPTExMj1ib29sIGt0aHJlYWRfZnJlZXphYmxlX3Nob3VsZF9zdG9wKGJvb2wgKndhc19mcm96ZW4pO1xcbmluY2x1ZGUvbGludXgva3RocmVhZC5oOjExMzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcXG5pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaC0xMTQtdm9pZCAqa3RocmVhZF9kYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqayk7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcCk7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTIxMS0vKipcXG5rZXJuZWwva3RocmVhZC5jOjIxMjogKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXFxua2VybmVsL2t0aHJlYWQuYy0yMTMtICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxcbi0tXFxua2VybmVsL2t0aHJlYWQuYy0yMTYtICovXFxua2VybmVsL2t0aHJlYWQuYzoyMTc6dm9pZCAqa3RocmVhZF9mdW5jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG5rZXJuZWwva3RocmVhZC5jLTIxOC17XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTIyMy19XFxua2VybmVsL2t0aHJlYWQuYzoyMjQ6RVhQT1JUX1NZTUJPTF9HUEwoa3RocmVhZF9mdW5jKTtcXG5rZXJuZWwva3RocmVhZC5jLTIyNS1cXG4tLVxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaD0xMTg9c3RhdGljIGlubGluZSB2b2lkIG5iY29uX2t0aHJlYWRfd2FrZShzdHJ1Y3QgY29uc29sZSAqY29uKVxcbi0tXFxua2VybmVsL3ByaW50ay9pbnRlcm5hbC5oLTEyOC1cXHQgKlxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaDoxMjk6XFx0ICogVGhpcyBwYWlycyB3aXRoIG5iY29uX2t0aHJlYWRfZnVuYzpBLlxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaC0xMzAtXFx0ICovXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTE4MD1zdGF0aWMgYm9vbCBuYmNvbl9rdGhyZWFkX3Nob3VsZF93YWtldXAoc3RydWN0IGNvbnNvbGUgKmNvbiwgc3RydWN0IG5iY29uX2NvbnRleHQgKmN0eHQpXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNC0vKipcXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTIxNTogKiBuYmNvbl9rdGhyZWFkX2Z1bmMgLSBUaGUgcHJpbnRlciB0aHJlYWQgZnVuY3Rpb25cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNi0gKiBAX19jb25zb2xlOlxcdENvbnNvbGUgdG8gb3BlcmF0ZSBvblxcbi0tXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyMTktICovXFxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEyMjA6c3RhdGljIGludCBuYmNvbl9rdGhyZWFkX2Z1bmModm9pZCAqX19jb25zb2xlKVxcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjIxLXtcXG4tLVxcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjQ0LVxcdFxcdFxcdCAgIG5iY29uX2t0aHJlYWRfc2hvdWxkX3dha2V1cChjb24sIGN0eHQpLFxcbmtlcm5lbC9wcmludGsvbmJjb24uYzoxMjQ1OlxcdFxcdFxcdCAgIFRBU0tfSU5URVJSVVBUSUJMRSk7IC8qIExNTShuYmNvbl9rdGhyZWFkX2Z1bmM6QSkgKi9cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTI0Ni1cXG4tLVxcbmtlcm5lbC9wcmludGsvbmJjb24uYz0xMjkzPXN0YXRpYyBpbmxpbmUgYm9vbCByY3V3YWl0X2hhc19zbGVlcGVyKHN0cnVjdCByY3V3YWl0ICp3KVxcbi0tXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzMDMtXFx0ICpcXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTMwNDpcXHQgKiBUaGlzIHBhaXJzIHdpdGggbmJjb25fa3RocmVhZF9mdW5jOkEuXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzMDUtXFx0ICovXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTM3NT1ib29sIG5iY29uX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBjb25zb2xlICpjb24pXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTM4My1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTM4NDpcXHRrdCA9IGt0aHJlYWRfcnVuKG5iY29uX2t0aHJlYWRfZnVuYywgY29uLCBcXFwicHIvJXMlZFxcXCIsIGNvbi1cXHUwMDNlbmFtZSwgY29uLVxcdTAwM2VpbmRleCk7XFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzODUtXFx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzY1Nj1zdGF0aWMgYm9vbCBsZWdhY3lfa3RocmVhZF9zaG91bGRfd2FrZXVwKHZvaWQpXFxuLS1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTM3MDMtXFxua2VybmVsL3ByaW50ay9wcmludGsuYzozNzA0OnN0YXRpYyBpbnQgbGVnYWN5X2t0aHJlYWRfZnVuYyh2b2lkICp1bnVzZWQpXFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzA1LXtcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzcyOD1zdGF0aWMgYm9vbCBsZWdhY3lfa3RocmVhZF9jcmVhdGUodm9pZClcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzczMy1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jOjM3MzQ6XFx0a3QgPSBrdGhyZWFkX3J1bihsZWdhY3lfa3RocmVhZF9mdW5jLCBOVUxMLCBcXFwicHIvbGVnYWN5XFxcIik7XFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzM1LVxcdGlmIChXQVJOX09OKElTX0VSUihrdCkpKSB7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzI1OT1ib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXFxubW0vY29tcGFjdGlvbi5jLTMyNjAte1xcbm1tL2NvbXBhY3Rpb24uYzozMjYxOlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xcbm1tL2NvbXBhY3Rpb24uYy0zMjYyLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTc0PWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTMxNzUte1xcbm1tL2todWdlcGFnZWQuYzozMTc2OlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2h1Z2VwYWdlZDtcXG5tbS9raHVnZXBhZ2VkLmMtMzE3Ny19XFxuLS1cXG5tbS92bXNjYW4uYz03NTk3PWJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG5tbS92bXNjYW4uYy03NTk4LXtcXG5tbS92bXNjYW4uYzo3NTk5OlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xcbm1tL3Ztc2Nhbi5jLTc2MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MTo1OS4wNTU1NzIwMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODE5OTE4NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgVGhyZWFkIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBrZXJuZWwgdGhyZWFkcyBhcmUgYmVoYXZpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGtlcm5lbC9rdGhyZWFkLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBrZXJuZWwgdGhyZWFkIG1hbmFnZW1lbnQgc2hvdWxkIHJlc2lkZSwgZXNwZWNpYWxseSBhcm91bmQgdGhlIGBrdGhyZWFkX2Z1bmNgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHRocmVhZCwgc28gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0J3MgaW52b2tlZCBpcyBrZXkuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBhbmQgZnJvbSBga3RocmVhZF9mdW5jYC4gVGhpcyBtZWFucyBleGFtaW5pbmcgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHRoZSBga3RocmVhZGAgc3RydWN0LCBhbmQgaG93IHRoZSBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggaXQuIFdlJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVudXN1YWwgYmVoYXZpb3IgaW4gdGhlIHNldHVwIGFuZCB0ZWFyZG93biBvZiB0aGVzZSB0aHJlYWRzLiBJIGV4cGVjdCB0byBiZSBkaWdnaW5nIGludG8gdGhlIHNjaGVkdWxpbmcgcG9saWNpZXMsIHNpZ25hbHMsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgZW1wbG95ZWQsIHNpbmNlIHRoZXNlIGFyZSBhbHdheXMgYXJlYXMgb2YgcG90ZW50aWFsIGNvbXBsZXhpdHkgYW5kIGJ1Z3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByZWVtcHRpb24gbW9kZWwgaGVyZSwgdG8gYmUgc3VyZSBJIGNhbiB2aXN1YWxpemUgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2hlbiB0aGUgdGhyZWFkIGlzIGluIGFuIGFjdGl2ZSBvciB3YWl0aW5nIHN0YXRlLiBUaGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBleHBlY3QgdG8gZm9sbG93IHRoaXMgdHJhY2UgZnJvbSB0aGUga3RocmVhZCBmdW5jdGlvbiB0aHJvdWdoIHRoZSB2YXJpb3VzIHN0YWdlcyB0aGF0IHRoZSBrdGhyZWFkIGhhcyB1bnRpbCBpdHMgY29tcGxldGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjowMi44NzU0OTM1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwva3RocmVhZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXG4gMjExOlxcdC8qKlxcbiAyMTI6XFx0ICoga3RocmVhZF9mdW5jIC0gcmV0dXJuIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgb24ga3RocmVhZCBjcmVhdGlvblxcbiAyMTM6XFx0ICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxcbiAyMTQ6XFx0ICpcXG4gMjE1OlxcdCAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFzayBpcyBub3QgYSBrdGhyZWFkLlxcbiAyMTY6XFx0ICovXFxuIDIxNzpcXHR2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiAyMTg6XFx0e1xcbiAyMTk6XFx0XFx0c3RydWN0IGt0aHJlYWQgKmt0aHJlYWQgPSB0c2tfaXNfa3RocmVhZCh0YXNrKTtcXG4gMjIwOlxcdFxcdGlmIChrdGhyZWFkKVxcbiAyMjE6XFx0XFx0XFx0cmV0dXJuIGt0aHJlYWQtXFx1MDAzZXRocmVhZGZuO1xcbiAyMjI6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIyMzpcXHR9XFxuIDIyNDpcXHRFWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2Z1bmMpO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHQvKipcXG4gMjI3OlxcdCAqIGt0aHJlYWRfZGF0YSAtIHJldHVybiBkYXRhIHZhbHVlIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXFxuIDIyODpcXHQgKiBAdGFzazoga3RocmVhZCB0YXNrIGluIHF1ZXN0aW9uXFxuIDIyOTpcXHQgKlxcbiAyMzA6XFx0ICogUmV0dXJuIHRoZSBkYXRhIHZhbHVlIHNwZWNpZmllZCB3aGVuIGt0aHJlYWQgQHRhc2sgd2FzIGNyZWF0ZWQuXFxuIDIzMTpcXHQgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGUgdmFsaWRpdHkgb2YgQHRhc2sgd2hlblxcbiAyMzI6XFx0ICogY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxcbiAyMzM6XFx0ICovXFxuIDIzNDpcXHR2b2lkICprdGhyZWFkX2RhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjowMi44NzU2MjAxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4NzQ5OTcxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIFBGX0tTV0FQRCBhbmQgSXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgd2VyZSByZW1vdmVkIGJlY2F1c2Ugd2UncmUgbm93IHVzaW5nIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIGluc3RlYWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBCdXQgdGhpcyBjaGFuZ2UgcmlwcGxlcyBvdXQgZnVydGhlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cblRoZSBmaXJzdCBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gSXQgd2VudCBmcm9tIGNoZWNraW5nIGAoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKSkgPT0gUEZfTUVNQUxMT0NgIHRvIHNpbXBseSBgKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKWAuIFRoZSBvbGQgY2hlY2sgc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGV4Y2x1ZGUga3N3YXBkIGZyb20gYSBtZW1vcnkgYWxsb2NhdGlvbiBjaGVjay4gV2h5P1xuXG5JIHJlbWVtYmVyIHRoYXQgYGtzd2FwZGAgc2V0cyBgUEZfTUVNQUxMT0NgICggYHRzay1cdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQztgKSB3aGljaCBpcyBjbGVhciBpbiBgbW0vdm1zY2FuLmNgLiBCdXQgYFBGX0tTV0FQRGAgd2FzIGFsc28gc2V0IG9uIGtzd2FwZCBwcmV2aW91c2x5IGFuZCBpdCBzZWVtcyB0byBoYXZlIGJlZW4gcmVtb3ZlZCB0b28uIFRoaXMgaXMgdGhlIGNydXggb2YgaXQuIFRoZSBjb2RlIGluIGBpb21hcF93cml0ZXBhZ2VzYCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IHdyaXRlYmFjayBmcm9tIGEgcmVjbGFpbSBjb250ZXh0IChsaWtlIGtzd2FwZCkgKnNob3VsZCBuZXZlciogaGFwcGVuIGV4Y2VwdCBpbiBhIFZNIHJlZ3Jlc3Npb24uIFNvLCB0aGUgb3JpZ2luYWwgY2hlY2sgd2FzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IGlmIHRoZSBwcm9jZXNzIGhhZCBgUEZfS1NXQVBEYCBzZXQsIHRoYXQgdGhlIGBXQVJOX09OX09OQ0VgIGluIGBpb21hcF93cml0ZXBhZ2VzYCB3b3VsZG4ndCBiZSB0cmlnZ2VyZWQsIGJlY2F1c2Uga3N3YXBkIHdvdWxkbid0IHRyaWdnZXIgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGNvZGUgcGF0aC5cblxuQnV0IG5vdywgc2luY2Uga3N3YXBkIG9ubHkgaGFzIGBQRl9NRU1BTExPQ2AsIHRoZSBjaGVjayBpbiBgaW9tYXBfd3JpdGVwYWdlc2AgaXMgZ29pbmcgdG8gdHJpZ2dlciBpZiBrc3dhcGQgKmRvZXMqIHJ1biB0aGF0IGNvZGUuIEJ1dCwgaWYga3N3YXBkIGlzIGNhbGxpbmcgdGhhdCBjb2RlLCBpdCAqc2hvdWxkbid0KiBiZS4gVGhpcyBzdWdnZXN0cyB0aGF0IHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpcyBwb3RlbnRpYWxseSBicm9rZW4uIFdlIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGtzd2FwZCAqY2FuKiBlbnRlciBgaW9tYXBfd3JpdGVwYWdlc2AsIG9yIGlmIHNvbWV0aGluZyBlbHNlIGlzIGdvaW5nIG9uLiBJdCByZWFsbHkgbmVlZHMgdG8gYmUgZW5zdXJlZCB0aGF0IGtzd2FwZCBuZXZlciwgZXZlciwgY2FsbHMgdGhhdCBmdW5jdGlvbi5cblxuVGhlIFhGUyBidHJlZSBzcGxpdCB3b3JrZXIgYWxzbyBwcmV2aW91c2x5IHNldCBgUEZfTUVNQUxMT0MgfCBQRl9LU1dBUERgIGluIGBuZXdfcGZsYWdzYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb21taXQgaGlzdG9yeSBhbmQgY29tbWVudHMgb24gdGhhdCBjb2RlIHRvIHVuZGVyc3RhbmQgKndoeSogYFBGX0tTV0FQRGAgd2FzIGluY2x1ZGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBtYXkgZ2l2ZSBzb21lIGluc2lnaHQgaW50byB0aGUgcHJldmlvdXMgbG9naWMsIGJlZm9yZSB0aGUgYGt0aHJlYWRfZnVuYyhjdXJyZW50KWAgcmVmYWN0b3JpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzUwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6MTEuNzUwNjIwMTMxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5OTA6XFx0XFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHQqY3VyO1xcbjI5OTE6XFx0XFx0aW50XFx0XFx0XFx0bGV2ZWw7XFxuMjk5MjpcXHRcXHR1bmlvbiB4ZnNfYnRyZWVfcHRyXFx0KnB0cnA7XFxuMjk5MzpcXHRcXHR1bmlvbiB4ZnNfYnRyZWVfa2V5XFx0KmtleTtcXG4yOTk0OlxcdFxcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXFx0KipjdXJwO1xcbjI5OTU6XFx0XFx0aW50XFx0XFx0XFx0KnN0YXQ7XFx0XFx0Lyogc3VjY2Vzcy9mYWlsdXJlICovXFxuMjk5NjpcXHRcXHRpbnRcXHRcXHRcXHRyZXN1bHQ7XFxuMjk5NzpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvblxcdCpkb25lO1xcbjI5OTg6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0d29yaztcXG4yOTk5OlxcdH07XFxuMzAwMDpcXHRcXG4zMDAxOlxcdC8qXFxuMzAwMjpcXHQgKiBTdGFjayBzd2l0Y2hpbmcgaW50ZXJmYWNlcyBmb3IgYWxsb2NhdGlvblxcbjMwMDM6XFx0ICovXFxuMzAwNDpcXHRzdGF0aWMgdm9pZFxcbjMwMDU6XFx0eGZzX2J0cmVlX3NwbGl0X3dvcmtlcihcXG4zMDA2OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdCp3b3JrKVxcbjMwMDc6XFx0e1xcbjMwMDg6XFx0XFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzXFx0KmFyZ3MgPSBjb250YWluZXJfb2Yod29yayxcXG4zMDA5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncywgd29yayk7XFxuMzAxMDpcXHRcXHR4ZnNfdHJhbnNfc2V0X2NvbnRleHQoYXJncy1cXHUwMDNlY3VyLVxcdTAwM2ViY190cCk7XFxuMzAxMTpcXHRcXG4zMDEyOlxcdFxcdGFyZ3MtXFx1MDAzZXJlc3VsdCA9IF9feGZzX2J0cmVlX3NwbGl0KGFyZ3MtXFx1MDAzZWN1ciwgYXJncy1cXHUwMDNlbGV2ZWwsIGFyZ3MtXFx1MDAzZXB0cnAsXFxuMzAxMzpcXHRcXHRcXHRcXHRcXHRcXHQgYXJncy1cXHUwMDNla2V5LCBhcmdzLVxcdTAwM2VjdXJwLCBhcmdzLVxcdTAwM2VzdGF0KTtcXG4zMDE0OlxcdFxcbjMwMTU6XFx0XFx0eGZzX3RyYW5zX2NsZWFyX2NvbnRleHQoYXJncy1cXHUwMDNlY3VyLVxcdTAwM2ViY190cCk7XFxuMzAxNjpcXHRcXG4zMDE3OlxcdFxcdC8qXFxuMzAxODpcXHRcXHQgKiBEbyBub3QgYWNjZXNzIGFyZ3MgYWZ0ZXIgY29tcGxldGUoKSBoYXMgcnVuIGhlcmUuIFdlIGRvbid0IG93biBhcmdzXFxuMzAxOTpcXHRcXHQgKiBhbmQgdGhlIG93bmVyIG1heSBydW4gYW5kIGZyZWUgYXJncyBiZWZvcmUgd2UgcmV0dXJuIGhlcmUuXFxuMzAyMDpcXHRcXHQgKi9cXG4zMDIxOlxcdFxcdGNvbXBsZXRlKGFyZ3MtXFx1MDAzZWRvbmUpO1xcbjMwMjI6XFx0fVxcbjMwMjM6XFx0XFxuMzAyNDpcXHQvKlxcbjMwMjU6XFx0ICogQk1CVCBzcGxpdCByZXF1ZXN0cyBvZnRlbiBjb21lIGluIHdpdGggbGl0dGxlIHN0YWNrIHRvIHdvcmsgb24gc28gd2UgcHVzaFxcbjMwMjY6XFx0ICogdGhlbSBvZmYgdG8gYSB3b3JrZXIgdGhyZWFkIHNvIHRoZXJlIGlzIGxvdHMgb2Ygc3RhY2sgdG8gdXNlLiBGb3IgdGhlIG90aGVyXFxuMzAyNzpcXHQgKiBidHJlZSB0eXBlcywganVzdCBjYWxsIGRpcmVjdGx5IHRvIGF2b2lkIHRoZSBjb250ZXh0IHN3aXRjaCBvdmVyaGVhZCBoZXJlLlxcbjMwMjg6XFx0ICpcXG4zMDI5OlxcdCAqIENhcmUgbXVzdCBiZSB0YWtlbiBoZXJlIC0gdGhlIHdvcmsgcXVldWUgcmVzY3VlciB0aHJlYWQgaW50cm9kdWNlcyBwb3RlbnRpYWxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6MTEuNzUxMDIyNTQxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzQ0MjcyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYHhmc19idHJlZV9zcGxpdGAqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSByZW1haW5kZXIgb2YgdGhlIGB4ZnNfYnRyZWVfc3BsaXRgIGZ1bmN0aW9uLiBJIGFscmVhZHkgdW5kZXJzdGFuZCB0aGUgaGlnaC1sZXZlbCBjb25jZXB0OiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIG1lY2hhbmljcyBvZiBob3cgd2UgZGl2aWRlIGEgQi10cmVlIG5vZGUgd2hlbiBpdCBvdmVyZmxvd3MuIEknbSBhc3N1bWluZyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBzcGxpdCBwb2ludCBhbmQgcG90ZW50aWFsbHkgc29tZSBpbml0aWFsIG5vZGUgYWRqdXN0bWVudHMuIE5vdywgSSdtIGFudGljaXBhdGluZyB0aGUgbml0dHktZ3JpdHR5OiBob3cgdGhlIGRhdGEgYW5kIG1ldGFkYXRhIGFyZSBhY3R1YWxseSBtb3ZlZCwgaG93IHBvaW50ZXJzIGFyZSB1cGRhdGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgd2UgbWFpbnRhaW4gdGhlIEItdHJlZSdzIGNydWNpYWwgcHJvcGVydGllcyBhZnRlciB0aGlzIHNwbGl0LiBJJ20ga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGR1cmluZyB0aGUgc3BsaXQg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgcmVhbCBlbGVnYW5jZSAob3IgdWdsaW5lc3MhKSBvZiB0aGVzZSBhbGdvcml0aG1zIHJlc2lkZXMuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHRoaW5ncyBsaWtlIGpvdXJuYWwgbG9nIHN0cnVjdHVyZXMgaWYgYW55LCBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIG9wdGltaXphdGlvbnMgaW1wbGVtZW50ZWQgdG8gbWluaW1pemUgSS9PIG9yIGxvY2tpbmcgb3ZlcmhlYWQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ3MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6MTYuMDI1NDUzMTQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMzAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwMzA6XFx0ICogQUdGIFxcdTAwM2NcXHUwMDNlIHdvcmtlciBxdWV1ZSBkZWFkbG9ja3MgaWYgdGhlIEJNQlQgYmxvY2sgYWxsb2NhdGlvbiBoYXMgdG8gbG9jayBuZXdcXG4zMDMxOlxcdCAqIEFHRnMgdG8gYWxsb2NhdGUgYmxvY2tzLiBBIHRhc2sgYmVpbmcgcnVuIGJ5IHRoZSByZXNjdWVyIGNvdWxkIGF0dGVtcHQgdG9cXG4zMDMyOlxcdCAqIGxvY2sgYW4gQUdGIHRoYXQgaXMgYWxyZWFkeSBsb2NrZWQgYnkgYSB0YXNrIHF1ZXVlZCB0byBydW4gYnkgdGhlIHJlc2N1ZXIsXFxuMzAzMzpcXHQgKiByZXN1bHRpbmcgaW4gYW4gQUJCQSBkZWFkbG9jayBhcyB0aGUgcmVzY3VlciBjYW5ub3QgcnVuIHRoZSBsb2NrIGhvbGRlciB0b1xcbjMwMzQ6XFx0ICogcmVsZWFzZSBpdCB1bnRpbCB0aGUgY3VycmVudCB0aHJlYWQgaXQgaXMgcnVubmluZyBnYWlucyB0aGUgbG9jay5cXG4zMDM1OlxcdCAqXFxuMzAzNjpcXHQgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB3ZSBvbmx5IGV2ZXIgcXVldWUgQk1CVCBzcGxpdHMgdGhhdCBkb24ndCBoYXZlIGFuIEFHRlxcbjMwMzc6XFx0ICogYWxyZWFkeSBsb2NrZWQgdG8gYWxsb2NhdGUgZnJvbS4gVGhlIG9ubHkgcGxhY2UgdGhhdCBkb2Vzbid0IGhvbGQgYW4gQUdGXFxuMzAzODpcXHQgKiBsb2NrZWQgaXMgdW53cml0dGVuIGV4dGVudCBjb252ZXJzaW9uIGF0IElPIGNvbXBsZXRpb24sIGJ1dCB0aGF0IGhhcyBhbHJlYWR5XFxuMzAzOTpcXHQgKiBiZWVuIG9mZmxvYWRlZCB0byBhIHdvcmtlciB0aHJlYWQgYW5kIGhlbmNlIGhhcyBubyBzdGFjayBjb25zdW1wdGlvbiBpc3N1ZXNcXG4zMDQwOlxcdCAqIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQuXFxuMzA0MTpcXHQgKi9cXG4zMDQyOlxcdFNUQVRJQyBpbnRcXHRcXHRcXHRcXHRcXHQvKiBlcnJvciAqL1xcbjMwNDM6XFx0eGZzX2J0cmVlX3NwbGl0KFxcbjMwNDQ6XFx0XFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHQqY3VyLFxcbjMwNDU6XFx0XFx0aW50XFx0XFx0XFx0bGV2ZWwsXFxuMzA0NjpcXHRcXHR1bmlvbiB4ZnNfYnRyZWVfcHRyXFx0KnB0cnAsXFxuMzA0NzpcXHRcXHR1bmlvbiB4ZnNfYnRyZWVfa2V5XFx0KmtleSxcXG4zMDQ4OlxcdFxcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXFx0KipjdXJwLFxcbjMwNDk6XFx0XFx0aW50XFx0XFx0XFx0KnN0YXQpXFx0XFx0Lyogc3VjY2Vzcy9mYWlsdXJlICovXFxuMzA1MDpcXHR7XFxuMzA1MTpcXHRcXHRzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3NcXHRhcmdzO1xcbjMwNTI6XFx0XFx0REVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7XFxuMzA1MzpcXHRcXG4zMDU0OlxcdFxcdGlmICgheGZzX2J0cmVlX2lzX2JtYXAoY3VyLVxcdTAwM2ViY19vcHMpIHx8XFxuMzA1NTpcXHRcXHQgICAgY3VyLVxcdTAwM2ViY190cC1cXHUwMDNldF9oaWdoZXN0X2Fnbm8gPT0gTlVMTEFHTlVNQkVSKVxcbjMwNTY6XFx0XFx0XFx0cmV0dXJuIF9feGZzX2J0cmVlX3NwbGl0KGN1ciwgbGV2ZWwsIHB0cnAsIGtleSwgY3VycCwgc3RhdCk7XFxuMzA1NzpcXHRcXG4zMDU4OlxcdFxcdGFyZ3MuY3VyID0gY3VyO1xcbjMwNTk6XFx0XFx0YXJncy5sZXZlbCA9IGxldmVsO1xcbjMwNjA6XFx0XFx0YXJncy5wdHJwID0gcHRycDtcXG4zMDYxOlxcdFxcdGFyZ3Mua2V5ID0ga2V5O1xcbjMwNjI6XFx0XFx0YXJncy5jdXJwID0gY3VycDtcXG4zMDYzOlxcdFxcdGFyZ3Muc3RhdCA9IHN0YXQ7XFxuMzA2NDpcXHRcXHRhcmdzLmRvbmUgPSBcXHUwMDI2ZG9uZTtcXG4zMDY1OlxcdFxcbjMwNjY6XFx0XFx0SU5JVF9XT1JLX09OU1RBQ0soXFx1MDAyNmFyZ3Mud29yaywgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcik7XFxuMzA2NzpcXHRcXHRxdWV1ZV93b3JrKHhmc19hbGxvY193cSwgXFx1MDAyNmFyZ3Mud29yayk7XFxuMzA2ODpcXHRcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZkb25lKTtcXG4zMDY5OlxcdFxcdGRlc3Ryb3lfd29ya19vbl9zdGFjayhcXHUwMDI2YXJncy53b3JrKTtcXG4zMDcwOlxcdFxcdHJldHVybiBhcmdzLnJlc3VsdDtcXG4zMDcxOlxcdH1cXG4zMDcyOlxcdCNlbHNlXFxuMzA3MzpcXHQjZGVmaW5lIHhmc19idHJlZV9zcGxpdFxcdF9feGZzX2J0cmVlX3NwbGl0XFxuMzA3NDpcXHQjZW5kaWYgLyogX19LRVJORUxfXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjoxNi4wMjU2NjIwMzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY0MDM2Njg2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBLZXJuZWwgUmVmYWN0b3JpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBjaGFuZ2UsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBYRlMgaW50ZXJhY3RzIHdpdGgga3N3YXBkIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0cy4gSXQgYXBwZWFycyB0aGUgb2xkIGFwcHJvYWNoIHVzZWQgYFBGX01FTUFMTE9DYCBhbmQgYFBGX0tTV0FQRGAgZmxhZ3MgdG8gbWltaWMga3N3YXBkIGJlaGF2aW9yIHdpdGhpbiB3b3JrZXIgdGhyZWFkcywgcGFydGljdWxhcmx5IGluIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYC4gVGhlIGdvYWwgd2FzIHRvIHByZXZlbnQgYmxvY2tpbmcgZHVyaW5nIHJlY2xhaW0gb3BlcmF0aW9ucy4gVGhpcyByZWZhY3RvcmluZyBjbGVhcmx5IGNoYW5nZXMgaG93IHRoYXQgY29udGV4dCBpcyBkZXRlcm1pbmVkLlxuXG5Ob3cgSSdtIGRpdmluZyBkZWVwZXIgaW50byB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIHNlcmllcyBpcyBtb2RpZnlpbmcgaG93IHdlIGRldGVjdCB0aGUga3N3YXBkIGFuZCBrY29tcGFjdGQgY29udGV4dHMuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgZGlyZWN0IGZsYWcgY2hlY2tzIChgY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1NXQVBEYCwgZXRjLikgd2l0aCBjYWxscyB0byBga3RocmVhZF9mdW5jKGN1cnJlbnQpYCwgd2hpY2ggY2hlY2tzIGlmIHRoZSBjdXJyZW50IHRhc2sgKmlzKiBhIGtlcm5lbCB0aHJlYWQgYW5kLCBpZiBzbywgcmV0dXJucyBpdHMgdGhyZWFkIGZ1bmN0aW9uIChga3N3YXBkYCBvciBga2NvbXBhY3RkYCkuIEltcG9ydGFudGx5LCBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgYXJlICpyZW1vdmVkKiBmcm9tIHRoZSB0YXNrIGZsYWdzLiBUaGVyZSdzIGFsc28gYSBjaGFuZ2UgaW4gYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgIGFuZCBpbiBYRlMncyBgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcmAuXG5cbklzIHRoaXMgcmVmYWN0b3JpbmcganVzdCBjb3NtZXRpYz8gTGV0J3MgY2hlY2sgYWdhaW5zdCB0aGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYS4gTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzICpub3QqIGp1c3QgZG9jdW1lbnRhdGlvbiBvciBsb2dnaW5nLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW1zLiBJdCdzIGxpa2VseSBleGVjdXRhYmxlLCBzbyB5ZXMsIHRoaXMgd2FycmFudHMgZGVlcGVyIHNjcnV0aW55IGFuZCBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgdGhlIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIGNoYW5nZSBhZmZlY3RzIHJlY2xhaW0sIGNvbXBhY3Rpb24sIGFuZCBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBIb3cgZG9lcyB0aGlzIGltcGFjdCBYRlMgYW5kIGlvbWFwLCB3aGljaCBhcmUga2V5IGFyZWFzIG9mIGludGVyZXN0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIGRpZmZlcmVudCB0aHJlYWQgdHlwZXMg4oCTIHdoYXQgaGFwcGVucyBpZiBgY3VycmVudGAgaXNuJ3QgYSBrdGhyZWFkPyBUaGUgYGt0aHJlYWRfZnVuYygpYCBjaGVja3MgYFBGX0tUSFJFQURgLiBJZiBpdCdzIG5vdCBhIGt0aHJlYWQsIGl0J3MgcmV0dXJuaW5nIGBOVUxMYCBzbyBvdXIgY3VycmVudCBjb250ZXh0IGZ1bmN0aW9ucyB3aWxsIHJldHVybiBgZmFsc2VgLlxuXG5Gb2N1c2luZyBvbiBYRlMgYW5kIHRoYXQgYHhmc19idHJlZV9zcGxpdF93b3JrZXJgOiBQcmV2aW91c2x5LCB3b3JrZXIgdGhyZWFkcyB3ZXJlIHNldHRpbmcgYFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEYCB0byBhY3QgYXMga3N3YXBkLiBUaGlzIGlzIG5vdyByZW1vdmVkLiBJbiBgaW9tYXBfd3JpdGVwYWdlc2AsIHdlIHNlZSBhIHNoaWZ0IGZyb20gY2hlY2tpbmcgYSBjb21iaW5lZCBmbGFnIChgUEZfTUVNQUxMT0MgfCBQRl9LU1dBUERgKSB0byBqdXN0IGBQRl9NRU1BTExPQ2AuIENydWNpYWxseSwga3N3YXBkIHN0aWxsIHNldHMgYFBGX01FTUFMTE9DYCB3aGVuIGl0IHN0YXJ0cy4gVGhlIG9sZCBsb2dpYyBtaWdodCBoYXZlICptaXNzZWQqIHRoZSByZWNsYWltIHdyaXRlYmFjayBpZiBpdCAqd2FzKiBrc3dhcGQsIGJ1dCBub3cgaXQgdW5jb25kaXRpb25hbGx5ICp3YXJucyogb24gdGhlIGBQRl9NRU1BTExPQ2AgZmxhZy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBXQVJOX09OIHdhcyBtZWFudCB0byBjYXRjaCByZWNsYWltIHdyaXRlYmFjayBpc3N1ZXMuIFRoZSBjb21tZW50IGNvbmZpcm1zIHRoaXMuIFRoZSBjaGVjayB1c2VkIHRvIG9ubHkgZmxhZyBkaXJlY3QgcmVjbGFpbSwgYnV0IG5vdyBpdCBmbGFncyAqYW55KiByZWNsYWltIGNvbnRleHQuXG5cblRoaXMgYWx0ZXJzIGhvdyBlcnJvcnMgcmVsYXRlZCB0byB3cml0ZWJhY2sgaW4gcmVjbGFpbSBhcmUgaGFuZGxlZC4gVGhpcyBtb2RpZmljYXRpb24gaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0cyB3aXRoIGZpbGVzeXN0ZW1zISBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlncyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgYW5kIHJ1biB0aGUgbW9kaWZpZWQgY29kZS4gYENPTkZJR19GU19JT01BUGAgb3IgYSBmaWxlc3lzdGVtIGNvbmZpZyAoWEZTLCBFWFQ0LCBldGMuKSBhcmUgbmVlZGVkLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGFuZCBJIHNob3VsZCBkb3VibGUtY2hlY2sgS2NvbmZpZyBmb3IgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgIGFuZCBgZnMveGZzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHRlc3RhYmxlIGFuZCBmaW5kIHRoZSBiZXN0IHdheSB0byBmdXp6IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU2MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjozMi40MjkzMzQ2NDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDQ4NzI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCVUZGRVJFRF9JT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZjJmcy9mMmZzLmg9MTMxMz1lbnVtIGlvc3RhdF90eXBlIHtcXG4tLVxcbmZzL2YyZnMvZjJmcy5oLTEzMTUtXFx0QVBQX0RJUkVDVF9JTyxcXHRcXHRcXHQvKiBhcHAgZGlyZWN0IHdyaXRlIElPcyAqL1xcbmZzL2YyZnMvZjJmcy5oOjEzMTY6XFx0QVBQX0JVRkZFUkVEX0lPLFxcdFxcdC8qIGFwcCBidWZmZXJlZCB3cml0ZSBJT3MgKi9cXG5mcy9mMmZzL2YyZnMuaC0xMzE3LVxcdEFQUF9XUklURV9JTyxcXHRcXHRcXHQvKiBhcHAgd3JpdGUgSU9zICovXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz01NDMyPXN0YXRpYyBzc2l6ZV90IGYyZnNfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy01NDQ1LVxcdFxcdGYyZnNfdXBkYXRlX2lvc3RhdChGMkZTX0lfU0IoaW5vZGUpLCBpbm9kZSxcXG5mcy9mMmZzL2ZpbGUuYzo1NDQ2OlxcdFxcdFxcdFxcdFxcdFxcdEFQUF9CVUZGRVJFRF9JTywgcmV0KTtcXG5mcy9mMmZzL2ZpbGUuYy01NDQ3LVxcdH1cXG4tLVxcbmZzL2YyZnMvaW9zdGF0LmM9MzM9aW50IF9fbWF5YmVfdW51c2VkIGlvc3RhdF9pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpXFxuLS1cXG5mcy9mMmZzL2lvc3RhdC5jLTQ3LVxcdHNlcV9wdXRzKHNlcSwgXFxcIltXUklURV1cXFxcblxcXCIpO1xcbmZzL2YyZnMvaW9zdGF0LmM6NDg6XFx0SU9TVEFUX0lORk9fU0hPVyhcXFwiYXBwIGJ1ZmZlcmVkIGRhdGFcXFwiLCBBUFBfQlVGRkVSRURfSU8pO1xcbmZzL2YyZnMvaW9zdGF0LmMtNDktXFx0SU9TVEFUX0lORk9fU0hPVyhcXFwiYXBwIGRpcmVjdCBkYXRhXFxcIiwgQVBQX0RJUkVDVF9JTyk7XFxuLS1cXG5mcy9mMmZzL2lvc3RhdC5jPTIwND12b2lkIGYyZnNfdXBkYXRlX2lvc3RhdChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mMmZzL2lvc3RhdC5jLTIxNC1cXG5mcy9mMmZzL2lvc3RhdC5jOjIxNTpcXHRpZiAodHlwZSA9PSBBUFBfQlVGRkVSRURfSU8gfHwgdHlwZSA9PSBBUFBfRElSRUNUX0lPKVxcbmZzL2YyZnMvaW9zdGF0LmMtMjE2LVxcdFxcdF9fZjJmc191cGRhdGVfaW9zdGF0KHNiaSwgQVBQX1dSSVRFX0lPLCBpb19ieXRlcyk7XFxuLS1cXG5mcy9mMmZzL2lvc3RhdC5jLTIyMi1cXHRpZiAoaW5vZGUgXFx1MDAyNlxcdTAwMjYgZjJmc19jb21wcmVzc2VkX2ZpbGUoaW5vZGUpKSB7XFxuZnMvZjJmcy9pb3N0YXQuYzoyMjM6XFx0XFx0aWYgKHR5cGUgPT0gQVBQX0JVRkZFUkVEX0lPKVxcbmZzL2YyZnMvaW9zdGF0LmMtMjI0LVxcdFxcdFxcdF9fZjJmc191cGRhdGVfaW9zdGF0KHNiaSwgQVBQX0JVRkZFUkVEX0NEQVRBX0lPLCBpb19ieXRlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjMyLjc0OTgyNzM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzIxNzk4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBmaWxlczpcblxuKipJbml0aWFsIERpYWdub3N0aWMgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgb3IgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZhY3QgdGhhdCBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgb2YgYGZzL2lvbWFwL01ha2VmaWxlYCBhbmQgYGZzL3hmcy9LY29uZmlnYCBpcyBwcmV0dHkgdGVsbGluZy4gVGhlIGBNYWtlZmlsZWAgc3VnZ2VzdHMgSSBtaWdodCBiZSBkZWJ1Z2dpbmcgYnVpbGQgZGVwZW5kZW5jaWVzIG9yIGludmVzdGlnYXRpbmcgaG93IEkvTyBtYXBwaW5nIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSU9NQVAgc3Vic3lzdGVtLiBDb252ZXJzZWx5LCBgZnMveGZzL0tjb25maWdgIGluZGljYXRlcyBJIG1pZ2h0IG5lZWQgdG8gdmVyaWZ5IG9yIGFsdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIFhGUyBmaWxlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlc2UgYXJlIHJlbGF0ZWQsIGJ1dCBsaWtlbHkgYXQgc2VwYXJhdGUgbGV2ZWxzLiBUaGUgZmlyc3QgYmVpbmcgdGhlIGxvd2VyLWxldmVsIEkvTyBtYXBwaW5nIGFuZCB0aGUgc2Vjb25kIGJlaW5nIHRoZSBoaWdoZXItbGV2ZWwgZmlsZXN5c3RlbSB0aGF0IG1heSBiZSB0YWtpbmcgYWR2YW50YWdlIG9mIGl0LiBJdCdzIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiwgZm9jdXNpbmcgb24gdGhlc2Ugc3BlY2lmaWMgZmlsZSBzeXN0ZW0gY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjozNS4xMjIwMTExNDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaW9tYXAvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENvcHlyaWdodCAoYykgMjAxOSBPcmFjbGUuXFxuICAgNDpcXHQjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICAgNTpcXHQjXFxuICAgNjpcXHRcXG4gICA3OlxcdGNjZmxhZ3MteSArPSAtSSAkKHNyYylcXHRcXHQjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19GU19JT01BUClcXHRcXHQrPSBpb21hcC5vXFxuICAxMDpcXHRcXG4gIDExOlxcdGlvbWFwLXlcXHRcXHRcXHRcXHQrPSB0cmFjZS5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdFxcdCAgIGl0ZXIubyBcXFxcXFxuICAxMzpcXHRcXHRcXHRcXHRcXHQgICBidWZmZXJlZC1pby5vXFxuICAxNDpcXHRpb21hcC0kKENPTkZJR19CTE9DSylcXHRcXHQrPSBkaXJlY3QtaW8ubyBcXFxcXFxuICAxNTpcXHRcXHRcXHRcXHRcXHQgICBpb2VuZC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6MzUuMTIyMDc1NDc0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDMzNDY0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWEZTIENvbmZpZ3VyYXRpb24gQXVkaXQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZy4gTGV0J3Mgc3RhcnQgd2l0aCBgZnMveGZzL0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBmZWF0dXJlcyBhbmQgb3B0aW9ucyBmb3IgWEZTIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwcm9qZWN0J3MgcmVxdWlyZW1lbnRzLCBhbmQgbWFrZSBzdXJlIHRoYXQgYW55IGRlZmF1bHRzIG9yIGRlcGVuZGVuY2llcyBoYXZlbid0IGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBtaWdodCBpbXBhY3QgdXMuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgYENPTkZJR19YRlNfKmAgc3ltYm9scywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIFhGUyBmZWF0dXJlcyB3ZSdyZSBsZXZlcmFnaW5nLCBsaWtlIHF1b3RhcywgbGFyZ2UgZmlsZSBzdXBwb3J0LCBtZXRhZGF0YSBqb3VybmFsaW5nLCBhbmQgYW55IG5ldyBvcHRpb25zIGludHJvZHVjZWQgdGhhdCBtaWdodCBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBvciBhZGRyZXNzIHNwZWNpZmljIGtub3duIGlzc3Vlcy5cblxuSSdtIGFsc28gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgcHVsbCBpbiBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIG1ldCwgb3IgaWYgYW55IG5ldyBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGludHJvZHVjZWQuIFVsdGltYXRlbHkgSSdsbCBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaG93IFhGUyBpcyBiZWluZyBidWlsdCwgYW5kIHdoaWNoIGZlYXR1cmVzIGFyZSB0cnVseSBhdmFpbGFibGUgYXQgcnVudGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjM4LjQyNTQyNDg5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFhGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlhGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuICAgNTpcXHRcXHRzZWxlY3QgRVhQT1JURlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDc6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFhGUyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2Ugam91cm5hbGluZyBmaWxlc3lzdGVtIHdoaWNoIG9yaWdpbmF0ZWRcXG4gIDEwOlxcdFxcdCAgb24gdGhlIFNHSSBJUklYIHBsYXRmb3JtLiAgSXQgaXMgY29tcGxldGVseSBtdWx0aS10aHJlYWRlZCwgY2FuXFxuICAxMTpcXHRcXHQgIHN1cHBvcnQgbGFyZ2UgZmlsZXMgYW5kIGxhcmdlIGZpbGVzeXN0ZW1zLCBleHRlbmRlZCBhdHRyaWJ1dGVzLFxcbiAgMTI6XFx0XFx0ICB2YXJpYWJsZSBibG9jayBzaXplcywgaXMgZXh0ZW50IGJhc2VkLCBhbmQgbWFrZXMgZXh0ZW5zaXZlIHVzZSBvZlxcbiAgMTM6XFx0XFx0ICBCdHJlZXMgKGRpcmVjdG9yaWVzLCBleHRlbnRzLCBmcmVlIHNwYWNlKSB0byBhaWQgYm90aCBwZXJmb3JtYW5jZVxcbiAgMTQ6XFx0XFx0ICBhbmQgc2NhbGFiaWxpdHkuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gYXQgXFx1MDAzY2h0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvXFx1MDAzZVxcbiAgMTc6XFx0XFx0ICBmb3IgY29tcGxldGUgZGV0YWlscy4gIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgb24tZGlzayBjb21wYXRpYmxlXFxuICAxODpcXHRcXHQgIHdpdGggdGhlIElSSVggdmVyc2lvbiBvZiBYRlMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMjE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeGZzLiAgQmUgYXdhcmUsIGhvd2V2ZXIsIHRoYXQgaWYgdGhlIGZpbGVcXG4gIDIyOlxcdFxcdCAgc3lzdGVtIG9mIHlvdXIgcm9vdCBwYXJ0aXRpb24gaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHlvdSdsbCBuZWVkXFxuICAyMzpcXHRcXHQgIHRvIHVzZSBhbiBpbml0aWFsIHJhbWRpc2sgKGluaXRyZCkgdG8gYm9vdC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIFhGU19TVVBQT1JUX1Y0XFxuICAyNjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGRlcHJlY2F0ZWQgVjQgKGNyYz0wKSBmb3JtYXRcXFwiXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIFhGU19GU1xcbiAgMjg6XFx0XFx0ZGVmYXVsdCBuXFxuICAyOTpcXHRcXHRoZWxwXFxuICAzMDpcXHRcXHQgIFRoZSBWNCBmaWxlc3lzdGVtIGZvcm1hdCBsYWNrcyBjZXJ0YWluIGZlYXR1cmVzIHRoYXQgYXJlIHN1cHBvcnRlZFxcbiAgMzE6XFx0XFx0ICBieSB0aGUgVjUgZm9ybWF0LCBzdWNoIGFzIG1ldGFkYXRhIGNoZWNrc3VtbWluZywgc3RyZW5ndGhlbmVkXFxuICAzMjpcXHRcXHQgIG1ldGFkYXRhIHZlcmlmaWNhdGlvbiwgYW5kIHRoZSBhYmlsaXR5IHRvIHN0b3JlIHRpbWVzdGFtcHMgcGFzdCB0aGVcXG4gIDMzOlxcdFxcdCAgeWVhciAyMDM4LiAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgVjQgZm9ybWF0IGlzIGRlcHJlY2F0ZWQuICBBbGwgdXNlcnNcXG4gIDM0OlxcdFxcdCAgc2hvdWxkIHVwZ3JhZGUgYnkgYmFja2luZyB1cCB0aGVpciBmaWxlcywgcmVmb3JtYXR0aW5nLCBhbmQgcmVzdG9yaW5nXFxuICAzNTpcXHRcXHQgIGZyb20gdGhlIGJhY2t1cC5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBBZG1pbmlzdHJhdG9ycyBhbmQgdXNlcnMgY2FuIGRldGVjdCBhIFY0IGZpbGVzeXN0ZW0gYnkgcnVubmluZ1xcbiAgMzg6XFx0XFx0ICB4ZnNfaW5mbyBhZ2FpbnN0IGEgZmlsZXN5c3RlbSBtb3VudHBvaW50IGFuZCBjaGVja2luZyBmb3IgYSBzdHJpbmdcXG4gIDM5OlxcdFxcdCAgYmVnaW5uaW5nIHdpdGggXFxcImNyYz1cXFwiLiAgSWYgdGhlIHN0cmluZyBcXFwiY3JjPTBcXFwiIGlzIGZvdW5kLCB0aGVcXG4gIDQwOlxcdFxcdCAgZmlsZXN5c3RlbSBpcyBhIFY0IGZpbGVzeXN0ZW0uICBJZiBubyBzdWNoIHN0cmluZyBpcyBmb3VuZCwgcGxlYXNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjM4LjQyNTUwNDc5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjU1NDA5MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2Ugb3B0aW9uczpcblxuKipLY29uZmlnIERpdmUgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBgQ09NUEFDVElPTmAgYW5kIGBTV0FQYC4gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgdGhleSdyZSBzZXQgcHJvcGVybHkgb3IgaGF2ZSB0aGUgY29ycmVjdCBkZXBlbmRlbmNpZXMgc2V0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgaGVyZSBhcmUgY3JpdGljYWwsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aXRoIHRoZSBzeXN0ZW0gSSBoYXZlIGluIG1pbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgYXNzb2NpYXRlZCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGNydWNpYWwuIENoZWNraW5nIHRoZSBLY29uZmlnIGlzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDM5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1Mjo0Mi4wODA5MTY2ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDQxNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT01QQUNUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTYyNT1jb25maWcgQkFMTE9PTl9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjM2LSMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cXG5tbS9LY29uZmlnOjYzNzpjb25maWcgQ09NUEFDVElPTlxcbm1tL0tjb25maWctNjM4LVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgY29tcGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NDIuMTMxOTYyMDQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMjg4NjA4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgcHJvYmFibHkgd2l0aGluIGBtbS9LY29uZmlnYC4gQmFzZWQgb24gZXhwZXJpZW5jZSB3aXRoIHRoaXMgcGFydGljdWxhciBhcmVhLCBteSBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZCB0aGUgdmljaW5pdHkgb2YgbGluZSA2MzUuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IGNhdGNoZXMgbXkgZXllLiBJdCdzIGEgYnJvYWQgc3RhcnRpbmcgcG9pbnQsIGJ1dCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCB0aGUgcGVydGluZW50IG9wdGlvbnMvbG9naWMgYXJlIGZyZXF1ZW50bHkgZ3JvdXBlZCBpbiB0aGUgbWlkLXJhbmdlIG9mIHRoZXNlIGZpbGVzLCBnaXZlbiB0aGUgYnJlYWR0aCBvZiBjb25maWd1cmFibGUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBzb3J0IG9mIG1hY3JvIGRlZmluaXRpb24sIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IHN0YXRlbWVudCBmb3IgdGhlIGZlYXR1cmUgb2YgaW50ZXJlc3QuIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjQ2LjQ2MDgyODU1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA1MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdCNcXG4gNjM2OlxcdCMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cXG4gNjM3OlxcdGNvbmZpZyBDT01QQUNUSU9OXFxuIDYzODpcXHRcXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cXFwiXFxuIDYzOTpcXHRcXHRkZWZhdWx0IHlcXG4gNjQwOlxcdFxcdHNlbGVjdCBNSUdSQVRJT05cXG4gNjQxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDY0MjpcXHRcXHRoZWxwXFxuIDY0MzpcXHRcXHQgIENvbXBhY3Rpb24gaXMgdGhlIG9ubHkgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50IHRvIGZvcm1cXG4gNjQ0OlxcdFxcdCAgaGlnaCBvcmRlciAobGFyZ2VyIHBoeXNpY2FsbHkgY29udGlndW91cykgbWVtb3J5IGJsb2Nrc1xcbiA2NDU6XFx0XFx0ICByZWxpYWJseS4gVGhlIHBhZ2UgYWxsb2NhdG9yIHJlbGllcyBvbiBjb21wYWN0aW9uIGhlYXZpbHkgYW5kXFxuIDY0NjpcXHRcXHQgIHRoZSBsYWNrIG9mIHRoZSBmZWF0dXJlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgT09NIGtpbGxlclxcbiA2NDc6XFx0XFx0ICBpbnZvY2F0aW9ucyBmb3IgaGlnaCBvcmRlciBtZW1vcnkgcmVxdWVzdHMuIFlvdSBzaG91bGRuJ3RcXG4gNjQ4OlxcdFxcdCAgZGlzYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgdGhlcmUgcmVhbGx5IGlzIGEgc3Ryb25nIHJlYXNvbiBmb3JcXG4gNjQ5OlxcdFxcdCAgaXQgYW5kIHRoZW4gd2Ugd291bGQgYmUgcmVhbGx5IGludGVyZXN0ZWQgdG8gaGVhciBhYm91dCB0aGF0IGF0XFxuIDY1MDpcXHRcXHQgIGxpbnV4LW1tQGt2YWNrLm9yZy5cXG4gNjUxOlxcdFxcbiA2NTI6XFx0Y29uZmlnIENPTVBBQ1RfVU5FVklDVEFCTEVfREVGQVVMVFxcbiA2NTM6XFx0XFx0aW50XFxuIDY1NDpcXHRcXHRkZXBlbmRzIG9uIENPTVBBQ1RJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NDYuNDYxODM2MDUxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjA1NzM4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgU1dBUCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYFNXQVBgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbiBpcyB3aXRoaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwncyBzdHJ1Y3R1cmUsIEknbGwgc3RhcnQgdGhlcmUuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgdGhlbiBzZWFyY2ggdGhyb3VnaCBpdCwgbG9va2luZyBmb3IgdGhlIGBTV0FQYCBvcHRpb24gZGVmaW5pdGlvbi4gSSBleHBlY3QgdGhpcyB3aWxsIHJldmVhbCB3aGV0aGVyIGl0J3MgYSBkaXJlY3Qgb3B0aW9uLCBhIGRlcGVuZGVuY3kgb2YgYW5vdGhlciBvcHRpb24sIG9yIGEgZ2VuZXJhbCBjb25maWd1cmF0aW9uIHZhbHVlLiBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgZGV0YWlscyBuZWNlc3NhcnkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgxNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NDkuNjIyNDEzMTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI2NTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NDkuNjczNjgyNjQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2ODgzMjg5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgRnVuY3Rpb24gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgcmVjZW50IG1vZGlmaWNhdGlvbnMsIHNvIEknbGwgc3RhcnQgYnkgcGlucG9pbnRpbmcgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGFsdGVyZWQgb3IgZnJlc2hseSBpbnRyb2R1Y2VkLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbXBhY3RlZC4gSSBzZWUgdGhlIGZvbGxvd2luZyBhcyBsaWtlbHkgYXJlYXMgb2YgaW50ZXJlc3Q6XG5cbiogICBgY3VycmVudF9pc19rc3dhcGRgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIHRvIG1vbml0b3IgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMsIGFzIGtzd2FwZCBpcyB0aGUga2VybmVsJ3MgYmFja2dyb3VuZCBtZW1vcnkgcmVjbGFtYXRpb24gcHJvY2Vzcy5cbiogICBTaW1pbGFybHksIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAgZnJvbSBgbW0vY29tcGFjdGlvbi5jYCBpcyBnb2luZyB0byBiZSByZWxldmFudCwgc2luY2Uga2NvbXBhY3RkIG1hbmFnZXMgbWVtb3J5IGNvbXBhY3Rpb24sIHNvIHRoZSBpbnRlcmZhY2UgdG8gdGhpcyBwcm9jZXNzIGlzIGNyaXRpY2FsLlxuKiAgIGBpb21hcF93cml0ZXBhZ2VzYCBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AgaXMgaW1wb3J0YW50IHRvIGV4YW1pbmUsIGVzcGVjaWFsbHkgd2l0aCBpdHMgaW1wYWN0IG9uIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTywgYXMgZmlsZSBzeXN0ZW0gcGVyZm9ybWFuY2Ugb2Z0ZW4gc2VlcyBpbXByb3ZlbWVudCBoZXJlLlxuKiAgIEFuZCBmaW5hbGx5LCBgeGZzX2J0cmVlX3NwbGl0YCB3aXRoaW4gYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgLiBXYWl0LCBpcyB0aGlzIHN0YXRpYyBvciBub24tc3RhdGljPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUsIGJlY2F1c2UgdGhhdCB3aWxsIHNpZ25pZmljYW50bHkgYWZmZWN0IHRoZSBpbXBsaWNhdGlvbnMuIEkgdGhpbmsgSSdsbCBsb29rIGFyb3VuZCBsaW5lIDMwNDIgaW4gYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgIHRvIGNsYXJpZnkuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBCLXRyZWUgc3BsaXR0aW5nIGlzIGZ1bmRhbWVudGFsIHRvIFhGUydzIHNjYWxhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNzUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NTQuMzYyMDE0MjM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNDA6XFx0ICogd2UgaGF2ZSB0byB3b3JyeSBhYm91dC5cXG4zMDQxOlxcdCAqL1xcbjMwNDI6XFx0U1RBVElDIGludFxcdFxcdFxcdFxcdFxcdC8qIGVycm9yICovXFxuMzA0MzpcXHR4ZnNfYnRyZWVfc3BsaXQoXFxuMzA0NDpcXHRcXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clxcdCpjdXIsXFxuMzA0NTpcXHRcXHRpbnRcXHRcXHRcXHRsZXZlbCxcXG4zMDQ2OlxcdFxcdHVuaW9uIHhmc19idHJlZV9wdHJcXHQqcHRycCxcXG4zMDQ3OlxcdFxcdHVuaW9uIHhmc19idHJlZV9rZXlcXHQqa2V5LFxcbjMwNDg6XFx0XFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHQqKmN1cnAsXFxuMzA0OTpcXHRcXHRpbnRcXHRcXHRcXHQqc3RhdClcXHRcXHQvKiBzdWNjZXNzL2ZhaWx1cmUgKi9cXG4zMDUwOlxcdHtcXG4zMDUxOlxcdFxcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1xcdGFyZ3M7XFxuMzA1MjpcXHRcXHRERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTtcXG4zMDUzOlxcdFxcbjMwNTQ6XFx0XFx0aWYgKCF4ZnNfYnRyZWVfaXNfYm1hcChjdXItXFx1MDAzZWJjX29wcykgfHxcXG4zMDU1OlxcdFxcdCAgICBjdXItXFx1MDAzZWJjX3RwLVxcdTAwM2V0X2hpZ2hlc3RfYWdubyA9PSBOVUxMQUdOVU1CRVIpXFxuMzA1NjpcXHRcXHRcXHRyZXR1cm4gX194ZnNfYnRyZWVfc3BsaXQoY3VyLCBsZXZlbCwgcHRycCwga2V5LCBjdXJwLCBzdGF0KTtcXG4zMDU3OlxcdFxcbjMwNTg6XFx0XFx0YXJncy5jdXIgPSBjdXI7XFxuMzA1OTpcXHRcXHRhcmdzLmxldmVsID0gbGV2ZWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjU0LjM2MjIxNjIxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjkxNjcxMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBLZXJuZWwgU3ltYm9sIExvY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBub3RpbmcgdGhlIGxvY2F0aW9ucyBvZiBhIGZldyBrZXkga2VybmVsIHN5bWJvbHMuIEkgc2VlIHRoYXQgYGN1cnJlbnRfaXNfa3N3YXBkYCByZXNpZGVzIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGV4cG9ydGVkLCBzbyBpdCdzIGFjY2Vzc2libGUgb3V0c2lkZSB0aGF0IHNwZWNpZmljIGZpbGUsIGFuZCBpbXBvcnRhbnRseSwgaXQncyB1bmRlciB0aGUgR1BMIGxpY2Vuc2UgYW5kIGlzIG5vdCBzdGF0aWMgd2hpY2ggbWVhbnMgZXh0ZXJuYWwgbW9kdWxlcyBjYW4gdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uLiBOZXh0LCBJJ20gY2hlY2tpbmcgYGN1cnJlbnRfaXNfa2NvbXBhY3RkYCwgd2hpY2ggSSBmaW5kIGluIGBtbS9jb21wYWN0aW9uLmNgIOKAkyBhZ2FpbiwgZXhwb3J0ZWQsIEdQTCwgYW5kIG5vbi1zdGF0aWMuIEZpbmFsbHksIEknbSBsb29raW5nIGF0IGBpb21hcF93cml0ZXBhZ2VzYCwgZGVmaW5lZCBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AuIFRoaXMgdG9vIGlzIGV4cG9ydGVkLCBhbmQgaXQncyBhbHNvIG5vbi1zdGF0aWMuIE5vdywgSSBzaG91bGQgaW52ZXN0aWdhdGUgYGlvbWFwX3dyaXRlcGFnZXNgIG1vcmUgY2xvc2VseTsgSSdsbCBjaGVjayBpdHMgZGVjbGFyYXRpb24gYW5kLCBjcnVjaWFsbHksIGhvdyBpdCdzIGV4cG9ydGVkIHRvIHVuZGVyc3RhbmQgaXRzIHZpc2liaWxpdHkgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1Mjo1Ny42NTM4OTAxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MDg0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3dyaXRlcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0yMDY5PWludFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjA3MDppb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMDcxLXtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjEwMC19XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyMTAxOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3dyaXRlcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1Mjo1Ny44NDg5ODA3MDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4NDA4NzQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWNlbnQgQ29kZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGEgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcgdGhhdCdzIGNoYW5nZWQuIEZpcnN0LCBJJ20gbm90aW5nIHRoYXQgdGhlcmUgYXJlIGEgZmV3IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLiBJbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGl0J3MgYGlvbWFwX3dyaXRlcGFnZXNgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgYnVmZmVyZWQgSS9PLiBUaGVuLCBpbiB0aGUgWEZTIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgLCBJIHNlZSBib3RoIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYCBhbmQgdGhlIHN0YXRpYyBmdW5jdGlvbiBgeGZzX2J0cmVlX3NwbGl0YCB3ZXJlIG1vZGlmaWVkLiBUaGF0IGNvdWxkIGJlIHNpZ25pZmljYW50IGZvciBiLXRyZWUgcGVyZm9ybWFuY2UuIEZpbmFsbHksIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIEknbSBzZWVpbmcgY2hhbmdlcyByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltIGFuZCBjb21wYWN0aW9uOiBzcGVjaWZpY2FsbHksIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAgYW5kIGBrY29tcGFjdGRgIGluIGBtbS9jb21wYWN0aW9uLmNgLCBhbmQgYGN1cnJlbnRfaXNfa3N3YXBkYCBhbmQgYGtzd2FwZGAgaW4gYG1tL3Ztc2Nhbi5jYC5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEl0J3MgbWFya2VkIGFzIFwiV29ydGhGdXp6aW5nXCIgd2hpY2ggbWVhbnMgdGhlcmUgYXJlIHJlYWwgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIG1lbW9yeSByZWNsYWltL2NvbXBhY3Rpb24gKHByb2JhYmx5IHRoZSBiaWdnZXN0IGNoYW5nZSkgYW5kIHNvbWUgaW50ZXJlc3RpbmcgdXBkYXRlcyB0byBJT01BUCB3cml0ZWJhY2sgYW5kIFhGUyBiLXRyZWUgaGFuZGxpbmcuIFRoYXQgSU9NQVAgdGhpbmcgaXMgYWx3YXlzIGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IHdoZW4gaXQgZGVhbHMgd2l0aCB3cml0ZWJhY2suXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BlY2lmaWNhbGx5OiBgaW9tYXBfd3JpdGVwYWdlc2AsIGBjdXJyZW50X2lzX2tzd2FwZGAsIGFuZCBgY3VycmVudF9pc19rY29tcGFjdGRgLCB3aGljaCBhbGlnbnMgd2l0aCB0aG9zZSBmdW5jdGlvbiBjYWxsIG1vZGlmaWNhdGlvbnMuIFNvIHRoYXQncyB0aGUgY29yZSBmb2N1cyBvZiB0aGUgY2hhbmdlcy5cblxuRmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBDT01QQUNUSU9OYCwgYFNXQVBgLCBgRlNfSU9NQVBgLCBhbmQgYFhGU19GU2AuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgbGlzdCDigJMgd2Uga25vdyB3aGF0J3MgcmVxdWlyZWQgZm9yIHRoZXNlIGZlYXR1cmVzLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkIHRoYXQgSSd2ZSBnb3QgdGhlIGxheSBvZiB0aGUgbGFuZCBoZXJlLiBJJ20gZ29pbmcgdG8ga2ljayBvZmYgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDM5LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzowNi44MzMwNzIzODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM5NDAyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX3dyaXRlcGFnZXNcIixcbiAgICBcImN1cnJlbnRfaXNfa3N3YXBkXCIsXG4gICAgXCJjdXJyZW50X2lzX2tjb21wYWN0ZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX3dyaXRlcGFnZXNcIixcbiAgICBcImN1cnJlbnRfaXNfa3N3YXBkXCIsXG4gICAgXCJjdXJyZW50X2lzX2tjb21wYWN0ZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUzOjA2LjkxNzQ3NTA4MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNjEzNzc3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzowNi45MTc5OTg5MDFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODM2MDg0ODA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBkYXRhIGJ1ZmZlciBtYW5pcHVsYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOWVkOTlkMmRkYWYxOWNjYjIwMDhhYmE0NmQ5Zjg1YTgwNTM5MGY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwOTo1MTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5pbmRleCAwYTVlYmZkYTkwZjEyLi42MzA2Y2E3NDdmM2JhIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTIwNzcsOCArMjA3Nyw3IEBAIGlvbWFwX3dyaXRlcGFnZXMoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYylcbiBcdCAqIFdyaXRlYmFjayBmcm9tIHJlY2xhaW0gY29udGV4dCBzaG91bGQgbmV2ZXIgaGFwcGVuIGV4Y2VwdCBpbiB0aGUgY2FzZVxuIFx0ICogb2YgYSBWTSByZWdyZXNzaW9uIHNvIHdhcm4gYWJvdXQgaXQgYW5kIHJlZnVzZSB0byB3cml0ZSB0aGUgZGF0YS5cbiBcdCAqL1xuLVx0aWYgKFdBUk5fT05fT05DRSgoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKSkgPT1cbi1cdFx0XHRQRl9NRU1BTExPQykpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCB3cGMtXHUwMDNld2JjLCBmb2xpbywgXHUwMDI2ZXJyb3IpKSkge1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXG5pbmRleCA2MGVmN2YwOGIxZDMwLi42NzM4ZDlkMTUxMWJjIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xuQEAgLTI5OTQsNyArMjk5NCw2IEBAIHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncyB7XG4gXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0KipjdXJwO1xuIFx0aW50XHRcdFx0KnN0YXQ7XHRcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xuIFx0aW50XHRcdFx0cmVzdWx0O1xuLVx0Ym9vbFx0XHRcdGtzd2FwZDtcdC8qIGFsbG9jYXRpb24gaW4ga3N3YXBkIGNvbnRleHQgKi9cbiBcdHN0cnVjdCBjb21wbGV0aW9uXHQqZG9uZTtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0d29yaztcbiB9O1xuQEAgLTMwMDgsMzMgKzMwMDcsMTggQEAgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcihcbiB7XG4gXHRzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3NcdCphcmdzID0gY29udGFpbmVyX29mKHdvcmssXG4gXHRcdFx0XHRcdFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzLCB3b3JrKTtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0cGZsYWdzO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRuZXdfcGZsYWdzID0gMDtcbi1cbi1cdC8qXG4tXHQgKiB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb250ZXh0IGhlcmUsIGJ1dCBtYXkgYWxzbyBiZSBkb2luZyB3b3JrXG4tXHQgKiBpbiBrc3dhcGQgY29udGV4dCwgYW5kIGhlbmNlIHdlIG1heSBuZWVkIHRvIGluaGVyaXQgdGhhdCBzdGF0ZVxuLVx0ICogdGVtcG9yYXJpbHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgYmxvY2sgd2FpdGluZyBmb3IgbWVtb3J5IHJlY2xhaW1cbi1cdCAqIGluIGFueSB3YXkuXG4tXHQgKi9cbi1cdGlmIChhcmdzLVx1MDAzZWtzd2FwZClcbi1cdFx0bmV3X3BmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcbi1cbi1cdGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChcdTAwMjZwZmxhZ3MsIG5ld19wZmxhZ3MpO1xuIFx0eGZzX3RyYW5zX3NldF9jb250ZXh0KGFyZ3MtXHUwMDNlY3VyLVx1MDAzZWJjX3RwKTtcbiBcbiBcdGFyZ3MtXHUwMDNlcmVzdWx0ID0gX194ZnNfYnRyZWVfc3BsaXQoYXJncy1cdTAwM2VjdXIsIGFyZ3MtXHUwMDNlbGV2ZWwsIGFyZ3MtXHUwMDNlcHRycCxcbiBcdFx0XHRcdFx0IGFyZ3MtXHUwMDNla2V5LCBhcmdzLVx1MDAzZWN1cnAsIGFyZ3MtXHUwMDNlc3RhdCk7XG4gXG4gXHR4ZnNfdHJhbnNfY2xlYXJfY29udGV4dChhcmdzLVx1MDAzZWN1ci1cdTAwM2ViY190cCk7XG4tXHRjdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKFx1MDAyNnBmbGFncywgbmV3X3BmbGFncyk7XG4gXG4gXHQvKlxuIFx0ICogRG8gbm90IGFjY2VzcyBhcmdzIGFmdGVyIGNvbXBsZXRlKCkgaGFzIHJ1biBoZXJlLiBXZSBkb24ndCBvd24gYXJnc1xuIFx0ICogYW5kIHRoZSBvd25lciBtYXkgcnVuIGFuZCBmcmVlIGFyZ3MgYmVmb3JlIHdlIHJldHVybiBoZXJlLlxuIFx0ICovXG4gXHRjb21wbGV0ZShhcmdzLVx1MDAzZWRvbmUpO1xuLVxuIH1cbiBcbiAvKlxuQEAgLTMwNzgsNyArMzA2Miw3IEBAIHhmc19idHJlZV9zcGxpdChcbiBcdGFyZ3MuY3VycCA9IGN1cnA7XG4gXHRhcmdzLnN0YXQgPSBzdGF0O1xuIFx0YXJncy5kb25lID0gXHUwMDI2ZG9uZTtcbi1cdGFyZ3Mua3N3YXBkID0gY3VycmVudF9pc19rc3dhcGQoKTtcbitcbiBcdElOSVRfV09SS19PTlNUQUNLKFx1MDAyNmFyZ3Mud29yaywgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcik7XG4gXHRxdWV1ZV93b3JrKHhmc19hbGxvY193cSwgXHUwMDI2YXJncy53b3JrKTtcbiBcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZG9uZSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oIGIvZnMveGZzL3hmc19wbGF0Zm9ybS5oXG5pbmRleCA1ZDU0MmU5NWZlNDQ0Li5hNDlmYTE1OTg5NGRlIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oXG4rKysgYi9mcy94ZnMveGZzX3BsYXRmb3JtLmhcbkBAIC0xMTUsMTAgKzExNSw2IEBAIHR5cGVkZWYgX191MzJcdFx0XHR4ZnNfbmxpbmtfdDtcbiAjZGVmaW5lIHhmc19ibG9ja2djX3NlY3NcdHhmc19wYXJhbXMuYmxvY2tnY190aW1lci52YWxcbiBcbiAjZGVmaW5lIGN1cnJlbnRfY3B1KClcdFx0KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpXG4tI2RlZmluZSBjdXJyZW50X3NldF9mbGFnc19uZXN0ZWQoc3AsIGYpXHRcdFxcXG4tXHRcdCgqKHNwKSA9IGN1cnJlbnQtXHUwMDNlZmxhZ3MsIGN1cnJlbnQtXHUwMDNlZmxhZ3MgfD0gKGYpKVxuLSNkZWZpbmUgY3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZChzcCwgZilcdFxcXG4tXHRcdChjdXJyZW50LVx1MDAzZWZsYWdzID0gKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiB+KGYpKSB8ICgqKHNwKSBcdTAwMjYgKGYpKSkpXG4gXG4gI2RlZmluZSBOQkJZXHRcdDhcdFx0LyogbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUgKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG5pbmRleCA2NmEyZjcwZTllMDE5Li42OTFjMDlmMGE2OTcxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG5AQCAtODEsMTAgKzgxLDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBhY3RfZ2FwKHVuc2lnbmVkIGludCBvcmRlcilcbiBcdHJldHVybiBtaW4oMlVMIFx1MDAzY1x1MDAzYyBvcmRlciwgQ09NUEFDVF9DTFVTVEVSX01BWCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG4te1xuLVx0cmV0dXJuIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tDT01QQUNURDtcbi19XG4gXG4gI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG4gXG5AQCAtMTAzLDcgKzk5LDcgQEAgZXh0ZXJuIHZvaWQgY29tcGFjdGlvbl9kZWZlcl9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFxuIGJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbiBcdFx0XHRcdFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG4tXG4rYm9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKTtcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3J1bihpbnQgbmlkKTtcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3N0b3AoaW50IG5pZCk7XG4gZXh0ZXJuIHZvaWQgd2FrZXVwX2tjb21wYWN0ZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpO1xuQEAgLTEyMCw2ICsxMTYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQga2NvbXBhY3RkX3J1bihpbnQgbmlkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCA4YjNkNDdhMzI1Y2NhLi5lYjEyZmY0Y2VhNmMyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xODA4LDggKzE4MDgsOCBAQCBleHRlcm4gc3RydWN0IHBpZCAqY2FkX3BpZDtcbiAjZGVmaW5lIFBGX1VTRURfTUFUSFx0XHQweDAwMDAyMDAwXHQvKiBJZiB1bnNldCB0aGUgZnB1IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAqL1xuICNkZWZpbmUgUEZfVVNFUl9XT1JLRVJcdFx0MHgwMDAwNDAwMFx0LyogS2VybmVsIHRocmVhZCBjbG9uZWQgZnJvbSB1c2Vyc3BhY2UgdGhyZWFkICovXG4gI2RlZmluZSBQRl9OT0ZSRUVaRVx0XHQweDAwMDA4MDAwXHQvKiBUaGlzIHRocmVhZCBzaG91bGQgbm90IGJlIGZyb3plbiAqL1xuLSNkZWZpbmUgUEZfS0NPTVBBQ1REXHRcdDB4MDAwMTAwMDBcdC8qIEkgYW0ga2NvbXBhY3RkICovXG4tI2RlZmluZSBQRl9LU1dBUERcdFx0MHgwMDAyMDAwMFx0LyogSSBhbSBrc3dhcGQgKi9cbisjZGVmaW5lIFBGX19IT0xFX18wMDAxMDAwMFx0MHgwMDAxMDAwMFxuKyNkZWZpbmUgUEZfX0hPTEVfXzAwMDIwMDAwXHQweDAwMDIwMDAwXG4gI2RlZmluZSBQRl9NRU1BTExPQ19OT0ZTXHQweDAwMDQwMDAwXHQvKiBBbGwgYWxsb2NhdGlvbnMgaW5oZXJpdCBHRlBfTk9GUy4gU2VlIG1lbWFsbG9jX25mc19zYXZlKCkgKi9cbiAjZGVmaW5lIFBGX01FTUFMTE9DX05PSU9cdDB4MDAwODAwMDBcdC8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0lPLiBTZWUgbWVtYWxsb2Nfbm9pb19zYXZlKCkgKi9cbiAjZGVmaW5lIFBGX0xPQ0FMX1RIUk9UVExFXHQweDAwMTAwMDAwXHQvKiBUaHJvdHRsZSB3cml0ZXMgb25seSBhZ2FpbnN0IHRoZSBiZGkgSSB3cml0ZSB0byxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCBhNzJlY2YxMmMwMGRiLi5mYzI5MGUyOWU0YTllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMjUsMTIgKzI1LDYgQEBcbiAjZGVmaW5lIFNXQVBfRkxBR1NfVkFMSURcdChTV0FQX0ZMQUdfUFJJT19NQVNLIHwgU1dBUF9GTEFHX1BSRUZFUiB8IFxcXG4gXHRcdFx0XHQgU1dBUF9GTEFHX0RJU0NBUkQgfCBTV0FQX0ZMQUdfRElTQ0FSRF9PTkNFIHwgXFxcbiBcdFx0XHRcdCBTV0FQX0ZMQUdfRElTQ0FSRF9QQUdFUylcbi1cbi1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxuLXtcbi1cdHJldHVybiBjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LU1dBUEQ7XG4tfVxuLVxuIC8qXG4gICogTUFYX1NXQVBGSUxFUyBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2FwdHlwZXM6IHRoaW5ncyB3aGljaCBjYW5cbiAgKiBiZSBzd2FwcGVkIHRvLiAgVGhlIHN3YXAgdHlwZSBhbmQgdGhlIG9mZnNldCBpbnRvIHRoYXQgc3dhcCB0eXBlIGFyZVxuQEAgLTMzOSw2ICszMzMsNyBAQCB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTtcbiBcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKTtcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XG4rYm9vbCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKTtcbiBcbiAjaWZkZWYgQ09ORklHX1NXQVBcbiBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZSxcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGEwNDk0MTU1MTJjNjcuLjQ5OTRlMjAwYmJlY2QgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTMxOTcsNyArMzE5Nyw2IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApXG4gXHRsb25nIGRlZmF1bHRfdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSFBBR0VfRlJBR19DSEVDS19JTlRFUlZBTF9NU0VDKTtcbiBcdGxvbmcgdGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcbiBcbi1cdGN1cnJlbnQtXHUwMDNlZmxhZ3MgfD0gUEZfS0NPTVBBQ1REO1xuIFx0c2V0X2ZyZWV6YWJsZSgpO1xuIFxuIFx0cGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciA9IDA7XG5AQCAtMzI1NCwxMSArMzI1MywxNSBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxuIFx0XHRcdHBnZGF0LVx1MDAzZXByb2FjdGl2ZV9jb21wYWN0X3RyaWdnZXIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfS0NPTVBBQ1REO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcbit7XG4rXHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rY29tcGFjdGQpO1xuK1xuIC8qXG4gICogVGhpcyBrY29tcGFjdGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxuICAqIE9uIG5vZGUtaG90LWFkZCwga2NvbXBhY3RkIHdpbGwgbW92ZWQgdG8gcHJvcGVyIGNwdXMgaWYgY3B1cyBhcmUgaG90LWFkZGVkLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJmMjc4NmM3MjQ3ZDQuLjlmOTk2MzNkN2RjMWUgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC03NTM5LDcgKzc1MzksNyBAQCBzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxuIFx0ICogdXMgZnJvbSByZWN1cnNpdmVseSB0cnlpbmcgdG8gZnJlZSBtb3JlIG1lbW9yeSBhcyB3ZSdyZVxuIFx0ICogdHJ5aW5nIHRvIGZyZWUgdGhlIGZpcnN0IHBpZWNlIG9mIG1lbW9yeSBpbiB0aGUgZmlyc3QgcGxhY2UpLlxuIFx0ICovXG4tXHR0c2stXHUwMDNlZmxhZ3MgfD0gUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQ7XG4rXHR0c2stXHUwMDNlZmxhZ3MgfD0gUEZfTUVNQUxMT0M7XG4gXHRzZXRfZnJlZXphYmxlKCk7XG4gXG4gXHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5AQCAtNzU4OSwxMSArNzU4OSwxNyBAQCBzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxuIFx0XHRcdGdvdG8ga3N3YXBkX3RyeV9zbGVlcDtcbiBcdH1cbiBcbi1cdHRzay1cdTAwM2VmbGFncyBcdTAwMjY9IH4oUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpO1xuK1x0dHNrLVx1MDAzZWZsYWdzIFx1MDAyNj0gflBGX01FTUFMTE9DO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcbit7XG4rXHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtzd2FwZDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rc3dhcGQpO1xuK1xuIC8qXG4gICogQSB6b25lIGlzIGxvdyBvbiBmcmVlIG1lbW9yeSBvciB0b28gZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBtZW1vcnkuICBJZlxuICAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaCBiL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmhcbmluZGV4IDc2ZjVlMDI1ZTEwNzYuLjgwN2VmODgxY2UyZDQgMTAwNjQ0XG4tLS0gYS90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXG4rKysgYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXG5AQCAtMzEsOCArMzEsNiBAQFxuICNkZWZpbmUgUEZfSURMRVx0XHRcdFx0MHgwMDAwMDAwMlx0LyogSSBhbSBhbiBJRExFIHRocmVhZCAqL1xuICNkZWZpbmUgUEZfSU9fV09SS0VSXHRcdFx0MHgwMDAwMDAxMFx0LyogVGFzayBpcyBhbiBJTyB3b3JrZXIgKi9cbiAjZGVmaW5lIFBGX1dRX1dPUktFUlx0XHRcdDB4MDAwMDAwMjBcdC8qIEknbSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi9cbi0jZGVmaW5lIFBGX0tDT01QQUNURFx0XHRcdDB4MDAwMTAwMDAgICAgICAvKiBJIGFtIGtjb21wYWN0ZCAqL1xuLSNkZWZpbmUgUEZfS1NXQVBEXHRcdFx0MHgwMDAyMDAwMCAgICAgIC8qIEkgYW0ga3N3YXBkICovXG4gI2RlZmluZSBQRl9LVEhSRUFEXHRcdFx0MHgwMDIwMDAwMFx0LyogSSBhbSBhIGtlcm5lbCB0aHJlYWQgKi9cbiAjZGVmaW5lIFBGX0VYSVRJTkdcdFx0XHQweDAwMDAwMDA0XG4gI2RlZmluZSBDTE9DS19NT05PVE9OSUNcdFx0XHQxXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzowNi45MTgwMDAxMjFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE2MDYxNDYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBSZWZhY3RvcmluZyBUYXNrIEZsYWdzIGFuZCBUaHJlYWQgSWRlbnRpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBmb2N1c2luZyBvbiBjbGVhbmluZyB1cCBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGFuZCBtYW5hZ2VzIHRhc2tzLCBzcGVjaWZpY2FsbHkgYGtjb21wYWN0ZGAgYW5kIGBrc3dhcGRgLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBmbGFncy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBtb3ZpbmcgYXdheSBmcm9tIGRpcmVjdGx5IGNoZWNraW5nIHRhc2sgZmxhZ3MgKGBQRl9NRU1BTExPQ2AsIGBQRl9LU1dBUERgLCBgUEZfS0NPTVBBQ1REYCkgaW4gZmF2b3Igb2YgYSBtb3JlIHRhcmdldGVkIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIHRhc2sgaXMgdGhlIGtjb21wYWN0ZCBvciBrc3dhcGQgdGhyZWFkLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHJlZmFjdG9yaW5nIHRvIG1lLlxuXG5TcGVjaWZpY2FsbHk6XG5cbiogICAqKmBmcy9pb21hcC9idWZmZXJlZC1pby5jYDoqKiBUaGUgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBpcyBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gIFRoZSBvcmlnaW5hbCBjaGVjayBhZ2FpbnN0IGAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpYCBpcyBiZWluZyBzaW1wbGlmaWVkIHRvIGp1c3QgYFBGX01FTUFMTE9DYC4gVGhpcyBzdWdnZXN0cyBhbiBpbXBsaWNpdCBkZXBlbmRlbmN5IG9uIGBQRl9LU1dBUERgIGlzIGJlaW5nIHJlbW92ZWQsIHNvIHdlIHdpbGwgbmVlZCB0byBjaGVjayB0aGUgcmF0aW9uYWxlIGFuZCB0aGUgY29udGV4dC5cbiogICAqKmBmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jYCBhbmQgYGZzL3hmcy94ZnNfcGxhdGZvcm0uaGA6KiogIFhGUyBzZWVtcyB0byBiZSBhIGtleSBiZW5lZmljaWFyeSBvZiB0aGlzIGNoYW5nZS4gSXQncyByZW1vdmluZyBtZW50aW9ucyBvZiBga3N3YXBkYCBmcm9tIGl0cyBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3Jvcywgd2hpY2ggYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZ29hbCBvZiBkZWNvdXBsaW5nIHRoZXNlIHByb2Nlc3NlcyBmcm9tIGRpcmVjdGx5IHVzaW5nIHRoZSBmbGFncy5cbiogICAqKmBpbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaGAsIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAsIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgOioqICBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZXNlIGhlYWRlcnMuICBXZSdyZSBzZWVpbmcgdGhlIHJlbW92YWwgb2YgaW5saW5lIGZ1bmN0aW9ucyBsaWtlIGBjdXJyZW50X2lzX2tjb21wYWN0ZCgpYCBhbmQgYGN1cnJlbnRfaXNfa3N3YXBkKClgLCB3aGljaCBwcmV2aW91c2x5IHJlbGllZCBvbiBkaXJlY3QgZmxhZyBjaGVja2luZy4gIFRoZXNlIGFyZSBiZWluZyByZXBsYWNlZCB3aXRoIGRlY2xhcmF0aW9ucyBvZiBtb3JlIGdlbmVyaWMgYGJvb2xgIGZ1bmN0aW9ucy4gIEltcG9ydGFudGx5LCB0aGUgdW5kZXJseWluZyBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgYml0IGZsYWdzIGFyZSBiZWluZyByZW1hcHBlZCB0byBcImhvbGVcIiBmbGFncywgd2hpY2ggaW1wbGllcyB0aGVzZSBmbGFncyBtYXkgYmUgZnJlZWQgdXAgZm9yIG90aGVyIHVzZXMuXG4qICAgKipgbW0vY29tcGFjdGlvbi5jYCBhbmQgYG1tL3Ztc2Nhbi5jYDoqKiBUaGlzIGlzIHdoZXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGlmdCBvY2N1cnMuICBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSBmbGFncywgdGhlIGNvZGUgbm93IHV0aWxpemVzIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIHRocmVhZCBpcyB0aGUga2NvbXBhY3RkIG9yIGtzd2FwZCBrZXJuZWwgdGhyZWFkLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gY2hlY2sgaG93IGBrdGhyZWFkX2Z1bmNgIHdvcmtzLiBUaGF0J3MgYSBuZXcgYWJzdHJhY3Rpb24gaGVyZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdG8gYmUgc3VyZSB0aGlzIGlzIGNvcnJlY3QuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIGNvZGUncyBiZWhhdmlvciByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbXBhY3Rpb24sIGFuZCBzd2FwcGluZywgbm93IHRoYXQgZmxhZ3MgYXJlIG5vdCBkaXJlY3RseSBlbXBsb3llZC5cbiogICAqKmB0b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oYDoqKiAgVGhlIEJQRiB0b29scyBhcmUgYWxzbyBiZWluZyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBmbGFnIGRlZmluaXRpb25zIGFuZCBob3BlZnVsbHkgdGhlIHRocmVhZCBpZGVudGlmaWNhdGlvbiBjaGFuZ2UuXG5cblNvIHRoZSBtYWluIHRocnVzdCBhcHBlYXJzIHRvIGJlOlxuXG4xLiAgKipSZWZhY3RvcmluZyBUaHJlYWQgSWRlbnRpZmljYXRpb246KiogIE1vdmluZyBhd2F5IGZyb20gZGlyZWN0IGZsYWcgY2hlY2tzIChgUEZfS0NPTVBBQ1REYCwgYFBGX0tTV0FQRGApIHRvd2FyZHMgYSBkZWRpY2F0ZWQgZnVuY3Rpb24gKGBrdGhyZWFkX2Z1bmMoY3VycmVudClgKSB0byBpZGVudGlmeSBrY29tcGFjdGQgYW5kIGtzd2FwZCB0aHJlYWRzLlxuMi4gICoqRmxhZyBDb25zb2xpZGF0aW9uL1JlLXVzZSoqOiBCeSBjaGFuZ2luZyB0aGUgZXhpc3RpbmcgZmxhZ3MgdG8gYFBGX19IT0xFX18wMDAxMDAwMGAgYW5kIGBQRl9fSE9MRV9fMDAwMjAwMDBgIHRoZSBtZW1vcnkgYXJlYSBpcyBmcmVlZCB1cCBmb3IgcmUtdXNlLlxuMy4gICoqRW5jYXBzdWxhdGlvbjoqKiBJbXByb3ZlZCBlbmNhcHN1bGF0aW9uIGJ5IGNlbnRyYWxpemluZyB0aGUgdGhyZWFkIGlkZW50aXR5IGxvZ2ljLCBpbXByb3ZpbmcgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYGt0aHJlYWRfZnVuYyh0c2spYCBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIGdyZXAgZm9yIGl0cyBkZWZpbml0aW9uIGFuZCB1c2FnZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwgdG8gdmVyaWZ5IHRoaXMgYWJzdHJhY3Rpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zLiBJIG11c3QgdW5kZXJzdGFuZCBpZiB0aGlzIG5ldyBmdW5jdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgZWZmaWNpZW50LCBhbmQgaWYgaXQgYWZmZWN0cyBob3cgdGhlc2UgcHJvY2Vzc2VzIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gV2Ugd2lsbCBuZWVkIHRvIGNoZWNrIHdoYXQgaW1wbGljYXRpb25zIHRoaXMgaGFzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzoxNS4wNzg2MTg2OTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ5NDEzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3RocmVhZF9mdW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYz01OTY9c3RhdGljIHN0cnVjdCBzaW1wbGVfd29ya19xdWV1ZSAqZ2V0X2N1cnJlbnRfdGhyZWFkX3dvcmtfcXVldWUodm9pZClcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYy02MDYtXFxuZHJpdmVycy9tZC9kbS12ZG8vZnVubmVsLXdvcmtxdWV1ZS5jOjYwNzpcXHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpICE9IHdvcmtfcXVldWVfcnVubmVyKVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYy02MDgtXFx0XFx0LyogTm90IGEgVkRPIHdvcmsgcXVldWUgdGhyZWFkLiAqL1xcbi0tXFxuZnMvbmZzZC9uZnNzdmMuYz01OTU9c3RydWN0IHN2Y19ycXN0ICpuZnNkX2N1cnJlbnRfcnFzdCh2b2lkKVxcbmZzL25mc2QvbmZzc3ZjLmMtNTk2LXtcXG5mcy9uZnNkL25mc3N2Yy5jOjU5NzpcXHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpID09IG5mc2QpXFxuZnMvbmZzZC9uZnNzdmMuYy01OTgtXFx0XFx0cmV0dXJuIGt0aHJlYWRfZGF0YShjdXJyZW50KTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3RocmVhZC5oPTExMj1ib29sIGt0aHJlYWRfZnJlZXphYmxlX3Nob3VsZF9zdG9wKGJvb2wgKndhc19mcm96ZW4pO1xcbmluY2x1ZGUvbGludXgva3RocmVhZC5oOjExMzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcXG5pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaC0xMTQtdm9pZCAqa3RocmVhZF9kYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqayk7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcCk7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTIxMS0vKipcXG5rZXJuZWwva3RocmVhZC5jOjIxMjogKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXFxua2VybmVsL2t0aHJlYWQuYy0yMTMtICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxcbi0tXFxua2VybmVsL2t0aHJlYWQuYy0yMTYtICovXFxua2VybmVsL2t0aHJlYWQuYzoyMTc6dm9pZCAqa3RocmVhZF9mdW5jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG5rZXJuZWwva3RocmVhZC5jLTIxOC17XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTIyMy19XFxua2VybmVsL2t0aHJlYWQuYzoyMjQ6RVhQT1JUX1NZTUJPTF9HUEwoa3RocmVhZF9mdW5jKTtcXG5rZXJuZWwva3RocmVhZC5jLTIyNS1cXG4tLVxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaD0xMTg9c3RhdGljIGlubGluZSB2b2lkIG5iY29uX2t0aHJlYWRfd2FrZShzdHJ1Y3QgY29uc29sZSAqY29uKVxcbi0tXFxua2VybmVsL3ByaW50ay9pbnRlcm5hbC5oLTEyOC1cXHQgKlxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaDoxMjk6XFx0ICogVGhpcyBwYWlycyB3aXRoIG5iY29uX2t0aHJlYWRfZnVuYzpBLlxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaC0xMzAtXFx0ICovXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTE4MD1zdGF0aWMgYm9vbCBuYmNvbl9rdGhyZWFkX3Nob3VsZF93YWtldXAoc3RydWN0IGNvbnNvbGUgKmNvbiwgc3RydWN0IG5iY29uX2NvbnRleHQgKmN0eHQpXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNC0vKipcXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTIxNTogKiBuYmNvbl9rdGhyZWFkX2Z1bmMgLSBUaGUgcHJpbnRlciB0aHJlYWQgZnVuY3Rpb25cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNi0gKiBAX19jb25zb2xlOlxcdENvbnNvbGUgdG8gb3BlcmF0ZSBvblxcbi0tXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyMTktICovXFxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEyMjA6c3RhdGljIGludCBuYmNvbl9rdGhyZWFkX2Z1bmModm9pZCAqX19jb25zb2xlKVxcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjIxLXtcXG4tLVxcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjQ0LVxcdFxcdFxcdCAgIG5iY29uX2t0aHJlYWRfc2hvdWxkX3dha2V1cChjb24sIGN0eHQpLFxcbmtlcm5lbC9wcmludGsvbmJjb24uYzoxMjQ1OlxcdFxcdFxcdCAgIFRBU0tfSU5URVJSVVBUSUJMRSk7IC8qIExNTShuYmNvbl9rdGhyZWFkX2Z1bmM6QSkgKi9cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTI0Ni1cXG4tLVxcbmtlcm5lbC9wcmludGsvbmJjb24uYz0xMjkzPXN0YXRpYyBpbmxpbmUgYm9vbCByY3V3YWl0X2hhc19zbGVlcGVyKHN0cnVjdCByY3V3YWl0ICp3KVxcbi0tXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzMDMtXFx0ICpcXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTMwNDpcXHQgKiBUaGlzIHBhaXJzIHdpdGggbmJjb25fa3RocmVhZF9mdW5jOkEuXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzMDUtXFx0ICovXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTM3NT1ib29sIG5iY29uX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBjb25zb2xlICpjb24pXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTM4My1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTM4NDpcXHRrdCA9IGt0aHJlYWRfcnVuKG5iY29uX2t0aHJlYWRfZnVuYywgY29uLCBcXFwicHIvJXMlZFxcXCIsIGNvbi1cXHUwMDNlbmFtZSwgY29uLVxcdTAwM2VpbmRleCk7XFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzODUtXFx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzY1Nj1zdGF0aWMgYm9vbCBsZWdhY3lfa3RocmVhZF9zaG91bGRfd2FrZXVwKHZvaWQpXFxuLS1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTM3MDMtXFxua2VybmVsL3ByaW50ay9wcmludGsuYzozNzA0OnN0YXRpYyBpbnQgbGVnYWN5X2t0aHJlYWRfZnVuYyh2b2lkICp1bnVzZWQpXFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzA1LXtcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzcyOD1zdGF0aWMgYm9vbCBsZWdhY3lfa3RocmVhZF9jcmVhdGUodm9pZClcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzczMy1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jOjM3MzQ6XFx0a3QgPSBrdGhyZWFkX3J1bihsZWdhY3lfa3RocmVhZF9mdW5jLCBOVUxMLCBcXFwicHIvbGVnYWN5XFxcIik7XFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzM1LVxcdGlmIChXQVJOX09OKElTX0VSUihrdCkpKSB7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzI1OT1ib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXFxubW0vY29tcGFjdGlvbi5jLTMyNjAte1xcbm1tL2NvbXBhY3Rpb24uYzozMjYxOlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xcbm1tL2NvbXBhY3Rpb24uYy0zMjYyLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTc0PWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTMxNzUte1xcbm1tL2todWdlcGFnZWQuYzozMTc2OlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2h1Z2VwYWdlZDtcXG5tbS9raHVnZXBhZ2VkLmMtMzE3Ny19XFxuLS1cXG5tbS92bXNjYW4uYz03NTk3PWJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG5tbS92bXNjYW4uYy03NTk4LXtcXG5tbS92bXNjYW4uYzo3NTk5OlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xcbm1tL3Ztc2Nhbi5jLTc2MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzoxNi42NjM1Njg1NDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1NzUxMDIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBga3RocmVhZF9mdW5jYCBpbiBga2VybmVsL2t0aHJlYWQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IGBrdGhyZWFkX2Z1bmNgIHdpdGhpbiBga2VybmVsL2t0aHJlYWQuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBrZXJuZWwgdGhyZWFkcyBhcmUgYWN0dWFsbHkgKmRvaW5nKiB0aGVpciB3b3JrLiBJIGtub3cgdGhlIGNvcmUgY29uY2VwdDogdGhlc2UgYXJlIGxpZ2h0d2VpZ2h0IHByb2Nlc3NlcyB3aXRoaW4gdGhlIGtlcm5lbCwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIHdoZXJlIHRoZSBkZXZpbCBpcy4gSSdtIGFzc3VtaW5nIGl0J3MgaGFuZGxpbmcgdGhlIGV4ZWN1dGlvbiBsb29wLCBwb3RlbnRpYWxseSBtYW5hZ2luZyB0aGUgdGhyZWFkJ3Mgc3RhdGUsIGFuZCBwcm9iYWJseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzY2hlZHVsZXIuIEknbSBhbHNvIGJldHRpbmcgdGhlcmUncyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGBrdGhyZWFkX2NyZWF0ZWAgZnVuY3Rpb24sIGxpa2VseSBzZXR0aW5nIHVwIHRoZSB0aHJlYWQncyBpbml0aWFsIGNvbnRleHQuIEknbGwgbmVlZCB0byBsb29rIGZvciBjYWxscyByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVz4oCUbXV0ZXhlcywgc2VtYXBob3JlcywgbWF5YmUgZXZlbiBzcGlubG9ja3PigJR0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0aHJlYWRzIGNvb3BlcmF0ZSAob3IgZG9uJ3QpIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCB1c2VyLXNwYWNlIHByb2Nlc3Nlcy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGxvZ2ljIGZvciBoYW5kbGluZyBzaWduYWxzIG9yIG90aGVyIGZvcm1zIG9mIGludGVyLXRocmVhZCBjb21tdW5pY2F0aW9uLCB0b28uIEZpbmFsbHksIEknbSBob3BpbmcgdG8gc2VlIGEgc29saWQgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3k7IGEgcm9idXN0IGtlcm5lbCBuZWVkcyB0byBncmFjZWZ1bGx5IG1hbmFnZSB1bmV4cGVjdGVkIHNpdHVhdGlvbnMgd2l0aGluIGl0cyB0aHJlYWRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBhY2N1cmF0ZSBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODQzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUzOjE5LjEyMTA4MTczNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2t0aHJlYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTE6XFx0LyoqXFxuIDIxMjpcXHQgKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXFxuIDIxMzpcXHQgKiBAdGFzazoga3RocmVhZCB0YXNrIGluIHF1ZXN0aW9uXFxuIDIxNDpcXHQgKlxcbiAyMTU6XFx0ICogUmV0dXJucyBOVUxMIGlmIHRoZSB0YXNrIGlzIG5vdCBhIGt0aHJlYWQuXFxuIDIxNjpcXHQgKi9cXG4gMjE3OlxcdHZvaWQgKmt0aHJlYWRfZnVuYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuIDIxODpcXHR7XFxuIDIxOTpcXHRcXHRzdHJ1Y3Qga3RocmVhZCAqa3RocmVhZCA9IHRza19pc19rdGhyZWFkKHRhc2spO1xcbiAyMjA6XFx0XFx0aWYgKGt0aHJlYWQpXFxuIDIyMTpcXHRcXHRcXHRyZXR1cm4ga3RocmVhZC1cXHUwMDNldGhyZWFkZm47XFxuIDIyMjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjIzOlxcdH1cXG4gMjI0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGt0aHJlYWRfZnVuYyk7XFxuIDIyNTpcXHRcXG4gMjI2OlxcdC8qKlxcbiAyMjc6XFx0ICoga3RocmVhZF9kYXRhIC0gcmV0dXJuIGRhdGEgdmFsdWUgc3BlY2lmaWVkIG9uIGt0aHJlYWQgY3JlYXRpb25cXG4gMjI4OlxcdCAqIEB0YXNrOiBrdGhyZWFkIHRhc2sgaW4gcXVlc3Rpb25cXG4gMjI5OlxcdCAqXFxuIDIzMDpcXHQgKiBSZXR1cm4gdGhlIGRhdGEgdmFsdWUgc3BlY2lmaWVkIHdoZW4ga3RocmVhZCBAdGFzayB3YXMgY3JlYXRlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTM6MTkuMTIxMjE1NzgzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxNTc1OTQ4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFydGljdWxhcmx5IHdoZXJlIGtlcm5lbCBkYXRhIGludGVyYWN0cyB3aXRoIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QsIEkgZXhhbWluZWQgZm9yIGFueSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgcGFkZGluZyBvciBmaWVsZHMgbWlnaHQgbm90IGJlIHByb3Blcmx5IGluaXRpYWxpemVkLiAqKkdvb2QgbmV3cyoqLCBub3RoaW5nIGp1bXBlZCBvdXQuIEkgYWxzbyBjaGVja2VkIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFnYWluLCAqKmNsZWFyKiouIEkgY2FyZWZ1bGx5IGxvb2tlZCBhdCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aG9zZSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIHRoZSBga3N3YXBkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3NgIHBpcXVlZCBteSBpbnRlcmVzdC4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIGl0J3MgcmVtb3ZpbmcgYSBzdGFjay1hbGxvY2F0ZWQgZmllbGQsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBhcyBpdCByZWR1Y2VzIG1lbW9yeSBmb290cHJpbnQgYW5kIG1pdGlnYXRlcyBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgcmlza3MsIHNvIG5vIHByb2JsZW1zIHRoZXJlLiBGaW5hbGx5LCBJIGRvdWJsZSBjaGVja2VkIGZvciBhbnkgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzIGZyb20gZXhpc3RpbmcgYnVmZmVycywgYnV0IEkgZm91bmQgbm90aGluZyBvZiBjb25jZXJuLlxuXG5OZXh0LCBJIGxvb2tlZCBhdCB0aGUgc3BlY2lmaWMgY29kZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvbWFwX3dyaXRlcGFnZXNgIHRvIGNoYW5nZSBhIFdBUk5fT04gY2hlY2sgZm9yIHJlY2xhaW0gY29udGV4dCwgY2hhbmdpbmcgaG93IHRoZSByZWNsYWltIGNvbnRleHQgaXMgZXZhbHVhdGVkLiBUaGlzIHNlZW1zIHRvIGJlIGEgYmVoYXZpb3JhbCBjaGFuZ2UuIFRoZSBgeGZzX2J0cmVlLmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHJlbW92ZSBrc3dhcGQgZmxhZyBpbmhlcml0YW5jZS4gU2V2ZXJhbCBmaWxlcyBsaWtlIGBjb21wYWN0aW9uLmhgLCBgc3dhcC5oYCwgYHNjaGVkLmhgLCBgY29tcGFjdGlvbi5jYCwgYW5kIGB2bXNjYW4uY2AgYXJlIHJlbW92aW5nIGBQRl9LQ09NUEFDVERgIGFuZCBgUEZfS1NXQVBEYCB0YXNrIGZsYWdzLCByZXBsYWNpbmcgYGN1cnJlbnRfaXNfa2NvbXBhY3RkKClgIGFuZCBgY3VycmVudF9pc19rc3dhcGQoKWAgd2l0aCBhIGt0aHJlYWQgZnVuY3Rpb24gY2hlY2sgKGBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkIC8ga3N3YXBkYCkuIFRoaXMgaXMgYSByZWZhY3RvcmluZyBhcm91bmQgdGFzayBpZGVudGlmaWNhdGlvbi5cblxuTXkgY2VudHJhbCBxdWVzdGlvbiBpcyBhbHdheXMgXCJBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcz9cIiBBbmQgdGhlIGFuc3dlciwgYmFzZWQgb24gdGhpcyByZXZpZXcsIGlzIGEgZGVmaW5pdGUgKipubyoqLiBUaGVzZSBjaGFuZ2VzIGFwcGVhciB0byBiZSByZWZhY3RvcmluZyB0aGUgcHJvY2VzcyBmbGFncyBhbmQgdXNlIG9mIGt0aHJlYWQgZnVuY3Rpb25zLiBUaGlzIGlzIGEgZ29vZCBzaWduOyBJIHNlZSBubyByaXNrLlxuXG5SZWdhcmRpbmcgS01TQU4gdmVyc3VzIEtBU0FOLCB0aGlzIHBhdGNoIGlzIHVubGlrZWx5IHRvIGJlIGZsYWdnZWQuIEtBU0FOIGFuZCB0aGUgb3RoZXIgZGV0ZWN0b3JzIGFyZSBncmVhdCBmb3IgZnVuY3Rpb25hbCB2ZXJpZmljYXRpb24gYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSBnZWFyZWQgdG93YXJkcyBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgYW5kIHBvdGVudGlhbCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gU2luY2UgSSd2ZSBmb3VuZCBubyBldmlkZW5jZSBvZiB0aG9zZSwgdGhpcyBwYXRjaCBzaG91bGRuJ3QgbmVlZCBhIEtNU0FOIGZsYWcuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY2hlY2tsaXN0IG9uZSBtb3JlIHRpbWU6IERvIGFueSBzdHJ1Y3RzIGhhdmUgdW5pbml0aWFsaXplZCBwYWRkaW5nPyBOby4gSXMgYW55dGhpbmcgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEFyZSB0aGVyZSBhbnkgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcyB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHJlZ2lvbnM/IE5vLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIGNoYW5nZXMgYXJlIHdlbGwtZGVmaW5lZC4gSSdtIGNvbWZvcnRhYmxlIHNheWluZyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQzLCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUzOjI1LjI3ODgxNTE4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBkYXRhIGJ1ZmZlciBtYW5pcHVsYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIGhvdyB0aGUga2VybmVsIGlkZW50aWZpZXMgYGtzd2FwZGAgYW5kIGBrY29tcGFjdGRgIHRocmVhZHMuIEl0IGVsaW1pbmF0ZXMgdGhlIGBQRl9LU1dBUERgIGFuZCBgUEZfS0NPTVBBQ1REYCBwcm9jZXNzIGZsYWdzIGluIGZhdm9yIG9mIGNoZWNraW5nIHRoZSBrdGhyZWFkIGNyZWF0aW9uIGZ1bmN0aW9uIHBvaW50ZXIgKGBrdGhyZWFkX2Z1bmMoY3VycmVudClgKSwgc2ltcGxpZmllcyB3YXJuaW5nIGNoZWNrcyBpbiBgaW9tYXBfd3JpdGVwYWdlc2AsIGFuZCByZW1vdmVzIHVudXNlZCBmbGFnIGluaGVyaXRhbmNlIGluIFhGUyBidHJlZSBzcGxpdCB3b3JrcXVldWUgaXRlbXMuXFxuXFxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGRhdGEgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowzlxhm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 09:32:36 +0000 UTC FinishedAt: 2026-09-03 09:53:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "SWAP", "FS_IOMAP", "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "SWAP", "FS_IOMAP", "XFS_FS" ], "series_id": "1d80e1c0-8d09-4a49-8dcd-042bc2288daa" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "iomap_writepages", "current_is_kswapd", "current_is_kcompactd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtGU19JT01BUCYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O2N1cnJlbnRfaXNfa3N3YXBkJiMzNDssCiAgICAmIzM0O2N1cnJlbnRfaXNfa2NvbXBhY3RkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyOWVkOTlkMmRkYWYxOWNjYjIwMDhhYmE0NmQ5Zjg1YTgwNTM5MGY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwOTo1MTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggMGE1ZWJmZGE5MGYxMi4uNjMwNmNhNzQ3ZjNiYSAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbkBAIC0yMDc3LDggJiM0MzsyMDc3LDcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKVxuIFx0ICogV3JpdGViYWNrIGZyb20gcmVjbGFpbSBjb250ZXh0IHNob3VsZCBuZXZlciBoYXBwZW4gZXhjZXB0IGluIHRoZSBjYXNlXG4gXHQgKiBvZiBhIFZNIHJlZ3Jlc3Npb24gc28gd2FybiBhYm91dCBpdCBhbmQgcmVmdXNlIHRvIHdyaXRlIHRoZSBkYXRhLlxuIFx0ICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpKSA9PVxuLVx0XHRcdFBGX01FTUFMTE9DKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCB3cGMtXHUwMDNld2JjLCBmb2xpbywgXHUwMDI2ZXJyb3IpKSkge1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXG5pbmRleCA2MGVmN2YwOGIxZDMwLi42NzM4ZDlkMTUxMWJjIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xuQEAgLTI5OTQsNyAmIzQzOzI5OTQsNiBAQCBzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3Mge1xuIFx0c3RydWN0IHhmc19idHJlZV9jdXJcdCoqY3VycDtcbiBcdGludFx0XHRcdCpzdGF0O1x0XHQvKiBzdWNjZXNzL2ZhaWx1cmUgKi9cbiBcdGludFx0XHRcdHJlc3VsdDtcbi1cdGJvb2xcdFx0XHRrc3dhcGQ7XHQvKiBhbGxvY2F0aW9uIGluIGtzd2FwZCBjb250ZXh0ICovXG4gXHRzdHJ1Y3QgY29tcGxldGlvblx0KmRvbmU7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG4gfTtcbkBAIC0zMDA4LDMzICYjNDM7MzAwNywxOCBAQCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKFxuIHtcbiBcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1x0KmFyZ3MgPSBjb250YWluZXJfb2Yod29yayxcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3MsIHdvcmspO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRwZmxhZ3M7XG4tXHR1bnNpZ25lZCBsb25nXHRcdG5ld19wZmxhZ3MgPSAwO1xuLVxuLVx0Lypcbi1cdCAqIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbnRleHQgaGVyZSwgYnV0IG1heSBhbHNvIGJlIGRvaW5nIHdvcmtcbi1cdCAqIGluIGtzd2FwZCBjb250ZXh0LCBhbmQgaGVuY2Ugd2UgbWF5IG5lZWQgdG8gaW5oZXJpdCB0aGF0IHN0YXRlXG4tXHQgKiB0ZW1wb3JhcmlseSB0byBlbnN1cmUgdGhhdCB3ZSBkb24mIzM5O3QgYmxvY2sgd2FpdGluZyBmb3IgbWVtb3J5IHJlY2xhaW1cbi1cdCAqIGluIGFueSB3YXkuXG4tXHQgKi9cbi1cdGlmIChhcmdzLVx1MDAzZWtzd2FwZClcbi1cdFx0bmV3X3BmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcbi1cbi1cdGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChcdTAwMjZwZmxhZ3MsIG5ld19wZmxhZ3MpO1xuIFx0eGZzX3RyYW5zX3NldF9jb250ZXh0KGFyZ3MtXHUwMDNlY3VyLVx1MDAzZWJjX3RwKTtcbiBcbiBcdGFyZ3MtXHUwMDNlcmVzdWx0ID0gX194ZnNfYnRyZWVfc3BsaXQoYXJncy1cdTAwM2VjdXIsIGFyZ3MtXHUwMDNlbGV2ZWwsIGFyZ3MtXHUwMDNlcHRycCxcbiBcdFx0XHRcdFx0IGFyZ3MtXHUwMDNla2V5LCBhcmdzLVx1MDAzZWN1cnAsIGFyZ3MtXHUwMDNlc3RhdCk7XG4gXG4gXHR4ZnNfdHJhbnNfY2xlYXJfY29udGV4dChhcmdzLVx1MDAzZWN1ci1cdTAwM2ViY190cCk7XG4tXHRjdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKFx1MDAyNnBmbGFncywgbmV3X3BmbGFncyk7XG4gXG4gXHQvKlxuIFx0ICogRG8gbm90IGFjY2VzcyBhcmdzIGFmdGVyIGNvbXBsZXRlKCkgaGFzIHJ1biBoZXJlLiBXZSBkb24mIzM5O3Qgb3duIGFyZ3NcbiBcdCAqIGFuZCB0aGUgb3duZXIgbWF5IHJ1biBhbmQgZnJlZSBhcmdzIGJlZm9yZSB3ZSByZXR1cm4gaGVyZS5cbiBcdCAqL1xuIFx0Y29tcGxldGUoYXJncy1cdTAwM2Vkb25lKTtcbi1cbiB9XG4gXG4gLypcbkBAIC0zMDc4LDcgJiM0MzszMDYyLDcgQEAgeGZzX2J0cmVlX3NwbGl0KFxuIFx0YXJncy5jdXJwID0gY3VycDtcbiBcdGFyZ3Muc3RhdCA9IHN0YXQ7XG4gXHRhcmdzLmRvbmUgPSBcdTAwMjZkb25lO1xuLVx0YXJncy5rc3dhcGQgPSBjdXJyZW50X2lzX2tzd2FwZCgpO1xuJiM0MztcbiBcdElOSVRfV09SS19PTlNUQUNLKFx1MDAyNmFyZ3Mud29yaywgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcik7XG4gXHRxdWV1ZV93b3JrKHhmc19hbGxvY193cSwgXHUwMDI2YXJncy53b3JrKTtcbiBcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZG9uZSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oIGIvZnMveGZzL3hmc19wbGF0Zm9ybS5oXG5pbmRleCA1ZDU0MmU5NWZlNDQ0Li5hNDlmYTE1OTg5NGRlIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX3BsYXRmb3JtLmhcbkBAIC0xMTUsMTAgJiM0MzsxMTUsNiBAQCB0eXBlZGVmIF9fdTMyXHRcdFx0eGZzX25saW5rX3Q7XG4gI2RlZmluZSB4ZnNfYmxvY2tnY19zZWNzXHR4ZnNfcGFyYW1zLmJsb2NrZ2NfdGltZXIudmFsXG4gXG4gI2RlZmluZSBjdXJyZW50X2NwdSgpXHRcdChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKVxuLSNkZWZpbmUgY3VycmVudF9zZXRfZmxhZ3NfbmVzdGVkKHNwLCBmKVx0XHRcXFxuLVx0XHQoKihzcCkgPSBjdXJyZW50LVx1MDAzZWZsYWdzLCBjdXJyZW50LVx1MDAzZWZsYWdzIHw9IChmKSlcbi0jZGVmaW5lIGN1cnJlbnRfcmVzdG9yZV9mbGFnc19uZXN0ZWQoc3AsIGYpXHRcXFxuLVx0XHQoY3VycmVudC1cdTAwM2VmbGFncyA9ICgoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgfihmKSkgfCAoKihzcCkgXHUwMDI2IChmKSkpKVxuIFxuICNkZWZpbmUgTkJCWVx0XHQ4XHRcdC8qIG51bWJlciBvZiBiaXRzIHBlciBieXRlICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuaW5kZXggNjZhMmY3MGU5ZTAxOS4uNjkxYzA5ZjBhNjk3MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuQEAgLTgxLDEwICYjNDM7ODEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcGFjdF9nYXAodW5zaWduZWQgaW50IG9yZGVyKVxuIFx0cmV0dXJuIG1pbigyVUwgXHUwMDNjXHUwMDNjIG9yZGVyLCBDT01QQUNUX0NMVVNURVJfTUFYKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcbi17XG4tXHRyZXR1cm4gY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS0NPTVBBQ1REO1xuLX1cbiBcbiAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbiBcbkBAIC0xMDMsNyAmIzQzOzk5LDcgQEAgZXh0ZXJuIHZvaWQgY29tcGFjdGlvbl9kZWZlcl9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFxuIGJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbiBcdFx0XHRcdFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG4tXG4mIzQzO2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9ydW4oaW50IG5pZCk7XG4gZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpO1xuIGV4dGVybiB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbkBAIC0xMjAsNiAmIzQzOzExNiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGtjb21wYWN0ZF9ydW4oaW50IG5pZClcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggOGIzZDQ3YTMyNWNjYS4uZWIxMmZmNGNlYTZjMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5AQCAtMTgwOCw4ICYjNDM7MTgwOCw4IEBAIGV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xuICNkZWZpbmUgUEZfVVNFRF9NQVRIXHRcdDB4MDAwMDIwMDBcdC8qIElmIHVuc2V0IHRoZSBmcHUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICovXG4gI2RlZmluZSBQRl9VU0VSX1dPUktFUlx0XHQweDAwMDA0MDAwXHQvKiBLZXJuZWwgdGhyZWFkIGNsb25lZCBmcm9tIHVzZXJzcGFjZSB0aHJlYWQgKi9cbiAjZGVmaW5lIFBGX05PRlJFRVpFXHRcdDB4MDAwMDgwMDBcdC8qIFRoaXMgdGhyZWFkIHNob3VsZCBub3QgYmUgZnJvemVuICovXG4tI2RlZmluZSBQRl9LQ09NUEFDVERcdFx0MHgwMDAxMDAwMFx0LyogSSBhbSBrY29tcGFjdGQgKi9cbi0jZGVmaW5lIFBGX0tTV0FQRFx0XHQweDAwMDIwMDAwXHQvKiBJIGFtIGtzd2FwZCAqL1xuJiM0MzsjZGVmaW5lIFBGX19IT0xFX18wMDAxMDAwMFx0MHgwMDAxMDAwMFxuJiM0MzsjZGVmaW5lIFBGX19IT0xFX18wMDAyMDAwMFx0MHgwMDAyMDAwMFxuICNkZWZpbmUgUEZfTUVNQUxMT0NfTk9GU1x0MHgwMDA0MDAwMFx0LyogQWxsIGFsbG9jYXRpb25zIGluaGVyaXQgR0ZQX05PRlMuIFNlZSBtZW1hbGxvY19uZnNfc2F2ZSgpICovXG4gI2RlZmluZSBQRl9NRU1BTExPQ19OT0lPXHQweDAwMDgwMDAwXHQvKiBBbGwgYWxsb2NhdGlvbnMgaW5oZXJpdCBHRlBfTk9JTy4gU2VlIG1lbWFsbG9jX25vaW9fc2F2ZSgpICovXG4gI2RlZmluZSBQRl9MT0NBTF9USFJPVFRMRVx0MHgwMDEwMDAwMFx0LyogVGhyb3R0bGUgd3JpdGVzIG9ubHkgYWdhaW5zdCB0aGUgYmRpIEkgd3JpdGUgdG8sXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggYTcyZWNmMTJjMDBkYi4uZmMyOTBlMjllNGE5ZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI1LDEyICYjNDM7MjUsNiBAQFxuICNkZWZpbmUgU1dBUF9GTEFHU19WQUxJRFx0KFNXQVBfRkxBR19QUklPX01BU0sgfCBTV0FQX0ZMQUdfUFJFRkVSIHwgXFxcbiBcdFx0XHRcdCBTV0FQX0ZMQUdfRElTQ0FSRCB8IFNXQVBfRkxBR19ESVNDQVJEX09OQ0UgfCBcXFxuIFx0XHRcdFx0IFNXQVBfRkxBR19ESVNDQVJEX1BBR0VTKVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXG4te1xuLVx0cmV0dXJuIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tTV0FQRDtcbi19XG4tXG4gLypcbiAgKiBNQVhfU1dBUEZJTEVTIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN3YXB0eXBlczogdGhpbmdzIHdoaWNoIGNhblxuICAqIGJlIHN3YXBwZWQgdG8uICBUaGUgc3dhcCB0eXBlIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhhdCBzd2FwIHR5cGUgYXJlXG5AQCAtMzM5LDYgJiM0MzszMzMsNyBAQCB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTtcbiBcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKTtcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XG4mIzQzO2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZCk7XG4gXG4gI2lmZGVmIENPTkZJR19TV0FQXG4gaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsXG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXG5pbmRleCBhMDQ5NDE1NTEyYzY3Li40OTk0ZTIwMGJiZWNkIDEwMDY0NFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmNcbkBAIC0zMTk3LDcgJiM0MzszMTk3LDYgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdGxvbmcgZGVmYXVsdF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhIUEFHRV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpO1xuIFx0bG9uZyB0aW1lb3V0ID0gZGVmYXVsdF90aW1lb3V0O1xuIFxuLVx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9LQ09NUEFDVEQ7XG4gXHRzZXRfZnJlZXphYmxlKCk7XG4gXG4gXHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyID0gMDtcbkBAIC0zMjU0LDExICYjNDM7MzI1MywxNSBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxuIFx0XHRcdHBnZGF0LVx1MDAzZXByb2FjdGl2ZV9jb21wYWN0X3RyaWdnZXIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfS0NPTVBBQ1REO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mztib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tjb21wYWN0ZCk7XG4mIzQzO1xuIC8qXG4gICogVGhpcyBrY29tcGFjdGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxuICAqIE9uIG5vZGUtaG90LWFkZCwga2NvbXBhY3RkIHdpbGwgbW92ZWQgdG8gcHJvcGVyIGNwdXMgaWYgY3B1cyBhcmUgaG90LWFkZGVkLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJmMjc4NmM3MjQ3ZDQuLjlmOTk2MzNkN2RjMWUgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC03NTM5LDcgJiM0Mzs3NTM5LDcgQEAgc3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbiBcdCAqIHVzIGZyb20gcmVjdXJzaXZlbHkgdHJ5aW5nIHRvIGZyZWUgbW9yZSBtZW1vcnkgYXMgd2UmIzM5O3JlXG4gXHQgKiB0cnlpbmcgdG8gZnJlZSB0aGUgZmlyc3QgcGllY2Ugb2YgbWVtb3J5IGluIHRoZSBmaXJzdCBwbGFjZSkuXG4gXHQgKi9cbi1cdHRzay1cdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcbiYjNDM7XHR0c2stXHUwMDNlZmxhZ3MgfD0gUEZfTUVNQUxMT0M7XG4gXHRzZXRfZnJlZXphYmxlKCk7XG4gXG4gXHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5AQCAtNzU4OSwxMSAmIzQzOzc1ODksMTcgQEAgc3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbiBcdFx0XHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XG4gXHR9XG4gXG4tXHR0c2stXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKTtcbiYjNDM7XHR0c2stXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfTUVNQUxMT0M7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaXNfa3N3YXBkKTtcbiYjNDM7XG4gLypcbiAgKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXG4gICoga3N3YXBkIHNob3VsZCByZWNsYWltIChkaXJlY3QgcmVjbGFpbSBpcyBkZWZlcnJlZCksIHdha2UgaXQgdXAgZm9yIHRoZSB6b25lJiMzOTtzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaCBiL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmhcbmluZGV4IDc2ZjVlMDI1ZTEwNzYuLjgwN2VmODgxY2UyZDQgMTAwNjQ0XG4tLS0gYS90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXG5AQCAtMzEsOCAmIzQzOzMxLDYgQEBcbiAjZGVmaW5lIFBGX0lETEVcdFx0XHRcdDB4MDAwMDAwMDJcdC8qIEkgYW0gYW4gSURMRSB0aHJlYWQgKi9cbiAjZGVmaW5lIFBGX0lPX1dPUktFUlx0XHRcdDB4MDAwMDAwMTBcdC8qIFRhc2sgaXMgYW4gSU8gd29ya2VyICovXG4gI2RlZmluZSBQRl9XUV9XT1JLRVJcdFx0XHQweDAwMDAwMDIwXHQvKiBJJiMzOTttIGEgd29ya3F1ZXVlIHdvcmtlciAqL1xuLSNkZWZpbmUgUEZfS0NPTVBBQ1REXHRcdFx0MHgwMDAxMDAwMCAgICAgIC8qIEkgYW0ga2NvbXBhY3RkICovXG4tI2RlZmluZSBQRl9LU1dBUERcdFx0XHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cbiAjZGVmaW5lIFBGX0tUSFJFQURcdFx0XHQweDAwMjAwMDAwXHQvKiBJIGFtIGEga2VybmVsIHRocmVhZCAqL1xuICNkZWZpbmUgUEZfRVhJVElOR1x0XHRcdDB4MDAwMDAwMDRcbiAjZGVmaW5lIENMT0NLX01PTk9UT05JQ1x0XHRcdDFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tzd2FwZCYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tjb21wYWN0ZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHByb2Nlc3MgZmxhZ3MgUEZfS1NXQVBEIGFuZCBQRl9LQ09NUEFDVEQgaW4gZmF2b3Igb2Yga3RocmVhZCBmdW5jdGlvbiBwb2ludGVyIGNvbXBhcmlzb25zIHZpYSBjdXJyZW50X2lzX2tzd2FwZCgpIGFuZCBjdXJyZW50X2lzX2tjb21wYWN0ZCgpLiBJdCB1cGRhdGVzIHJlY2xhaW0gYW5kIHdyaXRlYmFjayBoYW5kbGluZyBpbiBpb21hcF93cml0ZXBhZ2VzKCkgYW5kIHJlbW92ZXMgdGhlIGluaGVyaXRhbmNlIG9mIGtzd2FwZCBmbGFncyBpbiBYRlMgQi10cmVlIHNwbGl0IHdvcmsgaXRlbXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjllZDk5ZDJkZGFmMTljY2IyMDA4YWJhNDZkOWY4NWE4MDUzOTBmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDk6NTE6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwppbmRleCAwYTVlYmZkYTkwZjEyLi42MzA2Y2E3NDdmM2JhIDEwMDY0NAotLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKQEAgLTIwNzcsOCAmIzQzOzIwNzcsNyBAQCBpb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpCiAJICogV3JpdGViYWNrIGZyb20gcmVjbGFpbSBjb250ZXh0IHNob3VsZCBuZXZlciBoYXBwZW4gZXhjZXB0IGluIHRoZSBjYXNlCiAJICogb2YgYSBWTSByZWdyZXNzaW9uIHNvIHdhcm4gYWJvdXQgaXQgYW5kIHJlZnVzZSB0byB3cml0ZSB0aGUgZGF0YS4KIAkgKi8KLQlpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LSZndDtmbGFncyAmYW1wOyAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpKSA9PQotCQkJUEZfTUVNQUxMT0MpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9NRU1BTExPQykpKQogCQlyZXR1cm4gLUVJTzsKIAogCXdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCB3cGMtJmd0O3diYywgZm9saW8sICZhbXA7ZXJyb3IpKSkgewpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMKaW5kZXggNjBlZjdmMDhiMWQzMC4uNjczOGQ5ZDE1MTFiYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jCkBAIC0yOTk0LDcgJiM0MzsyOTk0LDYgQEAgc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzIHsKIAlzdHJ1Y3QgeGZzX2J0cmVlX2N1cgkqKmN1cnA7CiAJaW50CQkJKnN0YXQ7CQkvKiBzdWNjZXNzL2ZhaWx1cmUgKi8KIAlpbnQJCQlyZXN1bHQ7Ci0JYm9vbAkJCWtzd2FwZDsJLyogYWxsb2NhdGlvbiBpbiBrc3dhcGQgY29udGV4dCAqLwogCXN0cnVjdCBjb21wbGV0aW9uCSpkb25lOwogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogfTsKQEAgLTMwMDgsMzMgJiM0MzszMDA3LDE4IEBAIHhmc19idHJlZV9zcGxpdF93b3JrZXIoCiB7CiAJc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzCSphcmdzID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCQlzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3MsIHdvcmspOwotCXVuc2lnbmVkIGxvbmcJCXBmbGFnczsKLQl1bnNpZ25lZCBsb25nCQluZXdfcGZsYWdzID0gMDsKLQotCS8qCi0JICogd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29udGV4dCBoZXJlLCBidXQgbWF5IGFsc28gYmUgZG9pbmcgd29yawotCSAqIGluIGtzd2FwZCBjb250ZXh0LCBhbmQgaGVuY2Ugd2UgbWF5IG5lZWQgdG8gaW5oZXJpdCB0aGF0IHN0YXRlCi0JICogdGVtcG9yYXJpbHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJiMzOTt0IGJsb2NrIHdhaXRpbmcgZm9yIG1lbW9yeSByZWNsYWltCi0JICogaW4gYW55IHdheS4KLQkgKi8KLQlpZiAoYXJncy0mZ3Q7a3N3YXBkKQotCQluZXdfcGZsYWdzIHw9IFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEOwotCi0JY3VycmVudF9zZXRfZmxhZ3NfbmVzdGVkKCZhbXA7cGZsYWdzLCBuZXdfcGZsYWdzKTsKIAl4ZnNfdHJhbnNfc2V0X2NvbnRleHQoYXJncy0mZ3Q7Y3VyLSZndDtiY190cCk7CiAKIAlhcmdzLSZndDtyZXN1bHQgPSBfX3hmc19idHJlZV9zcGxpdChhcmdzLSZndDtjdXIsIGFyZ3MtJmd0O2xldmVsLCBhcmdzLSZndDtwdHJwLAogCQkJCQkgYXJncy0mZ3Q7a2V5LCBhcmdzLSZndDtjdXJwLCBhcmdzLSZndDtzdGF0KTsKIAogCXhmc190cmFuc19jbGVhcl9jb250ZXh0KGFyZ3MtJmd0O2N1ci0mZ3Q7YmNfdHApOwotCWN1cnJlbnRfcmVzdG9yZV9mbGFnc19uZXN0ZWQoJmFtcDtwZmxhZ3MsIG5ld19wZmxhZ3MpOwogCiAJLyoKIAkgKiBEbyBub3QgYWNjZXNzIGFyZ3MgYWZ0ZXIgY29tcGxldGUoKSBoYXMgcnVuIGhlcmUuIFdlIGRvbiYjMzk7dCBvd24gYXJncwogCSAqIGFuZCB0aGUgb3duZXIgbWF5IHJ1biBhbmQgZnJlZSBhcmdzIGJlZm9yZSB3ZSByZXR1cm4gaGVyZS4KIAkgKi8KIAljb21wbGV0ZShhcmdzLSZndDtkb25lKTsKLQogfQogCiAvKgpAQCAtMzA3OCw3ICYjNDM7MzA2Miw3IEBAIHhmc19idHJlZV9zcGxpdCgKIAlhcmdzLmN1cnAgPSBjdXJwOwogCWFyZ3Muc3RhdCA9IHN0YXQ7CiAJYXJncy5kb25lID0gJmFtcDtkb25lOwotCWFyZ3Mua3N3YXBkID0gY3VycmVudF9pc19rc3dhcGQoKTsKJiM0MzsKIAlJTklUX1dPUktfT05TVEFDSygmYW1wO2FyZ3Mud29yaywgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcik7CiAJcXVldWVfd29yayh4ZnNfYWxsb2Nfd3EsICZhbXA7YXJncy53b3JrKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7ZG9uZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3BsYXRmb3JtLmggYi9mcy94ZnMveGZzX3BsYXRmb3JtLmgKaW5kZXggNWQ1NDJlOTVmZTQ0NC4uYTQ5ZmExNTk4OTRkZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfcGxhdGZvcm0uaApAQCAtMTE1LDEwICYjNDM7MTE1LDYgQEAgdHlwZWRlZiBfX3UzMgkJCXhmc19ubGlua190OwogI2RlZmluZSB4ZnNfYmxvY2tnY19zZWNzCXhmc19wYXJhbXMuYmxvY2tnY190aW1lci52YWwKIAogI2RlZmluZSBjdXJyZW50X2NwdSgpCQkocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkKLSNkZWZpbmUgY3VycmVudF9zZXRfZmxhZ3NfbmVzdGVkKHNwLCBmKQkJXAotCQkoKihzcCkgPSBjdXJyZW50LSZndDtmbGFncywgY3VycmVudC0mZ3Q7ZmxhZ3MgfD0gKGYpKQotI2RlZmluZSBjdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKHNwLCBmKQlcCi0JCShjdXJyZW50LSZndDtmbGFncyA9ICgoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgfihmKSkgfCAoKihzcCkgJmFtcDsgKGYpKSkpCiAKICNkZWZpbmUgTkJCWQkJOAkJLyogbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaAppbmRleCA2NmEyZjcwZTllMDE5Li42OTFjMDlmMGE2OTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaApAQCAtODEsMTAgJiM0Mzs4MSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wYWN0X2dhcCh1bnNpZ25lZCBpbnQgb3JkZXIpCiAJcmV0dXJuIG1pbigyVUwgJmx0OyZsdDsgb3JkZXIsIENPTVBBQ1RfQ0xVU1RFUl9NQVgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKQotewotCXJldHVybiBjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LQ09NUEFDVEQ7Ci19CiAKICNpZmRlZiBDT05GSUdfQ09NUEFDVElPTgogCkBAIC0xMDMsNyAmIzQzOzk5LDcgQEAgZXh0ZXJuIHZvaWQgY29tcGFjdGlvbl9kZWZlcl9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAogCiBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsCiAJCQkJCWludCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spOwotCiYjNDM7Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfcnVuKGludCBuaWQpOwogZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpOwogZXh0ZXJuIHZvaWQgd2FrZXVwX2tjb21wYWN0ZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpOwpAQCAtMTIwLDYgJiM0MzsxMTYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQga2NvbXBhY3RkX3J1bihpbnQgbmlkKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhiM2Q0N2EzMjVjY2EuLmViMTJmZjRjZWE2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTE4MDgsOCAmIzQzOzE4MDgsOCBAQCBleHRlcm4gc3RydWN0IHBpZCAqY2FkX3BpZDsKICNkZWZpbmUgUEZfVVNFRF9NQVRICQkweDAwMDAyMDAwCS8qIElmIHVuc2V0IHRoZSBmcHUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICovCiAjZGVmaW5lIFBGX1VTRVJfV09SS0VSCQkweDAwMDA0MDAwCS8qIEtlcm5lbCB0aHJlYWQgY2xvbmVkIGZyb20gdXNlcnNwYWNlIHRocmVhZCAqLwogI2RlZmluZSBQRl9OT0ZSRUVaRQkJMHgwMDAwODAwMAkvKiBUaGlzIHRocmVhZCBzaG91bGQgbm90IGJlIGZyb3plbiAqLwotI2RlZmluZSBQRl9LQ09NUEFDVEQJCTB4MDAwMTAwMDAJLyogSSBhbSBrY29tcGFjdGQgKi8KLSNkZWZpbmUgUEZfS1NXQVBECQkweDAwMDIwMDAwCS8qIEkgYW0ga3N3YXBkICovCiYjNDM7I2RlZmluZSBQRl9fSE9MRV9fMDAwMTAwMDAJMHgwMDAxMDAwMAomIzQzOyNkZWZpbmUgUEZfX0hPTEVfXzAwMDIwMDAwCTB4MDAwMjAwMDAKICNkZWZpbmUgUEZfTUVNQUxMT0NfTk9GUwkweDAwMDQwMDAwCS8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0ZTLiBTZWUgbWVtYWxsb2NfbmZzX3NhdmUoKSAqLwogI2RlZmluZSBQRl9NRU1BTExPQ19OT0lPCTB4MDAwODAwMDAJLyogQWxsIGFsbG9jYXRpb25zIGluaGVyaXQgR0ZQX05PSU8uIFNlZSBtZW1hbGxvY19ub2lvX3NhdmUoKSAqLwogI2RlZmluZSBQRl9MT0NBTF9USFJPVFRMRQkweDAwMTAwMDAwCS8qIFRocm90dGxlIHdyaXRlcyBvbmx5IGFnYWluc3QgdGhlIGJkaSBJIHdyaXRlIHRvLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBhNzJlY2YxMmMwMGRiLi5mYzI5MGUyOWU0YTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMjUsMTIgJiM0MzsyNSw2IEBACiAjZGVmaW5lIFNXQVBfRkxBR1NfVkFMSUQJKFNXQVBfRkxBR19QUklPX01BU0sgfCBTV0FQX0ZMQUdfUFJFRkVSIHwgXAogCQkJCSBTV0FQX0ZMQUdfRElTQ0FSRCB8IFNXQVBfRkxBR19ESVNDQVJEX09OQ0UgfCBcCiAJCQkJIFNXQVBfRkxBR19ESVNDQVJEX1BBR0VTKQotCi1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKQotewotCXJldHVybiBjdXJyZW50LSZndDtmbGFncyAmYW1wOyBQRl9LU1dBUEQ7Ci19Ci0KIC8qCiAgKiBNQVhfU1dBUEZJTEVTIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN3YXB0eXBlczogdGhpbmdzIHdoaWNoIGNhbgogICogYmUgc3dhcHBlZCB0by4gIFRoZSBzd2FwIHR5cGUgYW5kIHRoZSBvZmZzZXQgaW50byB0aGF0IHN3YXAgdHlwZSBhcmUKQEAgLTMzOSw2ICYjNDM7MzMzLDcgQEAgdm9pZCBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7CiAKIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpOwogZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpOwomIzQzO2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfU1dBUAogaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsCmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmMKaW5kZXggYTA0OTQxNTUxMmM2Ny4uNDk5NGUyMDBiYmVjZCAxMDA2NDQKLS0tIGEvbW0vY29tcGFjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uYwpAQCAtMzE5Nyw3ICYjNDM7MzE5Nyw2IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApCiAJbG9uZyBkZWZhdWx0X3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhQQUdFX0ZSQUdfQ0hFQ0tfSU5URVJWQUxfTVNFQyk7CiAJbG9uZyB0aW1lb3V0ID0gZGVmYXVsdF90aW1lb3V0OwogCi0JY3VycmVudC0mZ3Q7ZmxhZ3MgfD0gUEZfS0NPTVBBQ1REOwogCXNldF9mcmVlemFibGUoKTsKIAogCXBnZGF0LSZndDtrY29tcGFjdGRfbWF4X29yZGVyID0gMDsKQEAgLTMyNTQsMTEgJiM0MzszMjUzLDE1IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApCiAJCQlwZ2RhdC0mZ3Q7cHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IGZhbHNlOwogCX0KIAotCWN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7PSB+UEZfS0NPTVBBQ1REOwotCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mztib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rY29tcGFjdGQpOwomIzQzOwogLyoKICAqIFRoaXMga2NvbXBhY3RkIHN0YXJ0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGluaXQgYW5kIG5vZGUtaG90LWFkZC4KICAqIE9uIG5vZGUtaG90LWFkZCwga2NvbXBhY3RkIHdpbGwgbW92ZWQgdG8gcHJvcGVyIGNwdXMgaWYgY3B1cyBhcmUgaG90LWFkZGVkLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiZjI3ODZjNzI0N2Q0Li45Zjk5NjMzZDdkYzFlIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzUzOSw3ICYjNDM7NzUzOSw3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApCiAJICogdXMgZnJvbSByZWN1cnNpdmVseSB0cnlpbmcgdG8gZnJlZSBtb3JlIG1lbW9yeSBhcyB3ZSYjMzk7cmUKIAkgKiB0cnlpbmcgdG8gZnJlZSB0aGUgZmlyc3QgcGllY2Ugb2YgbWVtb3J5IGluIHRoZSBmaXJzdCBwbGFjZSkuCiAJICovCi0JdHNrLSZndDtmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDsKJiM0MzsJdHNrLSZndDtmbGFncyB8PSBQRl9NRU1BTExPQzsKIAlzZXRfZnJlZXphYmxlKCk7CiAKIAlXUklURV9PTkNFKHBnZGF0LSZndDtrc3dhcGRfb3JkZXIsIDApOwpAQCAtNzU4OSwxMSAmIzQzOzc1ODksMTcgQEAgc3RhdGljIGludCBrc3dhcGQodm9pZCAqcCkKIAkJCWdvdG8ga3N3YXBkX3RyeV9zbGVlcDsKIAl9CiAKLQl0c2stJmd0O2ZsYWdzICZhbXA7PSB+KFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKTsKJiM0MzsJdHNrLSZndDtmbGFncyAmYW1wOz0gflBGX01FTUFMTE9DOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mztib29sIGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtzd2FwZDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rc3dhcGQpOwomIzQzOwogLyoKICAqIEEgem9uZSBpcyBsb3cgb24gZnJlZSBtZW1vcnkgb3IgdG9vIGZyYWdtZW50ZWQgZm9yIGhpZ2gtb3JkZXIgbWVtb3J5LiAgSWYKICAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSYjMzk7cwpkaWZmIC0tZ2l0IGEvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaCBiL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmgKaW5kZXggNzZmNWUwMjVlMTA3Ni4uODA3ZWY4ODFjZTJkNCAxMDA2NDQKLS0tIGEvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oCkBAIC0zMSw4ICYjNDM7MzEsNiBAQAogI2RlZmluZSBQRl9JRExFCQkJCTB4MDAwMDAwMDIJLyogSSBhbSBhbiBJRExFIHRocmVhZCAqLwogI2RlZmluZSBQRl9JT19XT1JLRVIJCQkweDAwMDAwMDEwCS8qIFRhc2sgaXMgYW4gSU8gd29ya2VyICovCiAjZGVmaW5lIFBGX1dRX1dPUktFUgkJCTB4MDAwMDAwMjAJLyogSSYjMzk7bSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi8KLSNkZWZpbmUgUEZfS0NPTVBBQ1RECQkJMHgwMDAxMDAwMCAgICAgIC8qIEkgYW0ga2NvbXBhY3RkICovCi0jZGVmaW5lIFBGX0tTV0FQRAkJCTB4MDAwMjAwMDAgICAgICAvKiBJIGFtIGtzd2FwZCAqLwogI2RlZmluZSBQRl9LVEhSRUFECQkJMHgwMDIwMDAwMAkvKiBJIGFtIGEga2VybmVsIHRocmVhZCAqLwogI2RlZmluZSBQRl9FWElUSU5HCQkJMHgwMDAwMDAwNAogI2RlZmluZSBDTE9DS19NT05PVE9OSUMJCQkxCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6eiBhbmQsIGlmIHNvLCBob3cgdG8gYmVzdCBhcHByb2FjaCBpdC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdpbmcgYW5kIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGFyZS4gTG9va3MgbGlrZSB3ZSBoYXZlIGEgZmV3IGZpbGVzIGFmZmVjdGVkLCBzbyBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZW0uCgoxLiAgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgOiBUaGlzIG9uZSYjMzk7cyBzdHJhaWdodGZvcndhcmQ7IGEgYml0d2lzZSBjaGVjayB1c2luZyBgUEZfTUVNQUxMT0NgIGlzIHNpbXBsaWZpZWQuIExpa2VseSBub3QgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcsIGJ1dCB3ZSBjYW4mIzM5O3QgY29tcGxldGVseSBkaXNtaXNzIGl0IHdpdGhvdXQgbW9yZSBjb250ZXh0LiBNaW5pbWFsIGltcGFjdCBJIHdvdWxkIHRoaW5rLgoKMi4gIGBmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jYDogQWgsIG5vdyB0aGlzIGlzIG1vcmUgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSByZW1vdmluZyBga3N3YXBkYCB0cmFja2luZyBhbmQgbmVzdGVkIGZsYWcgbWFuaXB1bGF0aW9ucyB3aXRoaW4gdGhlIFhGUyBiLXRyZWUgc3BsaXR0aW5nIGNvZGUuIFhGUyBpcyBhbHdheXMgYSBnb29kIHRhcmdldC4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHNpbXBsaWZpY2F0aW9uIG9mIGxvY2tpbmcgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBzcGxpdHRpbmcgb3BlcmF0aW9ucywgYW5kIHRoYXQmIzM5O3MgdGhlIGtpbmQgb2YgcGxhY2Ugd2hlcmUgZnV6emluZyBvZnRlbiBmaW5kcyBpbnRlcmVzdGluZyBiZWhhdmlvci4gTmVlZCB0byBpbnZlc3RpZ2F0ZSB3aHkgdGhvc2UgZmxhZ3MgYXJlIGJlaW5nIHJlbW92ZWQuIENvdWxkIGJlIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYnV0IGNvdWxkIGFsc28gYmUgYSBzdWJ0bGUgYnVnIGZpeC4KCjMuICBgaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhgOiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcsIG1vdmluZyB0aGUgYGN1cnJlbnRfaXNfa2NvbXBhY3RkYCBjaGVjayB0byBhIGZ1bmN0aW9uLiBOb3RoaW5nIHRvbyBleGNpdGluZyBoZXJlLCBqdXN0IGNsZWFuIHVwLgoKNC4gIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgOiBEcm9wcGluZyBgUEZfS0NPTVBBQ1REYCBhbmQgYFBGX0tTV0FQRGAgZmxhZ3MuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IHNpZ25hbHMgYSBzaGlmdCBpbiBob3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgb3IgdHJhY2tlZC4gVGhlIGhvbGVzIGxlZnQgYmVoaW5kIGFyZSBhIGJpdCBjb25jZXJuaW5nLiBOZWVkIHRvIGZvbGxvdyB1cCBvbiB0aGlzIGFuZCBzZWUgd2hhdCBpbXBhY3QgdGhpcyBoYXMuCgo1LiAgYGluY2x1ZGUvbGludXgvc3dhcC5oYDogQWdhaW4sIHJlZmFjdG9yaW5nLCBtb3ZpbmcgYGN1cnJlbnRfaXNfa3N3YXBkYCB0byBhIGZ1bmN0aW9uLiBMZXNzIGNyaXRpY2FsIG9uIGl0cyBvd24uCgo2LiAgYG1tL2NvbXBhY3Rpb24uY2A6IEltcGxlbWVudGF0aW9uIG9mIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAuCgo3LiAgYG1tL3Ztc2Nhbi5jYDogSW1wbGVtZW50YXRpb24gb2YgYGN1cnJlbnRfaXNfa3N3YXBkYC4KCjguICBgdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaGA6IFJlbW92aW5nIHRoZSBtYWNyb3MgZm9yIHRoZSBmbGFncy4gU2VlbXMgY29uc2lzdGVudCB3aXRoIHRoZSBvdGhlciBjaGFuZ2VzLgoKU28sIHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJlc3Qgc2VlbSB0byBiZSB0aGUgYFhGU2AgY2hhbmdlcyBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIGZsYWdzIGBQRl9LQ09NUEFDVERgIGFuZCBgUEZfS1NXQVBEYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayB0aGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24uIFRoZSByZW1vdmFsIG9mIHRoZSBmbGFncyBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBmbGFncyBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50LCBvciB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIGNoZWNraW5nIHRob3NlIGZsYWdzIGlzIGJlaW5nIGNoYW5nZWQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB3aGVyZSBgY3VycmVudF9pc19rc3dhcGRgIGFuZCBgY3VycmVudF9pc19rY29tcGFjdGRgIGFyZSBiZWluZyBjYWxsZWQsIHRvIHVuZGVyc3RhbmQgdGhlIGRvd25zdHJlYW0gaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIGZpcmUgdXAgYGdpdCBncmVwYCBhbmQgbG9vayBmb3IgdGhvc2UgY2FsbHMgYWNyb3NzIHRoZSBrZXJuZWwgdG8gZGV0ZXJtaW5lIHRoZSBmdWxsIHNjb3BlLiBCYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcgYW5kIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3VycmVudF9pc19rc3dhcGR8Y3VycmVudF9pc19rY29tcGFjdGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM9MzE4PWk5MTVfZ2VtX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy0zMjktXHRcdFx0XHRJOTE1X1NIUklOS19VTkJPVU5EKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jOjMzMDpcdGlmIChzYy1cdTAwM2Vucl9zY2FubmVkIFx1MDAzYyBzYy1cdTAwM2Vucl90b19zY2FuIFx1MDAyNlx1MDAyNiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy0zMzEtXHRcdGludGVsX3dha2VyZWZfdCB3YWtlcmVmO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9zaHJpbmtlci5jPTI3PXN0YXRpYyBib29sIGNhbl9ibG9jayhzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9zaHJpbmtlci5jLTI5LVx0cmV0dXJuIChzYy1cdTAwM2VnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pIHx8XG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fc2hyaW5rZXIuYzozMDpcdCAgICAgICAoY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjYgKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9LU1dBUERfUkVDTEFJTSkpO1xuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3Nocmlua2VyLmMtMzEtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9MTM3Nz1zdGF0aWMgYm9vbCBjYW5fYmxvY2soc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTEzODMtXHRyZXR1cm4gKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfHxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6MTM4NDpcdCAgICAgICAoKHNjLVx1MDAzZWdmcF9tYXNrIFx1MDAyNiBfX0dGUF9LU1dBUERfUkVDTEFJTSkgXHUwMDI2XHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy0xMzg1LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmM9MTE2Mz1ib29sIHR0bV9ib19zaHJpbmtfYXZvaWRfd2FpdCh2b2lkKVxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jLTExNjQte1xuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jOjExNjU6XHRyZXR1cm4gIWN1cnJlbnRfaXNfa3N3YXBkKCk7XG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMtMTE2Ni19XG4tLVxuZnMvZjJmcy9pbm9kZS5jPTEwMjE9c3RhdGljIHZvaWQgZjJmc19wb3N0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZjJmcy9pbm9kZS5jLTEwNjUtXHQvKiBMZXQmIzM5O3MgZG8gdGhpcyBpbiB3b3JrcXVldWUgb3V0IG9mIHRoZSBkaXJlY3QgcmVjbGFpbSBwYXRoLiAqL1xuZnMvZjJmcy9pbm9kZS5jOjEwNjY6XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSkge1xuZnMvZjJmcy9pbm9kZS5jLTEwNjctXHRcdGYyZnNfcmVjb3JkX2lub2RlX3N0YXRlKHNiaSwgaW5vZGUtXHUwMDNlaV9pbm8sIHJlY29yZF9iaXRzKTtcbi0tXG5mcy9pbm9kZS5jPTkzMz1zdGF0aWMgZW51bSBscnVfc3RhdHVzIGlub2RlX2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxuZnMvaW5vZGUuYy05NzktXHRcdHJlYXAgPSBpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhLCAwLCAtMSk7XG5mcy9pbm9kZS5jOjk4MDpcdFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5mcy9pbm9kZS5jLTk4MS1cdFx0XHRfX2NvdW50X3ZtX2V2ZW50cyhLU1dBUERfSU5PREVTVEVBTCwgcmVhcCk7XG4tLVxuZnMvbmV0ZnMvbWlzYy5jPTMwND1ib29sIG5ldGZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25ldGZzL21pc2MuYy0zMjUtXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pKSkgeyAvKiBbREVQUkVDQVRFRF0gKi9cbmZzL25ldGZzL21pc2MuYzozMjY6XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8ICEoZ2ZwIFx1MDAyNiBfX0dGUF9GUykpXG5mcy9uZXRmcy9taXNjLmMtMzI3LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9uZnMvZmlsZS5jPTUxMj1zdGF0aWMgYm9vbCBuZnNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxuZnMvbmZzL2ZpbGUuYy01MTgtXHRcdGlmICgoY3VycmVudF9nZnBfY29udGV4dChnZnApIFx1MDAyNiBHRlBfS0VSTkVMKSAhPSBHRlBfS0VSTkVMIHx8XG5mcy9uZnMvZmlsZS5jOjUxOTpcdFx0ICAgIGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY3VycmVudF9pc19rY29tcGFjdGQoKSlcbmZzL25mcy9maWxlLmMtNTIwLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9uZnMvZnNjYWNoZS5oPTEwMj1zdGF0aWMgaW5saW5lIGJvb2wgbmZzX2ZzY2FjaGVfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4tLVxuZnMvbmZzL2ZzY2FjaGUuaC0xMDQtXHRpZiAoZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pKSB7IC8qIFtERVBSRUNBVEVEXSAqL1xuZnMvbmZzL2ZzY2FjaGUuaDoxMDU6XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIHx8ICEoZ2ZwIFx1MDAyNiBfX0dGUF9GUykpXG5mcy9uZnMvZnNjYWNoZS5oLTEwNi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTAwPWJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwMS1cdFx0XHRcdFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDI6Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwMy1leHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3J1bihpbnQgbmlkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMTI9c3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMTgtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMTk6c3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjAte1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTMzNT1leHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozMzY6Ym9vbCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTMzNy1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MzE5ND1zdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjU4LVxubW0vY29tcGFjdGlvbi5jOjMyNTk6Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKVxubW0vY29tcGFjdGlvbi5jLTMyNjAte1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjYyLX1cbm1tL2NvbXBhY3Rpb24uYzozMjYzOkVYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaXNfa2NvbXBhY3RkKTtcbm1tL2NvbXBhY3Rpb24uYy0zMjY0LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ2Nz1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDcyLVxubW0vdm1zY2FuLmM6NDczOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy00NzQtXHRcdHJldHVybiAwO1xuLS1cbm1tL3Ztc2Nhbi5jPTUzMT12b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0MS1cdCAqL1xubW0vdm1zY2FuLmM6NTQyOlx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNTQzLVx0ICAgIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IChQRl9VU0VSX1dPUktFUnxQRl9LVEhSRUFEKSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTEwNzg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEyMTAtXHRcdFx0LyogQ2FzZSAxIGFib3ZlICovXG5tbS92bXNjYW4uYzoxMjExOlx0XHRcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtMTIxMi1cdFx0XHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS92bXNjYW4uYz0xODQ3PXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLFxuLS1cbm1tL3Ztc2Nhbi5jLTE4NTItXG5tbS92bXNjYW4uYzoxODUzOlx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy0xODU0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9MzkwNj1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqc2V0X21tX3dhbGsoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmb3JjZV9hbGxvYylcbi0tXG5tbS92bXNjYW4uYy0zOTA5LVxubW0vdm1zY2FuLmM6MzkxMDpcdGlmIChwZ2RhdCBcdTAwMjZcdTAwMjYgY3VycmVudF9pc19rc3dhcGQoKSkge1xubW0vdm1zY2FuLmMtMzkxMS1cdFx0Vk1fV0FSTl9PTl9PTkNFKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5MTQtXHR9IGVsc2UgaWYgKCF3YWxrIFx1MDAyNlx1MDAyNiBmb3JjZV9hbGxvYykge1xubW0vdm1zY2FuLmM6MzkxNTpcdFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xubW0vdm1zY2FuLmMtMzkxNi1cbi0tXG5tbS92bXNjYW4uYz0zOTI2PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbi0tXG5tbS92bXNjYW4uYy0zOTM0LVxubW0vdm1zY2FuLmM6MzkzNTpcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTM5MzYtXHRcdGtmcmVlKHdhbGspO1xuLS1cbm1tL3Ztc2Nhbi5jPTQyOTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00Mjk1LVxubW0vdm1zY2FuLmM6NDI5NjpcdFZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7XG5tbS92bXNjYW4uYy00Mjk3LVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMDI9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTEzLVx0LyogY2hlY2sgdGhlIG9yZGVyIHRvIGV4Y2x1ZGUgY29tcGFjdGlvbi1pbmR1Y2VkIHJlY2xhaW0gKi9cbm1tL3Ztc2Nhbi5jOjUxMTQ6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG5tbS92bXNjYW4uYy01MTE1LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9NTMxND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzMzYtXG5tbS92bXNjYW4uYzo1MzM3Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy01MzM4LVx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgPSAwO1xuLS1cbm1tL3Ztc2Nhbi5jLTUzNDQtXG5tbS92bXNjYW4uYzo1MzQ1Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXG5tbS92bXNjYW4uYy01MzQ2LVx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbi0tXG5tbS92bXNjYW4uYz02MDY4PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTAyLVx0ICovXG5tbS92bXNjYW4uYzo2MTAzOlx0cHJvcG9ydGlvbmFsX3JlY2xhaW0gPSAoIWNncm91cF9yZWNsYWltKHNjKSBcdTAwMjZcdTAwMjYgIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02MTA0LVx0XHRcdFx0c2MtXHUwMDNlcHJpb3JpdHkgPT0gREVGX1BSSU9SSVRZKTtcbi0tXG5tbS92bXNjYW4uYz02MjU5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02Mjc2LVx0ICovXG5tbS92bXNjYW4uYzo2Mjc3Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlbWVtY2dfZnVsbF93YWxrKVxubW0vdm1zY2FuLmMtNjI3OC1cdFx0cGFydGlhbCA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmM9NjMzOD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02Mzc2LVxubW0vdm1zY2FuLmM6NjM3NzpcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7XG5tbS92bXNjYW4uYy02Mzc4LVx0XHQvKlxuLS1cbm1tL3Ztc2Nhbi5jLTY0MTktXG5tbS92bXNjYW4uYzo2NDIwOlx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jLTY0MjEtXHRcdFx0c2V0X2JpdChMUlVWRUNfTk9ERV9DT05HRVNURUQsIFx1MDAyNnRhcmdldF9scnV2ZWMtXHUwMDNlZmxhZ3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTY0MjktXHQgKi9cbm1tL3Ztc2Nhbi5jOjY0MzA6XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgXHUwMDI2XHUwMDI2IGN1cnJlbnRfbWF5X3Rocm90dGxlKCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02NDMxLVx0ICAgICFzYy1cdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3Ztc2Nhbi5jPTY0ODU9c3RhdGljIHZvaWQgY29uc2lkZXJfcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02NTA2LVx0ICovXG5tbS92bXNjYW4uYzo2NTA3Olx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY2dyb3VwX3JlY2xhaW0oc2MpKVxubW0vdm1zY2FuLmMtNjUwOC1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTc1MjM9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbi0tXG5tbS92bXNjYW4uYy03NTk2LVxubW0vdm1zY2FuLmM6NzU5Nzpib29sIGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXG5tbS92bXNjYW4uYy03NTk4LXtcbi0tXG5tbS92bXNjYW4uYy03NjAwLX1cbm1tL3Ztc2Nhbi5jOjc2MDE6RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rc3dhcGQpO1xubW0vdm1zY2FuLmMtNzYwMi1cbi0tXG5tbS92bXNjYW4uYz03NjY4PXZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL3Ztc2Nhbi5jLTc2NzEtXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxubW0vdm1zY2FuLmM6NzY3MjpcdFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cbm1tL3Ztc2Nhbi5jLTc2NzMtXHRcdFx0S1NXQVBEX0NMRUFSX0hPUEVMRVNTX0tTV0FQRCA6IEtTV0FQRF9DTEVBUl9IT1BFTEVTU19ESVJFQ1QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjA2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdm9sdXRpb24gb2YgS2VybmVsIFRocmVhZCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBpZGVudGlmeWluZyB0aGUga3N3YXBkIGFuZCBrY29tcGFjdGQgcHJvY2Vzc2VzIG5vdy4gSSByZWNhbGwgdGhleSB1c2VkIHRvIHVzZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyDigJMgdGhhdCB3YXMgdGhlIG9sZCB3YXkuIE5vdywgdGhlIGNoZWNrcyBoYXZlIGJlZW4gdXBkYXRlZCB0byB1c2UgYGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrc3dhcGRgIGFuZCBga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZGAuIEludGVyZXN0aW5nLiBUaGlzIHN1Z2dlc3RzIGEgc2hpZnQgaW4gaG93IHRoZXNlIGtlcm5lbCB0aHJlYWRzIGFyZSBiZWluZyBjYXRlZ29yaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBuZXcgbWV0aG9kLCBzcGVjaWZpY2FsbHksIHdoYXQgYGt0aHJlYWRfZnVuY2AgaXMgYWN0dWFsbHkgKmRvaW5nKi4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGt0aHJlYWRfZnVuY2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIHJldmVhbHMuIFRoaXMgY2hhbmdlIGxpa2VseSBoYXMgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIG1hbmFnZSBhbmQgbW9uaXRvciB0aGVzZSBjcnVjaWFsIG1lbW9yeSBtYW5hZ2VtZW50IHRocmVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3RocmVhZF9mdW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYz01OTY9c3RhdGljIHN0cnVjdCBzaW1wbGVfd29ya19xdWV1ZSAqZ2V0X2N1cnJlbnRfdGhyZWFkX3dvcmtfcXVldWUodm9pZClcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9mdW5uZWwtd29ya3F1ZXVlLmMtNjA2LVxuZHJpdmVycy9tZC9kbS12ZG8vZnVubmVsLXdvcmtxdWV1ZS5jOjYwNzpcdGlmIChrdGhyZWFkX2Z1bmMoY3VycmVudCkgIT0gd29ya19xdWV1ZV9ydW5uZXIpXG5kcml2ZXJzL21kL2RtLXZkby9mdW5uZWwtd29ya3F1ZXVlLmMtNjA4LVx0XHQvKiBOb3QgYSBWRE8gd29yayBxdWV1ZSB0aHJlYWQuICovXG4tLVxuZnMvbmZzZC9uZnNzdmMuYz01OTU9c3RydWN0IHN2Y19ycXN0ICpuZnNkX2N1cnJlbnRfcnFzdCh2b2lkKVxuZnMvbmZzZC9uZnNzdmMuYy01OTYte1xuZnMvbmZzZC9uZnNzdmMuYzo1OTc6XHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpID09IG5mc2QpXG5mcy9uZnNkL25mc3N2Yy5jLTU5OC1cdFx0cmV0dXJuIGt0aHJlYWRfZGF0YShjdXJyZW50KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaD0xMTI9Ym9vbCBrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcChib29sICp3YXNfZnJvemVuKTtcbmluY2x1ZGUvbGludXgva3RocmVhZC5oOjExMzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcbmluY2x1ZGUvbGludXgva3RocmVhZC5oLTExNC12b2lkICprdGhyZWFkX2RhdGEoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcbi0tXG5rZXJuZWwva3RocmVhZC5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcCk7XG4tLVxua2VybmVsL2t0aHJlYWQuYy0yMTEtLyoqXG5rZXJuZWwva3RocmVhZC5jOjIxMjogKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXG5rZXJuZWwva3RocmVhZC5jLTIxMy0gKiBAdGFzazoga3RocmVhZCB0YXNrIGluIHF1ZXN0aW9uXG4tLVxua2VybmVsL2t0aHJlYWQuYy0yMTYtICovXG5rZXJuZWwva3RocmVhZC5jOjIxNzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxua2VybmVsL2t0aHJlYWQuYy0yMTgte1xuLS1cbmtlcm5lbC9rdGhyZWFkLmMtMjIzLX1cbmtlcm5lbC9rdGhyZWFkLmM6MjI0OkVYUE9SVF9TWU1CT0xfR1BMKGt0aHJlYWRfZnVuYyk7XG5rZXJuZWwva3RocmVhZC5jLTIyNS1cbi0tXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBuYmNvbl9rdGhyZWFkX3dha2Uoc3RydWN0IGNvbnNvbGUgKmNvbilcbi0tXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmgtMTI4LVx0ICpcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaDoxMjk6XHQgKiBUaGlzIHBhaXJzIHdpdGggbmJjb25fa3RocmVhZF9mdW5jOkEuXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmgtMTMwLVx0ICovXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jPTExODA9c3RhdGljIGJvb2wgbmJjb25fa3RocmVhZF9zaG91bGRfd2FrZXVwKHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBuYmNvbl9jb250ZXh0ICpjdHh0KVxuLS1cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjE0LS8qKlxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEyMTU6ICogbmJjb25fa3RocmVhZF9mdW5jIC0gVGhlIHByaW50ZXIgdGhyZWFkIGZ1bmN0aW9uXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNi0gKiBAX19jb25zb2xlOlx0Q29uc29sZSB0byBvcGVyYXRlIG9uXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyMTktICovXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTIyMDpzdGF0aWMgaW50IG5iY29uX2t0aHJlYWRfZnVuYyh2b2lkICpfX2NvbnNvbGUpXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIyMS17XG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyNDQtXHRcdFx0ICAgbmJjb25fa3RocmVhZF9zaG91bGRfd2FrZXVwKGNvbiwgY3R4dCksXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTI0NTpcdFx0XHQgICBUQVNLX0lOVEVSUlVQVElCTEUpOyAvKiBMTU0obmJjb25fa3RocmVhZF9mdW5jOkEpICovXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTI0Ni1cbi0tXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTI5Mz1zdGF0aWMgaW5saW5lIGJvb2wgcmN1d2FpdF9oYXNfc2xlZXBlcihzdHJ1Y3QgcmN1d2FpdCAqdylcbi0tXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTMwMy1cdCAqXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTMwNDpcdCAqIFRoaXMgcGFpcnMgd2l0aCBuYmNvbl9rdGhyZWFkX2Z1bmM6QS5cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzA1LVx0ICovXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jPTEzNzU9Ym9vbCBuYmNvbl9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgY29uc29sZSAqY29uKVxuLS1cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzgzLVxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEzODQ6XHRrdCA9IGt0aHJlYWRfcnVuKG5iY29uX2t0aHJlYWRfZnVuYywgY29uLCBcJiMzNDtwci8lcyVkXCYjMzQ7LCBjb24tXHUwMDNlbmFtZSwgY29uLVx1MDAzZWluZGV4KTtcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzg1LVx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcbi0tXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTM2NTY9c3RhdGljIGJvb2wgbGVnYWN5X2t0aHJlYWRfc2hvdWxkX3dha2V1cCh2b2lkKVxuLS1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzcwMy1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzcwNDpzdGF0aWMgaW50IGxlZ2FjeV9rdGhyZWFkX2Z1bmModm9pZCAqdW51c2VkKVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzA1LXtcbi0tXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTM3Mjg9c3RhdGljIGJvb2wgbGVnYWN5X2t0aHJlYWRfY3JlYXRlKHZvaWQpXG4tLVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzMzLVxua2VybmVsL3ByaW50ay9wcmludGsuYzozNzM0Olx0a3QgPSBrdGhyZWFkX3J1bihsZWdhY3lfa3RocmVhZF9mdW5jLCBOVUxMLCBcJiMzNDtwci9sZWdhY3lcJiMzNDspO1xua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzM1LVx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MzI1OT1ib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG5tbS9jb21wYWN0aW9uLmMtMzI2MC17XG5tbS9jb21wYWN0aW9uLmM6MzI2MTpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xubW0vY29tcGFjdGlvbi5jLTMyNjItfVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTc0PWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtMzE3NS17XG5tbS9raHVnZXBhZ2VkLmM6MzE3NjpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2h1Z2VwYWdlZDtcbm1tL2todWdlcGFnZWQuYy0zMTc3LX1cbi0tXG5tbS92bXNjYW4uYz03NTk3PWJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcbm1tL3Ztc2Nhbi5jLTc1OTgte1xubW0vdm1zY2FuLmM6NzU5OTpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xubW0vdm1zY2FuLmMtNzYwMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgVGhyZWFkIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Uga2VybmVsIHRocmVhZHMgYXJlIGJlaGF2aW5nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwva3RocmVhZC5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGtlcm5lbCB0aHJlYWQgbWFuYWdlbWVudCBzaG91bGQgcmVzaWRlLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYGt0aHJlYWRfZnVuY2AgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgdGhyZWFkLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgaW52b2tlZCBpcyBrZXkuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYW5kIGZyb20gYGt0aHJlYWRfZnVuY2AuIFRoaXMgbWVhbnMgZXhhbWluaW5nIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcywgbGlrZSB0aGUgYGt0aHJlYWRgIHN0cnVjdCwgYW5kIGhvdyB0aGUgc2NoZWR1bGVyIGludGVyYWN0cyB3aXRoIGl0LiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdW51c3VhbCBiZWhhdmlvciBpbiB0aGUgc2V0dXAgYW5kIHRlYXJkb3duIG9mIHRoZXNlIHRocmVhZHMuIEkgZXhwZWN0IHRvIGJlIGRpZ2dpbmcgaW50byB0aGUgc2NoZWR1bGluZyBwb2xpY2llcywgc2lnbmFscywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBlbXBsb3llZCwgc2luY2UgdGhlc2UgYXJlIGFsd2F5cyBhcmVhcyBvZiBwb3RlbnRpYWwgY29tcGxleGl0eSBhbmQgYnVncy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJlZW1wdGlvbiBtb2RlbCBoZXJlLCB0byBiZSBzdXJlIEkgY2FuIHZpc3VhbGl6ZSBob3cgdGhpcyBjb2RlIGludGVyYWN0cyB3aGVuIHRoZSB0aHJlYWQgaXMgaW4gYW4gYWN0aXZlIG9yIHdhaXRpbmcgc3RhdGUuIFRoaXMgd2lsbCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGV4cGVjdCB0byBmb2xsb3cgdGhpcyB0cmFjZSBmcm9tIHRoZSBrdGhyZWFkIGZ1bmN0aW9uIHRocm91Z2ggdGhlIHZhcmlvdXMgc3RhZ2VzIHRoYXQgdGhlIGt0aHJlYWQgaGFzIHVudGlsIGl0cyBjb21wbGV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2t0aHJlYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XG4gMjExOlx0LyoqXG4gMjEyOlx0ICoga3RocmVhZF9mdW5jIC0gcmV0dXJuIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgb24ga3RocmVhZCBjcmVhdGlvblxuIDIxMzpcdCAqIEB0YXNrOiBrdGhyZWFkIHRhc2sgaW4gcXVlc3Rpb25cbiAyMTQ6XHQgKlxuIDIxNTpcdCAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFzayBpcyBub3QgYSBrdGhyZWFkLlxuIDIxNjpcdCAqL1xuIDIxNzpcdHZvaWQgKmt0aHJlYWRfZnVuYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gMjE4Olx0e1xuIDIxOTpcdFx0c3RydWN0IGt0aHJlYWQgKmt0aHJlYWQgPSB0c2tfaXNfa3RocmVhZCh0YXNrKTtcbiAyMjA6XHRcdGlmIChrdGhyZWFkKVxuIDIyMTpcdFx0XHRyZXR1cm4ga3RocmVhZC1cdTAwM2V0aHJlYWRmbjtcbiAyMjI6XHRcdHJldHVybiBOVUxMO1xuIDIyMzpcdH1cbiAyMjQ6XHRFWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2Z1bmMpO1xuIDIyNTpcdFxuIDIyNjpcdC8qKlxuIDIyNzpcdCAqIGt0aHJlYWRfZGF0YSAtIHJldHVybiBkYXRhIHZhbHVlIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXG4gMjI4Olx0ICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxuIDIyOTpcdCAqXG4gMjMwOlx0ICogUmV0dXJuIHRoZSBkYXRhIHZhbHVlIHNwZWNpZmllZCB3aGVuIGt0aHJlYWQgQHRhc2sgd2FzIGNyZWF0ZWQuXG4gMjMxOlx0ICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhlIHZhbGlkaXR5IG9mIEB0YXNrIHdoZW5cbiAyMzI6XHQgKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gMjMzOlx0ICovXG4gMjM0Olx0dm9pZCAqa3RocmVhZF9kYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlbW92YWwgb2YgUEZfS1NXQVBEIGFuZCBJdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYFBGX0tTV0FQRGAgYW5kIGBQRl9LQ09NUEFDVERgIHdlcmUgcmVtb3ZlZCBiZWNhdXNlIHdlJiMzOTtyZSBub3cgdXNpbmcgYGt0aHJlYWRfZnVuYyhjdXJyZW50KWAgaW5zdGVhZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGlzIGNoYW5nZSByaXBwbGVzIG91dCBmdXJ0aGVyLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KClRoZSBmaXJzdCBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gSXQgd2VudCBmcm9tIGNoZWNraW5nIGAoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKSkgPT0gUEZfTUVNQUxMT0NgIHRvIHNpbXBseSBgKGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IFBGX01FTUFMTE9DKWAuIFRoZSBvbGQgY2hlY2sgc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGV4Y2x1ZGUga3N3YXBkIGZyb20gYSBtZW1vcnkgYWxsb2NhdGlvbiBjaGVjay4gV2h5PwoKSSByZW1lbWJlciB0aGF0IGBrc3dhcGRgIHNldHMgYFBGX01FTUFMTE9DYCAoIGB0c2stJmd0O2ZsYWdzIHw9IFBGX01FTUFMTE9DO2ApIHdoaWNoIGlzIGNsZWFyIGluIGBtbS92bXNjYW4uY2AuIEJ1dCBgUEZfS1NXQVBEYCB3YXMgYWxzbyBzZXQgb24ga3N3YXBkIHByZXZpb3VzbHkgYW5kIGl0IHNlZW1zIHRvIGhhdmUgYmVlbiByZW1vdmVkIHRvby4gVGhpcyBpcyB0aGUgY3J1eCBvZiBpdC4gVGhlIGNvZGUgaW4gYGlvbWFwX3dyaXRlcGFnZXNgIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgd3JpdGViYWNrIGZyb20gYSByZWNsYWltIGNvbnRleHQgKGxpa2Uga3N3YXBkKSAqc2hvdWxkIG5ldmVyKiBoYXBwZW4gZXhjZXB0IGluIGEgVk0gcmVncmVzc2lvbi4gU28sIHRoZSBvcmlnaW5hbCBjaGVjayB3YXMgZGVzaWduZWQgdG8gZW5zdXJlIHRoYXQgaWYgdGhlIHByb2Nlc3MgaGFkIGBQRl9LU1dBUERgIHNldCwgdGhhdCB0aGUgYFdBUk5fT05fT05DRWAgaW4gYGlvbWFwX3dyaXRlcGFnZXNgIHdvdWxkbiYjMzk7dCBiZSB0cmlnZ2VyZWQsIGJlY2F1c2Uga3N3YXBkIHdvdWxkbiYjMzk7dCB0cmlnZ2VyIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlIHBhdGguCgpCdXQgbm93LCBzaW5jZSBrc3dhcGQgb25seSBoYXMgYFBGX01FTUFMTE9DYCwgdGhlIGNoZWNrIGluIGBpb21hcF93cml0ZXBhZ2VzYCBpcyBnb2luZyB0byB0cmlnZ2VyIGlmIGtzd2FwZCAqZG9lcyogcnVuIHRoYXQgY29kZS4gQnV0LCBpZiBrc3dhcGQgaXMgY2FsbGluZyB0aGF0IGNvZGUsIGl0ICpzaG91bGRuJiMzOTt0KiBiZS4gVGhpcyBzdWdnZXN0cyB0aGF0IHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpcyBwb3RlbnRpYWxseSBicm9rZW4uIFdlIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGtzd2FwZCAqY2FuKiBlbnRlciBgaW9tYXBfd3JpdGVwYWdlc2AsIG9yIGlmIHNvbWV0aGluZyBlbHNlIGlzIGdvaW5nIG9uLiBJdCByZWFsbHkgbmVlZHMgdG8gYmUgZW5zdXJlZCB0aGF0IGtzd2FwZCBuZXZlciwgZXZlciwgY2FsbHMgdGhhdCBmdW5jdGlvbi4KClRoZSBYRlMgYnRyZWUgc3BsaXQgd29ya2VyIGFsc28gcHJldmlvdXNseSBzZXQgYFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEYCBpbiBgbmV3X3BmbGFnc2AsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnkgYW5kIGNvbW1lbnRzIG9uIHRoYXQgY29kZSB0byB1bmRlcnN0YW5kICp3aHkqIGBQRl9LU1dBUERgIHdhcyBpbmNsdWRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgbWF5IGdpdmUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHByZXZpb3VzIGxvZ2ljLCBiZWZvcmUgdGhlIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIHJlZmFjdG9yaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5OTA6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHQqY3VyO1xuMjk5MTpcdFx0aW50XHRcdFx0bGV2ZWw7XG4yOTkyOlx0XHR1bmlvbiB4ZnNfYnRyZWVfcHRyXHQqcHRycDtcbjI5OTM6XHRcdHVuaW9uIHhmc19idHJlZV9rZXlcdCprZXk7XG4yOTk0Olx0XHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0KipjdXJwO1xuMjk5NTpcdFx0aW50XHRcdFx0KnN0YXQ7XHRcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xuMjk5NjpcdFx0aW50XHRcdFx0cmVzdWx0O1xuMjk5NzpcdFx0c3RydWN0IGNvbXBsZXRpb25cdCpkb25lO1xuMjk5ODpcdFx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuMjk5OTpcdH07XG4zMDAwOlx0XG4zMDAxOlx0LypcbjMwMDI6XHQgKiBTdGFjayBzd2l0Y2hpbmcgaW50ZXJmYWNlcyBmb3IgYWxsb2NhdGlvblxuMzAwMzpcdCAqL1xuMzAwNDpcdHN0YXRpYyB2b2lkXG4zMDA1Olx0eGZzX2J0cmVlX3NwbGl0X3dvcmtlcihcbjMwMDY6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdFx0KndvcmspXG4zMDA3Olx0e1xuMzAwODpcdFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzXHQqYXJncyA9IGNvbnRhaW5lcl9vZih3b3JrLFxuMzAwOTpcdFx0XHRcdFx0XHRcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncywgd29yayk7XG4zMDEwOlx0XHR4ZnNfdHJhbnNfc2V0X2NvbnRleHQoYXJncy1cdTAwM2VjdXItXHUwMDNlYmNfdHApO1xuMzAxMTpcdFxuMzAxMjpcdFx0YXJncy1cdTAwM2VyZXN1bHQgPSBfX3hmc19idHJlZV9zcGxpdChhcmdzLVx1MDAzZWN1ciwgYXJncy1cdTAwM2VsZXZlbCwgYXJncy1cdTAwM2VwdHJwLFxuMzAxMzpcdFx0XHRcdFx0XHQgYXJncy1cdTAwM2VrZXksIGFyZ3MtXHUwMDNlY3VycCwgYXJncy1cdTAwM2VzdGF0KTtcbjMwMTQ6XHRcbjMwMTU6XHRcdHhmc190cmFuc19jbGVhcl9jb250ZXh0KGFyZ3MtXHUwMDNlY3VyLVx1MDAzZWJjX3RwKTtcbjMwMTY6XHRcbjMwMTc6XHRcdC8qXG4zMDE4Olx0XHQgKiBEbyBub3QgYWNjZXNzIGFyZ3MgYWZ0ZXIgY29tcGxldGUoKSBoYXMgcnVuIGhlcmUuIFdlIGRvbiYjMzk7dCBvd24gYXJnc1xuMzAxOTpcdFx0ICogYW5kIHRoZSBvd25lciBtYXkgcnVuIGFuZCBmcmVlIGFyZ3MgYmVmb3JlIHdlIHJldHVybiBoZXJlLlxuMzAyMDpcdFx0ICovXG4zMDIxOlx0XHRjb21wbGV0ZShhcmdzLVx1MDAzZWRvbmUpO1xuMzAyMjpcdH1cbjMwMjM6XHRcbjMwMjQ6XHQvKlxuMzAyNTpcdCAqIEJNQlQgc3BsaXQgcmVxdWVzdHMgb2Z0ZW4gY29tZSBpbiB3aXRoIGxpdHRsZSBzdGFjayB0byB3b3JrIG9uIHNvIHdlIHB1c2hcbjMwMjY6XHQgKiB0aGVtIG9mZiB0byBhIHdvcmtlciB0aHJlYWQgc28gdGhlcmUgaXMgbG90cyBvZiBzdGFjayB0byB1c2UuIEZvciB0aGUgb3RoZXJcbjMwMjc6XHQgKiBidHJlZSB0eXBlcywganVzdCBjYWxsIGRpcmVjdGx5IHRvIGF2b2lkIHRoZSBjb250ZXh0IHN3aXRjaCBvdmVyaGVhZCBoZXJlLlxuMzAyODpcdCAqXG4zMDI5Olx0ICogQ2FyZSBtdXN0IGJlIHRha2VuIGhlcmUgLSB0aGUgd29yayBxdWV1ZSByZXNjdWVyIHRocmVhZCBpbnRyb2R1Y2VzIHBvdGVudGlhbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHhmc19idHJlZV9zcGxpdGAqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgYHhmc19idHJlZV9zcGxpdGAgZnVuY3Rpb24uIEkgYWxyZWFkeSB1bmRlcnN0YW5kIHRoZSBoaWdoLWxldmVsIGNvbmNlcHQ6IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIG1lY2hhbmljcyBvZiBob3cgd2UgZGl2aWRlIGEgQi10cmVlIG5vZGUgd2hlbiBpdCBvdmVyZmxvd3MuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIHNwbGl0IHBvaW50IGFuZCBwb3RlbnRpYWxseSBzb21lIGluaXRpYWwgbm9kZSBhZGp1c3RtZW50cy4gTm93LCBJJiMzOTttIGFudGljaXBhdGluZyB0aGUgbml0dHktZ3JpdHR5OiBob3cgdGhlIGRhdGEgYW5kIG1ldGFkYXRhIGFyZSBhY3R1YWxseSBtb3ZlZCwgaG93IHBvaW50ZXJzIGFyZSB1cGRhdGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgd2UgbWFpbnRhaW4gdGhlIEItdHJlZSYjMzk7cyBjcnVjaWFsIHByb3BlcnRpZXMgYWZ0ZXIgdGhpcyBzcGxpdC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZSBzcGxpdCDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgcmVhbCBlbGVnYW5jZSAob3IgdWdsaW5lc3MhKSBvZiB0aGVzZSBhbGdvcml0aG1zIHJlc2lkZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGluZ3MgbGlrZSBqb3VybmFsIGxvZyBzdHJ1Y3R1cmVzIGlmIGFueSwgYW5kIGVycm9yIGhhbmRsaW5nLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBpbXBsZW1lbnRlZCB0byBtaW5pbWl6ZSBJL08gb3IgbG9ja2luZyBvdmVyaGVhZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMzA6XHQgKiBBR0YgXHUwMDNjXHUwMDNlIHdvcmtlciBxdWV1ZSBkZWFkbG9ja3MgaWYgdGhlIEJNQlQgYmxvY2sgYWxsb2NhdGlvbiBoYXMgdG8gbG9jayBuZXdcbjMwMzE6XHQgKiBBR0ZzIHRvIGFsbG9jYXRlIGJsb2Nrcy4gQSB0YXNrIGJlaW5nIHJ1biBieSB0aGUgcmVzY3VlciBjb3VsZCBhdHRlbXB0IHRvXG4zMDMyOlx0ICogbG9jayBhbiBBR0YgdGhhdCBpcyBhbHJlYWR5IGxvY2tlZCBieSBhIHRhc2sgcXVldWVkIHRvIHJ1biBieSB0aGUgcmVzY3VlcixcbjMwMzM6XHQgKiByZXN1bHRpbmcgaW4gYW4gQUJCQSBkZWFkbG9jayBhcyB0aGUgcmVzY3VlciBjYW5ub3QgcnVuIHRoZSBsb2NrIGhvbGRlciB0b1xuMzAzNDpcdCAqIHJlbGVhc2UgaXQgdW50aWwgdGhlIGN1cnJlbnQgdGhyZWFkIGl0IGlzIHJ1bm5pbmcgZ2FpbnMgdGhlIGxvY2suXG4zMDM1Olx0ICpcbjMwMzY6XHQgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB3ZSBvbmx5IGV2ZXIgcXVldWUgQk1CVCBzcGxpdHMgdGhhdCBkb24mIzM5O3QgaGF2ZSBhbiBBR0ZcbjMwMzc6XHQgKiBhbHJlYWR5IGxvY2tlZCB0byBhbGxvY2F0ZSBmcm9tLiBUaGUgb25seSBwbGFjZSB0aGF0IGRvZXNuJiMzOTt0IGhvbGQgYW4gQUdGXG4zMDM4Olx0ICogbG9ja2VkIGlzIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiBhdCBJTyBjb21wbGV0aW9uLCBidXQgdGhhdCBoYXMgYWxyZWFkeVxuMzAzOTpcdCAqIGJlZW4gb2ZmbG9hZGVkIHRvIGEgd29ya2VyIHRocmVhZCBhbmQgaGVuY2UgaGFzIG5vIHN0YWNrIGNvbnN1bXB0aW9uIGlzc3Vlc1xuMzA0MDpcdCAqIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQuXG4zMDQxOlx0ICovXG4zMDQyOlx0U1RBVElDIGludFx0XHRcdFx0XHQvKiBlcnJvciAqL1xuMzA0MzpcdHhmc19idHJlZV9zcGxpdChcbjMwNDQ6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHQqY3VyLFxuMzA0NTpcdFx0aW50XHRcdFx0bGV2ZWwsXG4zMDQ2Olx0XHR1bmlvbiB4ZnNfYnRyZWVfcHRyXHQqcHRycCxcbjMwNDc6XHRcdHVuaW9uIHhmc19idHJlZV9rZXlcdCprZXksXG4zMDQ4Olx0XHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0KipjdXJwLFxuMzA0OTpcdFx0aW50XHRcdFx0KnN0YXQpXHRcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xuMzA1MDpcdHtcbjMwNTE6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1x0YXJncztcbjMwNTI6XHRcdERFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpO1xuMzA1MzpcdFxuMzA1NDpcdFx0aWYgKCF4ZnNfYnRyZWVfaXNfYm1hcChjdXItXHUwMDNlYmNfb3BzKSB8fFxuMzA1NTpcdFx0ICAgIGN1ci1cdTAwM2ViY190cC1cdTAwM2V0X2hpZ2hlc3RfYWdubyA9PSBOVUxMQUdOVU1CRVIpXG4zMDU2Olx0XHRcdHJldHVybiBfX3hmc19idHJlZV9zcGxpdChjdXIsIGxldmVsLCBwdHJwLCBrZXksIGN1cnAsIHN0YXQpO1xuMzA1NzpcdFxuMzA1ODpcdFx0YXJncy5jdXIgPSBjdXI7XG4zMDU5Olx0XHRhcmdzLmxldmVsID0gbGV2ZWw7XG4zMDYwOlx0XHRhcmdzLnB0cnAgPSBwdHJwO1xuMzA2MTpcdFx0YXJncy5rZXkgPSBrZXk7XG4zMDYyOlx0XHRhcmdzLmN1cnAgPSBjdXJwO1xuMzA2MzpcdFx0YXJncy5zdGF0ID0gc3RhdDtcbjMwNjQ6XHRcdGFyZ3MuZG9uZSA9IFx1MDAyNmRvbmU7XG4zMDY1Olx0XG4zMDY2Olx0XHRJTklUX1dPUktfT05TVEFDSyhcdTAwMjZhcmdzLndvcmssIHhmc19idHJlZV9zcGxpdF93b3JrZXIpO1xuMzA2NzpcdFx0cXVldWVfd29yayh4ZnNfYWxsb2Nfd3EsIFx1MDAyNmFyZ3Mud29yayk7XG4zMDY4Olx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmRvbmUpO1xuMzA2OTpcdFx0ZGVzdHJveV93b3JrX29uX3N0YWNrKFx1MDAyNmFyZ3Mud29yayk7XG4zMDcwOlx0XHRyZXR1cm4gYXJncy5yZXN1bHQ7XG4zMDcxOlx0fVxuMzA3MjpcdCNlbHNlXG4zMDczOlx0I2RlZmluZSB4ZnNfYnRyZWVfc3BsaXRcdF9feGZzX2J0cmVlX3NwbGl0XG4zMDc0Olx0I2VuZGlmIC8qIF9fS0VSTkVMX18gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgS2VybmVsIFJlZmFjdG9yaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBjaGFuZ2UsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBYRlMgaW50ZXJhY3RzIHdpdGgga3N3YXBkIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0cy4gSXQgYXBwZWFycyB0aGUgb2xkIGFwcHJvYWNoIHVzZWQgYFBGX01FTUFMTE9DYCBhbmQgYFBGX0tTV0FQRGAgZmxhZ3MgdG8gbWltaWMga3N3YXBkIGJlaGF2aW9yIHdpdGhpbiB3b3JrZXIgdGhyZWFkcywgcGFydGljdWxhcmx5IGluIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYC4gVGhlIGdvYWwgd2FzIHRvIHByZXZlbnQgYmxvY2tpbmcgZHVyaW5nIHJlY2xhaW0gb3BlcmF0aW9ucy4gVGhpcyByZWZhY3RvcmluZyBjbGVhcmx5IGNoYW5nZXMgaG93IHRoYXQgY29udGV4dCBpcyBkZXRlcm1pbmVkLgoKTm93IEkmIzM5O20gZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggc2VyaWVzIGlzIG1vZGlmeWluZyBob3cgd2UgZGV0ZWN0IHRoZSBrc3dhcGQgYW5kIGtjb21wYWN0ZCBjb250ZXh0cy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgZGlyZWN0IGZsYWcgY2hlY2tzIChgY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfS1NXQVBEYCwgZXRjLikgd2l0aCBjYWxscyB0byBga3RocmVhZF9mdW5jKGN1cnJlbnQpYCwgd2hpY2ggY2hlY2tzIGlmIHRoZSBjdXJyZW50IHRhc2sgKmlzKiBhIGtlcm5lbCB0aHJlYWQgYW5kLCBpZiBzbywgcmV0dXJucyBpdHMgdGhyZWFkIGZ1bmN0aW9uIChga3N3YXBkYCBvciBga2NvbXBhY3RkYCkuIEltcG9ydGFudGx5LCBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgYXJlICpyZW1vdmVkKiBmcm9tIHRoZSB0YXNrIGZsYWdzLiBUaGVyZSYjMzk7cyBhbHNvIGEgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBhbmQgaW4gWEZTJiMzOTtzIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYC4KCklzIHRoaXMgcmVmYWN0b3JpbmcganVzdCBjb3NtZXRpYz8gTGV0JiMzOTtzIGNoZWNrIGFnYWluc3QgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEuIE15IGltbWVkaWF0ZSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyAqbm90KiBqdXN0IGRvY3VtZW50YXRpb24gb3IgbG9nZ2luZy4gSXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBmaWxlc3lzdGVtcy4gSXQmIzM5O3MgbGlrZWx5IGV4ZWN1dGFibGUsIHNvIHllcywgdGhpcyB3YXJyYW50cyBkZWVwZXIgc2NydXRpbnkgYW5kIGZ1enppbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgdGhlIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIGNoYW5nZSBhZmZlY3RzIHJlY2xhaW0sIGNvbXBhY3Rpb24sIGFuZCBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBIb3cgZG9lcyB0aGlzIGltcGFjdCBYRlMgYW5kIGlvbWFwLCB3aGljaCBhcmUga2V5IGFyZWFzIG9mIGludGVyZXN0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIGRpZmZlcmVudCB0aHJlYWQgdHlwZXMg4oCTIHdoYXQgaGFwcGVucyBpZiBgY3VycmVudGAgaXNuJiMzOTt0IGEga3RocmVhZD8gVGhlIGBrdGhyZWFkX2Z1bmMoKWAgY2hlY2tzIGBQRl9LVEhSRUFEYC4gSWYgaXQmIzM5O3Mgbm90IGEga3RocmVhZCwgaXQmIzM5O3MgcmV0dXJuaW5nIGBOVUxMYCBzbyBvdXIgY3VycmVudCBjb250ZXh0IGZ1bmN0aW9ucyB3aWxsIHJldHVybiBgZmFsc2VgLgoKRm9jdXNpbmcgb24gWEZTIGFuZCB0aGF0IGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYDogUHJldmlvdXNseSwgd29ya2VyIHRocmVhZHMgd2VyZSBzZXR0aW5nIGBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRGAgdG8gYWN0IGFzIGtzd2FwZC4gVGhpcyBpcyBub3cgcmVtb3ZlZC4gSW4gYGlvbWFwX3dyaXRlcGFnZXNgLCB3ZSBzZWUgYSBzaGlmdCBmcm9tIGNoZWNraW5nIGEgY29tYmluZWQgZmxhZyAoYFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEYCkgdG8ganVzdCBgUEZfTUVNQUxMT0NgLiBDcnVjaWFsbHksIGtzd2FwZCBzdGlsbCBzZXRzIGBQRl9NRU1BTExPQ2Agd2hlbiBpdCBzdGFydHMuIFRoZSBvbGQgbG9naWMgbWlnaHQgaGF2ZSAqbWlzc2VkKiB0aGUgcmVjbGFpbSB3cml0ZWJhY2sgaWYgaXQgKndhcyoga3N3YXBkLCBidXQgbm93IGl0IHVuY29uZGl0aW9uYWxseSAqd2FybnMqIG9uIHRoZSBgUEZfTUVNQUxMT0NgIGZsYWcuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSB0aGUgb3JpZ2luYWwgV0FSTl9PTiB3YXMgbWVhbnQgdG8gY2F0Y2ggcmVjbGFpbSB3cml0ZWJhY2sgaXNzdWVzLiBUaGUgY29tbWVudCBjb25maXJtcyB0aGlzLiBUaGUgY2hlY2sgdXNlZCB0byBvbmx5IGZsYWcgZGlyZWN0IHJlY2xhaW0sIGJ1dCBub3cgaXQgZmxhZ3MgKmFueSogcmVjbGFpbSBjb250ZXh0LgoKVGhpcyBhbHRlcnMgaG93IGVycm9ycyByZWxhdGVkIHRvIHdyaXRlYmFjayBpbiByZWNsYWltIGFyZSBoYW5kbGVkLiBUaGlzIG1vZGlmaWNhdGlvbiBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBob3cgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJhY3RzIHdpdGggZmlsZXN5c3RlbXMhIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlncyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgYW5kIHJ1biB0aGUgbW9kaWZpZWQgY29kZS4gYENPTkZJR19GU19JT01BUGAgb3IgYSBmaWxlc3lzdGVtIGNvbmZpZyAoWEZTLCBFWFQ0LCBldGMuKSBhcmUgbmVlZGVkLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGFuZCBJIHNob3VsZCBkb3VibGUtY2hlY2sgS2NvbmZpZyBmb3IgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgIGFuZCBgZnMveGZzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHRlc3RhYmxlIGFuZCBmaW5kIHRoZSBiZXN0IHdheSB0byBmdXp6IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCVUZGRVJFRF9JTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mMmZzL2YyZnMuaD0xMzEzPWVudW0gaW9zdGF0X3R5cGUge1xuLS1cbmZzL2YyZnMvZjJmcy5oLTEzMTUtXHRBUFBfRElSRUNUX0lPLFx0XHRcdC8qIGFwcCBkaXJlY3Qgd3JpdGUgSU9zICovXG5mcy9mMmZzL2YyZnMuaDoxMzE2Olx0QVBQX0JVRkZFUkVEX0lPLFx0XHQvKiBhcHAgYnVmZmVyZWQgd3JpdGUgSU9zICovXG5mcy9mMmZzL2YyZnMuaC0xMzE3LVx0QVBQX1dSSVRFX0lPLFx0XHRcdC8qIGFwcCB3cml0ZSBJT3MgKi9cbi0tXG5mcy9mMmZzL2ZpbGUuYz01NDMyPXN0YXRpYyBzc2l6ZV90IGYyZnNfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZjJmcy9maWxlLmMtNTQ0NS1cdFx0ZjJmc191cGRhdGVfaW9zdGF0KEYyRlNfSV9TQihpbm9kZSksIGlub2RlLFxuZnMvZjJmcy9maWxlLmM6NTQ0NjpcdFx0XHRcdFx0XHRBUFBfQlVGRkVSRURfSU8sIHJldCk7XG5mcy9mMmZzL2ZpbGUuYy01NDQ3LVx0fVxuLS1cbmZzL2YyZnMvaW9zdGF0LmM9MzM9aW50IF9fbWF5YmVfdW51c2VkIGlvc3RhdF9pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpXG4tLVxuZnMvZjJmcy9pb3N0YXQuYy00Ny1cdHNlcV9wdXRzKHNlcSwgXCYjMzQ7W1dSSVRFXVxcblwmIzM0Oyk7XG5mcy9mMmZzL2lvc3RhdC5jOjQ4Olx0SU9TVEFUX0lORk9fU0hPVyhcJiMzNDthcHAgYnVmZmVyZWQgZGF0YVwmIzM0OywgQVBQX0JVRkZFUkVEX0lPKTtcbmZzL2YyZnMvaW9zdGF0LmMtNDktXHRJT1NUQVRfSU5GT19TSE9XKFwmIzM0O2FwcCBkaXJlY3QgZGF0YVwmIzM0OywgQVBQX0RJUkVDVF9JTyk7XG4tLVxuZnMvZjJmcy9pb3N0YXQuYz0yMDQ9dm9pZCBmMmZzX3VwZGF0ZV9pb3N0YXQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2YyZnMvaW9zdGF0LmMtMjE0LVxuZnMvZjJmcy9pb3N0YXQuYzoyMTU6XHRpZiAodHlwZSA9PSBBUFBfQlVGRkVSRURfSU8gfHwgdHlwZSA9PSBBUFBfRElSRUNUX0lPKVxuZnMvZjJmcy9pb3N0YXQuYy0yMTYtXHRcdF9fZjJmc191cGRhdGVfaW9zdGF0KHNiaSwgQVBQX1dSSVRFX0lPLCBpb19ieXRlcyk7XG4tLVxuZnMvZjJmcy9pb3N0YXQuYy0yMjItXHRpZiAoaW5vZGUgXHUwMDI2XHUwMDI2IGYyZnNfY29tcHJlc3NlZF9maWxlKGlub2RlKSkge1xuZnMvZjJmcy9pb3N0YXQuYzoyMjM6XHRcdGlmICh0eXBlID09IEFQUF9CVUZGRVJFRF9JTylcbmZzL2YyZnMvaW9zdGF0LmMtMjI0LVx0XHRcdF9fZjJmc191cGRhdGVfaW9zdGF0KHNiaSwgQVBQX0JVRkZFUkVEX0NEQVRBX0lPLCBpb19ieXRlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjU0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlc2UgZmlsZXM6CgoqKkluaXRpYWwgRGlhZ25vc3RpYyBTY2FuKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBvciBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZmFjdCB0aGF0IEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgb2YgYGZzL2lvbWFwL01ha2VmaWxlYCBhbmQgYGZzL3hmcy9LY29uZmlnYCBpcyBwcmV0dHkgdGVsbGluZy4gVGhlIGBNYWtlZmlsZWAgc3VnZ2VzdHMgSSBtaWdodCBiZSBkZWJ1Z2dpbmcgYnVpbGQgZGVwZW5kZW5jaWVzIG9yIGludmVzdGlnYXRpbmcgaG93IEkvTyBtYXBwaW5nIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSU9NQVAgc3Vic3lzdGVtLiBDb252ZXJzZWx5LCBgZnMveGZzL0tjb25maWdgIGluZGljYXRlcyBJIG1pZ2h0IG5lZWQgdG8gdmVyaWZ5IG9yIGFsdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIFhGUyBmaWxlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZXNlIGFyZSByZWxhdGVkLCBidXQgbGlrZWx5IGF0IHNlcGFyYXRlIGxldmVscy4gVGhlIGZpcnN0IGJlaW5nIHRoZSBsb3dlci1sZXZlbCBJL08gbWFwcGluZyBhbmQgdGhlIHNlY29uZCBiZWluZyB0aGUgaGlnaGVyLWxldmVsIGZpbGVzeXN0ZW0gdGhhdCBtYXkgYmUgdGFraW5nIGFkdmFudGFnZSBvZiBpdC4gSXQmIzM5O3MgYSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uLCBmb2N1c2luZyBvbiB0aGVzZSBzcGVjaWZpYyBmaWxlIHN5c3RlbSBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdCNcbiAgIDM6XHQjIENvcHlyaWdodCAoYykgMjAxOSBPcmFjbGUuXG4gICA0Olx0IyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgNTpcdCNcbiAgIDY6XHRcbiAgIDc6XHRjY2ZsYWdzLXkgJiM0Mzs9IC1JICQoc3JjKVx0XHQjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzXG4gICA4Olx0XG4gICA5Olx0b2JqLSQoQ09ORklHX0ZTX0lPTUFQKVx0XHQmIzQzOz0gaW9tYXAub1xuICAxMDpcdFxuICAxMTpcdGlvbWFwLXlcdFx0XHRcdCYjNDM7PSB0cmFjZS5vIFxcXG4gIDEyOlx0XHRcdFx0XHQgICBpdGVyLm8gXFxcbiAgMTM6XHRcdFx0XHRcdCAgIGJ1ZmZlcmVkLWlvLm9cbiAgMTQ6XHRpb21hcC0kKENPTkZJR19CTE9DSylcdFx0JiM0Mzs9IGRpcmVjdC1pby5vIFxcXG4gIDE1Olx0XHRcdFx0XHQgICBpb2VuZC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRlMgQ29uZmlndXJhdGlvbiBBdWRpdCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGZzL3hmcy9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgZXhwZWN0ZWQgZmVhdHVyZXMgYW5kIG9wdGlvbnMgZm9yIFhGUyBhcmUgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcHJvamVjdCYjMzk7cyByZXF1aXJlbWVudHMsIGFuZCBtYWtlIHN1cmUgdGhhdCBhbnkgZGVmYXVsdHMgb3IgZGVwZW5kZW5jaWVzIGhhdmVuJiMzOTt0IGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBtaWdodCBpbXBhY3QgdXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IGBDT05GSUdfWEZTXypgIHN5bWJvbHMsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBYRlMgZmVhdHVyZXMgd2UmIzM5O3JlIGxldmVyYWdpbmcsIGxpa2UgcXVvdGFzLCBsYXJnZSBmaWxlIHN1cHBvcnQsIG1ldGFkYXRhIGpvdXJuYWxpbmcsIGFuZCBhbnkgbmV3IG9wdGlvbnMgaW50cm9kdWNlZCB0aGF0IG1pZ2h0IG9wdGltaXplIHBlcmZvcm1hbmNlIG9yIGFkZHJlc3Mgc3BlY2lmaWMga25vd24gaXNzdWVzLgoKSSYjMzk7bSBhbHNvIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IHB1bGwgaW4gb3RoZXIgcmVsYXRlZCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LCBvciBpZiBhbnkgbmV3IGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gVWx0aW1hdGVseSBJJiMzOTtsbCBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaG93IFhGUyBpcyBiZWluZyBidWlsdCwgYW5kIHdoaWNoIGZlYXR1cmVzIGFyZSB0cnVseSBhdmFpbGFibGUgYXQgcnVudGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy94ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBYRlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1hGUyBmaWxlc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0tcbiAgIDU6XHRcdHNlbGVjdCBFWFBPUlRGU1xuICAgNjpcdFx0c2VsZWN0IENSQzMyXG4gICA3Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgWEZTIGlzIGEgaGlnaCBwZXJmb3JtYW5jZSBqb3VybmFsaW5nIGZpbGVzeXN0ZW0gd2hpY2ggb3JpZ2luYXRlZFxuICAxMDpcdFx0ICBvbiB0aGUgU0dJIElSSVggcGxhdGZvcm0uICBJdCBpcyBjb21wbGV0ZWx5IG11bHRpLXRocmVhZGVkLCBjYW5cbiAgMTE6XHRcdCAgc3VwcG9ydCBsYXJnZSBmaWxlcyBhbmQgbGFyZ2UgZmlsZXN5c3RlbXMsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsXG4gIDEyOlx0XHQgIHZhcmlhYmxlIGJsb2NrIHNpemVzLCBpcyBleHRlbnQgYmFzZWQsIGFuZCBtYWtlcyBleHRlbnNpdmUgdXNlIG9mXG4gIDEzOlx0XHQgIEJ0cmVlcyAoZGlyZWN0b3JpZXMsIGV4dGVudHMsIGZyZWUgc3BhY2UpIHRvIGFpZCBib3RoIHBlcmZvcm1hbmNlXG4gIDE0Olx0XHQgIGFuZCBzY2FsYWJpbGl0eS5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gYXQgXHUwMDNjaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcy9cdTAwM2VcbiAgMTc6XHRcdCAgZm9yIGNvbXBsZXRlIGRldGFpbHMuICBUaGlzIGltcGxlbWVudGF0aW9uIGlzIG9uLWRpc2sgY29tcGF0aWJsZVxuICAxODpcdFx0ICB3aXRoIHRoZSBJUklYIHZlcnNpb24gb2YgWEZTLlxuICAxOTpcdFxuICAyMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDIxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB4ZnMuICBCZSBhd2FyZSwgaG93ZXZlciwgdGhhdCBpZiB0aGUgZmlsZVxuICAyMjpcdFx0ICBzeXN0ZW0gb2YgeW91ciByb290IHBhcnRpdGlvbiBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgeW91JiMzOTtsbCBuZWVkXG4gIDIzOlx0XHQgIHRvIHVzZSBhbiBpbml0aWFsIHJhbWRpc2sgKGluaXRyZCkgdG8gYm9vdC5cbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgWEZTX1NVUFBPUlRfVjRcbiAgMjY6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBkZXByZWNhdGVkIFY0IChjcmM9MCkgZm9ybWF0XCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIFhGU19GU1xuICAyODpcdFx0ZGVmYXVsdCBuXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIFRoZSBWNCBmaWxlc3lzdGVtIGZvcm1hdCBsYWNrcyBjZXJ0YWluIGZlYXR1cmVzIHRoYXQgYXJlIHN1cHBvcnRlZFxuICAzMTpcdFx0ICBieSB0aGUgVjUgZm9ybWF0LCBzdWNoIGFzIG1ldGFkYXRhIGNoZWNrc3VtbWluZywgc3RyZW5ndGhlbmVkXG4gIDMyOlx0XHQgIG1ldGFkYXRhIHZlcmlmaWNhdGlvbiwgYW5kIHRoZSBhYmlsaXR5IHRvIHN0b3JlIHRpbWVzdGFtcHMgcGFzdCB0aGVcbiAgMzM6XHRcdCAgeWVhciAyMDM4LiAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgVjQgZm9ybWF0IGlzIGRlcHJlY2F0ZWQuICBBbGwgdXNlcnNcbiAgMzQ6XHRcdCAgc2hvdWxkIHVwZ3JhZGUgYnkgYmFja2luZyB1cCB0aGVpciBmaWxlcywgcmVmb3JtYXR0aW5nLCBhbmQgcmVzdG9yaW5nXG4gIDM1Olx0XHQgIGZyb20gdGhlIGJhY2t1cC5cbiAgMzY6XHRcbiAgMzc6XHRcdCAgQWRtaW5pc3RyYXRvcnMgYW5kIHVzZXJzIGNhbiBkZXRlY3QgYSBWNCBmaWxlc3lzdGVtIGJ5IHJ1bm5pbmdcbiAgMzg6XHRcdCAgeGZzX2luZm8gYWdhaW5zdCBhIGZpbGVzeXN0ZW0gbW91bnRwb2ludCBhbmQgY2hlY2tpbmcgZm9yIGEgc3RyaW5nXG4gIDM5Olx0XHQgIGJlZ2lubmluZyB3aXRoIFwmIzM0O2NyYz1cJiMzNDsuICBJZiB0aGUgc3RyaW5nIFwmIzM0O2NyYz0wXCYjMzQ7IGlzIGZvdW5kLCB0aGVcbiAgNDA6XHRcdCAgZmlsZXN5c3RlbSBpcyBhIFY0IGZpbGVzeXN0ZW0uICBJZiBubyBzdWNoIHN0cmluZyBpcyBmb3VuZCwgcGxlYXNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDM5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2Ugb3B0aW9uczoKCioqS2NvbmZpZyBEaXZlIGZvciBNZW1vcnkgTWFuYWdlbWVudCBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYENPTVBBQ1RJT05gIGFuZCBgU1dBUGAuIEkgbmVlZCB0byByZXZpZXcgdGhlc2UgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIHNldCBwcm9wZXJseSBvciBoYXZlIHRoZSBjb3JyZWN0IGRlcGVuZGVuY2llcyBzZXQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyBoZXJlIGFyZSBjcml0aWNhbCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdpdGggdGhlIHN5c3RlbSBJIGhhdmUgaW4gbWluZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgYXNzb2NpYXRlZCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGNydWNpYWwuIENoZWNraW5nIHRoZSBLY29uZmlnIGlzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjI1PWNvbmZpZyBCQUxMT09OX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjM2LSMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cbm1tL0tjb25maWc6NjM3OmNvbmZpZyBDT01QQUNUSU9OXG5tbS9LY29uZmlnLTYzOC1cdGJvb2wgXCYjMzQ7QWxsb3cgZm9yIG1lbW9yeSBjb21wYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzExCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHByb2JhYmx5IHdpdGhpbiBgbW0vS2NvbmZpZ2AuIEJhc2VkIG9uIGV4cGVyaWVuY2Ugd2l0aCB0aGlzIHBhcnRpY3VsYXIgYXJlYSwgbXkgaW50dWl0aW9uIHBvaW50cyBtZSB0b3dhcmQgdGhlIHZpY2luaXR5IG9mIGxpbmUgNjM1LiBJJiMzOTtsbCBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIGEgYnJvYWQgc3RhcnRpbmcgcG9pbnQsIGJ1dCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCB0aGUgcGVydGluZW50IG9wdGlvbnMvbG9naWMgYXJlIGZyZXF1ZW50bHkgZ3JvdXBlZCBpbiB0aGUgbWlkLXJhbmdlIG9mIHRoZXNlIGZpbGVzLCBnaXZlbiB0aGUgYnJlYWR0aCBvZiBjb25maWd1cmFibGUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgc29ydCBvZiBtYWNybyBkZWZpbml0aW9uLCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBzdGF0ZW1lbnQgZm9yIHRoZSBmZWF0dXJlIG9mIGludGVyZXN0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjM1Olx0I1xuIDYzNjpcdCMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cbiA2Mzc6XHRjb25maWcgQ09NUEFDVElPTlxuIDYzODpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cJiMzNDtcbiA2Mzk6XHRcdGRlZmF1bHQgeVxuIDY0MDpcdFx0c2VsZWN0IE1JR1JBVElPTlxuIDY0MTpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA2NDI6XHRcdGhlbHBcbiA2NDM6XHRcdCAgQ29tcGFjdGlvbiBpcyB0aGUgb25seSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQgdG8gZm9ybVxuIDY0NDpcdFx0ICBoaWdoIG9yZGVyIChsYXJnZXIgcGh5c2ljYWxseSBjb250aWd1b3VzKSBtZW1vcnkgYmxvY2tzXG4gNjQ1Olx0XHQgIHJlbGlhYmx5LiBUaGUgcGFnZSBhbGxvY2F0b3IgcmVsaWVzIG9uIGNvbXBhY3Rpb24gaGVhdmlseSBhbmRcbiA2NDY6XHRcdCAgdGhlIGxhY2sgb2YgdGhlIGZlYXR1cmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBPT00ga2lsbGVyXG4gNjQ3Olx0XHQgIGludm9jYXRpb25zIGZvciBoaWdoIG9yZGVyIG1lbW9yeSByZXF1ZXN0cy4gWW91IHNob3VsZG4mIzM5O3RcbiA2NDg6XHRcdCAgZGlzYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgdGhlcmUgcmVhbGx5IGlzIGEgc3Ryb25nIHJlYXNvbiBmb3JcbiA2NDk6XHRcdCAgaXQgYW5kIHRoZW4gd2Ugd291bGQgYmUgcmVhbGx5IGludGVyZXN0ZWQgdG8gaGVhciBhYm91dCB0aGF0IGF0XG4gNjUwOlx0XHQgIGxpbnV4LW1tQGt2YWNrLm9yZy5cbiA2NTE6XHRcbiA2NTI6XHRjb25maWcgQ09NUEFDVF9VTkVWSUNUQUJMRV9ERUZBVUxUXG4gNjUzOlx0XHRpbnRcbiA2NTQ6XHRcdGRlcGVuZHMgb24gQ09NUEFDVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgxNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgU1dBUCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBTV0FQYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24gaXMgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsJiMzOTtzIHN0cnVjdHVyZSwgSSYjMzk7bGwgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIHRoZW4gc2VhcmNoIHRocm91Z2ggaXQsIGxvb2tpbmcgZm9yIHRoZSBgU1dBUGAgb3B0aW9uIGRlZmluaXRpb24uIEkgZXhwZWN0IHRoaXMgd2lsbCByZXZlYWwgd2hldGhlciBpdCYjMzk7cyBhIGRpcmVjdCBvcHRpb24sIGEgZGVwZW5kZW5jeSBvZiBhbm90aGVyIG9wdGlvbiwgb3IgYSBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gdmFsdWUuIFRoaXMgd2lsbCBwcm92aWRlIHRoZSBkZXRhaWxzIG5lY2Vzc2FyeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNzUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgRnVuY3Rpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiByZWNlbnQgbW9kaWZpY2F0aW9ucywgc28gSSYjMzk7bGwgc3RhcnQgYnkgcGlucG9pbnRpbmcgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGFsdGVyZWQgb3IgZnJlc2hseSBpbnRyb2R1Y2VkLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbXBhY3RlZC4gSSBzZWUgdGhlIGZvbGxvd2luZyBhcyBsaWtlbHkgYXJlYXMgb2YgaW50ZXJlc3Q6CgoqICAgYGN1cnJlbnRfaXNfa3N3YXBkYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSB0byBtb25pdG9yIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLCBhcyBrc3dhcGQgaXMgdGhlIGtlcm5lbCYjMzk7cyBiYWNrZ3JvdW5kIG1lbW9yeSByZWNsYW1hdGlvbiBwcm9jZXNzLgoqICAgU2ltaWxhcmx5LCBgY3VycmVudF9pc19rY29tcGFjdGRgIGZyb20gYG1tL2NvbXBhY3Rpb24uY2AgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQsIHNpbmNlIGtjb21wYWN0ZCBtYW5hZ2VzIG1lbW9yeSBjb21wYWN0aW9uLCBzbyB0aGUgaW50ZXJmYWNlIHRvIHRoaXMgcHJvY2VzcyBpcyBjcml0aWNhbC4KKiAgIGBpb21hcF93cml0ZXBhZ2VzYCBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AgaXMgaW1wb3J0YW50IHRvIGV4YW1pbmUsIGVzcGVjaWFsbHkgd2l0aCBpdHMgaW1wYWN0IG9uIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTywgYXMgZmlsZSBzeXN0ZW0gcGVyZm9ybWFuY2Ugb2Z0ZW4gc2VlcyBpbXByb3ZlbWVudCBoZXJlLgoqICAgQW5kIGZpbmFsbHksIGB4ZnNfYnRyZWVfc3BsaXRgIHdpdGhpbiBgZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY2AuIFdhaXQsIGlzIHRoaXMgc3RhdGljIG9yIG5vbi1zdGF0aWM/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSwgYmVjYXVzZSB0aGF0IHdpbGwgc2lnbmlmaWNhbnRseSBhZmZlY3QgdGhlIGltcGxpY2F0aW9ucy4gSSB0aGluayBJJiMzOTtsbCBsb29rIGFyb3VuZCBsaW5lIDMwNDIgaW4gYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgIHRvIGNsYXJpZnkuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBCLXRyZWUgc3BsaXR0aW5nIGlzIGZ1bmRhbWVudGFsIHRvIFhGUyYjMzk7cyBzY2FsYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzA0MDpcdCAqIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQuXG4zMDQxOlx0ICovXG4zMDQyOlx0U1RBVElDIGludFx0XHRcdFx0XHQvKiBlcnJvciAqL1xuMzA0MzpcdHhmc19idHJlZV9zcGxpdChcbjMwNDQ6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHQqY3VyLFxuMzA0NTpcdFx0aW50XHRcdFx0bGV2ZWwsXG4zMDQ2Olx0XHR1bmlvbiB4ZnNfYnRyZWVfcHRyXHQqcHRycCxcbjMwNDc6XHRcdHVuaW9uIHhmc19idHJlZV9rZXlcdCprZXksXG4zMDQ4Olx0XHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0KipjdXJwLFxuMzA0OTpcdFx0aW50XHRcdFx0KnN0YXQpXHRcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xuMzA1MDpcdHtcbjMwNTE6XHRcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1x0YXJncztcbjMwNTI6XHRcdERFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpO1xuMzA1MzpcdFxuMzA1NDpcdFx0aWYgKCF4ZnNfYnRyZWVfaXNfYm1hcChjdXItXHUwMDNlYmNfb3BzKSB8fFxuMzA1NTpcdFx0ICAgIGN1ci1cdTAwM2ViY190cC1cdTAwM2V0X2hpZ2hlc3RfYWdubyA9PSBOVUxMQUdOVU1CRVIpXG4zMDU2Olx0XHRcdHJldHVybiBfX3hmc19idHJlZV9zcGxpdChjdXIsIGxldmVsLCBwdHJwLCBrZXksIGN1cnAsIHN0YXQpO1xuMzA1NzpcdFxuMzA1ODpcdFx0YXJncy5jdXIgPSBjdXI7XG4zMDU5Olx0XHRhcmdzLmxldmVsID0gbGV2ZWw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTQ2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBLZXJuZWwgU3ltYm9sIExvY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIGxvY2F0aW9ucyBvZiBhIGZldyBrZXkga2VybmVsIHN5bWJvbHMuIEkgc2VlIHRoYXQgYGN1cnJlbnRfaXNfa3N3YXBkYCByZXNpZGVzIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBleHBvcnRlZCwgc28gaXQmIzM5O3MgYWNjZXNzaWJsZSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgZmlsZSwgYW5kIGltcG9ydGFudGx5LCBpdCYjMzk7cyB1bmRlciB0aGUgR1BMIGxpY2Vuc2UgYW5kIGlzIG5vdCBzdGF0aWMgd2hpY2ggbWVhbnMgZXh0ZXJuYWwgbW9kdWxlcyBjYW4gdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uLiBOZXh0LCBJJiMzOTttIGNoZWNraW5nIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAsIHdoaWNoIEkgZmluZCBpbiBgbW0vY29tcGFjdGlvbi5jYCDigJMgYWdhaW4sIGV4cG9ydGVkLCBHUEwsIGFuZCBub24tc3RhdGljLiBGaW5hbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgYGlvbWFwX3dyaXRlcGFnZXNgLCBkZWZpbmVkIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gVGhpcyB0b28gaXMgZXhwb3J0ZWQsIGFuZCBpdCYjMzk7cyBhbHNvIG5vbi1zdGF0aWMuIE5vdywgSSBzaG91bGQgaW52ZXN0aWdhdGUgYGlvbWFwX3dyaXRlcGFnZXNgIG1vcmUgY2xvc2VseTsgSSYjMzk7bGwgY2hlY2sgaXRzIGRlY2xhcmF0aW9uIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQmIzM5O3MgZXhwb3J0ZWQgdG8gdW5kZXJzdGFuZCBpdHMgdmlzaWJpbGl0eSBhbmQgcG9zc2libGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF93cml0ZXBhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0yMDY5PWludFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyMDcwOmlvbWFwX3dyaXRlcGFnZXMoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYylcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjA3MS17XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMTAwLX1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjEwMTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF93cml0ZXBhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MzkKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBDb2RlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcgdGhhdCYjMzk7cyBjaGFuZ2VkLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhhdCB0aGVyZSBhcmUgYSBmZXcgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQuIEluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCwgaXQmIzM5O3MgYGlvbWFwX3dyaXRlcGFnZXNgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgYnVmZmVyZWQgSS9PLiBUaGVuLCBpbiB0aGUgWEZTIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgLCBJIHNlZSBib3RoIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYCBhbmQgdGhlIHN0YXRpYyBmdW5jdGlvbiBgeGZzX2J0cmVlX3NwbGl0YCB3ZXJlIG1vZGlmaWVkLiBUaGF0IGNvdWxkIGJlIHNpZ25pZmljYW50IGZvciBiLXRyZWUgcGVyZm9ybWFuY2UuIEZpbmFsbHksIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFpbSBhbmQgY29tcGFjdGlvbjogc3BlY2lmaWNhbGx5LCBgY3VycmVudF9pc19rY29tcGFjdGRgIGFuZCBga2NvbXBhY3RkYCBpbiBgbW0vY29tcGFjdGlvbi5jYCwgYW5kIGBjdXJyZW50X2lzX2tzd2FwZGAgYW5kIGBrc3dhcGRgIGluIGBtbS92bXNjYW4uY2AuCgpOb3csIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEl0JiMzOTtzIG1hcmtlZCBhcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHdoaWNoIG1lYW5zIHRoZXJlIGFyZSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBtZW1vcnkgcmVjbGFpbS9jb21wYWN0aW9uIChwcm9iYWJseSB0aGUgYmlnZ2VzdCBjaGFuZ2UpIGFuZCBzb21lIGludGVyZXN0aW5nIHVwZGF0ZXMgdG8gSU9NQVAgd3JpdGViYWNrIGFuZCBYRlMgYi10cmVlIGhhbmRsaW5nLiBUaGF0IElPTUFQIHRoaW5nIGlzIGFsd2F5cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB3aGVuIGl0IGRlYWxzIHdpdGggd3JpdGViYWNrLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcGVjaWZpY2FsbHk6IGBpb21hcF93cml0ZXBhZ2VzYCwgYGN1cnJlbnRfaXNfa3N3YXBkYCwgYW5kIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAsIHdoaWNoIGFsaWducyB3aXRoIHRob3NlIGZ1bmN0aW9uIGNhbGwgbW9kaWZpY2F0aW9ucy4gU28gdGhhdCYjMzk7cyB0aGUgY29yZSBmb2N1cyBvZiB0aGUgY2hhbmdlcy4KCkZpbmFsbHksIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlOiBgQ09NUEFDVElPTmAsIGBTV0FQYCwgYEZTX0lPTUFQYCwgYW5kIGBYRlNfRlNgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5IGxpc3Qg4oCTIHdlIGtub3cgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgdGhlc2UgZmVhdHVyZXMuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZCB0aGF0IEkmIzM5O3ZlIGdvdCB0aGUgbGF5IG9mIHRoZSBsYW5kIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8ga2ljayBvZmYgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tzd2FwZCYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tjb21wYWN0ZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHByb2Nlc3MgZmxhZ3MgUEZfS1NXQVBEIGFuZCBQRl9LQ09NUEFDVEQgaW4gZmF2b3Igb2Yga3RocmVhZCBmdW5jdGlvbiBwb2ludGVyIGNvbXBhcmlzb25zIHZpYSBjdXJyZW50X2lzX2tzd2FwZCgpIGFuZCBjdXJyZW50X2lzX2tjb21wYWN0ZCgpLiBJdCB1cGRhdGVzIHJlY2xhaW0gYW5kIHdyaXRlYmFjayBoYW5kbGluZyBpbiBpb21hcF93cml0ZXBhZ2VzKCkgYW5kIHJlbW92ZXMgdGhlIGluaGVyaXRhbmNlIG9mIGtzd2FwZCBmbGFncyBpbiBYRlMgQi10cmVlIHNwbGl0IHdvcmsgaXRlbXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7RlNfSU9NQVAmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tzd2FwZCYjMzQ7LAogICAgJiMzNDtjdXJyZW50X2lzX2tjb21wYWN0ZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHByb2Nlc3MgZmxhZ3MgUEZfS1NXQVBEIGFuZCBQRl9LQ09NUEFDVEQgaW4gZmF2b3Igb2Yga3RocmVhZCBmdW5jdGlvbiBwb2ludGVyIGNvbXBhcmlzb25zIHZpYSBjdXJyZW50X2lzX2tzd2FwZCgpIGFuZCBjdXJyZW50X2lzX2tjb21wYWN0ZCgpLiBJdCB1cGRhdGVzIHJlY2xhaW0gYW5kIHdyaXRlYmFjayBoYW5kbGluZyBpbiBpb21hcF93cml0ZXBhZ2VzKCkgYW5kIHJlbW92ZXMgdGhlIGluaGVyaXRhbmNlIG9mIGtzd2FwZCBmbGFncyBpbiBYRlMgQi10cmVlIHNwbGl0IHdvcmsgaXRlbXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMgYW5kIGFyZSByZWFjaGFibGUgYW5kIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5ZWQ5OWQyZGRhZjE5Y2NiMjAwOGFiYTQ2ZDlmODVhODA1MzkwZjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA5OjUxOjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMKaW5kZXggMGE1ZWJmZGE5MGYxMi4uNjMwNmNhNzQ3ZjNiYSAxMDA2NDQKLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCkBAIC0yMDc3LDggJiM0MzsyMDc3LDcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKQogCSAqIFdyaXRlYmFjayBmcm9tIHJlY2xhaW0gY29udGV4dCBzaG91bGQgbmV2ZXIgaGFwcGVuIGV4Y2VwdCBpbiB0aGUgY2FzZQogCSAqIG9mIGEgVk0gcmVncmVzc2lvbiBzbyB3YXJuIGFib3V0IGl0IGFuZCByZWZ1c2UgdG8gd3JpdGUgdGhlIGRhdGEuCiAJICovCi0JaWYgKFdBUk5fT05fT05DRSgoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKSkgPT0KLQkJCVBGX01FTUFMTE9DKSkKJiM0MzsJaWYgKFdBUk5fT05fT05DRSgoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpKSkKIAkJcmV0dXJuIC1FSU87CiAKIAl3aGlsZSAoKGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd3BjLSZndDt3YmMsIGZvbGlvLCAmYW1wO2Vycm9yKSkpIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jCmluZGV4IDYwZWY3ZjA4YjFkMzAuLjY3MzhkOWQxNTExYmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYwpAQCAtMjk5NCw3ICYjNDM7Mjk5NCw2IEBAIHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncyB7CiAJc3RydWN0IHhmc19idHJlZV9jdXIJKipjdXJwOwogCWludAkJCSpzdGF0OwkJLyogc3VjY2Vzcy9mYWlsdXJlICovCiAJaW50CQkJcmVzdWx0OwotCWJvb2wJCQlrc3dhcGQ7CS8qIGFsbG9jYXRpb24gaW4ga3N3YXBkIGNvbnRleHQgKi8KIAlzdHJ1Y3QgY29tcGxldGlvbgkqZG9uZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CkBAIC0zMDA4LDMzICYjNDM7MzAwNywxOCBAQCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKAogewogCXN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncwkqYXJncyA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQkJc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzLCB3b3JrKTsKLQl1bnNpZ25lZCBsb25nCQlwZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZwkJbmV3X3BmbGFncyA9IDA7Ci0KLQkvKgotCSAqIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbnRleHQgaGVyZSwgYnV0IG1heSBhbHNvIGJlIGRvaW5nIHdvcmsKLQkgKiBpbiBrc3dhcGQgY29udGV4dCwgYW5kIGhlbmNlIHdlIG1heSBuZWVkIHRvIGluaGVyaXQgdGhhdCBzdGF0ZQotCSAqIHRlbXBvcmFyaWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbiYjMzk7dCBibG9jayB3YWl0aW5nIGZvciBtZW1vcnkgcmVjbGFpbQotCSAqIGluIGFueSB3YXkuCi0JICovCi0JaWYgKGFyZ3MtJmd0O2tzd2FwZCkKLQkJbmV3X3BmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDsKLQotCWN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZCgmYW1wO3BmbGFncywgbmV3X3BmbGFncyk7CiAJeGZzX3RyYW5zX3NldF9jb250ZXh0KGFyZ3MtJmd0O2N1ci0mZ3Q7YmNfdHApOwogCiAJYXJncy0mZ3Q7cmVzdWx0ID0gX194ZnNfYnRyZWVfc3BsaXQoYXJncy0mZ3Q7Y3VyLCBhcmdzLSZndDtsZXZlbCwgYXJncy0mZ3Q7cHRycCwKIAkJCQkJIGFyZ3MtJmd0O2tleSwgYXJncy0mZ3Q7Y3VycCwgYXJncy0mZ3Q7c3RhdCk7CiAKIAl4ZnNfdHJhbnNfY2xlYXJfY29udGV4dChhcmdzLSZndDtjdXItJmd0O2JjX3RwKTsKLQljdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKCZhbXA7cGZsYWdzLCBuZXdfcGZsYWdzKTsKIAogCS8qCiAJICogRG8gbm90IGFjY2VzcyBhcmdzIGFmdGVyIGNvbXBsZXRlKCkgaGFzIHJ1biBoZXJlLiBXZSBkb24mIzM5O3Qgb3duIGFyZ3MKIAkgKiBhbmQgdGhlIG93bmVyIG1heSBydW4gYW5kIGZyZWUgYXJncyBiZWZvcmUgd2UgcmV0dXJuIGhlcmUuCiAJICovCiAJY29tcGxldGUoYXJncy0mZ3Q7ZG9uZSk7Ci0KIH0KIAogLyoKQEAgLTMwNzgsNyAmIzQzOzMwNjIsNyBAQCB4ZnNfYnRyZWVfc3BsaXQoCiAJYXJncy5jdXJwID0gY3VycDsKIAlhcmdzLnN0YXQgPSBzdGF0OwogCWFyZ3MuZG9uZSA9ICZhbXA7ZG9uZTsKLQlhcmdzLmtzd2FwZCA9IGN1cnJlbnRfaXNfa3N3YXBkKCk7CiYjNDM7CiAJSU5JVF9XT1JLX09OU1RBQ0soJmFtcDthcmdzLndvcmssIHhmc19idHJlZV9zcGxpdF93b3JrZXIpOwogCXF1ZXVlX3dvcmsoeGZzX2FsbG9jX3dxLCAmYW1wO2FyZ3Mud29yayk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2RvbmUpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oIGIvZnMveGZzL3hmc19wbGF0Zm9ybS5oCmluZGV4IDVkNTQyZTk1ZmU0NDQuLmE0OWZhMTU5ODk0ZGUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcGxhdGZvcm0uaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX3BsYXRmb3JtLmgKQEAgLTExNSwxMCAmIzQzOzExNSw2IEBAIHR5cGVkZWYgX191MzIJCQl4ZnNfbmxpbmtfdDsKICNkZWZpbmUgeGZzX2Jsb2NrZ2Nfc2Vjcwl4ZnNfcGFyYW1zLmJsb2NrZ2NfdGltZXIudmFsCiAKICNkZWZpbmUgY3VycmVudF9jcHUoKQkJKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpCi0jZGVmaW5lIGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChzcCwgZikJCVwKLQkJKCooc3ApID0gY3VycmVudC0mZ3Q7ZmxhZ3MsIGN1cnJlbnQtJmd0O2ZsYWdzIHw9IChmKSkKLSNkZWZpbmUgY3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZChzcCwgZikJXAotCQkoY3VycmVudC0mZ3Q7ZmxhZ3MgPSAoKGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IH4oZikpIHwgKCooc3ApICZhbXA7IChmKSkpKQogCiAjZGVmaW5lIE5CQlkJCTgJCS8qIG51bWJlciBvZiBiaXRzIHBlciBieXRlICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKaW5kZXggNjZhMmY3MGU5ZTAxOS4uNjkxYzA5ZjBhNjk3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKQEAgLTgxLDEwICYjNDM7ODEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcGFjdF9nYXAodW5zaWduZWQgaW50IG9yZGVyKQogCXJldHVybiBtaW4oMlVMICZsdDsmbHQ7IG9yZGVyLCBDT01QQUNUX0NMVVNURVJfTUFYKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfS0NPTVBBQ1REOwotfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT04KIApAQCAtMTAzLDcgJiM0Mzs5OSw3IEBAIGV4dGVybiB2b2lkIGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAogYm9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLAogCQkJCQlpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTsKLQomIzQzO2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCk7CiBleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3J1bihpbnQgbmlkKTsKIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfc3RvcChpbnQgbmlkKTsKIGV4dGVybiB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTsKQEAgLTEyMCw2ICYjNDM7MTE2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGtjb21wYWN0ZF9ydW4oaW50IG5pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA4YjNkNDdhMzI1Y2NhLi5lYjEyZmY0Y2VhNmMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xODA4LDggJiM0MzsxODA4LDggQEAgZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7CiAjZGVmaW5lIFBGX1VTRURfTUFUSAkJMHgwMDAwMjAwMAkvKiBJZiB1bnNldCB0aGUgZnB1IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAqLwogI2RlZmluZSBQRl9VU0VSX1dPUktFUgkJMHgwMDAwNDAwMAkvKiBLZXJuZWwgdGhyZWFkIGNsb25lZCBmcm9tIHVzZXJzcGFjZSB0aHJlYWQgKi8KICNkZWZpbmUgUEZfTk9GUkVFWkUJCTB4MDAwMDgwMDAJLyogVGhpcyB0aHJlYWQgc2hvdWxkIG5vdCBiZSBmcm96ZW4gKi8KLSNkZWZpbmUgUEZfS0NPTVBBQ1RECQkweDAwMDEwMDAwCS8qIEkgYW0ga2NvbXBhY3RkICovCi0jZGVmaW5lIFBGX0tTV0FQRAkJMHgwMDAyMDAwMAkvKiBJIGFtIGtzd2FwZCAqLwomIzQzOyNkZWZpbmUgUEZfX0hPTEVfXzAwMDEwMDAwCTB4MDAwMTAwMDAKJiM0MzsjZGVmaW5lIFBGX19IT0xFX18wMDAyMDAwMAkweDAwMDIwMDAwCiAjZGVmaW5lIFBGX01FTUFMTE9DX05PRlMJMHgwMDA0MDAwMAkvKiBBbGwgYWxsb2NhdGlvbnMgaW5oZXJpdCBHRlBfTk9GUy4gU2VlIG1lbWFsbG9jX25mc19zYXZlKCkgKi8KICNkZWZpbmUgUEZfTUVNQUxMT0NfTk9JTwkweDAwMDgwMDAwCS8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0lPLiBTZWUgbWVtYWxsb2Nfbm9pb19zYXZlKCkgKi8KICNkZWZpbmUgUEZfTE9DQUxfVEhST1RUTEUJMHgwMDEwMDAwMAkvKiBUaHJvdHRsZSB3cml0ZXMgb25seSBhZ2FpbnN0IHRoZSBiZGkgSSB3cml0ZSB0bywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggYTcyZWNmMTJjMDBkYi4uZmMyOTBlMjllNGE5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTI1LDEyICYjNDM7MjUsNiBAQAogI2RlZmluZSBTV0FQX0ZMQUdTX1ZBTElECShTV0FQX0ZMQUdfUFJJT19NQVNLIHwgU1dBUF9GTEFHX1BSRUZFUiB8IFwKIAkJCQkgU1dBUF9GTEFHX0RJU0NBUkQgfCBTV0FQX0ZMQUdfRElTQ0FSRF9PTkNFIHwgXAogCQkJCSBTV0FQX0ZMQUdfRElTQ0FSRF9QQUdFUykKLQotc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfS1NXQVBEOwotfQotCiAvKgogICogTUFYX1NXQVBGSUxFUyBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2FwdHlwZXM6IHRoaW5ncyB3aGljaCBjYW4KICAqIGJlIHN3YXBwZWQgdG8uICBUaGUgc3dhcCB0eXBlIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhhdCBzd2FwIHR5cGUgYXJlCkBAIC0zMzksNiAmIzQzOzMzMyw3IEBAIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpOwogCiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKTsKIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKTsKJiM0Mztib29sIGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NXQVAKIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywgdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLApkaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jCmluZGV4IGEwNDk0MTU1MTJjNjcuLjQ5OTRlMjAwYmJlY2QgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jb21wYWN0aW9uLmMKQEAgLTMxOTcsNyAmIzQzOzMxOTcsNiBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKQogCWxvbmcgZGVmYXVsdF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhIUEFHRV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpOwogCWxvbmcgdGltZW91dCA9IGRlZmF1bHRfdGltZW91dDsKIAotCWN1cnJlbnQtJmd0O2ZsYWdzIHw9IFBGX0tDT01QQUNURDsKIAlzZXRfZnJlZXphYmxlKCk7CiAKIAlwZ2RhdC0mZ3Q7a2NvbXBhY3RkX21heF9vcmRlciA9IDA7CkBAIC0zMjU0LDExICYjNDM7MzI1MywxNSBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKQogCQkJcGdkYXQtJmd0O3Byb2FjdGl2ZV9jb21wYWN0X3RyaWdnZXIgPSBmYWxzZTsKIAl9CiAKLQljdXJyZW50LSZndDtmbGFncyAmYW1wOz0gflBGX0tDT01QQUNURDsKLQogCXJldHVybiAwOwogfQogCiYjNDM7Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrY29tcGFjdGQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaXNfa2NvbXBhY3RkKTsKJiM0MzsKIC8qCiAgKiBUaGlzIGtjb21wYWN0ZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuCiAgKiBPbiBub2RlLWhvdC1hZGQsIGtjb21wYWN0ZCB3aWxsIG1vdmVkIHRvIHByb3BlciBjcHVzIGlmIGNwdXMgYXJlIGhvdC1hZGRlZC4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYmYyNzg2YzcyNDdkNC4uOWY5OTYzM2Q3ZGMxZSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc1MzksNyAmIzQzOzc1MzksNyBAQCBzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKQogCSAqIHVzIGZyb20gcmVjdXJzaXZlbHkgdHJ5aW5nIHRvIGZyZWUgbW9yZSBtZW1vcnkgYXMgd2UmIzM5O3JlCiAJICogdHJ5aW5nIHRvIGZyZWUgdGhlIGZpcnN0IHBpZWNlIG9mIG1lbW9yeSBpbiB0aGUgZmlyc3QgcGxhY2UpLgogCSAqLwotCXRzay0mZ3Q7ZmxhZ3MgfD0gUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQ7CiYjNDM7CXRzay0mZ3Q7ZmxhZ3MgfD0gUEZfTUVNQUxMT0M7CiAJc2V0X2ZyZWV6YWJsZSgpOwogCiAJV1JJVEVfT05DRShwZ2RhdC0mZ3Q7a3N3YXBkX29yZGVyLCAwKTsKQEAgLTc1ODksMTEgJiM0Mzs3NTg5LDE3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApCiAJCQlnb3RvIGtzd2FwZF90cnlfc2xlZXA7CiAJfQogCi0JdHNrLSZndDtmbGFncyAmYW1wOz0gfihQRl9NRU1BTExPQyB8IFBGX0tTV0FQRCk7CiYjNDM7CXRzay0mZ3Q7ZmxhZ3MgJmFtcDs9IH5QRl9NRU1BTExPQzsKIAogCXJldHVybiAwOwogfQogCiYjNDM7Ym9vbCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrc3dhcGQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGN1cnJlbnRfaXNfa3N3YXBkKTsKJiM0MzsKIC8qCiAgKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmCiAgKiBrc3dhcGQgc2hvdWxkIHJlY2xhaW0gKGRpcmVjdCByZWNsYWltIGlzIGRlZmVycmVkKSwgd2FrZSBpdCB1cCBmb3IgdGhlIHpvbmUmIzM5O3MKZGlmZiAtLWdpdCBhL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmggYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oCmluZGV4IDc2ZjVlMDI1ZTEwNzYuLjgwN2VmODgxY2UyZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaApAQCAtMzEsOCAmIzQzOzMxLDYgQEAKICNkZWZpbmUgUEZfSURMRQkJCQkweDAwMDAwMDAyCS8qIEkgYW0gYW4gSURMRSB0aHJlYWQgKi8KICNkZWZpbmUgUEZfSU9fV09SS0VSCQkJMHgwMDAwMDAxMAkvKiBUYXNrIGlzIGFuIElPIHdvcmtlciAqLwogI2RlZmluZSBQRl9XUV9XT1JLRVIJCQkweDAwMDAwMDIwCS8qIEkmIzM5O20gYSB3b3JrcXVldWUgd29ya2VyICovCi0jZGVmaW5lIFBGX0tDT01QQUNURAkJCTB4MDAwMTAwMDAgICAgICAvKiBJIGFtIGtjb21wYWN0ZCAqLwotI2RlZmluZSBQRl9LU1dBUEQJCQkweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi8KICNkZWZpbmUgUEZfS1RIUkVBRAkJCTB4MDAyMDAwMDAJLyogSSBhbSBhIGtlcm5lbCB0aHJlYWQgKi8KICNkZWZpbmUgUEZfRVhJVElORwkJCTB4MDAwMDAwMDQKICNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDCQkJMQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBSZWZhY3RvcmluZyBUYXNrIEZsYWdzIGFuZCBUaHJlYWQgSWRlbnRpZmljYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBjbGVhbmluZyB1cCBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGFuZCBtYW5hZ2VzIHRhc2tzLCBzcGVjaWZpY2FsbHkgYGtjb21wYWN0ZGAgYW5kIGBrc3dhcGRgLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBmbGFncy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbW92aW5nIGF3YXkgZnJvbSBkaXJlY3RseSBjaGVja2luZyB0YXNrIGZsYWdzIChgUEZfTUVNQUxMT0NgLCBgUEZfS1NXQVBEYCwgYFBGX0tDT01QQUNURGApIGluIGZhdm9yIG9mIGEgbW9yZSB0YXJnZXRlZCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiB0YXNrIGlzIHRoZSBrY29tcGFjdGQgb3Iga3N3YXBkIHRocmVhZC4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSByZWZhY3RvcmluZyB0byBtZS4KClNwZWNpZmljYWxseToKCiogICAqKmBmcy9pb21hcC9idWZmZXJlZC1pby5jYDoqKiBUaGUgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBpcyBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gIFRoZSBvcmlnaW5hbCBjaGVjayBhZ2FpbnN0IGAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpYCBpcyBiZWluZyBzaW1wbGlmaWVkIHRvIGp1c3QgYFBGX01FTUFMTE9DYC4gVGhpcyBzdWdnZXN0cyBhbiBpbXBsaWNpdCBkZXBlbmRlbmN5IG9uIGBQRl9LU1dBUERgIGlzIGJlaW5nIHJlbW92ZWQsIHNvIHdlIHdpbGwgbmVlZCB0byBjaGVjayB0aGUgcmF0aW9uYWxlIGFuZCB0aGUgY29udGV4dC4KKiAgICoqYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgIGFuZCBgZnMveGZzL3hmc19wbGF0Zm9ybS5oYDoqKiAgWEZTIHNlZW1zIHRvIGJlIGEga2V5IGJlbmVmaWNpYXJ5IG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyByZW1vdmluZyBtZW50aW9ucyBvZiBga3N3YXBkYCBmcm9tIGl0cyBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3Jvcywgd2hpY2ggYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZ29hbCBvZiBkZWNvdXBsaW5nIHRoZXNlIHByb2Nlc3NlcyBmcm9tIGRpcmVjdGx5IHVzaW5nIHRoZSBmbGFncy4KKiAgICoqYGluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oYCwgYGluY2x1ZGUvbGludXgvc3dhcC5oYCwgYGluY2x1ZGUvbGludXgvc2NoZWQuaGA6KiogIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gdGhlc2UgaGVhZGVycy4gIFdlJiMzOTtyZSBzZWVpbmcgdGhlIHJlbW92YWwgb2YgaW5saW5lIGZ1bmN0aW9ucyBsaWtlIGBjdXJyZW50X2lzX2tjb21wYWN0ZCgpYCBhbmQgYGN1cnJlbnRfaXNfa3N3YXBkKClgLCB3aGljaCBwcmV2aW91c2x5IHJlbGllZCBvbiBkaXJlY3QgZmxhZyBjaGVja2luZy4gIFRoZXNlIGFyZSBiZWluZyByZXBsYWNlZCB3aXRoIGRlY2xhcmF0aW9ucyBvZiBtb3JlIGdlbmVyaWMgYGJvb2xgIGZ1bmN0aW9ucy4gIEltcG9ydGFudGx5LCB0aGUgdW5kZXJseWluZyBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgYml0IGZsYWdzIGFyZSBiZWluZyByZW1hcHBlZCB0byAmIzM0O2hvbGUmIzM0OyBmbGFncywgd2hpY2ggaW1wbGllcyB0aGVzZSBmbGFncyBtYXkgYmUgZnJlZWQgdXAgZm9yIG90aGVyIHVzZXMuCiogICAqKmBtbS9jb21wYWN0aW9uLmNgIGFuZCBgbW0vdm1zY2FuLmNgOioqIFRoaXMgaXMgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIHNoaWZ0IG9jY3Vycy4gIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIGZsYWdzLCB0aGUgY29kZSBub3cgdXRpbGl6ZXMgYGt0aHJlYWRfZnVuYyhjdXJyZW50KWAgdG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gdGhyZWFkIGlzIHRoZSBrY29tcGFjdGQgb3Iga3N3YXBkIGtlcm5lbCB0aHJlYWQuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBjaGVjayBob3cgYGt0aHJlYWRfZnVuY2Agd29ya3MuIFRoYXQmIzM5O3MgYSBuZXcgYWJzdHJhY3Rpb24gaGVyZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdG8gYmUgc3VyZSB0aGlzIGlzIGNvcnJlY3QuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3IgcmVnYXJkaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb21wYWN0aW9uLCBhbmQgc3dhcHBpbmcsIG5vdyB0aGF0IGZsYWdzIGFyZSBub3QgZGlyZWN0bHkgZW1wbG95ZWQuCiogICAqKmB0b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oYDoqKiAgVGhlIEJQRiB0b29scyBhcmUgYWxzbyBiZWluZyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBmbGFnIGRlZmluaXRpb25zIGFuZCBob3BlZnVsbHkgdGhlIHRocmVhZCBpZGVudGlmaWNhdGlvbiBjaGFuZ2UuCgpTbyB0aGUgbWFpbiB0aHJ1c3QgYXBwZWFycyB0byBiZToKCjEuICAqKlJlZmFjdG9yaW5nIFRocmVhZCBJZGVudGlmaWNhdGlvbjoqKiAgTW92aW5nIGF3YXkgZnJvbSBkaXJlY3QgZmxhZyBjaGVja3MgKGBQRl9LQ09NUEFDVERgLCBgUEZfS1NXQVBEYCkgdG93YXJkcyBhIGRlZGljYXRlZCBmdW5jdGlvbiAoYGt0aHJlYWRfZnVuYyhjdXJyZW50KWApIHRvIGlkZW50aWZ5IGtjb21wYWN0ZCBhbmQga3N3YXBkIHRocmVhZHMuCjIuICAqKkZsYWcgQ29uc29saWRhdGlvbi9SZS11c2UqKjogQnkgY2hhbmdpbmcgdGhlIGV4aXN0aW5nIGZsYWdzIHRvIGBQRl9fSE9MRV9fMDAwMTAwMDBgIGFuZCBgUEZfX0hPTEVfXzAwMDIwMDAwYCB0aGUgbWVtb3J5IGFyZWEgaXMgZnJlZWQgdXAgZm9yIHJlLXVzZS4KMy4gICoqRW5jYXBzdWxhdGlvbjoqKiBJbXByb3ZlZCBlbmNhcHN1bGF0aW9uIGJ5IGNlbnRyYWxpemluZyB0aGUgdGhyZWFkIGlkZW50aXR5IGxvZ2ljLCBpbXByb3ZpbmcgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGBrdGhyZWFkX2Z1bmModHNrKWAgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBncmVwIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgdXNhZ2UgdGhyb3VnaG91dCB0aGUga2VybmVsIHRvIHZlcmlmeSB0aGlzIGFic3RyYWN0aW9uIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMuIEkgbXVzdCB1bmRlcnN0YW5kIGlmIHRoaXMgbmV3IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlIGFuZCBlZmZpY2llbnQsIGFuZCBpZiBpdCBhZmZlY3RzIGhvdyB0aGVzZSBwcm9jZXNzZXMgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBXZSB3aWxsIG5lZWQgdG8gY2hlY2sgd2hhdCBpbXBsaWNhdGlvbnMgdGhpcyBoYXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2NoZWR1bGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3RocmVhZF9mdW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYz01OTY9c3RhdGljIHN0cnVjdCBzaW1wbGVfd29ya19xdWV1ZSAqZ2V0X2N1cnJlbnRfdGhyZWFkX3dvcmtfcXVldWUodm9pZClcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9mdW5uZWwtd29ya3F1ZXVlLmMtNjA2LVxuZHJpdmVycy9tZC9kbS12ZG8vZnVubmVsLXdvcmtxdWV1ZS5jOjYwNzpcdGlmIChrdGhyZWFkX2Z1bmMoY3VycmVudCkgIT0gd29ya19xdWV1ZV9ydW5uZXIpXG5kcml2ZXJzL21kL2RtLXZkby9mdW5uZWwtd29ya3F1ZXVlLmMtNjA4LVx0XHQvKiBOb3QgYSBWRE8gd29yayBxdWV1ZSB0aHJlYWQuICovXG4tLVxuZnMvbmZzZC9uZnNzdmMuYz01OTU9c3RydWN0IHN2Y19ycXN0ICpuZnNkX2N1cnJlbnRfcnFzdCh2b2lkKVxuZnMvbmZzZC9uZnNzdmMuYy01OTYte1xuZnMvbmZzZC9uZnNzdmMuYzo1OTc6XHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpID09IG5mc2QpXG5mcy9uZnNkL25mc3N2Yy5jLTU5OC1cdFx0cmV0dXJuIGt0aHJlYWRfZGF0YShjdXJyZW50KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaD0xMTI9Ym9vbCBrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcChib29sICp3YXNfZnJvemVuKTtcbmluY2x1ZGUvbGludXgva3RocmVhZC5oOjExMzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcbmluY2x1ZGUvbGludXgva3RocmVhZC5oLTExNC12b2lkICprdGhyZWFkX2RhdGEoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcbi0tXG5rZXJuZWwva3RocmVhZC5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcCk7XG4tLVxua2VybmVsL2t0aHJlYWQuYy0yMTEtLyoqXG5rZXJuZWwva3RocmVhZC5jOjIxMjogKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXG5rZXJuZWwva3RocmVhZC5jLTIxMy0gKiBAdGFzazoga3RocmVhZCB0YXNrIGluIHF1ZXN0aW9uXG4tLVxua2VybmVsL2t0aHJlYWQuYy0yMTYtICovXG5rZXJuZWwva3RocmVhZC5jOjIxNzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxua2VybmVsL2t0aHJlYWQuYy0yMTgte1xuLS1cbmtlcm5lbC9rdGhyZWFkLmMtMjIzLX1cbmtlcm5lbC9rdGhyZWFkLmM6MjI0OkVYUE9SVF9TWU1CT0xfR1BMKGt0aHJlYWRfZnVuYyk7XG5rZXJuZWwva3RocmVhZC5jLTIyNS1cbi0tXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBuYmNvbl9rdGhyZWFkX3dha2Uoc3RydWN0IGNvbnNvbGUgKmNvbilcbi0tXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmgtMTI4LVx0ICpcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaDoxMjk6XHQgKiBUaGlzIHBhaXJzIHdpdGggbmJjb25fa3RocmVhZF9mdW5jOkEuXG5rZXJuZWwvcHJpbnRrL2ludGVybmFsLmgtMTMwLVx0ICovXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jPTExODA9c3RhdGljIGJvb2wgbmJjb25fa3RocmVhZF9zaG91bGRfd2FrZXVwKHN0cnVjdCBjb25zb2xlICpjb24sIHN0cnVjdCBuYmNvbl9jb250ZXh0ICpjdHh0KVxuLS1cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjE0LS8qKlxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEyMTU6ICogbmJjb25fa3RocmVhZF9mdW5jIC0gVGhlIHByaW50ZXIgdGhyZWFkIGZ1bmN0aW9uXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNi0gKiBAX19jb25zb2xlOlx0Q29uc29sZSB0byBvcGVyYXRlIG9uXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyMTktICovXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTIyMDpzdGF0aWMgaW50IG5iY29uX2t0aHJlYWRfZnVuYyh2b2lkICpfX2NvbnNvbGUpXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIyMS17XG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyNDQtXHRcdFx0ICAgbmJjb25fa3RocmVhZF9zaG91bGRfd2FrZXVwKGNvbiwgY3R4dCksXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTI0NTpcdFx0XHQgICBUQVNLX0lOVEVSUlVQVElCTEUpOyAvKiBMTU0obmJjb25fa3RocmVhZF9mdW5jOkEpICovXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTI0Ni1cbi0tXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTI5Mz1zdGF0aWMgaW5saW5lIGJvb2wgcmN1d2FpdF9oYXNfc2xlZXBlcihzdHJ1Y3QgcmN1d2FpdCAqdylcbi0tXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTMwMy1cdCAqXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTMwNDpcdCAqIFRoaXMgcGFpcnMgd2l0aCBuYmNvbl9rdGhyZWFkX2Z1bmM6QS5cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzA1LVx0ICovXG4tLVxua2VybmVsL3ByaW50ay9uYmNvbi5jPTEzNzU9Ym9vbCBuYmNvbl9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgY29uc29sZSAqY29uKVxuLS1cbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzgzLVxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEzODQ6XHRrdCA9IGt0aHJlYWRfcnVuKG5iY29uX2t0aHJlYWRfZnVuYywgY29uLCBcJiMzNDtwci8lcyVkXCYjMzQ7LCBjb24tXHUwMDNlbmFtZSwgY29uLVx1MDAzZWluZGV4KTtcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMzg1LVx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcbi0tXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTM2NTY9c3RhdGljIGJvb2wgbGVnYWN5X2t0aHJlYWRfc2hvdWxkX3dha2V1cCh2b2lkKVxuLS1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzcwMy1cbmtlcm5lbC9wcmludGsvcHJpbnRrLmM6MzcwNDpzdGF0aWMgaW50IGxlZ2FjeV9rdGhyZWFkX2Z1bmModm9pZCAqdW51c2VkKVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzA1LXtcbi0tXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jPTM3Mjg9c3RhdGljIGJvb2wgbGVnYWN5X2t0aHJlYWRfY3JlYXRlKHZvaWQpXG4tLVxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzMzLVxua2VybmVsL3ByaW50ay9wcmludGsuYzozNzM0Olx0a3QgPSBrdGhyZWFkX3J1bihsZWdhY3lfa3RocmVhZF9mdW5jLCBOVUxMLCBcJiMzNDtwci9sZWdhY3lcJiMzNDspO1xua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzM1LVx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MzI1OT1ib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG5tbS9jb21wYWN0aW9uLmMtMzI2MC17XG5tbS9jb21wYWN0aW9uLmM6MzI2MTpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xubW0vY29tcGFjdGlvbi5jLTMyNjItfVxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTc0PWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtMzE3NS17XG5tbS9raHVnZXBhZ2VkLmM6MzE3NjpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2h1Z2VwYWdlZDtcbm1tL2todWdlcGFnZWQuYy0zMTc3LX1cbi0tXG5tbS92bXNjYW4uYz03NTk3PWJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcbm1tL3Ztc2Nhbi5jLTc1OTgte1xubW0vdm1zY2FuLmM6NzU5OTpcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xubW0vdm1zY2FuLmMtNzYwMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBrdGhyZWFkX2Z1bmNgIGluIGBrZXJuZWwva3RocmVhZC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCBga3RocmVhZF9mdW5jYCB3aXRoaW4gYGtlcm5lbC9rdGhyZWFkLmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2Uga2VybmVsIHRocmVhZHMgYXJlIGFjdHVhbGx5ICpkb2luZyogdGhlaXIgd29yay4gSSBrbm93IHRoZSBjb3JlIGNvbmNlcHQ6IHRoZXNlIGFyZSBsaWdodHdlaWdodCBwcm9jZXNzZXMgd2l0aGluIHRoZSBrZXJuZWwsIGJ1dCB0aGUgc3BlY2lmaWNzIGFyZSB3aGVyZSB0aGUgZGV2aWwgaXMuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGV4ZWN1dGlvbiBsb29wLCBwb3RlbnRpYWxseSBtYW5hZ2luZyB0aGUgdGhyZWFkJiMzOTtzIHN0YXRlLCBhbmQgcHJvYmFibHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc2NoZWR1bGVyLiBJJiMzOTttIGFsc28gYmV0dGluZyB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGBrdGhyZWFkX2NyZWF0ZWAgZnVuY3Rpb24sIGxpa2VseSBzZXR0aW5nIHVwIHRoZSB0aHJlYWQmIzM5O3MgaW5pdGlhbCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXPigJRtdXRleGVzLCBzZW1hcGhvcmVzLCBtYXliZSBldmVuIHNwaW5sb2Nrc+KAlHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRocmVhZHMgY29vcGVyYXRlIChvciBkb24mIzM5O3QpIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCB1c2VyLXNwYWNlIHByb2Nlc3Nlcy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGxvZ2ljIGZvciBoYW5kbGluZyBzaWduYWxzIG9yIG90aGVyIGZvcm1zIG9mIGludGVyLXRocmVhZCBjb21tdW5pY2F0aW9uLCB0b28uIEZpbmFsbHksIEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIHNvbGlkIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5OyBhIHJvYnVzdCBrZXJuZWwgbmVlZHMgdG8gZ3JhY2VmdWxseSBtYW5hZ2UgdW5leHBlY3RlZCBzaXR1YXRpb25zIHdpdGhpbiBpdHMgdGhyZWFkcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgYWNjdXJhdGUgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBhcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2t0aHJlYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjExOlx0LyoqXG4gMjEyOlx0ICoga3RocmVhZF9mdW5jIC0gcmV0dXJuIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgb24ga3RocmVhZCBjcmVhdGlvblxuIDIxMzpcdCAqIEB0YXNrOiBrdGhyZWFkIHRhc2sgaW4gcXVlc3Rpb25cbiAyMTQ6XHQgKlxuIDIxNTpcdCAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFzayBpcyBub3QgYSBrdGhyZWFkLlxuIDIxNjpcdCAqL1xuIDIxNzpcdHZvaWQgKmt0aHJlYWRfZnVuYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gMjE4Olx0e1xuIDIxOTpcdFx0c3RydWN0IGt0aHJlYWQgKmt0aHJlYWQgPSB0c2tfaXNfa3RocmVhZCh0YXNrKTtcbiAyMjA6XHRcdGlmIChrdGhyZWFkKVxuIDIyMTpcdFx0XHRyZXR1cm4ga3RocmVhZC1cdTAwM2V0aHJlYWRmbjtcbiAyMjI6XHRcdHJldHVybiBOVUxMO1xuIDIyMzpcdH1cbiAyMjQ6XHRFWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2Z1bmMpO1xuIDIyNTpcdFxuIDIyNjpcdC8qKlxuIDIyNzpcdCAqIGt0aHJlYWRfZGF0YSAtIHJldHVybiBkYXRhIHZhbHVlIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXG4gMjI4Olx0ICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxuIDIyOTpcdCAqXG4gMjMwOlx0ICogUmV0dXJuIHRoZSBkYXRhIHZhbHVlIHNwZWNpZmllZCB3aGVuIGt0aHJlYWQgQHRhc2sgd2FzIGNyZWF0ZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDMKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogNTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhcnRpY3VsYXJseSB3aGVyZSBrZXJuZWwgZGF0YSBpbnRlcmFjdHMgd2l0aCB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKRmlyc3QsIEkgZXhhbWluZWQgZm9yIGFueSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgcGFkZGluZyBvciBmaWVsZHMgbWlnaHQgbm90IGJlIHByb3Blcmx5IGluaXRpYWxpemVkLiAqKkdvb2QgbmV3cyoqLCBub3RoaW5nIGp1bXBlZCBvdXQuIEkgYWxzbyBjaGVja2VkIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFnYWluLCAqKmNsZWFyKiouIEkgY2FyZWZ1bGx5IGxvb2tlZCBhdCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aG9zZSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIHRoZSBga3N3YXBkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3NgIHBpcXVlZCBteSBpbnRlcmVzdC4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIGl0JiMzOTtzIHJlbW92aW5nIGEgc3RhY2stYWxsb2NhdGVkIGZpZWxkLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcgYXMgaXQgcmVkdWNlcyBtZW1vcnkgZm9vdHByaW50IGFuZCBtaXRpZ2F0ZXMgcG90ZW50aWFsIHN0YWNrIG92ZXJmbG93IHJpc2tzLCBzbyBubyBwcm9ibGVtcyB0aGVyZS4gRmluYWxseSwgSSBkb3VibGUgY2hlY2tlZCBmb3IgYW55IGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcyBmcm9tIGV4aXN0aW5nIGJ1ZmZlcnMsIGJ1dCBJIGZvdW5kIG5vdGhpbmcgb2YgY29uY2Vybi4KCk5leHQsIEkgbG9va2VkIGF0IHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBgaW9tYXBfd3JpdGVwYWdlc2AgdG8gY2hhbmdlIGEgV0FSTl9PTiBjaGVjayBmb3IgcmVjbGFpbSBjb250ZXh0LCBjaGFuZ2luZyBob3cgdGhlIHJlY2xhaW0gY29udGV4dCBpcyBldmFsdWF0ZWQuIFRoaXMgc2VlbXMgdG8gYmUgYSBiZWhhdmlvcmFsIGNoYW5nZS4gVGhlIGB4ZnNfYnRyZWUuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gcmVtb3ZlIGtzd2FwZCBmbGFnIGluaGVyaXRhbmNlLiBTZXZlcmFsIGZpbGVzIGxpa2UgYGNvbXBhY3Rpb24uaGAsIGBzd2FwLmhgLCBgc2NoZWQuaGAsIGBjb21wYWN0aW9uLmNgLCBhbmQgYHZtc2Nhbi5jYCBhcmUgcmVtb3ZpbmcgYFBGX0tDT01QQUNURGAgYW5kIGBQRl9LU1dBUERgIHRhc2sgZmxhZ3MsIHJlcGxhY2luZyBgY3VycmVudF9pc19rY29tcGFjdGQoKWAgYW5kIGBjdXJyZW50X2lzX2tzd2FwZCgpYCB3aXRoIGEga3RocmVhZCBmdW5jdGlvbiBjaGVjayAoYGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrY29tcGFjdGQgLyBrc3dhcGRgKS4gVGhpcyBpcyBhIHJlZmFjdG9yaW5nIGFyb3VuZCB0YXNrIGlkZW50aWZpY2F0aW9uLgoKTXkgY2VudHJhbCBxdWVzdGlvbiBpcyBhbHdheXMgJiMzNDtBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcz8mIzM0OyBBbmQgdGhlIGFuc3dlciwgYmFzZWQgb24gdGhpcyByZXZpZXcsIGlzIGEgZGVmaW5pdGUgKipubyoqLiBUaGVzZSBjaGFuZ2VzIGFwcGVhciB0byBiZSByZWZhY3RvcmluZyB0aGUgcHJvY2VzcyBmbGFncyBhbmQgdXNlIG9mIGt0aHJlYWQgZnVuY3Rpb25zLiBUaGlzIGlzIGEgZ29vZCBzaWduOyBJIHNlZSBubyByaXNrLgoKUmVnYXJkaW5nIEtNU0FOIHZlcnN1cyBLQVNBTiwgdGhpcyBwYXRjaCBpcyB1bmxpa2VseSB0byBiZSBmbGFnZ2VkLiBLQVNBTiBhbmQgdGhlIG90aGVyIGRldGVjdG9ycyBhcmUgZ3JlYXQgZm9yIGZ1bmN0aW9uYWwgdmVyaWZpY2F0aW9uIGFuZCBtZW1vcnkgY29ycnVwdGlvbi4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgZ2VhcmVkIHRvd2FyZHMgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBwb3RlbnRpYWwgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFNpbmNlIEkmIzM5O3ZlIGZvdW5kIG5vIGV2aWRlbmNlIG9mIHRob3NlLCB0aGlzIHBhdGNoIHNob3VsZG4mIzM5O3QgbmVlZCBhIEtNU0FOIGZsYWcuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjaGVja2xpc3Qgb25lIG1vcmUgdGltZTogRG8gYW55IHN0cnVjdHMgaGF2ZSB1bmluaXRpYWxpemVkIHBhZGRpbmc/IE5vLiBJcyBhbnl0aGluZyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gQXJlIHRoZXJlIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBjaGFuZ2VzIHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgcmVnaW9ucz8gTm8uCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIGNoYW5nZXMgYXJlIHdlbGwtZGVmaW5lZC4gSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBJJiMzOTttIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgaG93IHRoZSBrZXJuZWwgaWRlbnRpZmllcyBga3N3YXBkYCBhbmQgYGtjb21wYWN0ZGAgdGhyZWFkcy4gSXQgZWxpbWluYXRlcyB0aGUgYFBGX0tTV0FQRGAgYW5kIGBQRl9LQ09NUEFDVERgIHByb2Nlc3MgZmxhZ3MgaW4gZmF2b3Igb2YgY2hlY2tpbmcgdGhlIGt0aHJlYWQgY3JlYXRpb24gZnVuY3Rpb24gcG9pbnRlciAoYGt0aHJlYWRfZnVuYyhjdXJyZW50KWApLCBzaW1wbGlmaWVzIHdhcm5pbmcgY2hlY2tzIGluIGBpb21hcF93cml0ZXBhZ2VzYCwgYW5kIHJlbW92ZXMgdW51c2VkIGZsYWcgaW5oZXJpdGFuY2UgaW4gWEZTIGJ0cmVlIHNwbGl0IHdvcmtxdWV1ZSBpdGVtcy5cblxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGRhdGEgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxuXG5ObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5X3RvX3VzZXIgcGF0aHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgZGF0YSBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUxOjMxLjM2MTc0Njk3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzkxNzEyMzI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJGU19JT01BUFwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfd3JpdGVwYWdlc1wiLFxuICAgIFwiY3VycmVudF9pc19rc3dhcGRcIixcbiAgICBcImN1cnJlbnRfaXNfa2NvbXBhY3RkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIGhvdyB0aGUga2VybmVsIGlkZW50aWZpZXMgYGtzd2FwZGAgYW5kIGBrY29tcGFjdGRgIHRocmVhZHMuIEl0IGVsaW1pbmF0ZXMgdGhlIGBQRl9LU1dBUERgIGFuZCBgUEZfS0NPTVBBQ1REYCBwcm9jZXNzIGZsYWdzIGluIGZhdm9yIG9mIGNoZWNraW5nIHRoZSBrdGhyZWFkIGNyZWF0aW9uIGZ1bmN0aW9uIHBvaW50ZXIgKGBrdGhyZWFkX2Z1bmMoY3VycmVudClgKSwgc2ltcGxpZmllcyB3YXJuaW5nIGNoZWNrcyBpbiBgaW9tYXBfd3JpdGVwYWdlc2AsIGFuZCByZW1vdmVzIHVudXNlZCBmbGFnIGluaGVyaXRhbmNlIGluIFhGUyBidHJlZSBzcGxpdCB3b3JrcXVldWUgaXRlbXMuXFxuXFxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGRhdGEgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUxOjMxLjM2MTc1Mjc2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NjQ3MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjllZDk5ZDJkZGFmMTljY2IyMDA4YWJhNDZkOWY4NWE4MDUzOTBmNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjUxOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuaW5kZXggMGE1ZWJmZGE5MGYxMi4uNjMwNmNhNzQ3ZjNiYSAxMDA2NDRcXG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xcbkBAIC0yMDc3LDggKzIwNzcsNyBAQCBpb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpXFxuIFxcdCAqIFdyaXRlYmFjayBmcm9tIHJlY2xhaW0gY29udGV4dCBzaG91bGQgbmV2ZXIgaGFwcGVuIGV4Y2VwdCBpbiB0aGUgY2FzZVxcbiBcXHQgKiBvZiBhIFZNIHJlZ3Jlc3Npb24gc28gd2FybiBhYm91dCBpdCBhbmQgcmVmdXNlIHRvIHdyaXRlIHRoZSBkYXRhLlxcbiBcXHQgKi9cXG4tXFx0aWYgKFdBUk5fT05fT05DRSgoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpKSA9PVxcbi1cXHRcXHRcXHRQRl9NRU1BTExPQykpXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHR3aGlsZSAoKGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd3BjLVxcdTAwM2V3YmMsIGZvbGlvLCBcXHUwMDI2ZXJyb3IpKSkge1xcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jIGIvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xcbmluZGV4IDYwZWY3ZjA4YjFkMzAuLjY3MzhkOWQxNTExYmMgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNcXG5AQCAtMjk5NCw3ICsyOTk0LDYgQEAgc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzIHtcXG4gXFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHQqKmN1cnA7XFxuIFxcdGludFxcdFxcdFxcdCpzdGF0O1xcdFxcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xcbiBcXHRpbnRcXHRcXHRcXHRyZXN1bHQ7XFxuLVxcdGJvb2xcXHRcXHRcXHRrc3dhcGQ7XFx0LyogYWxsb2NhdGlvbiBpbiBrc3dhcGQgY29udGV4dCAqL1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvblxcdCpkb25lO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHR3b3JrO1xcbiB9O1xcbkBAIC0zMDA4LDMzICszMDA3LDE4IEBAIHhmc19idHJlZV9zcGxpdF93b3JrZXIoXFxuIHtcXG4gXFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzXFx0KmFyZ3MgPSBjb250YWluZXJfb2Yod29yayxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzLCB3b3JrKTtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHBmbGFncztcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG5ld19wZmxhZ3MgPSAwO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29udGV4dCBoZXJlLCBidXQgbWF5IGFsc28gYmUgZG9pbmcgd29ya1xcbi1cXHQgKiBpbiBrc3dhcGQgY29udGV4dCwgYW5kIGhlbmNlIHdlIG1heSBuZWVkIHRvIGluaGVyaXQgdGhhdCBzdGF0ZVxcbi1cXHQgKiB0ZW1wb3JhcmlseSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBibG9jayB3YWl0aW5nIGZvciBtZW1vcnkgcmVjbGFpbVxcbi1cXHQgKiBpbiBhbnkgd2F5Llxcbi1cXHQgKi9cXG4tXFx0aWYgKGFyZ3MtXFx1MDAzZWtzd2FwZClcXG4tXFx0XFx0bmV3X3BmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcXG4tXFxuLVxcdGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChcXHUwMDI2cGZsYWdzLCBuZXdfcGZsYWdzKTtcXG4gXFx0eGZzX3RyYW5zX3NldF9jb250ZXh0KGFyZ3MtXFx1MDAzZWN1ci1cXHUwMDNlYmNfdHApO1xcbiBcXG4gXFx0YXJncy1cXHUwMDNlcmVzdWx0ID0gX194ZnNfYnRyZWVfc3BsaXQoYXJncy1cXHUwMDNlY3VyLCBhcmdzLVxcdTAwM2VsZXZlbCwgYXJncy1cXHUwMDNlcHRycCxcXG4gXFx0XFx0XFx0XFx0XFx0IGFyZ3MtXFx1MDAzZWtleSwgYXJncy1cXHUwMDNlY3VycCwgYXJncy1cXHUwMDNlc3RhdCk7XFxuIFxcbiBcXHR4ZnNfdHJhbnNfY2xlYXJfY29udGV4dChhcmdzLVxcdTAwM2VjdXItXFx1MDAzZWJjX3RwKTtcXG4tXFx0Y3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZChcXHUwMDI2cGZsYWdzLCBuZXdfcGZsYWdzKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIERvIG5vdCBhY2Nlc3MgYXJncyBhZnRlciBjb21wbGV0ZSgpIGhhcyBydW4gaGVyZS4gV2UgZG9uJ3Qgb3duIGFyZ3NcXG4gXFx0ICogYW5kIHRoZSBvd25lciBtYXkgcnVuIGFuZCBmcmVlIGFyZ3MgYmVmb3JlIHdlIHJldHVybiBoZXJlLlxcbiBcXHQgKi9cXG4gXFx0Y29tcGxldGUoYXJncy1cXHUwMDNlZG9uZSk7XFxuLVxcbiB9XFxuIFxcbiAvKlxcbkBAIC0zMDc4LDcgKzMwNjIsNyBAQCB4ZnNfYnRyZWVfc3BsaXQoXFxuIFxcdGFyZ3MuY3VycCA9IGN1cnA7XFxuIFxcdGFyZ3Muc3RhdCA9IHN0YXQ7XFxuIFxcdGFyZ3MuZG9uZSA9IFxcdTAwMjZkb25lO1xcbi1cXHRhcmdzLmtzd2FwZCA9IGN1cnJlbnRfaXNfa3N3YXBkKCk7XFxuK1xcbiBcXHRJTklUX1dPUktfT05TVEFDSyhcXHUwMDI2YXJncy53b3JrLCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKTtcXG4gXFx0cXVldWVfd29yayh4ZnNfYWxsb2Nfd3EsIFxcdTAwMjZhcmdzLndvcmspO1xcbiBcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZkb25lKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oIGIvZnMveGZzL3hmc19wbGF0Zm9ybS5oXFxuaW5kZXggNWQ1NDJlOTVmZTQ0NC4uYTQ5ZmExNTk4OTRkZSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX3BsYXRmb3JtLmhcXG4rKysgYi9mcy94ZnMveGZzX3BsYXRmb3JtLmhcXG5AQCAtMTE1LDEwICsxMTUsNiBAQCB0eXBlZGVmIF9fdTMyXFx0XFx0XFx0eGZzX25saW5rX3Q7XFxuICNkZWZpbmUgeGZzX2Jsb2NrZ2Nfc2Vjc1xcdHhmc19wYXJhbXMuYmxvY2tnY190aW1lci52YWxcXG4gXFxuICNkZWZpbmUgY3VycmVudF9jcHUoKVxcdFxcdChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKVxcbi0jZGVmaW5lIGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChzcCwgZilcXHRcXHRcXFxcXFxuLVxcdFxcdCgqKHNwKSA9IGN1cnJlbnQtXFx1MDAzZWZsYWdzLCBjdXJyZW50LVxcdTAwM2VmbGFncyB8PSAoZikpXFxuLSNkZWZpbmUgY3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZChzcCwgZilcXHRcXFxcXFxuLVxcdFxcdChjdXJyZW50LVxcdTAwM2VmbGFncyA9ICgoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+KGYpKSB8ICgqKHNwKSBcXHUwMDI2IChmKSkpKVxcbiBcXG4gI2RlZmluZSBOQkJZXFx0XFx0OFxcdFxcdC8qIG51bWJlciBvZiBiaXRzIHBlciBieXRlICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXFxuaW5kZXggNjZhMmY3MGU5ZTAxOS4uNjkxYzA5ZjBhNjk3MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXFxuQEAgLTgxLDEwICs4MSw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wYWN0X2dhcCh1bnNpZ25lZCBpbnQgb3JkZXIpXFxuIFxcdHJldHVybiBtaW4oMlVMIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBDT01QQUNUX0NMVVNURVJfTUFYKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LQ09NUEFDVEQ7XFxuLX1cXG4gXFxuICNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbiBcXG5AQCAtMTAzLDcgKzk5LDcgQEAgZXh0ZXJuIHZvaWQgY29tcGFjdGlvbl9kZWZlcl9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXG4gYm9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbiBcXHRcXHRcXHRcXHRcXHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcXG4tXFxuK2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZCk7XFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfcnVuKGludCBuaWQpO1xcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3N0b3AoaW50IG5pZCk7XFxuIGV4dGVybiB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTtcXG5AQCAtMTIwLDYgKzExNiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGtjb21wYWN0ZF9ydW4oaW50IG5pZClcXG4ge1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLmViMTJmZjRjZWE2YzIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuQEAgLTE4MDgsOCArMTgwOCw4IEBAIGV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xcbiAjZGVmaW5lIFBGX1VTRURfTUFUSFxcdFxcdDB4MDAwMDIwMDBcXHQvKiBJZiB1bnNldCB0aGUgZnB1IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAqL1xcbiAjZGVmaW5lIFBGX1VTRVJfV09SS0VSXFx0XFx0MHgwMDAwNDAwMFxcdC8qIEtlcm5lbCB0aHJlYWQgY2xvbmVkIGZyb20gdXNlcnNwYWNlIHRocmVhZCAqL1xcbiAjZGVmaW5lIFBGX05PRlJFRVpFXFx0XFx0MHgwMDAwODAwMFxcdC8qIFRoaXMgdGhyZWFkIHNob3VsZCBub3QgYmUgZnJvemVuICovXFxuLSNkZWZpbmUgUEZfS0NPTVBBQ1REXFx0XFx0MHgwMDAxMDAwMFxcdC8qIEkgYW0ga2NvbXBhY3RkICovXFxuLSNkZWZpbmUgUEZfS1NXQVBEXFx0XFx0MHgwMDAyMDAwMFxcdC8qIEkgYW0ga3N3YXBkICovXFxuKyNkZWZpbmUgUEZfX0hPTEVfXzAwMDEwMDAwXFx0MHgwMDAxMDAwMFxcbisjZGVmaW5lIFBGX19IT0xFX18wMDAyMDAwMFxcdDB4MDAwMjAwMDBcXG4gI2RlZmluZSBQRl9NRU1BTExPQ19OT0ZTXFx0MHgwMDA0MDAwMFxcdC8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0ZTLiBTZWUgbWVtYWxsb2NfbmZzX3NhdmUoKSAqL1xcbiAjZGVmaW5lIFBGX01FTUFMTE9DX05PSU9cXHQweDAwMDgwMDAwXFx0LyogQWxsIGFsbG9jYXRpb25zIGluaGVyaXQgR0ZQX05PSU8uIFNlZSBtZW1hbGxvY19ub2lvX3NhdmUoKSAqL1xcbiAjZGVmaW5lIFBGX0xPQ0FMX1RIUk9UVExFXFx0MHgwMDEwMDAwMFxcdC8qIFRocm90dGxlIHdyaXRlcyBvbmx5IGFnYWluc3QgdGhlIGJkaSBJIHdyaXRlIHRvLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggYTcyZWNmMTJjMDBkYi4uZmMyOTBlMjllNGE5ZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuQEAgLTI1LDEyICsyNSw2IEBAXFxuICNkZWZpbmUgU1dBUF9GTEFHU19WQUxJRFxcdChTV0FQX0ZMQUdfUFJJT19NQVNLIHwgU1dBUF9GTEFHX1BSRUZFUiB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFNXQVBfRkxBR19ESVNDQVJEIHwgU1dBUF9GTEFHX0RJU0NBUkRfT05DRSB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFNXQVBfRkxBR19ESVNDQVJEX1BBR0VTKVxcbi1cXG4tc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LU1dBUEQ7XFxuLX1cXG4tXFxuIC8qXFxuICAqIE1BWF9TV0FQRklMRVMgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3dhcHR5cGVzOiB0aGluZ3Mgd2hpY2ggY2FuXFxuICAqIGJlIHN3YXBwZWQgdG8uICBUaGUgc3dhcCB0eXBlIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhhdCBzd2FwIHR5cGUgYXJlXFxuQEAgLTMzOSw2ICszMzMsNyBAQCB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTtcXG4gXFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpO1xcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XFxuK2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NXQVBcXG4gaW50IGFkZF9zd2FwX2V4dGVudChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2UsXFxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xcbmluZGV4IGEwNDk0MTU1MTJjNjcuLjQ5OTRlMjAwYmJlY2QgMTAwNjQ0XFxuLS0tIGEvbW0vY29tcGFjdGlvbi5jXFxuKysrIGIvbW0vY29tcGFjdGlvbi5jXFxuQEAgLTMxOTcsNyArMzE5Nyw2IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApXFxuIFxcdGxvbmcgZGVmYXVsdF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhIUEFHRV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpO1xcbiBcXHRsb25nIHRpbWVvdXQgPSBkZWZhdWx0X3RpbWVvdXQ7XFxuIFxcbi1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyB8PSBQRl9LQ09NUEFDVEQ7XFxuIFxcdHNldF9mcmVlemFibGUoKTtcXG4gXFxuIFxcdHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyID0gMDtcXG5AQCAtMzI1NCwxMSArMzI1MywxNSBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxcbiBcXHRcXHRcXHRwZ2RhdC1cXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UEZfS0NPTVBBQ1REO1xcbi1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG4re1xcbitcXHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tjb21wYWN0ZCk7XFxuK1xcbiAvKlxcbiAgKiBUaGlzIGtjb21wYWN0ZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXFxuICAqIE9uIG5vZGUtaG90LWFkZCwga2NvbXBhY3RkIHdpbGwgbW92ZWQgdG8gcHJvcGVyIGNwdXMgaWYgY3B1cyBhcmUgaG90LWFkZGVkLlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggYmYyNzg2YzcyNDdkNC4uOWY5OTYzM2Q3ZGMxZSAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTc1MzksNyArNzUzOSw3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxuIFxcdCAqIHVzIGZyb20gcmVjdXJzaXZlbHkgdHJ5aW5nIHRvIGZyZWUgbW9yZSBtZW1vcnkgYXMgd2UncmVcXG4gXFx0ICogdHJ5aW5nIHRvIGZyZWUgdGhlIGZpcnN0IHBpZWNlIG9mIG1lbW9yeSBpbiB0aGUgZmlyc3QgcGxhY2UpLlxcbiBcXHQgKi9cXG4tXFx0dHNrLVxcdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcXG4rXFx0dHNrLVxcdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQztcXG4gXFx0c2V0X2ZyZWV6YWJsZSgpO1xcbiBcXG4gXFx0V1JJVEVfT05DRShwZ2RhdC1cXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcXG5AQCAtNzU4OSwxMSArNzU4OSwxNyBAQCBzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbiBcXHRcXHRcXHRnb3RvIGtzd2FwZF90cnlfc2xlZXA7XFxuIFxcdH1cXG4gXFxuLVxcdHRzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfihQRl9NRU1BTExPQyB8IFBGX0tTV0FQRCk7XFxuK1xcdHRzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gflBGX01FTUFMTE9DO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG4re1xcbitcXHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtzd2FwZDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tzd2FwZCk7XFxuK1xcbiAvKlxcbiAgKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXFxuICAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmggYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXFxuaW5kZXggNzZmNWUwMjVlMTA3Ni4uODA3ZWY4ODFjZTJkNCAxMDA2NDRcXG4tLS0gYS90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXFxuKysrIGIvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaFxcbkBAIC0zMSw4ICszMSw2IEBAXFxuICNkZWZpbmUgUEZfSURMRVxcdFxcdFxcdFxcdDB4MDAwMDAwMDJcXHQvKiBJIGFtIGFuIElETEUgdGhyZWFkICovXFxuICNkZWZpbmUgUEZfSU9fV09SS0VSXFx0XFx0XFx0MHgwMDAwMDAxMFxcdC8qIFRhc2sgaXMgYW4gSU8gd29ya2VyICovXFxuICNkZWZpbmUgUEZfV1FfV09SS0VSXFx0XFx0XFx0MHgwMDAwMDAyMFxcdC8qIEknbSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi9cXG4tI2RlZmluZSBQRl9LQ09NUEFDVERcXHRcXHRcXHQweDAwMDEwMDAwICAgICAgLyogSSBhbSBrY29tcGFjdGQgKi9cXG4tI2RlZmluZSBQRl9LU1dBUERcXHRcXHRcXHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cXG4gI2RlZmluZSBQRl9LVEhSRUFEXFx0XFx0XFx0MHgwMDIwMDAwMFxcdC8qIEkgYW0gYSBrZXJuZWwgdGhyZWFkICovXFxuICNkZWZpbmUgUEZfRVhJVElOR1xcdFxcdFxcdDB4MDAwMDAwMDRcXG4gI2RlZmluZSBDTE9DS19NT05PVE9OSUNcXHRcXHRcXHQxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUxOjMxLjg0MTA0MjgyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTUwNzY0MjgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX3dyaXRlcGFnZXNcIixcbiAgICBcImN1cnJlbnRfaXNfa3N3YXBkXCIsXG4gICAgXCJjdXJyZW50X2lzX2tjb21wYWN0ZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5ZWQ5OWQyZGRhZjE5Y2NiMjAwOGFiYTQ2ZDlmODVhODA1MzkwZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjUxOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYyBiL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcbmluZGV4IDBhNWViZmRhOTBmMTIuLjYzMDZjYTc0N2YzYmEgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXG4rKysgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5AQCAtMjA3Nyw4ICsyMDc3LDcgQEAgaW9tYXBfd3JpdGVwYWdlcyhzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjKVxuIFx0ICogV3JpdGViYWNrIGZyb20gcmVjbGFpbSBjb250ZXh0IHNob3VsZCBuZXZlciBoYXBwZW4gZXhjZXB0IGluIHRoZSBjYXNlXG4gXHQgKiBvZiBhIFZNIHJlZ3Jlc3Npb24gc28gd2FybiBhYm91dCBpdCBhbmQgcmVmdXNlIHRvIHdyaXRlIHRoZSBkYXRhLlxuIFx0ICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpKSA9PVxuLVx0XHRcdFBGX01FTUFMTE9DKSlcbitcdGlmIChXQVJOX09OX09OQ0UoKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0d2hpbGUgKChmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdwYy1cdTAwM2V3YmMsIGZvbGlvLCBcdTAwMjZlcnJvcikpKSB7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNcbmluZGV4IDYwZWY3ZjA4YjFkMzAuLjY3MzhkOWQxNTExYmMgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXG5AQCAtMjk5NCw3ICsyOTk0LDYgQEAgc3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzIHtcbiBcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXHQqKmN1cnA7XG4gXHRpbnRcdFx0XHQqc3RhdDtcdFx0Lyogc3VjY2Vzcy9mYWlsdXJlICovXG4gXHRpbnRcdFx0XHRyZXN1bHQ7XG4tXHRib29sXHRcdFx0a3N3YXBkO1x0LyogYWxsb2NhdGlvbiBpbiBrc3dhcGQgY29udGV4dCAqL1xuIFx0c3RydWN0IGNvbXBsZXRpb25cdCpkb25lO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuIH07XG5AQCAtMzAwOCwzMyArMzAwNywxOCBAQCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKFxuIHtcbiBcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1x0KmFyZ3MgPSBjb250YWluZXJfb2Yod29yayxcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3MsIHdvcmspO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRwZmxhZ3M7XG4tXHR1bnNpZ25lZCBsb25nXHRcdG5ld19wZmxhZ3MgPSAwO1xuLVxuLVx0Lypcbi1cdCAqIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbnRleHQgaGVyZSwgYnV0IG1heSBhbHNvIGJlIGRvaW5nIHdvcmtcbi1cdCAqIGluIGtzd2FwZCBjb250ZXh0LCBhbmQgaGVuY2Ugd2UgbWF5IG5lZWQgdG8gaW5oZXJpdCB0aGF0IHN0YXRlXG4tXHQgKiB0ZW1wb3JhcmlseSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBibG9jayB3YWl0aW5nIGZvciBtZW1vcnkgcmVjbGFpbVxuLVx0ICogaW4gYW55IHdheS5cbi1cdCAqL1xuLVx0aWYgKGFyZ3MtXHUwMDNla3N3YXBkKVxuLVx0XHRuZXdfcGZsYWdzIHw9IFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEO1xuLVxuLVx0Y3VycmVudF9zZXRfZmxhZ3NfbmVzdGVkKFx1MDAyNnBmbGFncywgbmV3X3BmbGFncyk7XG4gXHR4ZnNfdHJhbnNfc2V0X2NvbnRleHQoYXJncy1cdTAwM2VjdXItXHUwMDNlYmNfdHApO1xuIFxuIFx0YXJncy1cdTAwM2VyZXN1bHQgPSBfX3hmc19idHJlZV9zcGxpdChhcmdzLVx1MDAzZWN1ciwgYXJncy1cdTAwM2VsZXZlbCwgYXJncy1cdTAwM2VwdHJwLFxuIFx0XHRcdFx0XHQgYXJncy1cdTAwM2VrZXksIGFyZ3MtXHUwMDNlY3VycCwgYXJncy1cdTAwM2VzdGF0KTtcbiBcbiBcdHhmc190cmFuc19jbGVhcl9jb250ZXh0KGFyZ3MtXHUwMDNlY3VyLVx1MDAzZWJjX3RwKTtcbi1cdGN1cnJlbnRfcmVzdG9yZV9mbGFnc19uZXN0ZWQoXHUwMDI2cGZsYWdzLCBuZXdfcGZsYWdzKTtcbiBcbiBcdC8qXG4gXHQgKiBEbyBub3QgYWNjZXNzIGFyZ3MgYWZ0ZXIgY29tcGxldGUoKSBoYXMgcnVuIGhlcmUuIFdlIGRvbid0IG93biBhcmdzXG4gXHQgKiBhbmQgdGhlIG93bmVyIG1heSBydW4gYW5kIGZyZWUgYXJncyBiZWZvcmUgd2UgcmV0dXJuIGhlcmUuXG4gXHQgKi9cbiBcdGNvbXBsZXRlKGFyZ3MtXHUwMDNlZG9uZSk7XG4tXG4gfVxuIFxuIC8qXG5AQCAtMzA3OCw3ICszMDYyLDcgQEAgeGZzX2J0cmVlX3NwbGl0KFxuIFx0YXJncy5jdXJwID0gY3VycDtcbiBcdGFyZ3Muc3RhdCA9IHN0YXQ7XG4gXHRhcmdzLmRvbmUgPSBcdTAwMjZkb25lO1xuLVx0YXJncy5rc3dhcGQgPSBjdXJyZW50X2lzX2tzd2FwZCgpO1xuK1xuIFx0SU5JVF9XT1JLX09OU1RBQ0soXHUwMDI2YXJncy53b3JrLCB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyKTtcbiBcdHF1ZXVlX3dvcmsoeGZzX2FsbG9jX3dxLCBcdTAwMjZhcmdzLndvcmspO1xuIFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZkb25lKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3BsYXRmb3JtLmggYi9mcy94ZnMveGZzX3BsYXRmb3JtLmhcbmluZGV4IDVkNTQyZTk1ZmU0NDQuLmE0OWZhMTU5ODk0ZGUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX3BsYXRmb3JtLmhcbisrKyBiL2ZzL3hmcy94ZnNfcGxhdGZvcm0uaFxuQEAgLTExNSwxMCArMTE1LDYgQEAgdHlwZWRlZiBfX3UzMlx0XHRcdHhmc19ubGlua190O1xuICNkZWZpbmUgeGZzX2Jsb2NrZ2Nfc2Vjc1x0eGZzX3BhcmFtcy5ibG9ja2djX3RpbWVyLnZhbFxuIFxuICNkZWZpbmUgY3VycmVudF9jcHUoKVx0XHQocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSlcbi0jZGVmaW5lIGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChzcCwgZilcdFx0XFxcbi1cdFx0KCooc3ApID0gY3VycmVudC1cdTAwM2VmbGFncywgY3VycmVudC1cdTAwM2VmbGFncyB8PSAoZikpXG4tI2RlZmluZSBjdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKHNwLCBmKVx0XFxcbi1cdFx0KGN1cnJlbnQtXHUwMDNlZmxhZ3MgPSAoKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IH4oZikpIHwgKCooc3ApIFx1MDAyNiAoZikpKSlcbiBcbiAjZGVmaW5lIE5CQllcdFx0OFx0XHQvKiBudW1iZXIgb2YgYml0cyBwZXIgYnl0ZSAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbmluZGV4IDY2YTJmNzBlOWUwMTkuLjY5MWMwOWYwYTY5NzEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaFxuKysrIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbkBAIC04MSwxMCArODEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcGFjdF9nYXAodW5zaWduZWQgaW50IG9yZGVyKVxuIFx0cmV0dXJuIG1pbigyVUwgXHUwMDNjXHUwMDNjIG9yZGVyLCBDT01QQUNUX0NMVVNURVJfTUFYKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcbi17XG4tXHRyZXR1cm4gY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS0NPTVBBQ1REO1xuLX1cbiBcbiAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbiBcbkBAIC0xMDMsNyArOTksNyBAQCBleHRlcm4gdm9pZCBjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4gXG4gYm9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxuIFx0XHRcdFx0XHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcbi1cbitib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpO1xuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfcnVuKGludCBuaWQpO1xuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfc3RvcChpbnQgbmlkKTtcbiBleHRlcm4gdm9pZCB3YWtldXBfa2NvbXBhY3RkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XG5AQCAtMTIwLDYgKzExNiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBrY29tcGFjdGRfcnVuKGludCBuaWQpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLmViMTJmZjRjZWE2YzIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTE4MDgsOCArMTgwOCw4IEBAIGV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xuICNkZWZpbmUgUEZfVVNFRF9NQVRIXHRcdDB4MDAwMDIwMDBcdC8qIElmIHVuc2V0IHRoZSBmcHUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlICovXG4gI2RlZmluZSBQRl9VU0VSX1dPUktFUlx0XHQweDAwMDA0MDAwXHQvKiBLZXJuZWwgdGhyZWFkIGNsb25lZCBmcm9tIHVzZXJzcGFjZSB0aHJlYWQgKi9cbiAjZGVmaW5lIFBGX05PRlJFRVpFXHRcdDB4MDAwMDgwMDBcdC8qIFRoaXMgdGhyZWFkIHNob3VsZCBub3QgYmUgZnJvemVuICovXG4tI2RlZmluZSBQRl9LQ09NUEFDVERcdFx0MHgwMDAxMDAwMFx0LyogSSBhbSBrY29tcGFjdGQgKi9cbi0jZGVmaW5lIFBGX0tTV0FQRFx0XHQweDAwMDIwMDAwXHQvKiBJIGFtIGtzd2FwZCAqL1xuKyNkZWZpbmUgUEZfX0hPTEVfXzAwMDEwMDAwXHQweDAwMDEwMDAwXG4rI2RlZmluZSBQRl9fSE9MRV9fMDAwMjAwMDBcdDB4MDAwMjAwMDBcbiAjZGVmaW5lIFBGX01FTUFMTE9DX05PRlNcdDB4MDAwNDAwMDBcdC8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0ZTLiBTZWUgbWVtYWxsb2NfbmZzX3NhdmUoKSAqL1xuICNkZWZpbmUgUEZfTUVNQUxMT0NfTk9JT1x0MHgwMDA4MDAwMFx0LyogQWxsIGFsbG9jYXRpb25zIGluaGVyaXQgR0ZQX05PSU8uIFNlZSBtZW1hbGxvY19ub2lvX3NhdmUoKSAqL1xuICNkZWZpbmUgUEZfTE9DQUxfVEhST1RUTEVcdDB4MDAxMDAwMDBcdC8qIFRocm90dGxlIHdyaXRlcyBvbmx5IGFnYWluc3QgdGhlIGJkaSBJIHdyaXRlIHRvLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IGE3MmVjZjEyYzAwZGIuLmZjMjkwZTI5ZTRhOWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0yNSwxMiArMjUsNiBAQFxuICNkZWZpbmUgU1dBUF9GTEFHU19WQUxJRFx0KFNXQVBfRkxBR19QUklPX01BU0sgfCBTV0FQX0ZMQUdfUFJFRkVSIHwgXFxcbiBcdFx0XHRcdCBTV0FQX0ZMQUdfRElTQ0FSRCB8IFNXQVBfRkxBR19ESVNDQVJEX09OQ0UgfCBcXFxuIFx0XHRcdFx0IFNXQVBfRkxBR19ESVNDQVJEX1BBR0VTKVxuLVxuLXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXG4te1xuLVx0cmV0dXJuIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tTV0FQRDtcbi19XG4tXG4gLypcbiAgKiBNQVhfU1dBUEZJTEVTIGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN3YXB0eXBlczogdGhpbmdzIHdoaWNoIGNhblxuICAqIGJlIHN3YXBwZWQgdG8uICBUaGUgc3dhcCB0eXBlIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhhdCBzd2FwIHR5cGUgYXJlXG5AQCAtMzM5LDYgKzMzMyw3IEBAIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xuIFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpO1xuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKTtcbitib29sIGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpO1xuIFxuICNpZmRlZiBDT05GSUdfU1dBUFxuIGludCBhZGRfc3dhcF9leHRlbnQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywgdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLFxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggYTA0OTQxNTUxMmM2Ny4uNDk5NGUyMDBiYmVjZCAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuKysrIGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtMzE5Nyw3ICszMTk3LDYgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdGxvbmcgZGVmYXVsdF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhIUEFHRV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpO1xuIFx0bG9uZyB0aW1lb3V0ID0gZGVmYXVsdF90aW1lb3V0O1xuIFxuLVx0Y3VycmVudC1cdTAwM2VmbGFncyB8PSBQRl9LQ09NUEFDVEQ7XG4gXHRzZXRfZnJlZXphYmxlKCk7XG4gXG4gXHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyID0gMDtcbkBAIC0zMjU0LDExICszMjUzLDE1IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApXG4gXHRcdFx0cGdkYXQtXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0Y3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjY9IH5QRl9LQ09NUEFDVEQ7XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rYm9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKVxuK3tcbitcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tjb21wYWN0ZCk7XG4rXG4gLypcbiAgKiBUaGlzIGtjb21wYWN0ZCBzdGFydCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBpbml0IGFuZCBub2RlLWhvdC1hZGQuXG4gICogT24gbm9kZS1ob3QtYWRkLCBrY29tcGFjdGQgd2lsbCBtb3ZlZCB0byBwcm9wZXIgY3B1cyBpZiBjcHVzIGFyZSBob3QtYWRkZWQuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYmYyNzg2YzcyNDdkNC4uOWY5OTYzM2Q3ZGMxZSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTc1MzksNyArNzUzOSw3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4gXHQgKiB1cyBmcm9tIHJlY3Vyc2l2ZWx5IHRyeWluZyB0byBmcmVlIG1vcmUgbWVtb3J5IGFzIHdlJ3JlXG4gXHQgKiB0cnlpbmcgdG8gZnJlZSB0aGUgZmlyc3QgcGllY2Ugb2YgbWVtb3J5IGluIHRoZSBmaXJzdCBwbGFjZSkuXG4gXHQgKi9cbi1cdHRzay1cdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcbitcdHRzay1cdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQztcbiBcdHNldF9mcmVlemFibGUoKTtcbiBcbiBcdFdSSVRFX09OQ0UocGdkYXQtXHUwMDNla3N3YXBkX29yZGVyLCAwKTtcbkBAIC03NTg5LDExICs3NTg5LDE3IEBAIHN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4gXHRcdFx0Z290byBrc3dhcGRfdHJ5X3NsZWVwO1xuIFx0fVxuIFxuLVx0dHNrLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihQRl9NRU1BTExPQyB8IFBGX0tTV0FQRCk7XG4rXHR0c2stXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfTUVNQUxMT0M7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rYm9vbCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxuK3tcbitcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChjdXJyZW50X2lzX2tzd2FwZCk7XG4rXG4gLypcbiAgKiBBIHpvbmUgaXMgbG93IG9uIGZyZWUgbWVtb3J5IG9yIHRvbyBmcmFnbWVudGVkIGZvciBoaWdoLW9yZGVyIG1lbW9yeS4gIElmXG4gICoga3N3YXBkIHNob3VsZCByZWNsYWltIChkaXJlY3QgcmVjbGFpbSBpcyBkZWZlcnJlZCksIHdha2UgaXQgdXAgZm9yIHRoZSB6b25lJ3NcbmRpZmYgLS1naXQgYS90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oIGIvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaFxuaW5kZXggNzZmNWUwMjVlMTA3Ni4uODA3ZWY4ODFjZTJkNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmhcbisrKyBiL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmhcbkBAIC0zMSw4ICszMSw2IEBAXG4gI2RlZmluZSBQRl9JRExFXHRcdFx0XHQweDAwMDAwMDAyXHQvKiBJIGFtIGFuIElETEUgdGhyZWFkICovXG4gI2RlZmluZSBQRl9JT19XT1JLRVJcdFx0XHQweDAwMDAwMDEwXHQvKiBUYXNrIGlzIGFuIElPIHdvcmtlciAqL1xuICNkZWZpbmUgUEZfV1FfV09SS0VSXHRcdFx0MHgwMDAwMDAyMFx0LyogSSdtIGEgd29ya3F1ZXVlIHdvcmtlciAqL1xuLSNkZWZpbmUgUEZfS0NPTVBBQ1REXHRcdFx0MHgwMDAxMDAwMCAgICAgIC8qIEkgYW0ga2NvbXBhY3RkICovXG4tI2RlZmluZSBQRl9LU1dBUERcdFx0XHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cbiAjZGVmaW5lIFBGX0tUSFJFQURcdFx0XHQweDAwMjAwMDAwXHQvKiBJIGFtIGEga2VybmVsIHRocmVhZCAqL1xuICNkZWZpbmUgUEZfRVhJVElOR1x0XHRcdDB4MDAwMDAwMDRcbiAjZGVmaW5lIENMT0NLX01PTk9UT05JQ1x0XHRcdDFcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUxOjMxLjg0MTA0NDYzNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODE2NDE5MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enogYW5kLCBpZiBzbywgaG93IHRvIGJlc3QgYXBwcm9hY2ggaXQuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdpbmcgYW5kIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGFyZS4gTG9va3MgbGlrZSB3ZSBoYXZlIGEgZmV3IGZpbGVzIGFmZmVjdGVkLCBzbyBsZXQncyB3YWxrIHRocm91Z2ggdGhlbS5cblxuMS4gIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYDogVGhpcyBvbmUncyBzdHJhaWdodGZvcndhcmQ7IGEgYml0d2lzZSBjaGVjayB1c2luZyBgUEZfTUVNQUxMT0NgIGlzIHNpbXBsaWZpZWQuIExpa2VseSBub3QgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcsIGJ1dCB3ZSBjYW4ndCBjb21wbGV0ZWx5IGRpc21pc3MgaXQgd2l0aG91dCBtb3JlIGNvbnRleHQuIE1pbmltYWwgaW1wYWN0IEkgd291bGQgdGhpbmsuXG5cbjIuICBgZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY2A6IEFoLCBub3cgdGhpcyBpcyBtb3JlIGludGVyZXN0aW5nLiBXZSdyZSByZW1vdmluZyBga3N3YXBkYCB0cmFja2luZyBhbmQgbmVzdGVkIGZsYWcgbWFuaXB1bGF0aW9ucyB3aXRoaW4gdGhlIFhGUyBiLXRyZWUgc3BsaXR0aW5nIGNvZGUuIFhGUyBpcyBhbHdheXMgYSBnb29kIHRhcmdldC4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHNpbXBsaWZpY2F0aW9uIG9mIGxvY2tpbmcgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCB0byBzcGxpdHRpbmcgb3BlcmF0aW9ucywgYW5kIHRoYXQncyB0aGUga2luZCBvZiBwbGFjZSB3aGVyZSBmdXp6aW5nIG9mdGVuIGZpbmRzIGludGVyZXN0aW5nIGJlaGF2aW9yLiBOZWVkIHRvIGludmVzdGlnYXRlIHdoeSB0aG9zZSBmbGFncyBhcmUgYmVpbmcgcmVtb3ZlZC4gQ291bGQgYmUgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBidXQgY291bGQgYWxzbyBiZSBhIHN1YnRsZSBidWcgZml4LlxuXG4zLiAgYGluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oYDogVGhpcyBpcyBhIHJlZmFjdG9yaW5nLCBtb3ZpbmcgdGhlIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAgY2hlY2sgdG8gYSBmdW5jdGlvbi4gTm90aGluZyB0b28gZXhjaXRpbmcgaGVyZSwganVzdCBjbGVhbiB1cC5cblxuNC4gIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgOiBEcm9wcGluZyBgUEZfS0NPTVBBQ1REYCBhbmQgYFBGX0tTV0FQRGAgZmxhZ3MuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IHNpZ25hbHMgYSBzaGlmdCBpbiBob3cgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgb3IgdHJhY2tlZC4gVGhlIGhvbGVzIGxlZnQgYmVoaW5kIGFyZSBhIGJpdCBjb25jZXJuaW5nLiBOZWVkIHRvIGZvbGxvdyB1cCBvbiB0aGlzIGFuZCBzZWUgd2hhdCBpbXBhY3QgdGhpcyBoYXMuXG5cbjUuICBgaW5jbHVkZS9saW51eC9zd2FwLmhgOiBBZ2FpbiwgcmVmYWN0b3JpbmcsIG1vdmluZyBgY3VycmVudF9pc19rc3dhcGRgIHRvIGEgZnVuY3Rpb24uIExlc3MgY3JpdGljYWwgb24gaXRzIG93bi5cblxuNi4gIGBtbS9jb21wYWN0aW9uLmNgOiBJbXBsZW1lbnRhdGlvbiBvZiBgY3VycmVudF9pc19rY29tcGFjdGRgLlxuXG43LiAgYG1tL3Ztc2Nhbi5jYDogSW1wbGVtZW50YXRpb24gb2YgYGN1cnJlbnRfaXNfa3N3YXBkYC5cblxuOC4gIGB0b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oYDogUmVtb3ZpbmcgdGhlIG1hY3JvcyBmb3IgdGhlIGZsYWdzLiBTZWVtcyBjb25zaXN0ZW50IHdpdGggdGhlIG90aGVyIGNoYW5nZXMuXG5cblNvLCB0aGUga2V5IGFyZWFzIG9mIGludGVyZXN0IHNlZW0gdG8gYmUgdGhlIGBYRlNgIGNoYW5nZXMgYW5kIHRoZSByZW1vdmFsIG9mIHRoZSBmbGFncyBgUEZfS0NPTVBBQ1REYCBhbmQgYFBGX0tTV0FQRGAuIEknbSBzdGFydGluZyB0byB0aGluayB0aGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24uIFRoZSByZW1vdmFsIG9mIHRoZSBmbGFncyBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSBmbGFncyBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50LCBvciB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIGNoZWNraW5nIHRob3NlIGZsYWdzIGlzIGJlaW5nIGNoYW5nZWQuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGBjdXJyZW50X2lzX2tzd2FwZGAgYW5kIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAgYXJlIGJlaW5nIGNhbGxlZCwgdG8gdW5kZXJzdGFuZCB0aGUgZG93bnN0cmVhbSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBmaXJlIHVwIGBnaXQgZ3JlcGAgYW5kIGxvb2sgZm9yIHRob3NlIGNhbGxzIGFjcm9zcyB0aGUga2VybmVsIHRvIGRldGVybWluZSB0aGUgZnVsbCBzY29wZS4gQmFzZWQgb24gdGhhdCBpbmZvcm1hdGlvbiwgSSdsbCBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgYXJlYXMgZm9yIGZ1enppbmcgYW5kIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbnMgYW5kIGZvY3VzIHN5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MTo1MC42NTc0NjU5NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5OTI5Mjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdXJyZW50X2lzX2tzd2FwZHxjdXJyZW50X2lzX2tjb21wYWN0ZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYz0zMTg9aTkxNV9nZW1fc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmMtMzI5LVxcdFxcdFxcdFxcdEk5MTVfU0hSSU5LX1VOQk9VTkQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jOjMzMDpcXHRpZiAoc2MtXFx1MDAzZW5yX3NjYW5uZWQgXFx1MDAzYyBzYy1cXHUwMDNlbnJfdG9fc2NhbiBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X2lzX2tzd2FwZCgpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmMtMzMxLVxcdFxcdGludGVsX3dha2VyZWZfdCB3YWtlcmVmO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3Nocmlua2VyLmM9Mjc9c3RhdGljIGJvb2wgY2FuX2Jsb2NrKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fc2hyaW5rZXIuYy0yOS1cXHRyZXR1cm4gKHNjLVxcdTAwM2VnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKSB8fFxcbmRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV9zaHJpbmtlci5jOjMwOlxcdCAgICAgICAoY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNiAoc2MtXFx1MDAzZWdmcF9tYXNrIFxcdTAwMjYgX19HRlBfS1NXQVBEX1JFQ0xBSU0pKTtcXG5kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fc2hyaW5rZXIuYy0zMS19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTEzNzc9c3RhdGljIGJvb2wgY2FuX2Jsb2NrKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTEzODMtXFx0cmV0dXJuIChzYy1cXHUwMDNlZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfHxcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjEzODQ6XFx0ICAgICAgICgoc2MtXFx1MDAzZWdmcF9tYXNrIFxcdTAwMjYgX19HRlBfS1NXQVBEX1JFQ0xBSU0pIFxcdTAwMjZcXHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtMTM4NS19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmM9MTE2Mz1ib29sIHR0bV9ib19zaHJpbmtfYXZvaWRfd2FpdCh2b2lkKVxcbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYy0xMTY0LXtcXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmM6MTE2NTpcXHRyZXR1cm4gIWN1cnJlbnRfaXNfa3N3YXBkKCk7XFxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jLTExNjYtfVxcbi0tXFxuZnMvZjJmcy9pbm9kZS5jPTEwMjE9c3RhdGljIHZvaWQgZjJmc19wb3N0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9mMmZzL2lub2RlLmMtMTA2NS1cXHQvKiBMZXQncyBkbyB0aGlzIGluIHdvcmtxdWV1ZSBvdXQgb2YgdGhlIGRpcmVjdCByZWNsYWltIHBhdGguICovXFxuZnMvZjJmcy9pbm9kZS5jOjEwNjY6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcXG5mcy9mMmZzL2lub2RlLmMtMTA2Ny1cXHRcXHRmMmZzX3JlY29yZF9pbm9kZV9zdGF0ZShzYmksIGlub2RlLVxcdTAwM2VpX2lubywgcmVjb3JkX2JpdHMpO1xcbi0tXFxuZnMvaW5vZGUuYz05MzM9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBpbm9kZV9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbi0tXFxuZnMvaW5vZGUuYy05NzktXFx0XFx0cmVhcCA9IGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGF0YSwgMCwgLTEpO1xcbmZzL2lub2RlLmM6OTgwOlxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbmZzL2lub2RlLmMtOTgxLVxcdFxcdFxcdF9fY291bnRfdm1fZXZlbnRzKEtTV0FQRF9JTk9ERVNURUFMLCByZWFwKTtcXG4tLVxcbmZzL25ldGZzL21pc2MuYz0zMDQ9Ym9vbCBuZXRmc19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbmZzL25ldGZzL21pc2MuYy0zMjUtXFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfcHJpdmF0ZV8yKGZvbGlvKSkpIHsgLyogW0RFUFJFQ0FURURdICovXFxuZnMvbmV0ZnMvbWlzYy5jOjMyNjpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCAhKGdmcCBcXHUwMDI2IF9fR0ZQX0ZTKSlcXG5mcy9uZXRmcy9taXNjLmMtMzI3LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL25mcy9maWxlLmM9NTEyPXN0YXRpYyBib29sIG5mc19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbmZzL25mcy9maWxlLmMtNTE4LVxcdFxcdGlmICgoY3VycmVudF9nZnBfY29udGV4dChnZnApIFxcdTAwMjYgR0ZQX0tFUk5FTCkgIT0gR0ZQX0tFUk5FTCB8fFxcbmZzL25mcy9maWxlLmM6NTE5OlxcdFxcdCAgICBjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkpXFxuZnMvbmZzL2ZpbGUuYy01MjAtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvbmZzL2ZzY2FjaGUuaD0xMDI9c3RhdGljIGlubGluZSBib29sIG5mc19mc2NhY2hlX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbmZzL2ZzY2FjaGUuaC0xMDQtXFx0aWYgKGZvbGlvX3Rlc3RfcHJpdmF0ZV8yKGZvbGlvKSkgeyAvKiBbREVQUkVDQVRFRF0gKi9cXG5mcy9uZnMvZnNjYWNoZS5oOjEwNTpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSB8fCAhKGdmcCBcXHUwMDI2IF9fR0ZQX0ZTKSlcXG5mcy9uZnMvZnNjYWNoZS5oLTEwNi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMDA9Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwMS1cXHRcXHRcXHRcXHRcXHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDI6Ym9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMDMtZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9ydW4oaW50IG5pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMTI9c3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTExOC1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMTk6c3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTIwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTMzNT1leHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6MzM2OmJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzM3LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTMxOTQ9c3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMjU4LVxcbm1tL2NvbXBhY3Rpb24uYzozMjU5OmJvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG5tbS9jb21wYWN0aW9uLmMtMzI2MC17XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzI2Mi19XFxubW0vY29tcGFjdGlvbi5jOjMyNjM6RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rY29tcGFjdGQpO1xcbm1tL2NvbXBhY3Rpb24uYy0zMjY0LVxcbi0tXFxubW0vdm1zY2FuLmM9NDY3PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3Mi1cXG5tbS92bXNjYW4uYzo0NzM6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNDc0LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vdm1zY2FuLmM9NTMxPXZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pXFxuLS1cXG5tbS92bXNjYW4uYy01NDEtXFx0ICovXFxubW0vdm1zY2FuLmM6NTQyOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTU0My1cXHQgICAgY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoUEZfVVNFUl9XT1JLRVJ8UEZfS1RIUkVBRCkpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNzg9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTIxMC1cXHRcXHRcXHQvKiBDYXNlIDEgYWJvdmUgKi9cXG5tbS92bXNjYW4uYzoxMjExOlxcdFxcdFxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtMTIxMi1cXHRcXHRcXHQgICAgZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vdm1zY2FuLmM9MTg0Nz1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE4NTItXFxubW0vdm1zY2FuLmM6MTg1MzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy0xODU0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5MDY9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnNldF9tbV93YWxrKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZm9yY2VfYWxsb2MpXFxuLS1cXG5tbS92bXNjYW4uYy0zOTA5LVxcbm1tL3Ztc2Nhbi5jOjM5MTA6XFx0aWYgKHBnZGF0IFxcdTAwMjZcXHUwMDI2IGN1cnJlbnRfaXNfa3N3YXBkKCkpIHtcXG5tbS92bXNjYW4uYy0zOTExLVxcdFxcdFZNX1dBUk5fT05fT05DRSh3YWxrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MTQtXFx0fSBlbHNlIGlmICghd2FsayBcXHUwMDI2XFx1MDAyNiBmb3JjZV9hbGxvYykge1xcbm1tL3Ztc2Nhbi5jOjM5MTU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbm1tL3Ztc2Nhbi5jLTM5MTYtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTI2PXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM5MzQtXFxubW0vdm1zY2FuLmM6MzkzNTpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtMzkzNi1cXHRcXHRrZnJlZSh3YWxrKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQyOTA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyOTUtXFxubW0vdm1zY2FuLmM6NDI5NjpcXHRWTV9XQVJOX09OX09OQ0UoIWN1cnJlbnRfaXNfa3N3YXBkKCkpO1xcbm1tL3Ztc2Nhbi5jLTQyOTctXFxuLS1cXG5tbS92bXNjYW4uYz01MTAyPXN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTEzLVxcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXFxubW0vdm1zY2FuLmM6NTExNDpcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTUxMTUtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9NTMxND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTMzNi1cXG5tbS92bXNjYW4uYzo1MzM3OlxcdGlmIChjdXJyZW50X2lzX2tzd2FwZCgpKVxcbm1tL3Ztc2Nhbi5jLTUzMzgtXFx0XFx0c2MtXFx1MDAzZW5yX3JlY2xhaW1lZCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MzQ0LVxcbm1tL3Ztc2Nhbi5jOjUzNDU6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpXFxubW0vdm1zY2FuLmMtNTM0Ni1cXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwNjg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEwMi1cXHQgKi9cXG5tbS92bXNjYW4uYzo2MTAzOlxcdHByb3BvcnRpb25hbF9yZWNsYWltID0gKCFjZ3JvdXBfcmVjbGFpbShzYykgXFx1MDAyNlxcdTAwMjYgIWN1cnJlbnRfaXNfa3N3YXBkKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy02MTA0LVxcdFxcdFxcdFxcdHNjLVxcdTAwM2Vwcmlvcml0eSA9PSBERUZfUFJJT1JJVFkpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjI1OT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02Mjc2LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjYyNzc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW1lbWNnX2Z1bGxfd2FsaylcXG5tbS92bXNjYW4uYy02Mjc4LVxcdFxcdHBhcnRpYWwgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmM9NjMzOD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYzNzYtXFxubW0vdm1zY2FuLmM6NjM3NzpcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSkge1xcbm1tL3Ztc2Nhbi5jLTYzNzgtXFx0XFx0LypcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY0MTktXFxubW0vdm1zY2FuLmM6NjQyMDpcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYy02NDIxLVxcdFxcdFxcdHNldF9iaXQoTFJVVkVDX05PREVfQ09OR0VTVEVELCBcXHUwMDI2dGFyZ2V0X2xydXZlYy1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxubW0vdm1zY2FuLmMtNjQyOS1cXHQgKi9cXG5tbS92bXNjYW4uYzo2NDMwOlxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNiBjdXJyZW50X21heV90aHJvdHRsZSgpIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNjQzMS1cXHQgICAgIXNjLVxcdTAwM2VoaWJlcm5hdGlvbl9tb2RlIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS92bXNjYW4uYz02NDg1PXN0YXRpYyB2b2lkIGNvbnNpZGVyX3JlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02NTA2LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY1MDc6XFx0aWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY2dyb3VwX3JlY2xhaW0oc2MpKVxcbm1tL3Ztc2Nhbi5jLTY1MDgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NzUyMz1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbi0tXFxubW0vdm1zY2FuLmMtNzU5Ni1cXG5tbS92bXNjYW4uYzo3NTk3OmJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG5tbS92bXNjYW4uYy03NTk4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MDAtfVxcbm1tL3Ztc2Nhbi5jOjc2MDE6RVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rc3dhcGQpO1xcbm1tL3Ztc2Nhbi5jLTc2MDItXFxuLS1cXG5tbS92bXNjYW4uYz03NjY4PXZvaWQga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbi0tXFxubW0vdm1zY2FuLmMtNzY3MS1cXHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxcbm1tL3Ztc2Nhbi5jOjc2NzI6XFx0XFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cXG5tbS92bXNjYW4uYy03NjczLVxcdFxcdFxcdEtTV0FQRF9DTEVBUl9IT1BFTEVTU19LU1dBUEQgOiBLU1dBUERfQ0xFQVJfSE9QRUxFU1NfRElSRUNUKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTE6NTMuMDU2NzYzNjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzQ3NjUxMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXZvbHV0aW9uIG9mIEtlcm5lbCBUaHJlYWQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgaWRlbnRpZnlpbmcgdGhlIGtzd2FwZCBhbmQga2NvbXBhY3RkIHByb2Nlc3NlcyBub3cuIEkgcmVjYWxsIHRoZXkgdXNlZCB0byB1c2UgYFBGX0tTV0FQRGAgYW5kIGBQRl9LQ09NUEFDVERgIHByb2Nlc3MgZmxhZ3Mg4oCTIHRoYXQgd2FzIHRoZSBvbGQgd2F5LiBOb3csIHRoZSBjaGVja3MgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkYCBhbmQgYGt0aHJlYWRfZnVuYyhjdXJyZW50KSA9PSBrY29tcGFjdGRgLiBJbnRlcmVzdGluZy4gVGhpcyBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyB0aGVzZSBrZXJuZWwgdGhyZWFkcyBhcmUgYmVpbmcgY2F0ZWdvcml6ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbmV3IG1ldGhvZCwgc3BlY2lmaWNhbGx5LCB3aGF0IGBrdGhyZWFkX2Z1bmNgIGlzIGFjdHVhbGx5ICpkb2luZyouIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBrdGhyZWFkX2Z1bmNgLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIHJldmVhbHMuIFRoaXMgY2hhbmdlIGxpa2VseSBoYXMgaW1wb3J0YW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIG1hbmFnZSBhbmQgbW9uaXRvciB0aGVzZSBjcnVjaWFsIG1lbW9yeSBtYW5hZ2VtZW50IHRocmVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjA2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTE6NTcuNDA0NDE3ODQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTExNDY4OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3RocmVhZF9mdW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYz01OTY9c3RhdGljIHN0cnVjdCBzaW1wbGVfd29ya19xdWV1ZSAqZ2V0X2N1cnJlbnRfdGhyZWFkX3dvcmtfcXVldWUodm9pZClcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYy02MDYtXFxuZHJpdmVycy9tZC9kbS12ZG8vZnVubmVsLXdvcmtxdWV1ZS5jOjYwNzpcXHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpICE9IHdvcmtfcXVldWVfcnVubmVyKVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYy02MDgtXFx0XFx0LyogTm90IGEgVkRPIHdvcmsgcXVldWUgdGhyZWFkLiAqL1xcbi0tXFxuZnMvbmZzZC9uZnNzdmMuYz01OTU9c3RydWN0IHN2Y19ycXN0ICpuZnNkX2N1cnJlbnRfcnFzdCh2b2lkKVxcbmZzL25mc2QvbmZzc3ZjLmMtNTk2LXtcXG5mcy9uZnNkL25mc3N2Yy5jOjU5NzpcXHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpID09IG5mc2QpXFxuZnMvbmZzZC9uZnNzdmMuYy01OTgtXFx0XFx0cmV0dXJuIGt0aHJlYWRfZGF0YShjdXJyZW50KTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3RocmVhZC5oPTExMj1ib29sIGt0aHJlYWRfZnJlZXphYmxlX3Nob3VsZF9zdG9wKGJvb2wgKndhc19mcm96ZW4pO1xcbmluY2x1ZGUvbGludXgva3RocmVhZC5oOjExMzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcXG5pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaC0xMTQtdm9pZCAqa3RocmVhZF9kYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqayk7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcCk7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTIxMS0vKipcXG5rZXJuZWwva3RocmVhZC5jOjIxMjogKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXFxua2VybmVsL2t0aHJlYWQuYy0yMTMtICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxcbi0tXFxua2VybmVsL2t0aHJlYWQuYy0yMTYtICovXFxua2VybmVsL2t0aHJlYWQuYzoyMTc6dm9pZCAqa3RocmVhZF9mdW5jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG5rZXJuZWwva3RocmVhZC5jLTIxOC17XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTIyMy19XFxua2VybmVsL2t0aHJlYWQuYzoyMjQ6RVhQT1JUX1NZTUJPTF9HUEwoa3RocmVhZF9mdW5jKTtcXG5rZXJuZWwva3RocmVhZC5jLTIyNS1cXG4tLVxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaD0xMTg9c3RhdGljIGlubGluZSB2b2lkIG5iY29uX2t0aHJlYWRfd2FrZShzdHJ1Y3QgY29uc29sZSAqY29uKVxcbi0tXFxua2VybmVsL3ByaW50ay9pbnRlcm5hbC5oLTEyOC1cXHQgKlxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaDoxMjk6XFx0ICogVGhpcyBwYWlycyB3aXRoIG5iY29uX2t0aHJlYWRfZnVuYzpBLlxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaC0xMzAtXFx0ICovXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTE4MD1zdGF0aWMgYm9vbCBuYmNvbl9rdGhyZWFkX3Nob3VsZF93YWtldXAoc3RydWN0IGNvbnNvbGUgKmNvbiwgc3RydWN0IG5iY29uX2NvbnRleHQgKmN0eHQpXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNC0vKipcXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTIxNTogKiBuYmNvbl9rdGhyZWFkX2Z1bmMgLSBUaGUgcHJpbnRlciB0aHJlYWQgZnVuY3Rpb25cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNi0gKiBAX19jb25zb2xlOlxcdENvbnNvbGUgdG8gb3BlcmF0ZSBvblxcbi0tXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyMTktICovXFxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEyMjA6c3RhdGljIGludCBuYmNvbl9rdGhyZWFkX2Z1bmModm9pZCAqX19jb25zb2xlKVxcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjIxLXtcXG4tLVxcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjQ0LVxcdFxcdFxcdCAgIG5iY29uX2t0aHJlYWRfc2hvdWxkX3dha2V1cChjb24sIGN0eHQpLFxcbmtlcm5lbC9wcmludGsvbmJjb24uYzoxMjQ1OlxcdFxcdFxcdCAgIFRBU0tfSU5URVJSVVBUSUJMRSk7IC8qIExNTShuYmNvbl9rdGhyZWFkX2Z1bmM6QSkgKi9cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTI0Ni1cXG4tLVxcbmtlcm5lbC9wcmludGsvbmJjb24uYz0xMjkzPXN0YXRpYyBpbmxpbmUgYm9vbCByY3V3YWl0X2hhc19zbGVlcGVyKHN0cnVjdCByY3V3YWl0ICp3KVxcbi0tXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzMDMtXFx0ICpcXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTMwNDpcXHQgKiBUaGlzIHBhaXJzIHdpdGggbmJjb25fa3RocmVhZF9mdW5jOkEuXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzMDUtXFx0ICovXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTM3NT1ib29sIG5iY29uX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBjb25zb2xlICpjb24pXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTM4My1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTM4NDpcXHRrdCA9IGt0aHJlYWRfcnVuKG5iY29uX2t0aHJlYWRfZnVuYywgY29uLCBcXFwicHIvJXMlZFxcXCIsIGNvbi1cXHUwMDNlbmFtZSwgY29uLVxcdTAwM2VpbmRleCk7XFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzODUtXFx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzY1Nj1zdGF0aWMgYm9vbCBsZWdhY3lfa3RocmVhZF9zaG91bGRfd2FrZXVwKHZvaWQpXFxuLS1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTM3MDMtXFxua2VybmVsL3ByaW50ay9wcmludGsuYzozNzA0OnN0YXRpYyBpbnQgbGVnYWN5X2t0aHJlYWRfZnVuYyh2b2lkICp1bnVzZWQpXFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzA1LXtcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzcyOD1zdGF0aWMgYm9vbCBsZWdhY3lfa3RocmVhZF9jcmVhdGUodm9pZClcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzczMy1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jOjM3MzQ6XFx0a3QgPSBrdGhyZWFkX3J1bihsZWdhY3lfa3RocmVhZF9mdW5jLCBOVUxMLCBcXFwicHIvbGVnYWN5XFxcIik7XFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzM1LVxcdGlmIChXQVJOX09OKElTX0VSUihrdCkpKSB7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzI1OT1ib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXFxubW0vY29tcGFjdGlvbi5jLTMyNjAte1xcbm1tL2NvbXBhY3Rpb24uYzozMjYxOlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xcbm1tL2NvbXBhY3Rpb24uYy0zMjYyLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTc0PWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTMxNzUte1xcbm1tL2todWdlcGFnZWQuYzozMTc2OlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2h1Z2VwYWdlZDtcXG5tbS9raHVnZXBhZ2VkLmMtMzE3Ny19XFxuLS1cXG5tbS92bXNjYW4uYz03NTk3PWJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG5tbS92bXNjYW4uYy03NTk4LXtcXG5tbS92bXNjYW4uYzo3NTk5OlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xcbm1tL3Ztc2Nhbi5jLTc2MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MTo1OS4wNTU1NzIwMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODE5OTE4NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgVGhyZWFkIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBrZXJuZWwgdGhyZWFkcyBhcmUgYmVoYXZpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGtlcm5lbC9rdGhyZWFkLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBrZXJuZWwgdGhyZWFkIG1hbmFnZW1lbnQgc2hvdWxkIHJlc2lkZSwgZXNwZWNpYWxseSBhcm91bmQgdGhlIGBrdGhyZWFkX2Z1bmNgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHRocmVhZCwgc28gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgaG93IGl0J3MgaW52b2tlZCBpcyBrZXkuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBhbmQgZnJvbSBga3RocmVhZF9mdW5jYC4gVGhpcyBtZWFucyBleGFtaW5pbmcgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHRoZSBga3RocmVhZGAgc3RydWN0LCBhbmQgaG93IHRoZSBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggaXQuIFdlJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVudXN1YWwgYmVoYXZpb3IgaW4gdGhlIHNldHVwIGFuZCB0ZWFyZG93biBvZiB0aGVzZSB0aHJlYWRzLiBJIGV4cGVjdCB0byBiZSBkaWdnaW5nIGludG8gdGhlIHNjaGVkdWxpbmcgcG9saWNpZXMsIHNpZ25hbHMsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgZW1wbG95ZWQsIHNpbmNlIHRoZXNlIGFyZSBhbHdheXMgYXJlYXMgb2YgcG90ZW50aWFsIGNvbXBsZXhpdHkgYW5kIGJ1Z3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByZWVtcHRpb24gbW9kZWwgaGVyZSwgdG8gYmUgc3VyZSBJIGNhbiB2aXN1YWxpemUgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2hlbiB0aGUgdGhyZWFkIGlzIGluIGFuIGFjdGl2ZSBvciB3YWl0aW5nIHN0YXRlLiBUaGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBleHBlY3QgdG8gZm9sbG93IHRoaXMgdHJhY2UgZnJvbSB0aGUga3RocmVhZCBmdW5jdGlvbiB0aHJvdWdoIHRoZSB2YXJpb3VzIHN0YWdlcyB0aGF0IHRoZSBrdGhyZWFkIGhhcyB1bnRpbCBpdHMgY29tcGxldGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjowMi44NzU0OTM1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwva3RocmVhZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXG4gMjExOlxcdC8qKlxcbiAyMTI6XFx0ICoga3RocmVhZF9mdW5jIC0gcmV0dXJuIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgb24ga3RocmVhZCBjcmVhdGlvblxcbiAyMTM6XFx0ICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxcbiAyMTQ6XFx0ICpcXG4gMjE1OlxcdCAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFzayBpcyBub3QgYSBrdGhyZWFkLlxcbiAyMTY6XFx0ICovXFxuIDIxNzpcXHR2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbiAyMTg6XFx0e1xcbiAyMTk6XFx0XFx0c3RydWN0IGt0aHJlYWQgKmt0aHJlYWQgPSB0c2tfaXNfa3RocmVhZCh0YXNrKTtcXG4gMjIwOlxcdFxcdGlmIChrdGhyZWFkKVxcbiAyMjE6XFx0XFx0XFx0cmV0dXJuIGt0aHJlYWQtXFx1MDAzZXRocmVhZGZuO1xcbiAyMjI6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIyMzpcXHR9XFxuIDIyNDpcXHRFWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2Z1bmMpO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHQvKipcXG4gMjI3OlxcdCAqIGt0aHJlYWRfZGF0YSAtIHJldHVybiBkYXRhIHZhbHVlIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXFxuIDIyODpcXHQgKiBAdGFzazoga3RocmVhZCB0YXNrIGluIHF1ZXN0aW9uXFxuIDIyOTpcXHQgKlxcbiAyMzA6XFx0ICogUmV0dXJuIHRoZSBkYXRhIHZhbHVlIHNwZWNpZmllZCB3aGVuIGt0aHJlYWQgQHRhc2sgd2FzIGNyZWF0ZWQuXFxuIDIzMTpcXHQgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGUgdmFsaWRpdHkgb2YgQHRhc2sgd2hlblxcbiAyMzI6XFx0ICogY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxcbiAyMzM6XFx0ICovXFxuIDIzNDpcXHR2b2lkICprdGhyZWFkX2RhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjowMi44NzU2MjAxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4NzQ5OTcxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIFBGX0tTV0FQRCBhbmQgSXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgd2VyZSByZW1vdmVkIGJlY2F1c2Ugd2UncmUgbm93IHVzaW5nIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIGluc3RlYWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBCdXQgdGhpcyBjaGFuZ2UgcmlwcGxlcyBvdXQgZnVydGhlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cblRoZSBmaXJzdCBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gSXQgd2VudCBmcm9tIGNoZWNraW5nIGAoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKSkgPT0gUEZfTUVNQUxMT0NgIHRvIHNpbXBseSBgKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKWAuIFRoZSBvbGQgY2hlY2sgc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGV4Y2x1ZGUga3N3YXBkIGZyb20gYSBtZW1vcnkgYWxsb2NhdGlvbiBjaGVjay4gV2h5P1xuXG5JIHJlbWVtYmVyIHRoYXQgYGtzd2FwZGAgc2V0cyBgUEZfTUVNQUxMT0NgICggYHRzay1cdTAwM2VmbGFncyB8PSBQRl9NRU1BTExPQztgKSB3aGljaCBpcyBjbGVhciBpbiBgbW0vdm1zY2FuLmNgLiBCdXQgYFBGX0tTV0FQRGAgd2FzIGFsc28gc2V0IG9uIGtzd2FwZCBwcmV2aW91c2x5IGFuZCBpdCBzZWVtcyB0byBoYXZlIGJlZW4gcmVtb3ZlZCB0b28uIFRoaXMgaXMgdGhlIGNydXggb2YgaXQuIFRoZSBjb2RlIGluIGBpb21hcF93cml0ZXBhZ2VzYCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IHdyaXRlYmFjayBmcm9tIGEgcmVjbGFpbSBjb250ZXh0IChsaWtlIGtzd2FwZCkgKnNob3VsZCBuZXZlciogaGFwcGVuIGV4Y2VwdCBpbiBhIFZNIHJlZ3Jlc3Npb24uIFNvLCB0aGUgb3JpZ2luYWwgY2hlY2sgd2FzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IGlmIHRoZSBwcm9jZXNzIGhhZCBgUEZfS1NXQVBEYCBzZXQsIHRoYXQgdGhlIGBXQVJOX09OX09OQ0VgIGluIGBpb21hcF93cml0ZXBhZ2VzYCB3b3VsZG4ndCBiZSB0cmlnZ2VyZWQsIGJlY2F1c2Uga3N3YXBkIHdvdWxkbid0IHRyaWdnZXIgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGNvZGUgcGF0aC5cblxuQnV0IG5vdywgc2luY2Uga3N3YXBkIG9ubHkgaGFzIGBQRl9NRU1BTExPQ2AsIHRoZSBjaGVjayBpbiBgaW9tYXBfd3JpdGVwYWdlc2AgaXMgZ29pbmcgdG8gdHJpZ2dlciBpZiBrc3dhcGQgKmRvZXMqIHJ1biB0aGF0IGNvZGUuIEJ1dCwgaWYga3N3YXBkIGlzIGNhbGxpbmcgdGhhdCBjb2RlLCBpdCAqc2hvdWxkbid0KiBiZS4gVGhpcyBzdWdnZXN0cyB0aGF0IHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpcyBwb3RlbnRpYWxseSBicm9rZW4uIFdlIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGtzd2FwZCAqY2FuKiBlbnRlciBgaW9tYXBfd3JpdGVwYWdlc2AsIG9yIGlmIHNvbWV0aGluZyBlbHNlIGlzIGdvaW5nIG9uLiBJdCByZWFsbHkgbmVlZHMgdG8gYmUgZW5zdXJlZCB0aGF0IGtzd2FwZCBuZXZlciwgZXZlciwgY2FsbHMgdGhhdCBmdW5jdGlvbi5cblxuVGhlIFhGUyBidHJlZSBzcGxpdCB3b3JrZXIgYWxzbyBwcmV2aW91c2x5IHNldCBgUEZfTUVNQUxMT0MgfCBQRl9LU1dBUERgIGluIGBuZXdfcGZsYWdzYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb21taXQgaGlzdG9yeSBhbmQgY29tbWVudHMgb24gdGhhdCBjb2RlIHRvIHVuZGVyc3RhbmQgKndoeSogYFBGX0tTV0FQRGAgd2FzIGluY2x1ZGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBtYXkgZ2l2ZSBzb21lIGluc2lnaHQgaW50byB0aGUgcHJldmlvdXMgbG9naWMsIGJlZm9yZSB0aGUgYGt0aHJlYWRfZnVuYyhjdXJyZW50KWAgcmVmYWN0b3JpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzUwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6MTEuNzUwNjIwMTMxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5OTA6XFx0XFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHQqY3VyO1xcbjI5OTE6XFx0XFx0aW50XFx0XFx0XFx0bGV2ZWw7XFxuMjk5MjpcXHRcXHR1bmlvbiB4ZnNfYnRyZWVfcHRyXFx0KnB0cnA7XFxuMjk5MzpcXHRcXHR1bmlvbiB4ZnNfYnRyZWVfa2V5XFx0KmtleTtcXG4yOTk0OlxcdFxcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXFx0KipjdXJwO1xcbjI5OTU6XFx0XFx0aW50XFx0XFx0XFx0KnN0YXQ7XFx0XFx0Lyogc3VjY2Vzcy9mYWlsdXJlICovXFxuMjk5NjpcXHRcXHRpbnRcXHRcXHRcXHRyZXN1bHQ7XFxuMjk5NzpcXHRcXHRzdHJ1Y3QgY29tcGxldGlvblxcdCpkb25lO1xcbjI5OTg6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0XFx0d29yaztcXG4yOTk5OlxcdH07XFxuMzAwMDpcXHRcXG4zMDAxOlxcdC8qXFxuMzAwMjpcXHQgKiBTdGFjayBzd2l0Y2hpbmcgaW50ZXJmYWNlcyBmb3IgYWxsb2NhdGlvblxcbjMwMDM6XFx0ICovXFxuMzAwNDpcXHRzdGF0aWMgdm9pZFxcbjMwMDU6XFx0eGZzX2J0cmVlX3NwbGl0X3dvcmtlcihcXG4zMDA2OlxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdCp3b3JrKVxcbjMwMDc6XFx0e1xcbjMwMDg6XFx0XFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzXFx0KmFyZ3MgPSBjb250YWluZXJfb2Yod29yayxcXG4zMDA5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncywgd29yayk7XFxuMzAxMDpcXHRcXHR4ZnNfdHJhbnNfc2V0X2NvbnRleHQoYXJncy1cXHUwMDNlY3VyLVxcdTAwM2ViY190cCk7XFxuMzAxMTpcXHRcXG4zMDEyOlxcdFxcdGFyZ3MtXFx1MDAzZXJlc3VsdCA9IF9feGZzX2J0cmVlX3NwbGl0KGFyZ3MtXFx1MDAzZWN1ciwgYXJncy1cXHUwMDNlbGV2ZWwsIGFyZ3MtXFx1MDAzZXB0cnAsXFxuMzAxMzpcXHRcXHRcXHRcXHRcXHRcXHQgYXJncy1cXHUwMDNla2V5LCBhcmdzLVxcdTAwM2VjdXJwLCBhcmdzLVxcdTAwM2VzdGF0KTtcXG4zMDE0OlxcdFxcbjMwMTU6XFx0XFx0eGZzX3RyYW5zX2NsZWFyX2NvbnRleHQoYXJncy1cXHUwMDNlY3VyLVxcdTAwM2ViY190cCk7XFxuMzAxNjpcXHRcXG4zMDE3OlxcdFxcdC8qXFxuMzAxODpcXHRcXHQgKiBEbyBub3QgYWNjZXNzIGFyZ3MgYWZ0ZXIgY29tcGxldGUoKSBoYXMgcnVuIGhlcmUuIFdlIGRvbid0IG93biBhcmdzXFxuMzAxOTpcXHRcXHQgKiBhbmQgdGhlIG93bmVyIG1heSBydW4gYW5kIGZyZWUgYXJncyBiZWZvcmUgd2UgcmV0dXJuIGhlcmUuXFxuMzAyMDpcXHRcXHQgKi9cXG4zMDIxOlxcdFxcdGNvbXBsZXRlKGFyZ3MtXFx1MDAzZWRvbmUpO1xcbjMwMjI6XFx0fVxcbjMwMjM6XFx0XFxuMzAyNDpcXHQvKlxcbjMwMjU6XFx0ICogQk1CVCBzcGxpdCByZXF1ZXN0cyBvZnRlbiBjb21lIGluIHdpdGggbGl0dGxlIHN0YWNrIHRvIHdvcmsgb24gc28gd2UgcHVzaFxcbjMwMjY6XFx0ICogdGhlbSBvZmYgdG8gYSB3b3JrZXIgdGhyZWFkIHNvIHRoZXJlIGlzIGxvdHMgb2Ygc3RhY2sgdG8gdXNlLiBGb3IgdGhlIG90aGVyXFxuMzAyNzpcXHQgKiBidHJlZSB0eXBlcywganVzdCBjYWxsIGRpcmVjdGx5IHRvIGF2b2lkIHRoZSBjb250ZXh0IHN3aXRjaCBvdmVyaGVhZCBoZXJlLlxcbjMwMjg6XFx0ICpcXG4zMDI5OlxcdCAqIENhcmUgbXVzdCBiZSB0YWtlbiBoZXJlIC0gdGhlIHdvcmsgcXVldWUgcmVzY3VlciB0aHJlYWQgaW50cm9kdWNlcyBwb3RlbnRpYWxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6MTEuNzUxMDIyNTQxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzQ0MjcyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYHhmc19idHJlZV9zcGxpdGAqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZSByZW1haW5kZXIgb2YgdGhlIGB4ZnNfYnRyZWVfc3BsaXRgIGZ1bmN0aW9uLiBJIGFscmVhZHkgdW5kZXJzdGFuZCB0aGUgaGlnaC1sZXZlbCBjb25jZXB0OiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIG1lY2hhbmljcyBvZiBob3cgd2UgZGl2aWRlIGEgQi10cmVlIG5vZGUgd2hlbiBpdCBvdmVyZmxvd3MuIEknbSBhc3N1bWluZyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBzcGxpdCBwb2ludCBhbmQgcG90ZW50aWFsbHkgc29tZSBpbml0aWFsIG5vZGUgYWRqdXN0bWVudHMuIE5vdywgSSdtIGFudGljaXBhdGluZyB0aGUgbml0dHktZ3JpdHR5OiBob3cgdGhlIGRhdGEgYW5kIG1ldGFkYXRhIGFyZSBhY3R1YWxseSBtb3ZlZCwgaG93IHBvaW50ZXJzIGFyZSB1cGRhdGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgd2UgbWFpbnRhaW4gdGhlIEItdHJlZSdzIGNydWNpYWwgcHJvcGVydGllcyBhZnRlciB0aGlzIHNwbGl0LiBJJ20ga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIGR1cmluZyB0aGUgc3BsaXQg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSB0aGUgcmVhbCBlbGVnYW5jZSAob3IgdWdsaW5lc3MhKSBvZiB0aGVzZSBhbGdvcml0aG1zIHJlc2lkZXMuIEknbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHRoaW5ncyBsaWtlIGpvdXJuYWwgbG9nIHN0cnVjdHVyZXMgaWYgYW55LCBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIG9wdGltaXphdGlvbnMgaW1wbGVtZW50ZWQgdG8gbWluaW1pemUgSS9PIG9yIGxvY2tpbmcgb3ZlcmhlYWQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ3MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6MTYuMDI1NDUzMTQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMzAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwMzA6XFx0ICogQUdGIFxcdTAwM2NcXHUwMDNlIHdvcmtlciBxdWV1ZSBkZWFkbG9ja3MgaWYgdGhlIEJNQlQgYmxvY2sgYWxsb2NhdGlvbiBoYXMgdG8gbG9jayBuZXdcXG4zMDMxOlxcdCAqIEFHRnMgdG8gYWxsb2NhdGUgYmxvY2tzLiBBIHRhc2sgYmVpbmcgcnVuIGJ5IHRoZSByZXNjdWVyIGNvdWxkIGF0dGVtcHQgdG9cXG4zMDMyOlxcdCAqIGxvY2sgYW4gQUdGIHRoYXQgaXMgYWxyZWFkeSBsb2NrZWQgYnkgYSB0YXNrIHF1ZXVlZCB0byBydW4gYnkgdGhlIHJlc2N1ZXIsXFxuMzAzMzpcXHQgKiByZXN1bHRpbmcgaW4gYW4gQUJCQSBkZWFkbG9jayBhcyB0aGUgcmVzY3VlciBjYW5ub3QgcnVuIHRoZSBsb2NrIGhvbGRlciB0b1xcbjMwMzQ6XFx0ICogcmVsZWFzZSBpdCB1bnRpbCB0aGUgY3VycmVudCB0aHJlYWQgaXQgaXMgcnVubmluZyBnYWlucyB0aGUgbG9jay5cXG4zMDM1OlxcdCAqXFxuMzAzNjpcXHQgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB3ZSBvbmx5IGV2ZXIgcXVldWUgQk1CVCBzcGxpdHMgdGhhdCBkb24ndCBoYXZlIGFuIEFHRlxcbjMwMzc6XFx0ICogYWxyZWFkeSBsb2NrZWQgdG8gYWxsb2NhdGUgZnJvbS4gVGhlIG9ubHkgcGxhY2UgdGhhdCBkb2Vzbid0IGhvbGQgYW4gQUdGXFxuMzAzODpcXHQgKiBsb2NrZWQgaXMgdW53cml0dGVuIGV4dGVudCBjb252ZXJzaW9uIGF0IElPIGNvbXBsZXRpb24sIGJ1dCB0aGF0IGhhcyBhbHJlYWR5XFxuMzAzOTpcXHQgKiBiZWVuIG9mZmxvYWRlZCB0byBhIHdvcmtlciB0aHJlYWQgYW5kIGhlbmNlIGhhcyBubyBzdGFjayBjb25zdW1wdGlvbiBpc3N1ZXNcXG4zMDQwOlxcdCAqIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQuXFxuMzA0MTpcXHQgKi9cXG4zMDQyOlxcdFNUQVRJQyBpbnRcXHRcXHRcXHRcXHRcXHQvKiBlcnJvciAqL1xcbjMwNDM6XFx0eGZzX2J0cmVlX3NwbGl0KFxcbjMwNDQ6XFx0XFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHQqY3VyLFxcbjMwNDU6XFx0XFx0aW50XFx0XFx0XFx0bGV2ZWwsXFxuMzA0NjpcXHRcXHR1bmlvbiB4ZnNfYnRyZWVfcHRyXFx0KnB0cnAsXFxuMzA0NzpcXHRcXHR1bmlvbiB4ZnNfYnRyZWVfa2V5XFx0KmtleSxcXG4zMDQ4OlxcdFxcdHN0cnVjdCB4ZnNfYnRyZWVfY3VyXFx0KipjdXJwLFxcbjMwNDk6XFx0XFx0aW50XFx0XFx0XFx0KnN0YXQpXFx0XFx0Lyogc3VjY2Vzcy9mYWlsdXJlICovXFxuMzA1MDpcXHR7XFxuMzA1MTpcXHRcXHRzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3NcXHRhcmdzO1xcbjMwNTI6XFx0XFx0REVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7XFxuMzA1MzpcXHRcXG4zMDU0OlxcdFxcdGlmICgheGZzX2J0cmVlX2lzX2JtYXAoY3VyLVxcdTAwM2ViY19vcHMpIHx8XFxuMzA1NTpcXHRcXHQgICAgY3VyLVxcdTAwM2ViY190cC1cXHUwMDNldF9oaWdoZXN0X2Fnbm8gPT0gTlVMTEFHTlVNQkVSKVxcbjMwNTY6XFx0XFx0XFx0cmV0dXJuIF9feGZzX2J0cmVlX3NwbGl0KGN1ciwgbGV2ZWwsIHB0cnAsIGtleSwgY3VycCwgc3RhdCk7XFxuMzA1NzpcXHRcXG4zMDU4OlxcdFxcdGFyZ3MuY3VyID0gY3VyO1xcbjMwNTk6XFx0XFx0YXJncy5sZXZlbCA9IGxldmVsO1xcbjMwNjA6XFx0XFx0YXJncy5wdHJwID0gcHRycDtcXG4zMDYxOlxcdFxcdGFyZ3Mua2V5ID0ga2V5O1xcbjMwNjI6XFx0XFx0YXJncy5jdXJwID0gY3VycDtcXG4zMDYzOlxcdFxcdGFyZ3Muc3RhdCA9IHN0YXQ7XFxuMzA2NDpcXHRcXHRhcmdzLmRvbmUgPSBcXHUwMDI2ZG9uZTtcXG4zMDY1OlxcdFxcbjMwNjY6XFx0XFx0SU5JVF9XT1JLX09OU1RBQ0soXFx1MDAyNmFyZ3Mud29yaywgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcik7XFxuMzA2NzpcXHRcXHRxdWV1ZV93b3JrKHhmc19hbGxvY193cSwgXFx1MDAyNmFyZ3Mud29yayk7XFxuMzA2ODpcXHRcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZkb25lKTtcXG4zMDY5OlxcdFxcdGRlc3Ryb3lfd29ya19vbl9zdGFjayhcXHUwMDI2YXJncy53b3JrKTtcXG4zMDcwOlxcdFxcdHJldHVybiBhcmdzLnJlc3VsdDtcXG4zMDcxOlxcdH1cXG4zMDcyOlxcdCNlbHNlXFxuMzA3MzpcXHQjZGVmaW5lIHhmc19idHJlZV9zcGxpdFxcdF9feGZzX2J0cmVlX3NwbGl0XFxuMzA3NDpcXHQjZW5kaWYgLyogX19LRVJORUxfXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjoxNi4wMjU2NjIwMzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY0MDM2Njg2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBLZXJuZWwgUmVmYWN0b3JpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY29kZSBjaGFuZ2UsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBYRlMgaW50ZXJhY3RzIHdpdGgga3N3YXBkIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBjb250ZXh0cy4gSXQgYXBwZWFycyB0aGUgb2xkIGFwcHJvYWNoIHVzZWQgYFBGX01FTUFMTE9DYCBhbmQgYFBGX0tTV0FQRGAgZmxhZ3MgdG8gbWltaWMga3N3YXBkIGJlaGF2aW9yIHdpdGhpbiB3b3JrZXIgdGhyZWFkcywgcGFydGljdWxhcmx5IGluIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYC4gVGhlIGdvYWwgd2FzIHRvIHByZXZlbnQgYmxvY2tpbmcgZHVyaW5nIHJlY2xhaW0gb3BlcmF0aW9ucy4gVGhpcyByZWZhY3RvcmluZyBjbGVhcmx5IGNoYW5nZXMgaG93IHRoYXQgY29udGV4dCBpcyBkZXRlcm1pbmVkLlxuXG5Ob3cgSSdtIGRpdmluZyBkZWVwZXIgaW50byB0aGUgY2hhbmdlcy4gVGhlIHBhdGNoIHNlcmllcyBpcyBtb2RpZnlpbmcgaG93IHdlIGRldGVjdCB0aGUga3N3YXBkIGFuZCBrY29tcGFjdGQgY29udGV4dHMuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgZGlyZWN0IGZsYWcgY2hlY2tzIChgY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1NXQVBEYCwgZXRjLikgd2l0aCBjYWxscyB0byBga3RocmVhZF9mdW5jKGN1cnJlbnQpYCwgd2hpY2ggY2hlY2tzIGlmIHRoZSBjdXJyZW50IHRhc2sgKmlzKiBhIGtlcm5lbCB0aHJlYWQgYW5kLCBpZiBzbywgcmV0dXJucyBpdHMgdGhyZWFkIGZ1bmN0aW9uIChga3N3YXBkYCBvciBga2NvbXBhY3RkYCkuIEltcG9ydGFudGx5LCBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgYXJlICpyZW1vdmVkKiBmcm9tIHRoZSB0YXNrIGZsYWdzLiBUaGVyZSdzIGFsc28gYSBjaGFuZ2UgaW4gYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgIGFuZCBpbiBYRlMncyBgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcmAuXG5cbklzIHRoaXMgcmVmYWN0b3JpbmcganVzdCBjb3NtZXRpYz8gTGV0J3MgY2hlY2sgYWdhaW5zdCB0aGUgXCJXb3J0aEZ1enppbmdcIiBjcml0ZXJpYS4gTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzICpub3QqIGp1c3QgZG9jdW1lbnRhdGlvbiBvciBsb2dnaW5nLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW1zLiBJdCdzIGxpa2VseSBleGVjdXRhYmxlLCBzbyB5ZXMsIHRoaXMgd2FycmFudHMgZGVlcGVyIHNjcnV0aW55IGFuZCBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgdGhlIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIGNoYW5nZSBhZmZlY3RzIHJlY2xhaW0sIGNvbXBhY3Rpb24sIGFuZCBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBIb3cgZG9lcyB0aGlzIGltcGFjdCBYRlMgYW5kIGlvbWFwLCB3aGljaCBhcmUga2V5IGFyZWFzIG9mIGludGVyZXN0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIGRpZmZlcmVudCB0aHJlYWQgdHlwZXMg4oCTIHdoYXQgaGFwcGVucyBpZiBgY3VycmVudGAgaXNuJ3QgYSBrdGhyZWFkPyBUaGUgYGt0aHJlYWRfZnVuYygpYCBjaGVja3MgYFBGX0tUSFJFQURgLiBJZiBpdCdzIG5vdCBhIGt0aHJlYWQsIGl0J3MgcmV0dXJuaW5nIGBOVUxMYCBzbyBvdXIgY3VycmVudCBjb250ZXh0IGZ1bmN0aW9ucyB3aWxsIHJldHVybiBgZmFsc2VgLlxuXG5Gb2N1c2luZyBvbiBYRlMgYW5kIHRoYXQgYHhmc19idHJlZV9zcGxpdF93b3JrZXJgOiBQcmV2aW91c2x5LCB3b3JrZXIgdGhyZWFkcyB3ZXJlIHNldHRpbmcgYFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEYCB0byBhY3QgYXMga3N3YXBkLiBUaGlzIGlzIG5vdyByZW1vdmVkLiBJbiBgaW9tYXBfd3JpdGVwYWdlc2AsIHdlIHNlZSBhIHNoaWZ0IGZyb20gY2hlY2tpbmcgYSBjb21iaW5lZCBmbGFnIChgUEZfTUVNQUxMT0MgfCBQRl9LU1dBUERgKSB0byBqdXN0IGBQRl9NRU1BTExPQ2AuIENydWNpYWxseSwga3N3YXBkIHN0aWxsIHNldHMgYFBGX01FTUFMTE9DYCB3aGVuIGl0IHN0YXJ0cy4gVGhlIG9sZCBsb2dpYyBtaWdodCBoYXZlICptaXNzZWQqIHRoZSByZWNsYWltIHdyaXRlYmFjayBpZiBpdCAqd2FzKiBrc3dhcGQsIGJ1dCBub3cgaXQgdW5jb25kaXRpb25hbGx5ICp3YXJucyogb24gdGhlIGBQRl9NRU1BTExPQ2AgZmxhZy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBXQVJOX09OIHdhcyBtZWFudCB0byBjYXRjaCByZWNsYWltIHdyaXRlYmFjayBpc3N1ZXMuIFRoZSBjb21tZW50IGNvbmZpcm1zIHRoaXMuIFRoZSBjaGVjayB1c2VkIHRvIG9ubHkgZmxhZyBkaXJlY3QgcmVjbGFpbSwgYnV0IG5vdyBpdCBmbGFncyAqYW55KiByZWNsYWltIGNvbnRleHQuXG5cblRoaXMgYWx0ZXJzIGhvdyBlcnJvcnMgcmVsYXRlZCB0byB3cml0ZWJhY2sgaW4gcmVjbGFpbSBhcmUgaGFuZGxlZC4gVGhpcyBtb2RpZmljYXRpb24gaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0cyB3aXRoIGZpbGVzeXN0ZW1zISBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlncyBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgYW5kIHJ1biB0aGUgbW9kaWZpZWQgY29kZS4gYENPTkZJR19GU19JT01BUGAgb3IgYSBmaWxlc3lzdGVtIGNvbmZpZyAoWEZTLCBFWFQ0LCBldGMuKSBhcmUgbmVlZGVkLCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGFuZCBJIHNob3VsZCBkb3VibGUtY2hlY2sgS2NvbmZpZyBmb3IgYGZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNgIGFuZCBgZnMveGZzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHRlc3RhYmxlIGFuZCBmaW5kIHRoZSBiZXN0IHdheSB0byBmdXp6IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU2MSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjozMi40MjkzMzQ2NDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDQ4NzI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCVUZGRVJFRF9JT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZjJmcy9mMmZzLmg9MTMxMz1lbnVtIGlvc3RhdF90eXBlIHtcXG4tLVxcbmZzL2YyZnMvZjJmcy5oLTEzMTUtXFx0QVBQX0RJUkVDVF9JTyxcXHRcXHRcXHQvKiBhcHAgZGlyZWN0IHdyaXRlIElPcyAqL1xcbmZzL2YyZnMvZjJmcy5oOjEzMTY6XFx0QVBQX0JVRkZFUkVEX0lPLFxcdFxcdC8qIGFwcCBidWZmZXJlZCB3cml0ZSBJT3MgKi9cXG5mcy9mMmZzL2YyZnMuaC0xMzE3LVxcdEFQUF9XUklURV9JTyxcXHRcXHRcXHQvKiBhcHAgd3JpdGUgSU9zICovXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYz01NDMyPXN0YXRpYyBzc2l6ZV90IGYyZnNfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy01NDQ1LVxcdFxcdGYyZnNfdXBkYXRlX2lvc3RhdChGMkZTX0lfU0IoaW5vZGUpLCBpbm9kZSxcXG5mcy9mMmZzL2ZpbGUuYzo1NDQ2OlxcdFxcdFxcdFxcdFxcdFxcdEFQUF9CVUZGRVJFRF9JTywgcmV0KTtcXG5mcy9mMmZzL2ZpbGUuYy01NDQ3LVxcdH1cXG4tLVxcbmZzL2YyZnMvaW9zdGF0LmM9MzM9aW50IF9fbWF5YmVfdW51c2VkIGlvc3RhdF9pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpXFxuLS1cXG5mcy9mMmZzL2lvc3RhdC5jLTQ3LVxcdHNlcV9wdXRzKHNlcSwgXFxcIltXUklURV1cXFxcblxcXCIpO1xcbmZzL2YyZnMvaW9zdGF0LmM6NDg6XFx0SU9TVEFUX0lORk9fU0hPVyhcXFwiYXBwIGJ1ZmZlcmVkIGRhdGFcXFwiLCBBUFBfQlVGRkVSRURfSU8pO1xcbmZzL2YyZnMvaW9zdGF0LmMtNDktXFx0SU9TVEFUX0lORk9fU0hPVyhcXFwiYXBwIGRpcmVjdCBkYXRhXFxcIiwgQVBQX0RJUkVDVF9JTyk7XFxuLS1cXG5mcy9mMmZzL2lvc3RhdC5jPTIwND12b2lkIGYyZnNfdXBkYXRlX2lvc3RhdChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mMmZzL2lvc3RhdC5jLTIxNC1cXG5mcy9mMmZzL2lvc3RhdC5jOjIxNTpcXHRpZiAodHlwZSA9PSBBUFBfQlVGRkVSRURfSU8gfHwgdHlwZSA9PSBBUFBfRElSRUNUX0lPKVxcbmZzL2YyZnMvaW9zdGF0LmMtMjE2LVxcdFxcdF9fZjJmc191cGRhdGVfaW9zdGF0KHNiaSwgQVBQX1dSSVRFX0lPLCBpb19ieXRlcyk7XFxuLS1cXG5mcy9mMmZzL2lvc3RhdC5jLTIyMi1cXHRpZiAoaW5vZGUgXFx1MDAyNlxcdTAwMjYgZjJmc19jb21wcmVzc2VkX2ZpbGUoaW5vZGUpKSB7XFxuZnMvZjJmcy9pb3N0YXQuYzoyMjM6XFx0XFx0aWYgKHR5cGUgPT0gQVBQX0JVRkZFUkVEX0lPKVxcbmZzL2YyZnMvaW9zdGF0LmMtMjI0LVxcdFxcdFxcdF9fZjJmc191cGRhdGVfaW9zdGF0KHNiaSwgQVBQX0JVRkZFUkVEX0NEQVRBX0lPLCBpb19ieXRlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjMyLjc0OTgyNzM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzIxNzk4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBmaWxlczpcblxuKipJbml0aWFsIERpYWdub3N0aWMgU2NhbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgb3IgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZhY3QgdGhhdCBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgb2YgYGZzL2lvbWFwL01ha2VmaWxlYCBhbmQgYGZzL3hmcy9LY29uZmlnYCBpcyBwcmV0dHkgdGVsbGluZy4gVGhlIGBNYWtlZmlsZWAgc3VnZ2VzdHMgSSBtaWdodCBiZSBkZWJ1Z2dpbmcgYnVpbGQgZGVwZW5kZW5jaWVzIG9yIGludmVzdGlnYXRpbmcgaG93IEkvTyBtYXBwaW5nIGZ1bmN0aW9uYWxpdHkgaXMgaW50ZWdyYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSU9NQVAgc3Vic3lzdGVtLiBDb252ZXJzZWx5LCBgZnMveGZzL0tjb25maWdgIGluZGljYXRlcyBJIG1pZ2h0IG5lZWQgdG8gdmVyaWZ5IG9yIGFsdGVyIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIFhGUyBmaWxlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlc2UgYXJlIHJlbGF0ZWQsIGJ1dCBsaWtlbHkgYXQgc2VwYXJhdGUgbGV2ZWxzLiBUaGUgZmlyc3QgYmVpbmcgdGhlIGxvd2VyLWxldmVsIEkvTyBtYXBwaW5nIGFuZCB0aGUgc2Vjb25kIGJlaW5nIHRoZSBoaWdoZXItbGV2ZWwgZmlsZXN5c3RlbSB0aGF0IG1heSBiZSB0YWtpbmcgYWR2YW50YWdlIG9mIGl0LiBJdCdzIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiwgZm9jdXNpbmcgb24gdGhlc2Ugc3BlY2lmaWMgZmlsZSBzeXN0ZW0gY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MjozNS4xMjIwMTExNDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaW9tYXAvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENvcHlyaWdodCAoYykgMjAxOSBPcmFjbGUuXFxuICAgNDpcXHQjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICAgNTpcXHQjXFxuICAgNjpcXHRcXG4gICA3OlxcdGNjZmxhZ3MteSArPSAtSSAkKHNyYylcXHRcXHQjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19GU19JT01BUClcXHRcXHQrPSBpb21hcC5vXFxuICAxMDpcXHRcXG4gIDExOlxcdGlvbWFwLXlcXHRcXHRcXHRcXHQrPSB0cmFjZS5vIFxcXFxcXG4gIDEyOlxcdFxcdFxcdFxcdFxcdCAgIGl0ZXIubyBcXFxcXFxuICAxMzpcXHRcXHRcXHRcXHRcXHQgICBidWZmZXJlZC1pby5vXFxuICAxNDpcXHRpb21hcC0kKENPTkZJR19CTE9DSylcXHRcXHQrPSBkaXJlY3QtaW8ubyBcXFxcXFxuICAxNTpcXHRcXHRcXHRcXHRcXHQgICBpb2VuZC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6MzUuMTIyMDc1NDc0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDMzNDY0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWEZTIENvbmZpZ3VyYXRpb24gQXVkaXQqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZy4gTGV0J3Mgc3RhcnQgd2l0aCBgZnMveGZzL0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBmZWF0dXJlcyBhbmQgb3B0aW9ucyBmb3IgWEZTIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwcm9qZWN0J3MgcmVxdWlyZW1lbnRzLCBhbmQgbWFrZSBzdXJlIHRoYXQgYW55IGRlZmF1bHRzIG9yIGRlcGVuZGVuY2llcyBoYXZlbid0IGNoYW5nZWQgaW4gYSB3YXkgdGhhdCBtaWdodCBpbXBhY3QgdXMuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgYENPTkZJR19YRlNfKmAgc3ltYm9scywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIFhGUyBmZWF0dXJlcyB3ZSdyZSBsZXZlcmFnaW5nLCBsaWtlIHF1b3RhcywgbGFyZ2UgZmlsZSBzdXBwb3J0LCBtZXRhZGF0YSBqb3VybmFsaW5nLCBhbmQgYW55IG5ldyBvcHRpb25zIGludHJvZHVjZWQgdGhhdCBtaWdodCBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBvciBhZGRyZXNzIHNwZWNpZmljIGtub3duIGlzc3Vlcy5cblxuSSdtIGFsc28gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgcHVsbCBpbiBvdGhlciByZWxhdGVkIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIG1ldCwgb3IgaWYgYW55IG5ldyBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGludHJvZHVjZWQuIFVsdGltYXRlbHkgSSdsbCBoYXZlIGEgZ29vZCBoYW5kbGUgb24gaG93IFhGUyBpcyBiZWluZyBidWlsdCwgYW5kIHdoaWNoIGZlYXR1cmVzIGFyZSB0cnVseSBhdmFpbGFibGUgYXQgcnVudGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjM4LjQyNTQyNDg5OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFhGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlhGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuICAgNTpcXHRcXHRzZWxlY3QgRVhQT1JURlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDc6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFhGUyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2Ugam91cm5hbGluZyBmaWxlc3lzdGVtIHdoaWNoIG9yaWdpbmF0ZWRcXG4gIDEwOlxcdFxcdCAgb24gdGhlIFNHSSBJUklYIHBsYXRmb3JtLiAgSXQgaXMgY29tcGxldGVseSBtdWx0aS10aHJlYWRlZCwgY2FuXFxuICAxMTpcXHRcXHQgIHN1cHBvcnQgbGFyZ2UgZmlsZXMgYW5kIGxhcmdlIGZpbGVzeXN0ZW1zLCBleHRlbmRlZCBhdHRyaWJ1dGVzLFxcbiAgMTI6XFx0XFx0ICB2YXJpYWJsZSBibG9jayBzaXplcywgaXMgZXh0ZW50IGJhc2VkLCBhbmQgbWFrZXMgZXh0ZW5zaXZlIHVzZSBvZlxcbiAgMTM6XFx0XFx0ICBCdHJlZXMgKGRpcmVjdG9yaWVzLCBleHRlbnRzLCBmcmVlIHNwYWNlKSB0byBhaWQgYm90aCBwZXJmb3JtYW5jZVxcbiAgMTQ6XFx0XFx0ICBhbmQgc2NhbGFiaWxpdHkuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gYXQgXFx1MDAzY2h0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvXFx1MDAzZVxcbiAgMTc6XFx0XFx0ICBmb3IgY29tcGxldGUgZGV0YWlscy4gIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgb24tZGlzayBjb21wYXRpYmxlXFxuICAxODpcXHRcXHQgIHdpdGggdGhlIElSSVggdmVyc2lvbiBvZiBYRlMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMjE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeGZzLiAgQmUgYXdhcmUsIGhvd2V2ZXIsIHRoYXQgaWYgdGhlIGZpbGVcXG4gIDIyOlxcdFxcdCAgc3lzdGVtIG9mIHlvdXIgcm9vdCBwYXJ0aXRpb24gaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHlvdSdsbCBuZWVkXFxuICAyMzpcXHRcXHQgIHRvIHVzZSBhbiBpbml0aWFsIHJhbWRpc2sgKGluaXRyZCkgdG8gYm9vdC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIFhGU19TVVBQT1JUX1Y0XFxuICAyNjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGRlcHJlY2F0ZWQgVjQgKGNyYz0wKSBmb3JtYXRcXFwiXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIFhGU19GU1xcbiAgMjg6XFx0XFx0ZGVmYXVsdCBuXFxuICAyOTpcXHRcXHRoZWxwXFxuICAzMDpcXHRcXHQgIFRoZSBWNCBmaWxlc3lzdGVtIGZvcm1hdCBsYWNrcyBjZXJ0YWluIGZlYXR1cmVzIHRoYXQgYXJlIHN1cHBvcnRlZFxcbiAgMzE6XFx0XFx0ICBieSB0aGUgVjUgZm9ybWF0LCBzdWNoIGFzIG1ldGFkYXRhIGNoZWNrc3VtbWluZywgc3RyZW5ndGhlbmVkXFxuICAzMjpcXHRcXHQgIG1ldGFkYXRhIHZlcmlmaWNhdGlvbiwgYW5kIHRoZSBhYmlsaXR5IHRvIHN0b3JlIHRpbWVzdGFtcHMgcGFzdCB0aGVcXG4gIDMzOlxcdFxcdCAgeWVhciAyMDM4LiAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgVjQgZm9ybWF0IGlzIGRlcHJlY2F0ZWQuICBBbGwgdXNlcnNcXG4gIDM0OlxcdFxcdCAgc2hvdWxkIHVwZ3JhZGUgYnkgYmFja2luZyB1cCB0aGVpciBmaWxlcywgcmVmb3JtYXR0aW5nLCBhbmQgcmVzdG9yaW5nXFxuICAzNTpcXHRcXHQgIGZyb20gdGhlIGJhY2t1cC5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBBZG1pbmlzdHJhdG9ycyBhbmQgdXNlcnMgY2FuIGRldGVjdCBhIFY0IGZpbGVzeXN0ZW0gYnkgcnVubmluZ1xcbiAgMzg6XFx0XFx0ICB4ZnNfaW5mbyBhZ2FpbnN0IGEgZmlsZXN5c3RlbSBtb3VudHBvaW50IGFuZCBjaGVja2luZyBmb3IgYSBzdHJpbmdcXG4gIDM5OlxcdFxcdCAgYmVnaW5uaW5nIHdpdGggXFxcImNyYz1cXFwiLiAgSWYgdGhlIHN0cmluZyBcXFwiY3JjPTBcXFwiIGlzIGZvdW5kLCB0aGVcXG4gIDQwOlxcdFxcdCAgZmlsZXN5c3RlbSBpcyBhIFY0IGZpbGVzeXN0ZW0uICBJZiBubyBzdWNoIHN0cmluZyBpcyBmb3VuZCwgcGxlYXNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjM4LjQyNTUwNDc5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjU1NDA5MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2Ugb3B0aW9uczpcblxuKipLY29uZmlnIERpdmUgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBgQ09NUEFDVElPTmAgYW5kIGBTV0FQYC4gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBlbnN1cmUgdGhleSdyZSBzZXQgcHJvcGVybHkgb3IgaGF2ZSB0aGUgY29ycmVjdCBkZXBlbmRlbmNpZXMgc2V0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgaGVyZSBhcmUgY3JpdGljYWwsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB3aXRoIHRoZSBzeXN0ZW0gSSBoYXZlIGluIG1pbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgYXNzb2NpYXRlZCBzZXR0aW5ncyB0aGF0IG1pZ2h0IGJlIGNydWNpYWwuIENoZWNraW5nIHRoZSBLY29uZmlnIGlzIHRoZSBiZXN0IGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDM5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1Mjo0Mi4wODA5MTY2ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDQxNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT01QQUNUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTYyNT1jb25maWcgQkFMTE9PTl9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjM2LSMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cXG5tbS9LY29uZmlnOjYzNzpjb25maWcgQ09NUEFDVElPTlxcbm1tL0tjb25maWctNjM4LVxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgY29tcGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NDIuMTMxOTYyMDQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMjg4NjA4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgcHJvYmFibHkgd2l0aGluIGBtbS9LY29uZmlnYC4gQmFzZWQgb24gZXhwZXJpZW5jZSB3aXRoIHRoaXMgcGFydGljdWxhciBhcmVhLCBteSBpbnR1aXRpb24gcG9pbnRzIG1lIHRvd2FyZCB0aGUgdmljaW5pdHkgb2YgbGluZSA2MzUuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IGNhdGNoZXMgbXkgZXllLiBJdCdzIGEgYnJvYWQgc3RhcnRpbmcgcG9pbnQsIGJ1dCBleHBlcmllbmNlIGhhcyB0YXVnaHQgbWUgdGhhdCB0aGUgcGVydGluZW50IG9wdGlvbnMvbG9naWMgYXJlIGZyZXF1ZW50bHkgZ3JvdXBlZCBpbiB0aGUgbWlkLXJhbmdlIG9mIHRoZXNlIGZpbGVzLCBnaXZlbiB0aGUgYnJlYWR0aCBvZiBjb25maWd1cmFibGUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBzb3J0IG9mIG1hY3JvIGRlZmluaXRpb24sIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IHN0YXRlbWVudCBmb3IgdGhlIGZlYXR1cmUgb2YgaW50ZXJlc3QuIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjQ2LjQ2MDgyODU1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA1MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjM1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdCNcXG4gNjM2OlxcdCMgc3VwcG9ydCBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cXG4gNjM3OlxcdGNvbmZpZyBDT01QQUNUSU9OXFxuIDYzODpcXHRcXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGNvbXBhY3Rpb25cXFwiXFxuIDYzOTpcXHRcXHRkZWZhdWx0IHlcXG4gNjQwOlxcdFxcdHNlbGVjdCBNSUdSQVRJT05cXG4gNjQxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDY0MjpcXHRcXHRoZWxwXFxuIDY0MzpcXHRcXHQgIENvbXBhY3Rpb24gaXMgdGhlIG9ubHkgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50IHRvIGZvcm1cXG4gNjQ0OlxcdFxcdCAgaGlnaCBvcmRlciAobGFyZ2VyIHBoeXNpY2FsbHkgY29udGlndW91cykgbWVtb3J5IGJsb2Nrc1xcbiA2NDU6XFx0XFx0ICByZWxpYWJseS4gVGhlIHBhZ2UgYWxsb2NhdG9yIHJlbGllcyBvbiBjb21wYWN0aW9uIGhlYXZpbHkgYW5kXFxuIDY0NjpcXHRcXHQgIHRoZSBsYWNrIG9mIHRoZSBmZWF0dXJlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgT09NIGtpbGxlclxcbiA2NDc6XFx0XFx0ICBpbnZvY2F0aW9ucyBmb3IgaGlnaCBvcmRlciBtZW1vcnkgcmVxdWVzdHMuIFlvdSBzaG91bGRuJ3RcXG4gNjQ4OlxcdFxcdCAgZGlzYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgdGhlcmUgcmVhbGx5IGlzIGEgc3Ryb25nIHJlYXNvbiBmb3JcXG4gNjQ5OlxcdFxcdCAgaXQgYW5kIHRoZW4gd2Ugd291bGQgYmUgcmVhbGx5IGludGVyZXN0ZWQgdG8gaGVhciBhYm91dCB0aGF0IGF0XFxuIDY1MDpcXHRcXHQgIGxpbnV4LW1tQGt2YWNrLm9yZy5cXG4gNjUxOlxcdFxcbiA2NTI6XFx0Y29uZmlnIENPTVBBQ1RfVU5FVklDVEFCTEVfREVGQVVMVFxcbiA2NTM6XFx0XFx0aW50XFxuIDY1NDpcXHRcXHRkZXBlbmRzIG9uIENPTVBBQ1RJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NDYuNDYxODM2MDUxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNjA1NzM4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgU1dBUCBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYFNXQVBgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbiBpcyB3aXRoaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwncyBzdHJ1Y3R1cmUsIEknbGwgc3RhcnQgdGhlcmUuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgdGhlbiBzZWFyY2ggdGhyb3VnaCBpdCwgbG9va2luZyBmb3IgdGhlIGBTV0FQYCBvcHRpb24gZGVmaW5pdGlvbi4gSSBleHBlY3QgdGhpcyB3aWxsIHJldmVhbCB3aGV0aGVyIGl0J3MgYSBkaXJlY3Qgb3B0aW9uLCBhIGRlcGVuZGVuY3kgb2YgYW5vdGhlciBvcHRpb24sIG9yIGEgZ2VuZXJhbCBjb25maWd1cmF0aW9uIHZhbHVlLiBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgZGV0YWlscyBuZWNlc3NhcnkgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDgxNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NDkuNjIyNDEzMTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI2NTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NDkuNjczNjgyNjQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2ODgzMjg5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBLZXJuZWwgRnVuY3Rpb24gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgcmVjZW50IG1vZGlmaWNhdGlvbnMsIHNvIEknbGwgc3RhcnQgYnkgcGlucG9pbnRpbmcgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGFsdGVyZWQgb3IgZnJlc2hseSBpbnRyb2R1Y2VkLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBsb2dpYyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbXBhY3RlZC4gSSBzZWUgdGhlIGZvbGxvd2luZyBhcyBsaWtlbHkgYXJlYXMgb2YgaW50ZXJlc3Q6XG5cbiogICBgY3VycmVudF9pc19rc3dhcGRgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIHRvIG1vbml0b3IgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMsIGFzIGtzd2FwZCBpcyB0aGUga2VybmVsJ3MgYmFja2dyb3VuZCBtZW1vcnkgcmVjbGFtYXRpb24gcHJvY2Vzcy5cbiogICBTaW1pbGFybHksIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAgZnJvbSBgbW0vY29tcGFjdGlvbi5jYCBpcyBnb2luZyB0byBiZSByZWxldmFudCwgc2luY2Uga2NvbXBhY3RkIG1hbmFnZXMgbWVtb3J5IGNvbXBhY3Rpb24sIHNvIHRoZSBpbnRlcmZhY2UgdG8gdGhpcyBwcm9jZXNzIGlzIGNyaXRpY2FsLlxuKiAgIGBpb21hcF93cml0ZXBhZ2VzYCBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AgaXMgaW1wb3J0YW50IHRvIGV4YW1pbmUsIGVzcGVjaWFsbHkgd2l0aCBpdHMgaW1wYWN0IG9uIGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTywgYXMgZmlsZSBzeXN0ZW0gcGVyZm9ybWFuY2Ugb2Z0ZW4gc2VlcyBpbXByb3ZlbWVudCBoZXJlLlxuKiAgIEFuZCBmaW5hbGx5LCBgeGZzX2J0cmVlX3NwbGl0YCB3aXRoaW4gYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgLiBXYWl0LCBpcyB0aGlzIHN0YXRpYyBvciBub24tc3RhdGljPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUsIGJlY2F1c2UgdGhhdCB3aWxsIHNpZ25pZmljYW50bHkgYWZmZWN0IHRoZSBpbXBsaWNhdGlvbnMuIEkgdGhpbmsgSSdsbCBsb29rIGFyb3VuZCBsaW5lIDMwNDIgaW4gYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgIHRvIGNsYXJpZnkuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBCLXRyZWUgc3BsaXR0aW5nIGlzIGZ1bmRhbWVudGFsIHRvIFhGUydzIHNjYWxhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNzUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTI6NTQuMzYyMDE0MjM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNDA6XFx0ICogd2UgaGF2ZSB0byB3b3JyeSBhYm91dC5cXG4zMDQxOlxcdCAqL1xcbjMwNDI6XFx0U1RBVElDIGludFxcdFxcdFxcdFxcdFxcdC8qIGVycm9yICovXFxuMzA0MzpcXHR4ZnNfYnRyZWVfc3BsaXQoXFxuMzA0NDpcXHRcXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clxcdCpjdXIsXFxuMzA0NTpcXHRcXHRpbnRcXHRcXHRcXHRsZXZlbCxcXG4zMDQ2OlxcdFxcdHVuaW9uIHhmc19idHJlZV9wdHJcXHQqcHRycCxcXG4zMDQ3OlxcdFxcdHVuaW9uIHhmc19idHJlZV9rZXlcXHQqa2V5LFxcbjMwNDg6XFx0XFx0c3RydWN0IHhmc19idHJlZV9jdXJcXHQqKmN1cnAsXFxuMzA0OTpcXHRcXHRpbnRcXHRcXHRcXHQqc3RhdClcXHRcXHQvKiBzdWNjZXNzL2ZhaWx1cmUgKi9cXG4zMDUwOlxcdHtcXG4zMDUxOlxcdFxcdHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJnc1xcdGFyZ3M7XFxuMzA1MjpcXHRcXHRERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTtcXG4zMDUzOlxcdFxcbjMwNTQ6XFx0XFx0aWYgKCF4ZnNfYnRyZWVfaXNfYm1hcChjdXItXFx1MDAzZWJjX29wcykgfHxcXG4zMDU1OlxcdFxcdCAgICBjdXItXFx1MDAzZWJjX3RwLVxcdTAwM2V0X2hpZ2hlc3RfYWdubyA9PSBOVUxMQUdOVU1CRVIpXFxuMzA1NjpcXHRcXHRcXHRyZXR1cm4gX194ZnNfYnRyZWVfc3BsaXQoY3VyLCBsZXZlbCwgcHRycCwga2V5LCBjdXJwLCBzdGF0KTtcXG4zMDU3OlxcdFxcbjMwNTg6XFx0XFx0YXJncy5jdXIgPSBjdXI7XFxuMzA1OTpcXHRcXHRhcmdzLmxldmVsID0gbGV2ZWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUyOjU0LjM2MjIxNjIxNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjkxNjcxMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBLZXJuZWwgU3ltYm9sIExvY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBub3RpbmcgdGhlIGxvY2F0aW9ucyBvZiBhIGZldyBrZXkga2VybmVsIHN5bWJvbHMuIEkgc2VlIHRoYXQgYGN1cnJlbnRfaXNfa3N3YXBkYCByZXNpZGVzIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGV4cG9ydGVkLCBzbyBpdCdzIGFjY2Vzc2libGUgb3V0c2lkZSB0aGF0IHNwZWNpZmljIGZpbGUsIGFuZCBpbXBvcnRhbnRseSwgaXQncyB1bmRlciB0aGUgR1BMIGxpY2Vuc2UgYW5kIGlzIG5vdCBzdGF0aWMgd2hpY2ggbWVhbnMgZXh0ZXJuYWwgbW9kdWxlcyBjYW4gdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uLiBOZXh0LCBJJ20gY2hlY2tpbmcgYGN1cnJlbnRfaXNfa2NvbXBhY3RkYCwgd2hpY2ggSSBmaW5kIGluIGBtbS9jb21wYWN0aW9uLmNgIOKAkyBhZ2FpbiwgZXhwb3J0ZWQsIEdQTCwgYW5kIG5vbi1zdGF0aWMuIEZpbmFsbHksIEknbSBsb29raW5nIGF0IGBpb21hcF93cml0ZXBhZ2VzYCwgZGVmaW5lZCBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AuIFRoaXMgdG9vIGlzIGV4cG9ydGVkLCBhbmQgaXQncyBhbHNvIG5vbi1zdGF0aWMuIE5vdywgSSBzaG91bGQgaW52ZXN0aWdhdGUgYGlvbWFwX3dyaXRlcGFnZXNgIG1vcmUgY2xvc2VseTsgSSdsbCBjaGVjayBpdHMgZGVjbGFyYXRpb24gYW5kLCBjcnVjaWFsbHksIGhvdyBpdCdzIGV4cG9ydGVkIHRvIHVuZGVyc3RhbmQgaXRzIHZpc2liaWxpdHkgYW5kIHBvc3NpYmxlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1Mjo1Ny42NTM4OTAxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MDg0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3dyaXRlcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0yMDY5PWludFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjA3MDppb21hcF93cml0ZXBhZ2VzKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMDcxLXtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjEwMC19XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyMTAxOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3dyaXRlcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1Mjo1Ny44NDg5ODA3MDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4NDA4NzQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSZWNlbnQgQ29kZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGEgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcgdGhhdCdzIGNoYW5nZWQuIEZpcnN0LCBJJ20gbm90aW5nIHRoYXQgdGhlcmUgYXJlIGEgZmV3IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLiBJbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGl0J3MgYGlvbWFwX3dyaXRlcGFnZXNgLCB3aGljaCBpcyBhIGtleSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgYnVmZmVyZWQgSS9PLiBUaGVuLCBpbiB0aGUgWEZTIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgYGZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmNgLCBJIHNlZSBib3RoIGB4ZnNfYnRyZWVfc3BsaXRfd29ya2VyYCBhbmQgdGhlIHN0YXRpYyBmdW5jdGlvbiBgeGZzX2J0cmVlX3NwbGl0YCB3ZXJlIG1vZGlmaWVkLiBUaGF0IGNvdWxkIGJlIHNpZ25pZmljYW50IGZvciBiLXRyZWUgcGVyZm9ybWFuY2UuIEZpbmFsbHksIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIEknbSBzZWVpbmcgY2hhbmdlcyByZWxhdGVkIHRvIG1lbW9yeSByZWNsYWltIGFuZCBjb21wYWN0aW9uOiBzcGVjaWZpY2FsbHksIGBjdXJyZW50X2lzX2tjb21wYWN0ZGAgYW5kIGBrY29tcGFjdGRgIGluIGBtbS9jb21wYWN0aW9uLmNgLCBhbmQgYGN1cnJlbnRfaXNfa3N3YXBkYCBhbmQgYGtzd2FwZGAgaW4gYG1tL3Ztc2Nhbi5jYC5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEl0J3MgbWFya2VkIGFzIFwiV29ydGhGdXp6aW5nXCIgd2hpY2ggbWVhbnMgdGhlcmUgYXJlIHJlYWwgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIG1lbW9yeSByZWNsYWltL2NvbXBhY3Rpb24gKHByb2JhYmx5IHRoZSBiaWdnZXN0IGNoYW5nZSkgYW5kIHNvbWUgaW50ZXJlc3RpbmcgdXBkYXRlcyB0byBJT01BUCB3cml0ZWJhY2sgYW5kIFhGUyBiLXRyZWUgaGFuZGxpbmcuIFRoYXQgSU9NQVAgdGhpbmcgaXMgYWx3YXlzIGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IHdoZW4gaXQgZGVhbHMgd2l0aCB3cml0ZWJhY2suXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BlY2lmaWNhbGx5OiBgaW9tYXBfd3JpdGVwYWdlc2AsIGBjdXJyZW50X2lzX2tzd2FwZGAsIGFuZCBgY3VycmVudF9pc19rY29tcGFjdGRgLCB3aGljaCBhbGlnbnMgd2l0aCB0aG9zZSBmdW5jdGlvbiBjYWxsIG1vZGlmaWNhdGlvbnMuIFNvIHRoYXQncyB0aGUgY29yZSBmb2N1cyBvZiB0aGUgY2hhbmdlcy5cblxuRmluYWxseSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmU6IGBDT01QQUNUSU9OYCwgYFNXQVBgLCBgRlNfSU9NQVBgLCBhbmQgYFhGU19GU2AuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlcGVuZGVuY3kgbGlzdCDigJMgd2Uga25vdyB3aGF0J3MgcmVxdWlyZWQgZm9yIHRoZXNlIGZlYXR1cmVzLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkIHRoYXQgSSd2ZSBnb3QgdGhlIGxheSBvZiB0aGUgbGFuZCBoZXJlLiBJJ20gZ29pbmcgdG8ga2ljayBvZmYgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDM5LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzowNi44MzMwNzIzODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM5NDAyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX3dyaXRlcGFnZXNcIixcbiAgICBcImN1cnJlbnRfaXNfa3N3YXBkXCIsXG4gICAgXCJjdXJyZW50X2lzX2tjb21wYWN0ZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiRlNfSU9NQVBcIixcbiAgICBcIlhGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX3dyaXRlcGFnZXNcIixcbiAgICBcImN1cnJlbnRfaXNfa3N3YXBkXCIsXG4gICAgXCJjdXJyZW50X2lzX2tjb21wYWN0ZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcHJvY2VzcyBmbGFncyBQRl9LU1dBUEQgYW5kIFBGX0tDT01QQUNURCBpbiBmYXZvciBvZiBrdGhyZWFkIGZ1bmN0aW9uIHBvaW50ZXIgY29tcGFyaXNvbnMgdmlhIGN1cnJlbnRfaXNfa3N3YXBkKCkgYW5kIGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkuIEl0IHVwZGF0ZXMgcmVjbGFpbSBhbmQgd3JpdGViYWNrIGhhbmRsaW5nIGluIGlvbWFwX3dyaXRlcGFnZXMoKSBhbmQgcmVtb3ZlcyB0aGUgaW5oZXJpdGFuY2Ugb2Yga3N3YXBkIGZsYWdzIGluIFhGUyBCLXRyZWUgc3BsaXQgd29yayBpdGVtcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSBhbmQgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUzOjA2LjkxNzQ3NTA4MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNjEzNzc3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzowNi45MTc5OTg5MDFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODM2MDg0ODA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBkYXRhIGJ1ZmZlciBtYW5pcHVsYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOWVkOTlkMmRkYWYxOWNjYjIwMDhhYmE0NmQ5Zjg1YTgwNTM5MGY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwOTo1MTozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5pbmRleCAwYTVlYmZkYTkwZjEyLi42MzA2Y2E3NDdmM2JhIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTIwNzcsOCArMjA3Nyw3IEBAIGlvbWFwX3dyaXRlcGFnZXMoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYylcbiBcdCAqIFdyaXRlYmFjayBmcm9tIHJlY2xhaW0gY29udGV4dCBzaG91bGQgbmV2ZXIgaGFwcGVuIGV4Y2VwdCBpbiB0aGUgY2FzZVxuIFx0ICogb2YgYSBWTSByZWdyZXNzaW9uIHNvIHdhcm4gYWJvdXQgaXQgYW5kIHJlZnVzZSB0byB3cml0ZSB0aGUgZGF0YS5cbiBcdCAqL1xuLVx0aWYgKFdBUk5fT05fT05DRSgoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX01FTUFMTE9DIHwgUEZfS1NXQVBEKSkgPT1cbi1cdFx0XHRQRl9NRU1BTExPQykpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHdoaWxlICgoZm9saW8gPSB3cml0ZWJhY2tfaXRlcihtYXBwaW5nLCB3cGMtXHUwMDNld2JjLCBmb2xpbywgXHUwMDI2ZXJyb3IpKSkge1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMvbGlieGZzL3hmc19idHJlZS5jXG5pbmRleCA2MGVmN2YwOGIxZDMwLi42NzM4ZDlkMTUxMWJjIDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYnRyZWUuY1xuQEAgLTI5OTQsNyArMjk5NCw2IEBAIHN0cnVjdCB4ZnNfYnRyZWVfc3BsaXRfYXJncyB7XG4gXHRzdHJ1Y3QgeGZzX2J0cmVlX2N1clx0KipjdXJwO1xuIFx0aW50XHRcdFx0KnN0YXQ7XHRcdC8qIHN1Y2Nlc3MvZmFpbHVyZSAqL1xuIFx0aW50XHRcdFx0cmVzdWx0O1xuLVx0Ym9vbFx0XHRcdGtzd2FwZDtcdC8qIGFsbG9jYXRpb24gaW4ga3N3YXBkIGNvbnRleHQgKi9cbiBcdHN0cnVjdCBjb21wbGV0aW9uXHQqZG9uZTtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0d29yaztcbiB9O1xuQEAgLTMwMDgsMzMgKzMwMDcsMTggQEAgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcihcbiB7XG4gXHRzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3NcdCphcmdzID0gY29udGFpbmVyX29mKHdvcmssXG4gXHRcdFx0XHRcdFx0c3RydWN0IHhmc19idHJlZV9zcGxpdF9hcmdzLCB3b3JrKTtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0cGZsYWdzO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRuZXdfcGZsYWdzID0gMDtcbi1cbi1cdC8qXG4tXHQgKiB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb250ZXh0IGhlcmUsIGJ1dCBtYXkgYWxzbyBiZSBkb2luZyB3b3JrXG4tXHQgKiBpbiBrc3dhcGQgY29udGV4dCwgYW5kIGhlbmNlIHdlIG1heSBuZWVkIHRvIGluaGVyaXQgdGhhdCBzdGF0ZVxuLVx0ICogdGVtcG9yYXJpbHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgYmxvY2sgd2FpdGluZyBmb3IgbWVtb3J5IHJlY2xhaW1cbi1cdCAqIGluIGFueSB3YXkuXG4tXHQgKi9cbi1cdGlmIChhcmdzLVx1MDAzZWtzd2FwZClcbi1cdFx0bmV3X3BmbGFncyB8PSBQRl9NRU1BTExPQyB8IFBGX0tTV0FQRDtcbi1cbi1cdGN1cnJlbnRfc2V0X2ZsYWdzX25lc3RlZChcdTAwMjZwZmxhZ3MsIG5ld19wZmxhZ3MpO1xuIFx0eGZzX3RyYW5zX3NldF9jb250ZXh0KGFyZ3MtXHUwMDNlY3VyLVx1MDAzZWJjX3RwKTtcbiBcbiBcdGFyZ3MtXHUwMDNlcmVzdWx0ID0gX194ZnNfYnRyZWVfc3BsaXQoYXJncy1cdTAwM2VjdXIsIGFyZ3MtXHUwMDNlbGV2ZWwsIGFyZ3MtXHUwMDNlcHRycCxcbiBcdFx0XHRcdFx0IGFyZ3MtXHUwMDNla2V5LCBhcmdzLVx1MDAzZWN1cnAsIGFyZ3MtXHUwMDNlc3RhdCk7XG4gXG4gXHR4ZnNfdHJhbnNfY2xlYXJfY29udGV4dChhcmdzLVx1MDAzZWN1ci1cdTAwM2ViY190cCk7XG4tXHRjdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKFx1MDAyNnBmbGFncywgbmV3X3BmbGFncyk7XG4gXG4gXHQvKlxuIFx0ICogRG8gbm90IGFjY2VzcyBhcmdzIGFmdGVyIGNvbXBsZXRlKCkgaGFzIHJ1biBoZXJlLiBXZSBkb24ndCBvd24gYXJnc1xuIFx0ICogYW5kIHRoZSBvd25lciBtYXkgcnVuIGFuZCBmcmVlIGFyZ3MgYmVmb3JlIHdlIHJldHVybiBoZXJlLlxuIFx0ICovXG4gXHRjb21wbGV0ZShhcmdzLVx1MDAzZWRvbmUpO1xuLVxuIH1cbiBcbiAvKlxuQEAgLTMwNzgsNyArMzA2Miw3IEBAIHhmc19idHJlZV9zcGxpdChcbiBcdGFyZ3MuY3VycCA9IGN1cnA7XG4gXHRhcmdzLnN0YXQgPSBzdGF0O1xuIFx0YXJncy5kb25lID0gXHUwMDI2ZG9uZTtcbi1cdGFyZ3Mua3N3YXBkID0gY3VycmVudF9pc19rc3dhcGQoKTtcbitcbiBcdElOSVRfV09SS19PTlNUQUNLKFx1MDAyNmFyZ3Mud29yaywgeGZzX2J0cmVlX3NwbGl0X3dvcmtlcik7XG4gXHRxdWV1ZV93b3JrKHhmc19hbGxvY193cSwgXHUwMDI2YXJncy53b3JrKTtcbiBcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZG9uZSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oIGIvZnMveGZzL3hmc19wbGF0Zm9ybS5oXG5pbmRleCA1ZDU0MmU5NWZlNDQ0Li5hNDlmYTE1OTg5NGRlIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19wbGF0Zm9ybS5oXG4rKysgYi9mcy94ZnMveGZzX3BsYXRmb3JtLmhcbkBAIC0xMTUsMTAgKzExNSw2IEBAIHR5cGVkZWYgX191MzJcdFx0XHR4ZnNfbmxpbmtfdDtcbiAjZGVmaW5lIHhmc19ibG9ja2djX3NlY3NcdHhmc19wYXJhbXMuYmxvY2tnY190aW1lci52YWxcbiBcbiAjZGVmaW5lIGN1cnJlbnRfY3B1KClcdFx0KHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpXG4tI2RlZmluZSBjdXJyZW50X3NldF9mbGFnc19uZXN0ZWQoc3AsIGYpXHRcdFxcXG4tXHRcdCgqKHNwKSA9IGN1cnJlbnQtXHUwMDNlZmxhZ3MsIGN1cnJlbnQtXHUwMDNlZmxhZ3MgfD0gKGYpKVxuLSNkZWZpbmUgY3VycmVudF9yZXN0b3JlX2ZsYWdzX25lc3RlZChzcCwgZilcdFxcXG4tXHRcdChjdXJyZW50LVx1MDAzZWZsYWdzID0gKChjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiB+KGYpKSB8ICgqKHNwKSBcdTAwMjYgKGYpKSkpXG4gXG4gI2RlZmluZSBOQkJZXHRcdDhcdFx0LyogbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUgKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG5pbmRleCA2NmEyZjcwZTllMDE5Li42OTFjMDlmMGE2OTcxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oXG5AQCAtODEsMTAgKzgxLDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBhY3RfZ2FwKHVuc2lnbmVkIGludCBvcmRlcilcbiBcdHJldHVybiBtaW4oMlVMIFx1MDAzY1x1MDAzYyBvcmRlciwgQ09NUEFDVF9DTFVTVEVSX01BWCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG4te1xuLVx0cmV0dXJuIGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0tDT01QQUNURDtcbi19XG4gXG4gI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG4gXG5AQCAtMTAzLDcgKzk5LDcgQEAgZXh0ZXJuIHZvaWQgY29tcGFjdGlvbl9kZWZlcl9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuIFxuIGJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbiBcdFx0XHRcdFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG4tXG4rYm9vbCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKTtcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3J1bihpbnQgbmlkKTtcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3N0b3AoaW50IG5pZCk7XG4gZXh0ZXJuIHZvaWQgd2FrZXVwX2tjb21wYWN0ZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpO1xuQEAgLTEyMCw2ICsxMTYsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQga2NvbXBhY3RkX3J1bihpbnQgbmlkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCA4YjNkNDdhMzI1Y2NhLi5lYjEyZmY0Y2VhNmMyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xODA4LDggKzE4MDgsOCBAQCBleHRlcm4gc3RydWN0IHBpZCAqY2FkX3BpZDtcbiAjZGVmaW5lIFBGX1VTRURfTUFUSFx0XHQweDAwMDAyMDAwXHQvKiBJZiB1bnNldCB0aGUgZnB1IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSAqL1xuICNkZWZpbmUgUEZfVVNFUl9XT1JLRVJcdFx0MHgwMDAwNDAwMFx0LyogS2VybmVsIHRocmVhZCBjbG9uZWQgZnJvbSB1c2Vyc3BhY2UgdGhyZWFkICovXG4gI2RlZmluZSBQRl9OT0ZSRUVaRVx0XHQweDAwMDA4MDAwXHQvKiBUaGlzIHRocmVhZCBzaG91bGQgbm90IGJlIGZyb3plbiAqL1xuLSNkZWZpbmUgUEZfS0NPTVBBQ1REXHRcdDB4MDAwMTAwMDBcdC8qIEkgYW0ga2NvbXBhY3RkICovXG4tI2RlZmluZSBQRl9LU1dBUERcdFx0MHgwMDAyMDAwMFx0LyogSSBhbSBrc3dhcGQgKi9cbisjZGVmaW5lIFBGX19IT0xFX18wMDAxMDAwMFx0MHgwMDAxMDAwMFxuKyNkZWZpbmUgUEZfX0hPTEVfXzAwMDIwMDAwXHQweDAwMDIwMDAwXG4gI2RlZmluZSBQRl9NRU1BTExPQ19OT0ZTXHQweDAwMDQwMDAwXHQvKiBBbGwgYWxsb2NhdGlvbnMgaW5oZXJpdCBHRlBfTk9GUy4gU2VlIG1lbWFsbG9jX25mc19zYXZlKCkgKi9cbiAjZGVmaW5lIFBGX01FTUFMTE9DX05PSU9cdDB4MDAwODAwMDBcdC8qIEFsbCBhbGxvY2F0aW9ucyBpbmhlcml0IEdGUF9OT0lPLiBTZWUgbWVtYWxsb2Nfbm9pb19zYXZlKCkgKi9cbiAjZGVmaW5lIFBGX0xPQ0FMX1RIUk9UVExFXHQweDAwMTAwMDAwXHQvKiBUaHJvdHRsZSB3cml0ZXMgb25seSBhZ2FpbnN0IHRoZSBiZGkgSSB3cml0ZSB0byxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCBhNzJlY2YxMmMwMGRiLi5mYzI5MGUyOWU0YTllIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMjUsMTIgKzI1LDYgQEBcbiAjZGVmaW5lIFNXQVBfRkxBR1NfVkFMSURcdChTV0FQX0ZMQUdfUFJJT19NQVNLIHwgU1dBUF9GTEFHX1BSRUZFUiB8IFxcXG4gXHRcdFx0XHQgU1dBUF9GTEFHX0RJU0NBUkQgfCBTV0FQX0ZMQUdfRElTQ0FSRF9PTkNFIHwgXFxcbiBcdFx0XHRcdCBTV0FQX0ZMQUdfRElTQ0FSRF9QQUdFUylcbi1cbi1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxuLXtcbi1cdHJldHVybiBjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LU1dBUEQ7XG4tfVxuLVxuIC8qXG4gICogTUFYX1NXQVBGSUxFUyBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2FwdHlwZXM6IHRoaW5ncyB3aGljaCBjYW5cbiAgKiBiZSBzd2FwcGVkIHRvLiAgVGhlIHN3YXAgdHlwZSBhbmQgdGhlIG9mZnNldCBpbnRvIHRoYXQgc3dhcCB0eXBlIGFyZVxuQEAgLTMzOSw2ICszMzMsNyBAQCB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTtcbiBcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKTtcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3N0b3AoaW50IG5pZCk7XG4rYm9vbCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKTtcbiBcbiAjaWZkZWYgQ09ORklHX1NXQVBcbiBpbnQgYWRkX3N3YXBfZXh0ZW50KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGFnZSxcbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGEwNDk0MTU1MTJjNjcuLjQ5OTRlMjAwYmJlY2QgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTMxOTcsNyArMzE5Nyw2IEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApXG4gXHRsb25nIGRlZmF1bHRfdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSFBBR0VfRlJBR19DSEVDS19JTlRFUlZBTF9NU0VDKTtcbiBcdGxvbmcgdGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcbiBcbi1cdGN1cnJlbnQtXHUwMDNlZmxhZ3MgfD0gUEZfS0NPTVBBQ1REO1xuIFx0c2V0X2ZyZWV6YWJsZSgpO1xuIFxuIFx0cGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciA9IDA7XG5AQCAtMzI1NCwxMSArMzI1MywxNSBAQCBzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxuIFx0XHRcdHBnZGF0LVx1MDAzZXByb2FjdGl2ZV9jb21wYWN0X3RyaWdnZXIgPSBmYWxzZTtcbiBcdH1cbiBcbi1cdGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfS0NPTVBBQ1REO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2Jvb2wgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcbit7XG4rXHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtjb21wYWN0ZDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rY29tcGFjdGQpO1xuK1xuIC8qXG4gICogVGhpcyBrY29tcGFjdGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxuICAqIE9uIG5vZGUtaG90LWFkZCwga2NvbXBhY3RkIHdpbGwgbW92ZWQgdG8gcHJvcGVyIGNwdXMgaWYgY3B1cyBhcmUgaG90LWFkZGVkLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGJmMjc4NmM3MjQ3ZDQuLjlmOTk2MzNkN2RjMWUgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC03NTM5LDcgKzc1MzksNyBAQCBzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxuIFx0ICogdXMgZnJvbSByZWN1cnNpdmVseSB0cnlpbmcgdG8gZnJlZSBtb3JlIG1lbW9yeSBhcyB3ZSdyZVxuIFx0ICogdHJ5aW5nIHRvIGZyZWUgdGhlIGZpcnN0IHBpZWNlIG9mIG1lbW9yeSBpbiB0aGUgZmlyc3QgcGxhY2UpLlxuIFx0ICovXG4tXHR0c2stXHUwMDNlZmxhZ3MgfD0gUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQ7XG4rXHR0c2stXHUwMDNlZmxhZ3MgfD0gUEZfTUVNQUxMT0M7XG4gXHRzZXRfZnJlZXphYmxlKCk7XG4gXG4gXHRXUklURV9PTkNFKHBnZGF0LVx1MDAzZWtzd2FwZF9vcmRlciwgMCk7XG5AQCAtNzU4OSwxMSArNzU4OSwxNyBAQCBzdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxuIFx0XHRcdGdvdG8ga3N3YXBkX3RyeV9zbGVlcDtcbiBcdH1cbiBcbi1cdHRzay1cdTAwM2VmbGFncyBcdTAwMjY9IH4oUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpO1xuK1x0dHNrLVx1MDAzZWZsYWdzIFx1MDAyNj0gflBGX01FTUFMTE9DO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2Jvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcbit7XG4rXHRyZXR1cm4ga3RocmVhZF9mdW5jKGN1cnJlbnQpID09IGtzd2FwZDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoY3VycmVudF9pc19rc3dhcGQpO1xuK1xuIC8qXG4gICogQSB6b25lIGlzIGxvdyBvbiBmcmVlIG1lbW9yeSBvciB0b28gZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBtZW1vcnkuICBJZlxuICAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXG5kaWZmIC0tZ2l0IGEvdG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaCBiL3Rvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmhcbmluZGV4IDc2ZjVlMDI1ZTEwNzYuLjgwN2VmODgxY2UyZDQgMTAwNjQ0XG4tLS0gYS90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXG4rKysgYi90b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oXG5AQCAtMzEsOCArMzEsNiBAQFxuICNkZWZpbmUgUEZfSURMRVx0XHRcdFx0MHgwMDAwMDAwMlx0LyogSSBhbSBhbiBJRExFIHRocmVhZCAqL1xuICNkZWZpbmUgUEZfSU9fV09SS0VSXHRcdFx0MHgwMDAwMDAxMFx0LyogVGFzayBpcyBhbiBJTyB3b3JrZXIgKi9cbiAjZGVmaW5lIFBGX1dRX1dPUktFUlx0XHRcdDB4MDAwMDAwMjBcdC8qIEknbSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi9cbi0jZGVmaW5lIFBGX0tDT01QQUNURFx0XHRcdDB4MDAwMTAwMDAgICAgICAvKiBJIGFtIGtjb21wYWN0ZCAqL1xuLSNkZWZpbmUgUEZfS1NXQVBEXHRcdFx0MHgwMDAyMDAwMCAgICAgIC8qIEkgYW0ga3N3YXBkICovXG4gI2RlZmluZSBQRl9LVEhSRUFEXHRcdFx0MHgwMDIwMDAwMFx0LyogSSBhbSBhIGtlcm5lbCB0aHJlYWQgKi9cbiAjZGVmaW5lIFBGX0VYSVRJTkdcdFx0XHQweDAwMDAwMDA0XG4gI2RlZmluZSBDTE9DS19NT05PVE9OSUNcdFx0XHQxXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzowNi45MTgwMDAxMjFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODE2MDYxNDYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBSZWZhY3RvcmluZyBUYXNrIEZsYWdzIGFuZCBUaHJlYWQgSWRlbnRpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBmb2N1c2luZyBvbiBjbGVhbmluZyB1cCBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGFuZCBtYW5hZ2VzIHRhc2tzLCBzcGVjaWZpY2FsbHkgYGtjb21wYWN0ZGAgYW5kIGBrc3dhcGRgLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBmbGFncy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBtb3ZpbmcgYXdheSBmcm9tIGRpcmVjdGx5IGNoZWNraW5nIHRhc2sgZmxhZ3MgKGBQRl9NRU1BTExPQ2AsIGBQRl9LU1dBUERgLCBgUEZfS0NPTVBBQ1REYCkgaW4gZmF2b3Igb2YgYSBtb3JlIHRhcmdldGVkIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIHRhc2sgaXMgdGhlIGtjb21wYWN0ZCBvciBrc3dhcGQgdGhyZWFkLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHJlZmFjdG9yaW5nIHRvIG1lLlxuXG5TcGVjaWZpY2FsbHk6XG5cbiogICAqKmBmcy9pb21hcC9idWZmZXJlZC1pby5jYDoqKiBUaGUgY2hhbmdlIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBpcyBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gIFRoZSBvcmlnaW5hbCBjaGVjayBhZ2FpbnN0IGAoUEZfTUVNQUxMT0MgfCBQRl9LU1dBUEQpYCBpcyBiZWluZyBzaW1wbGlmaWVkIHRvIGp1c3QgYFBGX01FTUFMTE9DYC4gVGhpcyBzdWdnZXN0cyBhbiBpbXBsaWNpdCBkZXBlbmRlbmN5IG9uIGBQRl9LU1dBUERgIGlzIGJlaW5nIHJlbW92ZWQsIHNvIHdlIHdpbGwgbmVlZCB0byBjaGVjayB0aGUgcmF0aW9uYWxlIGFuZCB0aGUgY29udGV4dC5cbiogICAqKmBmcy94ZnMvbGlieGZzL3hmc19idHJlZS5jYCBhbmQgYGZzL3hmcy94ZnNfcGxhdGZvcm0uaGA6KiogIFhGUyBzZWVtcyB0byBiZSBhIGtleSBiZW5lZmljaWFyeSBvZiB0aGlzIGNoYW5nZS4gSXQncyByZW1vdmluZyBtZW50aW9ucyBvZiBga3N3YXBkYCBmcm9tIGl0cyBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3Jvcywgd2hpY2ggYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZ29hbCBvZiBkZWNvdXBsaW5nIHRoZXNlIHByb2Nlc3NlcyBmcm9tIGRpcmVjdGx5IHVzaW5nIHRoZSBmbGFncy5cbiogICAqKmBpbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaGAsIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAsIGBpbmNsdWRlL2xpbnV4L3NjaGVkLmhgOioqICBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZXNlIGhlYWRlcnMuICBXZSdyZSBzZWVpbmcgdGhlIHJlbW92YWwgb2YgaW5saW5lIGZ1bmN0aW9ucyBsaWtlIGBjdXJyZW50X2lzX2tjb21wYWN0ZCgpYCBhbmQgYGN1cnJlbnRfaXNfa3N3YXBkKClgLCB3aGljaCBwcmV2aW91c2x5IHJlbGllZCBvbiBkaXJlY3QgZmxhZyBjaGVja2luZy4gIFRoZXNlIGFyZSBiZWluZyByZXBsYWNlZCB3aXRoIGRlY2xhcmF0aW9ucyBvZiBtb3JlIGdlbmVyaWMgYGJvb2xgIGZ1bmN0aW9ucy4gIEltcG9ydGFudGx5LCB0aGUgdW5kZXJseWluZyBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgYml0IGZsYWdzIGFyZSBiZWluZyByZW1hcHBlZCB0byBcImhvbGVcIiBmbGFncywgd2hpY2ggaW1wbGllcyB0aGVzZSBmbGFncyBtYXkgYmUgZnJlZWQgdXAgZm9yIG90aGVyIHVzZXMuXG4qICAgKipgbW0vY29tcGFjdGlvbi5jYCBhbmQgYG1tL3Ztc2Nhbi5jYDoqKiBUaGlzIGlzIHdoZXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGlmdCBvY2N1cnMuICBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSBmbGFncywgdGhlIGNvZGUgbm93IHV0aWxpemVzIGBrdGhyZWFkX2Z1bmMoY3VycmVudClgIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIHRocmVhZCBpcyB0aGUga2NvbXBhY3RkIG9yIGtzd2FwZCBrZXJuZWwgdGhyZWFkLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gY2hlY2sgaG93IGBrdGhyZWFkX2Z1bmNgIHdvcmtzLiBUaGF0J3MgYSBuZXcgYWJzdHJhY3Rpb24gaGVyZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdG8gYmUgc3VyZSB0aGlzIGlzIGNvcnJlY3QuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIGNvZGUncyBiZWhhdmlvciByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbXBhY3Rpb24sIGFuZCBzd2FwcGluZywgbm93IHRoYXQgZmxhZ3MgYXJlIG5vdCBkaXJlY3RseSBlbXBsb3llZC5cbiogICAqKmB0b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oYDoqKiAgVGhlIEJQRiB0b29scyBhcmUgYWxzbyBiZWluZyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBmbGFnIGRlZmluaXRpb25zIGFuZCBob3BlZnVsbHkgdGhlIHRocmVhZCBpZGVudGlmaWNhdGlvbiBjaGFuZ2UuXG5cblNvIHRoZSBtYWluIHRocnVzdCBhcHBlYXJzIHRvIGJlOlxuXG4xLiAgKipSZWZhY3RvcmluZyBUaHJlYWQgSWRlbnRpZmljYXRpb246KiogIE1vdmluZyBhd2F5IGZyb20gZGlyZWN0IGZsYWcgY2hlY2tzIChgUEZfS0NPTVBBQ1REYCwgYFBGX0tTV0FQRGApIHRvd2FyZHMgYSBkZWRpY2F0ZWQgZnVuY3Rpb24gKGBrdGhyZWFkX2Z1bmMoY3VycmVudClgKSB0byBpZGVudGlmeSBrY29tcGFjdGQgYW5kIGtzd2FwZCB0aHJlYWRzLlxuMi4gICoqRmxhZyBDb25zb2xpZGF0aW9uL1JlLXVzZSoqOiBCeSBjaGFuZ2luZyB0aGUgZXhpc3RpbmcgZmxhZ3MgdG8gYFBGX19IT0xFX18wMDAxMDAwMGAgYW5kIGBQRl9fSE9MRV9fMDAwMjAwMDBgIHRoZSBtZW1vcnkgYXJlYSBpcyBmcmVlZCB1cCBmb3IgcmUtdXNlLlxuMy4gICoqRW5jYXBzdWxhdGlvbjoqKiBJbXByb3ZlZCBlbmNhcHN1bGF0aW9uIGJ5IGNlbnRyYWxpemluZyB0aGUgdGhyZWFkIGlkZW50aXR5IGxvZ2ljLCBpbXByb3ZpbmcgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYGt0aHJlYWRfZnVuYyh0c2spYCBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIGdyZXAgZm9yIGl0cyBkZWZpbml0aW9uIGFuZCB1c2FnZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwgdG8gdmVyaWZ5IHRoaXMgYWJzdHJhY3Rpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zLiBJIG11c3QgdW5kZXJzdGFuZCBpZiB0aGlzIG5ldyBmdW5jdGlvbiBpcyB0aHJlYWQtc2FmZSBhbmQgZWZmaWNpZW50LCBhbmQgaWYgaXQgYWZmZWN0cyBob3cgdGhlc2UgcHJvY2Vzc2VzIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gV2Ugd2lsbCBuZWVkIHRvIGNoZWNrIHdoYXQgaW1wbGljYXRpb25zIHRoaXMgaGFzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNjaGVkdWxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzoxNS4wNzg2MTg2OTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ5NDEzNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3RocmVhZF9mdW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYz01OTY9c3RhdGljIHN0cnVjdCBzaW1wbGVfd29ya19xdWV1ZSAqZ2V0X2N1cnJlbnRfdGhyZWFkX3dvcmtfcXVldWUodm9pZClcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYy02MDYtXFxuZHJpdmVycy9tZC9kbS12ZG8vZnVubmVsLXdvcmtxdWV1ZS5jOjYwNzpcXHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpICE9IHdvcmtfcXVldWVfcnVubmVyKVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Z1bm5lbC13b3JrcXVldWUuYy02MDgtXFx0XFx0LyogTm90IGEgVkRPIHdvcmsgcXVldWUgdGhyZWFkLiAqL1xcbi0tXFxuZnMvbmZzZC9uZnNzdmMuYz01OTU9c3RydWN0IHN2Y19ycXN0ICpuZnNkX2N1cnJlbnRfcnFzdCh2b2lkKVxcbmZzL25mc2QvbmZzc3ZjLmMtNTk2LXtcXG5mcy9uZnNkL25mc3N2Yy5jOjU5NzpcXHRpZiAoa3RocmVhZF9mdW5jKGN1cnJlbnQpID09IG5mc2QpXFxuZnMvbmZzZC9uZnNzdmMuYy01OTgtXFx0XFx0cmV0dXJuIGt0aHJlYWRfZGF0YShjdXJyZW50KTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3RocmVhZC5oPTExMj1ib29sIGt0aHJlYWRfZnJlZXphYmxlX3Nob3VsZF9zdG9wKGJvb2wgKndhc19mcm96ZW4pO1xcbmluY2x1ZGUvbGludXgva3RocmVhZC5oOjExMzp2b2lkICprdGhyZWFkX2Z1bmMoc3RydWN0IHRhc2tfc3RydWN0ICprKTtcXG5pbmNsdWRlL2xpbnV4L2t0aHJlYWQuaC0xMTQtdm9pZCAqa3RocmVhZF9kYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqayk7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jPTIwOT1FWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX2ZyZWV6YWJsZV9zaG91bGRfc3RvcCk7XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTIxMS0vKipcXG5rZXJuZWwva3RocmVhZC5jOjIxMjogKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXFxua2VybmVsL2t0aHJlYWQuYy0yMTMtICogQHRhc2s6IGt0aHJlYWQgdGFzayBpbiBxdWVzdGlvblxcbi0tXFxua2VybmVsL2t0aHJlYWQuYy0yMTYtICovXFxua2VybmVsL2t0aHJlYWQuYzoyMTc6dm9pZCAqa3RocmVhZF9mdW5jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG5rZXJuZWwva3RocmVhZC5jLTIxOC17XFxuLS1cXG5rZXJuZWwva3RocmVhZC5jLTIyMy19XFxua2VybmVsL2t0aHJlYWQuYzoyMjQ6RVhQT1JUX1NZTUJPTF9HUEwoa3RocmVhZF9mdW5jKTtcXG5rZXJuZWwva3RocmVhZC5jLTIyNS1cXG4tLVxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaD0xMTg9c3RhdGljIGlubGluZSB2b2lkIG5iY29uX2t0aHJlYWRfd2FrZShzdHJ1Y3QgY29uc29sZSAqY29uKVxcbi0tXFxua2VybmVsL3ByaW50ay9pbnRlcm5hbC5oLTEyOC1cXHQgKlxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaDoxMjk6XFx0ICogVGhpcyBwYWlycyB3aXRoIG5iY29uX2t0aHJlYWRfZnVuYzpBLlxcbmtlcm5lbC9wcmludGsvaW50ZXJuYWwuaC0xMzAtXFx0ICovXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTE4MD1zdGF0aWMgYm9vbCBuYmNvbl9rdGhyZWFkX3Nob3VsZF93YWtldXAoc3RydWN0IGNvbnNvbGUgKmNvbiwgc3RydWN0IG5iY29uX2NvbnRleHQgKmN0eHQpXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNC0vKipcXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTIxNTogKiBuYmNvbl9rdGhyZWFkX2Z1bmMgLSBUaGUgcHJpbnRlciB0aHJlYWQgZnVuY3Rpb25cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTIxNi0gKiBAX19jb25zb2xlOlxcdENvbnNvbGUgdG8gb3BlcmF0ZSBvblxcbi0tXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEyMTktICovXFxua2VybmVsL3ByaW50ay9uYmNvbi5jOjEyMjA6c3RhdGljIGludCBuYmNvbl9rdGhyZWFkX2Z1bmModm9pZCAqX19jb25zb2xlKVxcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjIxLXtcXG4tLVxcbmtlcm5lbC9wcmludGsvbmJjb24uYy0xMjQ0LVxcdFxcdFxcdCAgIG5iY29uX2t0aHJlYWRfc2hvdWxkX3dha2V1cChjb24sIGN0eHQpLFxcbmtlcm5lbC9wcmludGsvbmJjb24uYzoxMjQ1OlxcdFxcdFxcdCAgIFRBU0tfSU5URVJSVVBUSUJMRSk7IC8qIExNTShuYmNvbl9rdGhyZWFkX2Z1bmM6QSkgKi9cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTI0Ni1cXG4tLVxcbmtlcm5lbC9wcmludGsvbmJjb24uYz0xMjkzPXN0YXRpYyBpbmxpbmUgYm9vbCByY3V3YWl0X2hhc19zbGVlcGVyKHN0cnVjdCByY3V3YWl0ICp3KVxcbi0tXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzMDMtXFx0ICpcXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTMwNDpcXHQgKiBUaGlzIHBhaXJzIHdpdGggbmJjb25fa3RocmVhZF9mdW5jOkEuXFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzMDUtXFx0ICovXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM9MTM3NT1ib29sIG5iY29uX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBjb25zb2xlICpjb24pXFxuLS1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmMtMTM4My1cXG5rZXJuZWwvcHJpbnRrL25iY29uLmM6MTM4NDpcXHRrdCA9IGt0aHJlYWRfcnVuKG5iY29uX2t0aHJlYWRfZnVuYywgY29uLCBcXFwicHIvJXMlZFxcXCIsIGNvbi1cXHUwMDNlbmFtZSwgY29uLVxcdTAwM2VpbmRleCk7XFxua2VybmVsL3ByaW50ay9uYmNvbi5jLTEzODUtXFx0aWYgKFdBUk5fT04oSVNfRVJSKGt0KSkpIHtcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzY1Nj1zdGF0aWMgYm9vbCBsZWdhY3lfa3RocmVhZF9zaG91bGRfd2FrZXVwKHZvaWQpXFxuLS1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jLTM3MDMtXFxua2VybmVsL3ByaW50ay9wcmludGsuYzozNzA0OnN0YXRpYyBpbnQgbGVnYWN5X2t0aHJlYWRfZnVuYyh2b2lkICp1bnVzZWQpXFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzA1LXtcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmM9MzcyOD1zdGF0aWMgYm9vbCBsZWdhY3lfa3RocmVhZF9jcmVhdGUodm9pZClcXG4tLVxcbmtlcm5lbC9wcmludGsvcHJpbnRrLmMtMzczMy1cXG5rZXJuZWwvcHJpbnRrL3ByaW50ay5jOjM3MzQ6XFx0a3QgPSBrdGhyZWFkX3J1bihsZWdhY3lfa3RocmVhZF9mdW5jLCBOVUxMLCBcXFwicHIvbGVnYWN5XFxcIik7XFxua2VybmVsL3ByaW50ay9wcmludGsuYy0zNzM1LVxcdGlmIChXQVJOX09OKElTX0VSUihrdCkpKSB7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzI1OT1ib29sIGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXFxubW0vY29tcGFjdGlvbi5jLTMyNjAte1xcbm1tL2NvbXBhY3Rpb24uYzozMjYxOlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkO1xcbm1tL2NvbXBhY3Rpb24uYy0zMjYyLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zMTc0PWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTMxNzUte1xcbm1tL2todWdlcGFnZWQuYzozMTc2OlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2h1Z2VwYWdlZDtcXG5tbS9raHVnZXBhZ2VkLmMtMzE3Ny19XFxuLS1cXG5tbS92bXNjYW4uYz03NTk3PWJvb2wgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG5tbS92bXNjYW4uYy03NTk4LXtcXG5tbS92bXNjYW4uYzo3NTk5OlxcdHJldHVybiBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga3N3YXBkO1xcbm1tL3Ztc2Nhbi5jLTc2MDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTo1MzoxNi42NjM1Njg1NDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1NzUxMDIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBga3RocmVhZF9mdW5jYCBpbiBga2VybmVsL2t0aHJlYWQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IGBrdGhyZWFkX2Z1bmNgIHdpdGhpbiBga2VybmVsL2t0aHJlYWQuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBrZXJuZWwgdGhyZWFkcyBhcmUgYWN0dWFsbHkgKmRvaW5nKiB0aGVpciB3b3JrLiBJIGtub3cgdGhlIGNvcmUgY29uY2VwdDogdGhlc2UgYXJlIGxpZ2h0d2VpZ2h0IHByb2Nlc3NlcyB3aXRoaW4gdGhlIGtlcm5lbCwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIHdoZXJlIHRoZSBkZXZpbCBpcy4gSSdtIGFzc3VtaW5nIGl0J3MgaGFuZGxpbmcgdGhlIGV4ZWN1dGlvbiBsb29wLCBwb3RlbnRpYWxseSBtYW5hZ2luZyB0aGUgdGhyZWFkJ3Mgc3RhdGUsIGFuZCBwcm9iYWJseSBpbnRlcmFjdGluZyB3aXRoIHRoZSBzY2hlZHVsZXIuIEknbSBhbHNvIGJldHRpbmcgdGhlcmUncyBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIGBrdGhyZWFkX2NyZWF0ZWAgZnVuY3Rpb24sIGxpa2VseSBzZXR0aW5nIHVwIHRoZSB0aHJlYWQncyBpbml0aWFsIGNvbnRleHQuIEknbGwgbmVlZCB0byBsb29rIGZvciBjYWxscyByZWxhdGVkIHRvIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVz4oCUbXV0ZXhlcywgc2VtYXBob3JlcywgbWF5YmUgZXZlbiBzcGlubG9ja3PigJR0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0aHJlYWRzIGNvb3BlcmF0ZSAob3IgZG9uJ3QpIHdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCB1c2VyLXNwYWNlIHByb2Nlc3Nlcy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGxvZ2ljIGZvciBoYW5kbGluZyBzaWduYWxzIG9yIG90aGVyIGZvcm1zIG9mIGludGVyLXRocmVhZCBjb21tdW5pY2F0aW9uLCB0b28uIEZpbmFsbHksIEknbSBob3BpbmcgdG8gc2VlIGEgc29saWQgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3k7IGEgcm9idXN0IGtlcm5lbCBuZWVkcyB0byBncmFjZWZ1bGx5IG1hbmFnZSB1bmV4cGVjdGVkIHNpdHVhdGlvbnMgd2l0aGluIGl0cyB0aHJlYWRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBhY2N1cmF0ZSBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODQzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUzOjE5LjEyMTA4MTczNFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2t0aHJlYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTE6XFx0LyoqXFxuIDIxMjpcXHQgKiBrdGhyZWFkX2Z1bmMgLSByZXR1cm4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBvbiBrdGhyZWFkIGNyZWF0aW9uXFxuIDIxMzpcXHQgKiBAdGFzazoga3RocmVhZCB0YXNrIGluIHF1ZXN0aW9uXFxuIDIxNDpcXHQgKlxcbiAyMTU6XFx0ICogUmV0dXJucyBOVUxMIGlmIHRoZSB0YXNrIGlzIG5vdCBhIGt0aHJlYWQuXFxuIDIxNjpcXHQgKi9cXG4gMjE3OlxcdHZvaWQgKmt0aHJlYWRfZnVuYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuIDIxODpcXHR7XFxuIDIxOTpcXHRcXHRzdHJ1Y3Qga3RocmVhZCAqa3RocmVhZCA9IHRza19pc19rdGhyZWFkKHRhc2spO1xcbiAyMjA6XFx0XFx0aWYgKGt0aHJlYWQpXFxuIDIyMTpcXHRcXHRcXHRyZXR1cm4ga3RocmVhZC1cXHUwMDNldGhyZWFkZm47XFxuIDIyMjpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjIzOlxcdH1cXG4gMjI0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGt0aHJlYWRfZnVuYyk7XFxuIDIyNTpcXHRcXG4gMjI2OlxcdC8qKlxcbiAyMjc6XFx0ICoga3RocmVhZF9kYXRhIC0gcmV0dXJuIGRhdGEgdmFsdWUgc3BlY2lmaWVkIG9uIGt0aHJlYWQgY3JlYXRpb25cXG4gMjI4OlxcdCAqIEB0YXNrOiBrdGhyZWFkIHRhc2sgaW4gcXVlc3Rpb25cXG4gMjI5OlxcdCAqXFxuIDIzMDpcXHQgKiBSZXR1cm4gdGhlIGRhdGEgdmFsdWUgc3BlY2lmaWVkIHdoZW4ga3RocmVhZCBAdGFzayB3YXMgY3JlYXRlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6NTM6MTkuMTIxMjE1NzgzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxNTc1OTQ4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFydGljdWxhcmx5IHdoZXJlIGtlcm5lbCBkYXRhIGludGVyYWN0cyB3aXRoIHVzZXJzcGFjZS4gVGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuRmlyc3QsIEkgZXhhbWluZWQgZm9yIGFueSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgcGFkZGluZyBvciBmaWVsZHMgbWlnaHQgbm90IGJlIHByb3Blcmx5IGluaXRpYWxpemVkLiAqKkdvb2QgbmV3cyoqLCBub3RoaW5nIGp1bXBlZCBvdXQuIEkgYWxzbyBjaGVja2VkIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFnYWluLCAqKmNsZWFyKiouIEkgY2FyZWZ1bGx5IGxvb2tlZCBhdCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aG9zZSBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIHRoZSByZW1vdmFsIG9mIHRoZSBga3N3YXBkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgeGZzX2J0cmVlX3NwbGl0X2FyZ3NgIHBpcXVlZCBteSBpbnRlcmVzdC4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIGl0J3MgcmVtb3ZpbmcgYSBzdGFjay1hbGxvY2F0ZWQgZmllbGQsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBhcyBpdCByZWR1Y2VzIG1lbW9yeSBmb290cHJpbnQgYW5kIG1pdGlnYXRlcyBwb3RlbnRpYWwgc3RhY2sgb3ZlcmZsb3cgcmlza3MsIHNvIG5vIHByb2JsZW1zIHRoZXJlLiBGaW5hbGx5LCBJIGRvdWJsZSBjaGVja2VkIGZvciBhbnkgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzIGZyb20gZXhpc3RpbmcgYnVmZmVycywgYnV0IEkgZm91bmQgbm90aGluZyBvZiBjb25jZXJuLlxuXG5OZXh0LCBJIGxvb2tlZCBhdCB0aGUgc3BlY2lmaWMgY29kZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGlvbWFwX3dyaXRlcGFnZXNgIHRvIGNoYW5nZSBhIFdBUk5fT04gY2hlY2sgZm9yIHJlY2xhaW0gY29udGV4dCwgY2hhbmdpbmcgaG93IHRoZSByZWNsYWltIGNvbnRleHQgaXMgZXZhbHVhdGVkLiBUaGlzIHNlZW1zIHRvIGJlIGEgYmVoYXZpb3JhbCBjaGFuZ2UuIFRoZSBgeGZzX2J0cmVlLmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHJlbW92ZSBrc3dhcGQgZmxhZyBpbmhlcml0YW5jZS4gU2V2ZXJhbCBmaWxlcyBsaWtlIGBjb21wYWN0aW9uLmhgLCBgc3dhcC5oYCwgYHNjaGVkLmhgLCBgY29tcGFjdGlvbi5jYCwgYW5kIGB2bXNjYW4uY2AgYXJlIHJlbW92aW5nIGBQRl9LQ09NUEFDVERgIGFuZCBgUEZfS1NXQVBEYCB0YXNrIGZsYWdzLCByZXBsYWNpbmcgYGN1cnJlbnRfaXNfa2NvbXBhY3RkKClgIGFuZCBgY3VycmVudF9pc19rc3dhcGQoKWAgd2l0aCBhIGt0aHJlYWQgZnVuY3Rpb24gY2hlY2sgKGBrdGhyZWFkX2Z1bmMoY3VycmVudCkgPT0ga2NvbXBhY3RkIC8ga3N3YXBkYCkuIFRoaXMgaXMgYSByZWZhY3RvcmluZyBhcm91bmQgdGFzayBpZGVudGlmaWNhdGlvbi5cblxuTXkgY2VudHJhbCBxdWVzdGlvbiBpcyBhbHdheXMgXCJBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcz9cIiBBbmQgdGhlIGFuc3dlciwgYmFzZWQgb24gdGhpcyByZXZpZXcsIGlzIGEgZGVmaW5pdGUgKipubyoqLiBUaGVzZSBjaGFuZ2VzIGFwcGVhciB0byBiZSByZWZhY3RvcmluZyB0aGUgcHJvY2VzcyBmbGFncyBhbmQgdXNlIG9mIGt0aHJlYWQgZnVuY3Rpb25zLiBUaGlzIGlzIGEgZ29vZCBzaWduOyBJIHNlZSBubyByaXNrLlxuXG5SZWdhcmRpbmcgS01TQU4gdmVyc3VzIEtBU0FOLCB0aGlzIHBhdGNoIGlzIHVubGlrZWx5IHRvIGJlIGZsYWdnZWQuIEtBU0FOIGFuZCB0aGUgb3RoZXIgZGV0ZWN0b3JzIGFyZSBncmVhdCBmb3IgZnVuY3Rpb25hbCB2ZXJpZmljYXRpb24gYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSBnZWFyZWQgdG93YXJkcyBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgYW5kIHBvdGVudGlhbCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gU2luY2UgSSd2ZSBmb3VuZCBubyBldmlkZW5jZSBvZiB0aG9zZSwgdGhpcyBwYXRjaCBzaG91bGRuJ3QgbmVlZCBhIEtNU0FOIGZsYWcuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdGhyb3VnaCB0aGUgY2hlY2tsaXN0IG9uZSBtb3JlIHRpbWU6IERvIGFueSBzdHJ1Y3RzIGhhdmUgdW5pbml0aWFsaXplZCBwYWRkaW5nPyBOby4gSXMgYW55dGhpbmcgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEFyZSB0aGVyZSBhbnkgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcyB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHJlZ2lvbnM/IE5vLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc3RyYWlnaHRmb3J3YXJkLCBhbmQgdGhlIGNoYW5nZXMgYXJlIHdlbGwtZGVmaW5lZC4gSSdtIGNvbWZvcnRhYmxlIHNheWluZyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQzLCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjUzOjI1LjI3ODgxNTE4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIGBrc3dhcGRgIGFuZCBga2NvbXBhY3RkYCB0aHJlYWRzLiBJdCBlbGltaW5hdGVzIHRoZSBgUEZfS1NXQVBEYCBhbmQgYFBGX0tDT01QQUNURGAgcHJvY2VzcyBmbGFncyBpbiBmYXZvciBvZiBjaGVja2luZyB0aGUga3RocmVhZCBjcmVhdGlvbiBmdW5jdGlvbiBwb2ludGVyIChga3RocmVhZF9mdW5jKGN1cnJlbnQpYCksIHNpbXBsaWZpZXMgd2FybmluZyBjaGVja3MgaW4gYGlvbWFwX3dyaXRlcGFnZXNgLCBhbmQgcmVtb3ZlcyB1bnVzZWQgZmxhZyBpbmhlcml0YW5jZSBpbiBYRlMgYnRyZWUgc3BsaXQgd29ya3F1ZXVlIGl0ZW1zLlxcblxcbk5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHlfdG9fdXNlciBwYXRocywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBkYXRhIGJ1ZmZlciBtYW5pcHVsYXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIGhvdyB0aGUga2VybmVsIGlkZW50aWZpZXMgYGtzd2FwZGAgYW5kIGBrY29tcGFjdGRgIHRocmVhZHMuIEl0IGVsaW1pbmF0ZXMgdGhlIGBQRl9LU1dBUERgIGFuZCBgUEZfS0NPTVBBQ1REYCBwcm9jZXNzIGZsYWdzIGluIGZhdm9yIG9mIGNoZWNraW5nIHRoZSBrdGhyZWFkIGNyZWF0aW9uIGZ1bmN0aW9uIHBvaW50ZXIgKGBrdGhyZWFkX2Z1bmMoY3VycmVudClgKSwgc2ltcGxpZmllcyB3YXJuaW5nIGNoZWNrcyBpbiBgaW9tYXBfd3JpdGVwYWdlc2AsIGFuZCByZW1vdmVzIHVudXNlZCBmbGFnIGluaGVyaXRhbmNlIGluIFhGUyBidHJlZSBzcGxpdCB3b3JrcXVldWUgaXRlbXMuXFxuXFxuTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weV90b191c2VyIHBhdGhzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGRhdGEgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowzlxhm[1] Phase: Succeeded StartedAt: 2026-09-03 09:53:36 +0000 UTC FinishedAt: 2026-09-03 09:53:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 09:53:36 +0000 UTC FinishedAt: 2026-09-03 09:53:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2] Phase: Succeeded StartedAt: 2026-09-03 09:53:36 +0000 UTC FinishedAt: 2026-09-03 13:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 09:53:36 +0000 UTC FinishedAt: 2026-09-03 13:32:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 09:53:36 +0000 UTC FinishedAt: 2026-09-03 09:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 09:53:36 +0000 UTC FinishedAt: 2026-09-03 09:53:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzlxhm/series-workflowzlxhm-convert-artifact-1471958047/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 09:53:46 +0000 UTC FinishedAt: 2026-09-03 10:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 09:53:46 +0000 UTC FinishedAt: 2026-09-03 10:09:44 +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:*d8b9f8d9-c7b7-466e-9f90-82e59a294675,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-workflowzlxhm/series-workflowzlxhm-convert-artifact-1471958047/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": "6b4bfc1f-cf85-46c3-b05e-4da3fd708ba4", "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-workflowzlxhm/series-workflowzlxhm-build-action-419741221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 09:53:46 +0000 UTC FinishedAt: 2026-09-03 10:09:34 +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:*d8b9f8d9-c7b7-466e-9f90-82e59a294675,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-workflowzlxhm/series-workflowzlxhm-convert-artifact-1471958047/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": "6b4bfc1f-cf85-46c3-b05e-4da3fd708ba4", "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-workflowzlxhm/series-workflowzlxhm-build-action-419741221/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 10:09:44 +0000 UTC FinishedAt: 2026-09-03 10:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 10:09:44 +0000 UTC FinishedAt: 2026-09-03 10:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 10:09:44 +0000 UTC FinishedAt: 2026-09-03 10:09:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 10:09:44 +0000 UTC FinishedAt: 2026-09-03 10:09:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzlxhm/series-workflowzlxhm-convert-artifact-949924014/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 10:09:54 +0000 UTC FinishedAt: 2026-09-03 10:11:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 10:09:54 +0000 UTC FinishedAt: 2026-09-03 10:11:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b4bfc1f-cf85-46c3-b05e-4da3fd708ba4,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-workflowzlxhm/series-workflowzlxhm-build-action-419741221/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-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 10:11:52 +0000 UTC FinishedAt: 2026-09-03 10:11:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 10:11:52 +0000 UTC FinishedAt: 2026-09-03 10:11:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 10:11:52 +0000 UTC FinishedAt: 2026-09-03 10:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 10:11:52 +0000 UTC FinishedAt: 2026-09-03 10:27:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d8b9f8d9-c7b7-466e-9f90-82e59a294675,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-workflowzlxhm/series-workflowzlxhm-convert-artifact-949924014/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": "22f9a86c-9d4e-45bf-9496-27064a381336", "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-workflowzlxhm/series-workflowzlxhm-build-action-1490511810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 10:11:52 +0000 UTC FinishedAt: 2026-09-03 10:27:42 +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:*d8b9f8d9-c7b7-466e-9f90-82e59a294675,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-workflowzlxhm/series-workflowzlxhm-convert-artifact-949924014/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": "22f9a86c-9d4e-45bf-9496-27064a381336", "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-workflowzlxhm/series-workflowzlxhm-build-action-1490511810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 10:27:52 +0000 UTC FinishedAt: 2026-09-03 10:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 10:27:52 +0000 UTC FinishedAt: 2026-09-03 10:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 10:27:52 +0000 UTC FinishedAt: 2026-09-03 10:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 10:27:52 +0000 UTC FinishedAt: 2026-09-03 10:29:42 +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:*22f9a86c-9d4e-45bf-9496-27064a381336,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-workflowzlxhm/series-workflowzlxhm-build-action-1490511810/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-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 10:29:52 +0000 UTC FinishedAt: 2026-09-03 13:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 10:29:52 +0000 UTC FinishedAt: 2026-09-03 13:32:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"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:*6b4bfc1f-cf85-46c3-b05e-4da3fd708ba4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*22f9a86c-9d4e-45bf-9496-27064a381336,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-workflowzlxhm/series-workflowzlxhm-build-action-419741221/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-workflowzlxhm/series-workflowzlxhm-build-action-1490511810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 10:29:52 +0000 UTC FinishedAt: 2026-09-03 10:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 10:29:52 +0000 UTC FinishedAt: 2026-09-03 10:29:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"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-workflowzlxhm/series-workflowzlxhm-convert-artifact-3733089107/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 10:29:52 +0000 UTC FinishedAt: 2026-09-03 10:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 10:29:52 +0000 UTC FinishedAt: 2026-09-03 10:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 10:29:52 +0000 UTC FinishedAt: 2026-09-03 10:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 10:30:02 +0000 UTC FinishedAt: 2026-09-03 13:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzlxhm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["iomap_writepages","current_is_kswapd","current_is_kcompactd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","SWAP","FS_IOMAP","XFS_FS"],"series_id":"1d80e1c0-8d09-4a49-8dcd-042bc2288daa","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 10:30:02 +0000 UTC FinishedAt: 2026-09-03 13:32:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b4bfc1f-cf85-46c3-b05e-4da3fd708ba4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*22f9a86c-9d4e-45bf-9496-27064a381336,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-workflowzlxhm/series-workflowzlxhm-build-action-419741221/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-workflowzlxhm/series-workflowzlxhm-build-action-1490511810/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-workflowzlxhm/series-workflowzlxhm-convert-artifact-3733089107/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,}