Name: series-workfloww6hmt Phase: Succeeded StartedAt: 2026-07-30 20:22:15 +0000 UTC FinishedAt: 2026-07-31 00:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[0] Phase: Succeeded StartedAt: 2026-07-30 20:22:15 +0000 UTC FinishedAt: 2026-07-30 20:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 20:22:15 +0000 UTC FinishedAt: 2026-07-30 20:43:21 +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": "9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON", "MEMCG" ], "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": "9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON", "MEMCG" ], "series_id": "04fbf8cf-5d8d-457a-af2f-88aa28eb9025" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzNWFlZDIzYzVhOWQ2YmNiNmE5ZGQzYTRiMmJjNjM1YjIzMWE5OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAyMDo0MjoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggYjVhMTdlYTIwMjM3OS4uODJkZGRmZTc0ZWY3YSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC0xMjc1LDkgJiM0MzsxMjc1LDI1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXG4gXHRyZXR1cm4gc2hyaW5rZXI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7LypcbiYjNDM7ICogU2NhbiB1cCB0byBAbnJfdG9fc2NhbiBwYWdlcyBhY3Jvc3MgdGhlIHBlci1ub2RlIHpzd2FwIExSVXMgb2YgQG1lbWNnXG4mIzQzOyAqIGFuZCB3cml0ZSBiYWNrIHRoZSByZWNsYWltYWJsZSBvbmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBTaW5jZSB0aGUgc2Vjb25kLWNoYW5jZSBhbGdvcml0aG0gcm90YXRlcyByZWZlcmVuY2VkIGVudHJpZXMgdG8gdGhlXG4mIzQzOyAqIExSVSB0YWlsLCB0aGUgcGVyLW5vZGUgc2NhbiBpcyBjYXBwZWQgYXQgdGhlIGN1cnJlbnQgTFJVIGxlbmd0aCBzb1xuJiM0MzsgKiBlYWNoIGVudHJ5IGlzIHNjYW5uZWQgYXQgbW9zdCBvbmNlIHBlciBjYWxsLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyXG4mIzQzOyAqIHRvIGhhbmRsZSByZXRyaWVzLCBkZWNpZGluZyB3aGV0aGVyIHRvIHNjYW4gYW5vdGhlciBtZW1jZyB0byBjb21wbGV0ZVxuJiM0MzsgKiB0aGUgZnVsbCBpdGVyYXRpb24sIG9yIHRvIHJlc2NhbiB0aGUgY3VycmVudCBtZW1jZyB0byBkcmFpbiBpdHMgenN3YXBcbiYjNDM7ICogZW50cmllcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIGlmIGF0IGxlYXN0IG9uZSBlbnRyeSB3YXMgd3JpdHRlbiBiYWNrLCAtRUFHQUlOIGlmIGVudHJpZXNcbiYjNDM7ICogd2VyZSBzY2FubmVkIGJ1dCBub25lIGNvdWxkIGJlIHdyaXR0ZW4gYmFjaywgb3IgLUVOT0VOVCBpZiBAbWVtY2cgaGFzXG4mIzQzOyAqIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHkgenN3YXAgTFJVcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBucl90b19zY2FuKVxuIHtcbi1cdGludCBuaWQsIHNocnVuayA9IDAsIHNjYW5uZWQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcbiYjNDM7XHRpbnQgbmlkLCBzaHJ1bmsgPSAwO1xuIFxuIFx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMTI5MCwxNCAmIzQzOzEzMDYsMjkgQEAgc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX05PUk1BTF9NRU1PUlkpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrID0gMTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsaztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkXG4mIzQzO1x0XHQgKiBhdCBtb3N0IG9uY2UgcGVyIGNhbGwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLFxuJiM0MztcdFx0XHRcdCBsaXN0X2xydV9jb3VudF9vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2cpKTtcbiYjNDM7XHRcdGlmICghbnJfdG9fd2FsaylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRucl9yZW1haW5pbmcgLT0gbnJfdG9fd2FsaztcbiBcdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG4tXHRcdHNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrO1xuJiM0MztcdFx0LyogUmV0dXJuIHRoZSB1bnVzZWQgc2hhcmUgb2YgdGhlIGJ1ZGdldCB0byB0aGUgcG9vbC4gKi9cbiYjNDM7XHRcdG5yX3JlbWFpbmluZyAmIzQzOz0gbnJfdG9fd2FsaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW5yX3JlbWFpbmluZylcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAoIXNjYW5uZWQpXG4mIzQzO1x0LyogTm90aGluZyB3YXMgc2Nhbm5lZDogZXZlcnkgTFJVIHVuZGVyIEBtZW1jZyB3YXMgZW1wdHkuICovXG4mIzQzO1x0aWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdHJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjtcbkBAIC0xMzU2LDExICYjNDM7MTM4NywxMiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0fSB3aGlsZSAobWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUobWVtY2cpKTtcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2enN3YXBfc2hyaW5rX2xvY2spO1xuIFxuLVx0XHRpZiAoIW1lbWNnKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBDb250aW51ZSBzaHJpbmtpbmcgd2l0aG91dCBpbmNyZW1lbnRpbmcgZmFpbHVyZXMgaWZcbi1cdFx0XHQgKiB3ZSBmb3VuZCBjYW5kaWRhdGUgbWVtY2dzIGluIHRoZSBsYXN0IHRyZWUgd2Fsay5cbi1cdFx0XHQgKi9cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIE5VTEwgbWVtY2cgZW5kcyBhIGZ1bGwgaGllcmFyY2h5IHBhc3MgKGV4Y2VwdCB3aGVuIG1lbWNnIGlzXG4mIzQzO1x0XHQgKiBkaXNhYmxlZCwgd2hlcmUgaXQgaXMgYWx3YXlzIE5VTEw6IGZhbGwgdGhyb3VnaCB0byB0aGUgcm9vdCBMUlUpLlxuJiM0MztcdFx0ICogQ291bnQgYSBmYWlsdXJlIG9ubHkgaWYgdGhlIGxhc3QgcGFzcyBmb3VuZCBubyBjYW5kaWRhdGVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG4gXHRcdFx0aWYgKCFhdHRlbXB0cyBcdTAwMjZcdTAwMjYgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXG4gXHRcdFx0XHRicmVhaztcbiBcbkBAIC0xMzY4LDcgJiM0MzsxNDAwLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRcdFx0Z290byByZXNjaGVkO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7XG4mIzQzO1x0XHRyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2csIFNXQVBfQ0xVU1RFUl9NQVgpO1xuIFx0XHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cbiBcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFxuQEAgLTEzNzksNyAmIzQzOzE0MTEsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0ICogYW5kIGZhaWx1cmVzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCA9PSAtRU5PRU5UKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRnb3RvIHJlc2NoZWQ7XG4gXHRcdCYjNDM7JiM0MzthdHRlbXB0cztcbiBcbiBcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXG5AQCAtMTQ5Miw3ICYjNDM7MTUyNCw3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX21heV96c3dhcChvYmpjZykpIHtcbiBcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbi1cdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcbiYjNDM7XHRcdGlmIChzaHJpbmtfbWVtY2cobWVtY2csIFNXQVBfQ0xVU1RFUl9NQVgpKSB7XG4gXHRcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFx0XHRcdGdvdG8gcHV0X29iamNnO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzNWFlZDIzYzVhOWQ2YmNiNmE5ZGQzYTRiMmJjNjM1YjIzMWE5OTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAyMDo0MjoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGI1YTE3ZWEyMDIzNzkuLjgyZGRkZmU3NGVmN2EgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTI3NSw5ICYjNDM7MTI3NSwyNSBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKQogCXJldHVybiBzaHJpbmtlcjsKIH0KIAotc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzOy8qCiYjNDM7ICogU2NhbiB1cCB0byBAbnJfdG9fc2NhbiBwYWdlcyBhY3Jvc3MgdGhlIHBlci1ub2RlIHpzd2FwIExSVXMgb2YgQG1lbWNnCiYjNDM7ICogYW5kIHdyaXRlIGJhY2sgdGhlIHJlY2xhaW1hYmxlIG9uZXMuCiYjNDM7ICoKJiM0MzsgKiBTaW5jZSB0aGUgc2Vjb25kLWNoYW5jZSBhbGdvcml0aG0gcm90YXRlcyByZWZlcmVuY2VkIGVudHJpZXMgdG8gdGhlCiYjNDM7ICogTFJVIHRhaWwsIHRoZSBwZXItbm9kZSBzY2FuIGlzIGNhcHBlZCBhdCB0aGUgY3VycmVudCBMUlUgbGVuZ3RoIHNvCiYjNDM7ICogZWFjaCBlbnRyeSBpcyBzY2FubmVkIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlcgomIzQzOyAqIHRvIGhhbmRsZSByZXRyaWVzLCBkZWNpZGluZyB3aGV0aGVyIHRvIHNjYW4gYW5vdGhlciBtZW1jZyB0byBjb21wbGV0ZQomIzQzOyAqIHRoZSBmdWxsIGl0ZXJhdGlvbiwgb3IgdG8gcmVzY2FuIHRoZSBjdXJyZW50IG1lbWNnIHRvIGRyYWluIGl0cyB6c3dhcAomIzQzOyAqIGVudHJpZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgaWYgYXQgbGVhc3Qgb25lIGVudHJ5IHdhcyB3cml0dGVuIGJhY2ssIC1FQUdBSU4gaWYgZW50cmllcwomIzQzOyAqIHdlcmUgc2Nhbm5lZCBidXQgbm9uZSBjb3VsZCBiZSB3cml0dGVuIGJhY2ssIG9yIC1FTk9FTlQgaWYgQG1lbWNnIGhhcwomIzQzOyAqIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHkgenN3YXAgTFJVcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbikKIHsKLQlpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl90b19zY2FuOwomIzQzOwlpbnQgbmlkLCBzaHJ1bmsgPSAwOwogCiAJaWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xMjkwLDE0ICYjNDM7MTMwNiwyOSBAQCBzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTk9STUFMX01FTU9SWSkgewotCQl1bnNpZ25lZCBsb25nIG5yX3RvX3dhbGsgPSAxOwomIzQzOwkJdW5zaWduZWQgbG9uZyBucl90b193YWxrOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCB0aGUgc2NhbiBhdCBwZXItbm9kZSBMUlUgbGVuZ3RoIHNvIGVhY2ggZW50cnkgaXMgc2Nhbm5lZAomIzQzOwkJICogYXQgbW9zdCBvbmNlIHBlciBjYWxsLgomIzQzOwkJICovCiYjNDM7CQlucl90b193YWxrID0gbWluKG5yX3JlbWFpbmluZywKJiM0MzsJCQkJIGxpc3RfbHJ1X2NvdW50X29uZSgmYW1wO3pzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnKSk7CiYjNDM7CQlpZiAoIW5yX3RvX3dhbGspCiYjNDM7CQkJY29udGludWU7CiAKJiM0MzsJCW5yX3JlbWFpbmluZyAtPSBucl90b193YWxrOwogCQlzaHJ1bmsgJiM0Mzs9IGxpc3RfbHJ1X3dhbGtfb25lKCZhbXA7enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csCiAJCQkJCSAgICAmYW1wO3Nocmlua19tZW1jZ19jYiwgTlVMTCwgJmFtcDtucl90b193YWxrKTsKLQkJc2Nhbm5lZCAmIzQzOz0gMSAtIG5yX3RvX3dhbGs7CiYjNDM7CQkvKiBSZXR1cm4gdGhlIHVudXNlZCBzaGFyZSBvZiB0aGUgYnVkZ2V0IHRvIHRoZSBwb29sLiAqLwomIzQzOwkJbnJfcmVtYWluaW5nICYjNDM7PSBucl90b193YWxrOwomIzQzOwomIzQzOwkJaWYgKCFucl9yZW1haW5pbmcpCiYjNDM7CQkJYnJlYWs7CiAJfQogCi0JaWYgKCFzY2FubmVkKQomIzQzOwkvKiBOb3RoaW5nIHdhcyBzY2FubmVkOiBldmVyeSBMUlUgdW5kZXIgQG1lbWNnIHdhcyBlbXB0eS4gKi8KJiM0MzsJaWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjsKQEAgLTEzNTYsMTEgJiM0MzsxMzg3LDEyIEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCQl9IHdoaWxlIChtZW1jZyAmYW1wOyZhbXA7ICFtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUobWVtY2cpKTsKIAkJc3Bpbl91bmxvY2soJmFtcDt6c3dhcF9zaHJpbmtfbG9jayk7CiAKLQkJaWYgKCFtZW1jZykgewotCQkJLyoKLQkJCSAqIENvbnRpbnVlIHNocmlua2luZyB3aXRob3V0IGluY3JlbWVudGluZyBmYWlsdXJlcyBpZgotCQkJICogd2UgZm91bmQgY2FuZGlkYXRlIG1lbWNncyBpbiB0aGUgbGFzdCB0cmVlIHdhbGsuCi0JCQkgKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBBIE5VTEwgbWVtY2cgZW5kcyBhIGZ1bGwgaGllcmFyY2h5IHBhc3MgKGV4Y2VwdCB3aGVuIG1lbWNnIGlzCiYjNDM7CQkgKiBkaXNhYmxlZCwgd2hlcmUgaXQgaXMgYWx3YXlzIE5VTEw6IGZhbGwgdGhyb3VnaCB0byB0aGUgcm9vdCBMUlUpLgomIzQzOwkJICogQ291bnQgYSBmYWlsdXJlIG9ubHkgaWYgdGhlIGxhc3QgcGFzcyBmb3VuZCBubyBjYW5kaWRhdGVzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW1lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkgewogCQkJaWYgKCFhdHRlbXB0cyAmYW1wOyZhbXA7ICYjNDM7JiM0MztmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKQogCQkJCWJyZWFrOwogCkBAIC0xMzY4LDcgJiM0MzsxNDAwLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAJCQlnb3RvIHJlc2NoZWQ7CiAJCX0KIAotCQlyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2cpOwomIzQzOwkJcmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnLCBTV0FQX0NMVVNURVJfTUFYKTsKIAkJLyogZHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlICovCiAJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIApAQCAtMTM3OSw3ICYjNDM7MTQxMSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCQkgKiBhbmQgZmFpbHVyZXMuCiAJCSAqLwogCQlpZiAocmV0ID09IC1FTk9FTlQpCi0JCQljb250aW51ZTsKJiM0MzsJCQlnb3RvIHJlc2NoZWQ7CiAJCSYjNDM7JiM0MzthdHRlbXB0czsKIAogCQlpZiAocmV0ICZhbXA7JmFtcDsgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpCkBAIC0xNDkyLDcgJiM0MzsxNTI0LDcgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJaWYgKG9iamNnICZhbXA7JmFtcDsgIW9ial9jZ3JvdXBfbWF5X3pzd2FwKG9iamNnKSkgewogCQltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwotCQlpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkgewomIzQzOwkJaWYgKHNocmlua19tZW1jZyhtZW1jZywgU1dBUF9DTFVTVEVSX01BWCkpIHsKIAkJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAkJCWdvdG8gcHV0X29iamNnOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIHByb3Bvc2VkIGZvciBgbW0venN3YXAuY2AuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgbmV3IHBhcmFtZXRlciwgYG5yX3RvX3NjYW5gLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgc2hyaW5rX3dvcmtlcmAgYW5kIGB6c3dhcF9zdG9yZWAgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gcGFzcyBgU1dBUF9DTFVTVEVSX01BWGAgdG8gdGhpcyBuZXcgcGFyYW1ldGVyLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBjaGFuZ2UgaW4gYHNocmlua19tZW1jZ2AgaXMgdGhlIGxvZ2ljIHRvIHNjYW4gdXAgdG8gYG5yX3RvX3NjYW5gIHBhZ2VzIGFjcm9zcyB0aGUgenN3YXAgTFJVcyBmb3IgYSBnaXZlbiBgbWVtY2dgIGFuZCByZWNsYWltIHRob3NlIHBhZ2VzIHRoYXQgcXVhbGlmeS4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIGNvbmRpdGlvbmFsIGhhbmRsaW5nIGZvciBhIE5VTEwgYG1lbWNnYCBpbiBgc2hyaW5rX3dvcmtlcmAgd2hlbiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyB0cnVlLgoKTXkgbWFpbiBmb2N1cyByaWdodCBub3cgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyByZWFjaGFibGUgY29kZSwgYW5kIGlmIHNvLCBpcyBpdCB3b3J0aCBpbnZlc3RpbmcgZWZmb3J0IGluIGZ1enppbmcuIFpzd2FwIGlzIHByZXR0eSBjcml0aWNhbCwgaXQmIzM5O3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUsIHNvIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZSBjb3VsZCBiZSBpbXBhY3RmdWwuIEdpdmVuIHRoZSBwYXRjaCYjMzk7cyB0b3VjaCBvbiBgenN3YXBfc3RvcmVgIChkdXJpbmcgc3dhcC1vdXQgdG8genN3YXApIGFuZCBgc2hyaW5rX3dvcmtlcmAgKGZvciB6c3dhcCBzaHJpbmtpbmcpLCBpdCBkZWZpbml0ZWx5IHNlZW1zIGxpa2UgdGhlcmUgY291bGQgYmUgc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHN1cmZhY2VzLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNoZWNrIHdoYXQgdGhlIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgYXJlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipaU1dBUCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gWlNXQVAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGV4YW1pbmUuIEJlZm9yZSBJIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGl0JiMzOTtzIHNldCB1cCwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgaW52b2x2ZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgWlNXQVAgcmVsaWVzIG9uLCBib3RoIGF0IHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgbGV2ZWwuIFRoaXMgaW5jbHVkZXMgbG9va2luZyBpbnRvIHRoZSBrZXJuZWwgbW9kdWxlcywgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb21wb25lbnRzIHRoYXQgWlNXQVAgaW50ZXJhY3RzIHdpdGggb3IgZGVwZW5kcyBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFdpdGhvdXQgdGhhdCBjb250ZXh0LCBJJiMzOTttIGVzc2VudGlhbGx5IGZseWluZyBibGluZCBhbmQgY291bGQgbWlzaW50ZXJwcmV0IHdoYXQgSSYjMzk7bSBzZWVpbmcuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGtleSBiZWZvcmUgSSBldmVuIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBhdHRlbnRpb24gYXJvdW5kIGxpbmUgMjIg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgaW4gdGhlc2UgS2NvbmZpZyBmaWxlcy4gVGhlIHN0cnVjdHVyZSYjMzk7cyB1c3VhbGx5IHByZXR0eSBjb25zaXN0ZW50LCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIG5ldyBvcHRpb24gZGVmaW5pdGlvbiwgYSBtZW51IGVudHJ5LCBvciBwZXJoYXBzIGEgY29uZGl0aW9uYWwgaW5jbHVkZSB0aGF0IHNldHMgdGhlIHN0YWdlIGZvciBhIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmZWF0dXJlLiBMaW5lIDIyIHNwZWNpZmljYWxseSBtaWdodCBiZSByZWxldmFudCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIEkmIzM5O20gZm9jdXNpbmcgb24uIEkmIzM5O2xsIG1lbnRhbGx5IG5vdGUgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbGluZSDigJMgYW55IHN1cnJvdW5kaW5nIGNvbW1lbnRzIG9yIG90aGVyIEtjb25maWcgb3B0aW9ucyDigJMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYW5kIGFueSBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGRlY2lkZSBpZiB0aGF0JiMzOTtzIHRoZSBjb3JyZWN0IGZpbGUsIG9yIGlmIEkgc2hvdWxkIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29uc2lkZXJpbmcgWlNXQVAgYW5kIGl0cyBSZWxhdGlvbnNoaXAgdG8gU1dBUCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBaU1dBUGAuLi4gdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBkZXBlbmRlbmN5IG9uIGBTV0FQYC4gVGhhdCYjMzk7cyBmdW5kYW1lbnRhbDsgeW91IGNhbiYjMzk7dCBoYXZlIG9uZSB3aXRob3V0IHRoZSBvdGhlciwgcmlnaHQ/IGBaU1dBUGAgaXMgZXNzZW50aWFsbHkgYW4gKmV4dGVuc2lvbiogb3IgKmVuaGFuY2VtZW50KiBvZiBzdGFuZGFyZCBzd2FwcGluZy4gSXQmIzM5O3MgYnVpbHQgb24gdGhhdCBmb3VuZGF0aW9uLgoKVGhlbiBteSBtaW5kIGRyaWZ0cyB0byB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucy4gSXMgdGhlcmUgYSB2YWx1ZSBpbiBiZWluZyBhYmxlIHRvIHR1cm4gaXQgb24gYXMgYSBkZWZhdWx0PyBUaGUgZXhpc3RlbmNlIG9mIGBaU1dBUF9ERUZBVUxUX09OYCBhcyBhbiBvcHRpb24gc3VnZ2VzdHMgdGhhdCBzb21lb25lLCBzb21ld2hlcmUsIHRob3VnaHQgaXQgd2FzIGEgZ29vZCBpZGVhLiBUaGF0IGJlZ3MgdGhlIHF1ZXN0aW9uLCBpbiB3aGF0IHNjZW5hcmlvcyB3b3VsZCBlbmFibGluZyBgWlNXQVBgIGJ5IGRlZmF1bHQgYmUgYmVuZWZpY2lhbD8gV2hhdCBhcmUgdGhlIHRyYWRlb2Zmcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipac3dhcCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB6c3dhcC4gQW5kIHRoYXQgcGhyYXNlLCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgZmV3IGNvbnNpZGVyYXRpb25zLiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgenN3YXAgaXMgYmVoYXZpbmcgb3V0LW9mLXRoZS1ib3guICBLbm93aW5nIHRoYXQgdGhlIHpzd2FwIHNocmlua2VyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbXBhY3RzIG15IHR1bmluZyBjaG9pY2VzLiBJdCBtZWFucyB0aGUgc3lzdGVtJiMzOTtzIGxpa2VseSBjb25maWd1cmVkIHRvIGFnZ3Jlc3NpdmVseSByZWNsYWltIG1lbW9yeSBmcm9tIHpzd2FwIHdoZW4gbWVtb3J5IHByZXNzdXJlIGluY3JlYXNlcy4gIAoKSSBpbW1lZGlhdGVseSBzdGFydCBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zLiBJcyB0aGlzIHRoZSAqcmlnaHQqIGRlZmF1bHQgaW4gbXkgc3BlY2lmaWMgdXNlLWNhc2U/ICBGb3Igc29tZSB3b3JrbG9hZHMsIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyBnb29kIOKAkyBpdCBlbnN1cmVzIHRoYXQgd2UgYXJlIG5vdCB1bm5lY2Vzc2FyaWx5IHVzaW5nIHN3YXAsIHRodXMgaW1wcm92aW5nIHJlc3BvbnNpdmVuZXNzLiBCdXQsIGZvciBvdGhlciB3b3JrbG9hZHMsIHdoZXJlIG1lbW9yeSBwcmVzc3VyZSBpcyBtb3JlIHN1c3RhaW5lZCwgZXhjZXNzaXZlIHNocmlua2luZyBvZiB6c3dhcCBjYW4gbGVhZCB0byBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpZiBpdCBjYXVzZXMgZXhjZXNzaXZlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gb3BlcmF0aW9ucyBhcyBkYXRhIGlzIG1vdmVkIGluIGFuZCBvdXQgb2YgenN3YXAgZnJlcXVlbnRseS4KCkkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB3aGF0IHRyYWRlLW9mZnMgYXJlIGF0IHBsYXkuICBEb2VzIHRoaXMgZGVmYXVsdCBwb3RlbnRpYWxseSBsZWFkIHRvIG1vcmUgQ1BVIGN5Y2xlcyBzcGVudCBvbiBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uPyAgSG93IGNhbiBJIGVuc3VyZSB0aGUgc2hyaW5raW5nIGJlaGF2aW9yIGRvZXNuJiMzOTt0IGJlY29tZSBhIGJvdHRsZW5lY2sgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBzdXN0YWluZWQgaGlnaCBtZW1vcnkgdXNhZ2U/ICBEbyBJIHdhbnQgdG8gYWRqdXN0IGB6c3dhcF9tYXhfcG9vbF9wZXJjZW50YCwgZm9yIGluc3RhbmNlLCB0byBtYWtlIHRoZSBzaHJpbmtlciBiZWhhdmlvciBsZXNzIGFnZ3Jlc3NpdmU/IE9yIG1heWJlIGFkanVzdCB0aGUgbWluaW11bSBwYWdlIGNvdW50IHRvIHJlY2xhaW0gKGB6c3dhcF9zaHJpbmtgKSB0byBhZGp1c3QgcmVjbGFpbSBiZWhhdmlvdXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDU6XHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxuICA0NjpcdFx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDQ4Olx0XHRkZWZhdWx0IG5cbiAgNDk6XHRcdGhlbHBcbiAgNTA6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSB6c3dhcCBzaHJpbmtlciB3aWxsIGJlIGVuYWJsZWQsIGFuZCB0aGUgcGFnZXNcbiAgNTE6XHRcdCAgc3RvcmVkIGluIHRoZSB6c3dhcCBwb29sIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVjbGFpbSAoaS5lXG4gIDUyOlx0XHQgIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFja2luZyBzd2FwIGRldmljZSkgb24gbWVtb3J5IHByZXNzdXJlLlxuICA1MzpcdFxuICA1NDpcdFx0ICBUaGlzIG1lYW5zIHRoYXQgenN3YXAgd3JpdGViYWNrIGNvdWxkIGhhcHBlbiBldmVuIGlmIHRoZSBwb29sIGlzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IHdpdGggWlNXQVAqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgb3B0aW1pemluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgSSB0aGluayB3ZSBzaG91bGQgZW5hYmxlIGBaU1dBUGAsIGBTV0FQYCwgYFpTV0FQX0RFRkFVTFRfT05gLCBhbmQgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gLiBNeSBmb2N1cyBpcyBvbiB3aGVyZSB3ZSBjYW4gZmluZS10dW5lIHRoaW5ncy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBzaHJpbmtfbWVtY2dgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBib3RoIGBzaHJpbmtfd29ya2VyYCBhbmQgYHpzd2FwX3N0b3JlYCwgc28gdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgY2hhbmdlcyBhcmUuIEkgc2VlIHRoYXQgYHNocmlua193b3JrZXJgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBnaXZlcyBpdCBpbnRlcm5hbCBsaW5rYWdlLiBOb3csIGB6c3dhcF9zdG9yZWAgaXNuJiMzOTt0IHN0YXRpYywgc28gaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UsIHNvIEkgc2hvdWxkIGxvb2sgaW50byBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgYHpzd2FwX3N0b3JlYCBmdW5jdGlvbiBpbiBgbW0venN3YXAuY2Agbm93IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQmIzM5O3MgdGhlIGtleSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgenN3YXBfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9MTMzNz1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS96c3dhcC5jLTE0MjctXG5tbS96c3dhcC5jOjE0Mjg6c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbm1tL3pzd2FwLmMtMTQyOS1cdFx0XHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS96c3dhcC5jLTE1MDctXG5tbS96c3dhcC5jOjE1MDg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTA5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA1MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKnpzd2FwX3N0b3JlIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgenN3YXBfc3RvcmVgLiBTcGVjaWZpY2FsbHksIGlzIHRoaXMgZnVuY3Rpb24sIHRoaXMgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSB6c3dhcCBpbXBsZW1lbnRhdGlvbiwgcG90ZW50aWFsbHkgZXhwb3J0ZWQgb3IgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHRoZSBjb3JlIHpzd2FwIG1vZHVsZSBpdHNlbGY/IElzIGl0IGJlaW5nIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWw/IE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIHNpZGUtZWZmZWN0cyB0aGF0IEkgbWlnaHQgYmUgbWlzc2luZyBpZiBJJiMzOTttIG9ubHkgbG9va2luZyBhdCBpdHMgdXNlIHdpdGhpbiB0aGUgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBgenN3YXBfc3RvcmVgIGlzIHBhcmFtb3VudCBmb3IgY29tcHJlaGVuZGluZyBpdHMgaW1wbGljYXRpb25zIGFjcm9zcyB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHJlZmFjdG9yaW5nLCBvciBzaW1wbHkgZW5zdXJpbmcgdGhlIG92ZXJhbGwgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfaW8uYz0yNTE9aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnN3YXBfcGx1Zylcbi0tXG5tbS9wYWdlX2lvLmMtMjg0LVxubW0vcGFnZV9pby5jOjI4NTpcdGlmICh6c3dhcF9zdG9yZShmb2xpbykpIHtcbm1tL3BhZ2VfaW8uYy0yODYtXHRcdGNvdW50X210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksIE1USFBfU1RBVF9aU1dQT1VUKTtcbi0tXG5tbS96c3dhcC5jLTQ2LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo0NzphdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTQ4LS8qIFRoZSBudW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo0OTpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xubW0venN3YXAuYy01MC1cbi0tXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03NzQtXHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbm1tL3pzd2FwLmM6Nzc1Olx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtNzc2LVx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jOjc3NzpcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xubW0venN3YXAuYy03NzgtfVxuLS1cbm1tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4MS0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcbm1tL3pzd2FwLmM6OTgyOiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtOTgzLSAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xuLS1cbm1tL3pzd2FwLmM9MTE5MD1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIyNC1cdFx0bnJfYmFja2luZyA9IHpzd2FwX3RvdGFsX3BhZ2VzKCk7XG5tbS96c3dhcC5jOjEyMjU6XHRcdG5yX3N0b3JlZCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTIyNi1cdH1cbi0tXG5tbS96c3dhcC5jPTEzMzc9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xNDI3LVxubW0venN3YXAuYzoxNDI4OnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS96c3dhcC5jLTE0MjktXHRcdFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0venN3YXAuYy0xNDY2LVx0ICogbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBHcmFiIHJlZnMgdG8gdGhlIHBvb2wgYW5kIG9iamNnLFxubW0venN3YXAuYzoxNDY3Olx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXG5tbS96c3dhcC5jLTE0NjgtXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcbi0tXG5tbS96c3dhcC5jLTE0NzUtXHR9XG5tbS96c3dhcC5jOjE0NzY6XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ3Ny1cdGlmIChlbnRyeS1cdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxubW0venN3YXAuYzoxNDc4Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ3OS1cbi0tXG5tbS96c3dhcC5jLTE1MDctXG5tbS96c3dhcC5jOjE1MDg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTA5LXtcbi0tXG5tbS96c3dhcC5jLTE1NTItXG5tbS96c3dhcC5jOjE1NTM6XHRcdGlmICghenN3YXBfc3RvcmVfcGFnZShwYWdlLCBvYmpjZywgcG9vbCkpXG5tbS96c3dhcC5jLTE1NTQtXHRcdFx0Z290byBwdXRfcG9vbDtcbi0tXG5tbS96c3dhcC5jPTE3MzM9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE3MzQte1xubW0venN3YXAuYzoxNzM1Olx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTczNi1cdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTc0MD1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcbm1tL3pzd2FwLmMtMTc0MS17XG5tbS96c3dhcC5jOjE3NDI6XHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYy0xNzQzLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gWnN3YXAgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgbXkgZnV6emluZyBlZmZvcnRzIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB6c3dhcC4gYHpzd2FwX3N0b3JlYCwgaXQgc2VlbXMsIGlzIHRoZSBwcmltZSB0YXJnZXQuIEl0JiMzOTtzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBzd2FwX3dyaXRlb3V0YCBpbiBgbW0vcGFnZV9pby5jYCwgd2hpY2gsIHdoaWxlIGEgZ29vZCBmdXp6aW5nIGNhbmRpZGF0ZSBpbiBpdHMgb3duIHJpZ2h0IGFzIGEgZ2VuZXJpYyBzd2FwIGZ1bmN0aW9uLCBzZWVtcyB0b28gYnJvYWQgaW5pdGlhbGx5LiBgenN3YXBfc3RvcmVgLCBiZWluZyB0aGUgZW50cnkgcG9pbnQgdG8genN3YXAgaXRzZWxmLCBwcmVzZW50cyBhIG1vcmUgZm9jdXNlZCBhcmVhIGZvciBleHBsb3JhdGlvbi4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzLiBUaGVyZSYjMzk7cyBgc2hyaW5rX3dvcmtlcmAsIHdoaWNoIEkgcmVtZW1iZXIgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24gcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFtYXRpb24uIEJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgbGVhbnMgdG93YXJkcyBgenN3YXBfc3RvcmVgIGJlaW5nIHRoZSBjb3JlIGVudHJ5LiBBaCwgeWVzLCBgc2hyaW5rX21lbWNnYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB6c3dhcF9zdG9yZWAgYW5kIGBzaHJpbmtfd29ya2VyYCwgYnV0IGFnYWluLCB0aGUgY2VudHJhbCBwb2ludCByZW1haW5zIGB6c3dhcF9zdG9yZWAuCgpBbHJpZ2h0LCBJIHNob3VsZCBjb25maXJtIHRoYXQgYHpzd2FwX3N0b3JlYCBpcyByZWFjaGFibGUuIExldCYjMzk7cyBzZWUuLi4gWWVwLCBkaXJlY3RseSBjYWxsZWQgZnJvbSBgc3dhcF93cml0ZW91dGAuIE5vdywgbGV0JiMzOTtzIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwb3NzaWJsZSBlbnRyeSBwb2ludHMgd2l0aGluIGBtbS96c3dhcC5jYCwgcGFydGljdWxhcmx5IGFyb3VuZCBgc2hyaW5rX3dvcmtlcmAgdG8gZ2FpbiBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IG9mIGB6c3dhcF9zdG9yZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua193b3JrZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9NzA4PXZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy03MjItICpcbm1tL3pzd2FwLmM6NzIzOiAqIFNpbmNlIHRoZSBnbG9iYWwgc2hyaW5rZXIgc2hyaW5rX3dvcmtlcigpIG1heSBob2xkIGEgcmVmZXJlbmNlXG5tbS96c3dhcC5jLTcyNC0gKiBvZiB0aGUgbWVtY2csIHdlIG11c3QgY2hlY2sgYW5kIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBpblxuLS1cbm1tL3pzd2FwLmMtNzI2LSAqXG5tbS96c3dhcC5jOjcyNzogKiBzaHJpbmtfd29ya2VyKCkgbXVzdCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhpcyBmdW5jdGlvbiByZWxlYXNlc1xubW0venN3YXAuYy03MjgtICogdGhlIHJlZmVyZW5jZSBvZiBtZW1jZyBiZWluZyBzaHJ1bmsuXG4tLVxubW0venN3YXAuYz0xMjkzPXN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBucl90b19zY2FuKVxuLS1cbm1tL3pzd2FwLmMtMTMzNi1cbm1tL3pzd2FwLmM6MTMzNzpzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbm1tL3pzd2FwLmMtMTMzOC17XG4tLVxubW0venN3YXAuYy0xMzY4LVx0ICogb2ZmbGluZSBtZW1jZyBsZWZ0IGluIHpzd2FwX25leHRfc2hyaW5rIHdpbGwgaG9sZCB0aGUgcmVmZXJlbmNlXG5tbS96c3dhcC5jOjEzNjk6XHQgKiB1bnRpbCB0aGUgbmV4dCBydW4gb2Ygc2hyaW5rX3dvcmtlcigpLlxubW0venN3YXAuYy0xMzcwLVx0ICovXG4tLVxubW0venN3YXAuYz0xNzkxPXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbi0tXG5tbS96c3dhcC5jLTE4MjAtXG5tbS96c3dhcC5jOjE4MjE6XHRJTklUX1dPUksoXHUwMDI2enN3YXBfc2hyaW5rX3dvcmssIHNocmlua193b3JrZXIpO1xubW0venN3YXAuYy0xODIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFpzd2FwJiMzOTtzIFNocmlua2luZyBNZWNoYW5pc20qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgc2hyaW5rX3dvcmtlcmAgdmFyaWFibGUuIFRoZSBjb2RlIGluaXRpYWxpemVzIGl0IGFzIGB6c3dhcF9zaHJpbmtfd29ya2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hlcmUgdGhlIGhlY2sgaXMgdGhpcyBgenN3YXBfc2hyaW5rX3dvcmtgIHN0cnVjdHVyZSBhY3R1YWxseSAqcXVldWVkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc2hyaW5raW5nIHByb2Nlc3MgaXMgc2NoZWR1bGVkIGFuZCB0cmlnZ2VyZWQuIElzIGl0IG9uIGEgd29ya3F1ZXVlPyBBIHRpbWVyPyBTb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBhZ2dyZXNzaXZlbHkgWnN3YXAgd2lsbCB0cnkgdG8gcmVjbGFpbSBtZW1vcnkgYW5kIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIHNocmlua2luZyBwcm9jZXNzLiBUaGUgcXVldWVpbmcgbWVjaGFuaXNtIHdpbGwgZGV0ZXJtaW5lIHdoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJ1biwgc28gSSBtdXN0IGZpbmQgdGhlIGNvZGUgd2hlcmUgdGhpcyB3b3JrZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGUgcXVldWUsIGluIG9yZGVyIHRvIGdhaW4gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBac3dhcCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfc2hyaW5rX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9MTY4PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqenN3YXBfbmV4dF9zaHJpbms7XG5tbS96c3dhcC5jOjE2OTpzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHpzd2FwX3Nocmlua193b3JrO1xubW0venN3YXAuYy0xNzAtc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG4tLVxubW0venN3YXAuYz0xNTA4PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE1NjgtXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGwpXG5tbS96c3dhcC5jOjE1Njk6XHRcdHF1ZXVlX3dvcmsoc2hyaW5rX3dxLCBcdTAwMjZ6c3dhcF9zaHJpbmtfd29yayk7XG5tbS96c3dhcC5jLTE1NzAtY2hlY2tfb2xkOlxuLS1cbm1tL3pzd2FwLmM9MTc5MT1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xODIwLVxubW0venN3YXAuYzoxODIxOlx0SU5JVF9XT1JLKFx1MDAyNnpzd2FwX3Nocmlua193b3JrLCBzaHJpbmtfd29ya2VyKTtcbm1tL3pzd2FwLmMtMTgyMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgWnN3YXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyB0aGUgYWN0aW9uIHN0YXJ0cyB3aXRoIGB6c3dhcF9zdG9yZWAuIFRoYXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiB0byB0cmFjZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gRnJvbSB3aGF0IEkgc2VlLCBgWlNXQVBgIGlzIGRlcGVuZGVudCBvbiBgU1dBUGAsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIGBaU1dBUF9ERUZBVUxUX09OYCBhbmQgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIGJvdGgsIGluIHR1cm4sIGRlcGVuZCBvbiBgWlNXQVBgLiBUaHVzLCB0byBlbnN1cmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGVuYWJsZToKCiogICBgU1dBUGAKKiAgIGBaU1dBUGAKKiAgIGBaU1dBUF9ERUZBVUxUX09OYAoqICAgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gCgpUaGF0IHNob3VsZCBiZSB0aGUgYmFyZSBtaW5pbXVtIHRvIG1ha2UgZXZlcnl0aGluZyB3b3JrIHJpZ2h0LgoKSG1tLCBhbnl0aGluZyBlbHNlPyBSaWdodCwgSSBzZWUgYSBtb2RpZmljYXRpb24gdG8gYHNocmlua19tZW1jZ2AsIGFuZCBpdCYjMzk7cyB1c2luZyBgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZylgLiBTaW5jZSB0aGlzIGRlYWxzIHdpdGggbWVtb3J5IGNncm91cHMsIGl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXIgaWYgYE1FTUNHYCBpcyByZXF1aXJlZCBmb3IgYFpTV0FQYC4gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGEgbGl0dGxlIGZ1cnRoZXIgdG8gY29uZmlybSBpZiBgTUVNQ0dgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBvciBhIGNvbmRpdGlvbmFsIG9uZS4gSSBiZXR0ZXIgbWFrZSBhIG5vdGUgb2YgdGhpcyB0byByZXZpc2l0IGxhdGVyLCBlc3BlY2lhbGx5IHdoZW4gSSBnZXQgdG8gYWN0dWFsbHkgKnVzaW5nKiB0aGUgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTgwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIHRoZSBaU1dBUCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBaU1dBUGAgZmVhdHVyZSBpbiB0aGlzIGNvbnRleHQuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gQWgsIG9mIGNvdXJzZSwgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB1c3VhbCBzcG90IGZvciBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpdmUgaW4gdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQgd2l0aCBgWlNXQVBgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgQ09ORklHX1pTV0FQYCBhbmQgbGlrZWx5IHNvbWUgYXNzb2NpYXRlZCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBiYWNrZW5kLCBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCBhbmQgcGVyaGFwcyBwYWdlIGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGhhcyBiZWVuIGFkYXB0ZWQgZnJvbSB3aGF0IEkmIzM5O20gdXNlZCB0by4gVGltZSB0byBnZXQgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIGluZGVwZW5kZW50IG9mIGBNRU1DR2AgYXQgZmlyc3QgZ2xhbmNlLiBIb3dldmVyLCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgc2hyaW5rX21lbWNnYCBhbmQgdGhlIGluY2x1c2lvbiBvZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBjaGVja3MgYXJlIHJhaXNpbmcgYSBmbGFnLiBJdCYjMzk7cyBtYWtpbmcgbWUgdGhpbmsgZW5hYmxpbmcgYE1FTUNHYCBtaWdodCBiZSBhIGdvb2QgbW92ZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLCBqdXN0IHRvIGJlIHN1cmUuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3ND1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4My1cbmluaXQvS2NvbmZpZzoxMDg0OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODUtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTItXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA2LVxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc1NgoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiA0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgWnN3YXAgU2hyaW5rZXIgTG9naWMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbml0L0tjb25maWdgIGFuZCBlbmFibGVzIGBNRU1DR2AuIEl04oCZcyBjYWxsZWQgYnkgYHNocmlua193b3JrZXJgIGFuZCwgaW1wb3J0YW50bHksIGB6c3dhcF9zdG9yZWAsIHdoaWNoIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHpzd2FwLiBUaGUgcGF0Y2ggYWRkcyBgbnJfdG9fc2NhbmAgdG8gYHNocmlua19tZW1jZ2AsIHdoaWNoIGxvb2tzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKYHpzd2FwX3N0b3JlYCBnZXRzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyBzd2FwcGVkIG91dC4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgZnV6eiBgenN3YXBfc3RvcmVgIGJlY2F1c2UgaXQmIzM5O3Mgbm90IGEgc3lzY2FsbCwgYnV0IEkgKmNhbiogcmVhY2ggaXQgYnkgZ2VuZXJhdGluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGZvcmNpbmcgc29tZSBzd2FwcGluZy4gU28sIHRoYXQgbWVhbnMgaXQgaXMgZmVhc2libGUgdG8gZnV6eiB0aGlzLiBJIHdpbGwgZ28gYWhlYWQgYW5kIGFkZCBgenN3YXBfc3RvcmVgIHRvIGBGb2N1c1N5bWJvbHNgLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgenN3YXBfc3RvcmVgIGlzIHRoZSBiZXN0IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBhbmQgaXQgaXMuIEl0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHpzd2FwLiBgc2hyaW5rX3dvcmtlcmAgaXMgcGFydCBvZiBhIHdvcmtxdWV1ZSwgc28gaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGNhbGxhYmxlLCBhbmQgYHNocmlua19tZW1jZ2AgaXMgc3RhdGljLiBTbywgZnV6emluZyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYHpzd2FwX3N0b3JlYCwgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gT2theSwgc28gYHNocmlua19tZW1jZ2Agbm93IGFjY2VwdHMgYG5yX3RvX3NjYW5gLCBgc2hyaW5rX3dvcmtlcmAgcGFzc2VzIGBTV0FQX0NMVVNURVJfTUFYYCwgYW5kIGB6c3dhcF9zdG9yZWAgYWxzbyBwYXNzZXMgYFNXQVBfQ0xVU1RFUl9NQVhgLiBUaGlzIGlzIG1ha2luZyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCByaWdodCBpbiB0aGUgenN3YXAgcGF0aC4gSXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyB0aGUgenN3YXAgc2hyaW5rZXIgbG9naWMgYW5kIGhvdyBpdCBzY2FucyBwYWdlcyBhY3Jvc3MgcGVyLW5vZGUgTFJVcywgd2hpY2ggaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEuIEl04oCZcyByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgc3dhcHBpbmcgYW5kIGZ1enppbmcgYHpzd2FwX3N0b3JlYCBpcyB0aGUgYmVzdCB3YXkgdG8gZXhlcmNpc2UgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4KCk9rYXksIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBzaHJpbmtlciBsb2dpYyB0byBzY2FuIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzIGFjcm9zcyBwZXItbm9kZSBMUlVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwcGluZy4gRnV6emluZyBgenN3YXBfc3RvcmVgIHdpbGwgaGVscCBleGVyY2lzZSB0aGlzIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjE1LjA5Mjg4NDY4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjU4MzkzMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJaU1dBUF9ERUZBVUxUX09OXCIsXG4gICAgXCJaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MTUuMDkyODkyNzQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxNDAwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMzVhZWQyM2M1YTlkNmJjYjZhOWRkM2E0YjJiYzYzNWIyMzFhOTk3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDIwOjQyOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggYjVhMTdlYTIwMjM3OS4uODJkZGRmZTc0ZWY3YSAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC0xMjc1LDkgKzEyNzUsMjUgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG4gXFx0cmV0dXJuIHNocmlua2VyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuKy8qXFxuKyAqIFNjYW4gdXAgdG8gQG5yX3RvX3NjYW4gcGFnZXMgYWNyb3NzIHRoZSBwZXItbm9kZSB6c3dhcCBMUlVzIG9mIEBtZW1jZ1xcbisgKiBhbmQgd3JpdGUgYmFjayB0aGUgcmVjbGFpbWFibGUgb25lcy5cXG4rICpcXG4rICogU2luY2UgdGhlIHNlY29uZC1jaGFuY2UgYWxnb3JpdGhtIHJvdGF0ZXMgcmVmZXJlbmNlZCBlbnRyaWVzIHRvIHRoZVxcbisgKiBMUlUgdGFpbCwgdGhlIHBlci1ub2RlIHNjYW4gaXMgY2FwcGVkIGF0IHRoZSBjdXJyZW50IExSVSBsZW5ndGggc29cXG4rICogZWFjaCBlbnRyeSBpcyBzY2FubmVkIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlclxcbisgKiB0byBoYW5kbGUgcmV0cmllcywgZGVjaWRpbmcgd2hldGhlciB0byBzY2FuIGFub3RoZXIgbWVtY2cgdG8gY29tcGxldGVcXG4rICogdGhlIGZ1bGwgaXRlcmF0aW9uLCBvciB0byByZXNjYW4gdGhlIGN1cnJlbnQgbWVtY2cgdG8gZHJhaW4gaXRzIHpzd2FwXFxuKyAqIGVudHJpZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgd2FzIHdyaXR0ZW4gYmFjaywgLUVBR0FJTiBpZiBlbnRyaWVzXFxuKyAqIHdlcmUgc2Nhbm5lZCBidXQgbm9uZSBjb3VsZCBiZSB3cml0dGVuIGJhY2ssIG9yIC1FTk9FTlQgaWYgQG1lbWNnIGhhc1xcbisgKiB3cml0ZWJhY2sgZGlzYWJsZWQsIGlzIGEgem9tYmllIGNncm91cCwgb3IgaGFzIGVtcHR5IHpzd2FwIExSVXMuXFxuKyAqL1xcbitzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbilcXG4ge1xcbi1cXHRpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl90b19zY2FuO1xcbitcXHRpbnQgbmlkLCBzaHJ1bmsgPSAwO1xcbiBcXG4gXFx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuQEAgLTEyOTAsMTQgKzEzMDYsMjkgQEAgc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX05PUk1BTF9NRU1PUlkpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrID0gMTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkXFxuK1xcdFxcdCAqIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLFxcbitcXHRcXHRcXHRcXHQgbGlzdF9scnVfY291bnRfb25lKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZykpO1xcbitcXHRcXHRpZiAoIW5yX3RvX3dhbGspXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0bnJfcmVtYWluaW5nIC09IG5yX3RvX3dhbGs7XFxuIFxcdFxcdHNocnVuayArPSBsaXN0X2xydV93YWxrX29uZShcXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLCBOVUxMLCBcXHUwMDI2bnJfdG9fd2Fsayk7XFxuLVxcdFxcdHNjYW5uZWQgKz0gMSAtIG5yX3RvX3dhbGs7XFxuK1xcdFxcdC8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovXFxuK1xcdFxcdG5yX3JlbWFpbmluZyArPSBucl90b193YWxrO1xcbitcXG4rXFx0XFx0aWYgKCFucl9yZW1haW5pbmcpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXNjYW5uZWQpXFxuK1xcdC8qIE5vdGhpbmcgd2FzIHNjYW5uZWQ6IGV2ZXJ5IExSVSB1bmRlciBAbWVtY2cgd2FzIGVtcHR5LiAqL1xcbitcXHRpZiAobnJfcmVtYWluaW5nID09IG5yX3RvX3NjYW4pXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4gXFx0cmV0dXJuIHNocnVuayA/IDAgOiAtRUFHQUlOO1xcbkBAIC0xMzU2LDExICsxMzg3LDEyIEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiBcXHRcXHR9IHdoaWxlIChtZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF90cnlnZXRfb25saW5lKG1lbWNnKSk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ6c3dhcF9zaHJpbmtfbG9jayk7XFxuIFxcbi1cXHRcXHRpZiAoIW1lbWNnKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIENvbnRpbnVlIHNocmlua2luZyB3aXRob3V0IGluY3JlbWVudGluZyBmYWlsdXJlcyBpZlxcbi1cXHRcXHRcXHQgKiB3ZSBmb3VuZCBjYW5kaWRhdGUgbWVtY2dzIGluIHRoZSBsYXN0IHRyZWUgd2Fsay5cXG4tXFx0XFx0XFx0ICovXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgTlVMTCBtZW1jZyBlbmRzIGEgZnVsbCBoaWVyYXJjaHkgcGFzcyAoZXhjZXB0IHdoZW4gbWVtY2cgaXNcXG4rXFx0XFx0ICogZGlzYWJsZWQsIHdoZXJlIGl0IGlzIGFsd2F5cyBOVUxMOiBmYWxsIHRocm91Z2ggdG8gdGhlIHJvb3QgTFJVKS5cXG4rXFx0XFx0ICogQ291bnQgYSBmYWlsdXJlIG9ubHkgaWYgdGhlIGxhc3QgcGFzcyBmb3VuZCBubyBjYW5kaWRhdGVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XFxuIFxcdFxcdFxcdGlmICghYXR0ZW1wdHMgXFx1MDAyNlxcdTAwMjYgKytmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTEzNjgsNyArMTQwMCw3IEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiBcXHRcXHRcXHRnb3RvIHJlc2NoZWQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7XFxuK1xcdFxcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZywgU1dBUF9DTFVTVEVSX01BWCk7XFxuIFxcdFxcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqL1xcbiBcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIFxcbkBAIC0xMzc5LDcgKzE0MTEsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFx0XFx0ICogYW5kIGZhaWx1cmVzLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHJldCA9PSAtRU5PRU5UKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0Z290byByZXNjaGVkO1xcbiBcXHRcXHQrK2F0dGVtcHRzO1xcbiBcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiArK2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXFxuQEAgLTE0OTIsNyArMTUyNCw3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0aWYgKG9iamNnIFxcdTAwMjZcXHUwMDI2ICFvYmpfY2dyb3VwX21heV96c3dhcChvYmpjZykpIHtcXG4gXFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4tXFx0XFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcXG4rXFx0XFx0aWYgKHNocmlua19tZW1jZyhtZW1jZywgU1dBUF9DTFVTVEVSX01BWCkpIHtcXG4gXFx0XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXHRcXHRcXHRnb3RvIHB1dF9vYmpjZztcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MjoxNS41NjMxMjQ1MzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Mjc4ODE0MTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBzaHJpbmtlciBsb2dpYyB0byBzY2FuIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzIGFjcm9zcyBwZXItbm9kZSBMUlVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwcGluZy4gRnV6emluZyBgenN3YXBfc3RvcmVgIHdpbGwgaGVscCBleGVyY2lzZSB0aGlzIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzNWFlZDIzYzVhOWQ2YmNiNmE5ZGQzYTRiMmJjNjM1YjIzMWE5OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAyMDo0MjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBiNWExN2VhMjAyMzc5Li44MmRkZGZlNzRlZjdhIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTEyNzUsOSArMTI3NSwyNSBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuIFx0cmV0dXJuIHNocmlua2VyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rLypcbisgKiBTY2FuIHVwIHRvIEBucl90b19zY2FuIHBhZ2VzIGFjcm9zcyB0aGUgcGVyLW5vZGUgenN3YXAgTFJVcyBvZiBAbWVtY2dcbisgKiBhbmQgd3JpdGUgYmFjayB0aGUgcmVjbGFpbWFibGUgb25lcy5cbisgKlxuKyAqIFNpbmNlIHRoZSBzZWNvbmQtY2hhbmNlIGFsZ29yaXRobSByb3RhdGVzIHJlZmVyZW5jZWQgZW50cmllcyB0byB0aGVcbisgKiBMUlUgdGFpbCwgdGhlIHBlci1ub2RlIHNjYW4gaXMgY2FwcGVkIGF0IHRoZSBjdXJyZW50IExSVSBsZW5ndGggc29cbisgKiBlYWNoIGVudHJ5IGlzIHNjYW5uZWQgYXQgbW9zdCBvbmNlIHBlciBjYWxsLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyXG4rICogdG8gaGFuZGxlIHJldHJpZXMsIGRlY2lkaW5nIHdoZXRoZXIgdG8gc2NhbiBhbm90aGVyIG1lbWNnIHRvIGNvbXBsZXRlXG4rICogdGhlIGZ1bGwgaXRlcmF0aW9uLCBvciB0byByZXNjYW4gdGhlIGN1cnJlbnQgbWVtY2cgdG8gZHJhaW4gaXRzIHpzd2FwXG4rICogZW50cmllcy5cbisgKlxuKyAqIFJldHVybjogMCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgd2FzIHdyaXR0ZW4gYmFjaywgLUVBR0FJTiBpZiBlbnRyaWVzXG4rICogd2VyZSBzY2FubmVkIGJ1dCBub25lIGNvdWxkIGJlIHdyaXR0ZW4gYmFjaywgb3IgLUVOT0VOVCBpZiBAbWVtY2cgaGFzXG4rICogd3JpdGViYWNrIGRpc2FibGVkLCBpcyBhIHpvbWJpZSBjZ3JvdXAsIG9yIGhhcyBlbXB0eSB6c3dhcCBMUlVzLlxuKyAqL1xuK3N0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBucl90b19zY2FuKVxuIHtcbi1cdGludCBuaWQsIHNocnVuayA9IDAsIHNjYW5uZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl90b19zY2FuO1xuK1x0aW50IG5pZCwgc2hydW5rID0gMDtcbiBcbiBcdGlmICghbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTEyOTAsMTQgKzEzMDYsMjkgQEAgc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX05PUk1BTF9NRU1PUlkpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrID0gMTtcbitcdFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgdGhlIHNjYW4gYXQgcGVyLW5vZGUgTFJVIGxlbmd0aCBzbyBlYWNoIGVudHJ5IGlzIHNjYW5uZWRcbitcdFx0ICogYXQgbW9zdCBvbmNlIHBlciBjYWxsLlxuK1x0XHQgKi9cbitcdFx0bnJfdG9fd2FsayA9IG1pbihucl9yZW1haW5pbmcsXG4rXHRcdFx0XHQgbGlzdF9scnVfY291bnRfb25lKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnKSk7XG4rXHRcdGlmICghbnJfdG9fd2FsaylcbitcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0bnJfcmVtYWluaW5nIC09IG5yX3RvX3dhbGs7XG4gXHRcdHNocnVuayArPSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG4tXHRcdHNjYW5uZWQgKz0gMSAtIG5yX3RvX3dhbGs7XG4rXHRcdC8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovXG4rXHRcdG5yX3JlbWFpbmluZyArPSBucl90b193YWxrO1xuK1xuK1x0XHRpZiAoIW5yX3JlbWFpbmluZylcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghc2Nhbm5lZClcbitcdC8qIE5vdGhpbmcgd2FzIHNjYW5uZWQ6IGV2ZXJ5IExSVSB1bmRlciBAbWVtY2cgd2FzIGVtcHR5LiAqL1xuK1x0aWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdHJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjtcbkBAIC0xMzU2LDExICsxMzg3LDEyIEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIFx0XHR9IHdoaWxlIChtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShtZW1jZykpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ6c3dhcF9zaHJpbmtfbG9jayk7XG4gXG4tXHRcdGlmICghbWVtY2cpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIENvbnRpbnVlIHNocmlua2luZyB3aXRob3V0IGluY3JlbWVudGluZyBmYWlsdXJlcyBpZlxuLVx0XHRcdCAqIHdlIGZvdW5kIGNhbmRpZGF0ZSBtZW1jZ3MgaW4gdGhlIGxhc3QgdHJlZSB3YWxrLlxuLVx0XHRcdCAqL1xuK1x0XHQvKlxuK1x0XHQgKiBBIE5VTEwgbWVtY2cgZW5kcyBhIGZ1bGwgaGllcmFyY2h5IHBhc3MgKGV4Y2VwdCB3aGVuIG1lbWNnIGlzXG4rXHRcdCAqIGRpc2FibGVkLCB3aGVyZSBpdCBpcyBhbHdheXMgTlVMTDogZmFsbCB0aHJvdWdoIHRvIHRoZSByb290IExSVSkuXG4rXHRcdCAqIENvdW50IGEgZmFpbHVyZSBvbmx5IGlmIHRoZSBsYXN0IHBhc3MgZm91bmQgbm8gY2FuZGlkYXRlcy5cbitcdFx0ICovXG4rXHRcdGlmICghbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiBcdFx0XHRpZiAoIWF0dGVtcHRzIFx1MDAyNlx1MDAyNiArK2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXG4gXHRcdFx0XHRicmVhaztcbiBcbkBAIC0xMzY4LDcgKzE0MDAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0XHRnb3RvIHJlc2NoZWQ7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnKTtcbitcdFx0cmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnLCBTV0FQX0NMVVNURVJfTUFYKTtcbiBcdFx0LyogZHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlICovXG4gXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC0xMzc5LDcgKzE0MTEsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0ICogYW5kIGZhaWx1cmVzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCA9PSAtRU5PRU5UKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGdvdG8gcmVzY2hlZDtcbiBcdFx0KythdHRlbXB0cztcbiBcbiBcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgKytmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxuQEAgLTE0OTIsNyArMTUyNCw3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX21heV96c3dhcChvYmpjZykpIHtcbiBcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbi1cdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcbitcdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZywgU1dBUF9DTFVTVEVSX01BWCkpIHtcbiBcdFx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRcdFx0Z290byBwdXRfb2JqY2c7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjE1LjU2MzEyNjMyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDI1NjYwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBiZWVuIHByb3Bvc2VkIGZvciBgbW0venN3YXAuY2AuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgbmV3IHBhcmFtZXRlciwgYG5yX3RvX3NjYW5gLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgc2hyaW5rX3dvcmtlcmAgYW5kIGB6c3dhcF9zdG9yZWAgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gcGFzcyBgU1dBUF9DTFVTVEVSX01BWGAgdG8gdGhpcyBuZXcgcGFyYW1ldGVyLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBjaGFuZ2UgaW4gYHNocmlua19tZW1jZ2AgaXMgdGhlIGxvZ2ljIHRvIHNjYW4gdXAgdG8gYG5yX3RvX3NjYW5gIHBhZ2VzIGFjcm9zcyB0aGUgenN3YXAgTFJVcyBmb3IgYSBnaXZlbiBgbWVtY2dgIGFuZCByZWNsYWltIHRob3NlIHBhZ2VzIHRoYXQgcXVhbGlmeS4gVGhlcmUncyBhbHNvIHNvbWUgY29uZGl0aW9uYWwgaGFuZGxpbmcgZm9yIGEgTlVMTCBgbWVtY2dgIGluIGBzaHJpbmtfd29ya2VyYCB3aGVuIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGlzIHRydWUuXG5cbk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIGNvZGUsIGFuZCBpZiBzbywgaXMgaXQgd29ydGggaW52ZXN0aW5nIGVmZm9ydCBpbiBmdXp6aW5nLiBac3dhcCBpcyBwcmV0dHkgY3JpdGljYWwsIGl0J3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUsIHNvIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZSBjb3VsZCBiZSBpbXBhY3RmdWwuIEdpdmVuIHRoZSBwYXRjaCdzIHRvdWNoIG9uIGB6c3dhcF9zdG9yZWAgKGR1cmluZyBzd2FwLW91dCB0byB6c3dhcCkgYW5kIGBzaHJpbmtfd29ya2VyYCAoZm9yIHpzd2FwIHNocmlua2luZyksIGl0IGRlZmluaXRlbHkgc2VlbXMgbGlrZSB0aGVyZSBjb3VsZCBiZSBzb21lIGludGVyZXN0aW5nIGZ1enppbmcgc3VyZmFjZXMuXG5cbk5vdywgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIHdoYXQgdGhlIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgYXJlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MjAuNDY1Njk0OTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDE2MTg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MjoyMC41Njk4NjIyMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA1MTcyNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipaU1dBUCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBaU1dBUCBpcyB0aGUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZXhhbWluZS4gQmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgKmhvdyogaXQncyBzZXQgdXAsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGludm9sdmVkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IFpTV0FQIHJlbGllcyBvbiwgYm90aCBhdCB0aGUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGxldmVsLiBUaGlzIGluY2x1ZGVzIGxvb2tpbmcgaW50byB0aGUga2VybmVsIG1vZHVsZXMsIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29tcG9uZW50cyB0aGF0IFpTV0FQIGludGVyYWN0cyB3aXRoIG9yIGRlcGVuZHMgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBXaXRob3V0IHRoYXQgY29udGV4dCwgSSdtIGVzc2VudGlhbGx5IGZseWluZyBibGluZCBhbmQgY291bGQgbWlzaW50ZXJwcmV0IHdoYXQgSSdtIHNlZWluZy4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMga2V5IGJlZm9yZSBJIGV2ZW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjIzLjY3NTAzNzM4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkxMjIyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MjMuODU0MTY1MjI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3Nzg3MTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGF0dGVudGlvbiBhcm91bmQgbGluZSAyMiDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IGluIHRoZXNlIEtjb25maWcgZmlsZXMuIFRoZSBzdHJ1Y3R1cmUncyB1c3VhbGx5IHByZXR0eSBjb25zaXN0ZW50LCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgbmV3IG9wdGlvbiBkZWZpbml0aW9uLCBhIG1lbnUgZW50cnksIG9yIHBlcmhhcHMgYSBjb25kaXRpb25hbCBpbmNsdWRlIHRoYXQgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgcmVsYXRlZCBjb25maWd1cmF0aW9uIGZlYXR1cmUuIExpbmUgMjIgc3BlY2lmaWNhbGx5IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gSSdtIGZvY3VzaW5nIG9uLiBJJ2xsIG1lbnRhbGx5IG5vdGUgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbGluZSDigJMgYW55IHN1cnJvdW5kaW5nIGNvbW1lbnRzIG9yIG90aGVyIEtjb25maWcgb3B0aW9ucyDigJMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYW5kIGFueSBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGRlY2lkZSBpZiB0aGF0J3MgdGhlIGNvcnJlY3QgZmlsZSwgb3IgaWYgSSBzaG91bGQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjI2LjczMjAzOTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MjoyNi43MzIyMDM4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTkyMzc0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNvbnNpZGVyaW5nIFpTV0FQIGFuZCBpdHMgUmVsYXRpb25zaGlwIHRvIFNXQVAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYFpTV0FQYC4uLiB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGRlcGVuZGVuY3kgb24gYFNXQVBgLiBUaGF0J3MgZnVuZGFtZW50YWw7IHlvdSBjYW4ndCBoYXZlIG9uZSB3aXRob3V0IHRoZSBvdGhlciwgcmlnaHQ/IGBaU1dBUGAgaXMgZXNzZW50aWFsbHkgYW4gKmV4dGVuc2lvbiogb3IgKmVuaGFuY2VtZW50KiBvZiBzdGFuZGFyZCBzd2FwcGluZy4gSXQncyBidWlsdCBvbiB0aGF0IGZvdW5kYXRpb24uXG5cblRoZW4gbXkgbWluZCBkcmlmdHMgdG8gdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMuIElzIHRoZXJlIGEgdmFsdWUgaW4gYmVpbmcgYWJsZSB0byB0dXJuIGl0IG9uIGFzIGEgZGVmYXVsdD8gVGhlIGV4aXN0ZW5jZSBvZiBgWlNXQVBfREVGQVVMVF9PTmAgYXMgYW4gb3B0aW9uIHN1Z2dlc3RzIHRoYXQgc29tZW9uZSwgc29tZXdoZXJlLCB0aG91Z2h0IGl0IHdhcyBhIGdvb2QgaWRlYS4gVGhhdCBiZWdzIHRoZSBxdWVzdGlvbiwgaW4gd2hhdCBzY2VuYXJpb3Mgd291bGQgZW5hYmxpbmcgYFpTV0FQYCBieSBkZWZhdWx0IGJlIGJlbmVmaWNpYWw/IFdoYXQgYXJlIHRoZSB0cmFkZW9mZnM/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MjozMC4wMzE0NDMzOTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjMwLjAzMTU1NDQzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIxOTc3ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlpzd2FwIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB6c3dhcC4gQW5kIHRoYXQgcGhyYXNlLCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgZmV3IGNvbnNpZGVyYXRpb25zLiBJdCdzIGEga2V5IGRldGFpbCB0byB1bmRlcnN0YW5kIGhvdyB6c3dhcCBpcyBiZWhhdmluZyBvdXQtb2YtdGhlLWJveC4gIEtub3dpbmcgdGhhdCB0aGUgenN3YXAgc2hyaW5rZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGltcGFjdHMgbXkgdHVuaW5nIGNob2ljZXMuIEl0IG1lYW5zIHRoZSBzeXN0ZW0ncyBsaWtlbHkgY29uZmlndXJlZCB0byBhZ2dyZXNzaXZlbHkgcmVjbGFpbSBtZW1vcnkgZnJvbSB6c3dhcCB3aGVuIG1lbW9yeSBwcmVzc3VyZSBpbmNyZWFzZXMuICBcblxuSSBpbW1lZGlhdGVseSBzdGFydCBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zLiBJcyB0aGlzIHRoZSAqcmlnaHQqIGRlZmF1bHQgaW4gbXkgc3BlY2lmaWMgdXNlLWNhc2U/ICBGb3Igc29tZSB3b3JrbG9hZHMsIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyBnb29kIOKAkyBpdCBlbnN1cmVzIHRoYXQgd2UgYXJlIG5vdCB1bm5lY2Vzc2FyaWx5IHVzaW5nIHN3YXAsIHRodXMgaW1wcm92aW5nIHJlc3BvbnNpdmVuZXNzLiBCdXQsIGZvciBvdGhlciB3b3JrbG9hZHMsIHdoZXJlIG1lbW9yeSBwcmVzc3VyZSBpcyBtb3JlIHN1c3RhaW5lZCwgZXhjZXNzaXZlIHNocmlua2luZyBvZiB6c3dhcCBjYW4gbGVhZCB0byBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpZiBpdCBjYXVzZXMgZXhjZXNzaXZlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gb3BlcmF0aW9ucyBhcyBkYXRhIGlzIG1vdmVkIGluIGFuZCBvdXQgb2YgenN3YXAgZnJlcXVlbnRseS5cblxuSSdkIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0cmFkZS1vZmZzIGFyZSBhdCBwbGF5LiAgRG9lcyB0aGlzIGRlZmF1bHQgcG90ZW50aWFsbHkgbGVhZCB0byBtb3JlIENQVSBjeWNsZXMgc3BlbnQgb24gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbj8gIEhvdyBjYW4gSSBlbnN1cmUgdGhlIHNocmlua2luZyBiZWhhdmlvciBkb2Vzbid0IGJlY29tZSBhIGJvdHRsZW5lY2sgd2hlbiBJJ20gZGVhbGluZyB3aXRoIHN1c3RhaW5lZCBoaWdoIG1lbW9yeSB1c2FnZT8gIERvIEkgd2FudCB0byBhZGp1c3QgYHpzd2FwX21heF9wb29sX3BlcmNlbnRgLCBmb3IgaW5zdGFuY2UsIHRvIG1ha2UgdGhlIHNocmlua2VyIGJlaGF2aW9yIGxlc3MgYWdncmVzc2l2ZT8gT3IgbWF5YmUgYWRqdXN0IHRoZSBtaW5pbXVtIHBhZ2UgY291bnQgdG8gcmVjbGFpbSAoYHpzd2FwX3Nocmlua2ApIHRvIGFkanVzdCByZWNsYWltIGJlaGF2aW91cj9cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MzMuNzUzNTM0ODM1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxuICA0NjpcXHRcXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBuXFxuICA0OTpcXHRcXHRoZWxwXFxuICA1MDpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXFxuICA1MTpcXHRcXHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxcbiAgNTI6XFx0XFx0ICB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UpIG9uIG1lbW9yeSBwcmVzc3VyZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBUaGlzIG1lYW5zIHRoYXQgenN3YXAgd3JpdGViYWNrIGNvdWxkIGhhcHBlbiBldmVuIGlmIHRoZSBwb29sIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjMzLjc1MzY4OTU5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY3NDI0OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCB3aXRoIFpTV0FQKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBvcHRpbWl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBJIHRoaW5rIHdlIHNob3VsZCBlbmFibGUgYFpTV0FQYCwgYFNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIE15IGZvY3VzIGlzIG9uIHdoZXJlIHdlIGNhbiBmaW5lLXR1bmUgdGhpbmdzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHNocmlua19tZW1jZ2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGJvdGggYHNocmlua193b3JrZXJgIGFuZCBgenN3YXBfc3RvcmVgLCBzbyB0aGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGNoYW5nZXMgYXJlLiBJIHNlZSB0aGF0IGBzaHJpbmtfd29ya2VyYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggZ2l2ZXMgaXQgaW50ZXJuYWwgbGlua2FnZS4gTm93LCBgenN3YXBfc3RvcmVgIGlzbid0IHN0YXRpYywgc28gaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UsIHNvIEkgc2hvdWxkIGxvb2sgaW50byBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgYHpzd2FwX3N0b3JlYCBmdW5jdGlvbiBpbiBgbW0venN3YXAuY2Agbm93IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQncyB0aGUga2V5IG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjM3LjUyMTExNzA1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNzg3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2wgenN3YXBfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTEzMzc9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS96c3dhcC5jLTE0MjctXFxubW0venN3YXAuYzoxNDI4OnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxubW0venN3YXAuYy0xNDI5LVxcdFxcdFxcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0venN3YXAuYy0xNTA3LVxcbm1tL3pzd2FwLmM6MTUwODpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MzcuNjU0OTA5OTY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDQ4NjQ5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKnpzd2FwX3N0b3JlIElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHpzd2FwX3N0b3JlYC4gU3BlY2lmaWNhbGx5LCBpcyB0aGlzIGZ1bmN0aW9uLCB0aGlzIGNyaXRpY2FsIGNvbXBvbmVudCBvZiB0aGUgenN3YXAgaW1wbGVtZW50YXRpb24sIHBvdGVudGlhbGx5IGV4cG9ydGVkIG9yIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSB0aGUgY29yZSB6c3dhcCBtb2R1bGUgaXRzZWxmPyBJcyBpdCBiZWluZyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsPyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhcm91bmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBzaWRlLWVmZmVjdHMgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcgaWYgSSdtIG9ubHkgbG9va2luZyBhdCBpdHMgdXNlIHdpdGhpbiB0aGUgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBgenN3YXBfc3RvcmVgIGlzIHBhcmFtb3VudCBmb3IgY29tcHJlaGVuZGluZyBpdHMgaW1wbGljYXRpb25zIGFjcm9zcyB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHJlZmFjdG9yaW5nLCBvciBzaW1wbHkgZW5zdXJpbmcgdGhlIG92ZXJhbGwgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjQwLjQ5OTc3NzM5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDQzNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2lvLmM9MjUxPWludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipzd2FwX3BsdWcpXFxuLS1cXG5tbS9wYWdlX2lvLmMtMjg0LVxcbm1tL3BhZ2VfaW8uYzoyODU6XFx0aWYgKHpzd2FwX3N0b3JlKGZvbGlvKSkge1xcbm1tL3BhZ2VfaW8uYy0yODYtXFx0XFx0Y291bnRfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSwgTVRIUF9TVEFUX1pTV1BPVVQpO1xcbi0tXFxubW0venN3YXAuYy00Ni0vKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cXG5tbS96c3dhcC5jOjQ3OmF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcXG5tbS96c3dhcC5jLTQ4LS8qIFRoZSBudW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6NDk6c3RhdGljIGF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcXG5tbS96c3dhcC5jLTUwLVxcbi0tXFxubW0venN3YXAuYz03NjU9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbi0tXFxubW0venN3YXAuYy03NzQtXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbm1tL3pzd2FwLmM6Nzc1OlxcdFxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTc3Ni1cXHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jOjc3NzpcXHRhdG9taWNfbG9uZ19kZWMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy03NzgtfVxcbi0tXFxubW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05ODEtICogdG8gdGhlIHN3YXAgZGV2aWNlLiAgV2UgYXJlIGJhc2ljYWxseSByZXN1bWluZyB0aGUgc2FtZSBzd2FwXFxubW0venN3YXAuYzo5ODI6ICogd3JpdGViYWNrIHBhdGggdGhhdCB3YXMgaW50ZXJjZXB0ZWQgd2l0aCB0aGUgenN3YXBfc3RvcmUoKVxcbm1tL3pzd2FwLmMtOTgzLSAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xcbi0tXFxubW0venN3YXAuYz0xMTkwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS96c3dhcC5jLTEyMjQtXFx0XFx0bnJfYmFja2luZyA9IHpzd2FwX3RvdGFsX3BhZ2VzKCk7XFxubW0venN3YXAuYzoxMjI1OlxcdFxcdG5yX3N0b3JlZCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy0xMjI2LVxcdH1cXG4tLVxcbm1tL3pzd2FwLmM9MTMzNz1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm1tL3pzd2FwLmMtMTQyNy1cXG5tbS96c3dhcC5jOjE0Mjg6c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS96c3dhcC5jLTE0MjktXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5tbS96c3dhcC5jLTE0NjYtXFx0ICogbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBHcmFiIHJlZnMgdG8gdGhlIHBvb2wgYW5kIG9iamNnLFxcbm1tL3pzd2FwLmM6MTQ2NzpcXHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cXG5tbS96c3dhcC5jLTE0NjgtXFx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXFxuLS1cXG5tbS96c3dhcC5jLTE0NzUtXFx0fVxcbm1tL3pzd2FwLmM6MTQ3NjpcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy0xNDc3LVxcdGlmIChlbnRyeS1cXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcXG5tbS96c3dhcC5jOjE0Nzg6XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtMTQ3OS1cXG4tLVxcbm1tL3pzd2FwLmMtMTUwNy1cXG5tbS96c3dhcC5jOjE1MDg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTUwOS17XFxuLS1cXG5tbS96c3dhcC5jLTE1NTItXFxubW0venN3YXAuYzoxNTUzOlxcdFxcdGlmICghenN3YXBfc3RvcmVfcGFnZShwYWdlLCBvYmpjZywgcG9vbCkpXFxubW0venN3YXAuYy0xNTU0LVxcdFxcdFxcdGdvdG8gcHV0X3Bvb2w7XFxuLS1cXG5tbS96c3dhcC5jPTE3MzM9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xNzM0LXtcXG5tbS96c3dhcC5jOjE3MzU6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy0xNzM2LVxcdHJldHVybiAwO1xcbi0tXFxubW0venN3YXAuYz0xNzQwPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbm1tL3pzd2FwLmMtMTc0MS17XFxubW0venN3YXAuYzoxNzQyOlxcdCp2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtMTc0My1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6NDAuNjM3ODI2MTA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTk2MDE4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gWnN3YXAgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IG15IGZ1enppbmcgZWZmb3J0cyB3aXRoaW4gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB6c3dhcC4gYHpzd2FwX3N0b3JlYCwgaXQgc2VlbXMsIGlzIHRoZSBwcmltZSB0YXJnZXQuIEl0J3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYHN3YXBfd3JpdGVvdXRgIGluIGBtbS9wYWdlX2lvLmNgLCB3aGljaCwgd2hpbGUgYSBnb29kIGZ1enppbmcgY2FuZGlkYXRlIGluIGl0cyBvd24gcmlnaHQgYXMgYSBnZW5lcmljIHN3YXAgZnVuY3Rpb24sIHNlZW1zIHRvbyBicm9hZCBpbml0aWFsbHkuIGB6c3dhcF9zdG9yZWAsIGJlaW5nIHRoZSBlbnRyeSBwb2ludCB0byB6c3dhcCBpdHNlbGYsIHByZXNlbnRzIGEgbW9yZSBmb2N1c2VkIGFyZWEgZm9yIGV4cGxvcmF0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cy4gVGhlcmUncyBgc2hyaW5rX3dvcmtlcmAsIHdoaWNoIEkgcmVtZW1iZXIgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24gcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFtYXRpb24uIEJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgbGVhbnMgdG93YXJkcyBgenN3YXBfc3RvcmVgIGJlaW5nIHRoZSBjb3JlIGVudHJ5LiBBaCwgeWVzLCBgc2hyaW5rX21lbWNnYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB6c3dhcF9zdG9yZWAgYW5kIGBzaHJpbmtfd29ya2VyYCwgYnV0IGFnYWluLCB0aGUgY2VudHJhbCBwb2ludCByZW1haW5zIGB6c3dhcF9zdG9yZWAuXG5cbkFscmlnaHQsIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgenN3YXBfc3RvcmVgIGlzIHJlYWNoYWJsZS4gTGV0J3Mgc2VlLi4uIFllcCwgZGlyZWN0bHkgY2FsbGVkIGZyb20gYHN3YXBfd3JpdGVvdXRgLiBOb3csIGxldCdzIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwb3NzaWJsZSBlbnRyeSBwb2ludHMgd2l0aGluIGBtbS96c3dhcC5jYCwgcGFydGljdWxhcmx5IGFyb3VuZCBgc2hyaW5rX3dvcmtlcmAgdG8gZ2FpbiBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IG9mIGB6c3dhcF9zdG9yZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6NDUuMTk3NDMxMjY4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3NDYxMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX3dvcmtlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9NzA4PXZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTcyMi0gKlxcbm1tL3pzd2FwLmM6NzIzOiAqIFNpbmNlIHRoZSBnbG9iYWwgc2hyaW5rZXIgc2hyaW5rX3dvcmtlcigpIG1heSBob2xkIGEgcmVmZXJlbmNlXFxubW0venN3YXAuYy03MjQtICogb2YgdGhlIG1lbWNnLCB3ZSBtdXN0IGNoZWNrIGFuZCByZWxlYXNlIHRoZSByZWZlcmVuY2UgaW5cXG4tLVxcbm1tL3pzd2FwLmMtNzI2LSAqXFxubW0venN3YXAuYzo3Mjc6ICogc2hyaW5rX3dvcmtlcigpIG11c3QgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoaXMgZnVuY3Rpb24gcmVsZWFzZXNcXG5tbS96c3dhcC5jLTcyOC0gKiB0aGUgcmVmZXJlbmNlIG9mIG1lbWNnIGJlaW5nIHNocnVuay5cXG4tLVxcbm1tL3pzd2FwLmM9MTI5Mz1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbilcXG4tLVxcbm1tL3pzd2FwLmMtMTMzNi1cXG5tbS96c3dhcC5jOjEzMzc6c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxubW0venN3YXAuYy0xMzM4LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTM2OC1cXHQgKiBvZmZsaW5lIG1lbWNnIGxlZnQgaW4genN3YXBfbmV4dF9zaHJpbmsgd2lsbCBob2xkIHRoZSByZWZlcmVuY2VcXG5tbS96c3dhcC5jOjEzNjk6XFx0ICogdW50aWwgdGhlIG5leHQgcnVuIG9mIHNocmlua193b3JrZXIoKS5cXG5tbS96c3dhcC5jLTEzNzAtXFx0ICovXFxuLS1cXG5tbS96c3dhcC5jPTE3OTE9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xODIwLVxcbm1tL3pzd2FwLmM6MTgyMTpcXHRJTklUX1dPUksoXFx1MDAyNnpzd2FwX3Nocmlua193b3JrLCBzaHJpbmtfd29ya2VyKTtcXG5tbS96c3dhcC5jLTE4MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjQ1LjM2OTE4NDAzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMzMzU5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gWnN3YXAncyBTaHJpbmtpbmcgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBzaHJpbmtfd29ya2VyYCB2YXJpYWJsZS4gVGhlIGNvZGUgaW5pdGlhbGl6ZXMgaXQgYXMgYHpzd2FwX3Nocmlua193b3JrYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSB0aGUgaGVjayBpcyB0aGlzIGB6c3dhcF9zaHJpbmtfd29ya2Agc3RydWN0dXJlIGFjdHVhbGx5ICpxdWV1ZWQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzaHJpbmtpbmcgcHJvY2VzcyBpcyBzY2hlZHVsZWQgYW5kIHRyaWdnZXJlZC4gSXMgaXQgb24gYSB3b3JrcXVldWU/IEEgdGltZXI/IFNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGlzIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IGFnZ3Jlc3NpdmVseSBac3dhcCB3aWxsIHRyeSB0byByZWNsYWltIG1lbW9yeSBhbmQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGUgc2hyaW5raW5nIHByb2Nlc3MuIFRoZSBxdWV1ZWluZyBtZWNoYW5pc20gd2lsbCBkZXRlcm1pbmUgd2hlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuLCBzbyBJIG11c3QgZmluZCB0aGUgY29kZSB3aGVyZSB0aGlzIHdvcmtlciBpcyBpbnNlcnRlZCBpbnRvIHRoZSBxdWV1ZSwgaW4gb3JkZXIgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIFpzd2FwIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6NDguNzAyNTQ2MDc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4Mzc4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfc2hyaW5rX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTE2OD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnpzd2FwX25leHRfc2hyaW5rO1xcbm1tL3pzd2FwLmM6MTY5OnN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgenN3YXBfc2hyaW5rX3dvcms7XFxubW0venN3YXAuYy0xNzAtc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XFxuLS1cXG5tbS96c3dhcC5jPTE1MDg9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNTY4LVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsKVxcbm1tL3pzd2FwLmM6MTU2OTpcXHRcXHRxdWV1ZV93b3JrKHNocmlua193cSwgXFx1MDAyNnpzd2FwX3Nocmlua193b3JrKTtcXG5tbS96c3dhcC5jLTE1NzAtY2hlY2tfb2xkOlxcbi0tXFxubW0venN3YXAuYz0xNzkxPXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTgyMC1cXG5tbS96c3dhcC5jOjE4MjE6XFx0SU5JVF9XT1JLKFxcdTAwMjZ6c3dhcF9zaHJpbmtfd29yaywgc2hyaW5rX3dvcmtlcik7XFxubW0venN3YXAuYy0xODIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0Mjo0OC44NTkzODg3MjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0MTk5MTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWnN3YXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgdGhlIGFjdGlvbiBzdGFydHMgd2l0aCBgenN3YXBfc3RvcmVgLiBUaGF0J3MgdGhlIGtleSBmdW5jdGlvbiB0byB0cmFjZS4gSSdsbCBtYWtlIHN1cmUgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gRnJvbSB3aGF0IEkgc2VlLCBgWlNXQVBgIGlzIGRlcGVuZGVudCBvbiBgU1dBUGAsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIGBaU1dBUF9ERUZBVUxUX09OYCBhbmQgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIGJvdGgsIGluIHR1cm4sIGRlcGVuZCBvbiBgWlNXQVBgLiBUaHVzLCB0byBlbnN1cmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gZW5hYmxlOlxuXG4qICAgYFNXQVBgXG4qICAgYFpTV0FQYFxuKiAgIGBaU1dBUF9ERUZBVUxUX09OYFxuKiAgIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYFxuXG5UaGF0IHNob3VsZCBiZSB0aGUgYmFyZSBtaW5pbXVtIHRvIG1ha2UgZXZlcnl0aGluZyB3b3JrIHJpZ2h0LlxuXG5IbW0sIGFueXRoaW5nIGVsc2U/IFJpZ2h0LCBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgc2hyaW5rX21lbWNnYCwgYW5kIGl0J3MgdXNpbmcgYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpYC4gU2luY2UgdGhpcyBkZWFscyB3aXRoIG1lbW9yeSBjZ3JvdXBzLCBpdCdzIG1ha2luZyBtZSB3b25kZXIgaWYgYE1FTUNHYCBpcyByZXF1aXJlZCBmb3IgYFpTV0FQYC4gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgYSBsaXR0bGUgZnVydGhlciB0byBjb25maXJtIGlmIGBNRU1DR2AgaXMgYSBoYXJkIHJlcXVpcmVtZW50IG9yIGEgY29uZGl0aW9uYWwgb25lLiBJIGJldHRlciBtYWtlIGEgbm90ZSBvZiB0aGlzIHRvIHJldmlzaXQgbGF0ZXIsIGVzcGVjaWFsbHkgd2hlbiBJIGdldCB0byBhY3R1YWxseSAqdXNpbmcqIHRoZSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTA2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjUzLjUwMTM4MzI3M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjEwMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjUzLjYyNDk5ODQ3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc0ODc4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIFpTV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBaU1dBUGAgZmVhdHVyZSBpbiB0aGlzIGNvbnRleHQuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gQWgsIG9mIGNvdXJzZSwgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHVzdWFsIHNwb3QgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGl2ZSBpbiB0aGVyZSBhbmQgc2VlIHdoYXQncyB3aGF0IHdpdGggYFpTV0FQYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgQ09ORklHX1pTV0FQYCBhbmQgbGlrZWx5IHNvbWUgYXNzb2NpYXRlZCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBiYWNrZW5kLCBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCBhbmQgcGVyaGFwcyBwYWdlIGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gTGV0J3Mgc2VlIGlmIHRoaXMgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIHdoYXQgSSdtIHVzZWQgdG8uIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk4MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjU2Ljk5OTg4MDAxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMjpcXHRjb25maWcgWlNXQVBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFNXQVBcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDI2OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xcbiAgMjk6XFx0XFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cXG4gIDMwOlxcdFxcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cXG4gIDMxOlxcdFxcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjU3LjAwMDA0NTYzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTczOTEzNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgaW5kZXBlbmRlbnQgb2YgYE1FTUNHYCBhdCBmaXJzdCBnbGFuY2UuIEhvd2V2ZXIsIHRoZSBtb2RpZmljYXRpb25zIHRvIGBzaHJpbmtfbWVtY2dgIGFuZCB0aGUgaW5jbHVzaW9uIG9mIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGNoZWNrcyBhcmUgcmFpc2luZyBhIGZsYWcuIEl0J3MgbWFraW5nIG1lIHRoaW5rIGVuYWJsaW5nIGBNRU1DR2AgbWlnaHQgYmUgYSBnb29kIG1vdmUgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIGNoYW5nZS4gTGV0J3MgZGlnIGluIGFuZCB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjU5Ljk3Mzk2MjA2N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODEwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4My1cXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4NS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDYtXFxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDgtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDM6MDAuMDkwNzc5MzMyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNTA3MjQ1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgWnN3YXAgU2hyaW5rZXIgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbml0L0tjb25maWdgIGFuZCBlbmFibGVzIGBNRU1DR2AuIEl04oCZcyBjYWxsZWQgYnkgYHNocmlua193b3JrZXJgIGFuZCwgaW1wb3J0YW50bHksIGB6c3dhcF9zdG9yZWAsIHdoaWNoIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHpzd2FwLiBUaGUgcGF0Y2ggYWRkcyBgbnJfdG9fc2NhbmAgdG8gYHNocmlua19tZW1jZ2AsIHdoaWNoIGxvb2tzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5genN3YXBfc3RvcmVgIGdldHMgY2FsbGVkIHdoZW4gYSBwYWdlIGlzIHN3YXBwZWQgb3V0LiBJIGNhbid0IGRpcmVjdGx5IGZ1enogYHpzd2FwX3N0b3JlYCBiZWNhdXNlIGl0J3Mgbm90IGEgc3lzY2FsbCwgYnV0IEkgKmNhbiogcmVhY2ggaXQgYnkgZ2VuZXJhdGluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGZvcmNpbmcgc29tZSBzd2FwcGluZy4gU28sIHRoYXQgbWVhbnMgaXQgaXMgZmVhc2libGUgdG8gZnV6eiB0aGlzLiBJIHdpbGwgZ28gYWhlYWQgYW5kIGFkZCBgenN3YXBfc3RvcmVgIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYHpzd2FwX3N0b3JlYCBpcyB0aGUgYmVzdCBmdW5jdGlvbiB0byBmb2N1cyBvbiwgYW5kIGl0IGlzLiBJdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHpzd2FwLiBgc2hyaW5rX3dvcmtlcmAgaXMgcGFydCBvZiBhIHdvcmtxdWV1ZSwgc28gaXQncyBub3QgZGlyZWN0bHkgY2FsbGFibGUsIGFuZCBgc2hyaW5rX21lbWNnYCBpcyBzdGF0aWMuIFNvLCBmdXp6aW5nIHRoZSBtYWluIGVudHJ5IHBvaW50LCBgenN3YXBfc3RvcmVgLCBtYWtlcyB0aGUgbW9zdCBzZW5zZS5cblxuTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIE9rYXksIHNvIGBzaHJpbmtfbWVtY2dgIG5vdyBhY2NlcHRzIGBucl90b19zY2FuYCwgYHNocmlua193b3JrZXJgIHBhc3NlcyBgU1dBUF9DTFVTVEVSX01BWGAsIGFuZCBgenN3YXBfc3RvcmVgIGFsc28gcGFzc2VzIGBTV0FQX0NMVVNURVJfTUFYYC4gVGhpcyBpcyBtYWtpbmcgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSwgcmlnaHQgaW4gdGhlIHpzd2FwIHBhdGguIEl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSB6c3dhcCBzaHJpbmtlciBsb2dpYyBhbmQgaG93IGl0IHNjYW5zIHBhZ2VzIGFjcm9zcyBwZXItbm9kZSBMUlVzLCB3aGljaCBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYS4gSXTigJlzIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwcGluZyBhbmQgZnV6emluZyBgenN3YXBfc3RvcmVgIGlzIHRoZSBiZXN0IHdheSB0byBleGVyY2lzZSB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoLlxuXG5Pa2F5LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzU2LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MzowOC4xNDE1MDY2NjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk3NTM4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJaU1dBUF9ERUZBVUxUX09OXCIsXG4gICAgXCJaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBzaHJpbmtlciBsb2dpYyB0byBzY2FuIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzIGFjcm9zcyBwZXItbm9kZSBMUlVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwcGluZy4gRnV6emluZyBgenN3YXBfc3RvcmVgIHdpbGwgaGVscCBleGVyY2lzZSB0aGlzIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 20:22:15 +0000 UTC FinishedAt: 2026-07-30 20:43:10 +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": "9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON", "MEMCG" ], "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": "9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON", "MEMCG" ], "series_id": "04fbf8cf-5d8d-457a-af2f-88aa28eb9025" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_store" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzNWFlZDIzYzVhOWQ2YmNiNmE5ZGQzYTRiMmJjNjM1YjIzMWE5OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAyMDo0MjoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggYjVhMTdlYTIwMjM3OS4uODJkZGRmZTc0ZWY3YSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC0xMjc1LDkgJiM0MzsxMjc1LDI1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKnpzd2FwX2FsbG9jX3Nocmlua2VyKHZvaWQpXG4gXHRyZXR1cm4gc2hyaW5rZXI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7LypcbiYjNDM7ICogU2NhbiB1cCB0byBAbnJfdG9fc2NhbiBwYWdlcyBhY3Jvc3MgdGhlIHBlci1ub2RlIHpzd2FwIExSVXMgb2YgQG1lbWNnXG4mIzQzOyAqIGFuZCB3cml0ZSBiYWNrIHRoZSByZWNsYWltYWJsZSBvbmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBTaW5jZSB0aGUgc2Vjb25kLWNoYW5jZSBhbGdvcml0aG0gcm90YXRlcyByZWZlcmVuY2VkIGVudHJpZXMgdG8gdGhlXG4mIzQzOyAqIExSVSB0YWlsLCB0aGUgcGVyLW5vZGUgc2NhbiBpcyBjYXBwZWQgYXQgdGhlIGN1cnJlbnQgTFJVIGxlbmd0aCBzb1xuJiM0MzsgKiBlYWNoIGVudHJ5IGlzIHNjYW5uZWQgYXQgbW9zdCBvbmNlIHBlciBjYWxsLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyXG4mIzQzOyAqIHRvIGhhbmRsZSByZXRyaWVzLCBkZWNpZGluZyB3aGV0aGVyIHRvIHNjYW4gYW5vdGhlciBtZW1jZyB0byBjb21wbGV0ZVxuJiM0MzsgKiB0aGUgZnVsbCBpdGVyYXRpb24sIG9yIHRvIHJlc2NhbiB0aGUgY3VycmVudCBtZW1jZyB0byBkcmFpbiBpdHMgenN3YXBcbiYjNDM7ICogZW50cmllcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIGlmIGF0IGxlYXN0IG9uZSBlbnRyeSB3YXMgd3JpdHRlbiBiYWNrLCAtRUFHQUlOIGlmIGVudHJpZXNcbiYjNDM7ICogd2VyZSBzY2FubmVkIGJ1dCBub25lIGNvdWxkIGJlIHdyaXR0ZW4gYmFjaywgb3IgLUVOT0VOVCBpZiBAbWVtY2cgaGFzXG4mIzQzOyAqIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHkgenN3YXAgTFJVcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBucl90b19zY2FuKVxuIHtcbi1cdGludCBuaWQsIHNocnVuayA9IDAsIHNjYW5uZWQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcbiYjNDM7XHRpbnQgbmlkLCBzaHJ1bmsgPSAwO1xuIFxuIFx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMTI5MCwxNCAmIzQzOzEzMDYsMjkgQEAgc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX05PUk1BTF9NRU1PUlkpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrID0gMTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fd2FsaztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkXG4mIzQzO1x0XHQgKiBhdCBtb3N0IG9uY2UgcGVyIGNhbGwuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLFxuJiM0MztcdFx0XHRcdCBsaXN0X2xydV9jb3VudF9vbmUoXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2cpKTtcbiYjNDM7XHRcdGlmICghbnJfdG9fd2FsaylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRucl9yZW1haW5pbmcgLT0gbnJfdG9fd2FsaztcbiBcdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG4tXHRcdHNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrO1xuJiM0MztcdFx0LyogUmV0dXJuIHRoZSB1bnVzZWQgc2hhcmUgb2YgdGhlIGJ1ZGdldCB0byB0aGUgcG9vbC4gKi9cbiYjNDM7XHRcdG5yX3JlbWFpbmluZyAmIzQzOz0gbnJfdG9fd2FsaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW5yX3JlbWFpbmluZylcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAoIXNjYW5uZWQpXG4mIzQzO1x0LyogTm90aGluZyB3YXMgc2Nhbm5lZDogZXZlcnkgTFJVIHVuZGVyIEBtZW1jZyB3YXMgZW1wdHkuICovXG4mIzQzO1x0aWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdHJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjtcbkBAIC0xMzU2LDExICYjNDM7MTM4NywxMiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0fSB3aGlsZSAobWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUobWVtY2cpKTtcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2enN3YXBfc2hyaW5rX2xvY2spO1xuIFxuLVx0XHRpZiAoIW1lbWNnKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBDb250aW51ZSBzaHJpbmtpbmcgd2l0aG91dCBpbmNyZW1lbnRpbmcgZmFpbHVyZXMgaWZcbi1cdFx0XHQgKiB3ZSBmb3VuZCBjYW5kaWRhdGUgbWVtY2dzIGluIHRoZSBsYXN0IHRyZWUgd2Fsay5cbi1cdFx0XHQgKi9cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIE5VTEwgbWVtY2cgZW5kcyBhIGZ1bGwgaGllcmFyY2h5IHBhc3MgKGV4Y2VwdCB3aGVuIG1lbWNnIGlzXG4mIzQzO1x0XHQgKiBkaXNhYmxlZCwgd2hlcmUgaXQgaXMgYWx3YXlzIE5VTEw6IGZhbGwgdGhyb3VnaCB0byB0aGUgcm9vdCBMUlUpLlxuJiM0MztcdFx0ICogQ291bnQgYSBmYWlsdXJlIG9ubHkgaWYgdGhlIGxhc3QgcGFzcyBmb3VuZCBubyBjYW5kaWRhdGVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG4gXHRcdFx0aWYgKCFhdHRlbXB0cyBcdTAwMjZcdTAwMjYgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXG4gXHRcdFx0XHRicmVhaztcbiBcbkBAIC0xMzY4LDcgJiM0MzsxNDAwLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRcdFx0Z290byByZXNjaGVkO1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7XG4mIzQzO1x0XHRyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2csIFNXQVBfQ0xVU1RFUl9NQVgpO1xuIFx0XHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cbiBcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFxuQEAgLTEzNzksNyAmIzQzOzE0MTEsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0ICogYW5kIGZhaWx1cmVzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCA9PSAtRU5PRU5UKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRnb3RvIHJlc2NoZWQ7XG4gXHRcdCYjNDM7JiM0MzthdHRlbXB0cztcbiBcbiBcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXG5AQCAtMTQ5Miw3ICYjNDM7MTUyNCw3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX21heV96c3dhcChvYmpjZykpIHtcbiBcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbi1cdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcbiYjNDM7XHRcdGlmIChzaHJpbmtfbWVtY2cobWVtY2csIFNXQVBfQ0xVU1RFUl9NQVgpKSB7XG4gXHRcdFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFx0XHRcdGdvdG8gcHV0X29iamNnO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzNWFlZDIzYzVhOWQ2YmNiNmE5ZGQzYTRiMmJjNjM1YjIzMWE5OTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAyMDo0MjoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGI1YTE3ZWEyMDIzNzkuLjgyZGRkZmU3NGVmN2EgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTI3NSw5ICYjNDM7MTI3NSwyNSBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKQogCXJldHVybiBzaHJpbmtlcjsKIH0KIAotc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzOy8qCiYjNDM7ICogU2NhbiB1cCB0byBAbnJfdG9fc2NhbiBwYWdlcyBhY3Jvc3MgdGhlIHBlci1ub2RlIHpzd2FwIExSVXMgb2YgQG1lbWNnCiYjNDM7ICogYW5kIHdyaXRlIGJhY2sgdGhlIHJlY2xhaW1hYmxlIG9uZXMuCiYjNDM7ICoKJiM0MzsgKiBTaW5jZSB0aGUgc2Vjb25kLWNoYW5jZSBhbGdvcml0aG0gcm90YXRlcyByZWZlcmVuY2VkIGVudHJpZXMgdG8gdGhlCiYjNDM7ICogTFJVIHRhaWwsIHRoZSBwZXItbm9kZSBzY2FuIGlzIGNhcHBlZCBhdCB0aGUgY3VycmVudCBMUlUgbGVuZ3RoIHNvCiYjNDM7ICogZWFjaCBlbnRyeSBpcyBzY2FubmVkIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlcgomIzQzOyAqIHRvIGhhbmRsZSByZXRyaWVzLCBkZWNpZGluZyB3aGV0aGVyIHRvIHNjYW4gYW5vdGhlciBtZW1jZyB0byBjb21wbGV0ZQomIzQzOyAqIHRoZSBmdWxsIGl0ZXJhdGlvbiwgb3IgdG8gcmVzY2FuIHRoZSBjdXJyZW50IG1lbWNnIHRvIGRyYWluIGl0cyB6c3dhcAomIzQzOyAqIGVudHJpZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgaWYgYXQgbGVhc3Qgb25lIGVudHJ5IHdhcyB3cml0dGVuIGJhY2ssIC1FQUdBSU4gaWYgZW50cmllcwomIzQzOyAqIHdlcmUgc2Nhbm5lZCBidXQgbm9uZSBjb3VsZCBiZSB3cml0dGVuIGJhY2ssIG9yIC1FTk9FTlQgaWYgQG1lbWNnIGhhcwomIzQzOyAqIHdyaXRlYmFjayBkaXNhYmxlZCwgaXMgYSB6b21iaWUgY2dyb3VwLCBvciBoYXMgZW1wdHkgenN3YXAgTFJVcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbikKIHsKLQlpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl90b19zY2FuOwomIzQzOwlpbnQgbmlkLCBzaHJ1bmsgPSAwOwogCiAJaWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xMjkwLDE0ICYjNDM7MTMwNiwyOSBAQCBzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTk9STUFMX01FTU9SWSkgewotCQl1bnNpZ25lZCBsb25nIG5yX3RvX3dhbGsgPSAxOwomIzQzOwkJdW5zaWduZWQgbG9uZyBucl90b193YWxrOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCB0aGUgc2NhbiBhdCBwZXItbm9kZSBMUlUgbGVuZ3RoIHNvIGVhY2ggZW50cnkgaXMgc2Nhbm5lZAomIzQzOwkJICogYXQgbW9zdCBvbmNlIHBlciBjYWxsLgomIzQzOwkJICovCiYjNDM7CQlucl90b193YWxrID0gbWluKG5yX3JlbWFpbmluZywKJiM0MzsJCQkJIGxpc3RfbHJ1X2NvdW50X29uZSgmYW1wO3pzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnKSk7CiYjNDM7CQlpZiAoIW5yX3RvX3dhbGspCiYjNDM7CQkJY29udGludWU7CiAKJiM0MzsJCW5yX3JlbWFpbmluZyAtPSBucl90b193YWxrOwogCQlzaHJ1bmsgJiM0Mzs9IGxpc3RfbHJ1X3dhbGtfb25lKCZhbXA7enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csCiAJCQkJCSAgICAmYW1wO3Nocmlua19tZW1jZ19jYiwgTlVMTCwgJmFtcDtucl90b193YWxrKTsKLQkJc2Nhbm5lZCAmIzQzOz0gMSAtIG5yX3RvX3dhbGs7CiYjNDM7CQkvKiBSZXR1cm4gdGhlIHVudXNlZCBzaGFyZSBvZiB0aGUgYnVkZ2V0IHRvIHRoZSBwb29sLiAqLwomIzQzOwkJbnJfcmVtYWluaW5nICYjNDM7PSBucl90b193YWxrOwomIzQzOwomIzQzOwkJaWYgKCFucl9yZW1haW5pbmcpCiYjNDM7CQkJYnJlYWs7CiAJfQogCi0JaWYgKCFzY2FubmVkKQomIzQzOwkvKiBOb3RoaW5nIHdhcyBzY2FubmVkOiBldmVyeSBMUlUgdW5kZXIgQG1lbWNnIHdhcyBlbXB0eS4gKi8KJiM0MzsJaWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjsKQEAgLTEzNTYsMTEgJiM0MzsxMzg3LDEyIEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCQl9IHdoaWxlIChtZW1jZyAmYW1wOyZhbXA7ICFtZW1fY2dyb3VwX3RyeWdldF9vbmxpbmUobWVtY2cpKTsKIAkJc3Bpbl91bmxvY2soJmFtcDt6c3dhcF9zaHJpbmtfbG9jayk7CiAKLQkJaWYgKCFtZW1jZykgewotCQkJLyoKLQkJCSAqIENvbnRpbnVlIHNocmlua2luZyB3aXRob3V0IGluY3JlbWVudGluZyBmYWlsdXJlcyBpZgotCQkJICogd2UgZm91bmQgY2FuZGlkYXRlIG1lbWNncyBpbiB0aGUgbGFzdCB0cmVlIHdhbGsuCi0JCQkgKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBBIE5VTEwgbWVtY2cgZW5kcyBhIGZ1bGwgaGllcmFyY2h5IHBhc3MgKGV4Y2VwdCB3aGVuIG1lbWNnIGlzCiYjNDM7CQkgKiBkaXNhYmxlZCwgd2hlcmUgaXQgaXMgYWx3YXlzIE5VTEw6IGZhbGwgdGhyb3VnaCB0byB0aGUgcm9vdCBMUlUpLgomIzQzOwkJICogQ291bnQgYSBmYWlsdXJlIG9ubHkgaWYgdGhlIGxhc3QgcGFzcyBmb3VuZCBubyBjYW5kaWRhdGVzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW1lbWNnICZhbXA7JmFtcDsgIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkgewogCQkJaWYgKCFhdHRlbXB0cyAmYW1wOyZhbXA7ICYjNDM7JiM0MztmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKQogCQkJCWJyZWFrOwogCkBAIC0xMzY4LDcgJiM0MzsxNDAwLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAJCQlnb3RvIHJlc2NoZWQ7CiAJCX0KIAotCQlyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2cpOwomIzQzOwkJcmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnLCBTV0FQX0NMVVNURVJfTUFYKTsKIAkJLyogZHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlICovCiAJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIApAQCAtMTM3OSw3ICYjNDM7MTQxMSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogCQkgKiBhbmQgZmFpbHVyZXMuCiAJCSAqLwogCQlpZiAocmV0ID09IC1FTk9FTlQpCi0JCQljb250aW51ZTsKJiM0MzsJCQlnb3RvIHJlc2NoZWQ7CiAJCSYjNDM7JiM0MzthdHRlbXB0czsKIAogCQlpZiAocmV0ICZhbXA7JmFtcDsgJiM0MzsmIzQzO2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpCkBAIC0xNDkyLDcgJiM0MzsxNTI0LDcgQEAgYm9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJaWYgKG9iamNnICZhbXA7JmFtcDsgIW9ial9jZ3JvdXBfbWF5X3pzd2FwKG9iamNnKSkgewogCQltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpOwotCQlpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkgewomIzQzOwkJaWYgKHNocmlua19tZW1jZyhtZW1jZywgU1dBUF9DTFVTVEVSX01BWCkpIHsKIAkJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAkJCWdvdG8gcHV0X29iamNnOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIHByb3Bvc2VkIGZvciBgbW0venN3YXAuY2AuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgbmV3IHBhcmFtZXRlciwgYG5yX3RvX3NjYW5gLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgc2hyaW5rX3dvcmtlcmAgYW5kIGB6c3dhcF9zdG9yZWAgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gcGFzcyBgU1dBUF9DTFVTVEVSX01BWGAgdG8gdGhpcyBuZXcgcGFyYW1ldGVyLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBjaGFuZ2UgaW4gYHNocmlua19tZW1jZ2AgaXMgdGhlIGxvZ2ljIHRvIHNjYW4gdXAgdG8gYG5yX3RvX3NjYW5gIHBhZ2VzIGFjcm9zcyB0aGUgenN3YXAgTFJVcyBmb3IgYSBnaXZlbiBgbWVtY2dgIGFuZCByZWNsYWltIHRob3NlIHBhZ2VzIHRoYXQgcXVhbGlmeS4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIGNvbmRpdGlvbmFsIGhhbmRsaW5nIGZvciBhIE5VTEwgYG1lbWNnYCBpbiBgc2hyaW5rX3dvcmtlcmAgd2hlbiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBpcyB0cnVlLgoKTXkgbWFpbiBmb2N1cyByaWdodCBub3cgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyByZWFjaGFibGUgY29kZSwgYW5kIGlmIHNvLCBpcyBpdCB3b3J0aCBpbnZlc3RpbmcgZWZmb3J0IGluIGZ1enppbmcuIFpzd2FwIGlzIHByZXR0eSBjcml0aWNhbCwgaXQmIzM5O3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUsIHNvIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZSBjb3VsZCBiZSBpbXBhY3RmdWwuIEdpdmVuIHRoZSBwYXRjaCYjMzk7cyB0b3VjaCBvbiBgenN3YXBfc3RvcmVgIChkdXJpbmcgc3dhcC1vdXQgdG8genN3YXApIGFuZCBgc2hyaW5rX3dvcmtlcmAgKGZvciB6c3dhcCBzaHJpbmtpbmcpLCBpdCBkZWZpbml0ZWx5IHNlZW1zIGxpa2UgdGhlcmUgY291bGQgYmUgc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHN1cmZhY2VzLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNoZWNrIHdoYXQgdGhlIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgYXJlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipaU1dBUCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gWlNXQVAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gSSBuZWVkIHRvIGV4YW1pbmUuIEJlZm9yZSBJIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGl0JiMzOTtzIHNldCB1cCwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgaW52b2x2ZWQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgWlNXQVAgcmVsaWVzIG9uLCBib3RoIGF0IHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgbGV2ZWwuIFRoaXMgaW5jbHVkZXMgbG9va2luZyBpbnRvIHRoZSBrZXJuZWwgbW9kdWxlcywgdGhlIHVuZGVybHlpbmcgc3RvcmFnZSwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb21wb25lbnRzIHRoYXQgWlNXQVAgaW50ZXJhY3RzIHdpdGggb3IgZGVwZW5kcyBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFdpdGhvdXQgdGhhdCBjb250ZXh0LCBJJiMzOTttIGVzc2VudGlhbGx5IGZseWluZyBibGluZCBhbmQgY291bGQgbWlzaW50ZXJwcmV0IHdoYXQgSSYjMzk7bSBzZWVpbmcuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGtleSBiZWZvcmUgSSBldmVuIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgaW5pdGlhbCBhdHRlbnRpb24gYXJvdW5kIGxpbmUgMjIg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgaW4gdGhlc2UgS2NvbmZpZyBmaWxlcy4gVGhlIHN0cnVjdHVyZSYjMzk7cyB1c3VhbGx5IHByZXR0eSBjb25zaXN0ZW50LCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIG5ldyBvcHRpb24gZGVmaW5pdGlvbiwgYSBtZW51IGVudHJ5LCBvciBwZXJoYXBzIGEgY29uZGl0aW9uYWwgaW5jbHVkZSB0aGF0IHNldHMgdGhlIHN0YWdlIGZvciBhIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmZWF0dXJlLiBMaW5lIDIyIHNwZWNpZmljYWxseSBtaWdodCBiZSByZWxldmFudCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIEkmIzM5O20gZm9jdXNpbmcgb24uIEkmIzM5O2xsIG1lbnRhbGx5IG5vdGUgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbGluZSDigJMgYW55IHN1cnJvdW5kaW5nIGNvbW1lbnRzIG9yIG90aGVyIEtjb25maWcgb3B0aW9ucyDigJMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYW5kIGFueSBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGRlY2lkZSBpZiB0aGF0JiMzOTtzIHRoZSBjb3JyZWN0IGZpbGUsIG9yIGlmIEkgc2hvdWxkIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29uc2lkZXJpbmcgWlNXQVAgYW5kIGl0cyBSZWxhdGlvbnNoaXAgdG8gU1dBUCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBaU1dBUGAuLi4gdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBkZXBlbmRlbmN5IG9uIGBTV0FQYC4gVGhhdCYjMzk7cyBmdW5kYW1lbnRhbDsgeW91IGNhbiYjMzk7dCBoYXZlIG9uZSB3aXRob3V0IHRoZSBvdGhlciwgcmlnaHQ/IGBaU1dBUGAgaXMgZXNzZW50aWFsbHkgYW4gKmV4dGVuc2lvbiogb3IgKmVuaGFuY2VtZW50KiBvZiBzdGFuZGFyZCBzd2FwcGluZy4gSXQmIzM5O3MgYnVpbHQgb24gdGhhdCBmb3VuZGF0aW9uLgoKVGhlbiBteSBtaW5kIGRyaWZ0cyB0byB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucy4gSXMgdGhlcmUgYSB2YWx1ZSBpbiBiZWluZyBhYmxlIHRvIHR1cm4gaXQgb24gYXMgYSBkZWZhdWx0PyBUaGUgZXhpc3RlbmNlIG9mIGBaU1dBUF9ERUZBVUxUX09OYCBhcyBhbiBvcHRpb24gc3VnZ2VzdHMgdGhhdCBzb21lb25lLCBzb21ld2hlcmUsIHRob3VnaHQgaXQgd2FzIGEgZ29vZCBpZGVhLiBUaGF0IGJlZ3MgdGhlIHF1ZXN0aW9uLCBpbiB3aGF0IHNjZW5hcmlvcyB3b3VsZCBlbmFibGluZyBgWlNXQVBgIGJ5IGRlZmF1bHQgYmUgYmVuZWZpY2lhbD8gV2hhdCBhcmUgdGhlIHRyYWRlb2Zmcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDA1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipac3dhcCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB6c3dhcC4gQW5kIHRoYXQgcGhyYXNlLCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgZmV3IGNvbnNpZGVyYXRpb25zLiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCBob3cgenN3YXAgaXMgYmVoYXZpbmcgb3V0LW9mLXRoZS1ib3guICBLbm93aW5nIHRoYXQgdGhlIHpzd2FwIHNocmlua2VyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbXBhY3RzIG15IHR1bmluZyBjaG9pY2VzLiBJdCBtZWFucyB0aGUgc3lzdGVtJiMzOTtzIGxpa2VseSBjb25maWd1cmVkIHRvIGFnZ3Jlc3NpdmVseSByZWNsYWltIG1lbW9yeSBmcm9tIHpzd2FwIHdoZW4gbWVtb3J5IHByZXNzdXJlIGluY3JlYXNlcy4gIAoKSSBpbW1lZGlhdGVseSBzdGFydCBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zLiBJcyB0aGlzIHRoZSAqcmlnaHQqIGRlZmF1bHQgaW4gbXkgc3BlY2lmaWMgdXNlLWNhc2U/ICBGb3Igc29tZSB3b3JrbG9hZHMsIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyBnb29kIOKAkyBpdCBlbnN1cmVzIHRoYXQgd2UgYXJlIG5vdCB1bm5lY2Vzc2FyaWx5IHVzaW5nIHN3YXAsIHRodXMgaW1wcm92aW5nIHJlc3BvbnNpdmVuZXNzLiBCdXQsIGZvciBvdGhlciB3b3JrbG9hZHMsIHdoZXJlIG1lbW9yeSBwcmVzc3VyZSBpcyBtb3JlIHN1c3RhaW5lZCwgZXhjZXNzaXZlIHNocmlua2luZyBvZiB6c3dhcCBjYW4gbGVhZCB0byBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpZiBpdCBjYXVzZXMgZXhjZXNzaXZlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gb3BlcmF0aW9ucyBhcyBkYXRhIGlzIG1vdmVkIGluIGFuZCBvdXQgb2YgenN3YXAgZnJlcXVlbnRseS4KCkkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB3aGF0IHRyYWRlLW9mZnMgYXJlIGF0IHBsYXkuICBEb2VzIHRoaXMgZGVmYXVsdCBwb3RlbnRpYWxseSBsZWFkIHRvIG1vcmUgQ1BVIGN5Y2xlcyBzcGVudCBvbiBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uPyAgSG93IGNhbiBJIGVuc3VyZSB0aGUgc2hyaW5raW5nIGJlaGF2aW9yIGRvZXNuJiMzOTt0IGJlY29tZSBhIGJvdHRsZW5lY2sgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBzdXN0YWluZWQgaGlnaCBtZW1vcnkgdXNhZ2U/ICBEbyBJIHdhbnQgdG8gYWRqdXN0IGB6c3dhcF9tYXhfcG9vbF9wZXJjZW50YCwgZm9yIGluc3RhbmNlLCB0byBtYWtlIHRoZSBzaHJpbmtlciBiZWhhdmlvciBsZXNzIGFnZ3Jlc3NpdmU/IE9yIG1heWJlIGFkanVzdCB0aGUgbWluaW11bSBwYWdlIGNvdW50IHRvIHJlY2xhaW0gKGB6c3dhcF9zaHJpbmtgKSB0byBhZGp1c3QgcmVjbGFpbSBiZWhhdmlvdXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDU6XHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxuICA0NjpcdFx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDQ4Olx0XHRkZWZhdWx0IG5cbiAgNDk6XHRcdGhlbHBcbiAgNTA6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSB6c3dhcCBzaHJpbmtlciB3aWxsIGJlIGVuYWJsZWQsIGFuZCB0aGUgcGFnZXNcbiAgNTE6XHRcdCAgc3RvcmVkIGluIHRoZSB6c3dhcCBwb29sIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVjbGFpbSAoaS5lXG4gIDUyOlx0XHQgIHdyaXR0ZW4gYmFjayB0byB0aGUgYmFja2luZyBzd2FwIGRldmljZSkgb24gbWVtb3J5IHByZXNzdXJlLlxuICA1MzpcdFxuICA1NDpcdFx0ICBUaGlzIG1lYW5zIHRoYXQgenN3YXAgd3JpdGViYWNrIGNvdWxkIGhhcHBlbiBldmVuIGlmIHRoZSBwb29sIGlzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IHdpdGggWlNXQVAqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgb3B0aW1pemluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgSSB0aGluayB3ZSBzaG91bGQgZW5hYmxlIGBaU1dBUGAsIGBTV0FQYCwgYFpTV0FQX0RFRkFVTFRfT05gLCBhbmQgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gLiBNeSBmb2N1cyBpcyBvbiB3aGVyZSB3ZSBjYW4gZmluZS10dW5lIHRoaW5ncy4gVGhlIHBhdGNoIG1vZGlmaWVzIGBzaHJpbmtfbWVtY2dgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBib3RoIGBzaHJpbmtfd29ya2VyYCBhbmQgYHpzd2FwX3N0b3JlYCwgc28gdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgY2hhbmdlcyBhcmUuIEkgc2VlIHRoYXQgYHNocmlua193b3JrZXJgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBnaXZlcyBpdCBpbnRlcm5hbCBsaW5rYWdlLiBOb3csIGB6c3dhcF9zdG9yZWAgaXNuJiMzOTt0IHN0YXRpYywgc28gaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UsIHNvIEkgc2hvdWxkIGxvb2sgaW50byBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgYHpzd2FwX3N0b3JlYCBmdW5jdGlvbiBpbiBgbW0venN3YXAuY2Agbm93IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQmIzM5O3MgdGhlIGtleSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jvb2wgenN3YXBfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9MTMzNz1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS96c3dhcC5jLTE0MjctXG5tbS96c3dhcC5jOjE0Mjg6c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbm1tL3pzd2FwLmMtMTQyOS1cdFx0XHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbi0tXG5tbS96c3dhcC5jLTE1MDctXG5tbS96c3dhcC5jOjE1MDg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTA5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA1MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKnpzd2FwX3N0b3JlIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgenN3YXBfc3RvcmVgLiBTcGVjaWZpY2FsbHksIGlzIHRoaXMgZnVuY3Rpb24sIHRoaXMgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSB6c3dhcCBpbXBsZW1lbnRhdGlvbiwgcG90ZW50aWFsbHkgZXhwb3J0ZWQgb3IgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHRoZSBjb3JlIHpzd2FwIG1vZHVsZSBpdHNlbGY/IElzIGl0IGJlaW5nIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWw/IE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIHNpZGUtZWZmZWN0cyB0aGF0IEkgbWlnaHQgYmUgbWlzc2luZyBpZiBJJiMzOTttIG9ubHkgbG9va2luZyBhdCBpdHMgdXNlIHdpdGhpbiB0aGUgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBgenN3YXBfc3RvcmVgIGlzIHBhcmFtb3VudCBmb3IgY29tcHJlaGVuZGluZyBpdHMgaW1wbGljYXRpb25zIGFjcm9zcyB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHJlZmFjdG9yaW5nLCBvciBzaW1wbHkgZW5zdXJpbmcgdGhlIG92ZXJhbGwgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfaW8uYz0yNTE9aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnN3YXBfcGx1Zylcbi0tXG5tbS9wYWdlX2lvLmMtMjg0LVxubW0vcGFnZV9pby5jOjI4NTpcdGlmICh6c3dhcF9zdG9yZShmb2xpbykpIHtcbm1tL3BhZ2VfaW8uYy0yODYtXHRcdGNvdW50X210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksIE1USFBfU1RBVF9aU1dQT1VUKTtcbi0tXG5tbS96c3dhcC5jLTQ2LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo0NzphdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTQ4LS8qIFRoZSBudW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo0OTpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xubW0venN3YXAuYy01MC1cbi0tXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03NzQtXHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbm1tL3pzd2FwLmM6Nzc1Olx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtNzc2LVx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jOjc3NzpcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xubW0venN3YXAuYy03NzgtfVxuLS1cbm1tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4MS0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcbm1tL3pzd2FwLmM6OTgyOiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtOTgzLSAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xuLS1cbm1tL3pzd2FwLmM9MTE5MD1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIyNC1cdFx0bnJfYmFja2luZyA9IHpzd2FwX3RvdGFsX3BhZ2VzKCk7XG5tbS96c3dhcC5jOjEyMjU6XHRcdG5yX3N0b3JlZCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTIyNi1cdH1cbi0tXG5tbS96c3dhcC5jPTEzMzc9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xNDI3LVxubW0venN3YXAuYzoxNDI4OnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS96c3dhcC5jLTE0MjktXHRcdFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0venN3YXAuYy0xNDY2LVx0ICogbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBHcmFiIHJlZnMgdG8gdGhlIHBvb2wgYW5kIG9iamNnLFxubW0venN3YXAuYzoxNDY3Olx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXG5tbS96c3dhcC5jLTE0NjgtXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcbi0tXG5tbS96c3dhcC5jLTE0NzUtXHR9XG5tbS96c3dhcC5jOjE0NzY6XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ3Ny1cdGlmIChlbnRyeS1cdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxubW0venN3YXAuYzoxNDc4Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ3OS1cbi0tXG5tbS96c3dhcC5jLTE1MDctXG5tbS96c3dhcC5jOjE1MDg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNTA5LXtcbi0tXG5tbS96c3dhcC5jLTE1NTItXG5tbS96c3dhcC5jOjE1NTM6XHRcdGlmICghenN3YXBfc3RvcmVfcGFnZShwYWdlLCBvYmpjZywgcG9vbCkpXG5tbS96c3dhcC5jLTE1NTQtXHRcdFx0Z290byBwdXRfcG9vbDtcbi0tXG5tbS96c3dhcC5jPTE3MzM9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE3MzQte1xubW0venN3YXAuYzoxNzM1Olx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTczNi1cdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTc0MD1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcbm1tL3pzd2FwLmMtMTc0MS17XG5tbS96c3dhcC5jOjE3NDI6XHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYy0xNzQzLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gWnN3YXAgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgbXkgZnV6emluZyBlZmZvcnRzIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB6c3dhcC4gYHpzd2FwX3N0b3JlYCwgaXQgc2VlbXMsIGlzIHRoZSBwcmltZSB0YXJnZXQuIEl0JiMzOTtzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBzd2FwX3dyaXRlb3V0YCBpbiBgbW0vcGFnZV9pby5jYCwgd2hpY2gsIHdoaWxlIGEgZ29vZCBmdXp6aW5nIGNhbmRpZGF0ZSBpbiBpdHMgb3duIHJpZ2h0IGFzIGEgZ2VuZXJpYyBzd2FwIGZ1bmN0aW9uLCBzZWVtcyB0b28gYnJvYWQgaW5pdGlhbGx5LiBgenN3YXBfc3RvcmVgLCBiZWluZyB0aGUgZW50cnkgcG9pbnQgdG8genN3YXAgaXRzZWxmLCBwcmVzZW50cyBhIG1vcmUgZm9jdXNlZCBhcmVhIGZvciBleHBsb3JhdGlvbi4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzLiBUaGVyZSYjMzk7cyBgc2hyaW5rX3dvcmtlcmAsIHdoaWNoIEkgcmVtZW1iZXIgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24gcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFtYXRpb24uIEJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgbGVhbnMgdG93YXJkcyBgenN3YXBfc3RvcmVgIGJlaW5nIHRoZSBjb3JlIGVudHJ5LiBBaCwgeWVzLCBgc2hyaW5rX21lbWNnYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB6c3dhcF9zdG9yZWAgYW5kIGBzaHJpbmtfd29ya2VyYCwgYnV0IGFnYWluLCB0aGUgY2VudHJhbCBwb2ludCByZW1haW5zIGB6c3dhcF9zdG9yZWAuCgpBbHJpZ2h0LCBJIHNob3VsZCBjb25maXJtIHRoYXQgYHpzd2FwX3N0b3JlYCBpcyByZWFjaGFibGUuIExldCYjMzk7cyBzZWUuLi4gWWVwLCBkaXJlY3RseSBjYWxsZWQgZnJvbSBgc3dhcF93cml0ZW91dGAuIE5vdywgbGV0JiMzOTtzIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwb3NzaWJsZSBlbnRyeSBwb2ludHMgd2l0aGluIGBtbS96c3dhcC5jYCwgcGFydGljdWxhcmx5IGFyb3VuZCBgc2hyaW5rX3dvcmtlcmAgdG8gZ2FpbiBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IG9mIGB6c3dhcF9zdG9yZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua193b3JrZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9NzA4PXZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy03MjItICpcbm1tL3pzd2FwLmM6NzIzOiAqIFNpbmNlIHRoZSBnbG9iYWwgc2hyaW5rZXIgc2hyaW5rX3dvcmtlcigpIG1heSBob2xkIGEgcmVmZXJlbmNlXG5tbS96c3dhcC5jLTcyNC0gKiBvZiB0aGUgbWVtY2csIHdlIG11c3QgY2hlY2sgYW5kIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBpblxuLS1cbm1tL3pzd2FwLmMtNzI2LSAqXG5tbS96c3dhcC5jOjcyNzogKiBzaHJpbmtfd29ya2VyKCkgbXVzdCBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhpcyBmdW5jdGlvbiByZWxlYXNlc1xubW0venN3YXAuYy03MjgtICogdGhlIHJlZmVyZW5jZSBvZiBtZW1jZyBiZWluZyBzaHJ1bmsuXG4tLVxubW0venN3YXAuYz0xMjkzPXN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBucl90b19zY2FuKVxuLS1cbm1tL3pzd2FwLmMtMTMzNi1cbm1tL3pzd2FwLmM6MTMzNzpzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbm1tL3pzd2FwLmMtMTMzOC17XG4tLVxubW0venN3YXAuYy0xMzY4LVx0ICogb2ZmbGluZSBtZW1jZyBsZWZ0IGluIHpzd2FwX25leHRfc2hyaW5rIHdpbGwgaG9sZCB0aGUgcmVmZXJlbmNlXG5tbS96c3dhcC5jOjEzNjk6XHQgKiB1bnRpbCB0aGUgbmV4dCBydW4gb2Ygc2hyaW5rX3dvcmtlcigpLlxubW0venN3YXAuYy0xMzcwLVx0ICovXG4tLVxubW0venN3YXAuYz0xNzkxPXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcbi0tXG5tbS96c3dhcC5jLTE4MjAtXG5tbS96c3dhcC5jOjE4MjE6XHRJTklUX1dPUksoXHUwMDI2enN3YXBfc2hyaW5rX3dvcmssIHNocmlua193b3JrZXIpO1xubW0venN3YXAuYy0xODIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFpzd2FwJiMzOTtzIFNocmlua2luZyBNZWNoYW5pc20qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgc2hyaW5rX3dvcmtlcmAgdmFyaWFibGUuIFRoZSBjb2RlIGluaXRpYWxpemVzIGl0IGFzIGB6c3dhcF9zaHJpbmtfd29ya2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hlcmUgdGhlIGhlY2sgaXMgdGhpcyBgenN3YXBfc2hyaW5rX3dvcmtgIHN0cnVjdHVyZSBhY3R1YWxseSAqcXVldWVkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc2hyaW5raW5nIHByb2Nlc3MgaXMgc2NoZWR1bGVkIGFuZCB0cmlnZ2VyZWQuIElzIGl0IG9uIGEgd29ya3F1ZXVlPyBBIHRpbWVyPyBTb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBhZ2dyZXNzaXZlbHkgWnN3YXAgd2lsbCB0cnkgdG8gcmVjbGFpbSBtZW1vcnkgYW5kIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlIHNocmlua2luZyBwcm9jZXNzLiBUaGUgcXVldWVpbmcgbWVjaGFuaXNtIHdpbGwgZGV0ZXJtaW5lIHdoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJ1biwgc28gSSBtdXN0IGZpbmQgdGhlIGNvZGUgd2hlcmUgdGhpcyB3b3JrZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGUgcXVldWUsIGluIG9yZGVyIHRvIGdhaW4gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBac3dhcCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfc2hyaW5rX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9MTY4PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqenN3YXBfbmV4dF9zaHJpbms7XG5tbS96c3dhcC5jOjE2OTpzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHpzd2FwX3Nocmlua193b3JrO1xubW0venN3YXAuYy0xNzAtc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XG4tLVxubW0venN3YXAuYz0xNTA4PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE1NjgtXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgenN3YXBfcG9vbF9yZWFjaGVkX2Z1bGwpXG5tbS96c3dhcC5jOjE1Njk6XHRcdHF1ZXVlX3dvcmsoc2hyaW5rX3dxLCBcdTAwMjZ6c3dhcF9zaHJpbmtfd29yayk7XG5tbS96c3dhcC5jLTE1NzAtY2hlY2tfb2xkOlxuLS1cbm1tL3pzd2FwLmM9MTc5MT1zdGF0aWMgaW50IHpzd2FwX3NldHVwKHZvaWQpXG4tLVxubW0venN3YXAuYy0xODIwLVxubW0venN3YXAuYzoxODIxOlx0SU5JVF9XT1JLKFx1MDAyNnpzd2FwX3Nocmlua193b3JrLCBzaHJpbmtfd29ya2VyKTtcbm1tL3pzd2FwLmMtMTgyMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgWnN3YXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCBzZWVtcyB0aGUgYWN0aW9uIHN0YXJ0cyB3aXRoIGB6c3dhcF9zdG9yZWAuIFRoYXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiB0byB0cmFjZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gRnJvbSB3aGF0IEkgc2VlLCBgWlNXQVBgIGlzIGRlcGVuZGVudCBvbiBgU1dBUGAsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIGBaU1dBUF9ERUZBVUxUX09OYCBhbmQgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIGJvdGgsIGluIHR1cm4sIGRlcGVuZCBvbiBgWlNXQVBgLiBUaHVzLCB0byBlbnN1cmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGVuYWJsZToKCiogICBgU1dBUGAKKiAgIGBaU1dBUGAKKiAgIGBaU1dBUF9ERUZBVUxUX09OYAoqICAgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gCgpUaGF0IHNob3VsZCBiZSB0aGUgYmFyZSBtaW5pbXVtIHRvIG1ha2UgZXZlcnl0aGluZyB3b3JrIHJpZ2h0LgoKSG1tLCBhbnl0aGluZyBlbHNlPyBSaWdodCwgSSBzZWUgYSBtb2RpZmljYXRpb24gdG8gYHNocmlua19tZW1jZ2AsIGFuZCBpdCYjMzk7cyB1c2luZyBgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZylgLiBTaW5jZSB0aGlzIGRlYWxzIHdpdGggbWVtb3J5IGNncm91cHMsIGl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXIgaWYgYE1FTUNHYCBpcyByZXF1aXJlZCBmb3IgYFpTV0FQYC4gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGEgbGl0dGxlIGZ1cnRoZXIgdG8gY29uZmlybSBpZiBgTUVNQ0dgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBvciBhIGNvbmRpdGlvbmFsIG9uZS4gSSBiZXR0ZXIgbWFrZSBhIG5vdGUgb2YgdGhpcyB0byByZXZpc2l0IGxhdGVyLCBlc3BlY2lhbGx5IHdoZW4gSSBnZXQgdG8gYWN0dWFsbHkgKnVzaW5nKiB0aGUgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTgwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIHRoZSBaU1dBUCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBaU1dBUGAgZmVhdHVyZSBpbiB0aGlzIGNvbnRleHQuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gQWgsIG9mIGNvdXJzZSwgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB1c3VhbCBzcG90IGZvciBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpdmUgaW4gdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQgd2l0aCBgWlNXQVBgLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgQ09ORklHX1pTV0FQYCBhbmQgbGlrZWx5IHNvbWUgYXNzb2NpYXRlZCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBiYWNrZW5kLCBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCBhbmQgcGVyaGFwcyBwYWdlIGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGhhcyBiZWVuIGFkYXB0ZWQgZnJvbSB3aGF0IEkmIzM5O20gdXNlZCB0by4gVGltZSB0byBnZXQgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIGluZGVwZW5kZW50IG9mIGBNRU1DR2AgYXQgZmlyc3QgZ2xhbmNlLiBIb3dldmVyLCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgc2hyaW5rX21lbWNnYCBhbmQgdGhlIGluY2x1c2lvbiBvZiBgbWVtX2Nncm91cF9kaXNhYmxlZCgpYCBjaGVja3MgYXJlIHJhaXNpbmcgYSBmbGFnLiBJdCYjMzk7cyBtYWtpbmcgbWUgdGhpbmsgZW5hYmxpbmcgYE1FTUNHYCBtaWdodCBiZSBhIGdvb2QgbW92ZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLCBqdXN0IHRvIGJlIHN1cmUuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3ND1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4My1cbmluaXQvS2NvbmZpZzoxMDg0OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODUtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTItXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA2LVxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc1NgoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiA0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgWnN3YXAgU2hyaW5rZXIgTG9naWMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbml0L0tjb25maWdgIGFuZCBlbmFibGVzIGBNRU1DR2AuIEl04oCZcyBjYWxsZWQgYnkgYHNocmlua193b3JrZXJgIGFuZCwgaW1wb3J0YW50bHksIGB6c3dhcF9zdG9yZWAsIHdoaWNoIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHpzd2FwLiBUaGUgcGF0Y2ggYWRkcyBgbnJfdG9fc2NhbmAgdG8gYHNocmlua19tZW1jZ2AsIHdoaWNoIGxvb2tzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKYHpzd2FwX3N0b3JlYCBnZXRzIGNhbGxlZCB3aGVuIGEgcGFnZSBpcyBzd2FwcGVkIG91dC4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgZnV6eiBgenN3YXBfc3RvcmVgIGJlY2F1c2UgaXQmIzM5O3Mgbm90IGEgc3lzY2FsbCwgYnV0IEkgKmNhbiogcmVhY2ggaXQgYnkgZ2VuZXJhdGluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGZvcmNpbmcgc29tZSBzd2FwcGluZy4gU28sIHRoYXQgbWVhbnMgaXQgaXMgZmVhc2libGUgdG8gZnV6eiB0aGlzLiBJIHdpbGwgZ28gYWhlYWQgYW5kIGFkZCBgenN3YXBfc3RvcmVgIHRvIGBGb2N1c1N5bWJvbHNgLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgenN3YXBfc3RvcmVgIGlzIHRoZSBiZXN0IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBhbmQgaXQgaXMuIEl0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHpzd2FwLiBgc2hyaW5rX3dvcmtlcmAgaXMgcGFydCBvZiBhIHdvcmtxdWV1ZSwgc28gaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGNhbGxhYmxlLCBhbmQgYHNocmlua19tZW1jZ2AgaXMgc3RhdGljLiBTbywgZnV6emluZyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYHpzd2FwX3N0b3JlYCwgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gT2theSwgc28gYHNocmlua19tZW1jZ2Agbm93IGFjY2VwdHMgYG5yX3RvX3NjYW5gLCBgc2hyaW5rX3dvcmtlcmAgcGFzc2VzIGBTV0FQX0NMVVNURVJfTUFYYCwgYW5kIGB6c3dhcF9zdG9yZWAgYWxzbyBwYXNzZXMgYFNXQVBfQ0xVU1RFUl9NQVhgLiBUaGlzIGlzIG1ha2luZyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLCByaWdodCBpbiB0aGUgenN3YXAgcGF0aC4gSXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyB0aGUgenN3YXAgc2hyaW5rZXIgbG9naWMgYW5kIGhvdyBpdCBzY2FucyBwYWdlcyBhY3Jvc3MgcGVyLW5vZGUgTFJVcywgd2hpY2ggaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEuIEl04oCZcyByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSBwcmVzc3VyZSBhbmQgc3dhcHBpbmcgYW5kIGZ1enppbmcgYHpzd2FwX3N0b3JlYCBpcyB0aGUgYmVzdCB3YXkgdG8gZXhlcmNpc2UgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4KCk9rYXksIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBzaHJpbmtlciBsb2dpYyB0byBzY2FuIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzIGFjcm9zcyBwZXItbm9kZSBMUlVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwcGluZy4gRnV6emluZyBgenN3YXBfc3RvcmVgIHdpbGwgaGVscCBleGVyY2lzZSB0aGlzIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjE1LjA5Mjg4NDY4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjU4MzkzMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJaU1dBUF9ERUZBVUxUX09OXCIsXG4gICAgXCJaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MTUuMDkyODkyNzQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxNDAwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMzVhZWQyM2M1YTlkNmJjYjZhOWRkM2E0YjJiYzYzNWIyMzFhOTk3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDIwOjQyOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggYjVhMTdlYTIwMjM3OS4uODJkZGRmZTc0ZWY3YSAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC0xMjc1LDkgKzEyNzUsMjUgQEAgc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfYWxsb2Nfc2hyaW5rZXIodm9pZClcXG4gXFx0cmV0dXJuIHNocmlua2VyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuKy8qXFxuKyAqIFNjYW4gdXAgdG8gQG5yX3RvX3NjYW4gcGFnZXMgYWNyb3NzIHRoZSBwZXItbm9kZSB6c3dhcCBMUlVzIG9mIEBtZW1jZ1xcbisgKiBhbmQgd3JpdGUgYmFjayB0aGUgcmVjbGFpbWFibGUgb25lcy5cXG4rICpcXG4rICogU2luY2UgdGhlIHNlY29uZC1jaGFuY2UgYWxnb3JpdGhtIHJvdGF0ZXMgcmVmZXJlbmNlZCBlbnRyaWVzIHRvIHRoZVxcbisgKiBMUlUgdGFpbCwgdGhlIHBlci1ub2RlIHNjYW4gaXMgY2FwcGVkIGF0IHRoZSBjdXJyZW50IExSVSBsZW5ndGggc29cXG4rICogZWFjaCBlbnRyeSBpcyBzY2FubmVkIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlclxcbisgKiB0byBoYW5kbGUgcmV0cmllcywgZGVjaWRpbmcgd2hldGhlciB0byBzY2FuIGFub3RoZXIgbWVtY2cgdG8gY29tcGxldGVcXG4rICogdGhlIGZ1bGwgaXRlcmF0aW9uLCBvciB0byByZXNjYW4gdGhlIGN1cnJlbnQgbWVtY2cgdG8gZHJhaW4gaXRzIHpzd2FwXFxuKyAqIGVudHJpZXMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgd2FzIHdyaXR0ZW4gYmFjaywgLUVBR0FJTiBpZiBlbnRyaWVzXFxuKyAqIHdlcmUgc2Nhbm5lZCBidXQgbm9uZSBjb3VsZCBiZSB3cml0dGVuIGJhY2ssIG9yIC1FTk9FTlQgaWYgQG1lbWNnIGhhc1xcbisgKiB3cml0ZWJhY2sgZGlzYWJsZWQsIGlzIGEgem9tYmllIGNncm91cCwgb3IgaGFzIGVtcHR5IHpzd2FwIExSVXMuXFxuKyAqL1xcbitzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbilcXG4ge1xcbi1cXHRpbnQgbmlkLCBzaHJ1bmsgPSAwLCBzY2FubmVkID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl90b19zY2FuO1xcbitcXHRpbnQgbmlkLCBzaHJ1bmsgPSAwO1xcbiBcXG4gXFx0aWYgKCFtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKG1lbWNnKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuQEAgLTEyOTAsMTQgKzEzMDYsMjkgQEAgc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX05PUk1BTF9NRU1PUlkpIHtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrID0gMTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2FwIHRoZSBzY2FuIGF0IHBlci1ub2RlIExSVSBsZW5ndGggc28gZWFjaCBlbnRyeSBpcyBzY2FubmVkXFxuK1xcdFxcdCAqIGF0IG1vc3Qgb25jZSBwZXIgY2FsbC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG5yX3RvX3dhbGsgPSBtaW4obnJfcmVtYWluaW5nLFxcbitcXHRcXHRcXHRcXHQgbGlzdF9scnVfY291bnRfb25lKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZykpO1xcbitcXHRcXHRpZiAoIW5yX3RvX3dhbGspXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0bnJfcmVtYWluaW5nIC09IG5yX3RvX3dhbGs7XFxuIFxcdFxcdHNocnVuayArPSBsaXN0X2xydV93YWxrX29uZShcXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLCBOVUxMLCBcXHUwMDI2bnJfdG9fd2Fsayk7XFxuLVxcdFxcdHNjYW5uZWQgKz0gMSAtIG5yX3RvX3dhbGs7XFxuK1xcdFxcdC8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovXFxuK1xcdFxcdG5yX3JlbWFpbmluZyArPSBucl90b193YWxrO1xcbitcXG4rXFx0XFx0aWYgKCFucl9yZW1haW5pbmcpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXNjYW5uZWQpXFxuK1xcdC8qIE5vdGhpbmcgd2FzIHNjYW5uZWQ6IGV2ZXJ5IExSVSB1bmRlciBAbWVtY2cgd2FzIGVtcHR5LiAqL1xcbitcXHRpZiAobnJfcmVtYWluaW5nID09IG5yX3RvX3NjYW4pXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG4gXFx0cmV0dXJuIHNocnVuayA/IDAgOiAtRUFHQUlOO1xcbkBAIC0xMzU2LDExICsxMzg3LDEyIEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiBcXHRcXHR9IHdoaWxlIChtZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF90cnlnZXRfb25saW5lKG1lbWNnKSk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ6c3dhcF9zaHJpbmtfbG9jayk7XFxuIFxcbi1cXHRcXHRpZiAoIW1lbWNnKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIENvbnRpbnVlIHNocmlua2luZyB3aXRob3V0IGluY3JlbWVudGluZyBmYWlsdXJlcyBpZlxcbi1cXHRcXHRcXHQgKiB3ZSBmb3VuZCBjYW5kaWRhdGUgbWVtY2dzIGluIHRoZSBsYXN0IHRyZWUgd2Fsay5cXG4tXFx0XFx0XFx0ICovXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgTlVMTCBtZW1jZyBlbmRzIGEgZnVsbCBoaWVyYXJjaHkgcGFzcyAoZXhjZXB0IHdoZW4gbWVtY2cgaXNcXG4rXFx0XFx0ICogZGlzYWJsZWQsIHdoZXJlIGl0IGlzIGFsd2F5cyBOVUxMOiBmYWxsIHRocm91Z2ggdG8gdGhlIHJvb3QgTFJVKS5cXG4rXFx0XFx0ICogQ291bnQgYSBmYWlsdXJlIG9ubHkgaWYgdGhlIGxhc3QgcGFzcyBmb3VuZCBubyBjYW5kaWRhdGVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XFxuIFxcdFxcdFxcdGlmICghYXR0ZW1wdHMgXFx1MDAyNlxcdTAwMjYgKytmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTEzNjgsNyArMTQwMCw3IEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiBcXHRcXHRcXHRnb3RvIHJlc2NoZWQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7XFxuK1xcdFxcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZywgU1dBUF9DTFVTVEVSX01BWCk7XFxuIFxcdFxcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqL1xcbiBcXHRcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIFxcbkBAIC0xMzc5LDcgKzE0MTEsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFx0XFx0ICogYW5kIGZhaWx1cmVzLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHJldCA9PSAtRU5PRU5UKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0Z290byByZXNjaGVkO1xcbiBcXHRcXHQrK2F0dGVtcHRzO1xcbiBcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiArK2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXFxuQEAgLTE0OTIsNyArMTUyNCw3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0aWYgKG9iamNnIFxcdTAwMjZcXHUwMDI2ICFvYmpfY2dyb3VwX21heV96c3dhcChvYmpjZykpIHtcXG4gXFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG4tXFx0XFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcXG4rXFx0XFx0aWYgKHNocmlua19tZW1jZyhtZW1jZywgU1dBUF9DTFVTVEVSX01BWCkpIHtcXG4gXFx0XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiBcXHRcXHRcXHRnb3RvIHB1dF9vYmpjZztcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MjoxNS41NjMxMjQ1MzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Mjc4ODE0MTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBzaHJpbmtlciBsb2dpYyB0byBzY2FuIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzIGFjcm9zcyBwZXItbm9kZSBMUlVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwcGluZy4gRnV6emluZyBgenN3YXBfc3RvcmVgIHdpbGwgaGVscCBleGVyY2lzZSB0aGlzIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzNWFlZDIzYzVhOWQ2YmNiNmE5ZGQzYTRiMmJjNjM1YjIzMWE5OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAyMDo0MjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBiNWExN2VhMjAyMzc5Li44MmRkZGZlNzRlZjdhIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTEyNzUsOSArMTI3NSwyNSBAQCBzdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuIFx0cmV0dXJuIHNocmlua2VyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rLypcbisgKiBTY2FuIHVwIHRvIEBucl90b19zY2FuIHBhZ2VzIGFjcm9zcyB0aGUgcGVyLW5vZGUgenN3YXAgTFJVcyBvZiBAbWVtY2dcbisgKiBhbmQgd3JpdGUgYmFjayB0aGUgcmVjbGFpbWFibGUgb25lcy5cbisgKlxuKyAqIFNpbmNlIHRoZSBzZWNvbmQtY2hhbmNlIGFsZ29yaXRobSByb3RhdGVzIHJlZmVyZW5jZWQgZW50cmllcyB0byB0aGVcbisgKiBMUlUgdGFpbCwgdGhlIHBlci1ub2RlIHNjYW4gaXMgY2FwcGVkIGF0IHRoZSBjdXJyZW50IExSVSBsZW5ndGggc29cbisgKiBlYWNoIGVudHJ5IGlzIHNjYW5uZWQgYXQgbW9zdCBvbmNlIHBlciBjYWxsLiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyXG4rICogdG8gaGFuZGxlIHJldHJpZXMsIGRlY2lkaW5nIHdoZXRoZXIgdG8gc2NhbiBhbm90aGVyIG1lbWNnIHRvIGNvbXBsZXRlXG4rICogdGhlIGZ1bGwgaXRlcmF0aW9uLCBvciB0byByZXNjYW4gdGhlIGN1cnJlbnQgbWVtY2cgdG8gZHJhaW4gaXRzIHpzd2FwXG4rICogZW50cmllcy5cbisgKlxuKyAqIFJldHVybjogMCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgd2FzIHdyaXR0ZW4gYmFjaywgLUVBR0FJTiBpZiBlbnRyaWVzXG4rICogd2VyZSBzY2FubmVkIGJ1dCBub25lIGNvdWxkIGJlIHdyaXR0ZW4gYmFjaywgb3IgLUVOT0VOVCBpZiBAbWVtY2cgaGFzXG4rICogd3JpdGViYWNrIGRpc2FibGVkLCBpcyBhIHpvbWJpZSBjZ3JvdXAsIG9yIGhhcyBlbXB0eSB6c3dhcCBMUlVzLlxuKyAqL1xuK3N0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBucl90b19zY2FuKVxuIHtcbi1cdGludCBuaWQsIHNocnVuayA9IDAsIHNjYW5uZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl90b19zY2FuO1xuK1x0aW50IG5pZCwgc2hydW5rID0gMDtcbiBcbiBcdGlmICghbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChtZW1jZykpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTEyOTAsMTQgKzEzMDYsMjkgQEAgc3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX05PUk1BTF9NRU1PUlkpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrID0gMTtcbitcdFx0dW5zaWduZWQgbG9uZyBucl90b193YWxrO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBDYXAgdGhlIHNjYW4gYXQgcGVyLW5vZGUgTFJVIGxlbmd0aCBzbyBlYWNoIGVudHJ5IGlzIHNjYW5uZWRcbitcdFx0ICogYXQgbW9zdCBvbmNlIHBlciBjYWxsLlxuK1x0XHQgKi9cbitcdFx0bnJfdG9fd2FsayA9IG1pbihucl9yZW1haW5pbmcsXG4rXHRcdFx0XHQgbGlzdF9scnVfY291bnRfb25lKFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnKSk7XG4rXHRcdGlmICghbnJfdG9fd2FsaylcbitcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0bnJfcmVtYWluaW5nIC09IG5yX3RvX3dhbGs7XG4gXHRcdHNocnVuayArPSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG4tXHRcdHNjYW5uZWQgKz0gMSAtIG5yX3RvX3dhbGs7XG4rXHRcdC8qIFJldHVybiB0aGUgdW51c2VkIHNoYXJlIG9mIHRoZSBidWRnZXQgdG8gdGhlIHBvb2wuICovXG4rXHRcdG5yX3JlbWFpbmluZyArPSBucl90b193YWxrO1xuK1xuK1x0XHRpZiAoIW5yX3JlbWFpbmluZylcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdGlmICghc2Nhbm5lZClcbitcdC8qIE5vdGhpbmcgd2FzIHNjYW5uZWQ6IGV2ZXJ5IExSVSB1bmRlciBAbWVtY2cgd2FzIGVtcHR5LiAqL1xuK1x0aWYgKG5yX3JlbWFpbmluZyA9PSBucl90b19zY2FuKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiBcdHJldHVybiBzaHJ1bmsgPyAwIDogLUVBR0FJTjtcbkBAIC0xMzU2LDExICsxMzg3LDEyIEBAIHN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuIFx0XHR9IHdoaWxlIChtZW1jZyBcdTAwMjZcdTAwMjYgIW1lbV9jZ3JvdXBfdHJ5Z2V0X29ubGluZShtZW1jZykpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ6c3dhcF9zaHJpbmtfbG9jayk7XG4gXG4tXHRcdGlmICghbWVtY2cpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIENvbnRpbnVlIHNocmlua2luZyB3aXRob3V0IGluY3JlbWVudGluZyBmYWlsdXJlcyBpZlxuLVx0XHRcdCAqIHdlIGZvdW5kIGNhbmRpZGF0ZSBtZW1jZ3MgaW4gdGhlIGxhc3QgdHJlZSB3YWxrLlxuLVx0XHRcdCAqL1xuK1x0XHQvKlxuK1x0XHQgKiBBIE5VTEwgbWVtY2cgZW5kcyBhIGZ1bGwgaGllcmFyY2h5IHBhc3MgKGV4Y2VwdCB3aGVuIG1lbWNnIGlzXG4rXHRcdCAqIGRpc2FibGVkLCB3aGVyZSBpdCBpcyBhbHdheXMgTlVMTDogZmFsbCB0aHJvdWdoIHRvIHRoZSByb290IExSVSkuXG4rXHRcdCAqIENvdW50IGEgZmFpbHVyZSBvbmx5IGlmIHRoZSBsYXN0IHBhc3MgZm91bmQgbm8gY2FuZGlkYXRlcy5cbitcdFx0ICovXG4rXHRcdGlmICghbWVtY2cgXHUwMDI2XHUwMDI2ICFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpIHtcbiBcdFx0XHRpZiAoIWF0dGVtcHRzIFx1MDAyNlx1MDAyNiArK2ZhaWx1cmVzID09IE1BWF9SRUNMQUlNX1JFVFJJRVMpXG4gXHRcdFx0XHRicmVhaztcbiBcbkBAIC0xMzY4LDcgKzE0MDAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0XHRnb3RvIHJlc2NoZWQ7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnKTtcbitcdFx0cmV0ID0gc2hyaW5rX21lbWNnKG1lbWNnLCBTV0FQX0NMVVNURVJfTUFYKTtcbiBcdFx0LyogZHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlICovXG4gXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC0xMzc5LDcgKzE0MTEsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiBcdFx0ICogYW5kIGZhaWx1cmVzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHJldCA9PSAtRU5PRU5UKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGdvdG8gcmVzY2hlZDtcbiBcdFx0KythdHRlbXB0cztcbiBcbiBcdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgKytmYWlsdXJlcyA9PSBNQVhfUkVDTEFJTV9SRVRSSUVTKVxuQEAgLTE0OTIsNyArMTUyNCw3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRpZiAob2JqY2cgXHUwMDI2XHUwMDI2ICFvYmpfY2dyb3VwX21heV96c3dhcChvYmpjZykpIHtcbiBcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcbi1cdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcbitcdFx0aWYgKHNocmlua19tZW1jZyhtZW1jZywgU1dBUF9DTFVTVEVSX01BWCkpIHtcbiBcdFx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXHRcdFx0Z290byBwdXRfb2JqY2c7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjE1LjU2MzEyNjMyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDI1NjYwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac3dhcCBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBiZWVuIHByb3Bvc2VkIGZvciBgbW0venN3YXAuY2AuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgbmV3IHBhcmFtZXRlciwgYG5yX3RvX3NjYW5gLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBgc2hyaW5rX3dvcmtlcmAgYW5kIGB6c3dhcF9zdG9yZWAgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gcGFzcyBgU1dBUF9DTFVTVEVSX01BWGAgdG8gdGhpcyBuZXcgcGFyYW1ldGVyLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBjaGFuZ2UgaW4gYHNocmlua19tZW1jZ2AgaXMgdGhlIGxvZ2ljIHRvIHNjYW4gdXAgdG8gYG5yX3RvX3NjYW5gIHBhZ2VzIGFjcm9zcyB0aGUgenN3YXAgTFJVcyBmb3IgYSBnaXZlbiBgbWVtY2dgIGFuZCByZWNsYWltIHRob3NlIHBhZ2VzIHRoYXQgcXVhbGlmeS4gVGhlcmUncyBhbHNvIHNvbWUgY29uZGl0aW9uYWwgaGFuZGxpbmcgZm9yIGEgTlVMTCBgbWVtY2dgIGluIGBzaHJpbmtfd29ya2VyYCB3aGVuIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGlzIHRydWUuXG5cbk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIGNvZGUsIGFuZCBpZiBzbywgaXMgaXQgd29ydGggaW52ZXN0aW5nIGVmZm9ydCBpbiBmdXp6aW5nLiBac3dhcCBpcyBwcmV0dHkgY3JpdGljYWwsIGl0J3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUsIHNvIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZSBjb3VsZCBiZSBpbXBhY3RmdWwuIEdpdmVuIHRoZSBwYXRjaCdzIHRvdWNoIG9uIGB6c3dhcF9zdG9yZWAgKGR1cmluZyBzd2FwLW91dCB0byB6c3dhcCkgYW5kIGBzaHJpbmtfd29ya2VyYCAoZm9yIHpzd2FwIHNocmlua2luZyksIGl0IGRlZmluaXRlbHkgc2VlbXMgbGlrZSB0aGVyZSBjb3VsZCBiZSBzb21lIGludGVyZXN0aW5nIGZ1enppbmcgc3VyZmFjZXMuXG5cbk5vdywgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIHdoYXQgdGhlIHJlbGF0ZWQgY29uZmlnIG9wdGlvbnMgYXJlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MjAuNDY1Njk0OTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDE2MTg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MjoyMC41Njk4NjIyMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA1MTcyNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipaU1dBUCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBaU1dBUCBpcyB0aGUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZXhhbWluZS4gQmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgKmhvdyogaXQncyBzZXQgdXAsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGludm9sdmVkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IFpTV0FQIHJlbGllcyBvbiwgYm90aCBhdCB0aGUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGxldmVsLiBUaGlzIGluY2x1ZGVzIGxvb2tpbmcgaW50byB0aGUga2VybmVsIG1vZHVsZXMsIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29tcG9uZW50cyB0aGF0IFpTV0FQIGludGVyYWN0cyB3aXRoIG9yIGRlcGVuZHMgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBXaXRob3V0IHRoYXQgY29udGV4dCwgSSdtIGVzc2VudGlhbGx5IGZseWluZyBibGluZCBhbmQgY291bGQgbWlzaW50ZXJwcmV0IHdoYXQgSSdtIHNlZWluZy4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMga2V5IGJlZm9yZSBJIGV2ZW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjIzLjY3NTAzNzM4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkxMjIyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcXG4tLVxcbm1tL0tjb25maWctMjEtXFxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcXG5tbS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTM0LVxcbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz01OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctNzYtXFxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcXG5tbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlZmxhdGVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTgyLVxcbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cXG5tbS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkxaT1xcXCJcXG4tLVxcbm1tL0tjb25maWctODgtXFxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0Mlxcbm1tL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NC1cXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XFxubW0vS2NvbmZpZy05Ni1cXHRib29sIFxcXCJMWjRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwMC1cXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXFxubW0vS2NvbmZpZy0xMDItXFx0Ym9vbCBcXFwiTFo0SENcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwNi1cXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcXG5tbS9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXFxubW0vS2NvbmZpZy0xMTMtXFxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MjMuODU0MTY1MjI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3Nzg3MTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBpbml0aWFsIGF0dGVudGlvbiBhcm91bmQgbGluZSAyMiDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IGluIHRoZXNlIEtjb25maWcgZmlsZXMuIFRoZSBzdHJ1Y3R1cmUncyB1c3VhbGx5IHByZXR0eSBjb25zaXN0ZW50LCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgbmV3IG9wdGlvbiBkZWZpbml0aW9uLCBhIG1lbnUgZW50cnksIG9yIHBlcmhhcHMgYSBjb25kaXRpb25hbCBpbmNsdWRlIHRoYXQgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgcmVsYXRlZCBjb25maWd1cmF0aW9uIGZlYXR1cmUuIExpbmUgMjIgc3BlY2lmaWNhbGx5IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gSSdtIGZvY3VzaW5nIG9uLiBJJ2xsIG1lbnRhbGx5IG5vdGUgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgbGluZSDigJMgYW55IHN1cnJvdW5kaW5nIGNvbW1lbnRzIG9yIG90aGVyIEtjb25maWcgb3B0aW9ucyDigJMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYW5kIGFueSBkZXBlbmRlbmNpZXMuIEZyb20gdGhlcmUsIEkgY2FuIGRlY2lkZSBpZiB0aGF0J3MgdGhlIGNvcnJlY3QgZmlsZSwgb3IgaWYgSSBzaG91bGQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjI2LjczMjAzOTU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MjoyNi43MzIyMDM4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTkyMzc0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNvbnNpZGVyaW5nIFpTV0FQIGFuZCBpdHMgUmVsYXRpb25zaGlwIHRvIFNXQVAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYFpTV0FQYC4uLiB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGRlcGVuZGVuY3kgb24gYFNXQVBgLiBUaGF0J3MgZnVuZGFtZW50YWw7IHlvdSBjYW4ndCBoYXZlIG9uZSB3aXRob3V0IHRoZSBvdGhlciwgcmlnaHQ/IGBaU1dBUGAgaXMgZXNzZW50aWFsbHkgYW4gKmV4dGVuc2lvbiogb3IgKmVuaGFuY2VtZW50KiBvZiBzdGFuZGFyZCBzd2FwcGluZy4gSXQncyBidWlsdCBvbiB0aGF0IGZvdW5kYXRpb24uXG5cblRoZW4gbXkgbWluZCBkcmlmdHMgdG8gdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMuIElzIHRoZXJlIGEgdmFsdWUgaW4gYmVpbmcgYWJsZSB0byB0dXJuIGl0IG9uIGFzIGEgZGVmYXVsdD8gVGhlIGV4aXN0ZW5jZSBvZiBgWlNXQVBfREVGQVVMVF9PTmAgYXMgYW4gb3B0aW9uIHN1Z2dlc3RzIHRoYXQgc29tZW9uZSwgc29tZXdoZXJlLCB0aG91Z2h0IGl0IHdhcyBhIGdvb2QgaWRlYS4gVGhhdCBiZWdzIHRoZSBxdWVzdGlvbiwgaW4gd2hhdCBzY2VuYXJpb3Mgd291bGQgZW5hYmxpbmcgYFpTV0FQYCBieSBkZWZhdWx0IGJlIGJlbmVmaWNpYWw/IFdoYXQgYXJlIHRoZSB0cmFkZW9mZnM/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MjozMC4wMzE0NDMzOTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjMwLjAzMTU1NDQzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIxOTc3ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlpzd2FwIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB6c3dhcC4gQW5kIHRoYXQgcGhyYXNlLCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgZmV3IGNvbnNpZGVyYXRpb25zLiBJdCdzIGEga2V5IGRldGFpbCB0byB1bmRlcnN0YW5kIGhvdyB6c3dhcCBpcyBiZWhhdmluZyBvdXQtb2YtdGhlLWJveC4gIEtub3dpbmcgdGhhdCB0aGUgenN3YXAgc2hyaW5rZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGltcGFjdHMgbXkgdHVuaW5nIGNob2ljZXMuIEl0IG1lYW5zIHRoZSBzeXN0ZW0ncyBsaWtlbHkgY29uZmlndXJlZCB0byBhZ2dyZXNzaXZlbHkgcmVjbGFpbSBtZW1vcnkgZnJvbSB6c3dhcCB3aGVuIG1lbW9yeSBwcmVzc3VyZSBpbmNyZWFzZXMuICBcblxuSSBpbW1lZGlhdGVseSBzdGFydCBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zLiBJcyB0aGlzIHRoZSAqcmlnaHQqIGRlZmF1bHQgaW4gbXkgc3BlY2lmaWMgdXNlLWNhc2U/ICBGb3Igc29tZSB3b3JrbG9hZHMsIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyBnb29kIOKAkyBpdCBlbnN1cmVzIHRoYXQgd2UgYXJlIG5vdCB1bm5lY2Vzc2FyaWx5IHVzaW5nIHN3YXAsIHRodXMgaW1wcm92aW5nIHJlc3BvbnNpdmVuZXNzLiBCdXQsIGZvciBvdGhlciB3b3JrbG9hZHMsIHdoZXJlIG1lbW9yeSBwcmVzc3VyZSBpcyBtb3JlIHN1c3RhaW5lZCwgZXhjZXNzaXZlIHNocmlua2luZyBvZiB6c3dhcCBjYW4gbGVhZCB0byBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpZiBpdCBjYXVzZXMgZXhjZXNzaXZlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gb3BlcmF0aW9ucyBhcyBkYXRhIGlzIG1vdmVkIGluIGFuZCBvdXQgb2YgenN3YXAgZnJlcXVlbnRseS5cblxuSSdkIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0cmFkZS1vZmZzIGFyZSBhdCBwbGF5LiAgRG9lcyB0aGlzIGRlZmF1bHQgcG90ZW50aWFsbHkgbGVhZCB0byBtb3JlIENQVSBjeWNsZXMgc3BlbnQgb24gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbj8gIEhvdyBjYW4gSSBlbnN1cmUgdGhlIHNocmlua2luZyBiZWhhdmlvciBkb2Vzbid0IGJlY29tZSBhIGJvdHRsZW5lY2sgd2hlbiBJJ20gZGVhbGluZyB3aXRoIHN1c3RhaW5lZCBoaWdoIG1lbW9yeSB1c2FnZT8gIERvIEkgd2FudCB0byBhZGp1c3QgYHpzd2FwX21heF9wb29sX3BlcmNlbnRgLCBmb3IgaW5zdGFuY2UsIHRvIG1ha2UgdGhlIHNocmlua2VyIGJlaGF2aW9yIGxlc3MgYWdncmVzc2l2ZT8gT3IgbWF5YmUgYWRqdXN0IHRoZSBtaW5pbXVtIHBhZ2UgY291bnQgdG8gcmVjbGFpbSAoYHpzd2FwX3Nocmlua2ApIHRvIGFkanVzdCByZWNsYWltIGJlaGF2aW91cj9cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MzMuNzUzNTM0ODM1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mjg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxuICA0NjpcXHRcXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBuXFxuICA0OTpcXHRcXHRoZWxwXFxuICA1MDpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgenN3YXAgc2hyaW5rZXIgd2lsbCBiZSBlbmFibGVkLCBhbmQgdGhlIHBhZ2VzXFxuICA1MTpcXHRcXHQgIHN0b3JlZCBpbiB0aGUgenN3YXAgcG9vbCB3aWxsIGJlY29tZSBhdmFpbGFibGUgZm9yIHJlY2xhaW0gKGkuZVxcbiAgNTI6XFx0XFx0ICB3cml0dGVuIGJhY2sgdG8gdGhlIGJhY2tpbmcgc3dhcCBkZXZpY2UpIG9uIG1lbW9yeSBwcmVzc3VyZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBUaGlzIG1lYW5zIHRoYXQgenN3YXAgd3JpdGViYWNrIGNvdWxkIGhhcHBlbiBldmVuIGlmIHRoZSBwb29sIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjMzLjc1MzY4OTU5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY3NDI0OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCB3aXRoIFpTV0FQKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBvcHRpbWl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBJIHRoaW5rIHdlIHNob3VsZCBlbmFibGUgYFpTV0FQYCwgYFNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIE15IGZvY3VzIGlzIG9uIHdoZXJlIHdlIGNhbiBmaW5lLXR1bmUgdGhpbmdzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHNocmlua19tZW1jZ2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGJvdGggYHNocmlua193b3JrZXJgIGFuZCBgenN3YXBfc3RvcmVgLCBzbyB0aGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGNoYW5nZXMgYXJlLiBJIHNlZSB0aGF0IGBzaHJpbmtfd29ya2VyYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggZ2l2ZXMgaXQgaW50ZXJuYWwgbGlua2FnZS4gTm93LCBgenN3YXBfc3RvcmVgIGlzbid0IHN0YXRpYywgc28gaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UsIHNvIEkgc2hvdWxkIGxvb2sgaW50byBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byB0aGUgYHpzd2FwX3N0b3JlYCBmdW5jdGlvbiBpbiBgbW0venN3YXAuY2Agbm93IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFRoYXQncyB0aGUga2V5IG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjM3LjUyMTExNzA1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNzg3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2wgenN3YXBfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTEzMzc9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5tbS96c3dhcC5jLTE0MjctXFxubW0venN3YXAuYzoxNDI4OnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxubW0venN3YXAuYy0xNDI5LVxcdFxcdFxcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0venN3YXAuYy0xNTA3LVxcbm1tL3pzd2FwLmM6MTUwODpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6MzcuNjU0OTA5OTY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDQ4NjQ5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKnpzd2FwX3N0b3JlIElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHpzd2FwX3N0b3JlYC4gU3BlY2lmaWNhbGx5LCBpcyB0aGlzIGZ1bmN0aW9uLCB0aGlzIGNyaXRpY2FsIGNvbXBvbmVudCBvZiB0aGUgenN3YXAgaW1wbGVtZW50YXRpb24sIHBvdGVudGlhbGx5IGV4cG9ydGVkIG9yIGFjY2Vzc2VkIGZyb20gb3V0c2lkZSB0aGUgY29yZSB6c3dhcCBtb2R1bGUgaXRzZWxmPyBJcyBpdCBiZWluZyB1c2VkIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsPyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhcm91bmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBzaWRlLWVmZmVjdHMgdGhhdCBJIG1pZ2h0IGJlIG1pc3NpbmcgaWYgSSdtIG9ubHkgbG9va2luZyBhdCBpdHMgdXNlIHdpdGhpbiB0aGUgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiBgenN3YXBfc3RvcmVgIGlzIHBhcmFtb3VudCBmb3IgY29tcHJlaGVuZGluZyBpdHMgaW1wbGljYXRpb25zIGFjcm9zcyB0aGUgZW50aXJlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcsIHJlZmFjdG9yaW5nLCBvciBzaW1wbHkgZW5zdXJpbmcgdGhlIG92ZXJhbGwgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjQwLjQ5OTc3NzM5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDQzNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2lvLmM9MjUxPWludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipzd2FwX3BsdWcpXFxuLS1cXG5tbS9wYWdlX2lvLmMtMjg0LVxcbm1tL3BhZ2VfaW8uYzoyODU6XFx0aWYgKHpzd2FwX3N0b3JlKGZvbGlvKSkge1xcbm1tL3BhZ2VfaW8uYy0yODYtXFx0XFx0Y291bnRfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSwgTVRIUF9TVEFUX1pTV1BPVVQpO1xcbi0tXFxubW0venN3YXAuYy00Ni0vKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cXG5tbS96c3dhcC5jOjQ3OmF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcXG5tbS96c3dhcC5jLTQ4LS8qIFRoZSBudW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6NDk6c3RhdGljIGF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcXG5tbS96c3dhcC5jLTUwLVxcbi0tXFxubW0venN3YXAuYz03NjU9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcbi0tXFxubW0venN3YXAuYy03NzQtXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbm1tL3pzd2FwLmM6Nzc1OlxcdFxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTc3Ni1cXHR6c3dhcF9lbnRyeV9jYWNoZV9mcmVlKGVudHJ5KTtcXG5tbS96c3dhcC5jOjc3NzpcXHRhdG9taWNfbG9uZ19kZWMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy03NzgtfVxcbi0tXFxubW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05ODEtICogdG8gdGhlIHN3YXAgZGV2aWNlLiAgV2UgYXJlIGJhc2ljYWxseSByZXN1bWluZyB0aGUgc2FtZSBzd2FwXFxubW0venN3YXAuYzo5ODI6ICogd3JpdGViYWNrIHBhdGggdGhhdCB3YXMgaW50ZXJjZXB0ZWQgd2l0aCB0aGUgenN3YXBfc3RvcmUoKVxcbm1tL3pzd2FwLmMtOTgzLSAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xcbi0tXFxubW0venN3YXAuYz0xMTkwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS96c3dhcC5jLTEyMjQtXFx0XFx0bnJfYmFja2luZyA9IHpzd2FwX3RvdGFsX3BhZ2VzKCk7XFxubW0venN3YXAuYzoxMjI1OlxcdFxcdG5yX3N0b3JlZCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy0xMjI2LVxcdH1cXG4tLVxcbm1tL3pzd2FwLmM9MTMzNz1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4tLVxcbm1tL3pzd2FwLmMtMTQyNy1cXG5tbS96c3dhcC5jOjE0Mjg6c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5tbS96c3dhcC5jLTE0MjktXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuLS1cXG5tbS96c3dhcC5jLTE0NjYtXFx0ICogbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBHcmFiIHJlZnMgdG8gdGhlIHBvb2wgYW5kIG9iamNnLFxcbm1tL3pzd2FwLmM6MTQ2NzpcXHQgKiBjaGFyZ2UgenN3YXAgbWVtb3J5LCBhbmQgaW5jcmVtZW50IHpzd2FwX3N0b3JlZF9wYWdlcy5cXG5tbS96c3dhcC5jLTE0NjgtXFx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXFxuLS1cXG5tbS96c3dhcC5jLTE0NzUtXFx0fVxcbm1tL3pzd2FwLmM6MTQ3NjpcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy0xNDc3LVxcdGlmIChlbnRyeS1cXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcXG5tbS96c3dhcC5jOjE0Nzg6XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtMTQ3OS1cXG4tLVxcbm1tL3pzd2FwLmMtMTUwNy1cXG5tbS96c3dhcC5jOjE1MDg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTUwOS17XFxuLS1cXG5tbS96c3dhcC5jLTE1NTItXFxubW0venN3YXAuYzoxNTUzOlxcdFxcdGlmICghenN3YXBfc3RvcmVfcGFnZShwYWdlLCBvYmpjZywgcG9vbCkpXFxubW0venN3YXAuYy0xNTU0LVxcdFxcdFxcdGdvdG8gcHV0X3Bvb2w7XFxuLS1cXG5tbS96c3dhcC5jPTE3MzM9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xNzM0LXtcXG5tbS96c3dhcC5jOjE3MzU6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XFxubW0venN3YXAuYy0xNzM2LVxcdHJldHVybiAwO1xcbi0tXFxubW0venN3YXAuYz0xNzQwPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbm1tL3pzd2FwLmMtMTc0MS17XFxubW0venN3YXAuYzoxNzQyOlxcdCp2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtMTc0My1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6NDAuNjM3ODI2MTA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTk2MDE4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gWnN3YXAgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IG15IGZ1enppbmcgZWZmb3J0cyB3aXRoaW4gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB6c3dhcC4gYHpzd2FwX3N0b3JlYCwgaXQgc2VlbXMsIGlzIHRoZSBwcmltZSB0YXJnZXQuIEl0J3MgY2FsbGVkIGRpcmVjdGx5IGZyb20gYHN3YXBfd3JpdGVvdXRgIGluIGBtbS9wYWdlX2lvLmNgLCB3aGljaCwgd2hpbGUgYSBnb29kIGZ1enppbmcgY2FuZGlkYXRlIGluIGl0cyBvd24gcmlnaHQgYXMgYSBnZW5lcmljIHN3YXAgZnVuY3Rpb24sIHNlZW1zIHRvbyBicm9hZCBpbml0aWFsbHkuIGB6c3dhcF9zdG9yZWAsIGJlaW5nIHRoZSBlbnRyeSBwb2ludCB0byB6c3dhcCBpdHNlbGYsIHByZXNlbnRzIGEgbW9yZSBmb2N1c2VkIGFyZWEgZm9yIGV4cGxvcmF0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cy4gVGhlcmUncyBgc2hyaW5rX3dvcmtlcmAsIHdoaWNoIEkgcmVtZW1iZXIgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24gcmVsYXRlZCB0byBtZW1vcnkgcmVjbGFtYXRpb24uIEJ1dCBteSBpbml0aWFsIGFzc2Vzc21lbnQgbGVhbnMgdG93YXJkcyBgenN3YXBfc3RvcmVgIGJlaW5nIHRoZSBjb3JlIGVudHJ5LiBBaCwgeWVzLCBgc2hyaW5rX21lbWNnYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB6c3dhcF9zdG9yZWAgYW5kIGBzaHJpbmtfd29ya2VyYCwgYnV0IGFnYWluLCB0aGUgY2VudHJhbCBwb2ludCByZW1haW5zIGB6c3dhcF9zdG9yZWAuXG5cbkFscmlnaHQsIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgenN3YXBfc3RvcmVgIGlzIHJlYWNoYWJsZS4gTGV0J3Mgc2VlLi4uIFllcCwgZGlyZWN0bHkgY2FsbGVkIGZyb20gYHN3YXBfd3JpdGVvdXRgLiBOb3csIGxldCdzIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwb3NzaWJsZSBlbnRyeSBwb2ludHMgd2l0aGluIGBtbS96c3dhcC5jYCwgcGFydGljdWxhcmx5IGFyb3VuZCBgc2hyaW5rX3dvcmtlcmAgdG8gZ2FpbiBhIGZ1bGxlciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IG9mIGB6c3dhcF9zdG9yZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6NDUuMTk3NDMxMjY4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3NDYxMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX3dvcmtlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9NzA4PXZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTcyMi0gKlxcbm1tL3pzd2FwLmM6NzIzOiAqIFNpbmNlIHRoZSBnbG9iYWwgc2hyaW5rZXIgc2hyaW5rX3dvcmtlcigpIG1heSBob2xkIGEgcmVmZXJlbmNlXFxubW0venN3YXAuYy03MjQtICogb2YgdGhlIG1lbWNnLCB3ZSBtdXN0IGNoZWNrIGFuZCByZWxlYXNlIHRoZSByZWZlcmVuY2UgaW5cXG4tLVxcbm1tL3pzd2FwLmMtNzI2LSAqXFxubW0venN3YXAuYzo3Mjc6ICogc2hyaW5rX3dvcmtlcigpIG11c3QgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoaXMgZnVuY3Rpb24gcmVsZWFzZXNcXG5tbS96c3dhcC5jLTcyOC0gKiB0aGUgcmVmZXJlbmNlIG9mIG1lbWNnIGJlaW5nIHNocnVuay5cXG4tLVxcbm1tL3pzd2FwLmM9MTI5Mz1zdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbilcXG4tLVxcbm1tL3pzd2FwLmMtMTMzNi1cXG5tbS96c3dhcC5jOjEzMzc6c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxubW0venN3YXAuYy0xMzM4LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTM2OC1cXHQgKiBvZmZsaW5lIG1lbWNnIGxlZnQgaW4genN3YXBfbmV4dF9zaHJpbmsgd2lsbCBob2xkIHRoZSByZWZlcmVuY2VcXG5tbS96c3dhcC5jOjEzNjk6XFx0ICogdW50aWwgdGhlIG5leHQgcnVuIG9mIHNocmlua193b3JrZXIoKS5cXG5tbS96c3dhcC5jLTEzNzAtXFx0ICovXFxuLS1cXG5tbS96c3dhcC5jPTE3OTE9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xODIwLVxcbm1tL3pzd2FwLmM6MTgyMTpcXHRJTklUX1dPUksoXFx1MDAyNnpzd2FwX3Nocmlua193b3JrLCBzaHJpbmtfd29ya2VyKTtcXG5tbS96c3dhcC5jLTE4MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjQ1LjM2OTE4NDAzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMzMzU5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gWnN3YXAncyBTaHJpbmtpbmcgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBzaHJpbmtfd29ya2VyYCB2YXJpYWJsZS4gVGhlIGNvZGUgaW5pdGlhbGl6ZXMgaXQgYXMgYHpzd2FwX3Nocmlua193b3JrYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSB0aGUgaGVjayBpcyB0aGlzIGB6c3dhcF9zaHJpbmtfd29ya2Agc3RydWN0dXJlIGFjdHVhbGx5ICpxdWV1ZWQqPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBzaHJpbmtpbmcgcHJvY2VzcyBpcyBzY2hlZHVsZWQgYW5kIHRyaWdnZXJlZC4gSXMgaXQgb24gYSB3b3JrcXVldWU/IEEgdGltZXI/IFNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGlzIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IGFnZ3Jlc3NpdmVseSBac3dhcCB3aWxsIHRyeSB0byByZWNsYWltIG1lbW9yeSBhbmQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGUgc2hyaW5raW5nIHByb2Nlc3MuIFRoZSBxdWV1ZWluZyBtZWNoYW5pc20gd2lsbCBkZXRlcm1pbmUgd2hlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuLCBzbyBJIG11c3QgZmluZCB0aGUgY29kZSB3aGVyZSB0aGlzIHdvcmtlciBpcyBpbnNlcnRlZCBpbnRvIHRoZSBxdWV1ZSwgaW4gb3JkZXIgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIFpzd2FwIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDI6NDguNzAyNTQ2MDc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4Mzc4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfc2hyaW5rX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTE2OD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnpzd2FwX25leHRfc2hyaW5rO1xcbm1tL3pzd2FwLmM6MTY5OnN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgenN3YXBfc2hyaW5rX3dvcms7XFxubW0venN3YXAuYy0xNzAtc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqenN3YXBfc2hyaW5rZXI7XFxuLS1cXG5tbS96c3dhcC5jPTE1MDg9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNTY4LVxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHpzd2FwX3Bvb2xfcmVhY2hlZF9mdWxsKVxcbm1tL3pzd2FwLmM6MTU2OTpcXHRcXHRxdWV1ZV93b3JrKHNocmlua193cSwgXFx1MDAyNnpzd2FwX3Nocmlua193b3JrKTtcXG5tbS96c3dhcC5jLTE1NzAtY2hlY2tfb2xkOlxcbi0tXFxubW0venN3YXAuYz0xNzkxPXN0YXRpYyBpbnQgenN3YXBfc2V0dXAodm9pZClcXG4tLVxcbm1tL3pzd2FwLmMtMTgyMC1cXG5tbS96c3dhcC5jOjE4MjE6XFx0SU5JVF9XT1JLKFxcdTAwMjZ6c3dhcF9zaHJpbmtfd29yaywgc2hyaW5rX3dvcmtlcik7XFxubW0venN3YXAuYy0xODIyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0Mjo0OC44NTkzODg3MjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0MTk5MTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWnN3YXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgdGhlIGFjdGlvbiBzdGFydHMgd2l0aCBgenN3YXBfc3RvcmVgLiBUaGF0J3MgdGhlIGtleSBmdW5jdGlvbiB0byB0cmFjZS4gSSdsbCBtYWtlIHN1cmUgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gRnJvbSB3aGF0IEkgc2VlLCBgWlNXQVBgIGlzIGRlcGVuZGVudCBvbiBgU1dBUGAsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIGBaU1dBUF9ERUZBVUxUX09OYCBhbmQgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIGJvdGgsIGluIHR1cm4sIGRlcGVuZCBvbiBgWlNXQVBgLiBUaHVzLCB0byBlbnN1cmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gZW5hYmxlOlxuXG4qICAgYFNXQVBgXG4qICAgYFpTV0FQYFxuKiAgIGBaU1dBUF9ERUZBVUxUX09OYFxuKiAgIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYFxuXG5UaGF0IHNob3VsZCBiZSB0aGUgYmFyZSBtaW5pbXVtIHRvIG1ha2UgZXZlcnl0aGluZyB3b3JrIHJpZ2h0LlxuXG5IbW0sIGFueXRoaW5nIGVsc2U/IFJpZ2h0LCBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgc2hyaW5rX21lbWNnYCwgYW5kIGl0J3MgdXNpbmcgYG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQobWVtY2cpYC4gU2luY2UgdGhpcyBkZWFscyB3aXRoIG1lbW9yeSBjZ3JvdXBzLCBpdCdzIG1ha2luZyBtZSB3b25kZXIgaWYgYE1FTUNHYCBpcyByZXF1aXJlZCBmb3IgYFpTV0FQYC4gSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgYSBsaXR0bGUgZnVydGhlciB0byBjb25maXJtIGlmIGBNRU1DR2AgaXMgYSBoYXJkIHJlcXVpcmVtZW50IG9yIGEgY29uZGl0aW9uYWwgb25lLiBJIGJldHRlciBtYWtlIGEgbm90ZSBvZiB0aGlzIHRvIHJldmlzaXQgbGF0ZXIsIGVzcGVjaWFsbHkgd2hlbiBJIGdldCB0byBhY3R1YWxseSAqdXNpbmcqIHRoZSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTA2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjUzLjUwMTM4MzI3M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjEwMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjUzLjYyNDk5ODQ3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzc0ODc4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIFpTV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBaU1dBUGAgZmVhdHVyZSBpbiB0aGlzIGNvbnRleHQuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gQWgsIG9mIGNvdXJzZSwgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHVzdWFsIHNwb3QgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGl2ZSBpbiB0aGVyZSBhbmQgc2VlIHdoYXQncyB3aGF0IHdpdGggYFpTV0FQYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgQ09ORklHX1pTV0FQYCBhbmQgbGlrZWx5IHNvbWUgYXNzb2NpYXRlZCBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBiYWNrZW5kLCBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCBhbmQgcGVyaGFwcyBwYWdlIGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gTGV0J3Mgc2VlIGlmIHRoaXMgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIHdoYXQgSSdtIHVzZWQgdG8uIFRpbWUgdG8gZ2V0IHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk4MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjU2Ljk5OTg4MDAxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMjpcXHRjb25maWcgWlNXQVBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFNXQVBcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDI2OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xcbiAgMjk6XFx0XFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cXG4gIDMwOlxcdFxcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cXG4gIDMxOlxcdFxcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjU3LjAwMDA0NTYzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTczOTEzNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgaW5kZXBlbmRlbnQgb2YgYE1FTUNHYCBhdCBmaXJzdCBnbGFuY2UuIEhvd2V2ZXIsIHRoZSBtb2RpZmljYXRpb25zIHRvIGBzaHJpbmtfbWVtY2dgIGFuZCB0aGUgaW5jbHVzaW9uIG9mIGBtZW1fY2dyb3VwX2Rpc2FibGVkKClgIGNoZWNrcyBhcmUgcmFpc2luZyBhIGZsYWcuIEl0J3MgbWFraW5nIG1lIHRoaW5rIGVuYWJsaW5nIGBNRU1DR2AgbWlnaHQgYmUgYSBnb29kIG1vdmUgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIGNoYW5nZS4gTGV0J3MgZGlnIGluIGFuZCB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjQyOjU5Ljk3Mzk2MjA2N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODEwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4My1cXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4NS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDYtXFxuaW5pdC9LY29uZmlnOjExMDc6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDgtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6NDM6MDAuMDkwNzc5MzMyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNTA3MjQ1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgWnN3YXAgU2hyaW5rZXIgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgYHNocmlua19tZW1jZ2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbml0L0tjb25maWdgIGFuZCBlbmFibGVzIGBNRU1DR2AuIEl04oCZcyBjYWxsZWQgYnkgYHNocmlua193b3JrZXJgIGFuZCwgaW1wb3J0YW50bHksIGB6c3dhcF9zdG9yZWAsIHdoaWNoIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHpzd2FwLiBUaGUgcGF0Y2ggYWRkcyBgbnJfdG9fc2NhbmAgdG8gYHNocmlua19tZW1jZ2AsIHdoaWNoIGxvb2tzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5genN3YXBfc3RvcmVgIGdldHMgY2FsbGVkIHdoZW4gYSBwYWdlIGlzIHN3YXBwZWQgb3V0LiBJIGNhbid0IGRpcmVjdGx5IGZ1enogYHpzd2FwX3N0b3JlYCBiZWNhdXNlIGl0J3Mgbm90IGEgc3lzY2FsbCwgYnV0IEkgKmNhbiogcmVhY2ggaXQgYnkgZ2VuZXJhdGluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIGZvcmNpbmcgc29tZSBzd2FwcGluZy4gU28sIHRoYXQgbWVhbnMgaXQgaXMgZmVhc2libGUgdG8gZnV6eiB0aGlzLiBJIHdpbGwgZ28gYWhlYWQgYW5kIGFkZCBgenN3YXBfc3RvcmVgIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5JJ3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYHpzd2FwX3N0b3JlYCBpcyB0aGUgYmVzdCBmdW5jdGlvbiB0byBmb2N1cyBvbiwgYW5kIGl0IGlzLiBJdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHpzd2FwLiBgc2hyaW5rX3dvcmtlcmAgaXMgcGFydCBvZiBhIHdvcmtxdWV1ZSwgc28gaXQncyBub3QgZGlyZWN0bHkgY2FsbGFibGUsIGFuZCBgc2hyaW5rX21lbWNnYCBpcyBzdGF0aWMuIFNvLCBmdXp6aW5nIHRoZSBtYWluIGVudHJ5IHBvaW50LCBgenN3YXBfc3RvcmVgLCBtYWtlcyB0aGUgbW9zdCBzZW5zZS5cblxuTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIE9rYXksIHNvIGBzaHJpbmtfbWVtY2dgIG5vdyBhY2NlcHRzIGBucl90b19zY2FuYCwgYHNocmlua193b3JrZXJgIHBhc3NlcyBgU1dBUF9DTFVTVEVSX01BWGAsIGFuZCBgenN3YXBfc3RvcmVgIGFsc28gcGFzc2VzIGBTV0FQX0NMVVNURVJfTUFYYC4gVGhpcyBpcyBtYWtpbmcgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSwgcmlnaHQgaW4gdGhlIHpzd2FwIHBhdGguIEl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSB6c3dhcCBzaHJpbmtlciBsb2dpYyBhbmQgaG93IGl0IHNjYW5zIHBhZ2VzIGFjcm9zcyBwZXItbm9kZSBMUlVzLCB3aGljaCBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYS4gSXTigJlzIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwcGluZyBhbmQgZnV6emluZyBgenN3YXBfc3RvcmVgIGlzIHRoZSBiZXN0IHdheSB0byBleGVyY2lzZSB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoLlxuXG5Pa2F5LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzU2LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDo0MzowOC4xNDE1MDY2NjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk3NTM4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJaU1dBUF9ERUZBVUxUX09OXCIsXG4gICAgXCJaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIHNocmlua2VyIGxvZ2ljIHRvIHNjYW4gYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgYWNyb3NzIHBlci1ub2RlIExSVXMuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcHJlc3N1cmUgYW5kIHN3YXBwaW5nLiBGdXp6aW5nIGB6c3dhcF9zdG9yZWAgd2lsbCBoZWxwIGV4ZXJjaXNlIHRoaXMgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBzaHJpbmtlciBsb2dpYyB0byBzY2FuIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzIGFjcm9zcyBwZXItbm9kZSBMUlVzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHByZXNzdXJlIGFuZCBzd2FwcGluZy4gRnV6emluZyBgenN3YXBfc3RvcmVgIHdpbGwgaGVscCBleGVyY2lzZSB0aGlzIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[1] Phase: Succeeded StartedAt: 2026-07-30 20:43:21 +0000 UTC FinishedAt: 2026-07-30 20:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 20:43:21 +0000 UTC FinishedAt: 2026-07-30 20:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2] Phase: Succeeded StartedAt: 2026-07-30 20:43:21 +0000 UTC FinishedAt: 2026-07-31 00:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 20:43:21 +0000 UTC FinishedAt: 2026-07-31 00:34:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 20:43:21 +0000 UTC FinishedAt: 2026-07-30 20:43:42 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 20:43:21 +0000 UTC FinishedAt: 2026-07-30 20:43:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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-workfloww6hmt/series-workfloww6hmt-convert-artifact-3630107515/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 20:43:42 +0000 UTC FinishedAt: 2026-07-30 21:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 20:43:42 +0000 UTC FinishedAt: 2026-07-30 21:05:40 +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:*08f565c2-5ebb-4718-8d67-adf66e75e736,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-workfloww6hmt/series-workfloww6hmt-convert-artifact-3630107515/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": "15da2a4c-e726-4c44-b7f5-c55510866dfe", "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-workfloww6hmt/series-workfloww6hmt-build-action-3965827769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 20:43:42 +0000 UTC FinishedAt: 2026-07-30 21:05:30 +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:*08f565c2-5ebb-4718-8d67-adf66e75e736,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-workfloww6hmt/series-workfloww6hmt-convert-artifact-3630107515/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": "15da2a4c-e726-4c44-b7f5-c55510866dfe", "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-workfloww6hmt/series-workfloww6hmt-build-action-3965827769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:05:40 +0000 UTC FinishedAt: 2026-07-30 21:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:05:40 +0000 UTC FinishedAt: 2026-07-30 21:05:40 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:05:40 +0000 UTC FinishedAt: 2026-07-30 21:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:05:40 +0000 UTC FinishedAt: 2026-07-30 21:05:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-workfloww6hmt/series-workfloww6hmt-convert-artifact-1937768658/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:05:50 +0000 UTC FinishedAt: 2026-07-30 21:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:05:50 +0000 UTC FinishedAt: 2026-07-30 21:07:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*15da2a4c-e726-4c44-b7f5-c55510866dfe,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-workfloww6hmt/series-workfloww6hmt-build-action-3965827769/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-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:07:51 +0000 UTC FinishedAt: 2026-07-30 21:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:07:51 +0000 UTC FinishedAt: 2026-07-30 21:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:07:51 +0000 UTC FinishedAt: 2026-07-30 21:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:07:51 +0000 UTC FinishedAt: 2026-07-30 21:27:19 +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:*08f565c2-5ebb-4718-8d67-adf66e75e736,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-workfloww6hmt/series-workfloww6hmt-convert-artifact-1937768658/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": "249346d6-3aad-4fee-9957-f3e917578453", "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-workfloww6hmt/series-workfloww6hmt-build-action-3084812134/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:07:51 +0000 UTC FinishedAt: 2026-07-30 21:27:09 +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:*08f565c2-5ebb-4718-8d67-adf66e75e736,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-workfloww6hmt/series-workfloww6hmt-convert-artifact-1937768658/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": "249346d6-3aad-4fee-9957-f3e917578453", "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-workfloww6hmt/series-workfloww6hmt-build-action-3084812134/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:27:19 +0000 UTC FinishedAt: 2026-07-30 21:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:27:19 +0000 UTC FinishedAt: 2026-07-30 21:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:27:19 +0000 UTC FinishedAt: 2026-07-30 21:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:27:19 +0000 UTC FinishedAt: 2026-07-30 21:29:03 +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:*249346d6-3aad-4fee-9957-f3e917578453,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-workfloww6hmt/series-workfloww6hmt-build-action-3084812134/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-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:12 +0000 UTC FinishedAt: 2026-07-31 00:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:12 +0000 UTC FinishedAt: 2026-07-31 00:34:40 +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":["zswap_store"],"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:*15da2a4c-e726-4c44-b7f5-c55510866dfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*249346d6-3aad-4fee-9957-f3e917578453,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-workfloww6hmt/series-workfloww6hmt-build-action-3965827769/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-workfloww6hmt/series-workfloww6hmt-build-action-3084812134/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:12 +0000 UTC FinishedAt: 2026-07-30 21:29:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:12 +0000 UTC FinishedAt: 2026-07-30 21:29:16 +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":["zswap_store"],"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-workfloww6hmt/series-workfloww6hmt-convert-artifact-3860456487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:12 +0000 UTC FinishedAt: 2026-07-30 21:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:12 +0000 UTC FinishedAt: 2026-07-30 21:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:12 +0000 UTC FinishedAt: 2026-07-30 21:29:12 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:22 +0000 UTC FinishedAt: 2026-07-31 00:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6hmt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"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":["zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9f3e5053dc27bab1dfc0eb05c0d51364a95a6eee","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","MEMCG"],"series_id":"04fbf8cf-5d8d-457a-af2f-88aa28eb9025","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-30 21:29:22 +0000 UTC FinishedAt: 2026-07-31 00:34:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*15da2a4c-e726-4c44-b7f5-c55510866dfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*249346d6-3aad-4fee-9957-f3e917578453,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-workfloww6hmt/series-workfloww6hmt-build-action-3965827769/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-workfloww6hmt/series-workfloww6hmt-build-action-3084812134/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-workfloww6hmt/series-workfloww6hmt-convert-artifact-3860456487/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,}