Name: series-workflowd8qc6 Phase: Succeeded StartedAt: 2026-07-07 06:15:03 +0000 UTC FinishedAt: 2026-07-07 11:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[0] Phase: Succeeded StartedAt: 2026-07-07 06:15:03 +0000 UTC FinishedAt: 2026-07-07 06:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 06:15:03 +0000 UTC FinishedAt: 2026-07-07 06:37:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "NUMA_MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "NUMA_MIGRATION" ], "series_id": "a954a65b-c0db-4bac-b377-6786de060899" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "establish_demotion_targets" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgYG5vZGVfaXNfdG9wdGllcigpYCBieSByZXBsYWNpbmcgZHluYW1pYyBtZW1vcnkgdGllciBjaGVja3Mgd2l0aCBhIHByZWNvbXB1dGVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gVGhlIG5vZGVtYXNrIGlzIHVwZGF0ZWQgaW4gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5IGhvdHBsdWcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBiYWxhbmNpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBtZW1vcnkgaG90cGx1ZyBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDQ3MzQxNDRlYmFmMzc4ZDAzZDI2MGRjNTgzNDU2MmEzNTdiNzZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAwNjozMzowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktdGllcnMuYyBiL21tL21lbW9yeS10aWVycy5jXG5pbmRleCA1NDg1MWQ4YTE5NWIwMy4uMmU2ZTAyZWMxZmNlNGIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktdGllcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LXRpZXJzLmNcbkBAIC03MSw2ICYjNDM7NzEsNyBAQCBib29sIGZvbGlvX3VzZV9hY2Nlc3NfdGltZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuICNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cbiBzdGF0aWMgaW50IHRvcF90aWVyX2FkaXN0YW5jZTtcbiYjNDM7c3RhdGljIG5vZGVtYXNrX3QgdG9wdGllcl9ub2RlcyBfX3JlYWRfbW9zdGx5ID0gTk9ERV9NQVNLX0FMTDtcbiAvKlxuICAqIG5vZGVfZGVtb3Rpb25bXSBleGFtcGxlczpcbiAgKlxuQEAgLTI3NiwyNyAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3RpZXIgKl9fbm9kZV9nZXRfbWVtb3J5X3RpZXIoaW50IG5vZGUpXG4gI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxuIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxuIHtcbi1cdGJvb2wgdG9wdGllcjtcbi1cdHBnX2RhdGFfdCAqcGdkYXQ7XG4tXHRzdHJ1Y3QgbWVtb3J5X3RpZXIgKm1lbXRpZXI7XG4tXG4tXHRwZ2RhdCA9IE5PREVfREFUQShub2RlKTtcbi1cdGlmICghcGdkYXQpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdG1lbXRpZXIgPSByY3VfZGVyZWZlcmVuY2UocGdkYXQtXHUwMDNlbWVtdGllcik7XG4tXHRpZiAoIW1lbXRpZXIpIHtcbi1cdFx0dG9wdGllciA9IHRydWU7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVx0aWYgKG1lbXRpZXItXHUwMDNlYWRpc3RhbmNlX3N0YXJ0IFx1MDAzYz0gdG9wX3RpZXJfYWRpc3RhbmNlKVxuLVx0XHR0b3B0aWVyID0gdHJ1ZTtcbi1cdGVsc2Vcbi1cdFx0dG9wdGllciA9IGZhbHNlO1xuLW91dDpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0cmV0dXJuIHRvcHRpZXI7XG4mIzQzO1x0cmV0dXJuIG5vZGVfaXNzZXQobm9kZSwgdG9wdGllcl9ub2Rlcyk7XG4gfVxuIFxuIHZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpXG5AQCAtNDk3LDE5ICYjNDM7NDc4LDIyIEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4gXHRcdH1cbiBcdH1cbiBcdC8qXG4tXHQgKiBOb3cgYnVpbGQgdGhlIGxvd2VyX3RpZXIgbWFzayBmb3IgZWFjaCBub2RlIGNvbGxlY3Rpbmcgbm9kZSBtYXNrIGZyb21cbi1cdCAqIGFsbCBtZW1vcnkgdGllciBiZWxvdyBpdC4gVGhpcyBhbGxvd3MgdXMgdG8gZmFsbGJhY2sgZGVtb3Rpb24gcGFnZVxuLVx0ICogYWxsb2NhdGlvbiB0byBhIHNldCBvZiBub2RlcyB0aGF0IGlzIGNsb3NlciB0aGUgYWJvdmUgc2VsZWN0ZWRcbi1cdCAqIHByZWZlcnJlZCBub2RlLlxuJiM0MztcdCAqIEEgbm9kZSBzdGF5cyB0b3B0aWVyIHVubGVzcyBpdCBiZWxvbmdzIHRvIGEgdGllciBiZWxvd1xuJiM0MztcdCAqIHRvcF90aWVyX2FkaXN0YW5jZSwgd2hpbGUgZWFjaCB0aWVyJiMzOTtzIGxvd2VyX3RpZXJfbWFzayBjb2xsZWN0cyB0aGVcbiYjNDM7XHQgKiBub2RlcyBvZiBldmVyeSB0aWVyIGJlbG93IGl0IHNvIGRlbW90aW9uIHBhZ2UgYWxsb2NhdGlvbiBjYW4gZmFsbFxuJiM0MztcdCAqIGJhY2sgdG8gbm9kZXMgY2xvc2VyIHRvIHRoZSBzZWxlY3RlZCBwcmVmZXJyZWQgbm9kZS5cbiBcdCAqL1xuJiM0MztcdHRvcHRpZXJfbm9kZXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG4gXHRsb3dlcl90aWVyID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZW10aWVyLCBcdTAwMjZtZW1vcnlfdGllcnMsIGxpc3QpIHtcbiYjNDM7XHRcdHRpZXJfbm9kZXMgPSBnZXRfbWVtdGllcl9ub2RlbWFzayhtZW10aWVyKTtcbiYjNDM7XHRcdGlmIChtZW10aWVyLVx1MDAzZWFkaXN0YW5jZV9zdGFydCBcdTAwM2UgdG9wX3RpZXJfYWRpc3RhbmNlKVxuJiM0MztcdFx0XHRub2Rlc19hbmRub3QodG9wdGllcl9ub2RlcywgdG9wdGllcl9ub2RlcywgdGllcl9ub2Rlcyk7XG4gXHRcdC8qXG4gXHRcdCAqIEtlZXAgcmVtb3ZpbmcgY3VycmVudCB0aWVyIGZyb20gbG93ZXJfdGllciBub2RlcyxcbiBcdFx0ICogVGhpcyB3aWxsIHJlbW92ZSBhbGwgbm9kZXMgaW4gY3VycmVudCBhbmQgYWJvdmVcbiBcdFx0ICogbWVtb3J5IHRpZXIgZnJvbSB0aGUgbG93ZXJfdGllciBtYXNrLlxuIFx0XHQgKi9cbi1cdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuIFx0XHRub2Rlc19hbmRub3QobG93ZXJfdGllciwgbG93ZXJfdGllciwgdGllcl9ub2Rlcyk7XG4gXHRcdG1lbXRpZXItXHUwMDNlbG93ZXJfdGllcl9tYXNrID0gbG93ZXJfdGllcjtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O05VTUFfTUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIGBub2RlX2lzX3RvcHRpZXIoKWAgYnkgcmVwbGFjaW5nIGR5bmFtaWMgbWVtb3J5IHRpZXIgY2hlY2tzIHdpdGggYSBwcmVjb21wdXRlZCBgdG9wdGllcl9ub2Rlc2Agbm9kZW1hc2suIFRoZSBub2RlbWFzayBpcyB1cGRhdGVkIGluIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIG1lbW9yeSBob3RwbHVnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWVtb3J5IHRpZXJpbmcgYW5kIE5VTUEgYmFsYW5jaW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCwgcGFydGljdWxhcmx5IHRocm91Z2ggbWVtb3J5IGhvdHBsdWcgZXZlbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNDQ3MzQxNDRlYmFmMzc4ZDAzZDI2MGRjNTgzNDU2MmEzNTdiNzZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAwNjozMzowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS10aWVycy5jIGIvbW0vbWVtb3J5LXRpZXJzLmMKaW5kZXggNTQ4NTFkOGExOTViMDMuLjJlNmUwMmVjMWZjZTRiIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktdGllcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktdGllcnMuYwpAQCAtNzEsNiAmIzQzOzcxLDcgQEAgYm9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbykKIAogI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTgogc3RhdGljIGludCB0b3BfdGllcl9hZGlzdGFuY2U7CiYjNDM7c3RhdGljIG5vZGVtYXNrX3QgdG9wdGllcl9ub2RlcyBfX3JlYWRfbW9zdGx5ID0gTk9ERV9NQVNLX0FMTDsKIC8qCiAgKiBub2RlX2RlbW90aW9uW10gZXhhbXBsZXM6CiAgKgpAQCAtMjc2LDI3ICYjNDM7Mjc3LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfdGllciAqX19ub2RlX2dldF9tZW1vcnlfdGllcihpbnQgbm9kZSkKICNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT04KIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKQogewotCWJvb2wgdG9wdGllcjsKLQlwZ19kYXRhX3QgKnBnZGF0OwotCXN0cnVjdCBtZW1vcnlfdGllciAqbWVtdGllcjsKLQotCXBnZGF0ID0gTk9ERV9EQVRBKG5vZGUpOwotCWlmICghcGdkYXQpCi0JCXJldHVybiBmYWxzZTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQltZW10aWVyID0gcmN1X2RlcmVmZXJlbmNlKHBnZGF0LSZndDttZW10aWVyKTsKLQlpZiAoIW1lbXRpZXIpIHsKLQkJdG9wdGllciA9IHRydWU7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAobWVtdGllci0mZ3Q7YWRpc3RhbmNlX3N0YXJ0ICZsdDs9IHRvcF90aWVyX2FkaXN0YW5jZSkKLQkJdG9wdGllciA9IHRydWU7Ci0JZWxzZQotCQl0b3B0aWVyID0gZmFsc2U7Ci1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHRvcHRpZXI7CiYjNDM7CXJldHVybiBub2RlX2lzc2V0KG5vZGUsIHRvcHRpZXJfbm9kZXMpOwogfQogCiB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKQpAQCAtNDk3LDE5ICYjNDM7NDc4LDIyIEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpCiAJCX0KIAl9CiAJLyoKLQkgKiBOb3cgYnVpbGQgdGhlIGxvd2VyX3RpZXIgbWFzayBmb3IgZWFjaCBub2RlIGNvbGxlY3Rpbmcgbm9kZSBtYXNrIGZyb20KLQkgKiBhbGwgbWVtb3J5IHRpZXIgYmVsb3cgaXQuIFRoaXMgYWxsb3dzIHVzIHRvIGZhbGxiYWNrIGRlbW90aW9uIHBhZ2UKLQkgKiBhbGxvY2F0aW9uIHRvIGEgc2V0IG9mIG5vZGVzIHRoYXQgaXMgY2xvc2VyIHRoZSBhYm92ZSBzZWxlY3RlZAotCSAqIHByZWZlcnJlZCBub2RlLgomIzQzOwkgKiBBIG5vZGUgc3RheXMgdG9wdGllciB1bmxlc3MgaXQgYmVsb25ncyB0byBhIHRpZXIgYmVsb3cKJiM0MzsJICogdG9wX3RpZXJfYWRpc3RhbmNlLCB3aGlsZSBlYWNoIHRpZXImIzM5O3MgbG93ZXJfdGllcl9tYXNrIGNvbGxlY3RzIHRoZQomIzQzOwkgKiBub2RlcyBvZiBldmVyeSB0aWVyIGJlbG93IGl0IHNvIGRlbW90aW9uIHBhZ2UgYWxsb2NhdGlvbiBjYW4gZmFsbAomIzQzOwkgKiBiYWNrIHRvIG5vZGVzIGNsb3NlciB0byB0aGUgc2VsZWN0ZWQgcHJlZmVycmVkIG5vZGUuCiAJICovCiYjNDM7CXRvcHRpZXJfbm9kZXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07CiAJbG93ZXJfdGllciA9IG5vZGVfc3RhdGVzW05fTUVNT1JZXTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1lbXRpZXIsICZhbXA7bWVtb3J5X3RpZXJzLCBsaXN0KSB7CiYjNDM7CQl0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7CiYjNDM7CQlpZiAobWVtdGllci0mZ3Q7YWRpc3RhbmNlX3N0YXJ0ICZndDsgdG9wX3RpZXJfYWRpc3RhbmNlKQomIzQzOwkJCW5vZGVzX2FuZG5vdCh0b3B0aWVyX25vZGVzLCB0b3B0aWVyX25vZGVzLCB0aWVyX25vZGVzKTsKIAkJLyoKIAkJICogS2VlcCByZW1vdmluZyBjdXJyZW50IHRpZXIgZnJvbSBsb3dlcl90aWVyIG5vZGVzLAogCQkgKiBUaGlzIHdpbGwgcmVtb3ZlIGFsbCBub2RlcyBpbiBjdXJyZW50IGFuZCBhYm92ZQogCQkgKiBtZW1vcnkgdGllciBmcm9tIHRoZSBsb3dlcl90aWVyIG1hc2suCiAJCSAqLwotCQl0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7CiAJCW5vZGVzX2FuZG5vdChsb3dlcl90aWVyLCBsb3dlcl90aWVyLCB0aWVyX25vZGVzKTsKIAkJbWVtdGllci0mZ3Q7bG93ZXJfdGllcl9tYXNrID0gbG93ZXJfdGllcjsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IFRpZXJpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBwbGF5aW5nIHdpdGggYG1tL21lbW9yeS10aWVycy5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgbmV3IGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHN0cmVhbWxpbmluZyB0aGUgYG5vZGVfaXNfdG9wdGllcmAgY2hlY2sg4oCTIGp1c3QgYSBzaW1wbGUgYG5vZGVfaXNzZXRgIGFnYWluc3QgdGhhdCBtYXNrIG5vdywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCByZWFkYWJpbGl0eS4gVGhlIHBhdGNoIGlzIGFsc28gdXBkYXRpbmcgYHRvcHRpZXJfbm9kZXNgIHdpdGhpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAsIGluZGljYXRpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1vcnkgdGllcmluZyBsb2dpYyB3aXRoaW4gdGhlIGtlcm5lbC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB1bmRlciBgI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTmAuIFNvLCBgTlVNQV9NSUdSQVRJT05gIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSXMgYE5VTUFfTUlHUkFUSU9OYCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGhlcmUsIG9yIGFyZSB0aGVyZSBvdGhlcnMgbHVya2luZz8gSSBzdXNwZWN0IGBtbS9tZW1vcnktdGllcnMuY2AgaXMgbGlrZWx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTlVNQWAgdG9vOyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdCBpbiBgbW0vTWFrZWZpbGVgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5LXRpZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTg9b2JqLSQoQ09ORklHX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGUub1xubW0vTWFrZWZpbGU6OTk6b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGUtMTAwLW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKk5VTUEgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gdGhlIHByb2plY3QgZGVtYW5kcyBgQ09ORklHX05VTUFgLCBvYnZpb3VzbHkuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gQW5kLCBvZiBjb3Vyc2UsIHdpdGggTlVNQSBpbiBwbGF5LCBgQ09ORklHX05VTUFfTUlHUkFUSU9OYCBpcyBnb2luZyB0byBiZSBuZWNlc3NhcnkuIEkmIzM5O2QgZXhwZWN0IGl0LCBidXQgYmV0dGVyIHRvIGNvbmZpcm0uIE5vdywgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBob3cgdGhlIGBub2RlX2lzX3RvcHRpZXJgIGZ1bmN0aW9uIGlzIGJlaW5nIHV0aWxpemVkLiBVbmRlcnN0YW5kaW5nIGl0cyBjb250ZXh0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB3aGF0IHdlJiMzOTtyZSByZWFsbHkgdHJ5aW5nIHRvIGFjaGlldmUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB0aGF0IEkgbWlnaHQgYmUgYWJsZSB0byBpZGVudGlmeS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdXNhZ2Ugb2YgYG5vZGVfaXNfdG9wdGllcmAgd2lsbCByZXZlYWwgdGhlIGJyb2FkZXIgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9pc190b3B0aWVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg9NTc9dm9pZCBub2RlX2dldF9hbGxvd2VkX3RhcmdldHMocGdfZGF0YV90ICpwZ2RhdCwgbm9kZW1hc2tfdCAqdGFyZ2V0cyk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjU4OmJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtNTktI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTY1PXN0YXRpYyBpbmxpbmUgdm9pZCBub2RlX2dldF9hbGxvd2VkX3RhcmdldHMocGdfZGF0YV90ICpwZ2RhdCwgbm9kZW1hc2tfdCAqdGFyZ2V0cylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTY5LVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaDo3MDpzdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC03MS17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaD0xMDk9c3RhdGljIGlubGluZSB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtMTEzLVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaDoxMTQ6c3RhdGljIGlubGluZSBib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSlcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtMTE1LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTI2NzY9Ym9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0yNzIyLVx0aWYgKCEoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjcyMzpcdCAgICAhbm9kZV9pc190b3B0aWVyKHNyY19uaWQpIFx1MDAyNlx1MDAyNiAhY3B1cGlkX3ZhbGlkKGxhc3RfY3B1cGlkKSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjcyNC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzkzOD12b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9jcHVwaWQsIGludCBtZW1fbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0zOTU3LVx0ICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjM5NTg6XHRpZiAoIW5vZGVfaXNfdG9wdGllcihtZW1fbm9kZSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvc2NoZWQvZmFpci5jLTM5NTktXHQgICAgKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORyB8fFxuLS1cbm1tL21lbW9yeS10aWVycy5jPTY1PWJvb2wgZm9saW9fdXNlX2FjY2Vzc190aW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNjctXHRyZXR1cm4gKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORykgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnktdGllcnMuYzo2ODpcdCAgICAgICAhbm9kZV9pc190b3B0aWVyKGZvbGlvX25pZChmb2xpbykpO1xubW0vbWVtb3J5LXRpZXJzLmMtNjktfVxuLS1cbm1tL21lbW9yeS10aWVycy5jPTI2MT1zdGF0aWMgc3RydWN0IG1lbW9yeV90aWVyICpfX25vZGVfZ2V0X21lbW9yeV90aWVyKGludCBub2RlKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTI3Ny0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXG5tbS9tZW1vcnktdGllcnMuYzoyNzg6Ym9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpXG5tbS9tZW1vcnktdGllcnMuYy0yNzkte1xuLS1cbm1tL21lbXBvbGljeS5jPTgzNj1ib29sIGZvbGlvX2Nhbl9tYXBfcHJvdF9udW1hKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTg3Mi1cdGlmICghKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19OT1JNQUwpIFx1MDAyNlx1MDAyNlxubW0vbWVtcG9saWN5LmM6ODczOlx0ICAgIG5vZGVfaXNfdG9wdGllcihuaWQpKVxubW0vbWVtcG9saWN5LmMtODc0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWlncmF0ZS5jPTc2OT12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9taWdyYXRlLmMtODE1LVx0aWYgKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORykge1xubW0vbWlncmF0ZS5jOjgxNjpcdFx0Ym9vbCBmX3RvcHRpZXIgPSBub2RlX2lzX3RvcHRpZXIoZm9saW9fbmlkKGZvbGlvKSk7XG5tbS9taWdyYXRlLmM6ODE3Olx0XHRib29sIHRfdG9wdGllciA9IG5vZGVfaXNfdG9wdGllcihmb2xpb19uaWQobmV3Zm9saW8pKTtcbm1tL21pZ3JhdGUuYy04MTgtXG4tLVxubW0vbWlncmF0ZS5jPTI3NDk9aW50IG1pZ3JhdGVfbWlzcGxhY2VkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBub2RlKVxuLS1cbm1tL21pZ3JhdGUuYy0yNzY3LVx0XHRpZiAoKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORylcbm1tL21pZ3JhdGUuYzoyNzY4Olx0XHQgICAgXHUwMDI2XHUwMDI2ICFub2RlX2lzX3RvcHRpZXIoZm9saW9fbmlkKGZvbGlvKSlcbm1tL21pZ3JhdGUuYzoyNzY5Olx0XHQgICAgXHUwMDI2XHUwMDI2IG5vZGVfaXNfdG9wdGllcihub2RlKSlcbm1tL21pZ3JhdGUuYy0yNzcwLVx0XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1BST01PVEVfU1VDQ0VTUywgbnJfc3VjY2VlZGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDkyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOb2RlIFRpZXIgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGZyb20gYSBkeW5hbWljIGNoZWNrIHRvIGEgc3RhdGljYWxseSBkZWZpbmVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSBvcHRpbWl6aW5nIGBub2RlX2lzX3RvcHRpZXIoKWAgYnkgcHJlLWNhbGN1bGF0aW5nIGFuZCBzdG9yaW5nIHRoZSB0b3AtdGllciBub2RlIHNldCwgd2hpY2ggaXMgdGhlbiB1cGRhdGVkIGJ5IGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4KCkZ1bmN0aW9uYWxseSwgSSBjYW4gc2VlIGhvdyB0aGlzIGlzIGFuIGltcHJvdmVtZW50LiBUaGUgbG9naWMgYmVoaW5kIGBub2RlX2lzX3RvcHRpZXIoKWAgaXMgbm93IGJhc2VkIG9uIHRoaXMgcHJlLWNhbGN1bGF0ZWQgdmFsdWUsIGFuZCB3ZSBrbm93IHRoYXQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgIGhhbmRsZXMgdGhlIHVwZGF0ZXMuCgpNeSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHVzYWdlIG9mIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGZyZXF1ZW50bHkgaXQmIzM5O3MgY2FsbGVkIGFuZCBpbiB3aGF0IGNvbnRleHRzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJoZWFkIGludm9sdmVkIGluIHVwZGF0aW5nIHRoZSBub2RlbWFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktdGllcnMuYz0zODE9c3RhdGljIHZvaWQgZHVtcF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNDA1LSAqL1xubW0vbWVtb3J5LXRpZXJzLmM6NDA2OnN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG5tbS9tZW1vcnktdGllcnMuYy00MDcte1xuLS1cbm1tL21lbW9yeS10aWVycy5jLTUwNC0jZWxzZVxubW0vbWVtb3J5LXRpZXJzLmM6NTA1OnN0YXRpYyBpbmxpbmUgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKSB7fVxubW0vbWVtb3J5LXRpZXJzLmMtNTA2LSNlbmRpZiAvKiBDT05GSUdfTlVNQV9NSUdSQVRJT04gKi9cbi0tXG5tbS9tZW1vcnktdGllcnMuYz02OTE9c3RhdGljIGludCBfX2luaXQgbWVtb3J5X3RpZXJfbGF0ZV9pbml0KHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNzE0LVxubW0vbWVtb3J5LXRpZXJzLmM6NzE1Olx0ZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKTtcbm1tL21lbW9yeS10aWVycy5jLTcxNi1cdHB1dF9vbmxpbmVfbWVtcygpO1xuLS1cbm1tL21lbW9yeS10aWVycy5jPTg2NT1zdGF0aWMgaW50IF9fbWVtaW5pdCBtZW10aWVyX2hvdHBsdWdfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLFxuLS1cbm1tL21lbW9yeS10aWVycy5jLTg3NC1cdFx0aWYgKGNsZWFyX25vZGVfbWVtb3J5X3RpZXIobm4tXHUwMDNlbmlkKSlcbm1tL21lbW9yeS10aWVycy5jOjg3NTpcdFx0XHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xubW0vbWVtb3J5LXRpZXJzLmMtODc2LVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWVtb3J5X3RpZXJfbG9jayk7XG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtODgxLVx0XHRpZiAoIUlTX0VSUihtZW10aWVyKSlcbm1tL21lbW9yeS10aWVycy5jOjg4MjpcdFx0XHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xubW0vbWVtb3J5LXRpZXJzLmMtODgzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWVtb3J5X3RpZXJfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBNZW1vcnkgVGllcmluZyBhbmQgTlVNQSBCYWxhbmNpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGxhdGUgaW5pdCBhbmQgbWVtb3J5IGhvdHBsdWcsIGFuZCBgbm9kZV9pc190b3B0aWVyYCwgd2hpY2ggc2hvd3MgdXAgaW4gTlVNQSBiYWxhbmNpbmcgcGF0aHMuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgZnV6ei13b3J0aHk/IEdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZywgeWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgd2l0aCBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBib3RoIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgYW5kIGBub2RlX2lzX3RvcHRpZXJgLiBCdXQsIHdhaXQsIGBub2RlX2lzX3RvcHRpZXJgIGlzIGEgaG90IHBhdGggZnVuY3Rpb247IGl0JiMzOTtzIGNhbGxlZCBmcm9tIHBsYWNlcyBsaWtlIGB0YXNrX251bWFfZmF1bHRgIGFuZCBgZm9saW9fY2FuX21hcF9wcm90X251bWFgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHRlc3QgZGlzdHJpYnV0aW9uIHNrZXcuIFNob3VsZCBJIGRyb3AgYG5vZGVfaXNfdG9wdGllcmAgZnJvbSB0aGUgbGlzdD8gTWF5YmUuIEhvd2V2ZXIsIHRoaXMgaXNuJiMzOTt0ICpqdXN0KiBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIHNwZWNpZmljIHRvIG1lbW9yeSB0aWVyaW5nLiBBbHRob3VnaCwgaXQgKmlzKiBjYWxsZWQgaW4gcGFnZSBmYXVsdCBwYXRocy4uLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIGBub2RlX2lzX3RvcHRpZXJgIGhhcyBiZWVuIGlubGluZWQsIGJ1dCBubywgaXQmIzM5O3Mgc3RpbGwgYSByZWd1bGFyIGZ1bmN0aW9uIGluIGBtbS9tZW1vcnktdGllcnMuY2AuIExldCYjMzk7cyBhbHNvIGxvb2sgYXQgd2hhdCB0aGUgYWN0dWFsIHBhdGNoIGNoYW5nZXMuIEhtbSwgdGhlIGNvZGUgaXMgc2ltcGxpZmllZCB0bzoKCmBgYGMKYm9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpCnsKCXJldHVybiBub2RlX2lzc2V0KG5vZGUsIHRvcHRpZXJfbm9kZXMpOwp9CmBgYAoKSXQmIzM5O3MgYWN0dWFsbHkgdmVyeSBzaW1wbGUgbm93LiBUaGUgbWFpbiBsb2dpYyBpcyBkZWZpbml0ZWx5IGluIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4gU28sIEkmIzM5O2xsIG1ha2UgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCB0aGUgcHJpbWFyeSBmb2N1cy4KCk9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBubyBvdGhlciBmdW5jdGlvbnMgd2VyZSBtb2RpZmllZC4gTm9wZSwganVzdCBgbm9kZV9pc190b3B0aWVyYCBhbmQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYC4KCkZpbmFsbHksIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgQ09ORklHX05VTUFgIGFuZCBgQ09ORklHX05VTUFfTUlHUkFUSU9OYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19OVU1BX01JR1JBVElPTmAgaXMgYSByZWFsIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlVNQV9NSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02Nzc9Y29uZmlnIFBBR0VfUkVQT1JUSU5HXG4tLVxubW0vS2NvbmZpZy02ODQtXG5tbS9LY29uZmlnOjY4NTpjb25maWcgTlVNQV9NSUdSQVRJT05cbm1tL0tjb25maWctNjg2LVx0Ym9vbCBcJiMzNDtOVU1BIHBhZ2UgbWlncmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqTlVNQSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIGBOVU1BX01JR1JBVElPTmAgaXMgZGVmaW5pdGVseSBhIHJlYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IG5vdyBJJiMzOTttIHdvbmRlcmluZyBpZiBqdXN0IHRoYXQgaXMgZW5vdWdoLCBvciBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSBpbnRlcmFjdGluZyB3aXRoIGFub3RoZXIgY29uZmlnLiBIbW1tLCBjb3VsZCBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCBhY3R1YWxseSBiZSBhICpwcmVyZXF1aXNpdGUqIGZvciBzb21ldGhpbmcgbGlrZSBgbm9kZV9pc190b3B0aWVyYCB0byBldmVuIGJlIHRyaWdnZXJlZCBvciBmdW5jdGlvbiBwcm9wZXJseT8gSXQgZmVlbHMgbGlrZSB0aGVyZSBtaWdodCBiZSBhIGRlcGVuZGVuY3kgdGhlcmUuCgpUbyBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwIGFuZCBzZWUgaG93IHRoZXkgaW50ZXJwbGF5LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgdGhlIGBOVU1BX0JBTEFOQ0lOR2AgS2NvbmZpZyBvcHRpb24gaXRzZWxmLiBMZXQgbWUgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRleHQuIFRoYXQgc2hvdWxkIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgbG9naWNhbCBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIE5VTUEgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVU1BX0JBTEFOQ0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTAwNz1jb25maWcgQVJDSF9XQU5UX05VTUFfVkFSSUFCTEVfTE9DQUxJVFlcbi0tXG5pbml0L0tjb25maWctMTAwOS1cbmluaXQvS2NvbmZpZzoxMDEwOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR1xuaW5pdC9LY29uZmlnLTEwMTEtXHRib29sIFwmIzM0O01lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWc9MTAyMj1jb25maWcgU0NIRURfQ0FDSEVcbi0tXG5pbml0L0tjb25maWctMTAzMi1cbmluaXQvS2NvbmZpZzoxMDMzOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcbmluaXQvS2NvbmZpZy0xMDM0LVx0Ym9vbCBcJiMzNDtBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjkyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlVNQSBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgTlVNQV9CQUxBTkNJTkdgIGlzIGRlZmluZWQgaW4gYGluaXQvS2NvbmZpZ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSB0aGUgY2hhbmdlcyB0b3VjaCBgbW0vbWVtb3J5LXRpZXJzLmNgLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIEJ1dCBkaWdnaW5nIGRlZXBlciwgdGhpcyBzcGVjaWZpYyBjb2RlIG1vZGlmaWNhdGlvbiBpcyBuZXN0bGVkIHVuZGVyIGFuIGAjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OYC4gUmlnaHQsIHNvIGBOVU1BX01JR1JBVElPTmAgaXMgdGhlIGtleSBjb25maWcgaGVyZS4gVGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgb3IgaWYgdGhpcyBpcyB0aGUgb25seSBvbmUuIEdpdmVuIHRoYXQgYE1JR1JBVElPTmAgaXMgc2VsZWN0ZWQgYnkgYE5VTUFfTUlHUkFUSU9OYCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5VTUFfTUlHUkFUSU9OYCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4gaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlVNQV9NSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njc3PWNvbmZpZyBQQUdFX1JFUE9SVElOR1xuLS1cbm1tL0tjb25maWctNjg0LVxubW0vS2NvbmZpZzo2ODU6Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4Ni1cdGJvb2wgXCYjMzQ7TlVNQSBwYWdlIG1pZ3JhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYXNwZWN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyBiZXR0ZXIuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUmIzM5O3MgcHJvYmFibHkgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQsIGVzcGVjaWFsbHkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGd1dCB0ZWxscyBtZSBgbW0vS2NvbmZpZ2AgaXMgcmVsZXZhbnQgaGVyZSwgcGFydGljdWxhcmx5IGFyb3VuZCBsaW5lIDY4NS4gVGhhdCBzZWN0aW9uIHVzdWFsbHkgZGVhbHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zLCBhbmQgZ2l2ZW4gd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgYXJlYSB0byBmb2N1cyBvbiBmaXJzdC4gSXQmIzM5O3MgYSBicm9hZCBmaWxlLCBzbyBsaW5lIDY4NSBzaG91bGQgaGVscCBtZSB6ZXJvIGluIG9uIHRoZSBleGFjdCBiaXRzIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdFx0ICBGcmVlIHBhZ2UgcmVwb3J0aW5nIGFsbG93cyBmb3IgdGhlIGluY3JlbWVudGFsIGFjcXVpc2l0aW9uIG9mXG4gNjgxOlx0XHQgIGZyZWUgcGFnZXMgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yIGZvciB0aGUgcHVycG9zZSBvZiByZXBvcnRpbmdcbiA2ODI6XHRcdCAgdGhvc2UgcGFnZXMgdG8gYW5vdGhlciBlbnRpdHksIHN1Y2ggYXMgYSBoeXBlcnZpc29yLCBzbyB0aGF0IHRoZVxuIDY4MzpcdFx0ICBtZW1vcnkgY2FuIGJlIGZyZWVkIHdpdGhpbiB0aGUgaG9zdCBmb3Igb3RoZXIgdXNlcy5cbiA2ODQ6XHRcbiA2ODU6XHRjb25maWcgTlVNQV9NSUdSQVRJT05cbiA2ODY6XHRcdGJvb2wgXCYjMzQ7TlVNQSBwYWdlIG1pZ3JhdGlvblwmIzM0O1xuIDY4NzpcdFx0ZGVmYXVsdCB5XG4gNjg4Olx0XHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxuIDY4OTpcdFx0c2VsZWN0IE1JR1JBVElPTlxuIDY5MDpcdFx0aGVscFxuIDY5MTpcdFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXG4gNjkyOlx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjkzOlx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2OTQ6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY5NTpcdFxuIDY5NjpcdGNvbmZpZyBNSUdSQVRJT05cbiA2OTc6XHRcdGJvb2xcbiA2OTg6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjcKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgVGllcmluZyBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBoaW5nZXMgb24gYE5VTUFfTUlHUkFUSU9OYCwgd2hpY2gsIG9mIGNvdXJzZSwgZGVwZW5kcyBvbiBib3RoIGBOVU1BYCBhbmQgdGhlIGBNTVVgLiBMZXQgbWUgbGlzdCBgTlVNQWAgYW5kIGBOVU1BX01JR1JBVElPTmAgYXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlLgoKVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgbGllcyBpbiBvcHRpbWl6aW5nIGBub2RlX2lzX3RvcHRpZXJgLiBUaGV5JiMzOTtyZSBzd2FwcGluZyBvdXQgdGhlIGR5bmFtaWMgY2hlY2tzIGZvciBhIHByZWNvbXB1dGVkIG5vZGVtYXNrIGNhbGxlZCBgdG9wdGllcl9ub2Rlc2AuIFRoaXMgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrIGlzLCBjcml0aWNhbGx5LCB1cGRhdGVkIHdpdGhpbiB0aGUgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBmdW5jdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG1lbW9yeSB0aWVyaW5nIGxvZ2ljLCBhbmQsIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIE5VTUEgYmFsYW5jaW5nLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKTXkgaW1tZWRpYXRlIGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLiBJbml0aWFsbHkgSSB3YXMgZ29pbmcgdG8gZXhjbHVkZSBgbm9kZV9pc190b3B0aWVyYCBhcyBhIGZvY3VzLiBIb3dldmVyLCBJIG5lZWQgdG8gcmV0aGluayB0aGF0LiBgbm9kZV9pc190b3B0aWVyYCBpcyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBjYWxsZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIGFuZCBtaWdyYXRpb25zLCBzcGVjaWZpY2FsbHksIEkgcmVjYWxsIHRoYXQgYG5vZGVfaXNfdG9wdGllcmAgaXMgY2FsbGVkIGluIGB0YXNrX251bWFfZmF1bHRgLCB3aGljaCBpcyBhIHBhZ2UgZmF1bHQgaGFuZGxlciEgVGhlcmVmb3JlLCBpdCBpcyBpbXBvcnRhbnQgdG8gaW5jbHVkZSBpdC4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBpcyByZWFjaGFibGUsIHRob3VnaC4gTGV0IG1lIHNlZS4uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgbWVtb3J5X3RpZXJfbGF0ZV9pbml0YCwgd2hpY2ggaXMgYW4gaW5pdGNhbGwsIGFuZCBhbHNvIGZyb20gYG1lbXRpZXJfaG90cGx1Z19jYWxsYmFja2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBtZW1vcnkgaG90cGx1ZyBldmVudHMuIE1lbW9yeSBob3RwbHVnIGlzIHNvbWV0aGluZyBJIGNhbiB0cmlnZ2VyIHdpdGggc3l6a2FsbGVyLCBzbyB5ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggb3B0aW1pemVzIGBub2RlX2lzX3RvcHRpZXIoKWAgYnkgcmVwbGFjaW5nIHRob3NlIGR5bmFtaWMgY2hlY2tzIHdpdGggYSBwcmVjb21wdXRlZCBgdG9wdGllcl9ub2Rlc2Agbm9kZW1hc2ssIHdoaWNoIGlzIHVwZGF0ZWQgdmlhIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4gVGhlIGNoYW5nZSBhZmZlY3RzIHRoZSBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBiYWxhbmNpbmcgbG9naWMuCkJhc2VkIG9uIGFsbCBvZiB0aGlzOgoKRW5hYmxlQ29uZmlnczogYE5VTUFgLCBgTlVNQV9NSUdSQVRJT05gCkZvY3VzU3ltYm9sczogYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYApXb3J0aEZ1enppbmc6IFRydWUKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgYG5vZGVfaXNfdG9wdGllcigpYCBieSByZXBsYWNpbmcgZHluYW1pYyBtZW1vcnkgdGllciBjaGVja3Mgd2l0aCBhIHByZWNvbXB1dGVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gVGhlIG5vZGVtYXNrIGlzIHVwZGF0ZWQgaW4gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5IGhvdHBsdWcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBiYWxhbmNpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBtZW1vcnkgaG90cGx1ZyBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgYG5vZGVfaXNfdG9wdGllcigpYCBieSByZXBsYWNpbmcgZHluYW1pYyBtZW1vcnkgdGllciBjaGVja3Mgd2l0aCBhIHByZWNvbXB1dGVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gVGhlIG5vZGVtYXNrIGlzIHVwZGF0ZWQgaW4gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5IGhvdHBsdWcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBiYWxhbmNpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBtZW1vcnkgaG90cGx1ZyBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozMzowNy41MDEyOTc2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEwMDcwMjEwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBgbm9kZV9pc190b3B0aWVyKClgIGJ5IHJlcGxhY2luZyBkeW5hbWljIG1lbW9yeSB0aWVyIGNoZWNrcyB3aXRoIGEgcHJlY29tcHV0ZWQgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrLiBUaGUgbm9kZW1hc2sgaXMgdXBkYXRlZCBpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnkgaG90cGx1Zy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQsIHBhcnRpY3VsYXJseSB0aHJvdWdoIG1lbW9yeSBob3RwbHVnIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzM6MDcuNTAxMzAyMTA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM3MzA1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNDQ3MzQxNDRlYmFmMzc4ZDAzZDI2MGRjNTgzNDU2MmEzNTdiNzZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMDY6MzM6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LXRpZXJzLmMgYi9tbS9tZW1vcnktdGllcnMuY1xcbmluZGV4IDU0ODUxZDhhMTk1YjAzLi4yZTZlMDJlYzFmY2U0YiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktdGllcnMuY1xcbisrKyBiL21tL21lbW9yeS10aWVycy5jXFxuQEAgLTcxLDYgKzcxLDcgQEAgYm9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuICNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cXG4gc3RhdGljIGludCB0b3BfdGllcl9hZGlzdGFuY2U7XFxuK3N0YXRpYyBub2RlbWFza190IHRvcHRpZXJfbm9kZXMgX19yZWFkX21vc3RseSA9IE5PREVfTUFTS19BTEw7XFxuIC8qXFxuICAqIG5vZGVfZGVtb3Rpb25bXSBleGFtcGxlczpcXG4gICpcXG5AQCAtMjc2LDI3ICsyNzcsNyBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV90aWVyICpfX25vZGVfZ2V0X21lbW9yeV90aWVyKGludCBub2RlKVxcbiAjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXFxuIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxcbiB7XFxuLVxcdGJvb2wgdG9wdGllcjtcXG4tXFx0cGdfZGF0YV90ICpwZ2RhdDtcXG4tXFx0c3RydWN0IG1lbW9yeV90aWVyICptZW10aWVyO1xcbi1cXG4tXFx0cGdkYXQgPSBOT0RFX0RBVEEobm9kZSk7XFxuLVxcdGlmICghcGdkYXQpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0bWVtdGllciA9IHJjdV9kZXJlZmVyZW5jZShwZ2RhdC1cXHUwMDNlbWVtdGllcik7XFxuLVxcdGlmICghbWVtdGllcikge1xcbi1cXHRcXHR0b3B0aWVyID0gdHJ1ZTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFx0aWYgKG1lbXRpZXItXFx1MDAzZWFkaXN0YW5jZV9zdGFydCBcXHUwMDNjPSB0b3BfdGllcl9hZGlzdGFuY2UpXFxuLVxcdFxcdHRvcHRpZXIgPSB0cnVlO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHRvcHRpZXIgPSBmYWxzZTtcXG4tb3V0Olxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0cmV0dXJuIHRvcHRpZXI7XFxuK1xcdHJldHVybiBub2RlX2lzc2V0KG5vZGUsIHRvcHRpZXJfbm9kZXMpO1xcbiB9XFxuIFxcbiB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxcbkBAIC00OTcsMTkgKzQ3OCwyMiBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0LypcXG4tXFx0ICogTm93IGJ1aWxkIHRoZSBsb3dlcl90aWVyIG1hc2sgZm9yIGVhY2ggbm9kZSBjb2xsZWN0aW5nIG5vZGUgbWFzayBmcm9tXFxuLVxcdCAqIGFsbCBtZW1vcnkgdGllciBiZWxvdyBpdC4gVGhpcyBhbGxvd3MgdXMgdG8gZmFsbGJhY2sgZGVtb3Rpb24gcGFnZVxcbi1cXHQgKiBhbGxvY2F0aW9uIHRvIGEgc2V0IG9mIG5vZGVzIHRoYXQgaXMgY2xvc2VyIHRoZSBhYm92ZSBzZWxlY3RlZFxcbi1cXHQgKiBwcmVmZXJyZWQgbm9kZS5cXG4rXFx0ICogQSBub2RlIHN0YXlzIHRvcHRpZXIgdW5sZXNzIGl0IGJlbG9uZ3MgdG8gYSB0aWVyIGJlbG93XFxuK1xcdCAqIHRvcF90aWVyX2FkaXN0YW5jZSwgd2hpbGUgZWFjaCB0aWVyJ3MgbG93ZXJfdGllcl9tYXNrIGNvbGxlY3RzIHRoZVxcbitcXHQgKiBub2RlcyBvZiBldmVyeSB0aWVyIGJlbG93IGl0IHNvIGRlbW90aW9uIHBhZ2UgYWxsb2NhdGlvbiBjYW4gZmFsbFxcbitcXHQgKiBiYWNrIHRvIG5vZGVzIGNsb3NlciB0byB0aGUgc2VsZWN0ZWQgcHJlZmVycmVkIG5vZGUuXFxuIFxcdCAqL1xcbitcXHR0b3B0aWVyX25vZGVzID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xcbiBcXHRsb3dlcl90aWVyID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1lbXRpZXIsIFxcdTAwMjZtZW1vcnlfdGllcnMsIGxpc3QpIHtcXG4rXFx0XFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xcbitcXHRcXHRpZiAobWVtdGllci1cXHUwMDNlYWRpc3RhbmNlX3N0YXJ0IFxcdTAwM2UgdG9wX3RpZXJfYWRpc3RhbmNlKVxcbitcXHRcXHRcXHRub2Rlc19hbmRub3QodG9wdGllcl9ub2RlcywgdG9wdGllcl9ub2RlcywgdGllcl9ub2Rlcyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEtlZXAgcmVtb3ZpbmcgY3VycmVudCB0aWVyIGZyb20gbG93ZXJfdGllciBub2RlcyxcXG4gXFx0XFx0ICogVGhpcyB3aWxsIHJlbW92ZSBhbGwgbm9kZXMgaW4gY3VycmVudCBhbmQgYWJvdmVcXG4gXFx0XFx0ICogbWVtb3J5IHRpZXIgZnJvbSB0aGUgbG93ZXJfdGllciBtYXNrLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xcbiBcXHRcXHRub2Rlc19hbmRub3QobG93ZXJfdGllciwgbG93ZXJfdGllciwgdGllcl9ub2Rlcyk7XFxuIFxcdFxcdG1lbXRpZXItXFx1MDAzZWxvd2VyX3RpZXJfbWFzayA9IGxvd2VyX3RpZXI7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzM6MDcuOTk1NzE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjA1MTI1OTIxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBgbm9kZV9pc190b3B0aWVyKClgIGJ5IHJlcGxhY2luZyBkeW5hbWljIG1lbW9yeSB0aWVyIGNoZWNrcyB3aXRoIGEgcHJlY29tcHV0ZWQgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrLiBUaGUgbm9kZW1hc2sgaXMgdXBkYXRlZCBpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnkgaG90cGx1Zy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQsIHBhcnRpY3VsYXJseSB0aHJvdWdoIG1lbW9yeSBob3RwbHVnIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDQ3MzQxNDRlYmFmMzc4ZDAzZDI2MGRjNTgzNDU2MmEzNTdiNzZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAwNjozMzowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS10aWVycy5jIGIvbW0vbWVtb3J5LXRpZXJzLmNcbmluZGV4IDU0ODUxZDhhMTk1YjAzLi4yZTZlMDJlYzFmY2U0YiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS10aWVycy5jXG4rKysgYi9tbS9tZW1vcnktdGllcnMuY1xuQEAgLTcxLDYgKzcxLDcgQEAgYm9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXG4gc3RhdGljIGludCB0b3BfdGllcl9hZGlzdGFuY2U7XG4rc3RhdGljIG5vZGVtYXNrX3QgdG9wdGllcl9ub2RlcyBfX3JlYWRfbW9zdGx5ID0gTk9ERV9NQVNLX0FMTDtcbiAvKlxuICAqIG5vZGVfZGVtb3Rpb25bXSBleGFtcGxlczpcbiAgKlxuQEAgLTI3NiwyNyArMjc3LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfdGllciAqX19ub2RlX2dldF9tZW1vcnlfdGllcihpbnQgbm9kZSlcbiAjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXG4gYm9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpXG4ge1xuLVx0Ym9vbCB0b3B0aWVyO1xuLVx0cGdfZGF0YV90ICpwZ2RhdDtcbi1cdHN0cnVjdCBtZW1vcnlfdGllciAqbWVtdGllcjtcbi1cbi1cdHBnZGF0ID0gTk9ERV9EQVRBKG5vZGUpO1xuLVx0aWYgKCFwZ2RhdClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtdGllciA9IHJjdV9kZXJlZmVyZW5jZShwZ2RhdC1cdTAwM2VtZW10aWVyKTtcbi1cdGlmICghbWVtdGllcikge1xuLVx0XHR0b3B0aWVyID0gdHJ1ZTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXHRpZiAobWVtdGllci1cdTAwM2VhZGlzdGFuY2Vfc3RhcnQgXHUwMDNjPSB0b3BfdGllcl9hZGlzdGFuY2UpXG4tXHRcdHRvcHRpZXIgPSB0cnVlO1xuLVx0ZWxzZVxuLVx0XHR0b3B0aWVyID0gZmFsc2U7XG4tb3V0OlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRyZXR1cm4gdG9wdGllcjtcbitcdHJldHVybiBub2RlX2lzc2V0KG5vZGUsIHRvcHRpZXJfbm9kZXMpO1xuIH1cbiBcbiB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxuQEAgLTQ5NywxOSArNDc4LDIyIEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4gXHRcdH1cbiBcdH1cbiBcdC8qXG4tXHQgKiBOb3cgYnVpbGQgdGhlIGxvd2VyX3RpZXIgbWFzayBmb3IgZWFjaCBub2RlIGNvbGxlY3Rpbmcgbm9kZSBtYXNrIGZyb21cbi1cdCAqIGFsbCBtZW1vcnkgdGllciBiZWxvdyBpdC4gVGhpcyBhbGxvd3MgdXMgdG8gZmFsbGJhY2sgZGVtb3Rpb24gcGFnZVxuLVx0ICogYWxsb2NhdGlvbiB0byBhIHNldCBvZiBub2RlcyB0aGF0IGlzIGNsb3NlciB0aGUgYWJvdmUgc2VsZWN0ZWRcbi1cdCAqIHByZWZlcnJlZCBub2RlLlxuK1x0ICogQSBub2RlIHN0YXlzIHRvcHRpZXIgdW5sZXNzIGl0IGJlbG9uZ3MgdG8gYSB0aWVyIGJlbG93XG4rXHQgKiB0b3BfdGllcl9hZGlzdGFuY2UsIHdoaWxlIGVhY2ggdGllcidzIGxvd2VyX3RpZXJfbWFzayBjb2xsZWN0cyB0aGVcbitcdCAqIG5vZGVzIG9mIGV2ZXJ5IHRpZXIgYmVsb3cgaXQgc28gZGVtb3Rpb24gcGFnZSBhbGxvY2F0aW9uIGNhbiBmYWxsXG4rXHQgKiBiYWNrIHRvIG5vZGVzIGNsb3NlciB0byB0aGUgc2VsZWN0ZWQgcHJlZmVycmVkIG5vZGUuXG4gXHQgKi9cbitcdHRvcHRpZXJfbm9kZXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG4gXHRsb3dlcl90aWVyID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZW10aWVyLCBcdTAwMjZtZW1vcnlfdGllcnMsIGxpc3QpIHtcbitcdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuK1x0XHRpZiAobWVtdGllci1cdTAwM2VhZGlzdGFuY2Vfc3RhcnQgXHUwMDNlIHRvcF90aWVyX2FkaXN0YW5jZSlcbitcdFx0XHRub2Rlc19hbmRub3QodG9wdGllcl9ub2RlcywgdG9wdGllcl9ub2RlcywgdGllcl9ub2Rlcyk7XG4gXHRcdC8qXG4gXHRcdCAqIEtlZXAgcmVtb3ZpbmcgY3VycmVudCB0aWVyIGZyb20gbG93ZXJfdGllciBub2RlcyxcbiBcdFx0ICogVGhpcyB3aWxsIHJlbW92ZSBhbGwgbm9kZXMgaW4gY3VycmVudCBhbmQgYWJvdmVcbiBcdFx0ICogbWVtb3J5IHRpZXIgZnJvbSB0aGUgbG93ZXJfdGllciBtYXNrLlxuIFx0XHQgKi9cbi1cdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuIFx0XHRub2Rlc19hbmRub3QobG93ZXJfdGllciwgbG93ZXJfdGllciwgdGllcl9ub2Rlcyk7XG4gXHRcdG1lbXRpZXItXHUwMDNlbG93ZXJfdGllcl9tYXNrID0gbG93ZXJfdGllcjtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjMzOjA3Ljk5NTcxNzU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxNjAzOTA1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IFRpZXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBwbGF5aW5nIHdpdGggYG1tL21lbW9yeS10aWVycy5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgbmV3IGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gRXNzZW50aWFsbHksIGl0J3Mgc3RyZWFtbGluaW5nIHRoZSBgbm9kZV9pc190b3B0aWVyYCBjaGVjayDigJMganVzdCBhIHNpbXBsZSBgbm9kZV9pc3NldGAgYWdhaW5zdCB0aGF0IG1hc2sgbm93LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlYWRhYmlsaXR5LiBUaGUgcGF0Y2ggaXMgYWxzbyB1cGRhdGluZyBgdG9wdGllcl9ub2Rlc2Agd2l0aGluIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYCwgaW5kaWNhdGluZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSB0aWVyaW5nIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQncyBkcml2aW5nIHRoaXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB1bmRlciBgI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTmAuIFNvLCBgTlVNQV9NSUdSQVRJT05gIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSXMgYE5VTUFfTUlHUkFUSU9OYCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGhlcmUsIG9yIGFyZSB0aGVyZSBvdGhlcnMgbHVya2luZz8gSSBzdXNwZWN0IGBtbS9tZW1vcnktdGllcnMuY2AgaXMgbGlrZWx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTlVNQWAgdG9vOyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdCBpbiBgbW0vTWFrZWZpbGVgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozMzozNy4xNTYxMDk4OThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NzMzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5LXRpZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlOjk5Om9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcbm1tL01ha2VmaWxlLTEwMC1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozMzozNy4yMTQ5OTE3ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM3NjA2MjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipOVU1BIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gdGhlIHByb2plY3QgZGVtYW5kcyBgQ09ORklHX05VTUFgLCBvYnZpb3VzbHkuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uLiBBbmQsIG9mIGNvdXJzZSwgd2l0aCBOVU1BIGluIHBsYXksIGBDT05GSUdfTlVNQV9NSUdSQVRJT05gIGlzIGdvaW5nIHRvIGJlIG5lY2Vzc2FyeS4gSSdkIGV4cGVjdCBpdCwgYnV0IGJldHRlciB0byBjb25maXJtLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBob3cgdGhlIGBub2RlX2lzX3RvcHRpZXJgIGZ1bmN0aW9uIGlzIGJlaW5nIHV0aWxpemVkLiBVbmRlcnN0YW5kaW5nIGl0cyBjb250ZXh0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB3aGF0IHdlJ3JlIHJlYWxseSB0cnlpbmcgdG8gYWNoaWV2ZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIHRoYXQgSSBtaWdodCBiZSBhYmxlIHRvIGlkZW50aWZ5LiBMZXQncyBzZWUuLi4gdGhlIHVzYWdlIG9mIGBub2RlX2lzX3RvcHRpZXJgIHdpbGwgcmV2ZWFsIHRoZSBicm9hZGVyIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzQ6MzMuNTkxMDU1ODI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDY1MzU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9pc190b3B0aWVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTU3PXZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg6NTg6Ym9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtNTktI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg9NjU9c3RhdGljIGlubGluZSB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC02OS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjcwOnN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC03MS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTEwOT1zdGF0aWMgaW5saW5lIHZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTExMy1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjExNDpzdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtMTE1LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MjY3Nj1ib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjcyMi1cXHRpZiAoIShzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjcyMzpcXHQgICAgIW5vZGVfaXNfdG9wdGllcihzcmNfbmlkKSBcXHUwMDI2XFx1MDAyNiAhY3B1cGlkX3ZhbGlkKGxhc3RfY3B1cGlkKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI3MjQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0zOTM4PXZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X2NwdXBpZCwgaW50IG1lbV9ub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzk1Ny1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjM5NTg6XFx0aWYgKCFub2RlX2lzX3RvcHRpZXIobWVtX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zOTU5LVxcdCAgICAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORyB8fFxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9NjU9Ym9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTY3LVxcdHJldHVybiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORykgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1vcnktdGllcnMuYzo2ODpcXHQgICAgICAgIW5vZGVfaXNfdG9wdGllcihmb2xpb19uaWQoZm9saW8pKTtcXG5tbS9tZW1vcnktdGllcnMuYy02OS19XFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz0yNjE9c3RhdGljIHN0cnVjdCBtZW1vcnlfdGllciAqX19ub2RlX2dldF9tZW1vcnlfdGllcihpbnQgbm9kZSlcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTI3Ny0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXFxubW0vbWVtb3J5LXRpZXJzLmM6Mjc4OmJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxcbm1tL21lbW9yeS10aWVycy5jLTI3OS17XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz04MzY9Ym9vbCBmb2xpb19jYW5fbWFwX3Byb3RfbnVtYShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTg3Mi1cXHRpZiAoIShzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX05PUk1BTCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYzo4NzM6XFx0ICAgIG5vZGVfaXNfdG9wdGllcihuaWQpKVxcbm1tL21lbXBvbGljeS5jLTg3NC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9taWdyYXRlLmM9NzY5PXZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWlncmF0ZS5jLTgxNS1cXHRpZiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORykge1xcbm1tL21pZ3JhdGUuYzo4MTY6XFx0XFx0Ym9vbCBmX3RvcHRpZXIgPSBub2RlX2lzX3RvcHRpZXIoZm9saW9fbmlkKGZvbGlvKSk7XFxubW0vbWlncmF0ZS5jOjgxNzpcXHRcXHRib29sIHRfdG9wdGllciA9IG5vZGVfaXNfdG9wdGllcihmb2xpb19uaWQobmV3Zm9saW8pKTtcXG5tbS9taWdyYXRlLmMtODE4LVxcbi0tXFxubW0vbWlncmF0ZS5jPTI3NDk9aW50IG1pZ3JhdGVfbWlzcGxhY2VkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBub2RlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTI3NjctXFx0XFx0aWYgKChzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKVxcbm1tL21pZ3JhdGUuYzoyNzY4OlxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiAhbm9kZV9pc190b3B0aWVyKGZvbGlvX25pZChmb2xpbykpXFxubW0vbWlncmF0ZS5jOjI3Njk6XFx0XFx0ICAgIFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNfdG9wdGllcihub2RlKSlcXG5tbS9taWdyYXRlLmMtMjc3MC1cXHRcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdQUk9NT1RFX1NVQ0NFU1MsIG5yX3N1Y2NlZWRlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjM0OjM1LjgzNzYwMTExN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYwNTcxNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTm9kZSBUaWVyIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGZyb20gYSBkeW5hbWljIGNoZWNrIHRvIGEgc3RhdGljYWxseSBkZWZpbmVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gRXNzZW50aWFsbHksIHdlJ3JlIG9wdGltaXppbmcgYG5vZGVfaXNfdG9wdGllcigpYCBieSBwcmUtY2FsY3VsYXRpbmcgYW5kIHN0b3JpbmcgdGhlIHRvcC10aWVyIG5vZGUgc2V0LCB3aGljaCBpcyB0aGVuIHVwZGF0ZWQgYnkgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgLlxuXG5GdW5jdGlvbmFsbHksIEkgY2FuIHNlZSBob3cgdGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gVGhlIGxvZ2ljIGJlaGluZCBgbm9kZV9pc190b3B0aWVyKClgIGlzIG5vdyBiYXNlZCBvbiB0aGlzIHByZS1jYWxjdWxhdGVkIHZhbHVlLCBhbmQgd2Uga25vdyB0aGF0IGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYCBoYW5kbGVzIHRoZSB1cGRhdGVzLlxuXG5NeSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHVzYWdlIG9mIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGZyZXF1ZW50bHkgaXQncyBjYWxsZWQgYW5kIGluIHdoYXQgY29udGV4dHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQgaW4gdXBkYXRpbmcgdGhlIG5vZGVtYXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDkyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzU6MTAuNzk4MTc0ODAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTI5NDI3NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS10aWVycy5jPTM4MT1zdGF0aWMgdm9pZCBkdW1wX2RlbW90aW9uX3RhcmdldHModm9pZClcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTQwNS0gKi9cXG5tbS9tZW1vcnktdGllcnMuYzo0MDY6c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcXG5tbS9tZW1vcnktdGllcnMuYy00MDcte1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNTA0LSNlbHNlXFxubW0vbWVtb3J5LXRpZXJzLmM6NTA1OnN0YXRpYyBpbmxpbmUgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKSB7fVxcbm1tL21lbW9yeS10aWVycy5jLTUwNi0jZW5kaWYgLyogQ09ORklHX05VTUFfTUlHUkFUSU9OICovXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz02OTE9c3RhdGljIGludCBfX2luaXQgbWVtb3J5X3RpZXJfbGF0ZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy03MTQtXFxubW0vbWVtb3J5LXRpZXJzLmM6NzE1OlxcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XFxubW0vbWVtb3J5LXRpZXJzLmMtNzE2LVxcdHB1dF9vbmxpbmVfbWVtcygpO1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9ODY1PXN0YXRpYyBpbnQgX19tZW1pbml0IG1lbXRpZXJfaG90cGx1Z19jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy04NzQtXFx0XFx0aWYgKGNsZWFyX25vZGVfbWVtb3J5X3RpZXIobm4tXFx1MDAzZW5pZCkpXFxubW0vbWVtb3J5LXRpZXJzLmM6ODc1OlxcdFxcdFxcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XFxubW0vbWVtb3J5LXRpZXJzLmMtODc2LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWVtb3J5X3RpZXJfbG9jayk7XFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy04ODEtXFx0XFx0aWYgKCFJU19FUlIobWVtdGllcikpXFxubW0vbWVtb3J5LXRpZXJzLmM6ODgyOlxcdFxcdFxcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XFxubW0vbWVtb3J5LXRpZXJzLmMtODgzLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWVtb3J5X3RpZXJfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjM1OjEyLjc5MTEyMjMxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNDY3NTgyNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIE1lbW9yeSBUaWVyaW5nIGFuZCBOVU1BIEJhbGFuY2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGxhdGUgaW5pdCBhbmQgbWVtb3J5IGhvdHBsdWcsIGFuZCBgbm9kZV9pc190b3B0aWVyYCwgd2hpY2ggc2hvd3MgdXAgaW4gTlVNQSBiYWxhbmNpbmcgcGF0aHMuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgZnV6ei13b3J0aHk/IEdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZywgeWVzLCBpdCdzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyB3aXRoIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYm90aCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgIGFuZCBgbm9kZV9pc190b3B0aWVyYC4gQnV0LCB3YWl0LCBgbm9kZV9pc190b3B0aWVyYCBpcyBhIGhvdCBwYXRoIGZ1bmN0aW9uOyBpdCdzIGNhbGxlZCBmcm9tIHBsYWNlcyBsaWtlIGB0YXNrX251bWFfZmF1bHRgIGFuZCBgZm9saW9fY2FuX21hcF9wcm90X251bWFgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHRlc3QgZGlzdHJpYnV0aW9uIHNrZXcuIFNob3VsZCBJIGRyb3AgYG5vZGVfaXNfdG9wdGllcmAgZnJvbSB0aGUgbGlzdD8gTWF5YmUuIEhvd2V2ZXIsIHRoaXMgaXNuJ3QgKmp1c3QqIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQgaXMgc3BlY2lmaWMgdG8gbWVtb3J5IHRpZXJpbmcuIEFsdGhvdWdoLCBpdCAqaXMqIGNhbGxlZCBpbiBwYWdlIGZhdWx0IHBhdGhzLi4uXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIGBub2RlX2lzX3RvcHRpZXJgIGhhcyBiZWVuIGlubGluZWQsIGJ1dCBubywgaXQncyBzdGlsbCBhIHJlZ3VsYXIgZnVuY3Rpb24gaW4gYG1tL21lbW9yeS10aWVycy5jYC4gTGV0J3MgYWxzbyBsb29rIGF0IHdoYXQgdGhlIGFjdHVhbCBwYXRjaCBjaGFuZ2VzLiBIbW0sIHRoZSBjb2RlIGlzIHNpbXBsaWZpZWQgdG86XG5cbmBgYGNcbmJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxue1xuXHRyZXR1cm4gbm9kZV9pc3NldChub2RlLCB0b3B0aWVyX25vZGVzKTtcbn1cbmBgYFxuXG5JdCdzIGFjdHVhbGx5IHZlcnkgc2ltcGxlIG5vdy4gVGhlIG1haW4gbG9naWMgaXMgZGVmaW5pdGVseSBpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAuIFNvLCBJJ2xsIG1ha2UgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCB0aGUgcHJpbWFyeSBmb2N1cy5cblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgbm8gb3RoZXIgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQuIE5vcGUsIGp1c3QgYG5vZGVfaXNfdG9wdGllcmAgYW5kIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AuXG5cbkZpbmFsbHksIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgQ09ORklHX05VTUFgIGFuZCBgQ09ORklHX05VTUFfTUlHUkFUSU9OYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19OVU1BX01JR1JBVElPTmAgaXMgYSByZWFsIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjM1OjM2LjI1ODcwNjYxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4MjI3NzUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlVNQV9NSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njc3PWNvbmZpZyBQQUdFX1JFUE9SVElOR1xcbi0tXFxubW0vS2NvbmZpZy02ODQtXFxubW0vS2NvbmZpZzo2ODU6Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODYtXFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzU6MzkuNjQwOTkzNzc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjIzMDY3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipOVU1BIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgTlVNQV9NSUdSQVRJT05gIGlzIGRlZmluaXRlbHkgYSByZWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3MgYSBnaXZlbi4gQnV0IG5vdyBJJ20gd29uZGVyaW5nIGlmIGp1c3QgdGhhdCBpcyBlbm91Z2gsIG9yIGlmIGl0J3MgcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCBhbm90aGVyIGNvbmZpZy4gSG1tbSwgY291bGQgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgYWN0dWFsbHkgYmUgYSAqcHJlcmVxdWlzaXRlKiBmb3Igc29tZXRoaW5nIGxpa2UgYG5vZGVfaXNfdG9wdGllcmAgdG8gZXZlbiBiZSB0cmlnZ2VyZWQgb3IgZnVuY3Rpb24gcHJvcGVybHk/IEl0IGZlZWxzIGxpa2UgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IHRoZXJlLlxuXG5UbyBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwIGFuZCBzZWUgaG93IHRoZXkgaW50ZXJwbGF5LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgdGhlIGBOVU1BX0JBTEFOQ0lOR2AgS2NvbmZpZyBvcHRpb24gaXRzZWxmLiBMZXQgbWUgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRleHQuIFRoYXQgc2hvdWxkIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgbG9naWNhbCBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIE5VTUEgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozNTo0Ni41NjMzMDMyOTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTQ4ODg3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFfQkFMQU5DSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAwNz1jb25maWcgQVJDSF9XQU5UX05VTUFfVkFSSUFCTEVfTE9DQUxJVFlcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDA5LVxcbmluaXQvS2NvbmZpZzoxMDEwOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR1xcbmluaXQvS2NvbmZpZy0xMDExLVxcdGJvb2wgXFxcIk1lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWc9MTAyMj1jb25maWcgU0NIRURfQ0FDSEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDMyLVxcbmluaXQvS2NvbmZpZzoxMDMzOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG5pbml0L0tjb25maWctMTAzNC1cXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzU6NDguNzE4MTk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDI1MDYwNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlVNQSBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBOVU1BX0JBTEFOQ0lOR2AgaXMgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYCDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBzZWUgdGhlIGNoYW5nZXMgdG91Y2ggYG1tL21lbW9yeS10aWVycy5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBCdXQgZGlnZ2luZyBkZWVwZXIsIHRoaXMgc3BlY2lmaWMgY29kZSBtb2RpZmljYXRpb24gaXMgbmVzdGxlZCB1bmRlciBhbiBgI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTmAuIFJpZ2h0LCBzbyBgTlVNQV9NSUdSQVRJT05gIGlzIHRoZSBrZXkgY29uZmlnIGhlcmUuIFRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIG9yIGlmIHRoaXMgaXMgdGhlIG9ubHkgb25lLiBHaXZlbiB0aGF0IGBNSUdSQVRJT05gIGlzIHNlbGVjdGVkIGJ5IGBOVU1BX01JR1JBVElPTmAsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBOVU1BX01JR1JBVElPTmAgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFuIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozNjozNS43NDMyNjE1MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTAyNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVU1BX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njc3PWNvbmZpZyBQQUdFX1JFUE9SVElOR1xcbi0tXFxubW0vS2NvbmZpZy02ODQtXFxubW0vS2NvbmZpZzo2ODU6Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODYtXFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzY6MzUuODA1MTY5MTYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2Mjk5ODMxNzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGFzcGVjdCBvZiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MgYmV0dGVyLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyBwcm9iYWJseSB0aGUgYmVzdCBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgZ3V0IHRlbGxzIG1lIGBtbS9LY29uZmlnYCBpcyByZWxldmFudCBoZXJlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgNjg1LiBUaGF0IHNlY3Rpb24gdXN1YWxseSBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIGFuZCBnaXZlbiB3aGF0IEknbSB3b3JraW5nIG9uLCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIGFyZWEgdG8gZm9jdXMgb24gZmlyc3QuIEl0J3MgYSBicm9hZCBmaWxlLCBzbyBsaW5lIDY4NSBzaG91bGQgaGVscCBtZSB6ZXJvIGluIG9uIHRoZSBleGFjdCBiaXRzIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozNzowMi4xMDUwMDMwNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjgwOlxcdFxcdCAgRnJlZSBwYWdlIHJlcG9ydGluZyBhbGxvd3MgZm9yIHRoZSBpbmNyZW1lbnRhbCBhY3F1aXNpdGlvbiBvZlxcbiA2ODE6XFx0XFx0ICBmcmVlIHBhZ2VzIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciBmb3IgdGhlIHB1cnBvc2Ugb2YgcmVwb3J0aW5nXFxuIDY4MjpcXHRcXHQgIHRob3NlIHBhZ2VzIHRvIGFub3RoZXIgZW50aXR5LCBzdWNoIGFzIGEgaHlwZXJ2aXNvciwgc28gdGhhdCB0aGVcXG4gNjgzOlxcdFxcdCAgbWVtb3J5IGNhbiBiZSBmcmVlZCB3aXRoaW4gdGhlIGhvc3QgZm9yIG90aGVyIHVzZXMuXFxuIDY4NDpcXHRcXG4gNjg1OlxcdGNvbmZpZyBOVU1BX01JR1JBVElPTlxcbiA2ODY6XFx0XFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG4gNjg3OlxcdFxcdGRlZmF1bHQgeVxcbiA2ODg6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiA2ODk6XFx0XFx0c2VsZWN0IE1JR1JBVElPTlxcbiA2OTA6XFx0XFx0aGVscFxcbiA2OTE6XFx0XFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXFxuIDY5MjpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY5MzpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjk0OlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2OTU6XFx0XFxuIDY5NjpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY5NzpcXHRcXHRib29sXFxuIDY5ODpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjM3OjAyLjEwNTEwOTQzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjMyNTcyODU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IFRpZXJpbmcgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaW5nZXMgb24gYE5VTUFfTUlHUkFUSU9OYCwgd2hpY2gsIG9mIGNvdXJzZSwgZGVwZW5kcyBvbiBib3RoIGBOVU1BYCBhbmQgdGhlIGBNTVVgLiBMZXQgbWUgbGlzdCBgTlVNQWAgYW5kIGBOVU1BX01JR1JBVElPTmAgYXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlLlxuXG5UaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBsaWVzIGluIG9wdGltaXppbmcgYG5vZGVfaXNfdG9wdGllcmAuIFRoZXkncmUgc3dhcHBpbmcgb3V0IHRoZSBkeW5hbWljIGNoZWNrcyBmb3IgYSBwcmVjb21wdXRlZCBub2RlbWFzayBjYWxsZWQgYHRvcHRpZXJfbm9kZXNgLiBUaGlzIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzayBpcywgY3JpdGljYWxseSwgdXBkYXRlZCB3aXRoaW4gdGhlIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgZnVuY3Rpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBtZW1vcnkgdGllcmluZyBsb2dpYywgYW5kLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBOVU1BIGJhbGFuY2luZywgaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AuIEluaXRpYWxseSBJIHdhcyBnb2luZyB0byBleGNsdWRlIGBub2RlX2lzX3RvcHRpZXJgIGFzIGEgZm9jdXMuIEhvd2V2ZXIsIEkgbmVlZCB0byByZXRoaW5rIHRoYXQuIGBub2RlX2lzX3RvcHRpZXJgIGlzIGEgaG90LXBhdGggZnVuY3Rpb24sIGNhbGxlZCBkdXJpbmcgcGFnZSBmYXVsdHMgYW5kIG1pZ3JhdGlvbnMsIHNwZWNpZmljYWxseSwgSSByZWNhbGwgdGhhdCBgbm9kZV9pc190b3B0aWVyYCBpcyBjYWxsZWQgaW4gYHRhc2tfbnVtYV9mYXVsdGAsIHdoaWNoIGlzIGEgcGFnZSBmYXVsdCBoYW5kbGVyISBUaGVyZWZvcmUsIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIGl0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaXMgcmVhY2hhYmxlLCB0aG91Z2guIExldCBtZSBzZWUuLi4gSXQncyBjYWxsZWQgZnJvbSBgbWVtb3J5X3RpZXJfbGF0ZV9pbml0YCwgd2hpY2ggaXMgYW4gaW5pdGNhbGwsIGFuZCBhbHNvIGZyb20gYG1lbXRpZXJfaG90cGx1Z19jYWxsYmFja2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBtZW1vcnkgaG90cGx1ZyBldmVudHMuIE1lbW9yeSBob3RwbHVnIGlzIHNvbWV0aGluZyBJIGNhbiB0cmlnZ2VyIHdpdGggc3l6a2FsbGVyLCBzbyB5ZXMsIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIG9wdGltaXplcyBgbm9kZV9pc190b3B0aWVyKClgIGJ5IHJlcGxhY2luZyB0aG9zZSBkeW5hbWljIGNoZWNrcyB3aXRoIGEgcHJlY29tcHV0ZWQgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrLCB3aGljaCBpcyB1cGRhdGVkIHZpYSBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAuIFRoZSBjaGFuZ2UgYWZmZWN0cyB0aGUgbWVtb3J5IHRpZXJpbmcgYW5kIE5VTUEgYmFsYW5jaW5nIGxvZ2ljLlxuQmFzZWQgb24gYWxsIG9mIHRoaXM6XG5cbkVuYWJsZUNvbmZpZ3M6IGBOVU1BYCwgYE5VTUFfTUlHUkFUSU9OYFxuRm9jdXNTeW1ib2xzOiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgXG5Xb3J0aEZ1enppbmc6IFRydWVcblxuXG4iLCJJbnB1dFRva2VucyI6NzU2NywiT3V0cHV0VG9rZW5zIjoxMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozNzoyOC40MzA4NDA2MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ2MzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBgbm9kZV9pc190b3B0aWVyKClgIGJ5IHJlcGxhY2luZyBkeW5hbWljIG1lbW9yeSB0aWVyIGNoZWNrcyB3aXRoIGEgcHJlY29tcHV0ZWQgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrLiBUaGUgbm9kZW1hc2sgaXMgdXBkYXRlZCBpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnkgaG90cGx1Zy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQsIHBhcnRpY3VsYXJseSB0aHJvdWdoIG1lbW9yeSBob3RwbHVnIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJOVU1BX01JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIGBub2RlX2lzX3RvcHRpZXIoKWAgYnkgcmVwbGFjaW5nIGR5bmFtaWMgbWVtb3J5IHRpZXIgY2hlY2tzIHdpdGggYSBwcmVjb21wdXRlZCBgdG9wdGllcl9ub2Rlc2Agbm9kZW1hc2suIFRoZSBub2RlbWFzayBpcyB1cGRhdGVkIGluIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIG1lbW9yeSBob3RwbHVnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWVtb3J5IHRpZXJpbmcgYW5kIE5VTUEgYmFsYW5jaW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCwgcGFydGljdWxhcmx5IHRocm91Z2ggbWVtb3J5IGhvdHBsdWcgZXZlbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 06:15:03 +0000 UTC FinishedAt: 2026-07-07 06:37:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "NUMA_MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "NUMA_MIGRATION" ], "series_id": "a954a65b-c0db-4bac-b377-6786de060899" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "establish_demotion_targets" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgYG5vZGVfaXNfdG9wdGllcigpYCBieSByZXBsYWNpbmcgZHluYW1pYyBtZW1vcnkgdGllciBjaGVja3Mgd2l0aCBhIHByZWNvbXB1dGVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gVGhlIG5vZGVtYXNrIGlzIHVwZGF0ZWQgaW4gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5IGhvdHBsdWcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBiYWxhbmNpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBtZW1vcnkgaG90cGx1ZyBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDQ3MzQxNDRlYmFmMzc4ZDAzZDI2MGRjNTgzNDU2MmEzNTdiNzZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAwNjozMzowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktdGllcnMuYyBiL21tL21lbW9yeS10aWVycy5jXG5pbmRleCA1NDg1MWQ4YTE5NWIwMy4uMmU2ZTAyZWMxZmNlNGIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktdGllcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LXRpZXJzLmNcbkBAIC03MSw2ICYjNDM7NzEsNyBAQCBib29sIGZvbGlvX3VzZV9hY2Nlc3NfdGltZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuICNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cbiBzdGF0aWMgaW50IHRvcF90aWVyX2FkaXN0YW5jZTtcbiYjNDM7c3RhdGljIG5vZGVtYXNrX3QgdG9wdGllcl9ub2RlcyBfX3JlYWRfbW9zdGx5ID0gTk9ERV9NQVNLX0FMTDtcbiAvKlxuICAqIG5vZGVfZGVtb3Rpb25bXSBleGFtcGxlczpcbiAgKlxuQEAgLTI3NiwyNyAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3RpZXIgKl9fbm9kZV9nZXRfbWVtb3J5X3RpZXIoaW50IG5vZGUpXG4gI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTlxuIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxuIHtcbi1cdGJvb2wgdG9wdGllcjtcbi1cdHBnX2RhdGFfdCAqcGdkYXQ7XG4tXHRzdHJ1Y3QgbWVtb3J5X3RpZXIgKm1lbXRpZXI7XG4tXG4tXHRwZ2RhdCA9IE5PREVfREFUQShub2RlKTtcbi1cdGlmICghcGdkYXQpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdG1lbXRpZXIgPSByY3VfZGVyZWZlcmVuY2UocGdkYXQtXHUwMDNlbWVtdGllcik7XG4tXHRpZiAoIW1lbXRpZXIpIHtcbi1cdFx0dG9wdGllciA9IHRydWU7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVx0aWYgKG1lbXRpZXItXHUwMDNlYWRpc3RhbmNlX3N0YXJ0IFx1MDAzYz0gdG9wX3RpZXJfYWRpc3RhbmNlKVxuLVx0XHR0b3B0aWVyID0gdHJ1ZTtcbi1cdGVsc2Vcbi1cdFx0dG9wdGllciA9IGZhbHNlO1xuLW91dDpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0cmV0dXJuIHRvcHRpZXI7XG4mIzQzO1x0cmV0dXJuIG5vZGVfaXNzZXQobm9kZSwgdG9wdGllcl9ub2Rlcyk7XG4gfVxuIFxuIHZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpXG5AQCAtNDk3LDE5ICYjNDM7NDc4LDIyIEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4gXHRcdH1cbiBcdH1cbiBcdC8qXG4tXHQgKiBOb3cgYnVpbGQgdGhlIGxvd2VyX3RpZXIgbWFzayBmb3IgZWFjaCBub2RlIGNvbGxlY3Rpbmcgbm9kZSBtYXNrIGZyb21cbi1cdCAqIGFsbCBtZW1vcnkgdGllciBiZWxvdyBpdC4gVGhpcyBhbGxvd3MgdXMgdG8gZmFsbGJhY2sgZGVtb3Rpb24gcGFnZVxuLVx0ICogYWxsb2NhdGlvbiB0byBhIHNldCBvZiBub2RlcyB0aGF0IGlzIGNsb3NlciB0aGUgYWJvdmUgc2VsZWN0ZWRcbi1cdCAqIHByZWZlcnJlZCBub2RlLlxuJiM0MztcdCAqIEEgbm9kZSBzdGF5cyB0b3B0aWVyIHVubGVzcyBpdCBiZWxvbmdzIHRvIGEgdGllciBiZWxvd1xuJiM0MztcdCAqIHRvcF90aWVyX2FkaXN0YW5jZSwgd2hpbGUgZWFjaCB0aWVyJiMzOTtzIGxvd2VyX3RpZXJfbWFzayBjb2xsZWN0cyB0aGVcbiYjNDM7XHQgKiBub2RlcyBvZiBldmVyeSB0aWVyIGJlbG93IGl0IHNvIGRlbW90aW9uIHBhZ2UgYWxsb2NhdGlvbiBjYW4gZmFsbFxuJiM0MztcdCAqIGJhY2sgdG8gbm9kZXMgY2xvc2VyIHRvIHRoZSBzZWxlY3RlZCBwcmVmZXJyZWQgbm9kZS5cbiBcdCAqL1xuJiM0MztcdHRvcHRpZXJfbm9kZXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG4gXHRsb3dlcl90aWVyID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZW10aWVyLCBcdTAwMjZtZW1vcnlfdGllcnMsIGxpc3QpIHtcbiYjNDM7XHRcdHRpZXJfbm9kZXMgPSBnZXRfbWVtdGllcl9ub2RlbWFzayhtZW10aWVyKTtcbiYjNDM7XHRcdGlmIChtZW10aWVyLVx1MDAzZWFkaXN0YW5jZV9zdGFydCBcdTAwM2UgdG9wX3RpZXJfYWRpc3RhbmNlKVxuJiM0MztcdFx0XHRub2Rlc19hbmRub3QodG9wdGllcl9ub2RlcywgdG9wdGllcl9ub2RlcywgdGllcl9ub2Rlcyk7XG4gXHRcdC8qXG4gXHRcdCAqIEtlZXAgcmVtb3ZpbmcgY3VycmVudCB0aWVyIGZyb20gbG93ZXJfdGllciBub2RlcyxcbiBcdFx0ICogVGhpcyB3aWxsIHJlbW92ZSBhbGwgbm9kZXMgaW4gY3VycmVudCBhbmQgYWJvdmVcbiBcdFx0ICogbWVtb3J5IHRpZXIgZnJvbSB0aGUgbG93ZXJfdGllciBtYXNrLlxuIFx0XHQgKi9cbi1cdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuIFx0XHRub2Rlc19hbmRub3QobG93ZXJfdGllciwgbG93ZXJfdGllciwgdGllcl9ub2Rlcyk7XG4gXHRcdG1lbXRpZXItXHUwMDNlbG93ZXJfdGllcl9tYXNrID0gbG93ZXJfdGllcjtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDssCiAgICAmIzM0O05VTUFfTUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIGBub2RlX2lzX3RvcHRpZXIoKWAgYnkgcmVwbGFjaW5nIGR5bmFtaWMgbWVtb3J5IHRpZXIgY2hlY2tzIHdpdGggYSBwcmVjb21wdXRlZCBgdG9wdGllcl9ub2Rlc2Agbm9kZW1hc2suIFRoZSBub2RlbWFzayBpcyB1cGRhdGVkIGluIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIG1lbW9yeSBob3RwbHVnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWVtb3J5IHRpZXJpbmcgYW5kIE5VTUEgYmFsYW5jaW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCwgcGFydGljdWxhcmx5IHRocm91Z2ggbWVtb3J5IGhvdHBsdWcgZXZlbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNDQ3MzQxNDRlYmFmMzc4ZDAzZDI2MGRjNTgzNDU2MmEzNTdiNzZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAwNjozMzowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS10aWVycy5jIGIvbW0vbWVtb3J5LXRpZXJzLmMKaW5kZXggNTQ4NTFkOGExOTViMDMuLjJlNmUwMmVjMWZjZTRiIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktdGllcnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktdGllcnMuYwpAQCAtNzEsNiAmIzQzOzcxLDcgQEAgYm9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbykKIAogI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTgogc3RhdGljIGludCB0b3BfdGllcl9hZGlzdGFuY2U7CiYjNDM7c3RhdGljIG5vZGVtYXNrX3QgdG9wdGllcl9ub2RlcyBfX3JlYWRfbW9zdGx5ID0gTk9ERV9NQVNLX0FMTDsKIC8qCiAgKiBub2RlX2RlbW90aW9uW10gZXhhbXBsZXM6CiAgKgpAQCAtMjc2LDI3ICYjNDM7Mjc3LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfdGllciAqX19ub2RlX2dldF9tZW1vcnlfdGllcihpbnQgbm9kZSkKICNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT04KIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKQogewotCWJvb2wgdG9wdGllcjsKLQlwZ19kYXRhX3QgKnBnZGF0OwotCXN0cnVjdCBtZW1vcnlfdGllciAqbWVtdGllcjsKLQotCXBnZGF0ID0gTk9ERV9EQVRBKG5vZGUpOwotCWlmICghcGdkYXQpCi0JCXJldHVybiBmYWxzZTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQltZW10aWVyID0gcmN1X2RlcmVmZXJlbmNlKHBnZGF0LSZndDttZW10aWVyKTsKLQlpZiAoIW1lbXRpZXIpIHsKLQkJdG9wdGllciA9IHRydWU7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAobWVtdGllci0mZ3Q7YWRpc3RhbmNlX3N0YXJ0ICZsdDs9IHRvcF90aWVyX2FkaXN0YW5jZSkKLQkJdG9wdGllciA9IHRydWU7Ci0JZWxzZQotCQl0b3B0aWVyID0gZmFsc2U7Ci1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHRvcHRpZXI7CiYjNDM7CXJldHVybiBub2RlX2lzc2V0KG5vZGUsIHRvcHRpZXJfbm9kZXMpOwogfQogCiB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKQpAQCAtNDk3LDE5ICYjNDM7NDc4LDIyIEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpCiAJCX0KIAl9CiAJLyoKLQkgKiBOb3cgYnVpbGQgdGhlIGxvd2VyX3RpZXIgbWFzayBmb3IgZWFjaCBub2RlIGNvbGxlY3Rpbmcgbm9kZSBtYXNrIGZyb20KLQkgKiBhbGwgbWVtb3J5IHRpZXIgYmVsb3cgaXQuIFRoaXMgYWxsb3dzIHVzIHRvIGZhbGxiYWNrIGRlbW90aW9uIHBhZ2UKLQkgKiBhbGxvY2F0aW9uIHRvIGEgc2V0IG9mIG5vZGVzIHRoYXQgaXMgY2xvc2VyIHRoZSBhYm92ZSBzZWxlY3RlZAotCSAqIHByZWZlcnJlZCBub2RlLgomIzQzOwkgKiBBIG5vZGUgc3RheXMgdG9wdGllciB1bmxlc3MgaXQgYmVsb25ncyB0byBhIHRpZXIgYmVsb3cKJiM0MzsJICogdG9wX3RpZXJfYWRpc3RhbmNlLCB3aGlsZSBlYWNoIHRpZXImIzM5O3MgbG93ZXJfdGllcl9tYXNrIGNvbGxlY3RzIHRoZQomIzQzOwkgKiBub2RlcyBvZiBldmVyeSB0aWVyIGJlbG93IGl0IHNvIGRlbW90aW9uIHBhZ2UgYWxsb2NhdGlvbiBjYW4gZmFsbAomIzQzOwkgKiBiYWNrIHRvIG5vZGVzIGNsb3NlciB0byB0aGUgc2VsZWN0ZWQgcHJlZmVycmVkIG5vZGUuCiAJICovCiYjNDM7CXRvcHRpZXJfbm9kZXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07CiAJbG93ZXJfdGllciA9IG5vZGVfc3RhdGVzW05fTUVNT1JZXTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1lbXRpZXIsICZhbXA7bWVtb3J5X3RpZXJzLCBsaXN0KSB7CiYjNDM7CQl0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7CiYjNDM7CQlpZiAobWVtdGllci0mZ3Q7YWRpc3RhbmNlX3N0YXJ0ICZndDsgdG9wX3RpZXJfYWRpc3RhbmNlKQomIzQzOwkJCW5vZGVzX2FuZG5vdCh0b3B0aWVyX25vZGVzLCB0b3B0aWVyX25vZGVzLCB0aWVyX25vZGVzKTsKIAkJLyoKIAkJICogS2VlcCByZW1vdmluZyBjdXJyZW50IHRpZXIgZnJvbSBsb3dlcl90aWVyIG5vZGVzLAogCQkgKiBUaGlzIHdpbGwgcmVtb3ZlIGFsbCBub2RlcyBpbiBjdXJyZW50IGFuZCBhYm92ZQogCQkgKiBtZW1vcnkgdGllciBmcm9tIHRoZSBsb3dlcl90aWVyIG1hc2suCiAJCSAqLwotCQl0aWVyX25vZGVzID0gZ2V0X21lbXRpZXJfbm9kZW1hc2sobWVtdGllcik7CiAJCW5vZGVzX2FuZG5vdChsb3dlcl90aWVyLCBsb3dlcl90aWVyLCB0aWVyX25vZGVzKTsKIAkJbWVtdGllci0mZ3Q7bG93ZXJfdGllcl9tYXNrID0gbG93ZXJfdGllcjsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IFRpZXJpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBwbGF5aW5nIHdpdGggYG1tL21lbW9yeS10aWVycy5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgbmV3IGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHN0cmVhbWxpbmluZyB0aGUgYG5vZGVfaXNfdG9wdGllcmAgY2hlY2sg4oCTIGp1c3QgYSBzaW1wbGUgYG5vZGVfaXNzZXRgIGFnYWluc3QgdGhhdCBtYXNrIG5vdywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCByZWFkYWJpbGl0eS4gVGhlIHBhdGNoIGlzIGFsc28gdXBkYXRpbmcgYHRvcHRpZXJfbm9kZXNgIHdpdGhpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAsIGluZGljYXRpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBtZW1vcnkgdGllcmluZyBsb2dpYyB3aXRoaW4gdGhlIGtlcm5lbC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB1bmRlciBgI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTmAuIFNvLCBgTlVNQV9NSUdSQVRJT05gIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSXMgYE5VTUFfTUlHUkFUSU9OYCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGhlcmUsIG9yIGFyZSB0aGVyZSBvdGhlcnMgbHVya2luZz8gSSBzdXNwZWN0IGBtbS9tZW1vcnktdGllcnMuY2AgaXMgbGlrZWx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTlVNQWAgdG9vOyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdCBpbiBgbW0vTWFrZWZpbGVgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5LXRpZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTg9b2JqLSQoQ09ORklHX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGUub1xubW0vTWFrZWZpbGU6OTk6b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGUtMTAwLW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKk5VTUEgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gdGhlIHByb2plY3QgZGVtYW5kcyBgQ09ORklHX05VTUFgLCBvYnZpb3VzbHkuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gQW5kLCBvZiBjb3Vyc2UsIHdpdGggTlVNQSBpbiBwbGF5LCBgQ09ORklHX05VTUFfTUlHUkFUSU9OYCBpcyBnb2luZyB0byBiZSBuZWNlc3NhcnkuIEkmIzM5O2QgZXhwZWN0IGl0LCBidXQgYmV0dGVyIHRvIGNvbmZpcm0uIE5vdywgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBob3cgdGhlIGBub2RlX2lzX3RvcHRpZXJgIGZ1bmN0aW9uIGlzIGJlaW5nIHV0aWxpemVkLiBVbmRlcnN0YW5kaW5nIGl0cyBjb250ZXh0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB3aGF0IHdlJiMzOTtyZSByZWFsbHkgdHJ5aW5nIHRvIGFjaGlldmUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB0aGF0IEkgbWlnaHQgYmUgYWJsZSB0byBpZGVudGlmeS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdXNhZ2Ugb2YgYG5vZGVfaXNfdG9wdGllcmAgd2lsbCByZXZlYWwgdGhlIGJyb2FkZXIgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9kZV9pc190b3B0aWVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg9NTc9dm9pZCBub2RlX2dldF9hbGxvd2VkX3RhcmdldHMocGdfZGF0YV90ICpwZ2RhdCwgbm9kZW1hc2tfdCAqdGFyZ2V0cyk7XG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjU4OmJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKTtcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtNTktI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTY1PXN0YXRpYyBpbmxpbmUgdm9pZCBub2RlX2dldF9hbGxvd2VkX3RhcmdldHMocGdfZGF0YV90ICpwZ2RhdCwgbm9kZW1hc2tfdCAqdGFyZ2V0cylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTY5LVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaDo3MDpzdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC03MS17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaD0xMDk9c3RhdGljIGlubGluZSB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtMTEzLVxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaDoxMTQ6c3RhdGljIGlubGluZSBib29sIG5vZGVfaXNfdG9wdGllcihpbnQgbm9kZSlcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtMTE1LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTI2NzY9Ym9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0yNzIyLVx0aWYgKCEoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjcyMzpcdCAgICAhbm9kZV9pc190b3B0aWVyKHNyY19uaWQpIFx1MDAyNlx1MDAyNiAhY3B1cGlkX3ZhbGlkKGxhc3RfY3B1cGlkKSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjcyNC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzkzOD12b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9jcHVwaWQsIGludCBtZW1fbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0zOTU3LVx0ICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjM5NTg6XHRpZiAoIW5vZGVfaXNfdG9wdGllcihtZW1fbm9kZSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvc2NoZWQvZmFpci5jLTM5NTktXHQgICAgKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORyB8fFxuLS1cbm1tL21lbW9yeS10aWVycy5jPTY1PWJvb2wgZm9saW9fdXNlX2FjY2Vzc190aW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNjctXHRyZXR1cm4gKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORykgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnktdGllcnMuYzo2ODpcdCAgICAgICAhbm9kZV9pc190b3B0aWVyKGZvbGlvX25pZChmb2xpbykpO1xubW0vbWVtb3J5LXRpZXJzLmMtNjktfVxuLS1cbm1tL21lbW9yeS10aWVycy5jPTI2MT1zdGF0aWMgc3RydWN0IG1lbW9yeV90aWVyICpfX25vZGVfZ2V0X21lbW9yeV90aWVyKGludCBub2RlKVxuLS1cbm1tL21lbW9yeS10aWVycy5jLTI3Ny0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXG5tbS9tZW1vcnktdGllcnMuYzoyNzg6Ym9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpXG5tbS9tZW1vcnktdGllcnMuYy0yNzkte1xuLS1cbm1tL21lbXBvbGljeS5jPTgzNj1ib29sIGZvbGlvX2Nhbl9tYXBfcHJvdF9udW1hKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTg3Mi1cdGlmICghKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19OT1JNQUwpIFx1MDAyNlx1MDAyNlxubW0vbWVtcG9saWN5LmM6ODczOlx0ICAgIG5vZGVfaXNfdG9wdGllcihuaWQpKVxubW0vbWVtcG9saWN5LmMtODc0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWlncmF0ZS5jPTc2OT12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9taWdyYXRlLmMtODE1LVx0aWYgKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORykge1xubW0vbWlncmF0ZS5jOjgxNjpcdFx0Ym9vbCBmX3RvcHRpZXIgPSBub2RlX2lzX3RvcHRpZXIoZm9saW9fbmlkKGZvbGlvKSk7XG5tbS9taWdyYXRlLmM6ODE3Olx0XHRib29sIHRfdG9wdGllciA9IG5vZGVfaXNfdG9wdGllcihmb2xpb19uaWQobmV3Zm9saW8pKTtcbm1tL21pZ3JhdGUuYy04MTgtXG4tLVxubW0vbWlncmF0ZS5jPTI3NDk9aW50IG1pZ3JhdGVfbWlzcGxhY2VkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBub2RlKVxuLS1cbm1tL21pZ3JhdGUuYy0yNzY3LVx0XHRpZiAoKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlIFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORylcbm1tL21pZ3JhdGUuYzoyNzY4Olx0XHQgICAgXHUwMDI2XHUwMDI2ICFub2RlX2lzX3RvcHRpZXIoZm9saW9fbmlkKGZvbGlvKSlcbm1tL21pZ3JhdGUuYzoyNzY5Olx0XHQgICAgXHUwMDI2XHUwMDI2IG5vZGVfaXNfdG9wdGllcihub2RlKSlcbm1tL21pZ3JhdGUuYy0yNzcwLVx0XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1BST01PVEVfU1VDQ0VTUywgbnJfc3VjY2VlZGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDkyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOb2RlIFRpZXIgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGZyb20gYSBkeW5hbWljIGNoZWNrIHRvIGEgc3RhdGljYWxseSBkZWZpbmVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSBvcHRpbWl6aW5nIGBub2RlX2lzX3RvcHRpZXIoKWAgYnkgcHJlLWNhbGN1bGF0aW5nIGFuZCBzdG9yaW5nIHRoZSB0b3AtdGllciBub2RlIHNldCwgd2hpY2ggaXMgdGhlbiB1cGRhdGVkIGJ5IGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4KCkZ1bmN0aW9uYWxseSwgSSBjYW4gc2VlIGhvdyB0aGlzIGlzIGFuIGltcHJvdmVtZW50LiBUaGUgbG9naWMgYmVoaW5kIGBub2RlX2lzX3RvcHRpZXIoKWAgaXMgbm93IGJhc2VkIG9uIHRoaXMgcHJlLWNhbGN1bGF0ZWQgdmFsdWUsIGFuZCB3ZSBrbm93IHRoYXQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgIGhhbmRsZXMgdGhlIHVwZGF0ZXMuCgpNeSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHVzYWdlIG9mIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGZyZXF1ZW50bHkgaXQmIzM5O3MgY2FsbGVkIGFuZCBpbiB3aGF0IGNvbnRleHRzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJoZWFkIGludm9sdmVkIGluIHVwZGF0aW5nIHRoZSBub2RlbWFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktdGllcnMuYz0zODE9c3RhdGljIHZvaWQgZHVtcF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNDA1LSAqL1xubW0vbWVtb3J5LXRpZXJzLmM6NDA2OnN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG5tbS9tZW1vcnktdGllcnMuYy00MDcte1xuLS1cbm1tL21lbW9yeS10aWVycy5jLTUwNC0jZWxzZVxubW0vbWVtb3J5LXRpZXJzLmM6NTA1OnN0YXRpYyBpbmxpbmUgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKSB7fVxubW0vbWVtb3J5LXRpZXJzLmMtNTA2LSNlbmRpZiAvKiBDT05GSUdfTlVNQV9NSUdSQVRJT04gKi9cbi0tXG5tbS9tZW1vcnktdGllcnMuYz02OTE9c3RhdGljIGludCBfX2luaXQgbWVtb3J5X3RpZXJfbGF0ZV9pbml0KHZvaWQpXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtNzE0LVxubW0vbWVtb3J5LXRpZXJzLmM6NzE1Olx0ZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKTtcbm1tL21lbW9yeS10aWVycy5jLTcxNi1cdHB1dF9vbmxpbmVfbWVtcygpO1xuLS1cbm1tL21lbW9yeS10aWVycy5jPTg2NT1zdGF0aWMgaW50IF9fbWVtaW5pdCBtZW10aWVyX2hvdHBsdWdfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLFxuLS1cbm1tL21lbW9yeS10aWVycy5jLTg3NC1cdFx0aWYgKGNsZWFyX25vZGVfbWVtb3J5X3RpZXIobm4tXHUwMDNlbmlkKSlcbm1tL21lbW9yeS10aWVycy5jOjg3NTpcdFx0XHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xubW0vbWVtb3J5LXRpZXJzLmMtODc2LVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWVtb3J5X3RpZXJfbG9jayk7XG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtODgxLVx0XHRpZiAoIUlTX0VSUihtZW10aWVyKSlcbm1tL21lbW9yeS10aWVycy5jOjg4MjpcdFx0XHRlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpO1xubW0vbWVtb3J5LXRpZXJzLmMtODgzLVx0XHRtdXRleF91bmxvY2soXHUwMDI2bWVtb3J5X3RpZXJfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxOQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBNZW1vcnkgVGllcmluZyBhbmQgTlVNQSBCYWxhbmNpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGxhdGUgaW5pdCBhbmQgbWVtb3J5IGhvdHBsdWcsIGFuZCBgbm9kZV9pc190b3B0aWVyYCwgd2hpY2ggc2hvd3MgdXAgaW4gTlVNQSBiYWxhbmNpbmcgcGF0aHMuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgZnV6ei13b3J0aHk/IEdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZywgeWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcgd2l0aCBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBib3RoIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgYW5kIGBub2RlX2lzX3RvcHRpZXJgLiBCdXQsIHdhaXQsIGBub2RlX2lzX3RvcHRpZXJgIGlzIGEgaG90IHBhdGggZnVuY3Rpb247IGl0JiMzOTtzIGNhbGxlZCBmcm9tIHBsYWNlcyBsaWtlIGB0YXNrX251bWFfZmF1bHRgIGFuZCBgZm9saW9fY2FuX21hcF9wcm90X251bWFgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHRlc3QgZGlzdHJpYnV0aW9uIHNrZXcuIFNob3VsZCBJIGRyb3AgYG5vZGVfaXNfdG9wdGllcmAgZnJvbSB0aGUgbGlzdD8gTWF5YmUuIEhvd2V2ZXIsIHRoaXMgaXNuJiMzOTt0ICpqdXN0KiBhIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb24sIGl0IGlzIHNwZWNpZmljIHRvIG1lbW9yeSB0aWVyaW5nLiBBbHRob3VnaCwgaXQgKmlzKiBjYWxsZWQgaW4gcGFnZSBmYXVsdCBwYXRocy4uLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIGBub2RlX2lzX3RvcHRpZXJgIGhhcyBiZWVuIGlubGluZWQsIGJ1dCBubywgaXQmIzM5O3Mgc3RpbGwgYSByZWd1bGFyIGZ1bmN0aW9uIGluIGBtbS9tZW1vcnktdGllcnMuY2AuIExldCYjMzk7cyBhbHNvIGxvb2sgYXQgd2hhdCB0aGUgYWN0dWFsIHBhdGNoIGNoYW5nZXMuIEhtbSwgdGhlIGNvZGUgaXMgc2ltcGxpZmllZCB0bzoKCmBgYGMKYm9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpCnsKCXJldHVybiBub2RlX2lzc2V0KG5vZGUsIHRvcHRpZXJfbm9kZXMpOwp9CmBgYAoKSXQmIzM5O3MgYWN0dWFsbHkgdmVyeSBzaW1wbGUgbm93LiBUaGUgbWFpbiBsb2dpYyBpcyBkZWZpbml0ZWx5IGluIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4gU28sIEkmIzM5O2xsIG1ha2UgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCB0aGUgcHJpbWFyeSBmb2N1cy4KCk9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBubyBvdGhlciBmdW5jdGlvbnMgd2VyZSBtb2RpZmllZC4gTm9wZSwganVzdCBgbm9kZV9pc190b3B0aWVyYCBhbmQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYC4KCkZpbmFsbHksIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgQ09ORklHX05VTUFgIGFuZCBgQ09ORklHX05VTUFfTUlHUkFUSU9OYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19OVU1BX01JR1JBVElPTmAgaXMgYSByZWFsIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlVNQV9NSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02Nzc9Y29uZmlnIFBBR0VfUkVQT1JUSU5HXG4tLVxubW0vS2NvbmZpZy02ODQtXG5tbS9LY29uZmlnOjY4NTpjb25maWcgTlVNQV9NSUdSQVRJT05cbm1tL0tjb25maWctNjg2LVx0Ym9vbCBcJiMzNDtOVU1BIHBhZ2UgbWlncmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqTlVNQSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIHNvIGBOVU1BX01JR1JBVElPTmAgaXMgZGVmaW5pdGVseSBhIHJlYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IG5vdyBJJiMzOTttIHdvbmRlcmluZyBpZiBqdXN0IHRoYXQgaXMgZW5vdWdoLCBvciBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSBpbnRlcmFjdGluZyB3aXRoIGFub3RoZXIgY29uZmlnLiBIbW1tLCBjb3VsZCBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCBhY3R1YWxseSBiZSBhICpwcmVyZXF1aXNpdGUqIGZvciBzb21ldGhpbmcgbGlrZSBgbm9kZV9pc190b3B0aWVyYCB0byBldmVuIGJlIHRyaWdnZXJlZCBvciBmdW5jdGlvbiBwcm9wZXJseT8gSXQgZmVlbHMgbGlrZSB0aGVyZSBtaWdodCBiZSBhIGRlcGVuZGVuY3kgdGhlcmUuCgpUbyBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwIGFuZCBzZWUgaG93IHRoZXkgaW50ZXJwbGF5LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgdGhlIGBOVU1BX0JBTEFOQ0lOR2AgS2NvbmZpZyBvcHRpb24gaXRzZWxmLiBMZXQgbWUgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRleHQuIFRoYXQgc2hvdWxkIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgbG9naWNhbCBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIE5VTUEgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVU1BX0JBTEFOQ0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTAwNz1jb25maWcgQVJDSF9XQU5UX05VTUFfVkFSSUFCTEVfTE9DQUxJVFlcbi0tXG5pbml0L0tjb25maWctMTAwOS1cbmluaXQvS2NvbmZpZzoxMDEwOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR1xuaW5pdC9LY29uZmlnLTEwMTEtXHRib29sIFwmIzM0O01lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWc9MTAyMj1jb25maWcgU0NIRURfQ0FDSEVcbi0tXG5pbml0L0tjb25maWctMTAzMi1cbmluaXQvS2NvbmZpZzoxMDMzOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcbmluaXQvS2NvbmZpZy0xMDM0LVx0Ym9vbCBcJiMzNDtBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjkyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTlVNQSBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgTlVNQV9CQUxBTkNJTkdgIGlzIGRlZmluZWQgaW4gYGluaXQvS2NvbmZpZ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSB0aGUgY2hhbmdlcyB0b3VjaCBgbW0vbWVtb3J5LXRpZXJzLmNgLCB3aGljaCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfTlVNQWAgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIEJ1dCBkaWdnaW5nIGRlZXBlciwgdGhpcyBzcGVjaWZpYyBjb2RlIG1vZGlmaWNhdGlvbiBpcyBuZXN0bGVkIHVuZGVyIGFuIGAjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OYC4gUmlnaHQsIHNvIGBOVU1BX01JR1JBVElPTmAgaXMgdGhlIGtleSBjb25maWcgaGVyZS4gVGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgb3IgaWYgdGhpcyBpcyB0aGUgb25seSBvbmUuIEdpdmVuIHRoYXQgYE1JR1JBVElPTmAgaXMgc2VsZWN0ZWQgYnkgYE5VTUFfTUlHUkFUSU9OYCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5VTUFfTUlHUkFUSU9OYCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW4gaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlVNQV9NSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njc3PWNvbmZpZyBQQUdFX1JFUE9SVElOR1xuLS1cbm1tL0tjb25maWctNjg0LVxubW0vS2NvbmZpZzo2ODU6Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4Ni1cdGJvb2wgXCYjMzQ7TlVNQSBwYWdlIG1pZ3JhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYXNwZWN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyBiZXR0ZXIuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUmIzM5O3MgcHJvYmFibHkgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQsIGVzcGVjaWFsbHkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGd1dCB0ZWxscyBtZSBgbW0vS2NvbmZpZ2AgaXMgcmVsZXZhbnQgaGVyZSwgcGFydGljdWxhcmx5IGFyb3VuZCBsaW5lIDY4NS4gVGhhdCBzZWN0aW9uIHVzdWFsbHkgZGVhbHMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zLCBhbmQgZ2l2ZW4gd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIHRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgYXJlYSB0byBmb2N1cyBvbiBmaXJzdC4gSXQmIzM5O3MgYSBicm9hZCBmaWxlLCBzbyBsaW5lIDY4NSBzaG91bGQgaGVscCBtZSB6ZXJvIGluIG9uIHRoZSBleGFjdCBiaXRzIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdFx0ICBGcmVlIHBhZ2UgcmVwb3J0aW5nIGFsbG93cyBmb3IgdGhlIGluY3JlbWVudGFsIGFjcXVpc2l0aW9uIG9mXG4gNjgxOlx0XHQgIGZyZWUgcGFnZXMgZnJvbSB0aGUgYnVkZHkgYWxsb2NhdG9yIGZvciB0aGUgcHVycG9zZSBvZiByZXBvcnRpbmdcbiA2ODI6XHRcdCAgdGhvc2UgcGFnZXMgdG8gYW5vdGhlciBlbnRpdHksIHN1Y2ggYXMgYSBoeXBlcnZpc29yLCBzbyB0aGF0IHRoZVxuIDY4MzpcdFx0ICBtZW1vcnkgY2FuIGJlIGZyZWVkIHdpdGhpbiB0aGUgaG9zdCBmb3Igb3RoZXIgdXNlcy5cbiA2ODQ6XHRcbiA2ODU6XHRjb25maWcgTlVNQV9NSUdSQVRJT05cbiA2ODY6XHRcdGJvb2wgXCYjMzQ7TlVNQSBwYWdlIG1pZ3JhdGlvblwmIzM0O1xuIDY4NzpcdFx0ZGVmYXVsdCB5XG4gNjg4Olx0XHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxuIDY4OTpcdFx0c2VsZWN0IE1JR1JBVElPTlxuIDY5MDpcdFx0aGVscFxuIDY5MTpcdFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXG4gNjkyOlx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjkzOlx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2OTQ6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY5NTpcdFxuIDY5NjpcdGNvbmZpZyBNSUdSQVRJT05cbiA2OTc6XHRcdGJvb2xcbiA2OTg6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjcKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgVGllcmluZyBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBoaW5nZXMgb24gYE5VTUFfTUlHUkFUSU9OYCwgd2hpY2gsIG9mIGNvdXJzZSwgZGVwZW5kcyBvbiBib3RoIGBOVU1BYCBhbmQgdGhlIGBNTVVgLiBMZXQgbWUgbGlzdCBgTlVNQWAgYW5kIGBOVU1BX01JR1JBVElPTmAgYXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlLgoKVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgbGllcyBpbiBvcHRpbWl6aW5nIGBub2RlX2lzX3RvcHRpZXJgLiBUaGV5JiMzOTtyZSBzd2FwcGluZyBvdXQgdGhlIGR5bmFtaWMgY2hlY2tzIGZvciBhIHByZWNvbXB1dGVkIG5vZGVtYXNrIGNhbGxlZCBgdG9wdGllcl9ub2Rlc2AuIFRoaXMgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrIGlzLCBjcml0aWNhbGx5LCB1cGRhdGVkIHdpdGhpbiB0aGUgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBmdW5jdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG1lbW9yeSB0aWVyaW5nIGxvZ2ljLCBhbmQsIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIE5VTUEgYmFsYW5jaW5nLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKTXkgaW1tZWRpYXRlIGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgLiBJbml0aWFsbHkgSSB3YXMgZ29pbmcgdG8gZXhjbHVkZSBgbm9kZV9pc190b3B0aWVyYCBhcyBhIGZvY3VzLiBIb3dldmVyLCBJIG5lZWQgdG8gcmV0aGluayB0aGF0LiBgbm9kZV9pc190b3B0aWVyYCBpcyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBjYWxsZWQgZHVyaW5nIHBhZ2UgZmF1bHRzIGFuZCBtaWdyYXRpb25zLCBzcGVjaWZpY2FsbHksIEkgcmVjYWxsIHRoYXQgYG5vZGVfaXNfdG9wdGllcmAgaXMgY2FsbGVkIGluIGB0YXNrX251bWFfZmF1bHRgLCB3aGljaCBpcyBhIHBhZ2UgZmF1bHQgaGFuZGxlciEgVGhlcmVmb3JlLCBpdCBpcyBpbXBvcnRhbnQgdG8gaW5jbHVkZSBpdC4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCBpcyByZWFjaGFibGUsIHRob3VnaC4gTGV0IG1lIHNlZS4uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgbWVtb3J5X3RpZXJfbGF0ZV9pbml0YCwgd2hpY2ggaXMgYW4gaW5pdGNhbGwsIGFuZCBhbHNvIGZyb20gYG1lbXRpZXJfaG90cGx1Z19jYWxsYmFja2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBtZW1vcnkgaG90cGx1ZyBldmVudHMuIE1lbW9yeSBob3RwbHVnIGlzIHNvbWV0aGluZyBJIGNhbiB0cmlnZ2VyIHdpdGggc3l6a2FsbGVyLCBzbyB5ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggb3B0aW1pemVzIGBub2RlX2lzX3RvcHRpZXIoKWAgYnkgcmVwbGFjaW5nIHRob3NlIGR5bmFtaWMgY2hlY2tzIHdpdGggYSBwcmVjb21wdXRlZCBgdG9wdGllcl9ub2Rlc2Agbm9kZW1hc2ssIHdoaWNoIGlzIHVwZGF0ZWQgdmlhIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4gVGhlIGNoYW5nZSBhZmZlY3RzIHRoZSBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBiYWxhbmNpbmcgbG9naWMuCkJhc2VkIG9uIGFsbCBvZiB0aGlzOgoKRW5hYmxlQ29uZmlnczogYE5VTUFgLCBgTlVNQV9NSUdSQVRJT05gCkZvY3VzU3ltYm9sczogYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYApXb3J0aEZ1enppbmc6IFRydWUKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgYG5vZGVfaXNfdG9wdGllcigpYCBieSByZXBsYWNpbmcgZHluYW1pYyBtZW1vcnkgdGllciBjaGVja3Mgd2l0aCBhIHByZWNvbXB1dGVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gVGhlIG5vZGVtYXNrIGlzIHVwZGF0ZWQgaW4gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5IGhvdHBsdWcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBiYWxhbmNpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBtZW1vcnkgaG90cGx1ZyBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgYG5vZGVfaXNfdG9wdGllcigpYCBieSByZXBsYWNpbmcgZHluYW1pYyBtZW1vcnkgdGllciBjaGVja3Mgd2l0aCBhIHByZWNvbXB1dGVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gVGhlIG5vZGVtYXNrIGlzIHVwZGF0ZWQgaW4gYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5IGhvdHBsdWcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBtZW1vcnkgdGllcmluZyBhbmQgTlVNQSBiYWxhbmNpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLCBwYXJ0aWN1bGFybHkgdGhyb3VnaCBtZW1vcnkgaG90cGx1ZyBldmVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozMzowNy41MDEyOTc2ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEwMDcwMjEwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBgbm9kZV9pc190b3B0aWVyKClgIGJ5IHJlcGxhY2luZyBkeW5hbWljIG1lbW9yeSB0aWVyIGNoZWNrcyB3aXRoIGEgcHJlY29tcHV0ZWQgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrLiBUaGUgbm9kZW1hc2sgaXMgdXBkYXRlZCBpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnkgaG90cGx1Zy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQsIHBhcnRpY3VsYXJseSB0aHJvdWdoIG1lbW9yeSBob3RwbHVnIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzM6MDcuNTAxMzAyMTA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM3MzA1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNDQ3MzQxNDRlYmFmMzc4ZDAzZDI2MGRjNTgzNDU2MmEzNTdiNzZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMDY6MzM6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LXRpZXJzLmMgYi9tbS9tZW1vcnktdGllcnMuY1xcbmluZGV4IDU0ODUxZDhhMTk1YjAzLi4yZTZlMDJlYzFmY2U0YiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktdGllcnMuY1xcbisrKyBiL21tL21lbW9yeS10aWVycy5jXFxuQEAgLTcxLDYgKzcxLDcgQEAgYm9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuICNpZmRlZiBDT05GSUdfTlVNQV9NSUdSQVRJT05cXG4gc3RhdGljIGludCB0b3BfdGllcl9hZGlzdGFuY2U7XFxuK3N0YXRpYyBub2RlbWFza190IHRvcHRpZXJfbm9kZXMgX19yZWFkX21vc3RseSA9IE5PREVfTUFTS19BTEw7XFxuIC8qXFxuICAqIG5vZGVfZGVtb3Rpb25bXSBleGFtcGxlczpcXG4gICpcXG5AQCAtMjc2LDI3ICsyNzcsNyBAQCBzdGF0aWMgc3RydWN0IG1lbW9yeV90aWVyICpfX25vZGVfZ2V0X21lbW9yeV90aWVyKGludCBub2RlKVxcbiAjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXFxuIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxcbiB7XFxuLVxcdGJvb2wgdG9wdGllcjtcXG4tXFx0cGdfZGF0YV90ICpwZ2RhdDtcXG4tXFx0c3RydWN0IG1lbW9yeV90aWVyICptZW10aWVyO1xcbi1cXG4tXFx0cGdkYXQgPSBOT0RFX0RBVEEobm9kZSk7XFxuLVxcdGlmICghcGdkYXQpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0bWVtdGllciA9IHJjdV9kZXJlZmVyZW5jZShwZ2RhdC1cXHUwMDNlbWVtdGllcik7XFxuLVxcdGlmICghbWVtdGllcikge1xcbi1cXHRcXHR0b3B0aWVyID0gdHJ1ZTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFx0aWYgKG1lbXRpZXItXFx1MDAzZWFkaXN0YW5jZV9zdGFydCBcXHUwMDNjPSB0b3BfdGllcl9hZGlzdGFuY2UpXFxuLVxcdFxcdHRvcHRpZXIgPSB0cnVlO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHRvcHRpZXIgPSBmYWxzZTtcXG4tb3V0Olxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tXFx0cmV0dXJuIHRvcHRpZXI7XFxuK1xcdHJldHVybiBub2RlX2lzc2V0KG5vZGUsIHRvcHRpZXJfbm9kZXMpO1xcbiB9XFxuIFxcbiB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxcbkBAIC00OTcsMTkgKzQ3OCwyMiBAQCBzdGF0aWMgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0LypcXG4tXFx0ICogTm93IGJ1aWxkIHRoZSBsb3dlcl90aWVyIG1hc2sgZm9yIGVhY2ggbm9kZSBjb2xsZWN0aW5nIG5vZGUgbWFzayBmcm9tXFxuLVxcdCAqIGFsbCBtZW1vcnkgdGllciBiZWxvdyBpdC4gVGhpcyBhbGxvd3MgdXMgdG8gZmFsbGJhY2sgZGVtb3Rpb24gcGFnZVxcbi1cXHQgKiBhbGxvY2F0aW9uIHRvIGEgc2V0IG9mIG5vZGVzIHRoYXQgaXMgY2xvc2VyIHRoZSBhYm92ZSBzZWxlY3RlZFxcbi1cXHQgKiBwcmVmZXJyZWQgbm9kZS5cXG4rXFx0ICogQSBub2RlIHN0YXlzIHRvcHRpZXIgdW5sZXNzIGl0IGJlbG9uZ3MgdG8gYSB0aWVyIGJlbG93XFxuK1xcdCAqIHRvcF90aWVyX2FkaXN0YW5jZSwgd2hpbGUgZWFjaCB0aWVyJ3MgbG93ZXJfdGllcl9tYXNrIGNvbGxlY3RzIHRoZVxcbitcXHQgKiBub2RlcyBvZiBldmVyeSB0aWVyIGJlbG93IGl0IHNvIGRlbW90aW9uIHBhZ2UgYWxsb2NhdGlvbiBjYW4gZmFsbFxcbitcXHQgKiBiYWNrIHRvIG5vZGVzIGNsb3NlciB0byB0aGUgc2VsZWN0ZWQgcHJlZmVycmVkIG5vZGUuXFxuIFxcdCAqL1xcbitcXHR0b3B0aWVyX25vZGVzID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xcbiBcXHRsb3dlcl90aWVyID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG1lbXRpZXIsIFxcdTAwMjZtZW1vcnlfdGllcnMsIGxpc3QpIHtcXG4rXFx0XFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xcbitcXHRcXHRpZiAobWVtdGllci1cXHUwMDNlYWRpc3RhbmNlX3N0YXJ0IFxcdTAwM2UgdG9wX3RpZXJfYWRpc3RhbmNlKVxcbitcXHRcXHRcXHRub2Rlc19hbmRub3QodG9wdGllcl9ub2RlcywgdG9wdGllcl9ub2RlcywgdGllcl9ub2Rlcyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEtlZXAgcmVtb3ZpbmcgY3VycmVudCB0aWVyIGZyb20gbG93ZXJfdGllciBub2RlcyxcXG4gXFx0XFx0ICogVGhpcyB3aWxsIHJlbW92ZSBhbGwgbm9kZXMgaW4gY3VycmVudCBhbmQgYWJvdmVcXG4gXFx0XFx0ICogbWVtb3J5IHRpZXIgZnJvbSB0aGUgbG93ZXJfdGllciBtYXNrLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xcbiBcXHRcXHRub2Rlc19hbmRub3QobG93ZXJfdGllciwgbG93ZXJfdGllciwgdGllcl9ub2Rlcyk7XFxuIFxcdFxcdG1lbXRpZXItXFx1MDAzZWxvd2VyX3RpZXJfbWFzayA9IGxvd2VyX3RpZXI7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzM6MDcuOTk1NzE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjA1MTI1OTIxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBgbm9kZV9pc190b3B0aWVyKClgIGJ5IHJlcGxhY2luZyBkeW5hbWljIG1lbW9yeSB0aWVyIGNoZWNrcyB3aXRoIGEgcHJlY29tcHV0ZWQgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrLiBUaGUgbm9kZW1hc2sgaXMgdXBkYXRlZCBpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnkgaG90cGx1Zy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQsIHBhcnRpY3VsYXJseSB0aHJvdWdoIG1lbW9yeSBob3RwbHVnIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDQ3MzQxNDRlYmFmMzc4ZDAzZDI2MGRjNTgzNDU2MmEzNTdiNzZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAwNjozMzowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS10aWVycy5jIGIvbW0vbWVtb3J5LXRpZXJzLmNcbmluZGV4IDU0ODUxZDhhMTk1YjAzLi4yZTZlMDJlYzFmY2U0YiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS10aWVycy5jXG4rKysgYi9tbS9tZW1vcnktdGllcnMuY1xuQEAgLTcxLDYgKzcxLDcgQEAgYm9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXG4gc3RhdGljIGludCB0b3BfdGllcl9hZGlzdGFuY2U7XG4rc3RhdGljIG5vZGVtYXNrX3QgdG9wdGllcl9ub2RlcyBfX3JlYWRfbW9zdGx5ID0gTk9ERV9NQVNLX0FMTDtcbiAvKlxuICAqIG5vZGVfZGVtb3Rpb25bXSBleGFtcGxlczpcbiAgKlxuQEAgLTI3NiwyNyArMjc3LDcgQEAgc3RhdGljIHN0cnVjdCBtZW1vcnlfdGllciAqX19ub2RlX2dldF9tZW1vcnlfdGllcihpbnQgbm9kZSlcbiAjaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXG4gYm9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpXG4ge1xuLVx0Ym9vbCB0b3B0aWVyO1xuLVx0cGdfZGF0YV90ICpwZ2RhdDtcbi1cdHN0cnVjdCBtZW1vcnlfdGllciAqbWVtdGllcjtcbi1cbi1cdHBnZGF0ID0gTk9ERV9EQVRBKG5vZGUpO1xuLVx0aWYgKCFwZ2RhdClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0bWVtdGllciA9IHJjdV9kZXJlZmVyZW5jZShwZ2RhdC1cdTAwM2VtZW10aWVyKTtcbi1cdGlmICghbWVtdGllcikge1xuLVx0XHR0b3B0aWVyID0gdHJ1ZTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXHRpZiAobWVtdGllci1cdTAwM2VhZGlzdGFuY2Vfc3RhcnQgXHUwMDNjPSB0b3BfdGllcl9hZGlzdGFuY2UpXG4tXHRcdHRvcHRpZXIgPSB0cnVlO1xuLVx0ZWxzZVxuLVx0XHR0b3B0aWVyID0gZmFsc2U7XG4tb3V0OlxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRyZXR1cm4gdG9wdGllcjtcbitcdHJldHVybiBub2RlX2lzc2V0KG5vZGUsIHRvcHRpZXJfbm9kZXMpO1xuIH1cbiBcbiB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxuQEAgLTQ5NywxOSArNDc4LDIyIEBAIHN0YXRpYyB2b2lkIGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKHZvaWQpXG4gXHRcdH1cbiBcdH1cbiBcdC8qXG4tXHQgKiBOb3cgYnVpbGQgdGhlIGxvd2VyX3RpZXIgbWFzayBmb3IgZWFjaCBub2RlIGNvbGxlY3Rpbmcgbm9kZSBtYXNrIGZyb21cbi1cdCAqIGFsbCBtZW1vcnkgdGllciBiZWxvdyBpdC4gVGhpcyBhbGxvd3MgdXMgdG8gZmFsbGJhY2sgZGVtb3Rpb24gcGFnZVxuLVx0ICogYWxsb2NhdGlvbiB0byBhIHNldCBvZiBub2RlcyB0aGF0IGlzIGNsb3NlciB0aGUgYWJvdmUgc2VsZWN0ZWRcbi1cdCAqIHByZWZlcnJlZCBub2RlLlxuK1x0ICogQSBub2RlIHN0YXlzIHRvcHRpZXIgdW5sZXNzIGl0IGJlbG9uZ3MgdG8gYSB0aWVyIGJlbG93XG4rXHQgKiB0b3BfdGllcl9hZGlzdGFuY2UsIHdoaWxlIGVhY2ggdGllcidzIGxvd2VyX3RpZXJfbWFzayBjb2xsZWN0cyB0aGVcbitcdCAqIG5vZGVzIG9mIGV2ZXJ5IHRpZXIgYmVsb3cgaXQgc28gZGVtb3Rpb24gcGFnZSBhbGxvY2F0aW9uIGNhbiBmYWxsXG4rXHQgKiBiYWNrIHRvIG5vZGVzIGNsb3NlciB0byB0aGUgc2VsZWN0ZWQgcHJlZmVycmVkIG5vZGUuXG4gXHQgKi9cbitcdHRvcHRpZXJfbm9kZXMgPSBub2RlX3N0YXRlc1tOX01FTU9SWV07XG4gXHRsb3dlcl90aWVyID0gbm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShtZW10aWVyLCBcdTAwMjZtZW1vcnlfdGllcnMsIGxpc3QpIHtcbitcdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuK1x0XHRpZiAobWVtdGllci1cdTAwM2VhZGlzdGFuY2Vfc3RhcnQgXHUwMDNlIHRvcF90aWVyX2FkaXN0YW5jZSlcbitcdFx0XHRub2Rlc19hbmRub3QodG9wdGllcl9ub2RlcywgdG9wdGllcl9ub2RlcywgdGllcl9ub2Rlcyk7XG4gXHRcdC8qXG4gXHRcdCAqIEtlZXAgcmVtb3ZpbmcgY3VycmVudCB0aWVyIGZyb20gbG93ZXJfdGllciBub2RlcyxcbiBcdFx0ICogVGhpcyB3aWxsIHJlbW92ZSBhbGwgbm9kZXMgaW4gY3VycmVudCBhbmQgYWJvdmVcbiBcdFx0ICogbWVtb3J5IHRpZXIgZnJvbSB0aGUgbG93ZXJfdGllciBtYXNrLlxuIFx0XHQgKi9cbi1cdFx0dGllcl9ub2RlcyA9IGdldF9tZW10aWVyX25vZGVtYXNrKG1lbXRpZXIpO1xuIFx0XHRub2Rlc19hbmRub3QobG93ZXJfdGllciwgbG93ZXJfdGllciwgdGllcl9ub2Rlcyk7XG4gXHRcdG1lbXRpZXItXHUwMDNlbG93ZXJfdGllcl9tYXNrID0gbG93ZXJfdGllcjtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjMzOjA3Ljk5NTcxNzU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxNjAzOTA1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IFRpZXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBwbGF5aW5nIHdpdGggYG1tL21lbW9yeS10aWVycy5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGEgbmV3IGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gRXNzZW50aWFsbHksIGl0J3Mgc3RyZWFtbGluaW5nIHRoZSBgbm9kZV9pc190b3B0aWVyYCBjaGVjayDigJMganVzdCBhIHNpbXBsZSBgbm9kZV9pc3NldGAgYWdhaW5zdCB0aGF0IG1hc2sgbm93LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlYWRhYmlsaXR5LiBUaGUgcGF0Y2ggaXMgYWxzbyB1cGRhdGluZyBgdG9wdGllcl9ub2Rlc2Agd2l0aGluIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYCwgaW5kaWNhdGluZyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSB0aWVyaW5nIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQncyBkcml2aW5nIHRoaXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgYWxsIGhhcHBlbmluZyB1bmRlciBgI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTmAuIFNvLCBgTlVNQV9NSUdSQVRJT05gIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSXMgYE5VTUFfTUlHUkFUSU9OYCB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGhlcmUsIG9yIGFyZSB0aGVyZSBvdGhlcnMgbHVya2luZz8gSSBzdXNwZWN0IGBtbS9tZW1vcnktdGllcnMuY2AgaXMgbGlrZWx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTlVNQWAgdG9vOyBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgdGhhdCBpbiBgbW0vTWFrZWZpbGVgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozMzozNy4xNTYxMDk4OThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NzMzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5LXRpZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlOjk5Om9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcbm1tL01ha2VmaWxlLTEwMC1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozMzozNy4yMTQ5OTE3ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM3NjA2MjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipOVU1BIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gdGhlIHByb2plY3QgZGVtYW5kcyBgQ09ORklHX05VTUFgLCBvYnZpb3VzbHkuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmb3VuZGF0aW9uLiBBbmQsIG9mIGNvdXJzZSwgd2l0aCBOVU1BIGluIHBsYXksIGBDT05GSUdfTlVNQV9NSUdSQVRJT05gIGlzIGdvaW5nIHRvIGJlIG5lY2Vzc2FyeS4gSSdkIGV4cGVjdCBpdCwgYnV0IGJldHRlciB0byBjb25maXJtLiBOb3csIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBob3cgdGhlIGBub2RlX2lzX3RvcHRpZXJgIGZ1bmN0aW9uIGlzIGJlaW5nIHV0aWxpemVkLiBVbmRlcnN0YW5kaW5nIGl0cyBjb250ZXh0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB3aGF0IHdlJ3JlIHJlYWxseSB0cnlpbmcgdG8gYWNoaWV2ZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIHRoYXQgSSBtaWdodCBiZSBhYmxlIHRvIGlkZW50aWZ5LiBMZXQncyBzZWUuLi4gdGhlIHVzYWdlIG9mIGBub2RlX2lzX3RvcHRpZXJgIHdpbGwgcmV2ZWFsIHRoZSBicm9hZGVyIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzQ6MzMuNTkxMDU1ODI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDY1MzU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9pc190b3B0aWVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTU3PXZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg6NTg6Ym9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtNTktI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmg9NjU9c3RhdGljIGlubGluZSB2b2lkIG5vZGVfZ2V0X2FsbG93ZWRfdGFyZ2V0cyhwZ19kYXRhX3QgKnBnZGF0LCBub2RlbWFza190ICp0YXJnZXRzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC02OS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjcwOnN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX2lzX3RvcHRpZXIoaW50IG5vZGUpXFxuaW5jbHVkZS9saW51eC9tZW1vcnktdGllcnMuaC03MS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oPTEwOT1zdGF0aWMgaW5saW5lIHZvaWQgbm9kZV9nZXRfYWxsb3dlZF90YXJnZXRzKHBnX2RhdGFfdCAqcGdkYXQsIG5vZGVtYXNrX3QgKnRhcmdldHMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oLTExMy1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeS10aWVycy5oOjExNDpzdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxcbmluY2x1ZGUvbGludXgvbWVtb3J5LXRpZXJzLmgtMTE1LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MjY3Nj1ib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjcyMi1cXHRpZiAoIShzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjcyMzpcXHQgICAgIW5vZGVfaXNfdG9wdGllcihzcmNfbmlkKSBcXHUwMDI2XFx1MDAyNiAhY3B1cGlkX3ZhbGlkKGxhc3RfY3B1cGlkKSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI3MjQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0zOTM4PXZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X2NwdXBpZCwgaW50IG1lbV9ub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzk1Ny1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjM5NTg6XFx0aWYgKCFub2RlX2lzX3RvcHRpZXIobWVtX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zOTU5LVxcdCAgICAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORyB8fFxcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9NjU9Ym9vbCBmb2xpb191c2VfYWNjZXNzX3RpbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTY3LVxcdHJldHVybiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORykgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1vcnktdGllcnMuYzo2ODpcXHQgICAgICAgIW5vZGVfaXNfdG9wdGllcihmb2xpb19uaWQoZm9saW8pKTtcXG5tbS9tZW1vcnktdGllcnMuYy02OS19XFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz0yNjE9c3RhdGljIHN0cnVjdCBtZW1vcnlfdGllciAqX19ub2RlX2dldF9tZW1vcnlfdGllcihpbnQgbm9kZSlcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTI3Ny0jaWZkZWYgQ09ORklHX05VTUFfTUlHUkFUSU9OXFxubW0vbWVtb3J5LXRpZXJzLmM6Mjc4OmJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxcbm1tL21lbW9yeS10aWVycy5jLTI3OS17XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz04MzY9Ym9vbCBmb2xpb19jYW5fbWFwX3Byb3RfbnVtYShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTg3Mi1cXHRpZiAoIShzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX05PUk1BTCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1wb2xpY3kuYzo4NzM6XFx0ICAgIG5vZGVfaXNfdG9wdGllcihuaWQpKVxcbm1tL21lbXBvbGljeS5jLTg3NC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9taWdyYXRlLmM9NzY5PXZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWlncmF0ZS5jLTgxNS1cXHRpZiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORykge1xcbm1tL21pZ3JhdGUuYzo4MTY6XFx0XFx0Ym9vbCBmX3RvcHRpZXIgPSBub2RlX2lzX3RvcHRpZXIoZm9saW9fbmlkKGZvbGlvKSk7XFxubW0vbWlncmF0ZS5jOjgxNzpcXHRcXHRib29sIHRfdG9wdGllciA9IG5vZGVfaXNfdG9wdGllcihmb2xpb19uaWQobmV3Zm9saW8pKTtcXG5tbS9taWdyYXRlLmMtODE4LVxcbi0tXFxubW0vbWlncmF0ZS5jPTI3NDk9aW50IG1pZ3JhdGVfbWlzcGxhY2VkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBub2RlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTI3NjctXFx0XFx0aWYgKChzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKVxcbm1tL21pZ3JhdGUuYzoyNzY4OlxcdFxcdCAgICBcXHUwMDI2XFx1MDAyNiAhbm9kZV9pc190b3B0aWVyKGZvbGlvX25pZChmb2xpbykpXFxubW0vbWlncmF0ZS5jOjI3Njk6XFx0XFx0ICAgIFxcdTAwMjZcXHUwMDI2IG5vZGVfaXNfdG9wdGllcihub2RlKSlcXG5tbS9taWdyYXRlLmMtMjc3MC1cXHRcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdQUk9NT1RFX1NVQ0NFU1MsIG5yX3N1Y2NlZWRlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjM0OjM1LjgzNzYwMTExN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYwNTcxNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTm9kZSBUaWVyIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIGZyb20gYSBkeW5hbWljIGNoZWNrIHRvIGEgc3RhdGljYWxseSBkZWZpbmVkIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzay4gRXNzZW50aWFsbHksIHdlJ3JlIG9wdGltaXppbmcgYG5vZGVfaXNfdG9wdGllcigpYCBieSBwcmUtY2FsY3VsYXRpbmcgYW5kIHN0b3JpbmcgdGhlIHRvcC10aWVyIG5vZGUgc2V0LCB3aGljaCBpcyB0aGVuIHVwZGF0ZWQgYnkgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKClgLlxuXG5GdW5jdGlvbmFsbHksIEkgY2FuIHNlZSBob3cgdGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gVGhlIGxvZ2ljIGJlaGluZCBgbm9kZV9pc190b3B0aWVyKClgIGlzIG5vdyBiYXNlZCBvbiB0aGlzIHByZS1jYWxjdWxhdGVkIHZhbHVlLCBhbmQgd2Uga25vdyB0aGF0IGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYCBoYW5kbGVzIHRoZSB1cGRhdGVzLlxuXG5NeSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHVzYWdlIG9mIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGZyZXF1ZW50bHkgaXQncyBjYWxsZWQgYW5kIGluIHdoYXQgY29udGV4dHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQgaW4gdXBkYXRpbmcgdGhlIG5vZGVtYXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDkyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzU6MTAuNzk4MTc0ODAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTI5NDI3NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS10aWVycy5jPTM4MT1zdGF0aWMgdm9pZCBkdW1wX2RlbW90aW9uX3RhcmdldHModm9pZClcXG4tLVxcbm1tL21lbW9yeS10aWVycy5jLTQwNS0gKi9cXG5tbS9tZW1vcnktdGllcnMuYzo0MDY6c3RhdGljIHZvaWQgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHModm9pZClcXG5tbS9tZW1vcnktdGllcnMuYy00MDcte1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmMtNTA0LSNlbHNlXFxubW0vbWVtb3J5LXRpZXJzLmM6NTA1OnN0YXRpYyBpbmxpbmUgdm9pZCBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cyh2b2lkKSB7fVxcbm1tL21lbW9yeS10aWVycy5jLTUwNi0jZW5kaWYgLyogQ09ORklHX05VTUFfTUlHUkFUSU9OICovXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYz02OTE9c3RhdGljIGludCBfX2luaXQgbWVtb3J5X3RpZXJfbGF0ZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy03MTQtXFxubW0vbWVtb3J5LXRpZXJzLmM6NzE1OlxcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XFxubW0vbWVtb3J5LXRpZXJzLmMtNzE2LVxcdHB1dF9vbmxpbmVfbWVtcygpO1xcbi0tXFxubW0vbWVtb3J5LXRpZXJzLmM9ODY1PXN0YXRpYyBpbnQgX19tZW1pbml0IG1lbXRpZXJfaG90cGx1Z19jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy04NzQtXFx0XFx0aWYgKGNsZWFyX25vZGVfbWVtb3J5X3RpZXIobm4tXFx1MDAzZW5pZCkpXFxubW0vbWVtb3J5LXRpZXJzLmM6ODc1OlxcdFxcdFxcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XFxubW0vbWVtb3J5LXRpZXJzLmMtODc2LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWVtb3J5X3RpZXJfbG9jayk7XFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy04ODEtXFx0XFx0aWYgKCFJU19FUlIobWVtdGllcikpXFxubW0vbWVtb3J5LXRpZXJzLmM6ODgyOlxcdFxcdFxcdGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzKCk7XFxubW0vbWVtb3J5LXRpZXJzLmMtODgzLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWVtb3J5X3RpZXJfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjM1OjEyLjc5MTEyMjMxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNDY3NTgyNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIE1lbW9yeSBUaWVyaW5nIGFuZCBOVU1BIEJhbGFuY2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGxhdGUgaW5pdCBhbmQgbWVtb3J5IGhvdHBsdWcsIGFuZCBgbm9kZV9pc190b3B0aWVyYCwgd2hpY2ggc2hvd3MgdXAgaW4gTlVNQSBiYWxhbmNpbmcgcGF0aHMuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgZnV6ei13b3J0aHk/IEdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZywgeWVzLCBpdCdzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyB3aXRoIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYm90aCBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgIGFuZCBgbm9kZV9pc190b3B0aWVyYC4gQnV0LCB3YWl0LCBgbm9kZV9pc190b3B0aWVyYCBpcyBhIGhvdCBwYXRoIGZ1bmN0aW9uOyBpdCdzIGNhbGxlZCBmcm9tIHBsYWNlcyBsaWtlIGB0YXNrX251bWFfZmF1bHRgIGFuZCBgZm9saW9fY2FuX21hcF9wcm90X251bWFgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGF2b2lkIHRlc3QgZGlzdHJpYnV0aW9uIHNrZXcuIFNob3VsZCBJIGRyb3AgYG5vZGVfaXNfdG9wdGllcmAgZnJvbSB0aGUgbGlzdD8gTWF5YmUuIEhvd2V2ZXIsIHRoaXMgaXNuJ3QgKmp1c3QqIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiwgaXQgaXMgc3BlY2lmaWMgdG8gbWVtb3J5IHRpZXJpbmcuIEFsdGhvdWdoLCBpdCAqaXMqIGNhbGxlZCBpbiBwYWdlIGZhdWx0IHBhdGhzLi4uXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIGBub2RlX2lzX3RvcHRpZXJgIGhhcyBiZWVuIGlubGluZWQsIGJ1dCBubywgaXQncyBzdGlsbCBhIHJlZ3VsYXIgZnVuY3Rpb24gaW4gYG1tL21lbW9yeS10aWVycy5jYC4gTGV0J3MgYWxzbyBsb29rIGF0IHdoYXQgdGhlIGFjdHVhbCBwYXRjaCBjaGFuZ2VzLiBIbW0sIHRoZSBjb2RlIGlzIHNpbXBsaWZpZWQgdG86XG5cbmBgYGNcbmJvb2wgbm9kZV9pc190b3B0aWVyKGludCBub2RlKVxue1xuXHRyZXR1cm4gbm9kZV9pc3NldChub2RlLCB0b3B0aWVyX25vZGVzKTtcbn1cbmBgYFxuXG5JdCdzIGFjdHVhbGx5IHZlcnkgc2ltcGxlIG5vdy4gVGhlIG1haW4gbG9naWMgaXMgZGVmaW5pdGVseSBpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAuIFNvLCBJJ2xsIG1ha2UgYGVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzYCB0aGUgcHJpbWFyeSBmb2N1cy5cblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgbm8gb3RoZXIgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQuIE5vcGUsIGp1c3QgYG5vZGVfaXNfdG9wdGllcmAgYW5kIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AuXG5cbkZpbmFsbHksIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgQ09ORklHX05VTUFgIGFuZCBgQ09ORklHX05VTUFfTUlHUkFUSU9OYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19OVU1BX01JR1JBVElPTmAgaXMgYSByZWFsIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjM1OjM2LjI1ODcwNjYxOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4MjI3NzUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlVNQV9NSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njc3PWNvbmZpZyBQQUdFX1JFUE9SVElOR1xcbi0tXFxubW0vS2NvbmZpZy02ODQtXFxubW0vS2NvbmZpZzo2ODU6Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODYtXFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzU6MzkuNjQwOTkzNzc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MjIzMDY3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipOVU1BIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgTlVNQV9NSUdSQVRJT05gIGlzIGRlZmluaXRlbHkgYSByZWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3MgYSBnaXZlbi4gQnV0IG5vdyBJJ20gd29uZGVyaW5nIGlmIGp1c3QgdGhhdCBpcyBlbm91Z2gsIG9yIGlmIGl0J3MgcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCBhbm90aGVyIGNvbmZpZy4gSG1tbSwgY291bGQgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgYWN0dWFsbHkgYmUgYSAqcHJlcmVxdWlzaXRlKiBmb3Igc29tZXRoaW5nIGxpa2UgYG5vZGVfaXNfdG9wdGllcmAgdG8gZXZlbiBiZSB0cmlnZ2VyZWQgb3IgZnVuY3Rpb24gcHJvcGVybHk/IEl0IGZlZWxzIGxpa2UgdGhlcmUgbWlnaHQgYmUgYSBkZXBlbmRlbmN5IHRoZXJlLlxuXG5UbyBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwIGFuZCBzZWUgaG93IHRoZXkgaW50ZXJwbGF5LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgdGhlIGBOVU1BX0JBTEFOQ0lOR2AgS2NvbmZpZyBvcHRpb24gaXRzZWxmLiBMZXQgbWUgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRleHQuIFRoYXQgc2hvdWxkIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgbG9naWNhbCBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIE5VTUEgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozNTo0Ni41NjMzMDMyOTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTQ4ODg3NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFfQkFMQU5DSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAwNz1jb25maWcgQVJDSF9XQU5UX05VTUFfVkFSSUFCTEVfTE9DQUxJVFlcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDA5LVxcbmluaXQvS2NvbmZpZzoxMDEwOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR1xcbmluaXQvS2NvbmZpZy0xMDExLVxcdGJvb2wgXFxcIk1lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWc9MTAyMj1jb25maWcgU0NIRURfQ0FDSEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDMyLVxcbmluaXQvS2NvbmZpZzoxMDMzOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG5pbml0L0tjb25maWctMTAzNC1cXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzU6NDguNzE4MTk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDI1MDYwNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlVNQSBCYWxhbmNpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBOVU1BX0JBTEFOQ0lOR2AgaXMgZGVmaW5lZCBpbiBgaW5pdC9LY29uZmlnYCDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBzZWUgdGhlIGNoYW5nZXMgdG91Y2ggYG1tL21lbW9yeS10aWVycy5jYCwgd2hpY2ggaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX05VTUFgIGlzIGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBCdXQgZGlnZ2luZyBkZWVwZXIsIHRoaXMgc3BlY2lmaWMgY29kZSBtb2RpZmljYXRpb24gaXMgbmVzdGxlZCB1bmRlciBhbiBgI2lmZGVmIENPTkZJR19OVU1BX01JR1JBVElPTmAuIFJpZ2h0LCBzbyBgTlVNQV9NSUdSQVRJT05gIGlzIHRoZSBrZXkgY29uZmlnIGhlcmUuIFRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIG9yIGlmIHRoaXMgaXMgdGhlIG9ubHkgb25lLiBHaXZlbiB0aGF0IGBNSUdSQVRJT05gIGlzIHNlbGVjdGVkIGJ5IGBOVU1BX01JR1JBVElPTmAsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBOVU1BX01JR1JBVElPTmAgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFuIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozNjozNS43NDMyNjE1MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTAyNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVU1BX01JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njc3PWNvbmZpZyBQQUdFX1JFUE9SVElOR1xcbi0tXFxubW0vS2NvbmZpZy02ODQtXFxubW0vS2NvbmZpZzo2ODU6Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODYtXFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDY6MzY6MzUuODA1MTY5MTYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2Mjk5ODMxNzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGFzcGVjdCBvZiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MgYmV0dGVyLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyBwcm9iYWJseSB0aGUgYmVzdCBzdGFydGluZyBwb2ludCwgZXNwZWNpYWxseSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgZ3V0IHRlbGxzIG1lIGBtbS9LY29uZmlnYCBpcyByZWxldmFudCBoZXJlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgNjg1LiBUaGF0IHNlY3Rpb24gdXN1YWxseSBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIGFuZCBnaXZlbiB3aGF0IEknbSB3b3JraW5nIG9uLCB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIGFyZWEgdG8gZm9jdXMgb24gZmlyc3QuIEl0J3MgYSBicm9hZCBmaWxlLCBzbyBsaW5lIDY4NSBzaG91bGQgaGVscCBtZSB6ZXJvIGluIG9uIHRoZSBleGFjdCBiaXRzIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozNzowMi4xMDUwMDMwNzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjgwOlxcdFxcdCAgRnJlZSBwYWdlIHJlcG9ydGluZyBhbGxvd3MgZm9yIHRoZSBpbmNyZW1lbnRhbCBhY3F1aXNpdGlvbiBvZlxcbiA2ODE6XFx0XFx0ICBmcmVlIHBhZ2VzIGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciBmb3IgdGhlIHB1cnBvc2Ugb2YgcmVwb3J0aW5nXFxuIDY4MjpcXHRcXHQgIHRob3NlIHBhZ2VzIHRvIGFub3RoZXIgZW50aXR5LCBzdWNoIGFzIGEgaHlwZXJ2aXNvciwgc28gdGhhdCB0aGVcXG4gNjgzOlxcdFxcdCAgbWVtb3J5IGNhbiBiZSBmcmVlZCB3aXRoaW4gdGhlIGhvc3QgZm9yIG90aGVyIHVzZXMuXFxuIDY4NDpcXHRcXG4gNjg1OlxcdGNvbmZpZyBOVU1BX01JR1JBVElPTlxcbiA2ODY6XFx0XFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG4gNjg3OlxcdFxcdGRlZmF1bHQgeVxcbiA2ODg6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiA2ODk6XFx0XFx0c2VsZWN0IE1JR1JBVElPTlxcbiA2OTA6XFx0XFx0aGVscFxcbiA2OTE6XFx0XFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXFxuIDY5MjpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY5MzpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjk0OlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2OTU6XFx0XFxuIDY5NjpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY5NzpcXHRcXHRib29sXFxuIDY5ODpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA2OjM3OjAyLjEwNTEwOTQzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjMyNTcyODU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IFRpZXJpbmcgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBoaW5nZXMgb24gYE5VTUFfTUlHUkFUSU9OYCwgd2hpY2gsIG9mIGNvdXJzZSwgZGVwZW5kcyBvbiBib3RoIGBOVU1BYCBhbmQgdGhlIGBNTVVgLiBMZXQgbWUgbGlzdCBgTlVNQWAgYW5kIGBOVU1BX01JR1JBVElPTmAgYXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlLlxuXG5UaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBsaWVzIGluIG9wdGltaXppbmcgYG5vZGVfaXNfdG9wdGllcmAuIFRoZXkncmUgc3dhcHBpbmcgb3V0IHRoZSBkeW5hbWljIGNoZWNrcyBmb3IgYSBwcmVjb21wdXRlZCBub2RlbWFzayBjYWxsZWQgYHRvcHRpZXJfbm9kZXNgLiBUaGlzIGB0b3B0aWVyX25vZGVzYCBub2RlbWFzayBpcywgY3JpdGljYWxseSwgdXBkYXRlZCB3aXRoaW4gdGhlIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgZnVuY3Rpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBtZW1vcnkgdGllcmluZyBsb2dpYywgYW5kLCBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBOVU1BIGJhbGFuY2luZywgaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgaGVyZSB3aWxsIGJlIG9uIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AuIEluaXRpYWxseSBJIHdhcyBnb2luZyB0byBleGNsdWRlIGBub2RlX2lzX3RvcHRpZXJgIGFzIGEgZm9jdXMuIEhvd2V2ZXIsIEkgbmVlZCB0byByZXRoaW5rIHRoYXQuIGBub2RlX2lzX3RvcHRpZXJgIGlzIGEgaG90LXBhdGggZnVuY3Rpb24sIGNhbGxlZCBkdXJpbmcgcGFnZSBmYXVsdHMgYW5kIG1pZ3JhdGlvbnMsIHNwZWNpZmljYWxseSwgSSByZWNhbGwgdGhhdCBgbm9kZV9pc190b3B0aWVyYCBpcyBjYWxsZWQgaW4gYHRhc2tfbnVtYV9mYXVsdGAsIHdoaWNoIGlzIGEgcGFnZSBmYXVsdCBoYW5kbGVyISBUaGVyZWZvcmUsIGl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIGl0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c2AgaXMgcmVhY2hhYmxlLCB0aG91Z2guIExldCBtZSBzZWUuLi4gSXQncyBjYWxsZWQgZnJvbSBgbWVtb3J5X3RpZXJfbGF0ZV9pbml0YCwgd2hpY2ggaXMgYW4gaW5pdGNhbGwsIGFuZCBhbHNvIGZyb20gYG1lbXRpZXJfaG90cGx1Z19jYWxsYmFja2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBtZW1vcnkgaG90cGx1ZyBldmVudHMuIE1lbW9yeSBob3RwbHVnIGlzIHNvbWV0aGluZyBJIGNhbiB0cmlnZ2VyIHdpdGggc3l6a2FsbGVyLCBzbyB5ZXMsIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIG9wdGltaXplcyBgbm9kZV9pc190b3B0aWVyKClgIGJ5IHJlcGxhY2luZyB0aG9zZSBkeW5hbWljIGNoZWNrcyB3aXRoIGEgcHJlY29tcHV0ZWQgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrLCB3aGljaCBpcyB1cGRhdGVkIHZpYSBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAuIFRoZSBjaGFuZ2UgYWZmZWN0cyB0aGUgbWVtb3J5IHRpZXJpbmcgYW5kIE5VTUEgYmFsYW5jaW5nIGxvZ2ljLlxuQmFzZWQgb24gYWxsIG9mIHRoaXM6XG5cbkVuYWJsZUNvbmZpZ3M6IGBOVU1BYCwgYE5VTUFfTUlHUkFUSU9OYFxuRm9jdXNTeW1ib2xzOiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHNgXG5Xb3J0aEZ1enppbmc6IFRydWVcblxuXG4iLCJJbnB1dFRva2VucyI6NzU2NywiT3V0cHV0VG9rZW5zIjoxMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNjozNzoyOC40MzA4NDA2MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ2MzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyBgbm9kZV9pc190b3B0aWVyKClgIGJ5IHJlcGxhY2luZyBkeW5hbWljIG1lbW9yeSB0aWVyIGNoZWNrcyB3aXRoIGEgcHJlY29tcHV0ZWQgYHRvcHRpZXJfbm9kZXNgIG5vZGVtYXNrLiBUaGUgbm9kZW1hc2sgaXMgdXBkYXRlZCBpbiBgZXN0YWJsaXNoX2RlbW90aW9uX3RhcmdldHMoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnkgaG90cGx1Zy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIG1lbW9yeSB0aWVyaW5nIGFuZCBOVU1BIGJhbGFuY2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQsIHBhcnRpY3VsYXJseSB0aHJvdWdoIG1lbW9yeSBob3RwbHVnIGV2ZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJOVU1BX01JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVzdGFibGlzaF9kZW1vdGlvbl90YXJnZXRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIGBub2RlX2lzX3RvcHRpZXIoKWAgYnkgcmVwbGFjaW5nIGR5bmFtaWMgbWVtb3J5IHRpZXIgY2hlY2tzIHdpdGggYSBwcmVjb21wdXRlZCBgdG9wdGllcl9ub2Rlc2Agbm9kZW1hc2suIFRoZSBub2RlbWFzayBpcyB1cGRhdGVkIGluIGBlc3RhYmxpc2hfZGVtb3Rpb25fdGFyZ2V0cygpYCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIG1lbW9yeSBob3RwbHVnLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbWVtb3J5IHRpZXJpbmcgYW5kIE5VTUEgYmFsYW5jaW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCwgcGFydGljdWxhcmx5IHRocm91Z2ggbWVtb3J5IGhvdHBsdWcgZXZlbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[1] Phase: Succeeded StartedAt: 2026-07-07 06:37:40 +0000 UTC FinishedAt: 2026-07-07 06:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 06:37:40 +0000 UTC FinishedAt: 2026-07-07 06:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2] Phase: Succeeded StartedAt: 2026-07-07 06:37:40 +0000 UTC FinishedAt: 2026-07-07 11:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 06:37:40 +0000 UTC FinishedAt: 2026-07-07 11:53:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 06:37:40 +0000 UTC FinishedAt: 2026-07-07 06:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 06:37:40 +0000 UTC FinishedAt: 2026-07-07 06:37:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd8qc6/series-workflowd8qc6-convert-artifact-3119578764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 06:37:50 +0000 UTC FinishedAt: 2026-07-07 07:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 06:37:50 +0000 UTC FinishedAt: 2026-07-07 07:43:07 +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:*ae445a52-0634-43ed-8ce1-3e15398b4db4,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-workflowd8qc6/series-workflowd8qc6-convert-artifact-3119578764/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": "90a5e547-93ee-41b1-8c4e-d24651892ba2", "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-workflowd8qc6/series-workflowd8qc6-build-action-3499082938/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 06:37:50 +0000 UTC FinishedAt: 2026-07-07 07:42:57 +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:*ae445a52-0634-43ed-8ce1-3e15398b4db4,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-workflowd8qc6/series-workflowd8qc6-convert-artifact-3119578764/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": "90a5e547-93ee-41b1-8c4e-d24651892ba2", "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-workflowd8qc6/series-workflowd8qc6-build-action-3499082938/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 07:43:07 +0000 UTC FinishedAt: 2026-07-07 07:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 07:43:07 +0000 UTC FinishedAt: 2026-07-07 07:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 07:43:07 +0000 UTC FinishedAt: 2026-07-07 07:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 07:43:07 +0000 UTC FinishedAt: 2026-07-07 07:43:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd8qc6/series-workflowd8qc6-convert-artifact-1824515787/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 07:43:17 +0000 UTC FinishedAt: 2026-07-07 07:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 07:43:17 +0000 UTC FinishedAt: 2026-07-07 07:45:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*90a5e547-93ee-41b1-8c4e-d24651892ba2,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-workflowd8qc6/series-workflowd8qc6-build-action-3499082938/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-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 07:45:34 +0000 UTC FinishedAt: 2026-07-07 07:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 07:45:34 +0000 UTC FinishedAt: 2026-07-07 07:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 07:45:34 +0000 UTC FinishedAt: 2026-07-07 08:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 07:45:34 +0000 UTC FinishedAt: 2026-07-07 08:47: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:*ae445a52-0634-43ed-8ce1-3e15398b4db4,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-workflowd8qc6/series-workflowd8qc6-convert-artifact-1824515787/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": "6fabeb61-fd44-4b96-be27-eecd3a53bef1", "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-workflowd8qc6/series-workflowd8qc6-build-action-406719343/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 07:45:34 +0000 UTC FinishedAt: 2026-07-07 08:47:16 +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:*ae445a52-0634-43ed-8ce1-3e15398b4db4,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-workflowd8qc6/series-workflowd8qc6-convert-artifact-1824515787/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": "6fabeb61-fd44-4b96-be27-eecd3a53bef1", "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-workflowd8qc6/series-workflowd8qc6-build-action-406719343/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 08:47:26 +0000 UTC FinishedAt: 2026-07-07 08:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 08:47:26 +0000 UTC FinishedAt: 2026-07-07 08:47:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 08:47:26 +0000 UTC FinishedAt: 2026-07-07 08:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 08:47:26 +0000 UTC FinishedAt: 2026-07-07 08:49:27 +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:*6fabeb61-fd44-4b96-be27-eecd3a53bef1,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-workflowd8qc6/series-workflowd8qc6-build-action-406719343/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-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 08:49:36 +0000 UTC FinishedAt: 2026-07-07 11:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 08:49:36 +0000 UTC FinishedAt: 2026-07-07 11:53:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*90a5e547-93ee-41b1-8c4e-d24651892ba2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6fabeb61-fd44-4b96-be27-eecd3a53bef1,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-workflowd8qc6/series-workflowd8qc6-build-action-3499082938/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-workflowd8qc6/series-workflowd8qc6-build-action-406719343/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 08:49:36 +0000 UTC FinishedAt: 2026-07-07 08:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 08:49:36 +0000 UTC FinishedAt: 2026-07-07 08:50:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd8qc6/series-workflowd8qc6-convert-artifact-2768506468/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 08:49:36 +0000 UTC FinishedAt: 2026-07-07 08:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 08:49:36 +0000 UTC FinishedAt: 2026-07-07 08:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 08:49:36 +0000 UTC FinishedAt: 2026-07-07 08:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 08:50:18 +0000 UTC FinishedAt: 2026-07-07 11:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd8qc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["establish_demotion_targets"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"820d5dfede0cd55dcbc89ce96fcfbb11b7c457ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","NUMA_MIGRATION"],"series_id":"a954a65b-c0db-4bac-b377-6786de060899","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 08:50:18 +0000 UTC FinishedAt: 2026-07-07 11:53:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*90a5e547-93ee-41b1-8c4e-d24651892ba2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6fabeb61-fd44-4b96-be27-eecd3a53bef1,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-workflowd8qc6/series-workflowd8qc6-build-action-3499082938/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-workflowd8qc6/series-workflowd8qc6-build-action-406719343/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-workflowd8qc6/series-workflowd8qc6-convert-artifact-2768506468/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}