Name: series-workflowl2sgp Phase: Succeeded StartedAt: 2026-09-11 14:56:15 +0000 UTC FinishedAt: 2026-09-11 16:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[0] Phase: Succeeded StartedAt: 2026-09-11 14:56:15 +0000 UTC FinishedAt: 2026-09-11 15:21:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 14:56:15 +0000 UTC FinishedAt: 2026-09-11 15:21:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NETFILTER", "SYSCTL", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NETFILTER", "SYSCTL", "PROC_FS" ], "series_id": "56ccd6c8-8f37-478e-be54-3db3be47997e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_conntrack_hash_sysctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "6ebcf5074cff0402730c6981d2397139fee6322d", "base_tree": "nf-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgIGJ5IHJlbW92aW5nIHRoZSBnbG9iYWwgc3RhdGljIHZhcmlhYmxlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgYW5kIGluc3RlYWQgdXNpbmcgYSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBjdGxfdGFibGVgIGFuZCBsb2NhbCB2YXJpYWJsZSB0byByZXNpemUgdGhlIGNvbm50cmFjayBoYXNoIHRhYmxlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnVja2V0c2Agc3lzY3RsIGVudHJ5IGFuZCB3YXJyYW50cyBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBvciBzeXNjdGwgaGFuZGxpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzMTE3YjRiZDE4ODFkOGUxM2IyNmIzNTM5ZTA3MzYzMjRlMGNhZmQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTU6MTc6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5pbmRleCBmNGYyZDgyMTkyZDU0Li40YjY5MmExODRlOTQxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbkBAIC01MzMsMjcgJiM0Mzs1MzMsMjIgQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NvdW50KTtcbiAvKiBTeXNjdGwgc3VwcG9ydCAqL1xuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4tLyogc2l6ZSB0aGUgdXNlciAqd2FudHMgdG8gc2V0ICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciBfX3JlYWRfbW9zdGx5O1xuLVxuIHN0YXRpYyBpbnRcbiBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7XG4mIzQzO1x0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogbW9kdWxlX3BhcmFtIGhhc2hzaXplIGNvdWxkIGhhdmUgY2hhbmdlZCB2YWx1ZSAqL1xuLVx0bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7XG4mIzQzO1x0dG1wLmRhdGEgPSBcdTAwMjZodGFibGVfc2l6ZTtcbiBcbi1cdHJldCA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuJiM0MztcdHJldCA9IHByb2NfZG9pbnR2ZWMoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgfHwgIXdyaXRlKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogdXBkYXRlIHJldCwgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gc2F0aXNmeSByZXF1ZXN0ICovXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIpO1xuLVxuLVx0LyogdXBkYXRlIGl0IHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBieSBjb25udHJhY2sgKi9cbi1cdG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplO1xuJiM0MztcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NTcsNyAmIzQzOzY1Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuIFx0fSxcbiBcdFtORl9TWVNDVExfQ1RfQlVDS0VUU10gPSB7XG4gXHRcdC5wcm9jbmFtZSAgICAgICA9IFwmIzM0O25mX2Nvbm50cmFja19idWNrZXRzXCYjMzQ7LFxuLVx0XHQuZGF0YSAgICAgICAgICAgPSBcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcixcbiBcdFx0Lm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGludCksXG4gXHRcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXG4gXHRcdC5wcm9jX2hhbmRsZXIgICA9IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCxcbkBAIC0xMTUzLDggJiM0MzsxMTQ3LDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKVxuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF9zeXNjdGw7XG4gXHR9XG4tXG4tXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcbiAjZW5kaWZcbiBcbiBcdG5mX2Nvbm50cmFja19pbml0X2VuZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AgYnkgcmVtb3ZpbmcgdGhlIGdsb2JhbCBzdGF0aWMgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBhbmQgaW5zdGVhZCB1c2luZyBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGN0bF90YWJsZWAgYW5kIGxvY2FsIHZhcmlhYmxlIHRvIHJlc2l6ZSB0aGUgY29ubnRyYWNrIGhhc2ggdGFibGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCBzeXNjdGwgZW50cnkgYW5kIHdhcnJhbnRzIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IG9yIHN5c2N0bCBoYW5kbGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMxMTdiNGJkMTg4MWQ4ZTEzYjI2YjM1MzllMDczNjMyNGUwY2FmZDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxNToxNzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBmNGYyZDgyMTkyZDU0Li40YjY5MmExODRlOTQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC01MzMsMjcgJiM0Mzs1MzMsMjIgQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NvdW50KTsKIC8qIFN5c2N0bCBzdXBwb3J0ICovCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi0vKiBzaXplIHRoZSB1c2VyICp3YW50cyB0byBzZXQgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgX19yZWFkX21vc3RseTsKLQogc3RhdGljIGludAogbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCQkgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKJiM0MzsJdW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7CiYjNDM7CXN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlOwogCWludCByZXQ7CiAKLQkvKiBtb2R1bGVfcGFyYW0gaGFzaHNpemUgY291bGQgaGF2ZSBjaGFuZ2VkIHZhbHVlICovCi0JbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CiYjNDM7CXRtcC5kYXRhID0gJmFtcDtodGFibGVfc2l6ZTsKIAotCXJldCA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwomIzQzOwlyZXQgPSBwcm9jX2RvaW50dmVjKCZhbXA7dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAlpZiAocmV0ICZsdDsgMCB8fCAhd3JpdGUpCiAJCXJldHVybiByZXQ7CiAKIAkvKiB1cGRhdGUgcmV0LCB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBzYXRpc2Z5IHJlcXVlc3QgKi8KLQlyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIpOwotCi0JLyogdXBkYXRlIGl0IHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBieSBjb25udHJhY2sgKi8KLQluZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NTcsNyAmIzQzOzY1Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0gewogCX0sCiAJW05GX1NZU0NUTF9DVF9CVUNLRVRTXSA9IHsKIAkJLnByb2NuYW1lICAgICAgID0gJiMzNDtuZl9jb25udHJhY2tfYnVja2V0cyYjMzQ7LAotCQkuZGF0YSAgICAgICAgICAgPSAmYW1wO25mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyLAogCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKIAkJLnByb2NfaGFuZGxlciAgID0gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsLApAQCAtMTE1Myw4ICYjNDM7MTE0Nyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZCkKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfc3lzY3RsOwogCX0KLQotCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwogI2VuZGlmCiAKIAluZl9jb25udHJhY2tfaW5pdF9lbmQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBIYXNoIFRhYmxlIFNpemUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIHN0YW5kYWxvbmUgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLgoKRnJvbSBhIHF1aWNrIGRpZmYsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVtb3ZpbmcgdGhlIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqLiBUaGUgY29kZSBjaGFuZ2UgaW4gYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaXMgdGhlIGNydXggb2YgaXQuIFByZXZpb3VzbHksIHRoZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdhcyBhIGNvcHkgb2YgdGhlIGFjdHVhbCBoYXNoIHRhYmxlIHNpemUuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCB1c2luZyBgUkVBRF9PTkNFYCB0byBlbnN1cmUgYSBjb3JyZWN0IHZhbHVlLiBUaGUgYGN0bF90YWJsZWAgaXMgdGhlbiBjb3BpZWQsIHRoZSBkYXRhIHBvaW50ZXIgbW9kaWZpZWQgdG8gcG9pbnQgdG8gYGh0YWJsZV9zaXplYCwgYW5kIGBwcm9jX2RvaW50dmVjYCBpcyBjYWxsZWQuIENyaXRpY2FsbHksIHRoZSBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYCBmdW5jdGlvbiBub3cgb3BlcmF0ZXMgb24gdGhpcyBsb2NhbCBgaHRhYmxlX3NpemVgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHVzZXIgdmFyaWFibGUuIFRoaXMgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBzdGFsZSB2YWx1ZSBpc3N1ZSB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVyLiBUaGUgdXBkYXRlIG9mIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgYmFjayB0byBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplYCBhZnRlciBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYCBpcyBnb25lLgoKVGhlIGNoYW5nZSBpbiBgbmZfY3Rfc3lzY3RsX3RhYmxlYCBpcyBzdHJhaWdodGZvcndhcmQ7IGl0IHJlbW92ZXMgdGhlIHJlZmVyZW5jZSB0byBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHNpbmNlIHRoZSBgY3RsX3RhYmxlYCBpcyBub3cgY29uc3QgYW5kIHRoZSBkYXRhIGlzIHNldCB0byBwb2ludCB0byBsb2NhbCBgaHRhYmxlX3NpemVgLiBBbmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgaW4gYG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRgIGlzIGFsc28gcmVtb3ZlZC4gVGhpcyBhbGwgbG9va3MgcmVsYXRlZC4KCk15IGluaXRpYWwgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGVuc3VyaW5nIHRoZSBjb3JyZWN0IGhhc2ggdGFibGUgc2l6ZSBpcyB1c2VkIGR1cmluZyB0aGUgcmVzaXplIG9wZXJhdGlvbiwgYXZvaWRpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3Igc3RhbGUgdmFsdWUgcmVhZC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvc3NpYmx5IHJlbGV2YW50IGNvbW1pdCBtZXNzYWdlcyB0byBjb25maXJtIHRoYXQgdGhpcyBhZGRyZXNzZXMgYSBrbm93biBpc3N1ZSwgbWF5YmUgcmVsYXRlZCB0byBtb2R1bGUgcGFyYW1ldGVyIHVwZGF0ZXMgb3IgY29uY3VycmVudCBhY2Nlc3MuIEtub3dpbmcgdGhlIGJpZ2dlciBwaWN0dXJlIGhlcmUgaXMgY3JpdGljYWwgYmVmb3JlIEkgY2FuIGZ1bGx5IGV2YWx1YXRlIHRoZSBzb3VuZG5lc3MgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNTpcdHUzMiBuZl9jb25udHJhY2tfY291bnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuIDUyNjpcdHtcbiA1Mjc6XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbmV0ICpjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XG4gNTI4Olx0XG4gNTI5Olx0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2Y25ldC1cdTAwM2Vjb3VudCk7XG4gNTMwOlx0fVxuIDUzMTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jb3VudCk7XG4gNTMyOlx0XG4gNTMzOlx0LyogU3lzY3RsIHN1cHBvcnQgKi9cbiA1MzQ6XHRcbiA1MzU6XHQjaWZkZWYgQ09ORklHX1NZU0NUTFxuIDUzNjpcdHN0YXRpYyBpbnRcbiA1Mzc6XHRuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiA1Mzg6XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiA1Mzk6XHR7XG4gNTQwOlx0XHR1bnNpZ25lZCBpbnQgaHRhYmxlX3NpemUgPSBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTtcbiA1NDE6XHRcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlO1xuIDU0MjpcdFx0aW50IHJldDtcbiA1NDM6XHRcbiA1NDQ6XHRcdHRtcC5kYXRhID0gXHUwMDI2aHRhYmxlX3NpemU7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRyZXQgPSBwcm9jX2RvaW50dmVjKFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4gNTQ3Olx0XHRpZiAocmV0IFx1MDAzYyAwIHx8ICF3cml0ZSlcbiA1NDg6XHRcdFx0cmV0dXJuIHJldDtcbiA1NDk6XHRcbiA1NTA6XHRcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xuIDU1MTpcdFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcbiA1NTI6XHRcdHJldHVybiByZXQ7XG4gNTUzOlx0fVxuIDU1NDpcdFxuIDU1NTpcdHN0YXRpYyBpbnRcbiA1NTY6XHRuZl9jb25udHJhY2tfbG9nX2ludmFsaWRfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gNTU3Olx0XHRcdFx0XHR2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIDU1ODpcdHtcbiA1NTk6XHRcdGludCByZXQsIGk7XG4gNTYwOlx0XG4gNTYxOlx0XHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiA1NjI6XHRcdGlmIChyZXQgXHUwMDNjIDAgfHwgIXdyaXRlKVxuIDU2MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDU2NDpcdFxuIDU2NTpcdFx0aWYgKCoodTggKil0YWJsZS1cdTAwM2VkYXRhID09IDApXG4gNTY2Olx0XHRcdHJldHVybiAwO1xuIDU2NzpcdFxuIDU2ODpcdFx0LyogTG9hZCBuZl9sb2dfc3lzbG9nIG9ubHkgaWYgbm8gbG9nZ2VyIGlzIGN1cnJlbnRseSByZWdpc3RlcmVkICovXG4gNTY5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORlBST1RPX05VTVBST1RPOyBpJiM0MzsmIzQzOykge1xuIDU3MDpcdFx0XHRpZiAobmZfbG9nX2lzX3JlZ2lzdGVyZWQoaSkpXG4gNTcxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTcyOlx0XHR9XG4gNTczOlx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDslc1wmIzM0OywgXCYjMzQ7bmZfbG9nX3N5c2xvZ1wmIzM0Oyk7XG4gNTc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgQ29tcGlsYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCBieSBwaW5wb2ludGluZyBleGFjdGx5IHdoZXJlIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCBpcyBjb21waWxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGFuZCBtb3N0IGRpcmVjdCByb3V0ZSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZWAgaXMgdHJlYXRlZCwgYW5kIGlmIGFueSBhc3NvY2lhdGVkIGBzeXNjdGxgIHNldHRpbmdzIGFyZSBpbnZvbHZlZC4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3BlY2lmaWMgZmlsZS4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgcmVhbGx5IHRoZSBmaXJzdCBwbGFjZSB0byBsb29rLiBJJiMzOTttIGFmdGVyIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBpdHMgY29tcGlsYXRpb24gaXMgY29uZGl0aW9uYWwsIGRlcGVuZGVudCBvbiBvdGhlciBtb2R1bGVzLCBvciBhbHdheXMgaW5jbHVkZWQuIEtub3dpbmcgaXRzIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgZGlyZWN0bHkgcG9pbnRzIHRvIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIG9yIGJ1aWxkIHJ1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19zdGFuZGFsb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSAmIzQzOz0gbmZuZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVx0Oj0gbmZfY29ubnRyYWNrX2NvcmUubyBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5vIG5mX2Nvbm50cmFja19leHBlY3QubyBuZl9jb25udHJhY2tfaGVscGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNi1cdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTQ3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGN0X2NwdV9zZXFfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy00ODAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NDgxOnN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy00ODIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MDgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTA5OnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmlfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTEwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTE0LSNlbHNlXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTE1OnN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MTktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTIwOnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmlfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTIxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9OTE3PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X25ldGZpbHRlcl90YWJsZVtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05MjgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6OTI5OnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfdGNwX3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTMwLVx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTYzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk2NDpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3NjdHBfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjUtXHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTg1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk4NjpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X2dyZV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk4Ny1cdFx0XHRcdFx0XHQgICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk5Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo5OTc6c3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTk4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAyOC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDI5Olx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKG5ldCwgdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMzA6XHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3NjdHBfc3lzY3RsKG5ldCwgdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMzE6XHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X2dyZV9zeXNjdGwobmV0LCB0YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAzMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA1Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDUzOnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmlfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDU0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA2Mi0jZWxzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwNjM6c3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA2NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNjctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA2ODpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA2OS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTEwNzM9c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2ZpbmlfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA3Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDc4Olx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9wcm9jKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA3OTpcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmlfc3lzY3RsKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA4MC19XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTEwODI9c3RhdGljIGludCBuZl9jb25udHJhY2tfcGVybmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDg3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwODg6XHRyZXQgPSBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChuZXQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwODktXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDkxLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwOTI6XHRyZXQgPSBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3Byb2MobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDkzLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTExMC1vdXRfaW5pdF9uZXQ6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTExMTpcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmlfcHJvYyhuZXQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExMTItb3V0X3Byb2M6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTExMzpcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmlfc3lzY3RsKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTExNC1cdHJldHVybiByZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTExMjc9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBuZl9jb25udHJhY2tfbmV0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTEzMy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMTM0OnN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTM1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTE2OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMTcwOnN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pKHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTE3MS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExNzktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTE4MDptb2R1bGVfaW5pdChuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMTgxOm1vZHVsZV9leGl0KG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIG5mX2Nvbm50cmFjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBgbmZfY29ubnRyYWNrYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGxpa2VseSBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBuZXR3b3JraW5nIG9yIHNlY3VyaXR5IGFuYWx5c2lzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBzeW1ib2wsIGl0cyBkZWZhdWx0IHNldHRpbmcsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMuIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgY2hlY2tpbmcgZm9yIHBvdGVudGlhbCB0cmlzdGF0ZSB2YWx1ZXMuIEtub3dpbmcgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQgaGVyZSBpcyBzdGVwIHplcm8gZm9yIGFueSBpbnZlc3RpZ2F0aW9uIEkgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiDigJMgSSYjMzk7bSB0aGlua2luZyBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgYSBtb2RpZmljYXRpb24gdG8gYW4gZXhpc3RpbmcgbmV0ZmlsdGVyIGZlYXR1cmUuIExldCBtZSBqdW1wIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMaW5lcyA4Mi0xMDAgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4uIFRoaXMgcmFuZ2Ugc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgZGVmaW5pdGlvbi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoZSBgY29uZmlnYCBrZXl3b3JkLCB0aGUgb3B0aW9u4oCZcyBuYW1lLCBpdHMgZGVmYXVsdCBzdGF0ZSAoaWYgYW55KSwgd2hhdCB0aGUgZGVwZW5kZW5jeSBjb25kaXRpb25zIGFyZSBhbmQgZXNwZWNpYWxseSwgd2hhdCB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcyBvcHRpb24gaXMgYW5kIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3c6IElzIGl0IGEgbmV3IGZlYXR1cmUgb3IgYW4gaW1wcm92ZW1lbnQ/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBleGlzdGluZyBtb2R1bGVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdHJlYXN1cmVzIHRoZXNlIGxpbmVzIGhvbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxuICA4MTpcdFxuICA4MjpcdGNvbmZpZyBORl9DT05OVFJBQ0tcbiAgODM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbiAgODQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4NTpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG4gIDg2Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXG4gIDg3Olx0XHRoZWxwXG4gIDg4Olx0XHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXG4gIDg5Olx0XHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXG4gIDkwOlx0XHQgIGludG8gY29ubmVjdGlvbnMuXG4gIDkxOlx0XG4gIDkyOlx0XHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcbiAgOTM6XHRcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcbiAgOTQ6XHRcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCYjMzk7IGJlbG93KS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk3Olx0XG4gIDk4Olx0Y29uZmlnIE5GX0xPR19TWVNMT0dcbiAgOTk6XHRcdHRyaXN0YXRlIFwmIzM0O1N5c2xvZyBwYWNrZXQgbG9nZ2luZ1wmIzM0O1xuIDEwMDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gMTAxOlx0XHRoZWxwXG4gMTAyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZSBzdXBwb3J0IGZvciBwYWNrZXQgbG9nZ2luZyB2aWEgc3lzbG9nLlxuIDEwMzpcdFx0ICBJdCBzdXBwb3J0cyBJUHY0LCBJUFY2LCBBUlAgYW5kIGNvbW1vbiB0cmFuc3BvcnQgcHJvdG9jb2xzIHN1Y2hcbiAxMDQ6XHRcdCAgYXMgVENQIGFuZCBVRFAuXG4gMTA1Olx0XHQgIFRoaXMgaXMgYSBzaW1wbGVyIGJ1dCBsZXNzIGZsZXhpYmxlIGxvZ2dpbmcgbWV0aG9kIGNvbXBhcmVkIHRvXG4gMTA2Olx0XHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXG4gMTA3Olx0XHQgIElmIGJvdGggYXJlIGVuYWJsZWQgdGhlIGJhY2tlbmQgdG8gdXNlIGNhbiBiZSBjb25maWd1cmVkIGF0IHJ1bi10aW1lXG4gMTA4Olx0XHQgIGJ5IG1lYW5zIG9mIHBlci1hZGRyZXNzLWZhbWlseSBzeXNjdGwgdHVuYWJsZXMuXG4gMTA5Olx0XG4gMTEwOlx0aWYgTkZfQ09OTlRSQUNLXG4gMTExOlx0Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbiAxMTI6XHRcdHRyaXN0YXRlXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG4gMTE1Olx0XHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbiAxMTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMTE3Olx0XHRoZWxwXG4gMTE4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiBtYXJrcywgdXNlZCBieSB0aGVcbiAxMTk6XHRcdCAgYENPTk5NQVJLJiMzOTsgdGFyZ2V0IGFuZCBgY29ubm1hcmsmIzM5OyBtYXRjaC4gU2ltaWxhciB0byB0aGUgbWFyayB2YWx1ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29ubnRyYWNrIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBgTkZfQ09OTlRSQUNLYCBoZXJlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHJlbGlhbnQgb24gYE5FVEZJTFRFUmAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQsIGFuZCBleHBlY3RlZC4gTW92aW5nIGRlZXBlciwgSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBzeXNjdGwgc3VwcG9ydCB3aXRoaW4gYG5mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgY29udHJvbHMgYXJlIGV4cG9zZWQuIEFoLCByaWdodCDigJMgSSBzZWUgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGFuIGAjaWZkZWYgQ09ORklHX1NZU0NUTGAuIFRoYXQgdGVsbHMgbWUgdGhhdCBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgY2FuIGVuYWJsZSBvciBkaXNhYmxlIHN5c2N0bCYjMzk7cywgYW5kIHRoZSBjb2RlIHdpbGwgcmVhY3QgYWNjb3JkaW5nbHkuIE5vdyBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBzeXNjdGwgdGFibGUgcmVnaXN0cmF0aW9uIHRvIGV4YW1pbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oYXNoX3N5c2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTUzNj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTM3Om5mX2Nvbm50cmFja19oYXNoX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTUzOC1cdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NjM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02NTYtXHRcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjU3Olx0XHQucHJvY19oYW5kbGVyICAgPSBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjU4LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25udHJhY2sgU3lzY3RsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5mX2N0X3N5c2N0bF90YWJsZWAgc3RydWN0dXJlLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYC5wcm9jbmFtZWAgaXMgc2V0IHRvICYjMzQ7bmZfY29ubnRyYWNrX2J1Y2tldHMsJiMzNDsgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBjb25udHJhY2sgaGFzaCBidWNrZXRzIGNvbmZpZ3VyYXRpb24sIGFzIEkmIzM5O2QgZXhwZWN0LiBBbmQgdGhlIGAucHJvY19oYW5kbGVyYCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgd2hpY2ggYWdhaW4sIGxpbmVzIHVwIHBlcmZlY3RseS4gU28gZmFyLCBzbyBnb29kIOKAkyB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBtYWtpbmcgc2Vuc2UsIGFuZCB0aGluZ3Mgc2VlbSB0byBiZSBwb2ludGluZyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIGZvciBtYW5hZ2luZyB0aGUgaGFzaCB0YWJsZS4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgbmZfY3Rfc3lzY3RsX3RhYmxlYCBpcyBhY3R1YWxseSAqcmVnaXN0ZXJlZCouIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGhvb2tlZCBpbnRvIHRoZSBzeXNjdGwgaW5mcmFzdHJ1Y3R1cmUuIExldCBtZSBxdWlja2x5IHNjYW4gdGhyb3VnaCBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2Ag4oCTIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHRoaXMga2luZCBvZiBpbml0aWFsaXphdGlvbiB0byBvY2N1ciwgZ2l2ZW4gdGhlIGNvbnRleHQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjYWxsIHRvIHNvbWV0aGluZyBsaWtlIGByZWdpc3Rlcl9zeXNjdGxgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiwgbGlrZWx5IGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgdGhlIG1vZHVsZSYjMzk7cyBsb2FkIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3Rfc3lzY3RsX3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NTgwPWVudW0gbmZfY3Rfc3lzY3RsX2luZGV4IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjM2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjYzNzpzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MzgtXHRbTkZfU1lTQ1RMX0NUX01BWF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTk5Nz1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAwMi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDAzOlx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMDQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTAwNTpcdHRhYmxlID0ga21lbWR1cChuZl9jdF9zeXNjdGxfdGFibGUsIHNpemVvZihuZl9jdF9zeXNjdGxfdGFibGUpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMDYtXHRcdFx0R0ZQX0tFUk5FTCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNDEtXHRcdFx0XHRcdFx0ICAgICB0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDQyOlx0XHRcdFx0XHRcdCAgICAgQVJSQVlfU0laRShuZl9jdF9zeXNjdGxfdGFibGUpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDQzLVx0aWYgKCFjbmV0LVx1MDAzZXN5c2N0bF9oZWFkZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTYxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29ubnRyYWNrIFN5c2N0bCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGNvbm50cmFjayBzeXNjdGwgc2V0dGluZ3MgYXJlIGluaXRpYWxpemVkLiBJIHJlbWVtYmVyIHRoYXQgYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgcmVnaXN0ZXJlZCwgcHJvYmFibHkgd2l0aGluIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bGAuIEJ1dCB3aGF0IGV4YWN0bHkgaXMgdGhhdCBzeXNjdGwgZW50cnk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgZGVmaW5lZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBuZl9jdF9uZXRmaWx0ZXJfdGFibGVgIG9yIGZvbGxvdyB3aGVyZSBgY25ldC0mZ3Q7c3lzY3RsX2hlYWRlcmAgaXMgdXNlZCwgYXMgdGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBpdCBnZXRzIGhvb2tlZCBpbi4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyB0aGlzIGlzIGFsbCBjb25uZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDMwOlx0XHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3NjdHBfc3lzY3RsKG5ldCwgdGFibGUpO1xuMTAzMTpcdFx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9ncmVfc3lzY3RsKG5ldCwgdGFibGUpO1xuMTAzMjpcdFxuMTAzMzpcdFx0LyogRG9uJiMzOTt0IGFsbG93IG5vbi1pbml0X25ldCBucyB0byBhbHRlciBnbG9iYWwgc3lzY3RscyAqL1xuMTAzNDpcdFx0aWYgKCFuZXRfZXEoXHUwMDI2aW5pdF9uZXQsIG5ldCkpIHtcbjEwMzU6XHRcdFx0dGFibGVbTkZfU1lTQ1RMX0NUX01BWF0ubW9kZSA9IDA0NDQ7XG4xMDM2Olx0XHRcdHRhYmxlW05GX1NZU0NUTF9DVF9FWFBFQ1RfTUFYXS5tb2RlID0gMDQ0NDtcbjEwMzc6XHRcdFx0dGFibGVbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdLm1vZGUgPSAwNDQ0O1xuMTAzODpcdFx0fVxuMTAzOTpcdFxuMTA0MDpcdFx0Y25ldC1cdTAwM2VzeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9uZXRmaWx0ZXJcJiMzNDssXG4xMDQxOlx0XHRcdFx0XHRcdFx0ICAgICB0YWJsZSxcbjEwNDI6XHRcdFx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSk7XG4xMDQzOlx0XHRpZiAoIWNuZXQtXHUwMDNlc3lzY3RsX2hlYWRlcilcbjEwNDQ6XHRcdFx0Z290byBvdXRfdW5yZWdpc3Rlcl9uZXRmaWx0ZXI7XG4xMDQ1Olx0XG4xMDQ2Olx0XHRyZXR1cm4gMDtcbjEwNDc6XHRcbjEwNDg6XHRvdXRfdW5yZWdpc3Rlcl9uZXRmaWx0ZXI6XG4xMDQ5Olx0XHRrZnJlZSh0YWJsZSk7XG4xMDUwOlx0XHRyZXR1cm4gLUVOT01FTTtcbjEwNTE6XHR9XG4xMDUyOlx0XG4xMDUzOlx0c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuMTA1NDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX2J1Y2tldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCDigJMgdGhhdCBzeXNjdGwgZW50cnkgdW5kZXIgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCwgb3IgYWx0ZXJuYXRpdmVseSwgYG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2J1Y2tldHNgLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IG9uZS4gQW55dGltZSB0aGVyZSYjMzk7cyBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uIG9uIHRoYXQsIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGdldHMgaW52b2tlZC4gVGhhdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgaGFuZGxpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwgdmlhIHN5c2N0bC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IHdoYXQgYWN0dWFsbHkgKmhhcHBlbnMqIHdoZW4gdGhhdCBzeXNjdGwgdmFsdWUgY2hhbmdlcz8gV2hhdCYjMzk7cyB0aGUgY29yZSBvZiBpdD8gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIHdpdGggdGhlIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHRhYmxlLiBUaGUgcmVhbCB3b3JrIGlzIHByb2JhYmx5IGRvbmUgaW4gYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAuIEdvdHRhIGNoZWNrIHRoYXQgZnVuY3Rpb24gbmV4dCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgdHJpZ2dlcmVkIHdoZW4gdGhlIGJ1Y2tldCBjb3VudCBpcyBtb2RpZmllZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgZ2V0cyB1cGRhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfaGFzaF9yZXNpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNTQwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FsbG9jX2hhc2h0YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjU0MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNTQyOmludCBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUodW5zaWduZWQgaW50IGhhc2hzaXplKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI1NDMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNjA2PWludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjYyMjpcdHJldHVybiBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaGFzaHNpemUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjMtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz01Mzc9bmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTU1MC1cdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjU1MTpcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTUyLVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhpcyBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCB3aGljaCwgcGVyIHRoZSBndWlkZWxpbmVzLCBtZWFucyBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZyA9IHRydWVgLgoKSSYjMzk7dmUgZ290IHRoZSBjb250ZXh0OiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYC4gSXQmIzM5O3MgaW1wYWN0aW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgLCB3aGljaCBpcyBjb3JlIG5ldHdvcmtpbmcgYW5kIHRodXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBTeXprYWxsZXIgYW5kIHN5c2N0bCBzeXNjYWxscyBiYWNrIHRoaXMgdXAuCgpUaGUgcGF0Y2gmIzM5O3MgY29yZSBtb2RpZmljYXRpb24gaXMgcmV3cml0aW5nIGhvdyB0aGUgaGFzaCB0YWJsZSBzaXplLCBtYW5hZ2VkIGJ5IGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgLCBpcyBoYW5kbGVkLiBCZWZvcmUsIHdlIGhhZCBhIGdsb2JhbCB2YXJpYWJsZSwgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYC4gTm93LCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZ2xvYmFsLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzLiBJdCB1c2VzIGEgbG9jYWwgYGh0YWJsZV9zaXplYCBhbmQgYSB0ZW1wb3JhcnkgYGN0bF90YWJsZWAuIFRoaXMgaXMgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgY29uY3VycmVuY3kgYW5kIGRhdGEgbWFuYWdlbWVudC4KClRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyLiAmIzM0O1JlZmFjdG9yaW5ncyB0aGF0Li4uIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuJiMzNDsgU28sIGRlc3BpdGUgdGhlIHBvdGVudGlhbCAmIzM0O3JlZmFjdG9yaW5nJiMzNDsgbGFiZWwsIEkgY2FuJiMzOTt0IGRpc21pc3MgdGhpcyBhcyB0cml2aWFsLiBSZWFjaGFibGUgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtIGlzIG1vZGlmaWVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGlzIGJ5IGFuYWx5emluZyB0aGUgZ3VpZGVsaW5lcyBhZ2FpbjoKCiogICAmIzM0OzMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkmIzM0OyDigJMgVGhlIHBhdGNoIG1vZGlmaWVzIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZywgd2hpY2ggaXMgYSBwb3NpdGl2ZSBtYXRjaC4KKiAgICYjMzQ7RE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TJiMzNDsg4oCTIFRoaXMgcmVpbmZvcmNlcyB0aGF0IEkgc2hvdWxkIGNvbnNpZGVyIHRoaXMgZm9yIGZ1enppbmcgZXZlbiBpZiBpdCBtaWdodCBhcHBlYXIgbGlrZSAmIzM0O2p1c3QmIzM0OyBhIHJlZmFjdG9yaW5nLgoqICAgJiMzNDsyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKSYjMzQ7IOKAkyBOb25lIG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseS4gSXQmIzM5O3Mgbm90IG5vbi1rZXJuZWwsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtb2RpZmllZCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gQWx0aG91Z2ggYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGl0LCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgd2lsbCBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCB3aGljaCBpcyB0aGUgZW50cnlwb2ludCB0byB0aGlzIHN1YnN5c3RlbSBmZWF0dXJlLCBhbmQgaXQmIzM5O3MgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgdGhlIGNvZGUgbW9kaWZpZXMuCgpGaW5hbGx5LCBmb3IgYEVuYWJsZUNvbmZpZ3NgLCBJIG5lZWQgdG8gZW5hYmxlIHRoaXM6CgoqICAgVGhlIGNvZGUgaXMgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TWVNDVExgLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuCiogICBBbHNvLCBgQ09ORklHX05GX0NPTk5UUkFDS2AgbXVzdCBiZSBlbmFibGVkLgoKSW4gY29uY2x1c2lvbiwgdGhpcyBpcyBhIGNsZWFyICYjMzQ7eWVzJiMzNDsgZm9yIGZ1enppbmcuIFRoZSBjb2RlJiMzOTtzIGluIGEgcmVhY2hhYmxlIGFyZWEsIHRoZSBtb2RpZmljYXRpb24gaXMgc2lnbmlmaWNhbnQsIGFuZCBJIGNhbiBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSAmIzQzOz0gbmZuZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVx0Oj0gbmZfY29ubnRyYWNrX2NvcmUubyBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5vIG5mX2Nvbm50cmFja19leHBlY3QubyBuZl9jb25udHJhY2tfaGVscGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NjpcdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjc6XHRcdCAgIG5mX2Nvbm50cmFja19wcm90b19pY21wLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODpcdFx0ICAgbmZfY29ubnRyYWNrX2V4dGVuZC5vIG5mX2Nvbm50cmFja19hY2N0Lm8gbmZfY29ubnRyYWNrX3NlcWFkai5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTktXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwOm5mX2Nvbm50cmFjay0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgJiM0Mzs9IG5mX2Nvbm50cmFja19wcm90b19pY21wdjYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVQpICYjNDM7PSBuZl9jb25udHJhY2tfdGltZW91dC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEyOm5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfVElNRVNUQU1QKSAmIzQzOz0gbmZfY29ubnRyYWNrX3RpbWVzdGFtcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzOm5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTKSAmIzQzOz0gbmZfY29ubnRyYWNrX2VjYWNoZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0Om5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSAmIzQzOz0gbmZfY29ubnRyYWNrX2xhYmVscy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1Om5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTKSAmIzQzOz0gbmZfY29ubnRyYWNrX292cy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2Om5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DVF9QUk9UT19TQ1RQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ1RfUFJPVE9fR1JFKSAmIzQzOz0gbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE4LWlmZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksbSlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfY29ubnRyYWNrLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICYjNDM7PSBuZl9jb25udHJhY2tfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjAtZWxzZSBpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLHkpXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxOm5mX2Nvbm50cmFjay0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IG5mX2Nvbm50cmFja19icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMi1lbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICYjNDM7PSBuZm5ldGxpbmtfaG9vay5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zMy0jIGNvbm5lY3Rpb24gdHJhY2tpbmdcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgJiM0Mzs9IG5mX2Nvbm50cmFjay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM1LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNjojIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBuZl9jb25udHJhY2tcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTkspICYjNDM7PSBuZl9jb25udHJhY2tfbmV0bGluay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICYjNDM7PSBuZm5ldGxpbmtfY3R0aW1lb3V0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSAmIzQzOz0gbmZuZXRsaW5rX2N0aGVscGVyLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLSMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQyOm5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00My1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEpICYjNDM7PSBuZl9jb25udHJhY2tfYW1hbmRhLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NzpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0JST0FEQ0FTVCkgJiM0Mzs9IG5mX2Nvbm50cmFja19icm9hZGNhc3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMpICYjNDM7PSBuZl9jb25udHJhY2tfbmV0Ymlvc19ucy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUwOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU05NUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19zbm1wLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19QUFRQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3BwdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUpICYjNDM7PSBuZl9jb25udHJhY2tfc2FuZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUzOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0lQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3NpcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja190ZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTk0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhpcywgaXQgc2VlbXMgbGlrZSB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYE5FVEZJTFRFUmAgaXMgYWN0dWFsbHkgcmVxdWlyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW5jbHVzaW9uIHBhdGguIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYG5ldGZpbHRlcmAgaXMgZGVmaW5lZCBzb21ld2hlcmUgd2l0aGluIHRoZSBgbmV0YCBkaXJlY3RvcnksIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGVpdGhlciBgbmV0L0tjb25maWdgIG9yIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMgd2hlcmUgYG5ldGZpbHRlcmAmIzM5O3MgY29tcG9uZW50cyBhcmUgdHlwaWNhbGx5IGRlY2xhcmVkIGFuZCBpbmNsdWRlZC4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2Ugd2hlcmUgSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBkZXRlcm1pbmUgd2hhdCBjb25maWd1cmF0aW9ucyBhY3R1YWxseSB0cmlnZ2VyIHRoZSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJgLCBpZiBhbnkuIEl0JiMzOTtzIGEgYml0IG9mIGEgYnJlYWRjcnVtYiBodW50LCBidXQgdGhhdCYjMzk7cyB0aGUgYmVzdCBhcHByb2FjaCB0byBlc3RhYmxpc2ggdGhlIGFjdHVhbCBkZXBlbmRlbmNpZXMgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZS4qbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MjMxPWNvbmZpZyBCUklER0VfTkVURklMVEVSXG4tLVxubmV0L0tjb25maWctMjQ2LVxubmV0L0tjb25maWc6MjQ3OnNvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI0ODpzb3VyY2UgXCYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI0OTpzb3VyY2UgXCYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1MDpzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM4MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBiYXNlZCBvbiB0aGUgcHJvbXB0OgoKKipSZXZpZXdpbmcgdGhlIG5ldC9LY29uZmlnIFNlY3Rpb24qKgoKT2theSwgc28gdGhlIGluc3RydWN0aW9uIGlzIHRvIGZvY3VzIG9uIGxpbmVzIDIyMC0yNTUgd2l0aGluIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBwaWN0dXJlIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBteSBoZWFkLiBJJiMzOTttIHByb2JhYmx5IHJlY2FsbGluZyB0aGUgdmFyaW91cyBuZXR3b3JrLXJlbGF0ZWQgb3B0aW9ucywgc3ViLW1lbnVzLCBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIHR5cGljYWxseSBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgd2hlcmUgdGhpcyBzZWN0aW9uIHNpdHMgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyBmb3IgZmVhdHVyZSBlbmFibGluZywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBlcmhhcHMgc29tZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZXh0ZXJuYWwgcGFja2FnZXMuIFRoZSBleGFjdCBjb250ZW50IHdpdGhpbiB0aG9zZSBsaW5lcyBpcywgb2YgY291cnNlLCB0aGUgZGV0YWlsIEkgbmVlZCB0byBub3cgZXhhbWluZS4gSSB3aWxsIGxpa2VseSBiZSB0cnlpbmcgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCBvcHRpb25zIGFyZSBiZWluZyBkZWZpbmVkIG9yIG1vZGlmaWVkIGluIHRoaXMgc3BlY2lmaWMgc2VjdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBwdXJwb3NlIG9mIHRoZXNlIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG4gMjIxOlx0XHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4gMjIyOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxuIDIyMzpcdFx0ZGVmYXVsdCB5XG4gMjI0Olx0XHRoZWxwXG4gMjI1Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBjYW4gc2VsZWN0IGJldHdlZW4gYWxsIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcy5cbiAyMjY6XHRcdCAgSWYgeW91IHNheSBOIHRoZSBtb3JlIHVudXN1YWwgb25lcyB3aWxsIG5vdCBiZSBzaG93biBhbmQgdGhlXG4gMjI3Olx0XHQgIGJhc2ljIG9uZXMgbmVlZGVkIGJ5IG1vc3QgcGVvcGxlIHdpbGwgZGVmYXVsdCB0byAmIzM5O00mIzM5Oy5cbiAyMjg6XHRcbiAyMjk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAyMzA6XHRcbiAyMzE6XHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxuIDIzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7QnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcJiMzNDtcbiAyMzM6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gMjM0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcdTAwMjZcdTAwMjYgSU5FVFxuIDIzNTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAyMzY6XHRcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxuIDIzNzpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gMjM4Olx0XHRoZWxwXG4gMjM5Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbGV0IGFycHRhYmxlcyByZXNwLiBpcHRhYmxlcyBzZWUgYnJpZGdlZFxuIDI0MDpcdFx0ICBBUlAgcmVzcC4gSVAgdHJhZmZpYy4gSWYgeW91IHdhbnQgYSBicmlkZ2luZyBmaXJld2FsbCwgeW91IHByb2JhYmx5XG4gMjQxOlx0XHQgIHdhbnQgdGhpcyBvcHRpb24gZW5hYmxlZC5cbiAyNDI6XHRcdCAgRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGRvZXNuJiMzOTt0IGVuYWJsZSBvciBkaXNhYmxlXG4gMjQzOlx0XHQgIGVidGFibGVzLlxuIDI0NDpcdFxuIDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNDg6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNDk6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNTA6XHRzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI1MTpcdFxuIDI1MjpcdGVuZGlmICMgaWYgTkVURklMVEVSXG4gMjUzOlx0XG4gMjU0Olx0c291cmNlIFwmIzM0O25ldC9zY3RwL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMzQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBpbml0aWFsIGNhbmRpZGF0ZXMgc2VlbSB0byBiZSBgTkVURklMVEVSYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgU1lTQ1RMYC4gSSBrbm93IHRoZXNlIGFyZSBpbnRlcmNvbm5lY3RlZCwgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGNoZWNrLgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGBORl9DT05OVFJBQ0tgJiMzOTtzIGRlcGVuZGVuY2llcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gTG9va2luZyBhdCBsaW5lcyA4Mi04NywgdGhlIHNvdXJjZSBjb25maXJtcyBpdCYjMzk7cyBuZXN0ZWQgdW5kZXIgYW4gYGlmIE5FVEZJTFRFUmAgYmxvY2ssIHdoaWNoIG9yaWdpbmF0ZXMgaW4gYG5ldC9LY29uZmlnYC4gRXhjZWxsZW50LCB0aGF0IGNvbmZpcm1zIHRoZSByZWxhdGlvbnNoaXAuCgpOb3csIGFzIEkgcmVjYWxsLCBgU1lTQ1RMYCBpcyBuZWNlc3NhcnkgZm9yIGVuYWJsaW5nIHRoaXMgZmVhdHVyZS4gU28sIG15IGNvcmUgc2V0IG9mIGNvbmZpZ3VyYXRpb25zLCBhcyBvZiBub3csIGFyZToKCiogICBgTkVURklMVEVSYAoqICAgYE5GX0NPTk5UUkFDS2AKKiAgIGBTWVNDVExgCgpIb3dldmVyLCBsZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBpZiBgTkZfQ09OTlRSQUNLYCBvciBgU1lTQ1RMYCBpdHNlbGYgaGFzICpmdXJ0aGVyKiBkZXBlbmRlbmNpZXMuIFdoZXJlIHdvdWxkIGBTWVNDVExgIGxpa2VseSBiZSBkZWZpbmVkPyBFaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGZzL3Byb2MvS2NvbmZpZ2AgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LiBJJiMzOTtsbCBtb3ZlIG9uIHRvIGNoZWNrIGBTWVNDVExgIGluIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNZU0NUTFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY3NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlN5c3RlbSBDb25maWd1cmF0aW9uIEh1bnQqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGBTWVNDVExgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gcGVyZm9ybSBhIGdsb2JhbCBzZWFyY2ggYWNyb3NzIHRoZSBlbnRpcmUgY29kZWJhc2Ugb3IgZmlsZSBzeXN0ZW0gdHJlZSwgYXNzdW1pbmcgSSBoYXZlIHRoZSBuZWNlc3NhcnkgYWNjZXNzIHJpZ2h0cy4gSSYjMzk7bSB0aGlua2luZyBhIHJlY3Vyc2l2ZSBzZWFyY2ggd291bGQgYmUgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgdG8gZW5zdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgdmFyaWF0aW9ucyBpbiBuYW1pbmcgY29udmVudGlvbnMg4oCTIGl0IGNvdWxkIGJlIGBzeXNjdGxgLCBgc3lzY3RsLmNvbmZgLCBvciBzb21lIG90aGVyIHZhcmlhdGlvbi4gVGhpcyB0aG9yb3VnaG5lc3MgaXMgY3J1Y2lhbDsgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG92ZXJsb29rIGEgY3JpdGljYWwgcGFyYW1ldGVyIGx1cmtpbmcgaW4gc29tZSBvYnNjdXJlIGNvcm5lciBvZiB0aGUgY29uZmlnIHNwYWNlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIHRha2Ugc29tZSB0aW1lLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlZmluZSB0aGUgc2VhcmNoIHRlcm1zIGFuZCBsb2NhdGlvbnMgYXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIFNZU0NUTCQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnPTY3PWNvbmZpZyBQUk9DX1ZNQ09SRV9ERVZJQ0VfUkFNXG4tLVxuZnMvcHJvYy9LY29uZmlnLTgyLVxuZnMvcHJvYy9LY29uZmlnOjgzOmNvbmZpZyBTWVNDVExcbmZzL3Byb2MvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U3lzY3RsIHN1cHBvcnQgKC9wcm9jL3N5cylcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBmcy9wcm9jL0tjb25maWdgLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGhhcHBlbmluZyBhcm91bmQgbGluZSA4My4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBhIHNwZWNpZmljIHByb2NmcyBmZWF0dXJlIG9yIG1vZHVsZS4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIG5ldyBvciBtb2RpZmllZCBzZXR0aW5nLCBvciBtYXliZSBJIHN1c3BlY3QgYSBidWcgaW4gaG93IGEgcGFydGljdWxhciBvcHRpb24gaXMgYmVpbmcgaGFuZGxlZCB1cHN0cmVhbS4gVGhpcyBsb2NhdGlvbiBpcyBhIGxpa2VseSBzcG90IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvZiB0aGUgcHJvYyBmaWxlc3lzdGVtOyBzcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBob3cgY2VydGFpbiBhc3BlY3RzIG9mIHByb2NmcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBLY29uZmlnIHN5bnRheDogYGNvbmZpZ2AsIGBib29sYCwgYHRyaXN0YXRlYCwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLiwgdHJ5aW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29uZGl0aW9uYWwgbG9naWMgcHJlc2VudCB0aGVyZS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGVmZmVjdHMuIE15IGdvYWwgaXMgdG8gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVzb2x2ZSB0aGUgaXNzdWUgYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XG4gIDgxOlx0XHQgIFJlbGV2YW50IGFyY2hpdGVjdHVyZXMgc2hvdWxkIHNlbGVjdCBORUVEX1BST0NfVk1DT1JFX0RFVklDRV9SQU0uXG4gIDgyOlx0XG4gIDgzOlx0Y29uZmlnIFNZU0NUTFxuICA4NDpcdFx0Ym9vbCBcJiMzNDtTeXNjdGwgc3VwcG9ydCAoL3Byb2Mvc3lzKVwmIzM0OyBpZiBFWFBFUlRcbiAgODU6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuICA4NjpcdFx0ZGVmYXVsdCB5XG4gIDg3Olx0XHRoZWxwXG4gIDg4Olx0XHQgIFRoZSBzeXNjdGwgaW50ZXJmYWNlIHByb3ZpZGVzIGEgbWVhbnMgb2YgZHluYW1pY2FsbHkgY2hhbmdpbmdcbiAgODk6XHRcdCAgY2VydGFpbiBrZXJuZWwgcGFyYW1ldGVycyBhbmQgdmFyaWFibGVzIG9uIHRoZSBmbHkgd2l0aG91dCByZXF1aXJpbmdcbiAgOTA6XHRcdCAgYSByZWNvbXBpbGUgb2YgdGhlIGtlcm5lbCBvciByZWJvb3Qgb2YgdGhlIHN5c3RlbS4gIFRoZSBwcmltYXJ5XG4gIDkxOlx0XHQgIGludGVyZmFjZSBpcyB0aHJvdWdoIC9wcm9jL3N5cy4gIElmIHlvdSBzYXkgWSBoZXJlIGEgdHJlZSBvZlxuICA5MjpcdFx0ICBtb2RpZmlhYmxlIHN5c2N0bCBlbnRyaWVzIHdpbGwgYmUgZ2VuZXJhdGVkIGJlbmVhdGggdGhlXG4gIDkzOlx0XHQgIC9wcm9jL3N5cyBkaXJlY3RvcnkuIFRoZXkgYXJlIGV4cGxhaW5lZCBpbiB0aGUgZmlsZXNcbiAgOTQ6XHRcdCAgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9cdTAwM2UuICBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ4MgoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiA2NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBDT05GSUdfU1lTQ1RMYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBQUk9DX0ZTYCwgYW5kIGFsc28gYENPTkZJR19ORVRGSUxURVJgIGFuZCBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRoYXQmIzM5O3MgdGhlIGxhbmRzY2FwZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGZ1enppbmcgdGFyZ2V0LgoKTXkgZmlyc3QgdGhvdWdodCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgYW5kIHRoZSBjaGVjayBvZiBgRm9jdXNTeW1ib2xzYCBjb25maXJtcyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBzeW1ib2xzIGhlcmU/IExldCYjMzk7cyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgY2hhbmdlZCBpbiB0aGUgZGlmZi4gQWgsIGl0JiMzOTtzIGp1c3QgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgYW5kIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0YC4KCkJ1dCB3YWl0LCBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdGAgaXMgYF9faW5pdGAsIHNvIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGF0IGJvb3QuIEZ1enppbmcgd2FudHMgcnVudGltZSB0YXJnZXRzLCBzbyB0aGF0JiMzOTtzIG91dC4gV2hhdCBhYm91dCBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYD8gVGhhdCAqaXMqIGNhbGxlZCBieSBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gU2hvdWxkIEkgaW5jbHVkZSB0aGF0PyBMZXQmIzM5O3Mgc2VlLi4uCgpSaWdodCwgYmFzZWQgb24gdGhlIHRyaWFnZSBpbnN0cnVjdGlvbnMsIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHRhcmdldCwgd2hpY2ggaW1wbGVtZW50cyB0aGUgYWx0ZXJlZCBsb2dpYyBvciBpcyBhIGRpcmVjdCBlbnRyeXBvaW50LiBBbmQgdGhhdCYjMzk7cyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gTm93LCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBhbHRlciBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYCBkaXJlY3RseSwgYnV0IGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIHBhc3NlcyBgaHRhYmxlX3NpemVgIHRvIGl0LiBTbywgdGhhdCYjMzk7cyB3aHkgaXQmIzM5O3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LgoKQnV0IHRoZSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVyIGZvY3VzZXMgb24gbW9kaWZpZWQgY29kZSBhbmQgaXRzIGRpcmVjdCBlbnRyeXBvaW50LiBTbywgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaXMgdGhlICpwcmltYXJ5KiB0YXJnZXQuIEl0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIHByaW9yaXRpemUsIGJlY2F1c2UsIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGNvbnRhaW5zIHRoZSBtb2RpZmllZCBsb2dpYyAobG9jYWwgc3RhY2sgdmFyaWFibGUsIFJFQURfT05DRSwgcHJvY19kb2ludHZlYyBhbmQgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKS4KCkFscmlnaHQsIGxldCYjMzk7cyBiZSBhYnNvbHV0ZWx5IHN1cmUuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AuIEl0JiMzOTtzIHJlbW92aW5nIGEgZ2xvYmFsIHZhcmlhYmxlIGluIGZhdm9yIG9mIGEgbG9jYWwgb25lIGZvciBzeXNjdGwgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIGAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnVja2V0c2AuIEFueSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbG9naWMgZXJyb3JzIGR1ZSB0byBob3cgdGhlIHN5c2N0bCBpcyBoYW5kbGVkIGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGZ1enouIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUuCgpUaGVyZWZvcmUsIGVuYWJsZSBjb25maWdzOiBgTkZfQ09OTlRSQUNLYCwgYFNZU0NUTGAsIGBORVRGSUxURVJgIGFuZCBgUFJPQ19GU2AuIFRoZSBjb3JyZWN0IGZvY3VzIHN5bWJvbCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gQWxsIGdvb2QuIFRoaXMgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBmdXp6aW5nIHRyaWFnZSBndWlkZWxpbmVzLiBUaW1lIHRvIG1vdmUgb24gdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AgYnkgcmVtb3ZpbmcgdGhlIGdsb2JhbCBzdGF0aWMgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBhbmQgaW5zdGVhZCB1c2luZyBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGN0bF90YWJsZWAgYW5kIGxvY2FsIHZhcmlhYmxlIHRvIHJlc2l6ZSB0aGUgY29ubnRyYWNrIGhhc2ggdGFibGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCBzeXNjdGwgZW50cnkgYW5kIHdhcnJhbnRzIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IG9yIHN5c2N0bCBoYW5kbGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja19oYXNoX3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCBieSByZW1vdmluZyB0aGUgZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGFuZCBpbnN0ZWFkIHVzaW5nIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgY3RsX3RhYmxlYCBhbmQgbG9jYWwgdmFyaWFibGUgdG8gcmVzaXplIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc3lzL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2J1Y2tldHNgIHN5c2N0bCBlbnRyeSBhbmQgd2FycmFudHMgZnV6emluZyBmb3IgY29uY3VycmVuY3kgb3Igc3lzY3RsIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgc3lzY3RsIGhhbmRsZXIgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgYnkgcmVwbGFjaW5nIHRoZSBnbG9iYWwgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCB3aXRoIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBhbmQgYSBsb2NhbCBjb3B5IG9mIGBzdHJ1Y3QgY3RsX3RhYmxlYC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBodGFibGVfc2l6ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKWAgYW5kIGB0bXBgIGlzIGluaXRpYWxpemVkIGZyb20gYCp0YWJsZWAgYmVmb3JlIGBwcm9jX2RvaW50dmVjYCByZWFkcyBvciB3cml0ZXMgYHRtcC5kYXRhYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzExN2I0YmQxODgxZDhlMTNiMjZiMzUzOWUwNzM2MzI0ZTBjYWZkNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE1OjE3OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IGY0ZjJkODIxOTJkNTQuLjRiNjkyYTE4NGU5NDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTUzMywyNyAmIzQzOzUzMywyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY291bnQpOwogLyogU3lzY3RsIHN1cHBvcnQgKi8KIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLS8qIHNpemUgdGhlIHVzZXIgKndhbnRzIHRvIHNldCAqLwotc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciBfX3JlYWRfbW9zdGx5OwotCiBzdGF0aWMgaW50CiBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJCSB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewomIzQzOwl1bnNpZ25lZCBpbnQgaHRhYmxlX3NpemUgPSBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTsKJiM0MzsJc3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7CiAJaW50IHJldDsKIAotCS8qIG1vZHVsZV9wYXJhbSBoYXNoc2l6ZSBjb3VsZCBoYXZlIGNoYW5nZWQgdmFsdWUgKi8KLQluZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKJiM0MzsJdG1wLmRhdGEgPSAmYW1wO2h0YWJsZV9zaXplOwogCi0JcmV0ID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiYjNDM7CXJldCA9IHByb2NfZG9pbnR2ZWMoJmFtcDt0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogCWlmIChyZXQgJmx0OyAwIHx8ICF3cml0ZSkKIAkJcmV0dXJuIHJldDsKIAogCS8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqLwotCXJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcik7Ci0KLQkvKiB1cGRhdGUgaXQgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGJ5IGNvbm50cmFjayAqLwotCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwomIzQzOwlyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaHRhYmxlX3NpemUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY1Nyw3ICYjNDM7NjUyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7CiAJfSwKIAlbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdID0gewogCQkucHJvY25hbWUgICAgICAgPSAmIzM0O25mX2Nvbm50cmFja19idWNrZXRzJiMzNDssCi0JCS5kYXRhICAgICAgICAgICA9ICZhbXA7bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIsCiAJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyICAgPSBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwsCkBAIC0xMTUzLDggJiM0MzsxMTQ3LDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKQogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9zeXNjdGw7CiAJfQotCi0JbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CiAjZW5kaWYKIAogCW5mX2Nvbm50cmFja19pbml0X2VuZCgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDg0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIHdlJiMzOTtyZSB0d2Vha2luZyBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN5c2N0bCBpbnRlcmZhY2UgZm9yIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZSBzaXplLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAsIHdoaWNoIGhhbmRsZXMgdGhlIHVzZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCBzeXNjdGwuCgpJdCBzZWVtcyB0aGUgcHJpbWFyeSBnb2FsIGlzIHRvIHNpbXBsaWZ5IGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlIGhvdyB3ZSBoYW5kbGUgdGhlIGNvbm50cmFjayBoYXNoIHRhYmxlIHNpemUgY29uZmlndXJhdGlvbi4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgc2VwYXJhdGUgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCB0aGF0IHN0b3JlZCB0aGUgdXNlciYjMzk7cyByZXF1ZXN0ZWQgc2l6ZSwgd2hpY2ggd2FzIHRoZW4gdXNlZCBpbiBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYC4gVGhlIHBhdGNoIHJlbW92ZXMgdGhhdCB2YXJpYWJsZS4KCkluc3RlYWQsIHRoZSBwYXRjaCBub3cgcmVhZHMgZGlyZWN0bHkgZnJvbSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplYCB3aXRoaW4gdGhlIGhhbmRsZXIuIEl0IGFsc28gYXBwZWFycyB0aGUgcGF0Y2ggc3RvcmVzIHRoZSByZWFkIHZhbHVlIHRlbXBvcmFyaWx5IGluIGEgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBvbiB0aGUgc3RhY2ssIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgLiBJIGd1ZXNzIHRoaXMgaXMgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLgoKVGhlIGV4aXN0aW5nIGNvZGUgdXNlZCB0byB1cGRhdGUgdGhlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgdG8gdGhlIGN1cnJlbnQgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZWAgYWZ0ZXIgYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAuIFRoZSBwYXRjaCByZW1vdmVzIHRoYXQgbGFzdCB1cGRhdGUgc3RlcC4KClRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24uIEJ5IGVsaW1pbmF0aW5nIHRoZSBzZXBhcmF0ZSB1c2VyLXNwYWNlIHZhcmlhYmxlLCB3ZSYjMzk7cmUgbWFraW5nIHRoZSBjb2RlIGNsZWFuZXIgYW5kIGxlc3MgcHJvbmUgdG8gcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIEl0JiMzOTtzIGEgc21hbGwgY2hhbmdlLCBidXQgaXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBrZWVwIHRoaW5ncyBzdHJlYW1saW5lZC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIgYGhhc2hzaXplYC4gSSYjMzk7bGwgYWxzbyBjaGVjayBpZiB0aGlzIGFmZmVjdHMgdGhlIHdheSB0aGUgY29ubnRyYWNrIHRhYmxlIHNpemUgaXMgcmVwb3J0ZWQgb3IgaGFuZGxlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSBwYXRocyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBzdGlsbCB3b3JrcyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNTpcdHUzMiBuZl9jb25udHJhY2tfY291bnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuIDUyNjpcdHtcbiA1Mjc6XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbmV0ICpjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XG4gNTI4Olx0XG4gNTI5Olx0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2Y25ldC1cdTAwM2Vjb3VudCk7XG4gNTMwOlx0fVxuIDUzMTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jb3VudCk7XG4gNTMyOlx0XG4gNTMzOlx0LyogU3lzY3RsIHN1cHBvcnQgKi9cbiA1MzQ6XHRcbiA1MzU6XHQjaWZkZWYgQ09ORklHX1NZU0NUTFxuIDUzNjpcdHN0YXRpYyBpbnRcbiA1Mzc6XHRuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiA1Mzg6XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiA1Mzk6XHR7XG4gNTQwOlx0XHR1bnNpZ25lZCBpbnQgaHRhYmxlX3NpemUgPSBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTtcbiA1NDE6XHRcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlO1xuIDU0MjpcdFx0aW50IHJldDtcbiA1NDM6XHRcbiA1NDQ6XHRcdHRtcC5kYXRhID0gXHUwMDI2aHRhYmxlX3NpemU7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRyZXQgPSBwcm9jX2RvaW50dmVjKFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4gNTQ3Olx0XHRpZiAocmV0IFx1MDAzYyAwIHx8ICF3cml0ZSlcbiA1NDg6XHRcdFx0cmV0dXJuIHJldDtcbiA1NDk6XHRcbiA1NTA6XHRcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xuIDU1MTpcdFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcbiA1NTI6XHRcdHJldHVybiByZXQ7XG4gNTUzOlx0fVxuIDU1NDpcdFxuIDU1NTpcdHN0YXRpYyBpbnRcbiA1NTY6XHRuZl9jb25udHJhY2tfbG9nX2ludmFsaWRfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gNTU3Olx0XHRcdFx0XHR2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIDU1ODpcdHtcbiA1NTk6XHRcdGludCByZXQsIGk7XG4gNTYwOlx0XG4gNTYxOlx0XHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiA1NjI6XHRcdGlmIChyZXQgXHUwMDNjIDAgfHwgIXdyaXRlKVxuIDU2MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDU2NDpcdFxuIDU2NTpcdFx0aWYgKCoodTggKil0YWJsZS1cdTAwM2VkYXRhID09IDApXG4gNTY2Olx0XHRcdHJldHVybiAwO1xuIDU2NzpcdFxuIDU2ODpcdFx0LyogTG9hZCBuZl9sb2dfc3lzbG9nIG9ubHkgaWYgbm8gbG9nZ2VyIGlzIGN1cnJlbnRseSByZWdpc3RlcmVkICovXG4gNTY5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORlBST1RPX05VTVBST1RPOyBpJiM0MzsmIzQzOykge1xuIDU3MDpcdFx0XHRpZiAobmZfbG9nX2lzX3JlZ2lzdGVyZWQoaSkpXG4gNTcxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTcyOlx0XHR9XG4gNTczOlx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDslc1wmIzM0OywgXCYjMzQ7bmZfbG9nX3N5c2xvZ1wmIzM0Oyk7XG4gNTc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzeXNjdGwgUGF0Y2ggZm9yIENvbm50cmFjayBIYXNoIFRhYmxlIFJlc2l6ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBzdGVtIGZyb20gdGhlIHRyYW5zaXRpb24gb2YgYHN0cnVjdCBjdGxfdGFibGVgIHRvIGBjb25zdGAgaW4gcmVjZW50IGtlcm5lbHMuIFByZXZpb3VzbHksIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgYWN0ZWQgYXMgYSBnbG9iYWwgdmFyaWFibGUgKG9yIHdhcyBwb2ludGVkIHRvIGJ5IGB0YWJsZS0mZ3Q7ZGF0YWApIHRvIG1hbmFnZSB0aGUgdXNlci1yZXF1ZXN0ZWQgaGFzaCB0YWJsZSBzaXplIGFjcm9zcyBzeXNjdGwgY2FsbHMuIFRoZSBzaGlmdCB0byBgY29uc3RgIGZvciBgdGFibGVgIHByb2JhYmx5IGludHJvZHVjZWQgY29uY3VycmVuY3kgcHJvYmxlbXMgb3IgbWFkZSB0aGUgZ2xvYmFsIHZhcmlhYmxlIHJlZHVuZGFudC4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGNvZGUgaXMgc2FmZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBMZXQgbWUgdHJhY2UgdGhlIGV4ZWN1dGlvbjoKCjEuICBgdW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7YDogT2theSwgYGh0YWJsZV9zaXplYCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgIHVzaW5nIGBSRUFEX09OQ0VgLiBTYWZlIHNvIGZhci4KMi4gIGBzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICp0YWJsZTtgOiAgV2UmIzM5O3JlIGNyZWF0aW5nIGEgbG9jYWwsIG1vZGlmaWFibGUgY29weSBvZiB0aGUgb3JpZ2luYWwgYGNvbnN0IHN0cnVjdCBjdGxfdGFibGVgLiBUaGlzIHByZXZlbnRzIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnN0IGRhdGEuCjMuICBgdG1wLmRhdGEgPSAmYW1wO2h0YWJsZV9zaXplO2A6IFRoZSBgZGF0YWAgcG9pbnRlciB3aXRoaW4gdGhlICpjb3B5KiBgdG1wYCBpcyB0aGVuIHNldCB0byBwb2ludCB0byBvdXIgbG9jYWwgYGh0YWJsZV9zaXplYCB2YXJpYWJsZS4KNC4gIGByZXQgPSBwcm9jX2RvaW50dmVjKCZhbXA7dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtgOiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBhcnQuIElmIHRoaXMgaXMgYSByZWFkLCB3aGVyZSBgd3JpdGVgIGlzIDAsIHRoZW4gdGhlIGBwcm9jX2RvaW50dmVjYCByZWFkcyBmcm9tIGAqdG1wLmRhdGFgLCB3aGljaCBpcyBgaHRhYmxlX3NpemVgLiBBbmQgc2luY2UgYGh0YWJsZV9zaXplYCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIHdpdGggYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZWAsIGl0IHNob3VsZCB3b3JrIHdpdGhvdXQgdW5pbml0aWFsaXplZCByZWFkLiBJZiBpdCYjMzk7cyBhIHdyaXRlIChgd3JpdGUgPT0gMWApLCBgcHJvY19kb2ludHZlY2AgcGFyc2VzIHRoZSB1c2VyIGBidWZmZXJgIGFuZCB3cml0ZXMgdGhlIHZhbHVlIHRvIGBodGFibGVfc2l6ZWAuCgpUaGUgYGlmIChyZXQgJmx0OyAwIHx8ICF3cml0ZSkgcmV0dXJuIHJldDtgIGlzIGEgc3RhbmRhcmQgZXJyb3IgY2hlY2suIEZpbmFsbHksIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaHRhYmxlX3NpemUpO2AgaXMgY2FsbGVkLgoKVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBodGFibGVfc2l6ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiBpdCYjMzk7cyBldmVyIHBvdGVudGlhbGx5IHJlYWQgZnJvbSwgd2hldGhlciBmb3IgYSByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbi4gVGhhdCByZW1vdmVzIHRoZSB3b3JyeS4gTm93IGxldCBtZSBsb29rIGF0IGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg9MzI3PWludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oOjMyODppbnQgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKHVuc2lnbmVkIGludCBoYXNoc2l6ZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgtMzI5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNTQwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FsbG9jX2hhc2h0YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjU0MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNTQyOmludCBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUodW5zaWduZWQgaW50IGhhc2hzaXplKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI1NDMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNjA2PWludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjYyMjpcdHJldHVybiBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaGFzaHNpemUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjMtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz01Mzc9bmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTU1MC1cdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjU1MTpcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTUyLVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM4NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gbmZfY3Rfc3lzY3RsX3RhYmxlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG5mX2N0X3N5c2N0bF90YWJsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHRoaW5nLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGluZm9ybWF0aW9uIGNhbiBJIGdsZWFuIGZyb20gaXQ/IElzIGl0IGFib3V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcGVyZm9ybWFuY2UgdHVuaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmc/IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLCBwcm9iYWJseSBhIHRhYmxlLCBjb250YWluaW5nIHRoZSBzeXNjdGwgZW50cmllcyBmb3IgTmV0ZmlsdGVyJiMzOTtzIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGVudHJ5IGNvbnRyb2xzIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIHNldHRpbmdzIG5lZWQgYWRqdXN0bWVudCBiYXNlZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0gbG9hZCwgbmV0d29yayB0b3BvbG9neSwgYW5kIHNlY3VyaXR5IHJlcXVpcmVtZW50cy4gVW5kZXJzdGFuZGluZyB0aGUgb3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgbWV0aG9kcyB3aWxsIGJlIGtleSBmb3Igb3B0aW1pemF0aW9uIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDU6XHRcdFx0LmV4dHJhMlx0XHQ9IFNZU0NUTF9JTlRfTUFYLFxuIDY0NjpcdFx0fSxcbiA2NDc6XHRcdFtORl9TWVNDVExfQ1RfQ09VTlRdID0ge1xuIDY0ODpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bmZfY29ubnRyYWNrX2NvdW50XCYjMzQ7LFxuIDY0OTpcdFx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4gNjUwOlx0XHRcdC5tb2RlXHRcdD0gMDQ0NCxcbiA2NTE6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjLFxuIDY1MjpcdFx0fSxcbiA2NTM6XHRcdFtORl9TWVNDVExfQ1RfQlVDS0VUU10gPSB7XG4gNjU0Olx0XHRcdC5wcm9jbmFtZSAgICAgICA9IFwmIzM0O25mX2Nvbm50cmFja19idWNrZXRzXCYjMzQ7LFxuIDY1NTpcdFx0XHQubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSxcbiA2NTY6XHRcdFx0Lm1vZGUgICAgICAgICAgID0gMDY0NCxcbiA2NTc6XHRcdFx0LnByb2NfaGFuZGxlciAgID0gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsLFxuIDY1ODpcdFx0fSxcbiA2NTk6XHRcdFtORl9TWVNDVExfQ1RfQ0hFQ0tTVU1dID0ge1xuIDY2MDpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bmZfY29ubnRyYWNrX2NoZWNrc3VtXCYjMzQ7LFxuIDY2MTpcdFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LmN0LnN5c2N0bF9jaGVja3N1bSxcbiA2NjI6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4gNjYzOlx0XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiA2NjQ6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdTh2ZWNfbWlubWF4LFxuIDY2NTpcdFx0XHQuZXh0cmExIFx0PSBTWVNDVExfWkVSTyxcbiA2NjY6XHRcdFx0LmV4dHJhMiBcdD0gU1lTQ1RMX09ORSxcbiA2Njc6XHRcdH0sXG4gNjY4Olx0XHRbTkZfU1lTQ1RMX0NUX0xPR19JTlZBTElEXSA9IHtcbiA2Njk6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O25mX2Nvbm50cmFja19sb2dfaW52YWxpZFwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA3MwoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiA3NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmZfY29ubnRyYWNrYCBTeXNjdGwgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgdGhlIGBORl9TWVNDVExfQ1RfQlVDS0VUU2Agc3lzY3RsIGVudHJ5IGRpcmVjdGx5IHVzZWQgYC5kYXRhID0gJmFtcDtuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAuIE5vdywgYC5kYXRhYCBpcyBleHBsaWNpdGx5IE5VTEwuIEluc2lkZSBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgdGhlIGNvZGUgbm93IGxvb2tzIGxpa2UgdGhpczoKCmBodGFibGVfc2l6ZWAgaXMgZ3JhYmJlZCB3aXRoIGBSRUFEX09OQ0VgLCBjb3BpZWQgaW50byBhIGBjdGxfdGFibGVgIHdoaWNoIGFjdHMgYXMgYSB0ZW1wb3Jhcnkgc3RydWN0dXJlLCBhbmQgdGhlbiB0aGUgYC5kYXRhYCBwb2ludGVyIHdpdGhpbiB0aGF0IHRlbXBvcmFyeSBzdHJ1Y3QgYHRtcGAgaXMgdGhlbiBzZXQgdG8gcG9pbnQgYXQgYCZhbXA7aHRhYmxlX3NpemVgLiBUaGlzIGBodGFibGVfc2l6ZWAgdGhlbiBnZXRzIHVwZGF0ZWQgdGhyb3VnaCBgcHJvY19kb2ludHZlY2AgYmFzZWQgb24gdXNlciBpbnB1dCwgYW5kIGZpbmFsbHkgYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAgaXMgY2FsbGVkLgoKVGhlIGtleSB0aGluZyBpcywgYGh0YWJsZV9zaXplYCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZC4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgZnJvbSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplYCwgd2hpY2ggaG9sZHMgdGhlIGN1cnJlbnQgaGFzaCB0YWJsZSBzaXplLiBUaGVyZSYjMzk7cyB6ZXJvIGNoYW5jZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2UgdGhlIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHByaW9yIHRvIHVzZS4gV2hlbiByZWFkaW5nIGZyb20gdGhlIHN5c2N0bCAobm8gd3JpdGUpLCBgcHJvY19kb2ludHZlY2AgZ3JhYnMgdGhlIGluaXRpYWxpemVkIHZhbHVlIG9mIGBodGFibGVfc2l6ZWAgYW5kIGNvbnZlcnRzIGl0IHRvIEFTQ0lJIGZvciB0aGUgdXNlci4gV2hlbiB3cml0aW5nICh3cml0ZSksIHRoZSB1c2VyJiMzOTtzIGlucHV0IHVwZGF0ZXMgYGh0YWJsZV9zaXplYC4gYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBpcyBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQsIHdoaWNoIGlzIGdvb2Qgc2luY2UgaXQmIzM5O3MgYSBtdXRhYmxlIGdsb2JhbCwgcmVkdWNpbmcgY29tcGxleGl0eS4KCkkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciBhbnkgYnVmZmVyIHNpemUvYm91bmRzIGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGRvZXNuJiMzOTt0IGRldGVjdCBhbnl0aGluZyBlaXRoZXIuCgpTbywgbGV0JiMzOTtzIGNoZWNrIHRoZSBLTVNBTiBydWxlcy4gVGhlIHJ1bGUgc2F5cyBkb24mIzM5O3QgcnVuIGEgS01TQU4gc2Vzc2lvbiBpZiBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3b3VsZCBjYXRjaCB0aGUgYnVnLiBXZSBvbmx5IG5lZWQgS01TQU4gaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgT05MWSBkZXRlY3RlZCBieSBLTVNBTi4gU2luY2UgYGh0YWJsZV9zaXplYCBpcyBpbml0aWFsaXplZCwgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIGdsb2JhbCBzdHJ1Y3QsIGFuZCBub3RoaW5nIGlzIHJlYWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgaXNuJiMzOTt0IHByb3Blcmx5IGluaXRpYWxpemVkLCB0aGlzIGRvZXNuJiMzOTt0IGFwcGx5LgoKSGVyZSwgc3BlY2lmaWNhbGx5OgoxLiBgaHRhYmxlX3NpemVgIGlzIGEgc3RhY2sgdmFyaWFibGUgaW5pdGlhbGl6ZWQgYnkgYFJFQURfT05DRWAuCjIuIGB0bXBgIGlzIGEgc3RhY2sgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBjb3B5LgozLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4KNC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuCgpBbHJpZ2h0LCBmaW5hbCBjaGVjayBjb21wbGV0ZS4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjA2LjI4Mzc3MTg5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQ4NDAxNDI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiU1lTQ1RMXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AgYnkgcmVtb3ZpbmcgdGhlIGdsb2JhbCBzdGF0aWMgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBhbmQgaW5zdGVhZCB1c2luZyBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGN0bF90YWJsZWAgYW5kIGxvY2FsIHZhcmlhYmxlIHRvIHJlc2l6ZSB0aGUgY29ubnRyYWNrIGhhc2ggdGFibGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCBzeXNjdGwgZW50cnkgYW5kIHdhcnJhbnRzIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IG9yIHN5c2N0bCBoYW5kbGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6MDYuMjgzNzc3NzYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTE2MjE2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMTE3YjRiZDE4ODFkOGUxM2IyNmIzNTM5ZTA3MzYzMjRlMGNhZmQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDE1OjE3OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xcbmluZGV4IGY0ZjJkODIxOTJkNTQuLjRiNjkyYTE4NGU5NDEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuQEAgLTUzMywyNyArNTMzLDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jb3VudCk7XFxuIC8qIFN5c2N0bCBzdXBwb3J0ICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbi0vKiBzaXplIHRoZSB1c2VyICp3YW50cyB0byBzZXQgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciBfX3JlYWRfbW9zdGx5O1xcbi1cXG4gc3RhdGljIGludFxcbiBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4gXFx0XFx0XFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7XFxuK1xcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogbW9kdWxlX3BhcmFtIGhhc2hzaXplIGNvdWxkIGhhdmUgY2hhbmdlZCB2YWx1ZSAqL1xcbi1cXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcXG4rXFx0dG1wLmRhdGEgPSBcXHUwMDI2aHRhYmxlX3NpemU7XFxuIFxcbi1cXHRyZXQgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4rXFx0cmV0ID0gcHJvY19kb2ludHZlYyhcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDAgfHwgIXdyaXRlKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogdXBkYXRlIHJldCwgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gc2F0aXNmeSByZXF1ZXN0ICovXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcik7XFxuLVxcbi1cXHQvKiB1cGRhdGUgaXQgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGJ5IGNvbm50cmFjayAqL1xcbi1cXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcXG4rXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNjU3LDcgKzY1Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xcbiBcXHR9LFxcbiBcXHRbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdID0ge1xcbiBcXHRcXHQucHJvY25hbWUgICAgICAgPSBcXFwibmZfY29ubnRyYWNrX2J1Y2tldHNcXFwiLFxcbi1cXHRcXHQuZGF0YSAgICAgICAgICAgPSBcXHUwMDI2bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIsXFxuIFxcdFxcdC5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxcbiBcXHRcXHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxcbiBcXHRcXHQucHJvY19oYW5kbGVyICAgPSBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwsXFxuQEAgLTExNTMsOCArMTE0Nyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZClcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXRfc3lzY3RsO1xcbiBcXHR9XFxuLVxcbi1cXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcXG4gI2VuZGlmXFxuIFxcbiBcXHRuZl9jb25udHJhY2tfaW5pdF9lbmQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6MDYuNzc2MTg4MjU2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQyNzg0MjEzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIlNZU0NUTFwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Nvbm50cmFja19oYXNoX3N5c2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgIGJ5IHJlbW92aW5nIHRoZSBnbG9iYWwgc3RhdGljIHZhcmlhYmxlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgYW5kIGluc3RlYWQgdXNpbmcgYSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBjdGxfdGFibGVgIGFuZCBsb2NhbCB2YXJpYWJsZSB0byByZXNpemUgdGhlIGNvbm50cmFjayBoYXNoIHRhYmxlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnVja2V0c2Agc3lzY3RsIGVudHJ5IGFuZCB3YXJyYW50cyBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBvciBzeXNjdGwgaGFuZGxpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzExN2I0YmQxODgxZDhlMTNiMjZiMzUzOWUwNzM2MzI0ZTBjYWZkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE1OjE3OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5pbmRleCBmNGYyZDgyMTkyZDU0Li40YjY5MmExODRlOTQxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbkBAIC01MzMsMjcgKzUzMywyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY291bnQpO1xuIC8qIFN5c2N0bCBzdXBwb3J0ICovXG4gXG4gI2lmZGVmIENPTkZJR19TWVNDVExcbi0vKiBzaXplIHRoZSB1c2VyICp3YW50cyB0byBzZXQgKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyIF9fcmVhZF9tb3N0bHk7XG4tXG4gc3RhdGljIGludFxuIG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIFx0XHRcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbitcdHVuc2lnbmVkIGludCBodGFibGVfc2l6ZSA9IFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpO1xuK1x0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogbW9kdWxlX3BhcmFtIGhhc2hzaXplIGNvdWxkIGhhdmUgY2hhbmdlZCB2YWx1ZSAqL1xuLVx0bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7XG4rXHR0bXAuZGF0YSA9IFx1MDAyNmh0YWJsZV9zaXplO1xuIFxuLVx0cmV0ID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4rXHRyZXQgPSBwcm9jX2RvaW50dmVjKFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwIHx8ICF3cml0ZSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyKTtcbi1cbi1cdC8qIHVwZGF0ZSBpdCB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgYnkgY29ubnRyYWNrICovXG4tXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcbitcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NTcsNyArNjUyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4gXHR9LFxuIFx0W05GX1NZU0NUTF9DVF9CVUNLRVRTXSA9IHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCJuZl9jb25udHJhY2tfYnVja2V0c1wiLFxuLVx0XHQuZGF0YSAgICAgICAgICAgPSBcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcixcbiBcdFx0Lm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGludCksXG4gXHRcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXG4gXHRcdC5wcm9jX2hhbmRsZXIgICA9IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCxcbkBAIC0xMTUzLDggKzExNDcsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KHZvaWQpXG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X3N5c2N0bDtcbiBcdH1cbi1cbi1cdG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplO1xuICNlbmRpZlxuIFxuIFx0bmZfY29ubnRyYWNrX2luaXRfZW5kKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxNzowNi43NzYxOTAyNzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDA2ODMwNzY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbm50cmFjayBIYXNoIFRhYmxlIFNpemUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBzdGFuZGFsb25lIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuXG5cbkZyb20gYSBxdWljayBkaWZmLCBpdCBsb29rcyBsaWtlIHRoZXkncmUgcmVtb3ZpbmcgdGhlIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSouIFRoZSBjb2RlIGNoYW5nZSBpbiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpcyB0aGUgY3J1eCBvZiBpdC4gUHJldmlvdXNseSwgdGhlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgd2FzIGEgY29weSBvZiB0aGUgYWN0dWFsIGhhc2ggdGFibGUgc2l6ZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIHVzaW5nIGBSRUFEX09OQ0VgIHRvIGVuc3VyZSBhIGNvcnJlY3QgdmFsdWUuIFRoZSBgY3RsX3RhYmxlYCBpcyB0aGVuIGNvcGllZCwgdGhlIGRhdGEgcG9pbnRlciBtb2RpZmllZCB0byBwb2ludCB0byBgaHRhYmxlX3NpemVgLCBhbmQgYHByb2NfZG9pbnR2ZWNgIGlzIGNhbGxlZC4gQ3JpdGljYWxseSwgdGhlIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgIGZ1bmN0aW9uIG5vdyBvcGVyYXRlcyBvbiB0aGlzIGxvY2FsIGBodGFibGVfc2l6ZWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdXNlciB2YXJpYWJsZS4gVGhpcyBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHN0YWxlIHZhbHVlIGlzc3VlIHdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIuIFRoZSB1cGRhdGUgb2YgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBiYWNrIHRvIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgIGFmdGVyIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgIGlzIGdvbmUuXG5cblRoZSBjaGFuZ2UgaW4gYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCByZW1vdmVzIHRoZSByZWZlcmVuY2UgdG8gYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBzaW5jZSB0aGUgYGN0bF90YWJsZWAgaXMgbm93IGNvbnN0IGFuZCB0aGUgZGF0YSBpcyBzZXQgdG8gcG9pbnQgdG8gbG9jYWwgYGh0YWJsZV9zaXplYC4gQW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGluIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0YCBpcyBhbHNvIHJlbW92ZWQuIFRoaXMgYWxsIGxvb2tzIHJlbGF0ZWQuXG5cbk15IGluaXRpYWwgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGVuc3VyaW5nIHRoZSBjb3JyZWN0IGhhc2ggdGFibGUgc2l6ZSBpcyB1c2VkIGR1cmluZyB0aGUgcmVzaXplIG9wZXJhdGlvbiwgYXZvaWRpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3Igc3RhbGUgdmFsdWUgcmVhZC4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcG9zc2libHkgcmVsZXZhbnQgY29tbWl0IG1lc3NhZ2VzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGFkZHJlc3NlcyBhIGtub3duIGlzc3VlLCBtYXliZSByZWxhdGVkIHRvIG1vZHVsZSBwYXJhbWV0ZXIgdXBkYXRlcyBvciBjb25jdXJyZW50IGFjY2Vzcy4gS25vd2luZyB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZSBpcyBjcml0aWNhbCBiZWZvcmUgSSBjYW4gZnVsbHkgZXZhbHVhdGUgdGhlIHNvdW5kbmVzcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjI2Ljg0NDUwMTM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTI1OlxcdHUzMiBuZl9jb25udHJhY2tfY291bnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19uZXQgKmNuZXQgPSBuZl9jdF9wZXJuZXQobmV0KTtcXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZjbmV0LVxcdTAwM2Vjb3VudCk7XFxuIDUzMDpcXHR9XFxuIDUzMTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY291bnQpO1xcbiA1MzI6XFx0XFxuIDUzMzpcXHQvKiBTeXNjdGwgc3VwcG9ydCAqL1xcbiA1MzQ6XFx0XFxuIDUzNTpcXHQjaWZkZWYgQ09ORklHX1NZU0NUTFxcbiA1MzY6XFx0c3RhdGljIGludFxcbiA1Mzc6XFx0bmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIDUzODpcXHRcXHRcXHRcXHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4gNTM5OlxcdHtcXG4gNTQwOlxcdFxcdHVuc2lnbmVkIGludCBodGFibGVfc2l6ZSA9IFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpO1xcbiA1NDE6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7XFxuIDU0MjpcXHRcXHRpbnQgcmV0O1xcbiA1NDM6XFx0XFxuIDU0NDpcXHRcXHR0bXAuZGF0YSA9IFxcdTAwMjZodGFibGVfc2l6ZTtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0cmV0ID0gcHJvY19kb2ludHZlYyhcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4gNTQ3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwIHx8ICF3cml0ZSlcXG4gNTQ4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xcbiA1NTE6XFx0XFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcXG4gNTUyOlxcdFxcdHJldHVybiByZXQ7XFxuIDU1MzpcXHR9XFxuIDU1NDpcXHRcXG4gNTU1OlxcdHN0YXRpYyBpbnRcXG4gNTU2OlxcdG5mX2Nvbm50cmFja19sb2dfaW52YWxpZF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4gNTU3OlxcdFxcdFxcdFxcdFxcdHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDU1ODpcXHR7XFxuIDU1OTpcXHRcXHRpbnQgcmV0LCBpO1xcbiA1NjA6XFx0XFxuIDU2MTpcXHRcXHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4gNTYyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwIHx8ICF3cml0ZSlcXG4gNTYzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdGlmICgqKHU4ICopdGFibGUtXFx1MDAzZWRhdGEgPT0gMClcXG4gNTY2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHQvKiBMb2FkIG5mX2xvZ19zeXNsb2cgb25seSBpZiBubyBsb2dnZXIgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgKi9cXG4gNTY5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBORlBST1RPX05VTVBST1RPOyBpKyspIHtcXG4gNTcwOlxcdFxcdFxcdGlmIChuZl9sb2dfaXNfcmVnaXN0ZXJlZChpKSlcXG4gNTcxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA1NzI6XFx0XFx0fVxcbiA1NzM6XFx0XFx0cmVxdWVzdF9tb2R1bGUoXFxcIiVzXFxcIiwgXFxcIm5mX2xvZ19zeXNsb2dcXFwiKTtcXG4gNTc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxNzoyNi44NDQ2MDM0MTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTkzMDAyMDgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgQ29tcGlsYXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgZXhhY3RseSB3aGVyZSBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3MgdGhlIGZpcnN0IGFuZCBtb3N0IGRpcmVjdCByb3V0ZSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZWAgaXMgdHJlYXRlZCwgYW5kIGlmIGFueSBhc3NvY2lhdGVkIGBzeXNjdGxgIHNldHRpbmdzIGFyZSBpbnZvbHZlZC4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzcGVjaWZpYyBmaWxlLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSByZWFsbHkgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suIEknbSBhZnRlciB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgaXRzIGNvbXBpbGF0aW9uIGlzIGNvbmRpdGlvbmFsLCBkZXBlbmRlbnQgb24gb3RoZXIgbW9kdWxlcywgb3IgYWx3YXlzIGluY2x1ZGVkLiBLbm93aW5nIGl0cyBjb21waWxhdGlvbiBjb25kaXRpb25zIGRpcmVjdGx5IHBvaW50cyB0byB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBvciBidWlsZCBydWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6MzguNzc0NjI3MzQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDYyMTI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfc3RhbmRhbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mz1uZXRmaWx0ZXItJChDT05GSUdfTkVURklMVEVSX05FVExJTkspICs9IG5mbmV0bGluay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVxcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTYtXFx0XFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz00NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjdF9jcHVfc2VxX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy00ODAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjQ4MTpzdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTQ4Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTA4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo1MDk6c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9wcm9jKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTEwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MTQtI2Vsc2VcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTE1OnN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTE2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MTktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjUyMDpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3Byb2Moc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MjEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTkxNz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9uZXRmaWx0ZXJfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05MjgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjkyOTpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3RjcF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk2My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6OTY0OnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc2N0cF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05ODUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk4NjpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X2dyZV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05ODctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6OTk3OnN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05OTgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMjgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMjk6XFx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKG5ldCwgdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDMwOlxcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc2N0cF9zeXNjdGwobmV0LCB0YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMzE6XFx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9ncmVfc3lzY3RsKG5ldCwgdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwNTM6c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDU0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDYyLSNlbHNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwNjM6c3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNjQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNjctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwNjg6c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDY5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0xMDczPXN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19maW5pX25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA3ODpcXHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3Byb2MobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA3OTpcXHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDgwLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0xMDgyPXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDg4OlxcdHJldCA9IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwODktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA5MjpcXHRyZXQgPSBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3Byb2MobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA5My1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTEwLW91dF9pbml0X25ldDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTExMTpcXHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3Byb2MobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTExMi1vdXRfcHJvYzpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTExMzpcXHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTE0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9MTEyNz1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG5mX2Nvbm50cmFja19uZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExMzMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjExMzQ6c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTM1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMTcwOnN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pKHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExNzEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExNzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjExODA6bW9kdWxlX2luaXQobmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjExODE6bW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjM5LjI1NTI1ODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjUzMjk4NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIG5mX2Nvbm50cmFjayoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYG5mX2Nvbm50cmFja2AuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGxpa2VseSBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBuZXR3b3JraW5nIG9yIHNlY3VyaXR5IGFuYWx5c2lzLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IHN5bWJvbCwgaXRzIGRlZmF1bHQgc2V0dGluZywgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcy4gSSdtIGFsc28gYW50aWNpcGF0aW5nIGNoZWNraW5nIGZvciBwb3RlbnRpYWwgdHJpc3RhdGUgdmFsdWVzLiBLbm93aW5nIGhvdyBpdCdzIGNvbmZpZ3VyZWQgaGVyZSBpcyBzdGVwIHplcm8gZm9yIGFueSBpbnZlc3RpZ2F0aW9uIEkgbmVlZCB0byBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjQyLjUwODU1ODUzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY0MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxNzo0Mi41NjIyMDU3OTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODUxMjk5NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBJJ20gdGhpbmtpbmcgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgYSBtb2RpZmljYXRpb24gdG8gYW4gZXhpc3RpbmcgbmV0ZmlsdGVyIGZlYXR1cmUuIExldCBtZSBqdW1wIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMaW5lcyA4Mi0xMDAgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgd2hlcmUgSSdsbCBiZWdpbi4gVGhpcyByYW5nZSBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9uLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgdGhlIGBjb25maWdgIGtleXdvcmQsIHRoZSBvcHRpb27igJlzIG5hbWUsIGl0cyBkZWZhdWx0IHN0YXRlIChpZiBhbnkpLCB3aGF0IHRoZSBkZXBlbmRlbmN5IGNvbmRpdGlvbnMgYXJlIGFuZCBlc3BlY2lhbGx5LCB3aGF0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIG9wdGlvbiBpcyBhbmQgaXRzIHB1cnBvc2UuIEknbGwgbmVlZCB0byBrbm93OiBJcyBpdCBhIG5ldyBmZWF0dXJlIG9yIGFuIGltcHJvdmVtZW50PyBEb2VzIGl0IGludGVyYWN0IHdpdGggZXhpc3RpbmcgbW9kdWxlcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQ/IEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCB0cmVhc3VyZXMgdGhlc2UgbGluZXMgaG9sZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjQ3LjQxMzUwOTU3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdCAgZm9yIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgdmlhIE5GTkVUTElOSy5cXG4gIDgxOlxcdFxcbiAgODI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS1xcbiAgODM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuICA4NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDg1OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbiAgODY6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxcbiAgODc6XFx0XFx0aGVscFxcbiAgODg6XFx0XFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxcbiAgODk6XFx0XFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxcbiAgOTA6XFx0XFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcXG4gIDkzOlxcdFxcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcXG4gIDk0OlxcdFxcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCcgYmVsb3cpLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRjb25maWcgTkZfTE9HX1NZU0xPR1xcbiAgOTk6XFx0XFx0dHJpc3RhdGUgXFxcIlN5c2xvZyBwYWNrZXQgbG9nZ2luZ1xcXCJcXG4gMTAwOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAxMDE6XFx0XFx0aGVscFxcbiAxMDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGUgc3VwcG9ydCBmb3IgcGFja2V0IGxvZ2dpbmcgdmlhIHN5c2xvZy5cXG4gMTAzOlxcdFxcdCAgSXQgc3VwcG9ydHMgSVB2NCwgSVBWNiwgQVJQIGFuZCBjb21tb24gdHJhbnNwb3J0IHByb3RvY29scyBzdWNoXFxuIDEwNDpcXHRcXHQgIGFzIFRDUCBhbmQgVURQLlxcbiAxMDU6XFx0XFx0ICBUaGlzIGlzIGEgc2ltcGxlciBidXQgbGVzcyBmbGV4aWJsZSBsb2dnaW5nIG1ldGhvZCBjb21wYXJlZCB0b1xcbiAxMDY6XFx0XFx0ICBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HLlxcbiAxMDc6XFx0XFx0ICBJZiBib3RoIGFyZSBlbmFibGVkIHRoZSBiYWNrZW5kIHRvIHVzZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4tdGltZVxcbiAxMDg6XFx0XFx0ICBieSBtZWFucyBvZiBwZXItYWRkcmVzcy1mYW1pbHkgc3lzY3RsIHR1bmFibGVzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRpZiBORl9DT05OVFJBQ0tcXG4gMTExOlxcdGNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDExMjpcXHRcXHR0cmlzdGF0ZVxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG4gMTE1OlxcdFxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4gMTE2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiBtYXJrcywgdXNlZCBieSB0aGVcXG4gMTE5OlxcdFxcdCAgYENPTk5NQVJLJyB0YXJnZXQgYW5kIGBjb25ubWFyaycgbWF0Y2guIFNpbWlsYXIgdG8gdGhlIG1hcmsgdmFsdWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6NDcuNDEzNjI2NTc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMjYyMTI0MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbm50cmFjayBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGBORl9DT05OVFJBQ0tgIGhlcmUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIGBORVRGSUxURVJgLiBUaGF0J3Mgc3RhbmRhcmQsIGFuZCBleHBlY3RlZC4gTW92aW5nIGRlZXBlciwgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHN5c2N0bCBzdXBwb3J0IHdpdGhpbiBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBjb250cm9scyBhcmUgZXhwb3NlZC4gQWgsIHJpZ2h0IOKAkyBJIHNlZSBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBhbiBgI2lmZGVmIENPTkZJR19TWVNDVExgLiBUaGF0IHRlbGxzIG1lIHRoYXQgc3lzdGVtIGFkbWluaXN0cmF0b3JzIGNhbiBlbmFibGUgb3IgZGlzYWJsZSBzeXNjdGwncywgYW5kIHRoZSBjb2RlIHdpbGwgcmVhY3QgYWNjb3JkaW5nbHkuIE5vdyBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gdG8gZXhhbWluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6NTguNjc1NzUzODM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcxMTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NTM2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTM3Om5mX2Nvbm50cmFja19oYXNoX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MzgtXFx0XFx0XFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NjM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTY1Ni1cXHRcXHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo2NTc6XFx0XFx0LnByb2NfaGFuZGxlciAgID0gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02NTgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6NTguNzMyNDcxNTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MDk2OTYyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25udHJhY2sgU3lzY3RsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBuZl9jdF9zeXNjdGxfdGFibGVgIHN0cnVjdHVyZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGAucHJvY25hbWVgIGlzIHNldCB0byBcIm5mX2Nvbm50cmFja19idWNrZXRzLFwiIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgY29ubnRyYWNrIGhhc2ggYnVja2V0cyBjb25maWd1cmF0aW9uLCBhcyBJJ2QgZXhwZWN0LiBBbmQgdGhlIGAucHJvY19oYW5kbGVyYCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgd2hpY2ggYWdhaW4sIGxpbmVzIHVwIHBlcmZlY3RseS4gU28gZmFyLCBzbyBnb29kIOKAkyB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBtYWtpbmcgc2Vuc2UsIGFuZCB0aGluZ3Mgc2VlbSB0byBiZSBwb2ludGluZyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIGZvciBtYW5hZ2luZyB0aGUgaGFzaCB0YWJsZS5cblxuTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBuZl9jdF9zeXNjdGxfdGFibGVgIGlzIGFjdHVhbGx5ICpyZWdpc3RlcmVkKi4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQncyBob29rZWQgaW50byB0aGUgc3lzY3RsIGluZnJhc3RydWN0dXJlLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRocm91Z2ggYG5mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgIOKAkyB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciB0aGlzIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24gdG8gb2NjdXIsIGdpdmVuIHRoZSBjb250ZXh0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjYWxsIHRvIHNvbWV0aGluZyBsaWtlIGByZWdpc3Rlcl9zeXNjdGxgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiwgbGlrZWx5IGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgdGhlIG1vZHVsZSdzIGxvYWQgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxODowMi4yNDIxNzA4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4NDg0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3Rfc3lzY3RsX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTU4MD1lbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo2Mzc6c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYzOC1cXHRbTkZfU1lTQ1RMX0NUX01BWF0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9OTk3PXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMDItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMDM6XFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDA0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDA1OlxcdHRhYmxlID0ga21lbWR1cChuZl9jdF9zeXNjdGxfdGFibGUsIHNpemVvZihuZl9jdF9zeXNjdGxfdGFibGUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDA2LVxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNDEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNDMtXFx0aWYgKCFjbmV0LVxcdTAwM2VzeXNjdGxfaGVhZGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxODowMi4yOTYwNDgxMDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcwMzg3MDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25udHJhY2sgU3lzY3RsIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIGNvbm50cmFjayBzeXNjdGwgc2V0dGluZ3MgYXJlIGluaXRpYWxpemVkLiBJIHJlbWVtYmVyIHRoYXQgYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgcmVnaXN0ZXJlZCwgcHJvYmFibHkgd2l0aGluIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bGAuIEJ1dCB3aGF0IGV4YWN0bHkgaXMgdGhhdCBzeXNjdGwgZW50cnk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgYG5mX2N0X25ldGZpbHRlcl90YWJsZWAgb3IgZm9sbG93IHdoZXJlIGBjbmV0LVx1MDAzZXN5c2N0bF9oZWFkZXJgIGlzIHVzZWQsIGFzIHRoYXQncyBwcm9iYWJseSB3aGVyZSBpdCBnZXRzIGhvb2tlZCBpbi4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoaXMgaXMgYWxsIGNvbm5lY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxODowNC45OTk5MjE0NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzA6XFx0XFx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zY3RwX3N5c2N0bChuZXQsIHRhYmxlKTtcXG4xMDMxOlxcdFxcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfZ3JlX3N5c2N0bChuZXQsIHRhYmxlKTtcXG4xMDMyOlxcdFxcbjEwMzM6XFx0XFx0LyogRG9uJ3QgYWxsb3cgbm9uLWluaXRfbmV0IG5zIHRvIGFsdGVyIGdsb2JhbCBzeXNjdGxzICovXFxuMTAzNDpcXHRcXHRpZiAoIW5ldF9lcShcXHUwMDI2aW5pdF9uZXQsIG5ldCkpIHtcXG4xMDM1OlxcdFxcdFxcdHRhYmxlW05GX1NZU0NUTF9DVF9NQVhdLm1vZGUgPSAwNDQ0O1xcbjEwMzY6XFx0XFx0XFx0dGFibGVbTkZfU1lTQ1RMX0NUX0VYUEVDVF9NQVhdLm1vZGUgPSAwNDQ0O1xcbjEwMzc6XFx0XFx0XFx0dGFibGVbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdLm1vZGUgPSAwNDQ0O1xcbjEwMzg6XFx0XFx0fVxcbjEwMzk6XFx0XFxuMTA0MDpcXHRcXHRjbmV0LVxcdTAwM2VzeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFxcXCJuZXQvbmV0ZmlsdGVyXFxcIixcXG4xMDQxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdGFibGUsXFxuMTA0MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSk7XFxuMTA0MzpcXHRcXHRpZiAoIWNuZXQtXFx1MDAzZXN5c2N0bF9oZWFkZXIpXFxuMTA0NDpcXHRcXHRcXHRnb3RvIG91dF91bnJlZ2lzdGVyX25ldGZpbHRlcjtcXG4xMDQ1OlxcdFxcbjEwNDY6XFx0XFx0cmV0dXJuIDA7XFxuMTA0NzpcXHRcXG4xMDQ4OlxcdG91dF91bnJlZ2lzdGVyX25ldGZpbHRlcjpcXG4xMDQ5OlxcdFxcdGtmcmVlKHRhYmxlKTtcXG4xMDUwOlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEwNTE6XFx0fVxcbjEwNTI6XFx0XFxuMTA1MzpcXHRzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXFxuMTA1NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE4OjA1LjAwMDAwNzc3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTAzMDE2Mjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBuZl9jb25udHJhY2tfYnVja2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCDigJMgdGhhdCBzeXNjdGwgZW50cnkgdW5kZXIgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCwgb3IgYWx0ZXJuYXRpdmVseSwgYG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2J1Y2tldHNgLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IG9uZS4gQW55dGltZSB0aGVyZSdzIGEgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24gb24gdGhhdCwgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgZ2V0cyBpbnZva2VkLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIsIGhhbmRsaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsIHZpYSBzeXNjdGwuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IHdoYXQgYWN0dWFsbHkgKmhhcHBlbnMqIHdoZW4gdGhhdCBzeXNjdGwgdmFsdWUgY2hhbmdlcz8gV2hhdCdzIHRoZSBjb3JlIG9mIGl0PyBJdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyB0YWJsZS4gVGhlIHJlYWwgd29yayBpcyBwcm9iYWJseSBkb25lIGluIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgLiBHb3R0YSBjaGVjayB0aGF0IGZ1bmN0aW9uIG5leHQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgdHJpZ2dlcmVkIHdoZW4gdGhlIGJ1Y2tldCBjb3VudCBpcyBtb2RpZmllZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgZ2V0cyB1cGRhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg0NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE5OjQ0LjAzMDE3MzczN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxMDQ1ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNTQwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FsbG9jX2hhc2h0YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI1NDEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjI1NDI6aW50IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZSh1bnNpZ25lZCBpbnQgaGFzaHNpemUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI1NDMte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTI2MDY9aW50IG5mX2Nvbm50cmFja19zZXRfaGFzaHNpemUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNjIxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNjIyOlxcdHJldHVybiBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaGFzaHNpemUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNjIzLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz01Mzc9bmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTUwLVxcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo1NTE6XFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTUyLVxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE5OjQ0LjQ1MTIyNjczMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzI1NzUxMDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyB0aGlzIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIHdoaWNoLCBwZXIgdGhlIGd1aWRlbGluZXMsIG1lYW5zIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbkkndmUgZ290IHRoZSBjb250ZXh0OiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYC4gSXQncyBpbXBhY3RpbmcgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AsIHdoaWNoIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgdGh1cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIFN5emthbGxlciBhbmQgc3lzY3RsIHN5c2NhbGxzIGJhY2sgdGhpcyB1cC5cblxuVGhlIHBhdGNoJ3MgY29yZSBtb2RpZmljYXRpb24gaXMgcmV3cml0aW5nIGhvdyB0aGUgaGFzaCB0YWJsZSBzaXplLCBtYW5hZ2VkIGJ5IGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgLCBpcyBoYW5kbGVkLiBCZWZvcmUsIHdlIGhhZCBhIGdsb2JhbCB2YXJpYWJsZSwgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYC4gTm93LCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZ2xvYmFsLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzLiBJdCB1c2VzIGEgbG9jYWwgYGh0YWJsZV9zaXplYCBhbmQgYSB0ZW1wb3JhcnkgYGN0bF90YWJsZWAuIFRoaXMgaXMgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgY29uY3VycmVuY3kgYW5kIGRhdGEgbWFuYWdlbWVudC5cblxuVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIuIFwiUmVmYWN0b3JpbmdzIHRoYXQuLi4gYWx0ZXIgc3RhdGUgbWFuYWdlbWVudCBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cIiBTbywgZGVzcGl0ZSB0aGUgcG90ZW50aWFsIFwicmVmYWN0b3JpbmdcIiBsYWJlbCwgSSBjYW4ndCBkaXNtaXNzIHRoaXMgYXMgdHJpdmlhbC4gUmVhY2hhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyBtb2RpZmllZC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoaXMgYnkgYW5hbHl6aW5nIHRoZSBndWlkZWxpbmVzIGFnYWluOlxuXG4qICAgXCIzLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXCIg4oCTIFRoZSBwYXRjaCBtb2RpZmllcyBsb2dpYyBpbiBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIGEgcG9zaXRpdmUgbWF0Y2guXG4qICAgXCJETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVNcIiDigJMgVGhpcyByZWluZm9yY2VzIHRoYXQgSSBzaG91bGQgY29uc2lkZXIgdGhpcyBmb3IgZnV6emluZyBldmVuIGlmIGl0IG1pZ2h0IGFwcGVhciBsaWtlIFwianVzdFwiIGEgcmVmYWN0b3JpbmcuXG4qICAgXCIyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVwiIOKAkyBOb25lIG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseS4gSXQncyBub3Qgbm9uLWtlcm5lbCwgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIGFuIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtb2RpZmllZCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gQWx0aG91Z2ggYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGl0LCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgd2lsbCBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCB3aGljaCBpcyB0aGUgZW50cnlwb2ludCB0byB0aGlzIHN1YnN5c3RlbSBmZWF0dXJlLCBhbmQgaXQncyB0aGUgZXhhY3QgZnVuY3Rpb24gdGhhdCB0aGUgY29kZSBtb2RpZmllcy5cblxuRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgSSBuZWVkIHRvIGVuYWJsZSB0aGlzOlxuXG4qICAgVGhlIGNvZGUgaXMgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TWVNDVExgLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuXG4qICAgQWxzbywgYENPTkZJR19ORl9DT05OVFJBQ0tgIG11c3QgYmUgZW5hYmxlZC5cblxuSW4gY29uY2x1c2lvbiwgdGhpcyBpcyBhIGNsZWFyIFwieWVzXCIgZm9yIGZ1enppbmcuIFRoZSBjb2RlJ3MgaW4gYSByZWFjaGFibGUgYXJlYSwgdGhlIG1vZGlmaWNhdGlvbiBpcyBzaWduaWZpY2FudCwgYW5kIEkgY2FuIGlkZW50aWZ5IHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTk6NTcuNzA4NzQwODE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc3MDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSArPSBuZm5ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU6bmZfY29ubnRyYWNrLXlcXHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo2OlxcdFxcdCAgIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo3OlxcdFxcdCAgIG5mX2Nvbm50cmFja19wcm90b19pY21wLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODpcXHRcXHQgICBuZl9jb25udHJhY2tfZXh0ZW5kLm8gbmZfY29ubnRyYWNrX2FjY3QubyBuZl9jb25udHJhY2tfc2VxYWRqLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTktXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDpuZl9jb25udHJhY2stJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IG5mX2Nvbm50cmFja19wcm90b19pY21wdjYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTE6bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUKSArPSBuZl9jb25udHJhY2tfdGltZW91dC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMjpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVTVEFNUCkgKz0gbmZfY29ubnRyYWNrX3RpbWVzdGFtcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMzpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUykgKz0gbmZfY29ubnRyYWNrX2VjYWNoZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykgKz0gbmZfY29ubnRyYWNrX2xhYmVscy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX09WUykgKz0gbmZfY29ubnRyYWNrX292cy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCkgKz0gbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTc6bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NUX1BST1RPX0dSRSkgKz0gbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLG0pXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTpuZl9jb25udHJhY2stJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgKz0gbmZfY29ubnRyYWNrX2JwZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMC1lbHNlIGlmZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSykseSlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxOm5mX2Nvbm50cmFjay0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0gbmZfY29ubnRyYWNrX2JwZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMi1lbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSykgKz0gbmZuZXRsaW5rX2hvb2sub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zMy0jIGNvbm5lY3Rpb24gdHJhY2tpbmdcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICs9IG5mX2Nvbm50cmFjay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zNS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM2OiMgbmV0bGluayBpbnRlcmZhY2UgZm9yIG5mX2Nvbm50cmFja1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTkspICs9IG5mX2Nvbm50cmFja19uZXRsaW5rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSArPSBuZm5ldGxpbmtfY3RoZWxwZXIub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00MS0jIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyc1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDI6bmZfY29ubnRyYWNrX2gzMjMtb2JqcyA6PSBuZl9jb25udHJhY2tfaDMyM19tYWluLm8gbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00My1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBKSArPSBuZl9jb25udHJhY2tfYW1hbmRhLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfRlRQKSArPSBuZl9jb25udHJhY2tfZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMykgKz0gbmZfY29ubnRyYWNrX2gzMjMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19JUkMpICs9IG5mX2Nvbm50cmFja19pcmMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19CUk9BRENBU1QpICs9IG5mX2Nvbm50cmFja19icm9hZGNhc3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TKSArPSBuZl9jb25udHJhY2tfbmV0Ymlvc19ucy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NOTVApICs9IG5mX2Nvbm50cmFja19zbm1wLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCkgKz0gbmZfY29ubnRyYWNrX3BwdHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTI6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TQU5FKSArPSBuZl9jb25udHJhY2tfc2FuZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCkgKz0gbmZfY29ubnRyYWNrX3NpcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1NDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFApICs9IG5mX2Nvbm50cmFja190ZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxOTo1Ny43NTg1MTcyODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY2NjEzNjgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIGxpa2Ugd2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBORVRGSUxURVJgIGlzIGFjdHVhbGx5IHJlcXVpcmVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGluY2x1c2lvbiBwYXRoLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYG5ldGZpbHRlcmAgaXMgZGVmaW5lZCBzb21ld2hlcmUgd2l0aGluIHRoZSBgbmV0YCBkaXJlY3RvcnksIHNvIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgZWl0aGVyIGBuZXQvS2NvbmZpZ2Agb3IgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcyB3aGVyZSBgbmV0ZmlsdGVyYCdzIGNvbXBvbmVudHMgYXJlIHR5cGljYWxseSBkZWNsYXJlZCBhbmQgaW5jbHVkZWQuIFRoYXQncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2Ugd2hlcmUgSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIGRldGVybWluZSB3aGF0IGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5IHRyaWdnZXIgdGhlIGRlcGVuZGVuY3kgb24gYE5FVEZJTFRFUmAsIGlmIGFueS4gSXQncyBhIGJpdCBvZiBhIGJyZWFkY3J1bWIgaHVudCwgYnV0IHRoYXQncyB0aGUgYmVzdCBhcHByb2FjaCB0byBlc3RhYmxpc2ggdGhlIGFjdHVhbCBkZXBlbmRlbmNpZXMgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTk0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDAuNDI0NjU2NjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjMwNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTIzMT1jb25maWcgQlJJREdFX05FVEZJTFRFUlxcbi0tXFxubmV0L0tjb25maWctMjQ2LVxcbm5ldC9LY29uZmlnOjI0Nzpzb3VyY2UgXFxcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNDg6c291cmNlIFxcXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNDk6c291cmNlIFxcXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNTA6c291cmNlIFxcXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDAuNDk2MjkyNjM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNzY5NjU1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYmFzZWQgb24gdGhlIHByb21wdDpcblxuKipSZXZpZXdpbmcgdGhlIG5ldC9LY29uZmlnIFNlY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZm9jdXMgb24gbGluZXMgMjIwLTI1NSB3aXRoaW4gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHBpY3R1cmUgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoYXQgY29uZmlndXJhdGlvbiBmaWxlIGluIG15IGhlYWQuIEknbSBwcm9iYWJseSByZWNhbGxpbmcgdGhlIHZhcmlvdXMgbmV0d29yay1yZWxhdGVkIG9wdGlvbnMsIHN1Yi1tZW51cywgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCB0aGVyZS4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgd2hlcmUgdGhpcyBzZWN0aW9uIHNpdHMgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBmZWF0dXJlIGVuYWJsaW5nLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBleHRlcm5hbCBwYWNrYWdlcy4gVGhlIGV4YWN0IGNvbnRlbnQgd2l0aGluIHRob3NlIGxpbmVzIGlzLCBvZiBjb3Vyc2UsIHRoZSBkZXRhaWwgSSBuZWVkIHRvIG5vdyBleGFtaW5lLiBJIHdpbGwgbGlrZWx5IGJlIHRyeWluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0IG9wdGlvbnMgYXJlIGJlaW5nIGRlZmluZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBzcGVjaWZpYyBzZWN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIHB1cnBvc2Ugb2YgdGhlc2UgbGluZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDMuNjczMjYwNTQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxuIDIyMTpcXHRcXHRib29sIFxcXCJBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcXCJcXG4gMjIyOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSXFxuIDIyMzpcXHRcXHRkZWZhdWx0IHlcXG4gMjI0OlxcdFxcdGhlbHBcXG4gMjI1OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUgeW91IGNhbiBzZWxlY3QgYmV0d2VlbiBhbGwgdGhlIG5ldGZpbHRlciBtb2R1bGVzLlxcbiAyMjY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gdGhlIG1vcmUgdW51c3VhbCBvbmVzIHdpbGwgbm90IGJlIHNob3duIGFuZCB0aGVcXG4gMjI3OlxcdFxcdCAgYmFzaWMgb25lcyBuZWVkZWQgYnkgbW9zdCBwZW9wbGUgd2lsbCBkZWZhdWx0IHRvICdNJy5cXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAyMzA6XFx0XFxuIDIzMTpcXHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxcbiAyMzI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXFxcIlxcbiAyMzM6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gMjM0OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gMjM1OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDIzNjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gMjM3OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAyMzg6XFx0XFx0aGVscFxcbiAyMzk6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcXG4gMjQwOlxcdFxcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxcbiAyNDE6XFx0XFx0ICB3YW50IHRoaXMgb3B0aW9uIGVuYWJsZWQuXFxuIDI0MjpcXHRcXHQgIEVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIG9wdGlvbiBkb2Vzbid0IGVuYWJsZSBvciBkaXNhYmxlXFxuIDI0MzpcXHRcXHQgIGVidGFibGVzLlxcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdHNvdXJjZSBcXFwibmV0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNDg6XFx0c291cmNlIFxcXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjQ5OlxcdHNvdXJjZSBcXFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI1MDpcXHRzb3VyY2UgXFxcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI1MTpcXHRcXG4gMjUyOlxcdGVuZGlmICMgaWYgTkVURklMVEVSXFxuIDI1MzpcXHRcXG4gMjU0OlxcdHNvdXJjZSBcXFwibmV0L3NjdHAvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDMuNjczMzQxMjE2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2NDk5MjU4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGUgaW5pdGlhbCBjYW5kaWRhdGVzIHNlZW0gdG8gYmUgYE5FVEZJTFRFUmAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYFNZU0NUTGAuIEkga25vdyB0aGVzZSBhcmUgaW50ZXJjb25uZWN0ZWQsIHNvIGxldCdzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGNoZWNrLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gYE5GX0NPTk5UUkFDS2AncyBkZXBlbmRlbmNpZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIExvb2tpbmcgYXQgbGluZXMgODItODcsIHRoZSBzb3VyY2UgY29uZmlybXMgaXQncyBuZXN0ZWQgdW5kZXIgYW4gYGlmIE5FVEZJTFRFUmAgYmxvY2ssIHdoaWNoIG9yaWdpbmF0ZXMgaW4gYG5ldC9LY29uZmlnYC4gRXhjZWxsZW50LCB0aGF0IGNvbmZpcm1zIHRoZSByZWxhdGlvbnNoaXAuXG5cbk5vdywgYXMgSSByZWNhbGwsIGBTWVNDVExgIGlzIG5lY2Vzc2FyeSBmb3IgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLiBTbywgbXkgY29yZSBzZXQgb2YgY29uZmlndXJhdGlvbnMsIGFzIG9mIG5vdywgYXJlOlxuXG4qICAgYE5FVEZJTFRFUmBcbiogICBgTkZfQ09OTlRSQUNLYFxuKiAgIGBTWVNDVExgXG5cbkhvd2V2ZXIsIGxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBJJ2xsIGRvdWJsZS1jaGVjayBpZiBgTkZfQ09OTlRSQUNLYCBvciBgU1lTQ1RMYCBpdHNlbGYgaGFzICpmdXJ0aGVyKiBkZXBlbmRlbmNpZXMuIFdoZXJlIHdvdWxkIGBTWVNDVExgIGxpa2VseSBiZSBkZWZpbmVkPyBFaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGZzL3Byb2MvS2NvbmZpZ2AgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LiBJJ2xsIG1vdmUgb24gdG8gY2hlY2sgYFNZU0NUTGAgaW4gS2NvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDowNy4zMjMyNjk5NzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjE0MzI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1lTQ1RMXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDcuMzcyNDkyMTU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMDM4NDI4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlN5c3RlbSBDb25maWd1cmF0aW9uIEh1bnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYFNZU0NUTGAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBwZXJmb3JtIGEgZ2xvYmFsIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBjb2RlYmFzZSBvciBmaWxlIHN5c3RlbSB0cmVlLCBhc3N1bWluZyBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MgcmlnaHRzLiBJJ20gdGhpbmtpbmcgYSByZWN1cnNpdmUgc2VhcmNoIHdvdWxkIGJlIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IHRvIGVuc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciB2YXJpYXRpb25zIGluIG5hbWluZyBjb252ZW50aW9ucyDigJMgaXQgY291bGQgYmUgYHN5c2N0bGAsIGBzeXNjdGwuY29uZmAsIG9yIHNvbWUgb3RoZXIgdmFyaWF0aW9uLiBUaGlzIHRob3JvdWdobmVzcyBpcyBjcnVjaWFsOyBJIGNhbid0IGFmZm9yZCB0byBvdmVybG9vayBhIGNyaXRpY2FsIHBhcmFtZXRlciBsdXJraW5nIGluIHNvbWUgb2JzY3VyZSBjb3JuZXIgb2YgdGhlIGNvbmZpZyBzcGFjZS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHRha2Ugc29tZSB0aW1lLCBzbyBJJ2xsIG5lZWQgdG8gcmVmaW5lIHRoZSBzZWFyY2ggdGVybXMgYW5kIGxvY2F0aW9ucyBhcyBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Njc1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDkuNjc2MzM4MTY2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQwMTU3MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgU1lTQ1RMJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL0tjb25maWc9Njc9Y29uZmlnIFBST0NfVk1DT1JFX0RFVklDRV9SQU1cXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy04Mi1cXG5mcy9wcm9jL0tjb25maWc6ODM6Y29uZmlnIFNZU0NUTFxcbmZzL3Byb2MvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTeXNjdGwgc3VwcG9ydCAoL3Byb2Mvc3lzKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjIwOjEyLjExNjUwMzAxN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDAyMTQ4MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGBmcy9wcm9jL0tjb25maWdgLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGhhcHBlbmluZyBhcm91bmQgbGluZSA4My4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcHJvY2ZzIGZlYXR1cmUgb3IgbW9kdWxlLiBQZXJoYXBzIHRoZXJlJ3MgYSBuZXcgb3IgbW9kaWZpZWQgc2V0dGluZywgb3IgbWF5YmUgSSBzdXNwZWN0IGEgYnVnIGluIGhvdyBhIHBhcnRpY3VsYXIgb3B0aW9uIGlzIGJlaW5nIGhhbmRsZWQgdXBzdHJlYW0uIFRoaXMgbG9jYXRpb24gaXMgYSBsaWtlbHkgc3BvdCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHByb2MgZmlsZXN5c3RlbTsgc3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBob3cgY2VydGFpbiBhc3BlY3RzIG9mIHByb2NmcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIEtjb25maWcgc3ludGF4OiBgY29uZmlnYCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuLCB0cnlpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb25kaXRpb25hbCBsb2dpYyBwcmVzZW50IHRoZXJlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IHZhcmlhYmxlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBlZmZlY3RzLiBNeSBnb2FsIGlzIHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIHJlc29sdmUgdGhlIGlzc3VlIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MTQuNTE4NjU0MzI5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXG4gIDgxOlxcdFxcdCAgUmVsZXZhbnQgYXJjaGl0ZWN0dXJlcyBzaG91bGQgc2VsZWN0IE5FRURfUFJPQ19WTUNPUkVfREVWSUNFX1JBTS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0Y29uZmlnIFNZU0NUTFxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiU3lzY3RsIHN1cHBvcnQgKC9wcm9jL3N5cylcXFwiIGlmIEVYUEVSVFxcbiAgODU6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICA4NjpcXHRcXHRkZWZhdWx0IHlcXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgVGhlIHN5c2N0bCBpbnRlcmZhY2UgcHJvdmlkZXMgYSBtZWFucyBvZiBkeW5hbWljYWxseSBjaGFuZ2luZ1xcbiAgODk6XFx0XFx0ICBjZXJ0YWluIGtlcm5lbCBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMgb24gdGhlIGZseSB3aXRob3V0IHJlcXVpcmluZ1xcbiAgOTA6XFx0XFx0ICBhIHJlY29tcGlsZSBvZiB0aGUga2VybmVsIG9yIHJlYm9vdCBvZiB0aGUgc3lzdGVtLiAgVGhlIHByaW1hcnlcXG4gIDkxOlxcdFxcdCAgaW50ZXJmYWNlIGlzIHRocm91Z2ggL3Byb2Mvc3lzLiAgSWYgeW91IHNheSBZIGhlcmUgYSB0cmVlIG9mXFxuICA5MjpcXHRcXHQgIG1vZGlmaWFibGUgc3lzY3RsIGVudHJpZXMgd2lsbCBiZSBnZW5lcmF0ZWQgYmVuZWF0aCB0aGVcXG4gIDkzOlxcdFxcdCAgL3Byb2Mvc3lzIGRpcmVjdG9yeS4gVGhleSBhcmUgZXhwbGFpbmVkIGluIHRoZSBmaWxlc1xcbiAgOTQ6XFx0XFx0ICBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9cXHUwMDNlLiAgTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MTQuNTE4NzMwMjA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NTc2MzEzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgQ09ORklHX1NZU0NUTGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgUFJPQ19GU2AsIGFuZCBhbHNvIGBDT05GSUdfTkVURklMVEVSYCBhbmQgYENPTkZJR19ORl9DT05OVFJBQ0tgLiBUaGF0J3MgdGhlIGxhbmRzY2FwZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGZ1enppbmcgdGFyZ2V0LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgLCBhbmQgdGhlIGNoZWNrIG9mIGBGb2N1c1N5bWJvbHNgIGNvbmZpcm1zIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgc3ltYm9scyBoZXJlPyBMZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgY2hhbmdlZCBpbiB0aGUgZGlmZi4gQWgsIGl0J3MganVzdCBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBhbmQgYG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRgLlxuXG5CdXQgd2FpdCwgYG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRgIGlzIGBfX2luaXRgLCBzbyBpdCdzIG9ubHkgY2FsbGVkIGF0IGJvb3QuIEZ1enppbmcgd2FudHMgcnVudGltZSB0YXJnZXRzLCBzbyB0aGF0J3Mgb3V0LiBXaGF0IGFib3V0IGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgPyBUaGF0ICppcyogY2FsbGVkIGJ5IGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgLiBTaG91bGQgSSBpbmNsdWRlIHRoYXQ/IExldCdzIHNlZS4uLlxuXG5SaWdodCwgYmFzZWQgb24gdGhlIHRyaWFnZSBpbnN0cnVjdGlvbnMsIEknbSBsb29raW5nIGZvciB0aGUgdGFyZ2V0LCB3aGljaCBpbXBsZW1lbnRzIHRoZSBhbHRlcmVkIGxvZ2ljIG9yIGlzIGEgZGlyZWN0IGVudHJ5cG9pbnQuIEFuZCB0aGF0J3MgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAuIE5vdywgdGhlIHBhdGNoICpkb2Vzbid0KiBhbHRlciBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYCBkaXJlY3RseSwgYnV0IGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIHBhc3NlcyBgaHRhYmxlX3NpemVgIHRvIGl0LiBTbywgdGhhdCdzIHdoeSBpdCdzIHBvdGVudGlhbGx5IGltcG9ydGFudC5cblxuQnV0IHRoZSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVyIGZvY3VzZXMgb24gbW9kaWZpZWQgY29kZSBhbmQgaXRzIGRpcmVjdCBlbnRyeXBvaW50LiBTbywgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaXMgdGhlICpwcmltYXJ5KiB0YXJnZXQuIEl0J3MgdGhlIG9uZSBJIG5lZWQgdG8gcHJpb3JpdGl6ZSwgYmVjYXVzZSwgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgY29udGFpbnMgdGhlIG1vZGlmaWVkIGxvZ2ljIChsb2NhbCBzdGFjayB2YXJpYWJsZSwgUkVBRF9PTkNFLCBwcm9jX2RvaW50dmVjIGFuZCBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUpLlxuXG5BbHJpZ2h0LCBsZXQncyBiZSBhYnNvbHV0ZWx5IHN1cmUuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AuIEl0J3MgcmVtb3ZpbmcgYSBnbG9iYWwgdmFyaWFibGUgaW4gZmF2b3Igb2YgYSBsb2NhbCBvbmUgZm9yIHN5c2N0bCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYC4gQW55IGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsb2dpYyBlcnJvcnMgZHVlIHRvIGhvdyB0aGUgc3lzY3RsIGlzIGhhbmRsZWQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZnV6ei4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLlxuXG5UaGVyZWZvcmUsIGVuYWJsZSBjb25maWdzOiBgTkZfQ09OTlRSQUNLYCwgYFNZU0NUTGAsIGBORVRGSUxURVJgIGFuZCBgUFJPQ19GU2AuIFRoZSBjb3JyZWN0IGZvY3VzIHN5bWJvbCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gQWxsIGdvb2QuIFRoaXMgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBmdXp6aW5nIHRyaWFnZSBndWlkZWxpbmVzLiBUaW1lIHRvIG1vdmUgb24gdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0ODIsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MjAuOTc2MzY1MTYzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyMzk4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJTWVNDVExcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCBieSByZW1vdmluZyB0aGUgZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGFuZCBpbnN0ZWFkIHVzaW5nIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgY3RsX3RhYmxlYCBhbmQgbG9jYWwgdmFyaWFibGUgdG8gcmVzaXplIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc3lzL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2J1Y2tldHNgIHN5c2N0bCBlbnRyeSBhbmQgd2FycmFudHMgZnV6emluZyBmb3IgY29uY3VycmVuY3kgb3Igc3lzY3RsIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJTWVNDVExcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCBieSByZW1vdmluZyB0aGUgZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGFuZCBpbnN0ZWFkIHVzaW5nIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgY3RsX3RhYmxlYCBhbmQgbG9jYWwgdmFyaWFibGUgdG8gcmVzaXplIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc3lzL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2J1Y2tldHNgIHN5c2N0bCBlbnRyeSBhbmQgd2FycmFudHMgZnV6emluZyBmb3IgY29uY3VycmVuY3kgb3Igc3lzY3RsIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDoyMS4wNTQ2MTU1NjJaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzEzMTU4MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MjEuMDU1MjIxODMyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY3MTI1NDYxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIHN5c2N0bCBoYW5kbGVyIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGJ5IHJlcGxhY2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgd2l0aCBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBodGFibGVfc2l6ZWAgYW5kIGEgbG9jYWwgY29weSBvZiBgc3RydWN0IGN0bF90YWJsZWAuIFRoZSBsb2NhbCB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSlgIGFuZCBgdG1wYCBpcyBpbml0aWFsaXplZCBmcm9tIGAqdGFibGVgIGJlZm9yZSBgcHJvY19kb2ludHZlY2AgcmVhZHMgb3Igd3JpdGVzIGB0bXAuZGF0YWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIHBhc3NlZCB0byBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMTE3YjRiZDE4ODFkOGUxM2IyNmIzNTM5ZTA3MzYzMjRlMGNhZmQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTU6MTc6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbmluZGV4IGY0ZjJkODIxOTJkNTQuLjRiNjkyYTE4NGU5NDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuQEAgLTUzMywyNyArNTMzLDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jb3VudCk7XG4gLyogU3lzY3RsIHN1cHBvcnQgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLS8qIHNpemUgdGhlIHVzZXIgKndhbnRzIHRvIHNldCAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgX19yZWFkX21vc3RseTtcbi1cbiBzdGF0aWMgaW50XG4gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gXHRcdFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4ge1xuK1x0dW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7XG4rXHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICp0YWJsZTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBtb2R1bGVfcGFyYW0gaGFzaHNpemUgY291bGQgaGF2ZSBjaGFuZ2VkIHZhbHVlICovXG4tXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcbitcdHRtcC5kYXRhID0gXHUwMDI2aHRhYmxlX3NpemU7XG4gXG4tXHRyZXQgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbitcdHJldCA9IHByb2NfZG9pbnR2ZWMoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgfHwgIXdyaXRlKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogdXBkYXRlIHJldCwgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gc2F0aXNmeSByZXF1ZXN0ICovXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIpO1xuLVxuLVx0LyogdXBkYXRlIGl0IHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBieSBjb25udHJhY2sgKi9cbi1cdG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplO1xuK1x0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY1Nyw3ICs2NTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcbiBcdH0sXG4gXHRbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdID0ge1xuIFx0XHQucHJvY25hbWUgICAgICAgPSBcIm5mX2Nvbm50cmFja19idWNrZXRzXCIsXG4tXHRcdC5kYXRhICAgICAgICAgICA9IFx1MDAyNm5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyLFxuIFx0XHQubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSxcbiBcdFx0Lm1vZGUgICAgICAgICAgID0gMDY0NCxcbiBcdFx0LnByb2NfaGFuZGxlciAgID0gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsLFxuQEAgLTExNTMsOCArMTE0Nyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZClcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfc3lzY3RsO1xuIFx0fVxuLVxuLVx0bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7XG4gI2VuZGlmXG4gXG4gXHRuZl9jb25udHJhY2tfaW5pdF9lbmQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjIwOjIxLjA1NTIyMjg5MloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzA2NTIyMjE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTG9va3MgbGlrZSB3ZSdyZSB0d2Vha2luZyBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN5c2N0bCBpbnRlcmZhY2UgZm9yIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZSBzaXplLiBJJ20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgd2hpY2ggaGFuZGxlcyB0aGUgdXNlcidzIGludGVyYWN0aW9uIHdpdGggdGhlIGAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnVja2V0c2Agc3lzY3RsLlxuXG5JdCBzZWVtcyB0aGUgcHJpbWFyeSBnb2FsIGlzIHRvIHNpbXBsaWZ5IGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlIGhvdyB3ZSBoYW5kbGUgdGhlIGNvbm50cmFjayBoYXNoIHRhYmxlIHNpemUgY29uZmlndXJhdGlvbi4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgc2VwYXJhdGUgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCB0aGF0IHN0b3JlZCB0aGUgdXNlcidzIHJlcXVlc3RlZCBzaXplLCB3aGljaCB3YXMgdGhlbiB1c2VkIGluIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGF0IHZhcmlhYmxlLlxuXG5JbnN0ZWFkLCB0aGUgcGF0Y2ggbm93IHJlYWRzIGRpcmVjdGx5IGZyb20gYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZWAgd2l0aGluIHRoZSBoYW5kbGVyLiBJdCBhbHNvIGFwcGVhcnMgdGhlIHBhdGNoIHN0b3JlcyB0aGUgcmVhZCB2YWx1ZSB0ZW1wb3JhcmlseSBpbiBhIGxvY2FsIHZhcmlhYmxlIGBodGFibGVfc2l6ZWAgb24gdGhlIHN0YWNrLCB3aGljaCBpcyB0aGVuIHBhc3NlZCB0byBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYC4gSSBndWVzcyB0aGlzIGlzIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cblxuVGhlIGV4aXN0aW5nIGNvZGUgdXNlZCB0byB1cGRhdGUgdGhlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgdG8gdGhlIGN1cnJlbnQgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZWAgYWZ0ZXIgYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAuIFRoZSBwYXRjaCByZW1vdmVzIHRoYXQgbGFzdCB1cGRhdGUgc3RlcC5cblxuVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbi4gQnkgZWxpbWluYXRpbmcgdGhlIHNlcGFyYXRlIHVzZXItc3BhY2UgdmFyaWFibGUsIHdlJ3JlIG1ha2luZyB0aGUgY29kZSBjbGVhbmVyIGFuZCBsZXNzIHByb25lIHRvIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBJdCdzIGEgc21hbGwgY2hhbmdlLCBidXQgaXQncyBnb29kIHByYWN0aWNlIHRvIGtlZXAgdGhpbmdzIHN0cmVhbWxpbmVkLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIgYGhhc2hzaXplYC4gSSdsbCBhbHNvIGNoZWNrIGlmIHRoaXMgYWZmZWN0cyB0aGUgd2F5IHRoZSBjb25udHJhY2sgdGFibGUgc2l6ZSBpcyByZXBvcnRlZCBvciBoYW5kbGVkIGluIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIExldCdzIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgc3RpbGwgd29ya3MgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDo0NC4xMjA0NDg0NjZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyNTpcXHR1MzIgbmZfY29ubnRyYWNrX2NvdW50KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4gNTI2OlxcdHtcXG4gNTI3OlxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbmV0ICpjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2Y25ldC1cXHUwMDNlY291bnQpO1xcbiA1MzA6XFx0fVxcbiA1MzE6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NvdW50KTtcXG4gNTMyOlxcdFxcbiA1MzM6XFx0LyogU3lzY3RsIHN1cHBvcnQgKi9cXG4gNTM0OlxcdFxcbiA1MzU6XFx0I2lmZGVmIENPTkZJR19TWVNDVExcXG4gNTM2OlxcdHN0YXRpYyBpbnRcXG4gNTM3OlxcdG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbiA1Mzg6XFx0XFx0XFx0XFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDUzOTpcXHR7XFxuIDU0MDpcXHRcXHR1bnNpZ25lZCBpbnQgaHRhYmxlX3NpemUgPSBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTtcXG4gNTQxOlxcdFxcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlO1xcbiA1NDI6XFx0XFx0aW50IHJldDtcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0dG1wLmRhdGEgPSBcXHUwMDI2aHRhYmxlX3NpemU7XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdFxcdHJldCA9IHByb2NfZG9pbnR2ZWMoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuIDU0NzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCB8fCAhd3JpdGUpXFxuIDU0ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NDk6XFx0XFxuIDU1MDpcXHRcXHQvKiB1cGRhdGUgcmV0LCB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBzYXRpc2Z5IHJlcXVlc3QgKi9cXG4gNTUxOlxcdFxcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XFxuIDU1MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NTM6XFx0fVxcbiA1NTQ6XFx0XFxuIDU1NTpcXHRzdGF0aWMgaW50XFxuIDU1NjpcXHRuZl9jb25udHJhY2tfbG9nX2ludmFsaWRfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIDU1NzpcXHRcXHRcXHRcXHRcXHR2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbiA1NTg6XFx0e1xcbiA1NTk6XFx0XFx0aW50IHJldCwgaTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0cmV0ID0gcHJvY19kb3U4dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuIDU2MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCB8fCAhd3JpdGUpXFxuIDU2MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRpZiAoKih1OCAqKXRhYmxlLVxcdTAwM2VkYXRhID09IDApXFxuIDU2NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTY3OlxcdFxcbiA1Njg6XFx0XFx0LyogTG9hZCBuZl9sb2dfc3lzbG9nIG9ubHkgaWYgbm8gbG9nZ2VyIGlzIGN1cnJlbnRseSByZWdpc3RlcmVkICovXFxuIDU2OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTkZQUk9UT19OVU1QUk9UTzsgaSsrKSB7XFxuIDU3MDpcXHRcXHRcXHRpZiAobmZfbG9nX2lzX3JlZ2lzdGVyZWQoaSkpXFxuIDU3MTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCIlc1xcXCIsIFxcXCJuZl9sb2dfc3lzbG9nXFxcIik7XFxuIDU3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6NDQuMTIwNTQ2MDc2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4NzIxMDE0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzeXNjdGwgUGF0Y2ggZm9yIENvbm50cmFjayBIYXNoIFRhYmxlIFJlc2l6ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gc3RlbSBmcm9tIHRoZSB0cmFuc2l0aW9uIG9mIGBzdHJ1Y3QgY3RsX3RhYmxlYCB0byBgY29uc3RgIGluIHJlY2VudCBrZXJuZWxzLiBQcmV2aW91c2x5LCBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGFjdGVkIGFzIGEgZ2xvYmFsIHZhcmlhYmxlIChvciB3YXMgcG9pbnRlZCB0byBieSBgdGFibGUtXHUwMDNlZGF0YWApIHRvIG1hbmFnZSB0aGUgdXNlci1yZXF1ZXN0ZWQgaGFzaCB0YWJsZSBzaXplIGFjcm9zcyBzeXNjdGwgY2FsbHMuIFRoZSBzaGlmdCB0byBgY29uc3RgIGZvciBgdGFibGVgIHByb2JhYmx5IGludHJvZHVjZWQgY29uY3VycmVuY3kgcHJvYmxlbXMgb3IgbWFkZSB0aGUgZ2xvYmFsIHZhcmlhYmxlIHJlZHVuZGFudC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgY29kZSBpcyBzYWZlIGFuZCBkb2Vzbid0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gTGV0IG1lIHRyYWNlIHRoZSBleGVjdXRpb246XG5cbjEuICBgdW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7YDogT2theSwgYGh0YWJsZV9zaXplYCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgIHVzaW5nIGBSRUFEX09OQ0VgLiBTYWZlIHNvIGZhci5cbjIuICBgc3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7YDogIFdlJ3JlIGNyZWF0aW5nIGEgbG9jYWwsIG1vZGlmaWFibGUgY29weSBvZiB0aGUgb3JpZ2luYWwgYGNvbnN0IHN0cnVjdCBjdGxfdGFibGVgLiBUaGlzIHByZXZlbnRzIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnN0IGRhdGEuXG4zLiAgYHRtcC5kYXRhID0gXHUwMDI2aHRhYmxlX3NpemU7YDogVGhlIGBkYXRhYCBwb2ludGVyIHdpdGhpbiB0aGUgKmNvcHkqIGB0bXBgIGlzIHRoZW4gc2V0IHRvIHBvaW50IHRvIG91ciBsb2NhbCBgaHRhYmxlX3NpemVgIHZhcmlhYmxlLlxuNC4gIGByZXQgPSBwcm9jX2RvaW50dmVjKFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7YDogVGhpcyBpcyB0aGUgY3J1Y2lhbCBwYXJ0LiBJZiB0aGlzIGlzIGEgcmVhZCwgd2hlcmUgYHdyaXRlYCBpcyAwLCB0aGVuIHRoZSBgcHJvY19kb2ludHZlY2AgcmVhZHMgZnJvbSBgKnRtcC5kYXRhYCwgd2hpY2ggaXMgYGh0YWJsZV9zaXplYC4gQW5kIHNpbmNlIGBodGFibGVfc2l6ZWAgaXMgYWxyZWFkeSBpbml0aWFsaXplZCB3aXRoIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgLCBpdCBzaG91bGQgd29yayB3aXRob3V0IHVuaW5pdGlhbGl6ZWQgcmVhZC4gSWYgaXQncyBhIHdyaXRlIChgd3JpdGUgPT0gMWApLCBgcHJvY19kb2ludHZlY2AgcGFyc2VzIHRoZSB1c2VyIGBidWZmZXJgIGFuZCB3cml0ZXMgdGhlIHZhbHVlIHRvIGBodGFibGVfc2l6ZWAuXG5cblRoZSBgaWYgKHJldCBcdTAwM2MgMCB8fCAhd3JpdGUpIHJldHVybiByZXQ7YCBpcyBhIHN0YW5kYXJkIGVycm9yIGNoZWNrLiBGaW5hbGx5LCBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtgIGlzIGNhbGxlZC5cblxuVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBodGFibGVfc2l6ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiBpdCdzIGV2ZXIgcG90ZW50aWFsbHkgcmVhZCBmcm9tLCB3aGV0aGVyIGZvciBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uLiBUaGF0IHJlbW92ZXMgdGhlIHdvcnJ5LiBOb3cgbGV0IG1lIGxvb2sgYXQgYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjIwOjUyLjk5MjY1MjQxNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNTAyMjg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGFzaF9yZXNpemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPTMyNz1pbnQgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZShjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg6MzI4OmludCBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUodW5zaWduZWQgaW50IGhhc2hzaXplKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgtMzI5LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTI1NDA9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfYWxsb2NfaGFzaHRhYmxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjU0MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjU0MjppbnQgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKHVuc2lnbmVkIGludCBoYXNoc2l6ZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjU0My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjYwNj1pbnQgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZShjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjI2MjI6XFx0cmV0dXJuIG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShoYXNoc2l6ZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjMtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTUzNz1uZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01NTAtXFx0LyogdXBkYXRlIHJldCwgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gc2F0aXNmeSByZXF1ZXN0ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjU1MTpcXHRyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaHRhYmxlX3NpemUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01NTItXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6NTUuMzA3NjgyNTc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3NTgzOTU0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gbmZfY3Rfc3lzY3RsX3RhYmxlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbmZfY3Rfc3lzY3RsX3RhYmxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyB0aGluZy4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGluZm9ybWF0aW9uIGNhbiBJIGdsZWFuIGZyb20gaXQ/IElzIGl0IGFib3V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcGVyZm9ybWFuY2UgdHVuaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmc/IEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUsIHByb2JhYmx5IGEgdGFibGUsIGNvbnRhaW5pbmcgdGhlIHN5c2N0bCBlbnRyaWVzIGZvciBOZXRmaWx0ZXIncyBjb25uZWN0aW9uIHRyYWNraW5nIHN1YnN5c3RlbS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGVudHJ5IGNvbnRyb2xzIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIHNldHRpbmdzIG5lZWQgYWRqdXN0bWVudCBiYXNlZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0gbG9hZCwgbmV0d29yayB0b3BvbG9neSwgYW5kIHNlY3VyaXR5IHJlcXVpcmVtZW50cy4gVW5kZXJzdGFuZGluZyB0aGUgb3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgbWV0aG9kcyB3aWxsIGJlIGtleSBmb3Igb3B0aW1pemF0aW9uIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDo1OC4wNjYwODU3ODRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NDU6XFx0XFx0XFx0LmV4dHJhMlxcdFxcdD0gU1lTQ1RMX0lOVF9NQVgsXFxuIDY0NjpcXHRcXHR9LFxcbiA2NDc6XFx0XFx0W05GX1NZU0NUTF9DVF9DT1VOVF0gPSB7XFxuIDY0ODpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9jb25udHJhY2tfY291bnRcXFwiLFxcbiA2NDk6XFx0XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKGludCksXFxuIDY1MDpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4gNjUxOlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWMsXFxuIDY1MjpcXHRcXHR9LFxcbiA2NTM6XFx0XFx0W05GX1NZU0NUTF9DVF9CVUNLRVRTXSA9IHtcXG4gNjU0OlxcdFxcdFxcdC5wcm9jbmFtZSAgICAgICA9IFxcXCJuZl9jb25udHJhY2tfYnVja2V0c1xcXCIsXFxuIDY1NTpcXHRcXHRcXHQubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSxcXG4gNjU2OlxcdFxcdFxcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXFxuIDY1NzpcXHRcXHRcXHQucHJvY19oYW5kbGVyICAgPSBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwsXFxuIDY1ODpcXHRcXHR9LFxcbiA2NTk6XFx0XFx0W05GX1NZU0NUTF9DVF9DSEVDS1NVTV0gPSB7XFxuIDY2MDpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9jb25udHJhY2tfY2hlY2tzdW1cXFwiLFxcbiA2NjE6XFx0XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC5jdC5zeXNjdGxfY2hlY2tzdW0sXFxuIDY2MjpcXHRcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodTgpLFxcbiA2NjM6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIDY2NDpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvdTh2ZWNfbWlubWF4LFxcbiA2NjU6XFx0XFx0XFx0LmV4dHJhMSBcXHQ9IFNZU0NUTF9aRVJPLFxcbiA2NjY6XFx0XFx0XFx0LmV4dHJhMiBcXHQ9IFNZU0NUTF9PTkUsXFxuIDY2NzpcXHRcXHR9LFxcbiA2Njg6XFx0XFx0W05GX1NZU0NUTF9DVF9MT0dfSU5WQUxJRF0gPSB7XFxuIDY2OTpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9jb25udHJhY2tfbG9nX2ludmFsaWRcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDo1OC4wNjYyMTMyNzVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTcwMTUyMTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuZl9jb25udHJhY2tgIFN5c2N0bCBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgdGhlIGBORl9TWVNDVExfQ1RfQlVDS0VUU2Agc3lzY3RsIGVudHJ5IGRpcmVjdGx5IHVzZWQgYC5kYXRhID0gXHUwMDI2bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgLiBOb3csIGAuZGF0YWAgaXMgZXhwbGljaXRseSBOVUxMLiBJbnNpZGUgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAsIHRoZSBjb2RlIG5vdyBsb29rcyBsaWtlIHRoaXM6XG5cbmBodGFibGVfc2l6ZWAgaXMgZ3JhYmJlZCB3aXRoIGBSRUFEX09OQ0VgLCBjb3BpZWQgaW50byBhIGBjdGxfdGFibGVgIHdoaWNoIGFjdHMgYXMgYSB0ZW1wb3Jhcnkgc3RydWN0dXJlLCBhbmQgdGhlbiB0aGUgYC5kYXRhYCBwb2ludGVyIHdpdGhpbiB0aGF0IHRlbXBvcmFyeSBzdHJ1Y3QgYHRtcGAgaXMgdGhlbiBzZXQgdG8gcG9pbnQgYXQgYFx1MDAyNmh0YWJsZV9zaXplYC4gVGhpcyBgaHRhYmxlX3NpemVgIHRoZW4gZ2V0cyB1cGRhdGVkIHRocm91Z2ggYHByb2NfZG9pbnR2ZWNgIGJhc2VkIG9uIHVzZXIgaW5wdXQsIGFuZCBmaW5hbGx5IGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgIGlzIGNhbGxlZC5cblxuVGhlIGtleSB0aGluZyBpcywgYGh0YWJsZV9zaXplYCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZC4gSXQncyBpbml0aWFsaXplZCBkaXJlY3RseSBmcm9tIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgLCB3aGljaCBob2xkcyB0aGUgY3VycmVudCBoYXNoIHRhYmxlIHNpemUuIFRoZXJlJ3MgemVybyBjaGFuY2Ugb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIHRoZSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBwcmlvciB0byB1c2UuIFdoZW4gcmVhZGluZyBmcm9tIHRoZSBzeXNjdGwgKG5vIHdyaXRlKSwgYHByb2NfZG9pbnR2ZWNgIGdyYWJzIHRoZSBpbml0aWFsaXplZCB2YWx1ZSBvZiBgaHRhYmxlX3NpemVgIGFuZCBjb252ZXJ0cyBpdCB0byBBU0NJSSBmb3IgdGhlIHVzZXIuIFdoZW4gd3JpdGluZyAod3JpdGUpLCB0aGUgdXNlcidzIGlucHV0IHVwZGF0ZXMgYGh0YWJsZV9zaXplYC4gYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBpcyBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQsIHdoaWNoIGlzIGdvb2Qgc2luY2UgaXQncyBhIG11dGFibGUgZ2xvYmFsLCByZWR1Y2luZyBjb21wbGV4aXR5LlxuXG5JJ3ZlIHZlcmlmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciBhbnkgYnVmZmVyIHNpemUvYm91bmRzIGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGRvZXNuJ3QgZGV0ZWN0IGFueXRoaW5nIGVpdGhlci5cblxuU28sIGxldCdzIGNoZWNrIHRoZSBLTVNBTiBydWxlcy4gVGhlIHJ1bGUgc2F5cyBkb24ndCBydW4gYSBLTVNBTiBzZXNzaW9uIGlmIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHdvdWxkIGNhdGNoIHRoZSBidWcuIFdlIG9ubHkgbmVlZCBLTVNBTiBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBPTkxZIGRldGVjdGVkIGJ5IEtNU0FOLiBTaW5jZSBgaHRhYmxlX3NpemVgIGlzIGluaXRpYWxpemVkLCBgdG1wYCBpcyBpbml0aWFsaXplZCBmcm9tIGEgZ2xvYmFsIHN0cnVjdCwgYW5kIG5vdGhpbmcgaXMgcmVhZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UgdGhhdCBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZCwgdGhpcyBkb2Vzbid0IGFwcGx5LlxuXG5IZXJlLCBzcGVjaWZpY2FsbHk6XG4xLiBgaHRhYmxlX3NpemVgIGlzIGEgc3RhY2sgdmFyaWFibGUgaW5pdGlhbGl6ZWQgYnkgYFJFQURfT05DRWAuXG4yLiBgdG1wYCBpcyBhIHN0YWNrIHZhcmlhYmxlIGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgY29weS5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuNC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuXG5cbkFscmlnaHQsIGZpbmFsIGNoZWNrIGNvbXBsZXRlLiBJJ20gcmVhZHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA3MywiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMTowNy43Njc3NDE2NzhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIHN5c2N0bCBoYW5kbGVyIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGJ5IHJlcGxhY2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgd2l0aCBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBodGFibGVfc2l6ZWAgYW5kIGEgbG9jYWwgY29weSBvZiBgc3RydWN0IGN0bF90YWJsZWAuIFRoZSBsb2NhbCB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSlgIGFuZCBgdG1wYCBpcyBpbml0aWFsaXplZCBmcm9tIGAqdGFibGVgIGJlZm9yZSBgcHJvY19kb2ludHZlY2AgcmVhZHMgb3Igd3JpdGVzIGB0bXAuZGF0YWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIHBhc3NlZCB0byBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 14:56:15 +0000 UTC FinishedAt: 2026-09-11 15:21:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NETFILTER", "SYSCTL", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NETFILTER", "SYSCTL", "PROC_FS" ], "series_id": "56ccd6c8-8f37-478e-be54-3db3be47997e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_conntrack_hash_sysctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "6ebcf5074cff0402730c6981d2397139fee6322d", "base_tree": "nf-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgIGJ5IHJlbW92aW5nIHRoZSBnbG9iYWwgc3RhdGljIHZhcmlhYmxlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgYW5kIGluc3RlYWQgdXNpbmcgYSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBjdGxfdGFibGVgIGFuZCBsb2NhbCB2YXJpYWJsZSB0byByZXNpemUgdGhlIGNvbm50cmFjayBoYXNoIHRhYmxlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnVja2V0c2Agc3lzY3RsIGVudHJ5IGFuZCB3YXJyYW50cyBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBvciBzeXNjdGwgaGFuZGxpbmcgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzMTE3YjRiZDE4ODFkOGUxM2IyNmIzNTM5ZTA3MzYzMjRlMGNhZmQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTU6MTc6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5pbmRleCBmNGYyZDgyMTkyZDU0Li40YjY5MmExODRlOTQxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbkBAIC01MzMsMjcgJiM0Mzs1MzMsMjIgQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NvdW50KTtcbiAvKiBTeXNjdGwgc3VwcG9ydCAqL1xuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4tLyogc2l6ZSB0aGUgdXNlciAqd2FudHMgdG8gc2V0ICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciBfX3JlYWRfbW9zdGx5O1xuLVxuIHN0YXRpYyBpbnRcbiBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiBcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7XG4mIzQzO1x0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogbW9kdWxlX3BhcmFtIGhhc2hzaXplIGNvdWxkIGhhdmUgY2hhbmdlZCB2YWx1ZSAqL1xuLVx0bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7XG4mIzQzO1x0dG1wLmRhdGEgPSBcdTAwMjZodGFibGVfc2l6ZTtcbiBcbi1cdHJldCA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuJiM0MztcdHJldCA9IHByb2NfZG9pbnR2ZWMoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgfHwgIXdyaXRlKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogdXBkYXRlIHJldCwgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gc2F0aXNmeSByZXF1ZXN0ICovXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIpO1xuLVxuLVx0LyogdXBkYXRlIGl0IHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBieSBjb25udHJhY2sgKi9cbi1cdG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplO1xuJiM0MztcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NTcsNyAmIzQzOzY1Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuIFx0fSxcbiBcdFtORl9TWVNDVExfQ1RfQlVDS0VUU10gPSB7XG4gXHRcdC5wcm9jbmFtZSAgICAgICA9IFwmIzM0O25mX2Nvbm50cmFja19idWNrZXRzXCYjMzQ7LFxuLVx0XHQuZGF0YSAgICAgICAgICAgPSBcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcixcbiBcdFx0Lm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGludCksXG4gXHRcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXG4gXHRcdC5wcm9jX2hhbmRsZXIgICA9IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCxcbkBAIC0xMTUzLDggJiM0MzsxMTQ3LDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKVxuIFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dF9zeXNjdGw7XG4gXHR9XG4tXG4tXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcbiAjZW5kaWZcbiBcbiBcdG5mX2Nvbm50cmFja19pbml0X2VuZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AgYnkgcmVtb3ZpbmcgdGhlIGdsb2JhbCBzdGF0aWMgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBhbmQgaW5zdGVhZCB1c2luZyBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGN0bF90YWJsZWAgYW5kIGxvY2FsIHZhcmlhYmxlIHRvIHJlc2l6ZSB0aGUgY29ubnRyYWNrIGhhc2ggdGFibGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCBzeXNjdGwgZW50cnkgYW5kIHdhcnJhbnRzIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IG9yIHN5c2N0bCBoYW5kbGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMxMTdiNGJkMTg4MWQ4ZTEzYjI2YjM1MzllMDczNjMyNGUwY2FmZDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxNToxNzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBmNGYyZDgyMTkyZDU0Li40YjY5MmExODRlOTQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC01MzMsMjcgJiM0Mzs1MzMsMjIgQEAgRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NvdW50KTsKIC8qIFN5c2N0bCBzdXBwb3J0ICovCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi0vKiBzaXplIHRoZSB1c2VyICp3YW50cyB0byBzZXQgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgX19yZWFkX21vc3RseTsKLQogc3RhdGljIGludAogbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCQkgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKJiM0MzsJdW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7CiYjNDM7CXN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlOwogCWludCByZXQ7CiAKLQkvKiBtb2R1bGVfcGFyYW0gaGFzaHNpemUgY291bGQgaGF2ZSBjaGFuZ2VkIHZhbHVlICovCi0JbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CiYjNDM7CXRtcC5kYXRhID0gJmFtcDtodGFibGVfc2l6ZTsKIAotCXJldCA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwomIzQzOwlyZXQgPSBwcm9jX2RvaW50dmVjKCZhbXA7dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAlpZiAocmV0ICZsdDsgMCB8fCAhd3JpdGUpCiAJCXJldHVybiByZXQ7CiAKIAkvKiB1cGRhdGUgcmV0LCB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBzYXRpc2Z5IHJlcXVlc3QgKi8KLQlyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIpOwotCi0JLyogdXBkYXRlIGl0IHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBieSBjb25udHJhY2sgKi8KLQluZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKJiM0MzsJcmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NTcsNyAmIzQzOzY1Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0gewogCX0sCiAJW05GX1NZU0NUTF9DVF9CVUNLRVRTXSA9IHsKIAkJLnByb2NuYW1lICAgICAgID0gJiMzNDtuZl9jb25udHJhY2tfYnVja2V0cyYjMzQ7LAotCQkuZGF0YSAgICAgICAgICAgPSAmYW1wO25mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyLAogCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKIAkJLnByb2NfaGFuZGxlciAgID0gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsLApAQCAtMTE1Myw4ICYjNDM7MTE0Nyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZCkKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfc3lzY3RsOwogCX0KLQotCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwogI2VuZGlmCiAKIAluZl9jb25udHJhY2tfaW5pdF9lbmQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQ3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbm50cmFjayBIYXNoIFRhYmxlIFNpemUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIHN0YW5kYWxvbmUgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLgoKRnJvbSBhIHF1aWNrIGRpZmYsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVtb3ZpbmcgdGhlIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kICp3aHkqLiBUaGUgY29kZSBjaGFuZ2UgaW4gYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaXMgdGhlIGNydXggb2YgaXQuIFByZXZpb3VzbHksIHRoZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdhcyBhIGNvcHkgb2YgdGhlIGFjdHVhbCBoYXNoIHRhYmxlIHNpemUuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCB1c2luZyBgUkVBRF9PTkNFYCB0byBlbnN1cmUgYSBjb3JyZWN0IHZhbHVlLiBUaGUgYGN0bF90YWJsZWAgaXMgdGhlbiBjb3BpZWQsIHRoZSBkYXRhIHBvaW50ZXIgbW9kaWZpZWQgdG8gcG9pbnQgdG8gYGh0YWJsZV9zaXplYCwgYW5kIGBwcm9jX2RvaW50dmVjYCBpcyBjYWxsZWQuIENyaXRpY2FsbHksIHRoZSBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYCBmdW5jdGlvbiBub3cgb3BlcmF0ZXMgb24gdGhpcyBsb2NhbCBgaHRhYmxlX3NpemVgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHVzZXIgdmFyaWFibGUuIFRoaXMgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBzdGFsZSB2YWx1ZSBpc3N1ZSB3aXRoIHRoZSBtb2R1bGUgcGFyYW1ldGVyLiBUaGUgdXBkYXRlIG9mIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgYmFjayB0byBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplYCBhZnRlciBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYCBpcyBnb25lLgoKVGhlIGNoYW5nZSBpbiBgbmZfY3Rfc3lzY3RsX3RhYmxlYCBpcyBzdHJhaWdodGZvcndhcmQ7IGl0IHJlbW92ZXMgdGhlIHJlZmVyZW5jZSB0byBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHNpbmNlIHRoZSBgY3RsX3RhYmxlYCBpcyBub3cgY29uc3QgYW5kIHRoZSBkYXRhIGlzIHNldCB0byBwb2ludCB0byBsb2NhbCBgaHRhYmxlX3NpemVgLiBBbmQgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgaW4gYG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRgIGlzIGFsc28gcmVtb3ZlZC4gVGhpcyBhbGwgbG9va3MgcmVsYXRlZC4KCk15IGluaXRpYWwgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGVuc3VyaW5nIHRoZSBjb3JyZWN0IGhhc2ggdGFibGUgc2l6ZSBpcyB1c2VkIGR1cmluZyB0aGUgcmVzaXplIG9wZXJhdGlvbiwgYXZvaWRpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3Igc3RhbGUgdmFsdWUgcmVhZC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvc3NpYmx5IHJlbGV2YW50IGNvbW1pdCBtZXNzYWdlcyB0byBjb25maXJtIHRoYXQgdGhpcyBhZGRyZXNzZXMgYSBrbm93biBpc3N1ZSwgbWF5YmUgcmVsYXRlZCB0byBtb2R1bGUgcGFyYW1ldGVyIHVwZGF0ZXMgb3IgY29uY3VycmVudCBhY2Nlc3MuIEtub3dpbmcgdGhlIGJpZ2dlciBwaWN0dXJlIGhlcmUgaXMgY3JpdGljYWwgYmVmb3JlIEkgY2FuIGZ1bGx5IGV2YWx1YXRlIHRoZSBzb3VuZG5lc3MgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNTpcdHUzMiBuZl9jb25udHJhY2tfY291bnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuIDUyNjpcdHtcbiA1Mjc6XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbmV0ICpjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XG4gNTI4Olx0XG4gNTI5Olx0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2Y25ldC1cdTAwM2Vjb3VudCk7XG4gNTMwOlx0fVxuIDUzMTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jb3VudCk7XG4gNTMyOlx0XG4gNTMzOlx0LyogU3lzY3RsIHN1cHBvcnQgKi9cbiA1MzQ6XHRcbiA1MzU6XHQjaWZkZWYgQ09ORklHX1NZU0NUTFxuIDUzNjpcdHN0YXRpYyBpbnRcbiA1Mzc6XHRuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiA1Mzg6XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiA1Mzk6XHR7XG4gNTQwOlx0XHR1bnNpZ25lZCBpbnQgaHRhYmxlX3NpemUgPSBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTtcbiA1NDE6XHRcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlO1xuIDU0MjpcdFx0aW50IHJldDtcbiA1NDM6XHRcbiA1NDQ6XHRcdHRtcC5kYXRhID0gXHUwMDI2aHRhYmxlX3NpemU7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRyZXQgPSBwcm9jX2RvaW50dmVjKFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4gNTQ3Olx0XHRpZiAocmV0IFx1MDAzYyAwIHx8ICF3cml0ZSlcbiA1NDg6XHRcdFx0cmV0dXJuIHJldDtcbiA1NDk6XHRcbiA1NTA6XHRcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xuIDU1MTpcdFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcbiA1NTI6XHRcdHJldHVybiByZXQ7XG4gNTUzOlx0fVxuIDU1NDpcdFxuIDU1NTpcdHN0YXRpYyBpbnRcbiA1NTY6XHRuZl9jb25udHJhY2tfbG9nX2ludmFsaWRfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gNTU3Olx0XHRcdFx0XHR2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIDU1ODpcdHtcbiA1NTk6XHRcdGludCByZXQsIGk7XG4gNTYwOlx0XG4gNTYxOlx0XHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiA1NjI6XHRcdGlmIChyZXQgXHUwMDNjIDAgfHwgIXdyaXRlKVxuIDU2MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDU2NDpcdFxuIDU2NTpcdFx0aWYgKCoodTggKil0YWJsZS1cdTAwM2VkYXRhID09IDApXG4gNTY2Olx0XHRcdHJldHVybiAwO1xuIDU2NzpcdFxuIDU2ODpcdFx0LyogTG9hZCBuZl9sb2dfc3lzbG9nIG9ubHkgaWYgbm8gbG9nZ2VyIGlzIGN1cnJlbnRseSByZWdpc3RlcmVkICovXG4gNTY5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORlBST1RPX05VTVBST1RPOyBpJiM0MzsmIzQzOykge1xuIDU3MDpcdFx0XHRpZiAobmZfbG9nX2lzX3JlZ2lzdGVyZWQoaSkpXG4gNTcxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTcyOlx0XHR9XG4gNTczOlx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDslc1wmIzM0OywgXCYjMzQ7bmZfbG9nX3N5c2xvZ1wmIzM0Oyk7XG4gNTc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgQ29tcGlsYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCBieSBwaW5wb2ludGluZyBleGFjdGx5IHdoZXJlIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCBpcyBjb21waWxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGFuZCBtb3N0IGRpcmVjdCByb3V0ZSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZWAgaXMgdHJlYXRlZCwgYW5kIGlmIGFueSBhc3NvY2lhdGVkIGBzeXNjdGxgIHNldHRpbmdzIGFyZSBpbnZvbHZlZC4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3BlY2lmaWMgZmlsZS4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgcmVhbGx5IHRoZSBmaXJzdCBwbGFjZSB0byBsb29rLiBJJiMzOTttIGFmdGVyIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciBpdHMgY29tcGlsYXRpb24gaXMgY29uZGl0aW9uYWwsIGRlcGVuZGVudCBvbiBvdGhlciBtb2R1bGVzLCBvciBhbHdheXMgaW5jbHVkZWQuIEtub3dpbmcgaXRzIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgZGlyZWN0bHkgcG9pbnRzIHRvIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIG9yIGJ1aWxkIHJ1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19zdGFuZGFsb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSAmIzQzOz0gbmZuZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVx0Oj0gbmZfY29ubnRyYWNrX2NvcmUubyBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5vIG5mX2Nvbm50cmFja19leHBlY3QubyBuZl9jb25udHJhY2tfaGVscGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNi1cdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTQ3ND1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGN0X2NwdV9zZXFfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy00ODAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NDgxOnN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy00ODIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MDgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTA5OnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmlfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTEwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTE0LSNlbHNlXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTE1OnN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MTktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTIwOnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmlfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTIxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9OTE3PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X25ldGZpbHRlcl90YWJsZVtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05MjgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6OTI5OnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfdGNwX3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTMwLVx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTYzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk2NDpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3NjdHBfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjUtXHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTg1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk4NjpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X2dyZV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk4Ny1cdFx0XHRcdFx0XHQgICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk5Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo5OTc6c3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtOTk4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAyOC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDI5Olx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKG5ldCwgdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMzA6XHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3NjdHBfc3lzY3RsKG5ldCwgdGFibGUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMzE6XHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X2dyZV9zeXNjdGwobmV0LCB0YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAzMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA1Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDUzOnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmlfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDU0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA2Mi0jZWxzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwNjM6c3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA2NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNjctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA2ODpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA2OS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTEwNzM9c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX2ZpbmlfbmV0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA3Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDc4Olx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9wcm9jKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA3OTpcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmlfc3lzY3RsKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA4MC19XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTEwODI9c3RhdGljIGludCBuZl9jb25udHJhY2tfcGVybmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDg3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwODg6XHRyZXQgPSBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChuZXQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwODktXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDkxLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwOTI6XHRyZXQgPSBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3Byb2MobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDkzLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTExMC1vdXRfaW5pdF9uZXQ6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTExMTpcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmlfcHJvYyhuZXQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExMTItb3V0X3Byb2M6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTExMzpcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2Zpbmlfc3lzY3RsKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTExNC1cdHJldHVybiByZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTExMjc9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBuZl9jb25udHJhY2tfbmV0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTEzMy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMTM0OnN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTM1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTE2OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMTcwOnN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pKHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTE3MS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExNzktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTE4MDptb2R1bGVfaW5pdChuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMTgxOm1vZHVsZV9leGl0KG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2ZpbmkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIG5mX2Nvbm50cmFjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBgbmZfY29ubnRyYWNrYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGxpa2VseSBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBuZXR3b3JraW5nIG9yIHNlY3VyaXR5IGFuYWx5c2lzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBzeW1ib2wsIGl0cyBkZWZhdWx0IHNldHRpbmcsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMuIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgY2hlY2tpbmcgZm9yIHBvdGVudGlhbCB0cmlzdGF0ZSB2YWx1ZXMuIEtub3dpbmcgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQgaGVyZSBpcyBzdGVwIHplcm8gZm9yIGFueSBpbnZlc3RpZ2F0aW9uIEkgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfQ09OTlRSQUNLXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiDigJMgSSYjMzk7bSB0aGlua2luZyBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgYSBtb2RpZmljYXRpb24gdG8gYW4gZXhpc3RpbmcgbmV0ZmlsdGVyIGZlYXR1cmUuIExldCBtZSBqdW1wIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMaW5lcyA4Mi0xMDAgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4uIFRoaXMgcmFuZ2Ugc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgZGVmaW5pdGlvbi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoZSBgY29uZmlnYCBrZXl3b3JkLCB0aGUgb3B0aW9u4oCZcyBuYW1lLCBpdHMgZGVmYXVsdCBzdGF0ZSAoaWYgYW55KSwgd2hhdCB0aGUgZGVwZW5kZW5jeSBjb25kaXRpb25zIGFyZSBhbmQgZXNwZWNpYWxseSwgd2hhdCB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcyBvcHRpb24gaXMgYW5kIGl0cyBwdXJwb3NlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3c6IElzIGl0IGEgbmV3IGZlYXR1cmUgb3IgYW4gaW1wcm92ZW1lbnQ/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBleGlzdGluZyBtb2R1bGVzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdHJlYXN1cmVzIHRoZXNlIGxpbmVzIGhvbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxuICA4MTpcdFxuICA4MjpcdGNvbmZpZyBORl9DT05OVFJBQ0tcbiAgODM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbiAgODQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4NTpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG4gIDg2Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXG4gIDg3Olx0XHRoZWxwXG4gIDg4Olx0XHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXG4gIDg5Olx0XHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXG4gIDkwOlx0XHQgIGludG8gY29ubmVjdGlvbnMuXG4gIDkxOlx0XG4gIDkyOlx0XHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcbiAgOTM6XHRcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcbiAgOTQ6XHRcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCYjMzk7IGJlbG93KS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk3Olx0XG4gIDk4Olx0Y29uZmlnIE5GX0xPR19TWVNMT0dcbiAgOTk6XHRcdHRyaXN0YXRlIFwmIzM0O1N5c2xvZyBwYWNrZXQgbG9nZ2luZ1wmIzM0O1xuIDEwMDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gMTAxOlx0XHRoZWxwXG4gMTAyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZSBzdXBwb3J0IGZvciBwYWNrZXQgbG9nZ2luZyB2aWEgc3lzbG9nLlxuIDEwMzpcdFx0ICBJdCBzdXBwb3J0cyBJUHY0LCBJUFY2LCBBUlAgYW5kIGNvbW1vbiB0cmFuc3BvcnQgcHJvdG9jb2xzIHN1Y2hcbiAxMDQ6XHRcdCAgYXMgVENQIGFuZCBVRFAuXG4gMTA1Olx0XHQgIFRoaXMgaXMgYSBzaW1wbGVyIGJ1dCBsZXNzIGZsZXhpYmxlIGxvZ2dpbmcgbWV0aG9kIGNvbXBhcmVkIHRvXG4gMTA2Olx0XHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXG4gMTA3Olx0XHQgIElmIGJvdGggYXJlIGVuYWJsZWQgdGhlIGJhY2tlbmQgdG8gdXNlIGNhbiBiZSBjb25maWd1cmVkIGF0IHJ1bi10aW1lXG4gMTA4Olx0XHQgIGJ5IG1lYW5zIG9mIHBlci1hZGRyZXNzLWZhbWlseSBzeXNjdGwgdHVuYWJsZXMuXG4gMTA5Olx0XG4gMTEwOlx0aWYgTkZfQ09OTlRSQUNLXG4gMTExOlx0Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbiAxMTI6XHRcdHRyaXN0YXRlXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG4gMTE1Olx0XHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbiAxMTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMTE3Olx0XHRoZWxwXG4gMTE4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiBtYXJrcywgdXNlZCBieSB0aGVcbiAxMTk6XHRcdCAgYENPTk5NQVJLJiMzOTsgdGFyZ2V0IGFuZCBgY29ubm1hcmsmIzM5OyBtYXRjaC4gU2ltaWxhciB0byB0aGUgbWFyayB2YWx1ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODUyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29ubnRyYWNrIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBgTkZfQ09OTlRSQUNLYCBoZXJlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHJlbGlhbnQgb24gYE5FVEZJTFRFUmAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQsIGFuZCBleHBlY3RlZC4gTW92aW5nIGRlZXBlciwgSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBzeXNjdGwgc3VwcG9ydCB3aXRoaW4gYG5mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgY29udHJvbHMgYXJlIGV4cG9zZWQuIEFoLCByaWdodCDigJMgSSBzZWUgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGFuIGAjaWZkZWYgQ09ORklHX1NZU0NUTGAuIFRoYXQgdGVsbHMgbWUgdGhhdCBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgY2FuIGVuYWJsZSBvciBkaXNhYmxlIHN5c2N0bCYjMzk7cywgYW5kIHRoZSBjb2RlIHdpbGwgcmVhY3QgYWNjb3JkaW5nbHkuIE5vdyBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBzeXNjdGwgdGFibGUgcmVnaXN0cmF0aW9uIHRvIGV4YW1pbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oYXNoX3N5c2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTUzNj1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTM3Om5mX2Nvbm50cmFja19oYXNoX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTUzOC1cdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NjM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02NTYtXHRcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NjU3Olx0XHQucHJvY19oYW5kbGVyICAgPSBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjU4LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25udHJhY2sgU3lzY3RsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5mX2N0X3N5c2N0bF90YWJsZWAgc3RydWN0dXJlLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYC5wcm9jbmFtZWAgaXMgc2V0IHRvICYjMzQ7bmZfY29ubnRyYWNrX2J1Y2tldHMsJiMzNDsgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBjb25udHJhY2sgaGFzaCBidWNrZXRzIGNvbmZpZ3VyYXRpb24sIGFzIEkmIzM5O2QgZXhwZWN0LiBBbmQgdGhlIGAucHJvY19oYW5kbGVyYCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgd2hpY2ggYWdhaW4sIGxpbmVzIHVwIHBlcmZlY3RseS4gU28gZmFyLCBzbyBnb29kIOKAkyB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBtYWtpbmcgc2Vuc2UsIGFuZCB0aGluZ3Mgc2VlbSB0byBiZSBwb2ludGluZyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIGZvciBtYW5hZ2luZyB0aGUgaGFzaCB0YWJsZS4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgbmZfY3Rfc3lzY3RsX3RhYmxlYCBpcyBhY3R1YWxseSAqcmVnaXN0ZXJlZCouIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGhvb2tlZCBpbnRvIHRoZSBzeXNjdGwgaW5mcmFzdHJ1Y3R1cmUuIExldCBtZSBxdWlja2x5IHNjYW4gdGhyb3VnaCBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2Ag4oCTIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHRoaXMga2luZCBvZiBpbml0aWFsaXphdGlvbiB0byBvY2N1ciwgZ2l2ZW4gdGhlIGNvbnRleHQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjYWxsIHRvIHNvbWV0aGluZyBsaWtlIGByZWdpc3Rlcl9zeXNjdGxgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiwgbGlrZWx5IGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgdGhlIG1vZHVsZSYjMzk7cyBsb2FkIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3Rfc3lzY3RsX3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NTgwPWVudW0gbmZfY3Rfc3lzY3RsX2luZGV4IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjM2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjYzNzpzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02MzgtXHRbTkZfU1lTQ1RMX0NUX01BWF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTk5Nz1zdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTAwMi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDAzOlx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMDQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTAwNTpcdHRhYmxlID0ga21lbWR1cChuZl9jdF9zeXNjdGxfdGFibGUsIHNpemVvZihuZl9jdF9zeXNjdGxfdGFibGUpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMDYtXHRcdFx0R0ZQX0tFUk5FTCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNDEtXHRcdFx0XHRcdFx0ICAgICB0YWJsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDQyOlx0XHRcdFx0XHRcdCAgICAgQVJSQVlfU0laRShuZl9jdF9zeXNjdGxfdGFibGUpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDQzLVx0aWYgKCFjbmV0LVx1MDAzZXN5c2N0bF9oZWFkZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTYxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29ubnRyYWNrIFN5c2N0bCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGNvbm50cmFjayBzeXNjdGwgc2V0dGluZ3MgYXJlIGluaXRpYWxpemVkLiBJIHJlbWVtYmVyIHRoYXQgYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgcmVnaXN0ZXJlZCwgcHJvYmFibHkgd2l0aGluIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bGAuIEJ1dCB3aGF0IGV4YWN0bHkgaXMgdGhhdCBzeXNjdGwgZW50cnk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgZGVmaW5lZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBuZl9jdF9uZXRmaWx0ZXJfdGFibGVgIG9yIGZvbGxvdyB3aGVyZSBgY25ldC0mZ3Q7c3lzY3RsX2hlYWRlcmAgaXMgdXNlZCwgYXMgdGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBpdCBnZXRzIGhvb2tlZCBpbi4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyB0aGlzIGlzIGFsbCBjb25uZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDMwOlx0XHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3NjdHBfc3lzY3RsKG5ldCwgdGFibGUpO1xuMTAzMTpcdFx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9ncmVfc3lzY3RsKG5ldCwgdGFibGUpO1xuMTAzMjpcdFxuMTAzMzpcdFx0LyogRG9uJiMzOTt0IGFsbG93IG5vbi1pbml0X25ldCBucyB0byBhbHRlciBnbG9iYWwgc3lzY3RscyAqL1xuMTAzNDpcdFx0aWYgKCFuZXRfZXEoXHUwMDI2aW5pdF9uZXQsIG5ldCkpIHtcbjEwMzU6XHRcdFx0dGFibGVbTkZfU1lTQ1RMX0NUX01BWF0ubW9kZSA9IDA0NDQ7XG4xMDM2Olx0XHRcdHRhYmxlW05GX1NZU0NUTF9DVF9FWFBFQ1RfTUFYXS5tb2RlID0gMDQ0NDtcbjEwMzc6XHRcdFx0dGFibGVbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdLm1vZGUgPSAwNDQ0O1xuMTAzODpcdFx0fVxuMTAzOTpcdFxuMTA0MDpcdFx0Y25ldC1cdTAwM2VzeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9uZXRmaWx0ZXJcJiMzNDssXG4xMDQxOlx0XHRcdFx0XHRcdFx0ICAgICB0YWJsZSxcbjEwNDI6XHRcdFx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSk7XG4xMDQzOlx0XHRpZiAoIWNuZXQtXHUwMDNlc3lzY3RsX2hlYWRlcilcbjEwNDQ6XHRcdFx0Z290byBvdXRfdW5yZWdpc3Rlcl9uZXRmaWx0ZXI7XG4xMDQ1Olx0XG4xMDQ2Olx0XHRyZXR1cm4gMDtcbjEwNDc6XHRcbjEwNDg6XHRvdXRfdW5yZWdpc3Rlcl9uZXRmaWx0ZXI6XG4xMDQ5Olx0XHRrZnJlZSh0YWJsZSk7XG4xMDUwOlx0XHRyZXR1cm4gLUVOT01FTTtcbjEwNTE6XHR9XG4xMDUyOlx0XG4xMDUzOlx0c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuMTA1NDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX2J1Y2tldHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCDigJMgdGhhdCBzeXNjdGwgZW50cnkgdW5kZXIgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCwgb3IgYWx0ZXJuYXRpdmVseSwgYG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2J1Y2tldHNgLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IG9uZS4gQW55dGltZSB0aGVyZSYjMzk7cyBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uIG9uIHRoYXQsIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGdldHMgaW52b2tlZC4gVGhhdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgaGFuZGxpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwgdmlhIHN5c2N0bC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IHdoYXQgYWN0dWFsbHkgKmhhcHBlbnMqIHdoZW4gdGhhdCBzeXNjdGwgdmFsdWUgY2hhbmdlcz8gV2hhdCYjMzk7cyB0aGUgY29yZSBvZiBpdD8gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIHdpdGggdGhlIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHRhYmxlLiBUaGUgcmVhbCB3b3JrIGlzIHByb2JhYmx5IGRvbmUgaW4gYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAuIEdvdHRhIGNoZWNrIHRoYXQgZnVuY3Rpb24gbmV4dCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgdHJpZ2dlcmVkIHdoZW4gdGhlIGJ1Y2tldCBjb3VudCBpcyBtb2RpZmllZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgZ2V0cyB1cGRhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfaGFzaF9yZXNpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNTQwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FsbG9jX2hhc2h0YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjU0MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNTQyOmludCBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUodW5zaWduZWQgaW50IGhhc2hzaXplKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI1NDMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNjA2PWludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjYyMjpcdHJldHVybiBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaGFzaHNpemUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjMtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz01Mzc9bmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTU1MC1cdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjU1MTpcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTUyLVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhpcyBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCB3aGljaCwgcGVyIHRoZSBndWlkZWxpbmVzLCBtZWFucyBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZyA9IHRydWVgLgoKSSYjMzk7dmUgZ290IHRoZSBjb250ZXh0OiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYC4gSXQmIzM5O3MgaW1wYWN0aW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgLCB3aGljaCBpcyBjb3JlIG5ldHdvcmtpbmcgYW5kIHRodXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBTeXprYWxsZXIgYW5kIHN5c2N0bCBzeXNjYWxscyBiYWNrIHRoaXMgdXAuCgpUaGUgcGF0Y2gmIzM5O3MgY29yZSBtb2RpZmljYXRpb24gaXMgcmV3cml0aW5nIGhvdyB0aGUgaGFzaCB0YWJsZSBzaXplLCBtYW5hZ2VkIGJ5IGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgLCBpcyBoYW5kbGVkLiBCZWZvcmUsIHdlIGhhZCBhIGdsb2JhbCB2YXJpYWJsZSwgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYC4gTm93LCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZ2xvYmFsLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzLiBJdCB1c2VzIGEgbG9jYWwgYGh0YWJsZV9zaXplYCBhbmQgYSB0ZW1wb3JhcnkgYGN0bF90YWJsZWAuIFRoaXMgaXMgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgY29uY3VycmVuY3kgYW5kIGRhdGEgbWFuYWdlbWVudC4KClRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyLiAmIzM0O1JlZmFjdG9yaW5ncyB0aGF0Li4uIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuJiMzNDsgU28sIGRlc3BpdGUgdGhlIHBvdGVudGlhbCAmIzM0O3JlZmFjdG9yaW5nJiMzNDsgbGFiZWwsIEkgY2FuJiMzOTt0IGRpc21pc3MgdGhpcyBhcyB0cml2aWFsLiBSZWFjaGFibGUgY29kZSBpbiBhIGNvcmUgc3Vic3lzdGVtIGlzIG1vZGlmaWVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGlzIGJ5IGFuYWx5emluZyB0aGUgZ3VpZGVsaW5lcyBhZ2FpbjoKCiogICAmIzM0OzMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkmIzM0OyDigJMgVGhlIHBhdGNoIG1vZGlmaWVzIGxvZ2ljIGluIGNvcmUgbmV0d29ya2luZywgd2hpY2ggaXMgYSBwb3NpdGl2ZSBtYXRjaC4KKiAgICYjMzQ7RE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TJiMzNDsg4oCTIFRoaXMgcmVpbmZvcmNlcyB0aGF0IEkgc2hvdWxkIGNvbnNpZGVyIHRoaXMgZm9yIGZ1enppbmcgZXZlbiBpZiBpdCBtaWdodCBhcHBlYXIgbGlrZSAmIzM0O2p1c3QmIzM0OyBhIHJlZmFjdG9yaW5nLgoqICAgJiMzNDsyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKSYjMzQ7IOKAkyBOb25lIG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseS4gSXQmIzM5O3Mgbm90IG5vbi1rZXJuZWwsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBvciBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtb2RpZmllZCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gQWx0aG91Z2ggYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGl0LCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgd2lsbCBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCB3aGljaCBpcyB0aGUgZW50cnlwb2ludCB0byB0aGlzIHN1YnN5c3RlbSBmZWF0dXJlLCBhbmQgaXQmIzM5O3MgdGhlIGV4YWN0IGZ1bmN0aW9uIHRoYXQgdGhlIGNvZGUgbW9kaWZpZXMuCgpGaW5hbGx5LCBmb3IgYEVuYWJsZUNvbmZpZ3NgLCBJIG5lZWQgdG8gZW5hYmxlIHRoaXM6CgoqICAgVGhlIGNvZGUgaXMgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TWVNDVExgLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuCiogICBBbHNvLCBgQ09ORklHX05GX0NPTk5UUkFDS2AgbXVzdCBiZSBlbmFibGVkLgoKSW4gY29uY2x1c2lvbiwgdGhpcyBpcyBhIGNsZWFyICYjMzQ7eWVzJiMzNDsgZm9yIGZ1enppbmcuIFRoZSBjb2RlJiMzOTtzIGluIGEgcmVhY2hhYmxlIGFyZWEsIHRoZSBtb2RpZmljYXRpb24gaXMgc2lnbmlmaWNhbnQsIGFuZCBJIGNhbiBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSAmIzQzOz0gbmZuZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVx0Oj0gbmZfY29ubnRyYWNrX2NvcmUubyBuZl9jb25udHJhY2tfc3RhbmRhbG9uZS5vIG5mX2Nvbm50cmFja19leHBlY3QubyBuZl9jb25udHJhY2tfaGVscGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NjpcdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjc6XHRcdCAgIG5mX2Nvbm50cmFja19wcm90b19pY21wLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODpcdFx0ICAgbmZfY29ubnRyYWNrX2V4dGVuZC5vIG5mX2Nvbm50cmFja19hY2N0Lm8gbmZfY29ubnRyYWNrX3NlcWFkai5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTktXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwOm5mX2Nvbm50cmFjay0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgJiM0Mzs9IG5mX2Nvbm50cmFja19wcm90b19pY21wdjYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVPVVQpICYjNDM7PSBuZl9jb25udHJhY2tfdGltZW91dC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEyOm5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfVElNRVNUQU1QKSAmIzQzOz0gbmZfY29ubnRyYWNrX3RpbWVzdGFtcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzOm5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTKSAmIzQzOz0gbmZfY29ubnRyYWNrX2VjYWNoZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0Om5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfTEFCRUxTKSAmIzQzOz0gbmZfY29ubnRyYWNrX2xhYmVscy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1Om5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DT05OVFJBQ0tfT1ZTKSAmIzQzOz0gbmZfY29ubnRyYWNrX292cy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2Om5mX2Nvbm50cmFjay0kKENPTkZJR19ORl9DVF9QUk9UT19TQ1RQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ1RfUFJPVE9fR1JFKSAmIzQzOz0gbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE4LWlmZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksbSlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfY29ubnRyYWNrLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICYjNDM7PSBuZl9jb25udHJhY2tfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjAtZWxzZSBpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLHkpXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxOm5mX2Nvbm50cmFjay0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IG5mX2Nvbm50cmFja19icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMi1lbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0spICYjNDM7PSBuZm5ldGxpbmtfaG9vay5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zMy0jIGNvbm5lY3Rpb24gdHJhY2tpbmdcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgJiM0Mzs9IG5mX2Nvbm50cmFjay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM1LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNjojIG5ldGxpbmsgaW50ZXJmYWNlIGZvciBuZl9jb25udHJhY2tcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTkspICYjNDM7PSBuZl9jb25udHJhY2tfbmV0bGluay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICYjNDM7PSBuZm5ldGxpbmtfY3R0aW1lb3V0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSAmIzQzOz0gbmZuZXRsaW5rX2N0aGVscGVyLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLSMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQyOm5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00My1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEpICYjNDM7PSBuZl9jb25udHJhY2tfYW1hbmRhLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDU6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NzpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0JST0FEQ0FTVCkgJiM0Mzs9IG5mX2Nvbm50cmFja19icm9hZGNhc3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMpICYjNDM7PSBuZl9jb25udHJhY2tfbmV0Ymlvc19ucy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUwOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU05NUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19zbm1wLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19QUFRQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3BwdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUpICYjNDM7PSBuZl9jb25udHJhY2tfc2FuZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUzOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0lQKSAmIzQzOz0gbmZfY29ubnRyYWNrX3NpcC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja190ZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTk0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhpcywgaXQgc2VlbXMgbGlrZSB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYE5FVEZJTFRFUmAgaXMgYWN0dWFsbHkgcmVxdWlyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW5jbHVzaW9uIHBhdGguIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYG5ldGZpbHRlcmAgaXMgZGVmaW5lZCBzb21ld2hlcmUgd2l0aGluIHRoZSBgbmV0YCBkaXJlY3RvcnksIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGVpdGhlciBgbmV0L0tjb25maWdgIG9yIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMgd2hlcmUgYG5ldGZpbHRlcmAmIzM5O3MgY29tcG9uZW50cyBhcmUgdHlwaWNhbGx5IGRlY2xhcmVkIGFuZCBpbmNsdWRlZC4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2Ugd2hlcmUgSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBkZXRlcm1pbmUgd2hhdCBjb25maWd1cmF0aW9ucyBhY3R1YWxseSB0cmlnZ2VyIHRoZSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJgLCBpZiBhbnkuIEl0JiMzOTtzIGEgYml0IG9mIGEgYnJlYWRjcnVtYiBodW50LCBidXQgdGhhdCYjMzk7cyB0aGUgYmVzdCBhcHByb2FjaCB0byBlc3RhYmxpc2ggdGhlIGFjdHVhbCBkZXBlbmRlbmNpZXMgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZS4qbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MjMxPWNvbmZpZyBCUklER0VfTkVURklMVEVSXG4tLVxubmV0L0tjb25maWctMjQ2LVxubmV0L0tjb25maWc6MjQ3OnNvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI0ODpzb3VyY2UgXCYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI0OTpzb3VyY2UgXCYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI1MDpzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM4MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBiYXNlZCBvbiB0aGUgcHJvbXB0OgoKKipSZXZpZXdpbmcgdGhlIG5ldC9LY29uZmlnIFNlY3Rpb24qKgoKT2theSwgc28gdGhlIGluc3RydWN0aW9uIGlzIHRvIGZvY3VzIG9uIGxpbmVzIDIyMC0yNTUgd2l0aGluIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEdpdmVuIG15IGV4cGVydGlzZSwgbXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBwaWN0dXJlIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBteSBoZWFkLiBJJiMzOTttIHByb2JhYmx5IHJlY2FsbGluZyB0aGUgdmFyaW91cyBuZXR3b3JrLXJlbGF0ZWQgb3B0aW9ucywgc3ViLW1lbnVzLCBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIHR5cGljYWxseSBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgd2hlcmUgdGhpcyBzZWN0aW9uIHNpdHMgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZWZpbml0aW9ucyBmb3IgZmVhdHVyZSBlbmFibGluZywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIHBlcmhhcHMgc29tZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZXh0ZXJuYWwgcGFja2FnZXMuIFRoZSBleGFjdCBjb250ZW50IHdpdGhpbiB0aG9zZSBsaW5lcyBpcywgb2YgY291cnNlLCB0aGUgZGV0YWlsIEkgbmVlZCB0byBub3cgZXhhbWluZS4gSSB3aWxsIGxpa2VseSBiZSB0cnlpbmcgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2Ygd2hhdCBvcHRpb25zIGFyZSBiZWluZyBkZWZpbmVkIG9yIG1vZGlmaWVkIGluIHRoaXMgc3BlY2lmaWMgc2VjdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBwdXJwb3NlIG9mIHRoZXNlIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG4gMjIxOlx0XHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4gMjIyOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxuIDIyMzpcdFx0ZGVmYXVsdCB5XG4gMjI0Olx0XHRoZWxwXG4gMjI1Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBjYW4gc2VsZWN0IGJldHdlZW4gYWxsIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcy5cbiAyMjY6XHRcdCAgSWYgeW91IHNheSBOIHRoZSBtb3JlIHVudXN1YWwgb25lcyB3aWxsIG5vdCBiZSBzaG93biBhbmQgdGhlXG4gMjI3Olx0XHQgIGJhc2ljIG9uZXMgbmVlZGVkIGJ5IG1vc3QgcGVvcGxlIHdpbGwgZGVmYXVsdCB0byAmIzM5O00mIzM5Oy5cbiAyMjg6XHRcbiAyMjk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAyMzA6XHRcbiAyMzE6XHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxuIDIzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7QnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcJiMzNDtcbiAyMzM6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gMjM0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcdTAwMjZcdTAwMjYgSU5FVFxuIDIzNTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAyMzY6XHRcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxuIDIzNzpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gMjM4Olx0XHRoZWxwXG4gMjM5Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbGV0IGFycHRhYmxlcyByZXNwLiBpcHRhYmxlcyBzZWUgYnJpZGdlZFxuIDI0MDpcdFx0ICBBUlAgcmVzcC4gSVAgdHJhZmZpYy4gSWYgeW91IHdhbnQgYSBicmlkZ2luZyBmaXJld2FsbCwgeW91IHByb2JhYmx5XG4gMjQxOlx0XHQgIHdhbnQgdGhpcyBvcHRpb24gZW5hYmxlZC5cbiAyNDI6XHRcdCAgRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGRvZXNuJiMzOTt0IGVuYWJsZSBvciBkaXNhYmxlXG4gMjQzOlx0XHQgIGVidGFibGVzLlxuIDI0NDpcdFxuIDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNDg6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNDk6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNTA6XHRzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI1MTpcdFxuIDI1MjpcdGVuZGlmICMgaWYgTkVURklMVEVSXG4gMjUzOlx0XG4gMjU0Olx0c291cmNlIFwmIzM0O25ldC9zY3RwL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMzQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBpbml0aWFsIGNhbmRpZGF0ZXMgc2VlbSB0byBiZSBgTkVURklMVEVSYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgU1lTQ1RMYC4gSSBrbm93IHRoZXNlIGFyZSBpbnRlcmNvbm5lY3RlZCwgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGNoZWNrLgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGBORl9DT05OVFJBQ0tgJiMzOTtzIGRlcGVuZGVuY2llcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gTG9va2luZyBhdCBsaW5lcyA4Mi04NywgdGhlIHNvdXJjZSBjb25maXJtcyBpdCYjMzk7cyBuZXN0ZWQgdW5kZXIgYW4gYGlmIE5FVEZJTFRFUmAgYmxvY2ssIHdoaWNoIG9yaWdpbmF0ZXMgaW4gYG5ldC9LY29uZmlnYC4gRXhjZWxsZW50LCB0aGF0IGNvbmZpcm1zIHRoZSByZWxhdGlvbnNoaXAuCgpOb3csIGFzIEkgcmVjYWxsLCBgU1lTQ1RMYCBpcyBuZWNlc3NhcnkgZm9yIGVuYWJsaW5nIHRoaXMgZmVhdHVyZS4gU28sIG15IGNvcmUgc2V0IG9mIGNvbmZpZ3VyYXRpb25zLCBhcyBvZiBub3csIGFyZToKCiogICBgTkVURklMVEVSYAoqICAgYE5GX0NPTk5UUkFDS2AKKiAgIGBTWVNDVExgCgpIb3dldmVyLCBsZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBpZiBgTkZfQ09OTlRSQUNLYCBvciBgU1lTQ1RMYCBpdHNlbGYgaGFzICpmdXJ0aGVyKiBkZXBlbmRlbmNpZXMuIFdoZXJlIHdvdWxkIGBTWVNDVExgIGxpa2VseSBiZSBkZWZpbmVkPyBFaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGZzL3Byb2MvS2NvbmZpZ2AgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LiBJJiMzOTtsbCBtb3ZlIG9uIHRvIGNoZWNrIGBTWVNDVExgIGluIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNZU0NUTFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY3NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlN5c3RlbSBDb25maWd1cmF0aW9uIEh1bnQqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGBTWVNDVExgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gcGVyZm9ybSBhIGdsb2JhbCBzZWFyY2ggYWNyb3NzIHRoZSBlbnRpcmUgY29kZWJhc2Ugb3IgZmlsZSBzeXN0ZW0gdHJlZSwgYXNzdW1pbmcgSSBoYXZlIHRoZSBuZWNlc3NhcnkgYWNjZXNzIHJpZ2h0cy4gSSYjMzk7bSB0aGlua2luZyBhIHJlY3Vyc2l2ZSBzZWFyY2ggd291bGQgYmUgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgdG8gZW5zdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgdmFyaWF0aW9ucyBpbiBuYW1pbmcgY29udmVudGlvbnMg4oCTIGl0IGNvdWxkIGJlIGBzeXNjdGxgLCBgc3lzY3RsLmNvbmZgLCBvciBzb21lIG90aGVyIHZhcmlhdGlvbi4gVGhpcyB0aG9yb3VnaG5lc3MgaXMgY3J1Y2lhbDsgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIG92ZXJsb29rIGEgY3JpdGljYWwgcGFyYW1ldGVyIGx1cmtpbmcgaW4gc29tZSBvYnNjdXJlIGNvcm5lciBvZiB0aGUgY29uZmlnIHNwYWNlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIHRha2Ugc29tZSB0aW1lLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHJlZmluZSB0aGUgc2VhcmNoIHRlcm1zIGFuZCBsb2NhdGlvbnMgYXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIFNZU0NUTCQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnPTY3PWNvbmZpZyBQUk9DX1ZNQ09SRV9ERVZJQ0VfUkFNXG4tLVxuZnMvcHJvYy9LY29uZmlnLTgyLVxuZnMvcHJvYy9LY29uZmlnOjgzOmNvbmZpZyBTWVNDVExcbmZzL3Byb2MvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U3lzY3RsIHN1cHBvcnQgKC9wcm9jL3N5cylcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBmcy9wcm9jL0tjb25maWdgLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGhhcHBlbmluZyBhcm91bmQgbGluZSA4My4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBhIHNwZWNpZmljIHByb2NmcyBmZWF0dXJlIG9yIG1vZHVsZS4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIG5ldyBvciBtb2RpZmllZCBzZXR0aW5nLCBvciBtYXliZSBJIHN1c3BlY3QgYSBidWcgaW4gaG93IGEgcGFydGljdWxhciBvcHRpb24gaXMgYmVpbmcgaGFuZGxlZCB1cHN0cmVhbS4gVGhpcyBsb2NhdGlvbiBpcyBhIGxpa2VseSBzcG90IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvZiB0aGUgcHJvYyBmaWxlc3lzdGVtOyBzcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBob3cgY2VydGFpbiBhc3BlY3RzIG9mIHByb2NmcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBLY29uZmlnIHN5bnRheDogYGNvbmZpZ2AsIGBib29sYCwgYHRyaXN0YXRlYCwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLiwgdHJ5aW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29uZGl0aW9uYWwgbG9naWMgcHJlc2VudCB0aGVyZS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGVmZmVjdHMuIE15IGdvYWwgaXMgdG8gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVzb2x2ZSB0aGUgaXNzdWUgYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XG4gIDgxOlx0XHQgIFJlbGV2YW50IGFyY2hpdGVjdHVyZXMgc2hvdWxkIHNlbGVjdCBORUVEX1BST0NfVk1DT1JFX0RFVklDRV9SQU0uXG4gIDgyOlx0XG4gIDgzOlx0Y29uZmlnIFNZU0NUTFxuICA4NDpcdFx0Ym9vbCBcJiMzNDtTeXNjdGwgc3VwcG9ydCAoL3Byb2Mvc3lzKVwmIzM0OyBpZiBFWFBFUlRcbiAgODU6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuICA4NjpcdFx0ZGVmYXVsdCB5XG4gIDg3Olx0XHRoZWxwXG4gIDg4Olx0XHQgIFRoZSBzeXNjdGwgaW50ZXJmYWNlIHByb3ZpZGVzIGEgbWVhbnMgb2YgZHluYW1pY2FsbHkgY2hhbmdpbmdcbiAgODk6XHRcdCAgY2VydGFpbiBrZXJuZWwgcGFyYW1ldGVycyBhbmQgdmFyaWFibGVzIG9uIHRoZSBmbHkgd2l0aG91dCByZXF1aXJpbmdcbiAgOTA6XHRcdCAgYSByZWNvbXBpbGUgb2YgdGhlIGtlcm5lbCBvciByZWJvb3Qgb2YgdGhlIHN5c3RlbS4gIFRoZSBwcmltYXJ5XG4gIDkxOlx0XHQgIGludGVyZmFjZSBpcyB0aHJvdWdoIC9wcm9jL3N5cy4gIElmIHlvdSBzYXkgWSBoZXJlIGEgdHJlZSBvZlxuICA5MjpcdFx0ICBtb2RpZmlhYmxlIHN5c2N0bCBlbnRyaWVzIHdpbGwgYmUgZ2VuZXJhdGVkIGJlbmVhdGggdGhlXG4gIDkzOlx0XHQgIC9wcm9jL3N5cyBkaXJlY3RvcnkuIFRoZXkgYXJlIGV4cGxhaW5lZCBpbiB0aGUgZmlsZXNcbiAgOTQ6XHRcdCAgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9cdTAwM2UuICBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ4MgoJCQkJCQkJb3V0cHV0OiAxODUKCQkJCQkJCXRob3VnaHRzOiA2NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBDT05GSUdfU1lTQ1RMYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBQUk9DX0ZTYCwgYW5kIGFsc28gYENPTkZJR19ORVRGSUxURVJgIGFuZCBgQ09ORklHX05GX0NPTk5UUkFDS2AuIFRoYXQmIzM5O3MgdGhlIGxhbmRzY2FwZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGZ1enppbmcgdGFyZ2V0LgoKTXkgZmlyc3QgdGhvdWdodCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgYW5kIHRoZSBjaGVjayBvZiBgRm9jdXNTeW1ib2xzYCBjb25maXJtcyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBzeW1ib2xzIGhlcmU/IExldCYjMzk7cyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgY2hhbmdlZCBpbiB0aGUgZGlmZi4gQWgsIGl0JiMzOTtzIGp1c3QgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgYW5kIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0YC4KCkJ1dCB3YWl0LCBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdGAgaXMgYF9faW5pdGAsIHNvIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGF0IGJvb3QuIEZ1enppbmcgd2FudHMgcnVudGltZSB0YXJnZXRzLCBzbyB0aGF0JiMzOTtzIG91dC4gV2hhdCBhYm91dCBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYD8gVGhhdCAqaXMqIGNhbGxlZCBieSBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gU2hvdWxkIEkgaW5jbHVkZSB0aGF0PyBMZXQmIzM5O3Mgc2VlLi4uCgpSaWdodCwgYmFzZWQgb24gdGhlIHRyaWFnZSBpbnN0cnVjdGlvbnMsIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHRhcmdldCwgd2hpY2ggaW1wbGVtZW50cyB0aGUgYWx0ZXJlZCBsb2dpYyBvciBpcyBhIGRpcmVjdCBlbnRyeXBvaW50LiBBbmQgdGhhdCYjMzk7cyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gTm93LCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBhbHRlciBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYCBkaXJlY3RseSwgYnV0IGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIHBhc3NlcyBgaHRhYmxlX3NpemVgIHRvIGl0LiBTbywgdGhhdCYjMzk7cyB3aHkgaXQmIzM5O3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LgoKQnV0IHRoZSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVyIGZvY3VzZXMgb24gbW9kaWZpZWQgY29kZSBhbmQgaXRzIGRpcmVjdCBlbnRyeXBvaW50LiBTbywgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaXMgdGhlICpwcmltYXJ5KiB0YXJnZXQuIEl0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIHByaW9yaXRpemUsIGJlY2F1c2UsIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGNvbnRhaW5zIHRoZSBtb2RpZmllZCBsb2dpYyAobG9jYWwgc3RhY2sgdmFyaWFibGUsIFJFQURfT05DRSwgcHJvY19kb2ludHZlYyBhbmQgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKS4KCkFscmlnaHQsIGxldCYjMzk7cyBiZSBhYnNvbHV0ZWx5IHN1cmUuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AuIEl0JiMzOTtzIHJlbW92aW5nIGEgZ2xvYmFsIHZhcmlhYmxlIGluIGZhdm9yIG9mIGEgbG9jYWwgb25lIGZvciBzeXNjdGwgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIGAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnVja2V0c2AuIEFueSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbG9naWMgZXJyb3JzIGR1ZSB0byBob3cgdGhlIHN5c2N0bCBpcyBoYW5kbGVkIGNvdWxkIGJlIGludGVyZXN0aW5nIHRvIGZ1enouIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUuCgpUaGVyZWZvcmUsIGVuYWJsZSBjb25maWdzOiBgTkZfQ09OTlRSQUNLYCwgYFNZU0NUTGAsIGBORVRGSUxURVJgIGFuZCBgUFJPQ19GU2AuIFRoZSBjb3JyZWN0IGZvY3VzIHN5bWJvbCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gQWxsIGdvb2QuIFRoaXMgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBmdXp6aW5nIHRyaWFnZSBndWlkZWxpbmVzLiBUaW1lIHRvIG1vdmUgb24gdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7U1lTQ1RMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AgYnkgcmVtb3ZpbmcgdGhlIGdsb2JhbCBzdGF0aWMgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBhbmQgaW5zdGVhZCB1c2luZyBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGN0bF90YWJsZWAgYW5kIGxvY2FsIHZhcmlhYmxlIHRvIHJlc2l6ZSB0aGUgY29ubnRyYWNrIGhhc2ggdGFibGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCBzeXNjdGwgZW50cnkgYW5kIHdhcnJhbnRzIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IG9yIHN5c2N0bCBoYW5kbGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja19oYXNoX3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCBieSByZW1vdmluZyB0aGUgZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGFuZCBpbnN0ZWFkIHVzaW5nIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgY3RsX3RhYmxlYCBhbmQgbG9jYWwgdmFyaWFibGUgdG8gcmVzaXplIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc3lzL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2J1Y2tldHNgIHN5c2N0bCBlbnRyeSBhbmQgd2FycmFudHMgZnV6emluZyBmb3IgY29uY3VycmVuY3kgb3Igc3lzY3RsIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgc3lzY3RsIGhhbmRsZXIgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgYnkgcmVwbGFjaW5nIHRoZSBnbG9iYWwgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCB3aXRoIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBhbmQgYSBsb2NhbCBjb3B5IG9mIGBzdHJ1Y3QgY3RsX3RhYmxlYC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBodGFibGVfc2l6ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKWAgYW5kIGB0bXBgIGlzIGluaXRpYWxpemVkIGZyb20gYCp0YWJsZWAgYmVmb3JlIGBwcm9jX2RvaW50dmVjYCByZWFkcyBvciB3cml0ZXMgYHRtcC5kYXRhYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgcGFzc2VkIHRvIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzExN2I0YmQxODgxZDhlMTNiMjZiMzUzOWUwNzM2MzI0ZTBjYWZkNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE1OjE3OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IGY0ZjJkODIxOTJkNTQuLjRiNjkyYTE4NGU5NDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTUzMywyNyAmIzQzOzUzMywyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY291bnQpOwogLyogU3lzY3RsIHN1cHBvcnQgKi8KIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLS8qIHNpemUgdGhlIHVzZXIgKndhbnRzIHRvIHNldCAqLwotc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciBfX3JlYWRfbW9zdGx5OwotCiBzdGF0aWMgaW50CiBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJCSB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewomIzQzOwl1bnNpZ25lZCBpbnQgaHRhYmxlX3NpemUgPSBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTsKJiM0MzsJc3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7CiAJaW50IHJldDsKIAotCS8qIG1vZHVsZV9wYXJhbSBoYXNoc2l6ZSBjb3VsZCBoYXZlIGNoYW5nZWQgdmFsdWUgKi8KLQluZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKJiM0MzsJdG1wLmRhdGEgPSAmYW1wO2h0YWJsZV9zaXplOwogCi0JcmV0ID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiYjNDM7CXJldCA9IHByb2NfZG9pbnR2ZWMoJmFtcDt0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogCWlmIChyZXQgJmx0OyAwIHx8ICF3cml0ZSkKIAkJcmV0dXJuIHJldDsKIAogCS8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqLwotCXJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcik7Ci0KLQkvKiB1cGRhdGUgaXQgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGJ5IGNvbm50cmFjayAqLwotCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwomIzQzOwlyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaHRhYmxlX3NpemUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY1Nyw3ICYjNDM7NjUyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7CiAJfSwKIAlbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdID0gewogCQkucHJvY25hbWUgICAgICAgPSAmIzM0O25mX2Nvbm50cmFja19idWNrZXRzJiMzNDssCi0JCS5kYXRhICAgICAgICAgICA9ICZhbXA7bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIsCiAJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyICAgPSBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwsCkBAIC0xMTUzLDggJiM0MzsxMTQ3LDYgQEAgc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKQogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9zeXNjdGw7CiAJfQotCi0JbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7CiAjZW5kaWYKIAogCW5mX2Nvbm50cmFja19pbml0X2VuZCgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDg0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIHdlJiMzOTtyZSB0d2Vha2luZyBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN5c2N0bCBpbnRlcmZhY2UgZm9yIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZSBzaXplLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAsIHdoaWNoIGhhbmRsZXMgdGhlIHVzZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCBzeXNjdGwuCgpJdCBzZWVtcyB0aGUgcHJpbWFyeSBnb2FsIGlzIHRvIHNpbXBsaWZ5IGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlIGhvdyB3ZSBoYW5kbGUgdGhlIGNvbm50cmFjayBoYXNoIHRhYmxlIHNpemUgY29uZmlndXJhdGlvbi4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgc2VwYXJhdGUgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCB0aGF0IHN0b3JlZCB0aGUgdXNlciYjMzk7cyByZXF1ZXN0ZWQgc2l6ZSwgd2hpY2ggd2FzIHRoZW4gdXNlZCBpbiBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYC4gVGhlIHBhdGNoIHJlbW92ZXMgdGhhdCB2YXJpYWJsZS4KCkluc3RlYWQsIHRoZSBwYXRjaCBub3cgcmVhZHMgZGlyZWN0bHkgZnJvbSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplYCB3aXRoaW4gdGhlIGhhbmRsZXIuIEl0IGFsc28gYXBwZWFycyB0aGUgcGF0Y2ggc3RvcmVzIHRoZSByZWFkIHZhbHVlIHRlbXBvcmFyaWx5IGluIGEgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBvbiB0aGUgc3RhY2ssIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgLiBJIGd1ZXNzIHRoaXMgaXMgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLgoKVGhlIGV4aXN0aW5nIGNvZGUgdXNlZCB0byB1cGRhdGUgdGhlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgdG8gdGhlIGN1cnJlbnQgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZWAgYWZ0ZXIgYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAuIFRoZSBwYXRjaCByZW1vdmVzIHRoYXQgbGFzdCB1cGRhdGUgc3RlcC4KClRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24uIEJ5IGVsaW1pbmF0aW5nIHRoZSBzZXBhcmF0ZSB1c2VyLXNwYWNlIHZhcmlhYmxlLCB3ZSYjMzk7cmUgbWFraW5nIHRoZSBjb2RlIGNsZWFuZXIgYW5kIGxlc3MgcHJvbmUgdG8gcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIEl0JiMzOTtzIGEgc21hbGwgY2hhbmdlLCBidXQgaXQmIzM5O3MgZ29vZCBwcmFjdGljZSB0byBrZWVwIHRoaW5ncyBzdHJlYW1saW5lZC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIgYGhhc2hzaXplYC4gSSYjMzk7bGwgYWxzbyBjaGVjayBpZiB0aGlzIGFmZmVjdHMgdGhlIHdheSB0aGUgY29ubnRyYWNrIHRhYmxlIHNpemUgaXMgcmVwb3J0ZWQgb3IgaGFuZGxlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgY29kZSBwYXRocyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBzdGlsbCB3b3JrcyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNTpcdHUzMiBuZl9jb25udHJhY2tfY291bnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuIDUyNjpcdHtcbiA1Mjc6XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbmV0ICpjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XG4gNTI4Olx0XG4gNTI5Olx0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2Y25ldC1cdTAwM2Vjb3VudCk7XG4gNTMwOlx0fVxuIDUzMTpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jb3VudCk7XG4gNTMyOlx0XG4gNTMzOlx0LyogU3lzY3RsIHN1cHBvcnQgKi9cbiA1MzQ6XHRcbiA1MzU6XHQjaWZkZWYgQ09ORklHX1NZU0NUTFxuIDUzNjpcdHN0YXRpYyBpbnRcbiA1Mzc6XHRuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbiA1Mzg6XHRcdFx0XHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbiA1Mzk6XHR7XG4gNTQwOlx0XHR1bnNpZ25lZCBpbnQgaHRhYmxlX3NpemUgPSBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTtcbiA1NDE6XHRcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlO1xuIDU0MjpcdFx0aW50IHJldDtcbiA1NDM6XHRcbiA1NDQ6XHRcdHRtcC5kYXRhID0gXHUwMDI2aHRhYmxlX3NpemU7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRyZXQgPSBwcm9jX2RvaW50dmVjKFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4gNTQ3Olx0XHRpZiAocmV0IFx1MDAzYyAwIHx8ICF3cml0ZSlcbiA1NDg6XHRcdFx0cmV0dXJuIHJldDtcbiA1NDk6XHRcbiA1NTA6XHRcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xuIDU1MTpcdFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcbiA1NTI6XHRcdHJldHVybiByZXQ7XG4gNTUzOlx0fVxuIDU1NDpcdFxuIDU1NTpcdHN0YXRpYyBpbnRcbiA1NTY6XHRuZl9jb25udHJhY2tfbG9nX2ludmFsaWRfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gNTU3Olx0XHRcdFx0XHR2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIDU1ODpcdHtcbiA1NTk6XHRcdGludCByZXQsIGk7XG4gNTYwOlx0XG4gNTYxOlx0XHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiA1NjI6XHRcdGlmIChyZXQgXHUwMDNjIDAgfHwgIXdyaXRlKVxuIDU2MzpcdFx0XHRyZXR1cm4gcmV0O1xuIDU2NDpcdFxuIDU2NTpcdFx0aWYgKCoodTggKil0YWJsZS1cdTAwM2VkYXRhID09IDApXG4gNTY2Olx0XHRcdHJldHVybiAwO1xuIDU2NzpcdFxuIDU2ODpcdFx0LyogTG9hZCBuZl9sb2dfc3lzbG9nIG9ubHkgaWYgbm8gbG9nZ2VyIGlzIGN1cnJlbnRseSByZWdpc3RlcmVkICovXG4gNTY5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORlBST1RPX05VTVBST1RPOyBpJiM0MzsmIzQzOykge1xuIDU3MDpcdFx0XHRpZiAobmZfbG9nX2lzX3JlZ2lzdGVyZWQoaSkpXG4gNTcxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTcyOlx0XHR9XG4gNTczOlx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDslc1wmIzM0OywgXCYjMzQ7bmZfbG9nX3N5c2xvZ1wmIzM0Oyk7XG4gNTc0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzeXNjdGwgUGF0Y2ggZm9yIENvbm50cmFjayBIYXNoIFRhYmxlIFJlc2l6ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBzdGVtIGZyb20gdGhlIHRyYW5zaXRpb24gb2YgYHN0cnVjdCBjdGxfdGFibGVgIHRvIGBjb25zdGAgaW4gcmVjZW50IGtlcm5lbHMuIFByZXZpb3VzbHksIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgYWN0ZWQgYXMgYSBnbG9iYWwgdmFyaWFibGUgKG9yIHdhcyBwb2ludGVkIHRvIGJ5IGB0YWJsZS0mZ3Q7ZGF0YWApIHRvIG1hbmFnZSB0aGUgdXNlci1yZXF1ZXN0ZWQgaGFzaCB0YWJsZSBzaXplIGFjcm9zcyBzeXNjdGwgY2FsbHMuIFRoZSBzaGlmdCB0byBgY29uc3RgIGZvciBgdGFibGVgIHByb2JhYmx5IGludHJvZHVjZWQgY29uY3VycmVuY3kgcHJvYmxlbXMgb3IgbWFkZSB0aGUgZ2xvYmFsIHZhcmlhYmxlIHJlZHVuZGFudC4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGNvZGUgaXMgc2FmZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBMZXQgbWUgdHJhY2UgdGhlIGV4ZWN1dGlvbjoKCjEuICBgdW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7YDogT2theSwgYGh0YWJsZV9zaXplYCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgIHVzaW5nIGBSRUFEX09OQ0VgLiBTYWZlIHNvIGZhci4KMi4gIGBzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICp0YWJsZTtgOiAgV2UmIzM5O3JlIGNyZWF0aW5nIGEgbG9jYWwsIG1vZGlmaWFibGUgY29weSBvZiB0aGUgb3JpZ2luYWwgYGNvbnN0IHN0cnVjdCBjdGxfdGFibGVgLiBUaGlzIHByZXZlbnRzIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnN0IGRhdGEuCjMuICBgdG1wLmRhdGEgPSAmYW1wO2h0YWJsZV9zaXplO2A6IFRoZSBgZGF0YWAgcG9pbnRlciB3aXRoaW4gdGhlICpjb3B5KiBgdG1wYCBpcyB0aGVuIHNldCB0byBwb2ludCB0byBvdXIgbG9jYWwgYGh0YWJsZV9zaXplYCB2YXJpYWJsZS4KNC4gIGByZXQgPSBwcm9jX2RvaW50dmVjKCZhbXA7dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtgOiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBhcnQuIElmIHRoaXMgaXMgYSByZWFkLCB3aGVyZSBgd3JpdGVgIGlzIDAsIHRoZW4gdGhlIGBwcm9jX2RvaW50dmVjYCByZWFkcyBmcm9tIGAqdG1wLmRhdGFgLCB3aGljaCBpcyBgaHRhYmxlX3NpemVgLiBBbmQgc2luY2UgYGh0YWJsZV9zaXplYCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIHdpdGggYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZWAsIGl0IHNob3VsZCB3b3JrIHdpdGhvdXQgdW5pbml0aWFsaXplZCByZWFkLiBJZiBpdCYjMzk7cyBhIHdyaXRlIChgd3JpdGUgPT0gMWApLCBgcHJvY19kb2ludHZlY2AgcGFyc2VzIHRoZSB1c2VyIGBidWZmZXJgIGFuZCB3cml0ZXMgdGhlIHZhbHVlIHRvIGBodGFibGVfc2l6ZWAuCgpUaGUgYGlmIChyZXQgJmx0OyAwIHx8ICF3cml0ZSkgcmV0dXJuIHJldDtgIGlzIGEgc3RhbmRhcmQgZXJyb3IgY2hlY2suIEZpbmFsbHksIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaHRhYmxlX3NpemUpO2AgaXMgY2FsbGVkLgoKVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBodGFibGVfc2l6ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiBpdCYjMzk7cyBldmVyIHBvdGVudGlhbGx5IHJlYWQgZnJvbSwgd2hldGhlciBmb3IgYSByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbi4gVGhhdCByZW1vdmVzIHRoZSB3b3JyeS4gTm93IGxldCBtZSBsb29rIGF0IGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg9MzI3PWludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oOjMyODppbnQgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKHVuc2lnbmVkIGludCBoYXNoc2l6ZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgtMzI5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNTQwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FsbG9jX2hhc2h0YWJsZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjU0MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNTQyOmludCBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUodW5zaWduZWQgaW50IGhhc2hzaXplKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI1NDMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNjA2PWludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjYyMjpcdHJldHVybiBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaGFzaHNpemUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjMtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz01Mzc9bmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTU1MC1cdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjU1MTpcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTUyLVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM4NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gbmZfY3Rfc3lzY3RsX3RhYmxlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG5mX2N0X3N5c2N0bF90YWJsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHRoaW5nLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGluZm9ybWF0aW9uIGNhbiBJIGdsZWFuIGZyb20gaXQ/IElzIGl0IGFib3V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcGVyZm9ybWFuY2UgdHVuaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmc/IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLCBwcm9iYWJseSBhIHRhYmxlLCBjb250YWluaW5nIHRoZSBzeXNjdGwgZW50cmllcyBmb3IgTmV0ZmlsdGVyJiMzOTtzIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3Vic3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGVudHJ5IGNvbnRyb2xzIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIHNldHRpbmdzIG5lZWQgYWRqdXN0bWVudCBiYXNlZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0gbG9hZCwgbmV0d29yayB0b3BvbG9neSwgYW5kIHNlY3VyaXR5IHJlcXVpcmVtZW50cy4gVW5kZXJzdGFuZGluZyB0aGUgb3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgbWV0aG9kcyB3aWxsIGJlIGtleSBmb3Igb3B0aW1pemF0aW9uIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NDU6XHRcdFx0LmV4dHJhMlx0XHQ9IFNZU0NUTF9JTlRfTUFYLFxuIDY0NjpcdFx0fSxcbiA2NDc6XHRcdFtORl9TWVNDVExfQ1RfQ09VTlRdID0ge1xuIDY0ODpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bmZfY29ubnRyYWNrX2NvdW50XCYjMzQ7LFxuIDY0OTpcdFx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4gNjUwOlx0XHRcdC5tb2RlXHRcdD0gMDQ0NCxcbiA2NTE6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjLFxuIDY1MjpcdFx0fSxcbiA2NTM6XHRcdFtORl9TWVNDVExfQ1RfQlVDS0VUU10gPSB7XG4gNjU0Olx0XHRcdC5wcm9jbmFtZSAgICAgICA9IFwmIzM0O25mX2Nvbm50cmFja19idWNrZXRzXCYjMzQ7LFxuIDY1NTpcdFx0XHQubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSxcbiA2NTY6XHRcdFx0Lm1vZGUgICAgICAgICAgID0gMDY0NCxcbiA2NTc6XHRcdFx0LnByb2NfaGFuZGxlciAgID0gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsLFxuIDY1ODpcdFx0fSxcbiA2NTk6XHRcdFtORl9TWVNDVExfQ1RfQ0hFQ0tTVU1dID0ge1xuIDY2MDpcdFx0XHQucHJvY25hbWVcdD0gXCYjMzQ7bmZfY29ubnRyYWNrX2NoZWNrc3VtXCYjMzQ7LFxuIDY2MTpcdFx0XHQuZGF0YVx0XHQ9IFx1MDAyNmluaXRfbmV0LmN0LnN5c2N0bF9jaGVja3N1bSxcbiA2NjI6XHRcdFx0Lm1heGxlblx0XHQ9IHNpemVvZih1OCksXG4gNjYzOlx0XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiA2NjQ6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvdTh2ZWNfbWlubWF4LFxuIDY2NTpcdFx0XHQuZXh0cmExIFx0PSBTWVNDVExfWkVSTyxcbiA2NjY6XHRcdFx0LmV4dHJhMiBcdD0gU1lTQ1RMX09ORSxcbiA2Njc6XHRcdH0sXG4gNjY4Olx0XHRbTkZfU1lTQ1RMX0NUX0xPR19JTlZBTElEXSA9IHtcbiA2Njk6XHRcdFx0LnByb2NuYW1lXHQ9IFwmIzM0O25mX2Nvbm50cmFja19sb2dfaW52YWxpZFwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTU6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA3MwoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiA3NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmZfY29ubnRyYWNrYCBTeXNjdGwgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgdGhlIGBORl9TWVNDVExfQ1RfQlVDS0VUU2Agc3lzY3RsIGVudHJ5IGRpcmVjdGx5IHVzZWQgYC5kYXRhID0gJmFtcDtuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAuIE5vdywgYC5kYXRhYCBpcyBleHBsaWNpdGx5IE5VTEwuIEluc2lkZSBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgdGhlIGNvZGUgbm93IGxvb2tzIGxpa2UgdGhpczoKCmBodGFibGVfc2l6ZWAgaXMgZ3JhYmJlZCB3aXRoIGBSRUFEX09OQ0VgLCBjb3BpZWQgaW50byBhIGBjdGxfdGFibGVgIHdoaWNoIGFjdHMgYXMgYSB0ZW1wb3Jhcnkgc3RydWN0dXJlLCBhbmQgdGhlbiB0aGUgYC5kYXRhYCBwb2ludGVyIHdpdGhpbiB0aGF0IHRlbXBvcmFyeSBzdHJ1Y3QgYHRtcGAgaXMgdGhlbiBzZXQgdG8gcG9pbnQgYXQgYCZhbXA7aHRhYmxlX3NpemVgLiBUaGlzIGBodGFibGVfc2l6ZWAgdGhlbiBnZXRzIHVwZGF0ZWQgdGhyb3VnaCBgcHJvY19kb2ludHZlY2AgYmFzZWQgb24gdXNlciBpbnB1dCwgYW5kIGZpbmFsbHkgYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAgaXMgY2FsbGVkLgoKVGhlIGtleSB0aGluZyBpcywgYGh0YWJsZV9zaXplYCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZC4gSXQmIzM5O3MgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgZnJvbSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplYCwgd2hpY2ggaG9sZHMgdGhlIGN1cnJlbnQgaGFzaCB0YWJsZSBzaXplLiBUaGVyZSYjMzk7cyB6ZXJvIGNoYW5jZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2UgdGhlIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHByaW9yIHRvIHVzZS4gV2hlbiByZWFkaW5nIGZyb20gdGhlIHN5c2N0bCAobm8gd3JpdGUpLCBgcHJvY19kb2ludHZlY2AgZ3JhYnMgdGhlIGluaXRpYWxpemVkIHZhbHVlIG9mIGBodGFibGVfc2l6ZWAgYW5kIGNvbnZlcnRzIGl0IHRvIEFTQ0lJIGZvciB0aGUgdXNlci4gV2hlbiB3cml0aW5nICh3cml0ZSksIHRoZSB1c2VyJiMzOTtzIGlucHV0IHVwZGF0ZXMgYGh0YWJsZV9zaXplYC4gYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBpcyBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQsIHdoaWNoIGlzIGdvb2Qgc2luY2UgaXQmIzM5O3MgYSBtdXRhYmxlIGdsb2JhbCwgcmVkdWNpbmcgY29tcGxleGl0eS4KCkkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciBhbnkgYnVmZmVyIHNpemUvYm91bmRzIGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGRvZXNuJiMzOTt0IGRldGVjdCBhbnl0aGluZyBlaXRoZXIuCgpTbywgbGV0JiMzOTtzIGNoZWNrIHRoZSBLTVNBTiBydWxlcy4gVGhlIHJ1bGUgc2F5cyBkb24mIzM5O3QgcnVuIGEgS01TQU4gc2Vzc2lvbiBpZiBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3b3VsZCBjYXRjaCB0aGUgYnVnLiBXZSBvbmx5IG5lZWQgS01TQU4gaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgT05MWSBkZXRlY3RlZCBieSBLTVNBTi4gU2luY2UgYGh0YWJsZV9zaXplYCBpcyBpbml0aWFsaXplZCwgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIGdsb2JhbCBzdHJ1Y3QsIGFuZCBub3RoaW5nIGlzIHJlYWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgaXNuJiMzOTt0IHByb3Blcmx5IGluaXRpYWxpemVkLCB0aGlzIGRvZXNuJiMzOTt0IGFwcGx5LgoKSGVyZSwgc3BlY2lmaWNhbGx5OgoxLiBgaHRhYmxlX3NpemVgIGlzIGEgc3RhY2sgdmFyaWFibGUgaW5pdGlhbGl6ZWQgYnkgYFJFQURfT05DRWAuCjIuIGB0bXBgIGlzIGEgc3RhY2sgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBjb3B5LgozLiBObyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4KNC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuCgpBbHJpZ2h0LCBmaW5hbCBjaGVjayBjb21wbGV0ZS4gSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjA2LjI4Mzc3MTg5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTQ4NDAxNDI1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiU1lTQ1RMXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AgYnkgcmVtb3ZpbmcgdGhlIGdsb2JhbCBzdGF0aWMgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBhbmQgaW5zdGVhZCB1c2luZyBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGN0bF90YWJsZWAgYW5kIGxvY2FsIHZhcmlhYmxlIHRvIHJlc2l6ZSB0aGUgY29ubnRyYWNrIGhhc2ggdGFibGUuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCBzeXNjdGwgZW50cnkgYW5kIHdhcnJhbnRzIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IG9yIHN5c2N0bCBoYW5kbGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6MDYuMjgzNzc3NzYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTE2MjE2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMTE3YjRiZDE4ODFkOGUxM2IyNmIzNTM5ZTA3MzYzMjRlMGNhZmQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDE1OjE3OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xcbmluZGV4IGY0ZjJkODIxOTJkNTQuLjRiNjkyYTE4NGU5NDEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXFxuQEAgLTUzMywyNyArNTMzLDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jb3VudCk7XFxuIC8qIFN5c2N0bCBzdXBwb3J0ICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbi0vKiBzaXplIHRoZSB1c2VyICp3YW50cyB0byBzZXQgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciBfX3JlYWRfbW9zdGx5O1xcbi1cXG4gc3RhdGljIGludFxcbiBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4gXFx0XFx0XFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7XFxuK1xcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogbW9kdWxlX3BhcmFtIGhhc2hzaXplIGNvdWxkIGhhdmUgY2hhbmdlZCB2YWx1ZSAqL1xcbi1cXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcXG4rXFx0dG1wLmRhdGEgPSBcXHUwMDI2aHRhYmxlX3NpemU7XFxuIFxcbi1cXHRyZXQgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4rXFx0cmV0ID0gcHJvY19kb2ludHZlYyhcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDAgfHwgIXdyaXRlKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogdXBkYXRlIHJldCwgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gc2F0aXNmeSByZXF1ZXN0ICovXFxuLVxcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcik7XFxuLVxcbi1cXHQvKiB1cGRhdGUgaXQgdG8gdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGJ5IGNvbm50cmFjayAqL1xcbi1cXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcXG4rXFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNjU3LDcgKzY1Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xcbiBcXHR9LFxcbiBcXHRbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdID0ge1xcbiBcXHRcXHQucHJvY25hbWUgICAgICAgPSBcXFwibmZfY29ubnRyYWNrX2J1Y2tldHNcXFwiLFxcbi1cXHRcXHQuZGF0YSAgICAgICAgICAgPSBcXHUwMDI2bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIsXFxuIFxcdFxcdC5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBpbnQpLFxcbiBcXHRcXHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxcbiBcXHRcXHQucHJvY19oYW5kbGVyICAgPSBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwsXFxuQEAgLTExNTMsOCArMTE0Nyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZClcXG4gXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXRfc3lzY3RsO1xcbiBcXHR9XFxuLVxcbi1cXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcXG4gI2VuZGlmXFxuIFxcbiBcXHRuZl9jb25udHJhY2tfaW5pdF9lbmQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6MDYuNzc2MTg4MjU2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQyNzg0MjEzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIlNZU0NUTFwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Nvbm50cmFja19oYXNoX3N5c2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgIGJ5IHJlbW92aW5nIHRoZSBnbG9iYWwgc3RhdGljIHZhcmlhYmxlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgYW5kIGluc3RlYWQgdXNpbmcgYSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBjdGxfdGFibGVgIGFuZCBsb2NhbCB2YXJpYWJsZSB0byByZXNpemUgdGhlIGNvbm50cmFjayBoYXNoIHRhYmxlLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnVja2V0c2Agc3lzY3RsIGVudHJ5IGFuZCB3YXJyYW50cyBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBvciBzeXNjdGwgaGFuZGxpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzExN2I0YmQxODgxZDhlMTNiMjZiMzUzOWUwNzM2MzI0ZTBjYWZkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE1OjE3OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG5pbmRleCBmNGYyZDgyMTkyZDU0Li40YjY5MmExODRlOTQxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbkBAIC01MzMsMjcgKzUzMywyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY291bnQpO1xuIC8qIFN5c2N0bCBzdXBwb3J0ICovXG4gXG4gI2lmZGVmIENPTkZJR19TWVNDVExcbi0vKiBzaXplIHRoZSB1c2VyICp3YW50cyB0byBzZXQgKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyIF9fcmVhZF9tb3N0bHk7XG4tXG4gc3RhdGljIGludFxuIG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuIFx0XHRcdCB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbitcdHVuc2lnbmVkIGludCBodGFibGVfc2l6ZSA9IFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpO1xuK1x0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogbW9kdWxlX3BhcmFtIGhhc2hzaXplIGNvdWxkIGhhdmUgY2hhbmdlZCB2YWx1ZSAqL1xuLVx0bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7XG4rXHR0bXAuZGF0YSA9IFx1MDAyNmh0YWJsZV9zaXplO1xuIFxuLVx0cmV0ID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4rXHRyZXQgPSBwcm9jX2RvaW50dmVjKFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwIHx8ICF3cml0ZSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xuLVx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyKTtcbi1cbi1cdC8qIHVwZGF0ZSBpdCB0byB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgYnkgY29ubnRyYWNrICovXG4tXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcbitcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NTcsNyArNjUyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XG4gXHR9LFxuIFx0W05GX1NZU0NUTF9DVF9CVUNLRVRTXSA9IHtcbiBcdFx0LnByb2NuYW1lICAgICAgID0gXCJuZl9jb25udHJhY2tfYnVja2V0c1wiLFxuLVx0XHQuZGF0YSAgICAgICAgICAgPSBcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcixcbiBcdFx0Lm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGludCksXG4gXHRcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXG4gXHRcdC5wcm9jX2hhbmRsZXIgICA9IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCxcbkBAIC0xMTUzLDggKzExNDcsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KHZvaWQpXG4gXHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0X3N5c2N0bDtcbiBcdH1cbi1cbi1cdG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplO1xuICNlbmRpZlxuIFxuIFx0bmZfY29ubnRyYWNrX2luaXRfZW5kKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxNzowNi43NzYxOTAyNzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDA2ODMwNzY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbm50cmFjayBIYXNoIFRhYmxlIFNpemUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBzdGFuZGFsb25lIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuXG5cbkZyb20gYSBxdWljayBkaWZmLCBpdCBsb29rcyBsaWtlIHRoZXkncmUgcmVtb3ZpbmcgdGhlIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSouIFRoZSBjb2RlIGNoYW5nZSBpbiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpcyB0aGUgY3J1eCBvZiBpdC4gUHJldmlvdXNseSwgdGhlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgd2FzIGEgY29weSBvZiB0aGUgYWN0dWFsIGhhc2ggdGFibGUgc2l6ZS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIHVzaW5nIGBSRUFEX09OQ0VgIHRvIGVuc3VyZSBhIGNvcnJlY3QgdmFsdWUuIFRoZSBgY3RsX3RhYmxlYCBpcyB0aGVuIGNvcGllZCwgdGhlIGRhdGEgcG9pbnRlciBtb2RpZmllZCB0byBwb2ludCB0byBgaHRhYmxlX3NpemVgLCBhbmQgYHByb2NfZG9pbnR2ZWNgIGlzIGNhbGxlZC4gQ3JpdGljYWxseSwgdGhlIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgIGZ1bmN0aW9uIG5vdyBvcGVyYXRlcyBvbiB0aGlzIGxvY2FsIGBodGFibGVfc2l6ZWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdXNlciB2YXJpYWJsZS4gVGhpcyBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHN0YWxlIHZhbHVlIGlzc3VlIHdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIuIFRoZSB1cGRhdGUgb2YgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBiYWNrIHRvIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgIGFmdGVyIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgIGlzIGdvbmUuXG5cblRoZSBjaGFuZ2UgaW4gYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCByZW1vdmVzIHRoZSByZWZlcmVuY2UgdG8gYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBzaW5jZSB0aGUgYGN0bF90YWJsZWAgaXMgbm93IGNvbnN0IGFuZCB0aGUgZGF0YSBpcyBzZXQgdG8gcG9pbnQgdG8gbG9jYWwgYGh0YWJsZV9zaXplYC4gQW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGluIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0YCBpcyBhbHNvIHJlbW92ZWQuIFRoaXMgYWxsIGxvb2tzIHJlbGF0ZWQuXG5cbk15IGluaXRpYWwgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGVuc3VyaW5nIHRoZSBjb3JyZWN0IGhhc2ggdGFibGUgc2l6ZSBpcyB1c2VkIGR1cmluZyB0aGUgcmVzaXplIG9wZXJhdGlvbiwgYXZvaWRpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3Igc3RhbGUgdmFsdWUgcmVhZC4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcG9zc2libHkgcmVsZXZhbnQgY29tbWl0IG1lc3NhZ2VzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGFkZHJlc3NlcyBhIGtub3duIGlzc3VlLCBtYXliZSByZWxhdGVkIHRvIG1vZHVsZSBwYXJhbWV0ZXIgdXBkYXRlcyBvciBjb25jdXJyZW50IGFjY2Vzcy4gS25vd2luZyB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVyZSBpcyBjcml0aWNhbCBiZWZvcmUgSSBjYW4gZnVsbHkgZXZhbHVhdGUgdGhlIHNvdW5kbmVzcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjI2Ljg0NDUwMTM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTI1OlxcdHUzMiBuZl9jb25udHJhY2tfY291bnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19uZXQgKmNuZXQgPSBuZl9jdF9wZXJuZXQobmV0KTtcXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZjbmV0LVxcdTAwM2Vjb3VudCk7XFxuIDUzMDpcXHR9XFxuIDUzMTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY291bnQpO1xcbiA1MzI6XFx0XFxuIDUzMzpcXHQvKiBTeXNjdGwgc3VwcG9ydCAqL1xcbiA1MzQ6XFx0XFxuIDUzNTpcXHQjaWZkZWYgQ09ORklHX1NZU0NUTFxcbiA1MzY6XFx0c3RhdGljIGludFxcbiA1Mzc6XFx0bmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIDUzODpcXHRcXHRcXHRcXHQgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4gNTM5OlxcdHtcXG4gNTQwOlxcdFxcdHVuc2lnbmVkIGludCBodGFibGVfc2l6ZSA9IFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpO1xcbiA1NDE6XFx0XFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7XFxuIDU0MjpcXHRcXHRpbnQgcmV0O1xcbiA1NDM6XFx0XFxuIDU0NDpcXHRcXHR0bXAuZGF0YSA9IFxcdTAwMjZodGFibGVfc2l6ZTtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0cmV0ID0gcHJvY19kb2ludHZlYyhcXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4gNTQ3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwIHx8ICF3cml0ZSlcXG4gNTQ4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xcbiA1NTE6XFx0XFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcXG4gNTUyOlxcdFxcdHJldHVybiByZXQ7XFxuIDU1MzpcXHR9XFxuIDU1NDpcXHRcXG4gNTU1OlxcdHN0YXRpYyBpbnRcXG4gNTU2OlxcdG5mX2Nvbm50cmFja19sb2dfaW52YWxpZF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4gNTU3OlxcdFxcdFxcdFxcdFxcdHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDU1ODpcXHR7XFxuIDU1OTpcXHRcXHRpbnQgcmV0LCBpO1xcbiA1NjA6XFx0XFxuIDU2MTpcXHRcXHRyZXQgPSBwcm9jX2RvdTh2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcXG4gNTYyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwIHx8ICF3cml0ZSlcXG4gNTYzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdGlmICgqKHU4ICopdGFibGUtXFx1MDAzZWRhdGEgPT0gMClcXG4gNTY2OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHQvKiBMb2FkIG5mX2xvZ19zeXNsb2cgb25seSBpZiBubyBsb2dnZXIgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgKi9cXG4gNTY5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBORlBST1RPX05VTVBST1RPOyBpKyspIHtcXG4gNTcwOlxcdFxcdFxcdGlmIChuZl9sb2dfaXNfcmVnaXN0ZXJlZChpKSlcXG4gNTcxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA1NzI6XFx0XFx0fVxcbiA1NzM6XFx0XFx0cmVxdWVzdF9tb2R1bGUoXFxcIiVzXFxcIiwgXFxcIm5mX2xvZ19zeXNsb2dcXFwiKTtcXG4gNTc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxNzoyNi44NDQ2MDM0MTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTkzMDAyMDgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgQ29tcGlsYXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc3RhcnQgYnkgcGlucG9pbnRpbmcgZXhhY3RseSB3aGVyZSBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3MgdGhlIGZpcnN0IGFuZCBtb3N0IGRpcmVjdCByb3V0ZSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZWAgaXMgdHJlYXRlZCwgYW5kIGlmIGFueSBhc3NvY2lhdGVkIGBzeXNjdGxgIHNldHRpbmdzIGFyZSBpbnZvbHZlZC4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzcGVjaWZpYyBmaWxlLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSByZWFsbHkgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suIEknbSBhZnRlciB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgaXRzIGNvbXBpbGF0aW9uIGlzIGNvbmRpdGlvbmFsLCBkZXBlbmRlbnQgb24gb3RoZXIgbW9kdWxlcywgb3IgYWx3YXlzIGluY2x1ZGVkLiBLbm93aW5nIGl0cyBjb21waWxhdGlvbiBjb25kaXRpb25zIGRpcmVjdGx5IHBvaW50cyB0byB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBvciBidWlsZCBydWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6MzguNzc0NjI3MzQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDYyMTI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfc3RhbmRhbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mz1uZXRmaWx0ZXItJChDT05GSUdfTkVURklMVEVSX05FVExJTkspICs9IG5mbmV0bGluay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTpuZl9jb25udHJhY2steVxcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTYtXFx0XFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz00NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjdF9jcHVfc2VxX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy00ODAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjQ4MTpzdGF0aWMgaW50IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTQ4Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTA4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo1MDk6c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9wcm9jKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTEwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MTQtI2Vsc2VcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTE1OnN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTE2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MTktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjUyMDpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3Byb2Moc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MjEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTkxNz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9uZXRmaWx0ZXJfdGFibGVbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05MjgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjkyOTpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3RjcF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk2My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6OTY0OnN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc2N0cF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05NjUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05ODUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjk4NjpzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X2dyZV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05ODctXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTk5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6OTk3OnN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy05OTgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMjgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMjk6XFx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF90Y3Bfc3lzY3RsKG5ldCwgdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDMwOlxcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc2N0cF9zeXNjdGwobmV0LCB0YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMzE6XFx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9ncmVfc3lzY3RsKG5ldCwgdGFibGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDMyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwNTM6c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDU0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDYyLSNlbHNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwNjM6c3RhdGljIGludCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNjQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNjctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwNjg6c3RhdGljIHZvaWQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaV9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDY5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0xMDczPXN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19maW5pX25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA3ODpcXHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3Byb2MobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA3OTpcXHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDgwLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0xMDgyPXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDg4OlxcdHJldCA9IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfc3lzY3RsKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwODktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA5MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA5MjpcXHRyZXQgPSBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3Byb2MobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTA5My1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTEwLW91dF9pbml0X25ldDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTExMTpcXHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3Byb2MobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMTExMi1vdXRfcHJvYzpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTExMzpcXHRuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTE0LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9MTEyNz1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG5mX2Nvbm50cmFja19uZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExMzMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjExMzQ6c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTM1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMTY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMTcwOnN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pKHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExNzEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTExNzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjExODA6bW9kdWxlX2luaXQobmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjExODE6bW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfZmluaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjM5LjI1NTI1ODJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMjUzMjk4NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIG5mX2Nvbm50cmFjayoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYG5mX2Nvbm50cmFja2AuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGxpa2VseSBhIGtleSBjb21wb25lbnQsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBuZXR3b3JraW5nIG9yIHNlY3VyaXR5IGFuYWx5c2lzLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IHN5bWJvbCwgaXRzIGRlZmF1bHQgc2V0dGluZywgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcy4gSSdtIGFsc28gYW50aWNpcGF0aW5nIGNoZWNraW5nIGZvciBwb3RlbnRpYWwgdHJpc3RhdGUgdmFsdWVzLiBLbm93aW5nIGhvdyBpdCdzIGNvbmZpZ3VyZWQgaGVyZSBpcyBzdGVwIHplcm8gZm9yIGFueSBpbnZlc3RpZ2F0aW9uIEkgbmVlZCB0byBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjQyLjUwODU1ODUzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY0MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxNzo0Mi41NjIyMDU3OTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODUxMjk5NjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBJJ20gdGhpbmtpbmcgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgYSBtb2RpZmljYXRpb24gdG8gYW4gZXhpc3RpbmcgbmV0ZmlsdGVyIGZlYXR1cmUuIExldCBtZSBqdW1wIGRpcmVjdGx5IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMaW5lcyA4Mi0xMDAgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgaXMgd2hlcmUgSSdsbCBiZWdpbi4gVGhpcyByYW5nZSBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBkZWZpbml0aW9uLiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgdGhlIGBjb25maWdgIGtleXdvcmQsIHRoZSBvcHRpb27igJlzIG5hbWUsIGl0cyBkZWZhdWx0IHN0YXRlIChpZiBhbnkpLCB3aGF0IHRoZSBkZXBlbmRlbmN5IGNvbmRpdGlvbnMgYXJlIGFuZCBlc3BlY2lhbGx5LCB3aGF0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIG9wdGlvbiBpcyBhbmQgaXRzIHB1cnBvc2UuIEknbGwgbmVlZCB0byBrbm93OiBJcyBpdCBhIG5ldyBmZWF0dXJlIG9yIGFuIGltcHJvdmVtZW50PyBEb2VzIGl0IGludGVyYWN0IHdpdGggZXhpc3RpbmcgbW9kdWxlcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQ/IEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzZWUgd2hhdCB0cmVhc3VyZXMgdGhlc2UgbGluZXMgaG9sZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE3OjQ3LjQxMzUwOTU3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdCAgZm9yIHBhc3NpdmUgT1MgZmluZ2VycHJpbnQgdmlhIE5GTkVUTElOSy5cXG4gIDgxOlxcdFxcbiAgODI6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS1xcbiAgODM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuICA4NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDg1OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbiAgODY6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQVjYgIT0gblxcbiAgODc6XFx0XFx0aGVscFxcbiAgODg6XFx0XFx0ICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZFxcbiAgODk6XFx0XFx0ICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZFxcbiAgOTA6XFx0XFx0ICBpbnRvIGNvbm5lY3Rpb25zLlxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcXG4gIDkzOlxcdFxcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcXG4gIDk0OlxcdFxcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCcgYmVsb3cpLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgOTc6XFx0XFxuICA5ODpcXHRjb25maWcgTkZfTE9HX1NZU0xPR1xcbiAgOTk6XFx0XFx0dHJpc3RhdGUgXFxcIlN5c2xvZyBwYWNrZXQgbG9nZ2luZ1xcXCJcXG4gMTAwOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAxMDE6XFx0XFx0aGVscFxcbiAxMDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGUgc3VwcG9ydCBmb3IgcGFja2V0IGxvZ2dpbmcgdmlhIHN5c2xvZy5cXG4gMTAzOlxcdFxcdCAgSXQgc3VwcG9ydHMgSVB2NCwgSVBWNiwgQVJQIGFuZCBjb21tb24gdHJhbnNwb3J0IHByb3RvY29scyBzdWNoXFxuIDEwNDpcXHRcXHQgIGFzIFRDUCBhbmQgVURQLlxcbiAxMDU6XFx0XFx0ICBUaGlzIGlzIGEgc2ltcGxlciBidXQgbGVzcyBmbGV4aWJsZSBsb2dnaW5nIG1ldGhvZCBjb21wYXJlZCB0b1xcbiAxMDY6XFx0XFx0ICBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HLlxcbiAxMDc6XFx0XFx0ICBJZiBib3RoIGFyZSBlbmFibGVkIHRoZSBiYWNrZW5kIHRvIHVzZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4tdGltZVxcbiAxMDg6XFx0XFx0ICBieSBtZWFucyBvZiBwZXItYWRkcmVzcy1mYW1pbHkgc3lzY3RsIHR1bmFibGVzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRpZiBORl9DT05OVFJBQ0tcXG4gMTExOlxcdGNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDExMjpcXHRcXHR0cmlzdGF0ZVxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG4gMTE1OlxcdFxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4gMTE2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiBtYXJrcywgdXNlZCBieSB0aGVcXG4gMTE5OlxcdFxcdCAgYENPTk5NQVJLJyB0YXJnZXQgYW5kIGBjb25ubWFyaycgbWF0Y2guIFNpbWlsYXIgdG8gdGhlIG1hcmsgdmFsdWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6NDcuNDEzNjI2NTc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMjYyMTI0MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbm50cmFjayBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGBORl9DT05OVFJBQ0tgIGhlcmUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgZnVuZGFtZW50YWxseSByZWxpYW50IG9uIGBORVRGSUxURVJgLiBUaGF0J3Mgc3RhbmRhcmQsIGFuZCBleHBlY3RlZC4gTW92aW5nIGRlZXBlciwgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHN5c2N0bCBzdXBwb3J0IHdpdGhpbiBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBjb250cm9scyBhcmUgZXhwb3NlZC4gQWgsIHJpZ2h0IOKAkyBJIHNlZSBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBhbiBgI2lmZGVmIENPTkZJR19TWVNDVExgLiBUaGF0IHRlbGxzIG1lIHRoYXQgc3lzdGVtIGFkbWluaXN0cmF0b3JzIGNhbiBlbmFibGUgb3IgZGlzYWJsZSBzeXNjdGwncywgYW5kIHRoZSBjb2RlIHdpbGwgcmVhY3QgYWNjb3JkaW5nbHkuIE5vdyBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHN5c2N0bCB0YWJsZSByZWdpc3RyYXRpb24gdG8gZXhhbWluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6NTguNjc1NzUzODM5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjcxMTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NTM2PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6NTM3Om5mX2Nvbm50cmFja19oYXNoX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01MzgtXFx0XFx0XFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9NjM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTY1Ni1cXHRcXHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo2NTc6XFx0XFx0LnByb2NfaGFuZGxlciAgID0gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy02NTgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTc6NTguNzMyNDcxNTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MDk2OTYyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25udHJhY2sgU3lzY3RsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBuZl9jdF9zeXNjdGxfdGFibGVgIHN0cnVjdHVyZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGAucHJvY25hbWVgIGlzIHNldCB0byBcIm5mX2Nvbm50cmFja19idWNrZXRzLFwiIHdoaWNoIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgY29ubnRyYWNrIGhhc2ggYnVja2V0cyBjb25maWd1cmF0aW9uLCBhcyBJJ2QgZXhwZWN0LiBBbmQgdGhlIGAucHJvY19oYW5kbGVyYCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgd2hpY2ggYWdhaW4sIGxpbmVzIHVwIHBlcmZlY3RseS4gU28gZmFyLCBzbyBnb29kIOKAkyB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBtYWtpbmcgc2Vuc2UsIGFuZCB0aGluZ3Mgc2VlbSB0byBiZSBwb2ludGluZyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIGZvciBtYW5hZ2luZyB0aGUgaGFzaCB0YWJsZS5cblxuTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBuZl9jdF9zeXNjdGxfdGFibGVgIGlzIGFjdHVhbGx5ICpyZWdpc3RlcmVkKi4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQncyBob29rZWQgaW50byB0aGUgc3lzY3RsIGluZnJhc3RydWN0dXJlLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRocm91Z2ggYG5mX2Nvbm50cmFja19zdGFuZGFsb25lLmNgIOKAkyB0aGF0IHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciB0aGlzIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24gdG8gb2NjdXIsIGdpdmVuIHRoZSBjb250ZXh0LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjYWxsIHRvIHNvbWV0aGluZyBsaWtlIGByZWdpc3Rlcl9zeXNjdGxgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiwgbGlrZWx5IGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgdGhlIG1vZHVsZSdzIGxvYWQgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxODowMi4yNDIxNzA4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4NDg0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3Rfc3lzY3RsX3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTU4MD1lbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNjM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo2Mzc6c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTYzOC1cXHRbTkZfU1lTQ1RMX0NUX01BWF0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM9OTk3PXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwMDItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjEwMDM6XFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSAhPSBORl9TWVNDVExfQ1RfTEFTVF9TWVNDVEwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDA0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzoxMDA1OlxcdHRhYmxlID0ga21lbWR1cChuZl9jdF9zeXNjdGxfdGFibGUsIHNpemVvZihuZl9jdF9zeXNjdGxfdGFibGUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy0xMDA2LVxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNDEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmM6MTA0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTEwNDMtXFx0aWYgKCFjbmV0LVxcdTAwM2VzeXNjdGxfaGVhZGVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxODowMi4yOTYwNDgxMDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcwMzg3MDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25udHJhY2sgU3lzY3RsIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIGNvbm50cmFjayBzeXNjdGwgc2V0dGluZ3MgYXJlIGluaXRpYWxpemVkLiBJIHJlbWVtYmVyIHRoYXQgYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgcmVnaXN0ZXJlZCwgcHJvYmFibHkgd2l0aGluIGBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0X3N5c2N0bGAuIEJ1dCB3aGF0IGV4YWN0bHkgaXMgdGhhdCBzeXNjdGwgZW50cnk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgYG5mX2N0X3N5c2N0bF90YWJsZWAgaXMgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgYG5mX2N0X25ldGZpbHRlcl90YWJsZWAgb3IgZm9sbG93IHdoZXJlIGBjbmV0LVx1MDAzZXN5c2N0bF9oZWFkZXJgIGlzIHVzZWQsIGFzIHRoYXQncyBwcm9iYWJseSB3aGVyZSBpdCBnZXRzIGhvb2tlZCBpbi4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoaXMgaXMgYWxsIGNvbm5lY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxODowNC45OTk5MjE0NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzA6XFx0XFx0bmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF9zY3RwX3N5c2N0bChuZXQsIHRhYmxlKTtcXG4xMDMxOlxcdFxcdG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRfZ3JlX3N5c2N0bChuZXQsIHRhYmxlKTtcXG4xMDMyOlxcdFxcbjEwMzM6XFx0XFx0LyogRG9uJ3QgYWxsb3cgbm9uLWluaXRfbmV0IG5zIHRvIGFsdGVyIGdsb2JhbCBzeXNjdGxzICovXFxuMTAzNDpcXHRcXHRpZiAoIW5ldF9lcShcXHUwMDI2aW5pdF9uZXQsIG5ldCkpIHtcXG4xMDM1OlxcdFxcdFxcdHRhYmxlW05GX1NZU0NUTF9DVF9NQVhdLm1vZGUgPSAwNDQ0O1xcbjEwMzY6XFx0XFx0XFx0dGFibGVbTkZfU1lTQ1RMX0NUX0VYUEVDVF9NQVhdLm1vZGUgPSAwNDQ0O1xcbjEwMzc6XFx0XFx0XFx0dGFibGVbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdLm1vZGUgPSAwNDQ0O1xcbjEwMzg6XFx0XFx0fVxcbjEwMzk6XFx0XFxuMTA0MDpcXHRcXHRjbmV0LVxcdTAwM2VzeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFxcXCJuZXQvbmV0ZmlsdGVyXFxcIixcXG4xMDQxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdGFibGUsXFxuMTA0MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUobmZfY3Rfc3lzY3RsX3RhYmxlKSk7XFxuMTA0MzpcXHRcXHRpZiAoIWNuZXQtXFx1MDAzZXN5c2N0bF9oZWFkZXIpXFxuMTA0NDpcXHRcXHRcXHRnb3RvIG91dF91bnJlZ2lzdGVyX25ldGZpbHRlcjtcXG4xMDQ1OlxcdFxcbjEwNDY6XFx0XFx0cmV0dXJuIDA7XFxuMTA0NzpcXHRcXG4xMDQ4OlxcdG91dF91bnJlZ2lzdGVyX25ldGZpbHRlcjpcXG4xMDQ5OlxcdFxcdGtmcmVlKHRhYmxlKTtcXG4xMDUwOlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEwNTE6XFx0fVxcbjEwNTI6XFx0XFxuMTA1MzpcXHRzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9maW5pX3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXFxuMTA1NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE4OjA1LjAwMDAwNzc3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5OTAzMDE2Mjk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBuZl9jb25udHJhY2tfYnVja2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCDigJMgdGhhdCBzeXNjdGwgZW50cnkgdW5kZXIgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYCwgb3IgYWx0ZXJuYXRpdmVseSwgYG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2J1Y2tldHNgLiBSaWdodCwgSSByZW1lbWJlciB0aGF0IG9uZS4gQW55dGltZSB0aGVyZSdzIGEgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24gb24gdGhhdCwgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgZ2V0cyBpbnZva2VkLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIsIGhhbmRsaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsIHZpYSBzeXNjdGwuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IHdoYXQgYWN0dWFsbHkgKmhhcHBlbnMqIHdoZW4gdGhhdCBzeXNjdGwgdmFsdWUgY2hhbmdlcz8gV2hhdCdzIHRoZSBjb3JlIG9mIGl0PyBJdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyB0YWJsZS4gVGhlIHJlYWwgd29yayBpcyBwcm9iYWJseSBkb25lIGluIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgLiBHb3R0YSBjaGVjayB0aGF0IGZ1bmN0aW9uIG5leHQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgdHJpZ2dlcmVkIHdoZW4gdGhlIGJ1Y2tldCBjb3VudCBpcyBtb2RpZmllZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFibGUgZ2V0cyB1cGRhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg0NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE5OjQ0LjAzMDE3MzczN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxMDQ1ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNTQwPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FsbG9jX2hhc2h0YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI1NDEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjI1NDI6aW50IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZSh1bnNpZ25lZCBpbnQgaGFzaHNpemUpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI1NDMte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTI2MDY9aW50IG5mX2Nvbm50cmFja19zZXRfaGFzaHNpemUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNjIxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNjIyOlxcdHJldHVybiBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaGFzaHNpemUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNjIzLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz01Mzc9bmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTUwLVxcdC8qIHVwZGF0ZSByZXQsIHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHNhdGlzZnkgcmVxdWVzdCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzo1NTE6XFx0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtNTUyLVxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjE5OjQ0LjQ1MTIyNjczMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzI1NzUxMDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyB0aGlzIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIHdoaWNoLCBwZXIgdGhlIGd1aWRlbGluZXMsIG1lYW5zIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbkkndmUgZ290IHRoZSBjb250ZXh0OiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYC4gSXQncyBpbXBhY3RpbmcgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AsIHdoaWNoIGlzIGNvcmUgbmV0d29ya2luZyBhbmQgdGh1cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIFN5emthbGxlciBhbmQgc3lzY3RsIHN5c2NhbGxzIGJhY2sgdGhpcyB1cC5cblxuVGhlIHBhdGNoJ3MgY29yZSBtb2RpZmljYXRpb24gaXMgcmV3cml0aW5nIGhvdyB0aGUgaGFzaCB0YWJsZSBzaXplLCBtYW5hZ2VkIGJ5IGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgLCBpcyBoYW5kbGVkLiBCZWZvcmUsIHdlIGhhZCBhIGdsb2JhbCB2YXJpYWJsZSwgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYC4gTm93LCB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGUgZ2xvYmFsLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzLiBJdCB1c2VzIGEgbG9jYWwgYGh0YWJsZV9zaXplYCBhbmQgYSB0ZW1wb3JhcnkgYGN0bF90YWJsZWAuIFRoaXMgaXMgYSBjbGFzc2ljIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgY29uY3VycmVuY3kgYW5kIGRhdGEgbWFuYWdlbWVudC5cblxuVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXIuIFwiUmVmYWN0b3JpbmdzIHRoYXQuLi4gYWx0ZXIgc3RhdGUgbWFuYWdlbWVudCBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cIiBTbywgZGVzcGl0ZSB0aGUgcG90ZW50aWFsIFwicmVmYWN0b3JpbmdcIiBsYWJlbCwgSSBjYW4ndCBkaXNtaXNzIHRoaXMgYXMgdHJpdmlhbC4gUmVhY2hhYmxlIGNvZGUgaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyBtb2RpZmllZC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoaXMgYnkgYW5hbHl6aW5nIHRoZSBndWlkZWxpbmVzIGFnYWluOlxuXG4qICAgXCIzLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXCIg4oCTIFRoZSBwYXRjaCBtb2RpZmllcyBsb2dpYyBpbiBjb3JlIG5ldHdvcmtpbmcsIHdoaWNoIGlzIGEgcG9zaXRpdmUgbWF0Y2guXG4qICAgXCJETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVNcIiDigJMgVGhpcyByZWluZm9yY2VzIHRoYXQgSSBzaG91bGQgY29uc2lkZXIgdGhpcyBmb3IgZnV6emluZyBldmVuIGlmIGl0IG1pZ2h0IGFwcGVhciBsaWtlIFwianVzdFwiIGEgcmVmYWN0b3JpbmcuXG4qICAgXCIyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVwiIOKAkyBOb25lIG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBhcHBseS4gSXQncyBub3Qgbm9uLWtlcm5lbCwgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIGFuIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTm93LCBmb3IgYEZvY3VzU3ltYm9sc2AsIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBtb2RpZmllZCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gQWx0aG91Z2ggYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAgaXMgdXNlZCBpbnRlcm5hbGx5IGluIGl0LCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMsIEkgd2lsbCBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCB3aGljaCBpcyB0aGUgZW50cnlwb2ludCB0byB0aGlzIHN1YnN5c3RlbSBmZWF0dXJlLCBhbmQgaXQncyB0aGUgZXhhY3QgZnVuY3Rpb24gdGhhdCB0aGUgY29kZSBtb2RpZmllcy5cblxuRmluYWxseSwgZm9yIGBFbmFibGVDb25maWdzYCwgSSBuZWVkIHRvIGVuYWJsZSB0aGlzOlxuXG4qICAgVGhlIGNvZGUgaXMgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19TWVNDVExgLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuXG4qICAgQWxzbywgYENPTkZJR19ORl9DT05OVFJBQ0tgIG11c3QgYmUgZW5hYmxlZC5cblxuSW4gY29uY2x1c2lvbiwgdGhpcyBpcyBhIGNsZWFyIFwieWVzXCIgZm9yIGZ1enppbmcuIFRoZSBjb2RlJ3MgaW4gYSByZWFjaGFibGUgYXJlYSwgdGhlIG1vZGlmaWNhdGlvbiBpcyBzaWduaWZpY2FudCwgYW5kIEkgY2FuIGlkZW50aWZ5IHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MTk6NTcuNzA4NzQwODE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc3MDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSArPSBuZm5ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU6bmZfY29ubnRyYWNrLXlcXHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo2OlxcdFxcdCAgIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo3OlxcdFxcdCAgIG5mX2Nvbm50cmFja19wcm90b19pY21wLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODpcXHRcXHQgICBuZl9jb25udHJhY2tfZXh0ZW5kLm8gbmZfY29ubnRyYWNrX2FjY3QubyBuZl9jb25udHJhY2tfc2VxYWRqLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTktXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDpuZl9jb25udHJhY2stJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IG5mX2Nvbm50cmFja19wcm90b19pY21wdjYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTE6bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUKSArPSBuZl9jb25udHJhY2tfdGltZW91dC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMjpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX1RJTUVTVEFNUCkgKz0gbmZfY29ubnRyYWNrX3RpbWVzdGFtcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMzpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUykgKz0gbmZfY29ubnRyYWNrX2VjYWNoZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykgKz0gbmZfY29ubnRyYWNrX2xhYmVscy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX09WUykgKz0gbmZfY29ubnRyYWNrX292cy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjpuZl9jb25udHJhY2stJChDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCkgKz0gbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTc6bmZfY29ubnRyYWNrLSQoQ09ORklHX05GX0NUX1BST1RPX0dSRSkgKz0gbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xOC1pZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLG0pXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTpuZl9jb25udHJhY2stJChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykgKz0gbmZfY29ubnRyYWNrX2JwZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMC1lbHNlIGlmZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSykseSlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxOm5mX2Nvbm50cmFjay0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0gbmZfY29ubnRyYWNrX2JwZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMi1lbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSykgKz0gbmZuZXRsaW5rX2hvb2sub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zMy0jIGNvbm5lY3Rpb24gdHJhY2tpbmdcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0spICs9IG5mX2Nvbm50cmFjay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zNS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM2OiMgbmV0bGluayBpbnRlcmZhY2UgZm9yIG5mX2Nvbm50cmFja1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX05GX0NUX05FVExJTkspICs9IG5mX2Nvbm50cmFja19uZXRsaW5rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX1RJTUVPVVQpICs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzk9b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSKSArPSBuZm5ldGxpbmtfY3RoZWxwZXIub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00MS0jIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyc1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDI6bmZfY29ubnRyYWNrX2gzMjMtb2JqcyA6PSBuZl9jb25udHJhY2tfaDMyM19tYWluLm8gbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00My1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBKSArPSBuZl9jb25udHJhY2tfYW1hbmRhLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfRlRQKSArPSBuZl9jb25udHJhY2tfZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMykgKz0gbmZfY29ubnRyYWNrX2gzMjMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19JUkMpICs9IG5mX2Nvbm50cmFja19pcmMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19CUk9BRENBU1QpICs9IG5mX2Nvbm50cmFja19icm9hZGNhc3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TKSArPSBuZl9jb25udHJhY2tfbmV0Ymlvc19ucy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NOTVApICs9IG5mX2Nvbm50cmFja19zbm1wLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCkgKz0gbmZfY29ubnRyYWNrX3BwdHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTI6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19TQU5FKSArPSBuZl9jb25udHJhY2tfc2FuZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCkgKz0gbmZfY29ubnRyYWNrX3NpcC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo1NDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFApICs9IG5mX2Nvbm50cmFja190ZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToxOTo1Ny43NTg1MTcyODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY2NjEzNjgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIGxpa2Ugd2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBORVRGSUxURVJgIGlzIGFjdHVhbGx5IHJlcXVpcmVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGluY2x1c2lvbiBwYXRoLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgYG5ldGZpbHRlcmAgaXMgZGVmaW5lZCBzb21ld2hlcmUgd2l0aGluIHRoZSBgbmV0YCBkaXJlY3RvcnksIHNvIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgZWl0aGVyIGBuZXQvS2NvbmZpZ2Agb3IgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcyB3aGVyZSBgbmV0ZmlsdGVyYCdzIGNvbXBvbmVudHMgYXJlIHR5cGljYWxseSBkZWNsYXJlZCBhbmQgaW5jbHVkZWQuIFRoYXQncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2Ugd2hlcmUgSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIGRldGVybWluZSB3aGF0IGNvbmZpZ3VyYXRpb25zIGFjdHVhbGx5IHRyaWdnZXIgdGhlIGRlcGVuZGVuY3kgb24gYE5FVEZJTFRFUmAsIGlmIGFueS4gSXQncyBhIGJpdCBvZiBhIGJyZWFkY3J1bWIgaHVudCwgYnV0IHRoYXQncyB0aGUgYmVzdCBhcHByb2FjaCB0byBlc3RhYmxpc2ggdGhlIGFjdHVhbCBkZXBlbmRlbmNpZXMgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTk0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDAuNDI0NjU2NjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjMwNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTIzMT1jb25maWcgQlJJREdFX05FVEZJTFRFUlxcbi0tXFxubmV0L0tjb25maWctMjQ2LVxcbm5ldC9LY29uZmlnOjI0Nzpzb3VyY2UgXFxcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNDg6c291cmNlIFxcXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNDk6c291cmNlIFxcXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNTA6c291cmNlIFxcXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI1MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDAuNDk2MjkyNjM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNzY5NjU1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYmFzZWQgb24gdGhlIHByb21wdDpcblxuKipSZXZpZXdpbmcgdGhlIG5ldC9LY29uZmlnIFNlY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZm9jdXMgb24gbGluZXMgMjIwLTI1NSB3aXRoaW4gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHBpY3R1cmUgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoYXQgY29uZmlndXJhdGlvbiBmaWxlIGluIG15IGhlYWQuIEknbSBwcm9iYWJseSByZWNhbGxpbmcgdGhlIHZhcmlvdXMgbmV0d29yay1yZWxhdGVkIG9wdGlvbnMsIHN1Yi1tZW51cywgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCB0aGVyZS4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgd2hlcmUgdGhpcyBzZWN0aW9uIHNpdHMgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciBmZWF0dXJlIGVuYWJsaW5nLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcGVyaGFwcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBleHRlcm5hbCBwYWNrYWdlcy4gVGhlIGV4YWN0IGNvbnRlbnQgd2l0aGluIHRob3NlIGxpbmVzIGlzLCBvZiBjb3Vyc2UsIHRoZSBkZXRhaWwgSSBuZWVkIHRvIG5vdyBleGFtaW5lLiBJIHdpbGwgbGlrZWx5IGJlIHRyeWluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0IG9wdGlvbnMgYXJlIGJlaW5nIGRlZmluZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBzcGVjaWZpYyBzZWN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIHB1cnBvc2Ugb2YgdGhlc2UgbGluZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDMuNjczMjYwNTQ2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxuIDIyMTpcXHRcXHRib29sIFxcXCJBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcXCJcXG4gMjIyOlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSXFxuIDIyMzpcXHRcXHRkZWZhdWx0IHlcXG4gMjI0OlxcdFxcdGhlbHBcXG4gMjI1OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUgeW91IGNhbiBzZWxlY3QgYmV0d2VlbiBhbGwgdGhlIG5ldGZpbHRlciBtb2R1bGVzLlxcbiAyMjY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gdGhlIG1vcmUgdW51c3VhbCBvbmVzIHdpbGwgbm90IGJlIHNob3duIGFuZCB0aGVcXG4gMjI3OlxcdFxcdCAgYmFzaWMgb25lcyBuZWVkZWQgYnkgbW9zdCBwZW9wbGUgd2lsbCBkZWZhdWx0IHRvICdNJy5cXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAyMzA6XFx0XFxuIDIzMTpcXHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxcbiAyMzI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXFxcIlxcbiAyMzM6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gMjM0OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gMjM1OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDIzNjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gMjM3OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAyMzg6XFx0XFx0aGVscFxcbiAyMzk6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcXG4gMjQwOlxcdFxcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxcbiAyNDE6XFx0XFx0ICB3YW50IHRoaXMgb3B0aW9uIGVuYWJsZWQuXFxuIDI0MjpcXHRcXHQgIEVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIG9wdGlvbiBkb2Vzbid0IGVuYWJsZSBvciBkaXNhYmxlXFxuIDI0MzpcXHRcXHQgIGVidGFibGVzLlxcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdHNvdXJjZSBcXFwibmV0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNDg6XFx0c291cmNlIFxcXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjQ5OlxcdHNvdXJjZSBcXFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI1MDpcXHRzb3VyY2UgXFxcIm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI1MTpcXHRcXG4gMjUyOlxcdGVuZGlmICMgaWYgTkVURklMVEVSXFxuIDI1MzpcXHRcXG4gMjU0OlxcdHNvdXJjZSBcXFwibmV0L3NjdHAvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDMuNjczMzQxMjE2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2NDk5MjU4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGUgaW5pdGlhbCBjYW5kaWRhdGVzIHNlZW0gdG8gYmUgYE5FVEZJTFRFUmAsIGBORl9DT05OVFJBQ0tgLCBhbmQgYFNZU0NUTGAuIEkga25vdyB0aGVzZSBhcmUgaW50ZXJjb25uZWN0ZWQsIHNvIGxldCdzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGNoZWNrLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gYE5GX0NPTk5UUkFDS2AncyBkZXBlbmRlbmNpZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIExvb2tpbmcgYXQgbGluZXMgODItODcsIHRoZSBzb3VyY2UgY29uZmlybXMgaXQncyBuZXN0ZWQgdW5kZXIgYW4gYGlmIE5FVEZJTFRFUmAgYmxvY2ssIHdoaWNoIG9yaWdpbmF0ZXMgaW4gYG5ldC9LY29uZmlnYC4gRXhjZWxsZW50LCB0aGF0IGNvbmZpcm1zIHRoZSByZWxhdGlvbnNoaXAuXG5cbk5vdywgYXMgSSByZWNhbGwsIGBTWVNDVExgIGlzIG5lY2Vzc2FyeSBmb3IgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLiBTbywgbXkgY29yZSBzZXQgb2YgY29uZmlndXJhdGlvbnMsIGFzIG9mIG5vdywgYXJlOlxuXG4qICAgYE5FVEZJTFRFUmBcbiogICBgTkZfQ09OTlRSQUNLYFxuKiAgIGBTWVNDVExgXG5cbkhvd2V2ZXIsIGxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBJJ2xsIGRvdWJsZS1jaGVjayBpZiBgTkZfQ09OTlRSQUNLYCBvciBgU1lTQ1RMYCBpdHNlbGYgaGFzICpmdXJ0aGVyKiBkZXBlbmRlbmNpZXMuIFdoZXJlIHdvdWxkIGBTWVNDVExgIGxpa2VseSBiZSBkZWZpbmVkPyBFaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGZzL3Byb2MvS2NvbmZpZ2AgYXJlIGdvb2QgcGxhY2VzIHRvIHN0YXJ0LiBJJ2xsIG1vdmUgb24gdG8gY2hlY2sgYFNZU0NUTGAgaW4gS2NvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDowNy4zMjMyNjk5NzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjE0MzI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1lTQ1RMXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDcuMzcyNDkyMTU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMDM4NDI4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlN5c3RlbSBDb25maWd1cmF0aW9uIEh1bnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYFNZU0NUTGAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBwZXJmb3JtIGEgZ2xvYmFsIHNlYXJjaCBhY3Jvc3MgdGhlIGVudGlyZSBjb2RlYmFzZSBvciBmaWxlIHN5c3RlbSB0cmVlLCBhc3N1bWluZyBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBhY2Nlc3MgcmlnaHRzLiBJJ20gdGhpbmtpbmcgYSByZWN1cnNpdmUgc2VhcmNoIHdvdWxkIGJlIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IHRvIGVuc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBhY2NvdW50IGZvciB2YXJpYXRpb25zIGluIG5hbWluZyBjb252ZW50aW9ucyDigJMgaXQgY291bGQgYmUgYHN5c2N0bGAsIGBzeXNjdGwuY29uZmAsIG9yIHNvbWUgb3RoZXIgdmFyaWF0aW9uLiBUaGlzIHRob3JvdWdobmVzcyBpcyBjcnVjaWFsOyBJIGNhbid0IGFmZm9yZCB0byBvdmVybG9vayBhIGNyaXRpY2FsIHBhcmFtZXRlciBsdXJraW5nIGluIHNvbWUgb2JzY3VyZSBjb3JuZXIgb2YgdGhlIGNvbmZpZyBzcGFjZS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHRha2Ugc29tZSB0aW1lLCBzbyBJJ2xsIG5lZWQgdG8gcmVmaW5lIHRoZSBzZWFyY2ggdGVybXMgYW5kIGxvY2F0aW9ucyBhcyBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Njc1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MDkuNjc2MzM4MTY2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQwMTU3MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgU1lTQ1RMJFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL0tjb25maWc9Njc9Y29uZmlnIFBST0NfVk1DT1JFX0RFVklDRV9SQU1cXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy04Mi1cXG5mcy9wcm9jL0tjb25maWc6ODM6Y29uZmlnIFNZU0NUTFxcbmZzL3Byb2MvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTeXNjdGwgc3VwcG9ydCAoL3Byb2Mvc3lzKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjIwOjEyLjExNjUwMzAxN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDAyMTQ4MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGBmcy9wcm9jL0tjb25maWdgLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGludGVyZXN0aW5nIG1pZ2h0IGJlIGhhcHBlbmluZyBhcm91bmQgbGluZSA4My4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcHJvY2ZzIGZlYXR1cmUgb3IgbW9kdWxlLiBQZXJoYXBzIHRoZXJlJ3MgYSBuZXcgb3IgbW9kaWZpZWQgc2V0dGluZywgb3IgbWF5YmUgSSBzdXNwZWN0IGEgYnVnIGluIGhvdyBhIHBhcnRpY3VsYXIgb3B0aW9uIGlzIGJlaW5nIGhhbmRsZWQgdXBzdHJlYW0uIFRoaXMgbG9jYXRpb24gaXMgYSBsaWtlbHkgc3BvdCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHByb2MgZmlsZXN5c3RlbTsgc3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiBob3cgY2VydGFpbiBhc3BlY3RzIG9mIHByb2NmcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIEtjb25maWcgc3ludGF4OiBgY29uZmlnYCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuLCB0cnlpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb25kaXRpb25hbCBsb2dpYyBwcmVzZW50IHRoZXJlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IHZhcmlhYmxlcyBhbmQgdW5kZXJzdGFuZCB0aGVpciBlZmZlY3RzLiBNeSBnb2FsIGlzIHRvIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIHJlc29sdmUgdGhlIGlzc3VlIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTcwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MTQuNTE4NjU0MzI5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXG4gIDgxOlxcdFxcdCAgUmVsZXZhbnQgYXJjaGl0ZWN0dXJlcyBzaG91bGQgc2VsZWN0IE5FRURfUFJPQ19WTUNPUkVfREVWSUNFX1JBTS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0Y29uZmlnIFNZU0NUTFxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiU3lzY3RsIHN1cHBvcnQgKC9wcm9jL3N5cylcXFwiIGlmIEVYUEVSVFxcbiAgODU6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuICA4NjpcXHRcXHRkZWZhdWx0IHlcXG4gIDg3OlxcdFxcdGhlbHBcXG4gIDg4OlxcdFxcdCAgVGhlIHN5c2N0bCBpbnRlcmZhY2UgcHJvdmlkZXMgYSBtZWFucyBvZiBkeW5hbWljYWxseSBjaGFuZ2luZ1xcbiAgODk6XFx0XFx0ICBjZXJ0YWluIGtlcm5lbCBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMgb24gdGhlIGZseSB3aXRob3V0IHJlcXVpcmluZ1xcbiAgOTA6XFx0XFx0ICBhIHJlY29tcGlsZSBvZiB0aGUga2VybmVsIG9yIHJlYm9vdCBvZiB0aGUgc3lzdGVtLiAgVGhlIHByaW1hcnlcXG4gIDkxOlxcdFxcdCAgaW50ZXJmYWNlIGlzIHRocm91Z2ggL3Byb2Mvc3lzLiAgSWYgeW91IHNheSBZIGhlcmUgYSB0cmVlIG9mXFxuICA5MjpcXHRcXHQgIG1vZGlmaWFibGUgc3lzY3RsIGVudHJpZXMgd2lsbCBiZSBnZW5lcmF0ZWQgYmVuZWF0aCB0aGVcXG4gIDkzOlxcdFxcdCAgL3Byb2Mvc3lzIGRpcmVjdG9yeS4gVGhleSBhcmUgZXhwbGFpbmVkIGluIHRoZSBmaWxlc1xcbiAgOTQ6XFx0XFx0ICBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9cXHUwMDNlLiAgTm90ZSB0aGF0IGVuYWJsaW5nIHRoaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MTQuNTE4NzMwMjA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NTc2MzEzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgQ09ORklHX1NZU0NUTGAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgUFJPQ19GU2AsIGFuZCBhbHNvIGBDT05GSUdfTkVURklMVEVSYCBhbmQgYENPTkZJR19ORl9DT05OVFJBQ0tgLiBUaGF0J3MgdGhlIGxhbmRzY2FwZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGZ1enppbmcgdGFyZ2V0LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgLCBhbmQgdGhlIGNoZWNrIG9mIGBGb2N1c1N5bWJvbHNgIGNvbmZpcm1zIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgc3ltYm9scyBoZXJlPyBMZXQncyBsb29rIGF0IHRoZSBmdW5jdGlvbnMgY2hhbmdlZCBpbiB0aGUgZGlmZi4gQWgsIGl0J3MganVzdCBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBhbmQgYG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRgLlxuXG5CdXQgd2FpdCwgYG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXRgIGlzIGBfX2luaXRgLCBzbyBpdCdzIG9ubHkgY2FsbGVkIGF0IGJvb3QuIEZ1enppbmcgd2FudHMgcnVudGltZSB0YXJnZXRzLCBzbyB0aGF0J3Mgb3V0LiBXaGF0IGFib3V0IGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgPyBUaGF0ICppcyogY2FsbGVkIGJ5IGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgLiBTaG91bGQgSSBpbmNsdWRlIHRoYXQ/IExldCdzIHNlZS4uLlxuXG5SaWdodCwgYmFzZWQgb24gdGhlIHRyaWFnZSBpbnN0cnVjdGlvbnMsIEknbSBsb29raW5nIGZvciB0aGUgdGFyZ2V0LCB3aGljaCBpbXBsZW1lbnRzIHRoZSBhbHRlcmVkIGxvZ2ljIG9yIGlzIGEgZGlyZWN0IGVudHJ5cG9pbnQuIEFuZCB0aGF0J3MgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAuIE5vdywgdGhlIHBhdGNoICpkb2Vzbid0KiBhbHRlciBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYCBkaXJlY3RseSwgYnV0IGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIHBhc3NlcyBgaHRhYmxlX3NpemVgIHRvIGl0LiBTbywgdGhhdCdzIHdoeSBpdCdzIHBvdGVudGlhbGx5IGltcG9ydGFudC5cblxuQnV0IHRoZSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVyIGZvY3VzZXMgb24gbW9kaWZpZWQgY29kZSBhbmQgaXRzIGRpcmVjdCBlbnRyeXBvaW50LiBTbywgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaXMgdGhlICpwcmltYXJ5KiB0YXJnZXQuIEl0J3MgdGhlIG9uZSBJIG5lZWQgdG8gcHJpb3JpdGl6ZSwgYmVjYXVzZSwgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgY29udGFpbnMgdGhlIG1vZGlmaWVkIGxvZ2ljIChsb2NhbCBzdGFjayB2YXJpYWJsZSwgUkVBRF9PTkNFLCBwcm9jX2RvaW50dmVjIGFuZCBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUpLlxuXG5BbHJpZ2h0LCBsZXQncyBiZSBhYnNvbHV0ZWx5IHN1cmUuIFRoaXMgcGF0Y2ggbW9kaWZpZXMgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AuIEl0J3MgcmVtb3ZpbmcgYSBnbG9iYWwgdmFyaWFibGUgaW4gZmF2b3Igb2YgYSBsb2NhbCBvbmUgZm9yIHN5c2N0bCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggYC9wcm9jL3N5cy9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19idWNrZXRzYC4gQW55IGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsb2dpYyBlcnJvcnMgZHVlIHRvIGhvdyB0aGUgc3lzY3RsIGlzIGhhbmRsZWQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZnV6ei4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLlxuXG5UaGVyZWZvcmUsIGVuYWJsZSBjb25maWdzOiBgTkZfQ09OTlRSQUNLYCwgYFNZU0NUTGAsIGBORVRGSUxURVJgIGFuZCBgUFJPQ19GU2AuIFRoZSBjb3JyZWN0IGZvY3VzIHN5bWJvbCBpcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYC4gQWxsIGdvb2QuIFRoaXMgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBmdXp6aW5nIHRyaWFnZSBndWlkZWxpbmVzLiBUaW1lIHRvIG1vdmUgb24gdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0ODIsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MjAuOTc2MzY1MTYzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyMzk4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJTWVNDVExcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCBieSByZW1vdmluZyB0aGUgZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGFuZCBpbnN0ZWFkIHVzaW5nIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgY3RsX3RhYmxlYCBhbmQgbG9jYWwgdmFyaWFibGUgdG8gcmVzaXplIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc3lzL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2J1Y2tldHNgIHN5c2N0bCBlbnRyeSBhbmQgd2FycmFudHMgZnV6emluZyBmb3IgY29uY3VycmVuY3kgb3Igc3lzY3RsIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJTWVNDVExcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jYCBieSByZW1vdmluZyB0aGUgZ2xvYmFsIHN0YXRpYyB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGFuZCBpbnN0ZWFkIHVzaW5nIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgY3RsX3RhYmxlYCBhbmQgbG9jYWwgdmFyaWFibGUgdG8gcmVzaXplIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc3lzL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2J1Y2tldHNgIHN5c2N0bCBlbnRyeSBhbmQgd2FycmFudHMgZnV6emluZyBmb3IgY29uY3VycmVuY3kgb3Igc3lzY3RsIGhhbmRsaW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDoyMS4wNTQ2MTU1NjJaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzEzMTU4MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6MjEuMDU1MjIxODMyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY3MTI1NDYxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIHN5c2N0bCBoYW5kbGVyIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGJ5IHJlcGxhY2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgd2l0aCBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBodGFibGVfc2l6ZWAgYW5kIGEgbG9jYWwgY29weSBvZiBgc3RydWN0IGN0bF90YWJsZWAuIFRoZSBsb2NhbCB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSlgIGFuZCBgdG1wYCBpcyBpbml0aWFsaXplZCBmcm9tIGAqdGFibGVgIGJlZm9yZSBgcHJvY19kb2ludHZlY2AgcmVhZHMgb3Igd3JpdGVzIGB0bXAuZGF0YWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIHBhc3NlZCB0byBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMTE3YjRiZDE4ODFkOGUxM2IyNmIzNTM5ZTA3MzYzMjRlMGNhZmQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTU6MTc6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbmluZGV4IGY0ZjJkODIxOTJkNTQuLjRiNjkyYTE4NGU5NDEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1xuQEAgLTUzMywyNyArNTMzLDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jb3VudCk7XG4gLyogU3lzY3RsIHN1cHBvcnQgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuLS8qIHNpemUgdGhlIHVzZXIgKndhbnRzIHRvIHNldCAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgX19yZWFkX21vc3RseTtcbi1cbiBzdGF0aWMgaW50XG4gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4gXHRcdFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4ge1xuK1x0dW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7XG4rXHRzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICp0YWJsZTtcbiBcdGludCByZXQ7XG4gXG4tXHQvKiBtb2R1bGVfcGFyYW0gaGFzaHNpemUgY291bGQgaGF2ZSBjaGFuZ2VkIHZhbHVlICovXG4tXHRuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlciA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTtcbitcdHRtcC5kYXRhID0gXHUwMDI2aHRhYmxlX3NpemU7XG4gXG4tXHRyZXQgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbitcdHJldCA9IHByb2NfZG9pbnR2ZWMoXHUwMDI2dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTtcbiBcdGlmIChyZXQgXHUwMDNjIDAgfHwgIXdyaXRlKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogdXBkYXRlIHJldCwgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gc2F0aXNmeSByZXF1ZXN0ICovXG4tXHRyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIpO1xuLVxuLVx0LyogdXBkYXRlIGl0IHRvIHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBieSBjb25udHJhY2sgKi9cbi1cdG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyID0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplO1xuK1x0cmV0ID0gbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY1Nyw3ICs2NTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBuZl9jdF9zeXNjdGxfdGFibGVbXSA9IHtcbiBcdH0sXG4gXHRbTkZfU1lTQ1RMX0NUX0JVQ0tFVFNdID0ge1xuIFx0XHQucHJvY25hbWUgICAgICAgPSBcIm5mX2Nvbm50cmFja19idWNrZXRzXCIsXG4tXHRcdC5kYXRhICAgICAgICAgICA9IFx1MDAyNm5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyLFxuIFx0XHQubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSxcbiBcdFx0Lm1vZGUgICAgICAgICAgID0gMDY0NCxcbiBcdFx0LnByb2NfaGFuZGxlciAgID0gbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsLFxuQEAgLTExNTMsOCArMTE0Nyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zdGFuZGFsb25lX2luaXQodm9pZClcbiBcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXRfc3lzY3RsO1xuIFx0fVxuLVxuLVx0bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXIgPSBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7XG4gI2VuZGlmXG4gXG4gXHRuZl9jb25udHJhY2tfaW5pdF9lbmQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjIwOjIxLjA1NTIyMjg5MloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzA2NTIyMjE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTG9va3MgbGlrZSB3ZSdyZSB0d2Vha2luZyBgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN5c2N0bCBpbnRlcmZhY2UgZm9yIHRoZSBjb25udHJhY2sgaGFzaCB0YWJsZSBzaXplLiBJJ20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0byBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCwgd2hpY2ggaGFuZGxlcyB0aGUgdXNlcidzIGludGVyYWN0aW9uIHdpdGggdGhlIGAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnVja2V0c2Agc3lzY3RsLlxuXG5JdCBzZWVtcyB0aGUgcHJpbWFyeSBnb2FsIGlzIHRvIHNpbXBsaWZ5IGFuZCBwb3RlbnRpYWxseSBpbXByb3ZlIGhvdyB3ZSBoYW5kbGUgdGhlIGNvbm50cmFjayBoYXNoIHRhYmxlIHNpemUgY29uZmlndXJhdGlvbi4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgc2VwYXJhdGUgdmFyaWFibGUgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCB0aGF0IHN0b3JlZCB0aGUgdXNlcidzIHJlcXVlc3RlZCBzaXplLCB3aGljaCB3YXMgdGhlbiB1c2VkIGluIGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGF0IHZhcmlhYmxlLlxuXG5JbnN0ZWFkLCB0aGUgcGF0Y2ggbm93IHJlYWRzIGRpcmVjdGx5IGZyb20gYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZWAgd2l0aGluIHRoZSBoYW5kbGVyLiBJdCBhbHNvIGFwcGVhcnMgdGhlIHBhdGNoIHN0b3JlcyB0aGUgcmVhZCB2YWx1ZSB0ZW1wb3JhcmlseSBpbiBhIGxvY2FsIHZhcmlhYmxlIGBodGFibGVfc2l6ZWAgb24gdGhlIHN0YWNrLCB3aGljaCBpcyB0aGVuIHBhc3NlZCB0byBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplYC4gSSBndWVzcyB0aGlzIGlzIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cblxuVGhlIGV4aXN0aW5nIGNvZGUgdXNlZCB0byB1cGRhdGUgdGhlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgdG8gdGhlIGN1cnJlbnQgYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZWAgYWZ0ZXIgYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAuIFRoZSBwYXRjaCByZW1vdmVzIHRoYXQgbGFzdCB1cGRhdGUgc3RlcC5cblxuVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbi4gQnkgZWxpbWluYXRpbmcgdGhlIHNlcGFyYXRlIHVzZXItc3BhY2UgdmFyaWFibGUsIHdlJ3JlIG1ha2luZyB0aGUgY29kZSBjbGVhbmVyIGFuZCBsZXNzIHByb25lIHRvIHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBJdCdzIGEgc21hbGwgY2hhbmdlLCBidXQgaXQncyBnb29kIHByYWN0aWNlIHRvIGtlZXAgdGhpbmdzIHN0cmVhbWxpbmVkLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG1vZHVsZSBwYXJhbWV0ZXIgYGhhc2hzaXplYC4gSSdsbCBhbHNvIGNoZWNrIGlmIHRoaXMgYWZmZWN0cyB0aGUgd2F5IHRoZSBjb25udHJhY2sgdGFibGUgc2l6ZSBpcyByZXBvcnRlZCBvciBoYW5kbGVkIGluIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIExldCdzIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgc3RpbGwgd29ya3MgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDo0NC4xMjA0NDg0NjZaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyNTpcXHR1MzIgbmZfY29ubnRyYWNrX2NvdW50KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4gNTI2OlxcdHtcXG4gNTI3OlxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbmV0ICpjbmV0ID0gbmZfY3RfcGVybmV0KG5ldCk7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdHJldHVybiBhdG9taWNfcmVhZChcXHUwMDI2Y25ldC1cXHUwMDNlY291bnQpO1xcbiA1MzA6XFx0fVxcbiA1MzE6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NvdW50KTtcXG4gNTMyOlxcdFxcbiA1MzM6XFx0LyogU3lzY3RsIHN1cHBvcnQgKi9cXG4gNTM0OlxcdFxcbiA1MzU6XFx0I2lmZGVmIENPTkZJR19TWVNDVExcXG4gNTM2OlxcdHN0YXRpYyBpbnRcXG4gNTM3OlxcdG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbiA1Mzg6XFx0XFx0XFx0XFx0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXFxuIDUzOTpcXHR7XFxuIDU0MDpcXHRcXHR1bnNpZ25lZCBpbnQgaHRhYmxlX3NpemUgPSBSRUFEX09OQ0UobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKTtcXG4gNTQxOlxcdFxcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKnRhYmxlO1xcbiA1NDI6XFx0XFx0aW50IHJldDtcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0dG1wLmRhdGEgPSBcXHUwMDI2aHRhYmxlX3NpemU7XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdFxcdHJldCA9IHByb2NfZG9pbnR2ZWMoXFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuIDU0NzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCB8fCAhd3JpdGUpXFxuIDU0ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NDk6XFx0XFxuIDU1MDpcXHRcXHQvKiB1cGRhdGUgcmV0LCB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBzYXRpc2Z5IHJlcXVlc3QgKi9cXG4gNTUxOlxcdFxcdHJldCA9IG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShodGFibGVfc2l6ZSk7XFxuIDU1MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NTM6XFx0fVxcbiA1NTQ6XFx0XFxuIDU1NTpcXHRzdGF0aWMgaW50XFxuIDU1NjpcXHRuZl9jb25udHJhY2tfbG9nX2ludmFsaWRfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuIDU1NzpcXHRcXHRcXHRcXHRcXHR2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbiA1NTg6XFx0e1xcbiA1NTk6XFx0XFx0aW50IHJldCwgaTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0cmV0ID0gcHJvY19kb3U4dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuIDU2MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCB8fCAhd3JpdGUpXFxuIDU2MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRpZiAoKih1OCAqKXRhYmxlLVxcdTAwM2VkYXRhID09IDApXFxuIDU2NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTY3OlxcdFxcbiA1Njg6XFx0XFx0LyogTG9hZCBuZl9sb2dfc3lzbG9nIG9ubHkgaWYgbm8gbG9nZ2VyIGlzIGN1cnJlbnRseSByZWdpc3RlcmVkICovXFxuIDU2OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTkZQUk9UT19OVU1QUk9UTzsgaSsrKSB7XFxuIDU3MDpcXHRcXHRcXHRpZiAobmZfbG9nX2lzX3JlZ2lzdGVyZWQoaSkpXFxuIDU3MTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTcyOlxcdFxcdH1cXG4gNTczOlxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCIlc1xcXCIsIFxcXCJuZl9sb2dfc3lzbG9nXFxcIik7XFxuIDU3NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6NDQuMTIwNTQ2MDc2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4NzIxMDE0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzeXNjdGwgUGF0Y2ggZm9yIENvbm50cmFjayBIYXNoIFRhYmxlIFJlc2l6ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gc3RlbSBmcm9tIHRoZSB0cmFuc2l0aW9uIG9mIGBzdHJ1Y3QgY3RsX3RhYmxlYCB0byBgY29uc3RgIGluIHJlY2VudCBrZXJuZWxzLiBQcmV2aW91c2x5LCBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIGFjdGVkIGFzIGEgZ2xvYmFsIHZhcmlhYmxlIChvciB3YXMgcG9pbnRlZCB0byBieSBgdGFibGUtXHUwMDNlZGF0YWApIHRvIG1hbmFnZSB0aGUgdXNlci1yZXF1ZXN0ZWQgaGFzaCB0YWJsZSBzaXplIGFjcm9zcyBzeXNjdGwgY2FsbHMuIFRoZSBzaGlmdCB0byBgY29uc3RgIGZvciBgdGFibGVgIHByb2JhYmx5IGludHJvZHVjZWQgY29uY3VycmVuY3kgcHJvYmxlbXMgb3IgbWFkZSB0aGUgZ2xvYmFsIHZhcmlhYmxlIHJlZHVuZGFudC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgY29kZSBpcyBzYWZlIGFuZCBkb2Vzbid0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gTGV0IG1lIHRyYWNlIHRoZSBleGVjdXRpb246XG5cbjEuICBgdW5zaWduZWQgaW50IGh0YWJsZV9zaXplID0gUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7YDogT2theSwgYGh0YWJsZV9zaXplYCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgIHVzaW5nIGBSRUFEX09OQ0VgLiBTYWZlIHNvIGZhci5cbjIuICBgc3RydWN0IGN0bF90YWJsZSB0bXAgPSAqdGFibGU7YDogIFdlJ3JlIGNyZWF0aW5nIGEgbG9jYWwsIG1vZGlmaWFibGUgY29weSBvZiB0aGUgb3JpZ2luYWwgYGNvbnN0IHN0cnVjdCBjdGxfdGFibGVgLiBUaGlzIHByZXZlbnRzIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnN0IGRhdGEuXG4zLiAgYHRtcC5kYXRhID0gXHUwMDI2aHRhYmxlX3NpemU7YDogVGhlIGBkYXRhYCBwb2ludGVyIHdpdGhpbiB0aGUgKmNvcHkqIGB0bXBgIGlzIHRoZW4gc2V0IHRvIHBvaW50IHRvIG91ciBsb2NhbCBgaHRhYmxlX3NpemVgIHZhcmlhYmxlLlxuNC4gIGByZXQgPSBwcm9jX2RvaW50dmVjKFx1MDAyNnRtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7YDogVGhpcyBpcyB0aGUgY3J1Y2lhbCBwYXJ0LiBJZiB0aGlzIGlzIGEgcmVhZCwgd2hlcmUgYHdyaXRlYCBpcyAwLCB0aGVuIHRoZSBgcHJvY19kb2ludHZlY2AgcmVhZHMgZnJvbSBgKnRtcC5kYXRhYCwgd2hpY2ggaXMgYGh0YWJsZV9zaXplYC4gQW5kIHNpbmNlIGBodGFibGVfc2l6ZWAgaXMgYWxyZWFkeSBpbml0aWFsaXplZCB3aXRoIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgLCBpdCBzaG91bGQgd29yayB3aXRob3V0IHVuaW5pdGlhbGl6ZWQgcmVhZC4gSWYgaXQncyBhIHdyaXRlIChgd3JpdGUgPT0gMWApLCBgcHJvY19kb2ludHZlY2AgcGFyc2VzIHRoZSB1c2VyIGBidWZmZXJgIGFuZCB3cml0ZXMgdGhlIHZhbHVlIHRvIGBodGFibGVfc2l6ZWAuXG5cblRoZSBgaWYgKHJldCBcdTAwM2MgMCB8fCAhd3JpdGUpIHJldHVybiByZXQ7YCBpcyBhIHN0YW5kYXJkIGVycm9yIGNoZWNrLiBGaW5hbGx5LCBgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKGh0YWJsZV9zaXplKTtgIGlzIGNhbGxlZC5cblxuVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBodGFibGVfc2l6ZWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiBpdCdzIGV2ZXIgcG90ZW50aWFsbHkgcmVhZCBmcm9tLCB3aGV0aGVyIGZvciBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uLiBUaGF0IHJlbW92ZXMgdGhlIHdvcnJ5LiBOb3cgbGV0IG1lIGxvb2sgYXQgYG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDczNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE1OjIwOjUyLjk5MjY1MjQxNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxNTAyMjg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGFzaF9yZXNpemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPTMyNz1pbnQgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZShjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg6MzI4OmludCBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUodW5zaWduZWQgaW50IGhhc2hzaXplKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgtMzI5LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTI1NDA9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfYWxsb2NfaGFzaHRhYmxlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjU0MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjU0MjppbnQgbmZfY29ubnRyYWNrX2hhc2hfcmVzaXplKHVuc2lnbmVkIGludCBoYXNoc2l6ZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjU0My17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjYwNj1pbnQgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZShjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjI2MjI6XFx0cmV0dXJuIG5mX2Nvbm50cmFja19oYXNoX3Jlc2l6ZShoYXNoc2l6ZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2MjMtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jPTUzNz1uZl9jb25udHJhY2tfaGFzaF9zeXNjdGwoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01NTAtXFx0LyogdXBkYXRlIHJldCwgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gc2F0aXNmeSByZXF1ZXN0ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjU1MTpcXHRyZXQgPSBuZl9jb25udHJhY2tfaGFzaF9yZXNpemUoaHRhYmxlX3NpemUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYy01NTItXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTU6MjA6NTUuMzA3NjgyNTc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3NTgzOTU0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gbmZfY3Rfc3lzY3RsX3RhYmxlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbmZfY3Rfc3lzY3RsX3RhYmxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyB0aGluZy4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IGluZm9ybWF0aW9uIGNhbiBJIGdsZWFuIGZyb20gaXQ/IElzIGl0IGFib3V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcGVyZm9ybWFuY2UgdHVuaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmc/IEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUsIHByb2JhYmx5IGEgdGFibGUsIGNvbnRhaW5pbmcgdGhlIHN5c2N0bCBlbnRyaWVzIGZvciBOZXRmaWx0ZXIncyBjb25uZWN0aW9uIHRyYWNraW5nIHN1YnN5c3RlbS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBlYWNoIGVudHJ5IGNvbnRyb2xzIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIHNldHRpbmdzIG5lZWQgYWRqdXN0bWVudCBiYXNlZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0gbG9hZCwgbmV0d29yayB0b3BvbG9neSwgYW5kIHNlY3VyaXR5IHJlcXVpcmVtZW50cy4gVW5kZXJzdGFuZGluZyB0aGUgb3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgbWV0aG9kcyB3aWxsIGJlIGtleSBmb3Igb3B0aW1pemF0aW9uIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzODcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDo1OC4wNjYwODU3ODRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NDU6XFx0XFx0XFx0LmV4dHJhMlxcdFxcdD0gU1lTQ1RMX0lOVF9NQVgsXFxuIDY0NjpcXHRcXHR9LFxcbiA2NDc6XFx0XFx0W05GX1NZU0NUTF9DVF9DT1VOVF0gPSB7XFxuIDY0ODpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9jb25udHJhY2tfY291bnRcXFwiLFxcbiA2NDk6XFx0XFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKGludCksXFxuIDY1MDpcXHRcXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4gNjUxOlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWMsXFxuIDY1MjpcXHRcXHR9LFxcbiA2NTM6XFx0XFx0W05GX1NZU0NUTF9DVF9CVUNLRVRTXSA9IHtcXG4gNjU0OlxcdFxcdFxcdC5wcm9jbmFtZSAgICAgICA9IFxcXCJuZl9jb25udHJhY2tfYnVja2V0c1xcXCIsXFxuIDY1NTpcXHRcXHRcXHQubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSxcXG4gNjU2OlxcdFxcdFxcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXFxuIDY1NzpcXHRcXHRcXHQucHJvY19oYW5kbGVyICAgPSBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGwsXFxuIDY1ODpcXHRcXHR9LFxcbiA2NTk6XFx0XFx0W05GX1NZU0NUTF9DVF9DSEVDS1NVTV0gPSB7XFxuIDY2MDpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9jb25udHJhY2tfY2hlY2tzdW1cXFwiLFxcbiA2NjE6XFx0XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpbml0X25ldC5jdC5zeXNjdGxfY2hlY2tzdW0sXFxuIDY2MjpcXHRcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YodTgpLFxcbiA2NjM6XFx0XFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuIDY2NDpcXHRcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvdTh2ZWNfbWlubWF4LFxcbiA2NjU6XFx0XFx0XFx0LmV4dHJhMSBcXHQ9IFNZU0NUTF9aRVJPLFxcbiA2NjY6XFx0XFx0XFx0LmV4dHJhMiBcXHQ9IFNZU0NUTF9PTkUsXFxuIDY2NzpcXHRcXHR9LFxcbiA2Njg6XFx0XFx0W05GX1NZU0NUTF9DVF9MT0dfSU5WQUxJRF0gPSB7XFxuIDY2OTpcXHRcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJuZl9jb25udHJhY2tfbG9nX2ludmFsaWRcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMDo1OC4wNjYyMTMyNzVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTcwMTUyMTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuZl9jb25udHJhY2tgIFN5c2N0bCBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgdGhlIGBORl9TWVNDVExfQ1RfQlVDS0VUU2Agc3lzY3RsIGVudHJ5IGRpcmVjdGx5IHVzZWQgYC5kYXRhID0gXHUwMDI2bmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgLiBOb3csIGAuZGF0YWAgaXMgZXhwbGljaXRseSBOVUxMLiBJbnNpZGUgYG5mX2Nvbm50cmFja19oYXNoX3N5c2N0bGAsIHRoZSBjb2RlIG5vdyBsb29rcyBsaWtlIHRoaXM6XG5cbmBodGFibGVfc2l6ZWAgaXMgZ3JhYmJlZCB3aXRoIGBSRUFEX09OQ0VgLCBjb3BpZWQgaW50byBhIGBjdGxfdGFibGVgIHdoaWNoIGFjdHMgYXMgYSB0ZW1wb3Jhcnkgc3RydWN0dXJlLCBhbmQgdGhlbiB0aGUgYC5kYXRhYCBwb2ludGVyIHdpdGhpbiB0aGF0IHRlbXBvcmFyeSBzdHJ1Y3QgYHRtcGAgaXMgdGhlbiBzZXQgdG8gcG9pbnQgYXQgYFx1MDAyNmh0YWJsZV9zaXplYC4gVGhpcyBgaHRhYmxlX3NpemVgIHRoZW4gZ2V0cyB1cGRhdGVkIHRocm91Z2ggYHByb2NfZG9pbnR2ZWNgIGJhc2VkIG9uIHVzZXIgaW5wdXQsIGFuZCBmaW5hbGx5IGBuZl9jb25udHJhY2tfaGFzaF9yZXNpemVgIGlzIGNhbGxlZC5cblxuVGhlIGtleSB0aGluZyBpcywgYGh0YWJsZV9zaXplYCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZC4gSXQncyBpbml0aWFsaXplZCBkaXJlY3RseSBmcm9tIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVgLCB3aGljaCBob2xkcyB0aGUgY3VycmVudCBoYXNoIHRhYmxlIHNpemUuIFRoZXJlJ3MgemVybyBjaGFuY2Ugb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIHRoZSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBwcmlvciB0byB1c2UuIFdoZW4gcmVhZGluZyBmcm9tIHRoZSBzeXNjdGwgKG5vIHdyaXRlKSwgYHByb2NfZG9pbnR2ZWNgIGdyYWJzIHRoZSBpbml0aWFsaXplZCB2YWx1ZSBvZiBgaHRhYmxlX3NpemVgIGFuZCBjb252ZXJ0cyBpdCB0byBBU0NJSSBmb3IgdGhlIHVzZXIuIFdoZW4gd3JpdGluZyAod3JpdGUpLCB0aGUgdXNlcidzIGlucHV0IHVwZGF0ZXMgYGh0YWJsZV9zaXplYC4gYG5mX2Nvbm50cmFja19odGFibGVfc2l6ZV91c2VyYCBpcyBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQsIHdoaWNoIGlzIGdvb2Qgc2luY2UgaXQncyBhIG11dGFibGUgZ2xvYmFsLCByZWR1Y2luZyBjb21wbGV4aXR5LlxuXG5JJ3ZlIHZlcmlmaWVkIHRoYXQgdGhpcyBjaGFuZ2UgZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGFueSBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCBvciBhbnkgYnVmZmVyIHNpemUvYm91bmRzIGNoYW5nZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGRvZXNuJ3QgZGV0ZWN0IGFueXRoaW5nIGVpdGhlci5cblxuU28sIGxldCdzIGNoZWNrIHRoZSBLTVNBTiBydWxlcy4gVGhlIHJ1bGUgc2F5cyBkb24ndCBydW4gYSBLTVNBTiBzZXNzaW9uIGlmIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHdvdWxkIGNhdGNoIHRoZSBidWcuIFdlIG9ubHkgbmVlZCBLTVNBTiBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBPTkxZIGRldGVjdGVkIGJ5IEtNU0FOLiBTaW5jZSBgaHRhYmxlX3NpemVgIGlzIGluaXRpYWxpemVkLCBgdG1wYCBpcyBpbml0aWFsaXplZCBmcm9tIGEgZ2xvYmFsIHN0cnVjdCwgYW5kIG5vdGhpbmcgaXMgcmVhZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UgdGhhdCBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZCwgdGhpcyBkb2Vzbid0IGFwcGx5LlxuXG5IZXJlLCBzcGVjaWZpY2FsbHk6XG4xLiBgaHRhYmxlX3NpemVgIGlzIGEgc3RhY2sgdmFyaWFibGUgaW5pdGlhbGl6ZWQgYnkgYFJFQURfT05DRWAuXG4yLiBgdG1wYCBpcyBhIHN0YWNrIHZhcmlhYmxlIGluaXRpYWxpemVkIHZpYSBzdHJ1Y3QgY29weS5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIHJlYWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuNC4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuXG5cbkFscmlnaHQsIGZpbmFsIGNoZWNrIGNvbXBsZXRlLiBJJ20gcmVhZHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA3MywiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNToyMTowNy43Njc3NDE2NzhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIHN5c2N0bCBoYW5kbGVyIGBuZl9jb25udHJhY2tfaGFzaF9zeXNjdGxgIGJ5IHJlcGxhY2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlIGBuZl9jb25udHJhY2tfaHRhYmxlX3NpemVfdXNlcmAgd2l0aCBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlIGBodGFibGVfc2l6ZWAgYW5kIGEgbG9jYWwgY29weSBvZiBgc3RydWN0IGN0bF90YWJsZWAuIFRoZSBsb2NhbCB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgUkVBRF9PTkNFKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSlgIGFuZCBgdG1wYCBpcyBpbml0aWFsaXplZCBmcm9tIGAqdGFibGVgIGJlZm9yZSBgcHJvY19kb2ludHZlY2AgcmVhZHMgb3Igd3JpdGVzIGB0bXAuZGF0YWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIHBhc3NlZCB0byBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBzeXNjdGwgaGFuZGxlciBgbmZfY29ubnRyYWNrX2hhc2hfc3lzY3RsYCBieSByZXBsYWNpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSBgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplX3VzZXJgIHdpdGggYSBsb2NhbCBzdGFjayB2YXJpYWJsZSBgaHRhYmxlX3NpemVgIGFuZCBhIGxvY2FsIGNvcHkgb2YgYHN0cnVjdCBjdGxfdGFibGVgLiBUaGUgbG9jYWwgdmFyaWFibGUgYGh0YWJsZV9zaXplYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYFJFQURfT05DRShuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpYCBhbmQgYHRtcGAgaXMgaW5pdGlhbGl6ZWQgZnJvbSBgKnRhYmxlYCBiZWZvcmUgYHByb2NfZG9pbnR2ZWNgIHJlYWRzIG9yIHdyaXRlcyBgdG1wLmRhdGFgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBwYXNzZWQgdG8gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[1] Phase: Succeeded StartedAt: 2026-09-11 15:21:18 +0000 UTC FinishedAt: 2026-09-11 15:21:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 15:21:18 +0000 UTC FinishedAt: 2026-09-11 15:21:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2] Phase: Succeeded StartedAt: 2026-09-11 15:21:18 +0000 UTC FinishedAt: 2026-09-11 16:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-11 15:21:18 +0000 UTC FinishedAt: 2026-09-11 16:01:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 15:21:18 +0000 UTC FinishedAt: 2026-09-11 15:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 15:21:18 +0000 UTC FinishedAt: 2026-09-11 15:21:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl2sgp/series-workflowl2sgp-convert-artifact-3604693889/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 15:21:28 +0000 UTC FinishedAt: 2026-09-11 15:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 15:21:28 +0000 UTC FinishedAt: 2026-09-11 15:37:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4c1b336d-900a-43a5-ac4f-80b74ebc18c8,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-workflowl2sgp/series-workflowl2sgp-convert-artifact-3604693889/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": "eca628dc-556e-4564-9a27-779c39413bb6", "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-workflowl2sgp/series-workflowl2sgp-build-action-1295163567/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 15:21:28 +0000 UTC FinishedAt: 2026-09-11 15:37:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4c1b336d-900a-43a5-ac4f-80b74ebc18c8,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-workflowl2sgp/series-workflowl2sgp-convert-artifact-3604693889/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": "eca628dc-556e-4564-9a27-779c39413bb6", "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-workflowl2sgp/series-workflowl2sgp-build-action-1295163567/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 15:37:59 +0000 UTC FinishedAt: 2026-09-11 15:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 15:37:59 +0000 UTC FinishedAt: 2026-09-11 15:37:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 15:37:59 +0000 UTC FinishedAt: 2026-09-11 15:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 15:37:59 +0000 UTC FinishedAt: 2026-09-11 15:38:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl2sgp/series-workflowl2sgp-convert-artifact-3355471956/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 15:38:10 +0000 UTC FinishedAt: 2026-09-11 15:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 15:38:10 +0000 UTC FinishedAt: 2026-09-11 15:40:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eca628dc-556e-4564-9a27-779c39413bb6,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-workflowl2sgp/series-workflowl2sgp-build-action-1295163567/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-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 15:40:27 +0000 UTC FinishedAt: 2026-09-11 15:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 15:40:27 +0000 UTC FinishedAt: 2026-09-11 15:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 15:40:27 +0000 UTC FinishedAt: 2026-09-11 15:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 15:40:27 +0000 UTC FinishedAt: 2026-09-11 15:56:36 +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:*4c1b336d-900a-43a5-ac4f-80b74ebc18c8,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-workflowl2sgp/series-workflowl2sgp-convert-artifact-3355471956/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": "90003d39-28f5-4720-a3cf-6af7539fa6ba", "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-workflowl2sgp/series-workflowl2sgp-build-action-2979587104/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 15:40:27 +0000 UTC FinishedAt: 2026-09-11 15:56:26 +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:*4c1b336d-900a-43a5-ac4f-80b74ebc18c8,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-workflowl2sgp/series-workflowl2sgp-convert-artifact-3355471956/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": "90003d39-28f5-4720-a3cf-6af7539fa6ba", "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-workflowl2sgp/series-workflowl2sgp-build-action-2979587104/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 15:56:36 +0000 UTC FinishedAt: 2026-09-11 15:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 15:56:36 +0000 UTC FinishedAt: 2026-09-11 15:56:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 15:56:36 +0000 UTC FinishedAt: 2026-09-11 15:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 15:56:36 +0000 UTC FinishedAt: 2026-09-11 15:58:24 +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:*90003d39-28f5-4720-a3cf-6af7539fa6ba,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-workflowl2sgp/series-workflowl2sgp-build-action-2979587104/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-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-09-11 15:58:34 +0000 UTC FinishedAt: 2026-09-11 16:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-09-11 15:58:34 +0000 UTC FinishedAt: 2026-09-11 16:01:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*eca628dc-556e-4564-9a27-779c39413bb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90003d39-28f5-4720-a3cf-6af7539fa6ba,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-workflowl2sgp/series-workflowl2sgp-build-action-1295163567/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-workflowl2sgp/series-workflowl2sgp-build-action-2979587104/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 15:58:34 +0000 UTC FinishedAt: 2026-09-11 15:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 15:58:34 +0000 UTC FinishedAt: 2026-09-11 15:58:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl2sgp/series-workflowl2sgp-convert-artifact-2778339709/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 15:58:34 +0000 UTC FinishedAt: 2026-09-11 15:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 15:58:34 +0000 UTC FinishedAt: 2026-09-11 15:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 15:58:34 +0000 UTC FinishedAt: 2026-09-11 15:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-09-11 15:58:44 +0000 UTC FinishedAt: 2026-09-11 16:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2sgp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"base_commit":"6ebcf5074cff0402730c6981d2397139fee6322d","base_tree":"nf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_hash_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER","SYSCTL","PROC_FS"],"series_id":"56ccd6c8-8f37-478e-be54-3db3be47997e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Failed StartedAt: 2026-09-11 15:58:44 +0000 UTC FinishedAt: 2026-09-11 16:01:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eca628dc-556e-4564-9a27-779c39413bb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90003d39-28f5-4720-a3cf-6af7539fa6ba,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-workflowl2sgp/series-workflowl2sgp-build-action-1295163567/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-workflowl2sgp/series-workflowl2sgp-build-action-2979587104/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-workflowl2sgp/series-workflowl2sgp-convert-artifact-2778339709/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil