Name: series-workflowlqdx4 Phase: Succeeded StartedAt: 2026-07-30 01:54:14 +0000 UTC FinishedAt: 2026-07-30 06:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[0] Phase: Succeeded StartedAt: 2026-07-30 01:54:14 +0000 UTC FinishedAt: 2026-07-30 02:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 01:54:14 +0000 UTC FinishedAt: 2026-07-30 02:15:41 +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": "ae98967f6e94c2239d81795f9f6c987add5518c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "DAMON", "DAMON_PADDR", "TRANSPARENT_HUGEPAGE", "NUMA" ], "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": "ae98967f6e94c2239d81795f9f6c987add5518c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "DAMON", "DAMON_PADDR", "TRANSPARENT_HUGEPAGE", "NUMA" ], "series_id": "5fc6c486-9572-4b32-a36e-657c4ecafc59" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_get_folio", "madvise_free_huge_pmd", "do_madvise", "do_migrate_pages" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7ZG9fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoREFNT04sIG1hZHZpc2UsIG1lbXBvbGljeSkgdG8gcHJldmVudCBwcm9jZXNzaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBaT05FX0RFVklDRSBtZW1vcnkuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSwgbWJpbmQsIG1pZ3JhdGVfcGFnZXMsIGFuZCBEQU1PTiBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjdmMTRlYzI1ZGI3ZGQ3ZTRhYjRmNDVkOTgwYzg2OWIyNWE5ODRjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjEyOjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggZmJkYTcwZDhlYTRkMC4uYWYzYTllYWQxOWUwNSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtMzIsNyAmIzQzOzMyLDggQEAgc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXG4gXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4gXHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fCAhZm9saW9fdGVzdF9scnUoZm9saW8pKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykgfHxcbiYjNDM7XHQgICAgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKSB7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdGZvbGlvID0gTlVMTDtcbiBcdH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggNzM1MjJmMjk2Y2VlMi4uMGI0ODExMjU3NDg4MiAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yMzM4LDYgJiM0MzsyMzM4LDEwIEBAIGJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0fVxuIFxuIFx0Zm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpO1xuJiM0MztcbiYjNDM7XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIG90aGVyIHByb2Nlc3NlcyBhcmUgbWFwcGluZyB0aGlzIGZvbGlvLCB3ZSBjb3VsZG4mIzM5O3QgZGlzY2FyZFxuIFx0ICogdGhlIGZvbGlvIHVubGVzcyB0aGV5IGFsbCBkbyBNQURWX0ZSRUUgc28gbGV0JiMzOTtzIHNraXAgdGhlIGZvbGlvLlxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggMDdhMjFjYTMxYmFkNC4uZmZkNmE2ODMyMGE4NiAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jXG5AQCAtMzk1LDYgJiM0MzszOTUsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFxuIFx0XHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XG4gXG4mIzQzO1x0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuJiM0MztcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuJiM0MztcbiBcdFx0LyogRG8gbm90IGludGVyZmVyZSB3aXRoIG90aGVyIG1hcHBpbmdzIG9mIHRoaXMgZm9saW8gKi9cbiBcdFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxuIFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggNTcyMGY3ZjU0ZDk0Mi4uYmQ3OWU2MWE0MGQxYSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY2OCw2ICYjNDM7NjY4LDggQEAgc3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiBcdH1cbiBcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm47XG4gXHRpZiAoIShxcC1cdTAwM2VmbGFncyBcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxuIFx0ICAgICF2bWFfbWlncmF0YWJsZSh3YWxrLVx1MDAzZXZtYSkgfHxcbiBcdCAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLVx1MDAzZXBhZ2VsaXN0LCBxcC1cdTAwM2VmbGFncykpXG5AQCAtNzk3LDYgJiM0Mzs3OTksOCBAQCBzdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKHB0ZXApKTtcbiBcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcbiBcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0aWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgfHxcbiBcdCAgICAhdm1hX21pZ3JhdGFibGUod2Fsay1cdTAwM2V2bWEpKSB7XG4gXHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7ZG9fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoREFNT04sIG1hZHZpc2UsIG1lbXBvbGljeSkgdG8gcHJldmVudCBwcm9jZXNzaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBaT05FX0RFVklDRSBtZW1vcnkuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSwgbWJpbmQsIG1pZ3JhdGVfcGFnZXMsIGFuZCBEQU1PTiBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjdmMTRlYzI1ZGI3ZGQ3ZTRhYjRmNDVkOTgwYzg2OWIyNWE5ODRjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDAyOjEyOjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCmluZGV4IGZiZGE3MGQ4ZWE0ZDAuLmFmM2E5ZWFkMTllMDUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKQEAgLTMyLDcgJiM0MzszMiw4IEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKQogCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKIAlpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkgewomIzQzOwlpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fAomIzQzOwkgICAgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCA3MzUyMmYyOTZjZWUyLi4wYjQ4MTEyNTc0ODgyIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTIzMzgsNiAmIzQzOzIzMzgsMTAgQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJfQogCiAJZm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpOwomIzQzOwomIzQzOwlpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJLyoKIAkgKiBJZiBvdGhlciBwcm9jZXNzZXMgYXJlIG1hcHBpbmcgdGhpcyBmb2xpbywgd2UgY291bGRuJiMzOTt0IGRpc2NhcmQKIAkgKiB0aGUgZm9saW8gdW5sZXNzIHRoZXkgYWxsIGRvIE1BRFZfRlJFRSBzbyBsZXQmIzM5O3Mgc2tpcCB0aGUgZm9saW8uCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggMDdhMjFjYTMxYmFkNC4uZmZkNmE2ODMyMGE4NiAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtMzk1LDYgJiM0MzszOTUsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCiAJCWZvbGlvID0gcG1kX2ZvbGlvKG9yaWdfcG1kKTsKIAomIzQzOwkJaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSkKJiM0MzsJCQlnb3RvIGh1Z2VfdW5sb2NrOwomIzQzOwogCQkvKiBEbyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbWFwcGluZ3Mgb2YgdGhpcyBmb2xpbyAqLwogCQlpZiAoZm9saW9fbWF5YmVfbWFwcGVkX3NoYXJlZChmb2xpbykpCiAJCQlnb3RvIGh1Z2VfdW5sb2NrOwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA1NzIwZjdmNTRkOTQyLi5iZDc5ZTYxYTQwZDFhIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtNjY4LDYgJiM0Mzs2NjgsOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogCX0KIAlpZiAoIXF1ZXVlX2ZvbGlvX3JlcXVpcmVkKGZvbGlvLCBxcCkpCiAJCXJldHVybjsKJiM0MzsJaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSkKJiM0MzsJCXJldHVybjsKIAlpZiAoIShxcC0mZ3Q7ZmxhZ3MgJmFtcDsgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fAogCSAgICAhdm1hX21pZ3JhdGFibGUod2Fsay0mZ3Q7dm1hKSB8fAogCSAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLSZndDtwYWdlbGlzdCwgcXAtJmd0O2ZsYWdzKSkKQEAgLTc5Nyw2ICYjNDM7Nzk5LDggQEAgc3RhdGljIGludCBxdWV1ZV9mb2xpb3NfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCWZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4ocHRlcCkpOwogCWlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSkKIAkJZ290byB1bmxvY2s7CiYjNDM7CWlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpCiYjNDM7CQlnb3RvIHVubG9jazsKIAlpZiAoIShmbGFncyAmYW1wOyAoTVBPTF9NRl9NT1ZFIHwgTVBPTF9NRl9NT1ZFX0FMTCkpIHx8CiAJICAgICF2bWFfbWlncmF0YWJsZSh3YWxrLSZndDt2bWEpKSB7CiAJCXFwLSZndDtucl9mYWlsZWQmIzQzOyYjNDM7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY3CgkJCQkJCQlvdXRwdXQ6IDc3CgkJCQkJCQl0aG91Z2h0czogNDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBpdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMuIEkgc2VlIGl0IHRvdWNoZXMgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21hZHZpc2UuY2AsIGFuZCBgbW0vbWVtcG9saWN5LmNgLiBGcm9tIGEgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRpbmcgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzLiBUaGlzIHNob3VsZCBhdm9pZCBwcm9jZXNzaW5nIHpvbmUgZGV2aWNlIGZvbGlvcywgd2hpY2ggaXMgYSBzZW5zaWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBhY3Jvc3MgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXM6IERBTU9OLCBtYWR2aXNlLCBhbmQgbWVtcG9saWN5LgoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gVGhlIHBhdGNoIG1vZGlmaWVzOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBgcXVldWVfZm9saW9zX3BtZGAsIGFuZCBgcXVldWVfZm9saW9zX2h1Z2V0bGJgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaW5mbHVlbmNlLiBBcmUgdGhlc2UgZnVuY3Rpb25zIHN0YXRpYyBvciBnbG9iYWw/IEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHN0cnVjdHVyZS4gT2theSwgbGV0JiMzOTtzIHNlZS4gYGRhbW9uX2dldF9mb2xpb2AgYW5kIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGFyZSAqbm9uLXN0YXRpYyosIHdoaWNoIG1lYW5zIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAgYXJlIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIHZpc2liaWxpdHkuIEhtbW0sIHNvIEkgc2hvdWxkIHNlZSB3aGF0IGNhbGxzIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIAoKU2luY2UgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgaXMgc3RhdGljLCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBtYWR2aXNlX2NvbGRgLCBgbWFkdmlzZV9wYWdlb3V0YCwgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBvciBgZG9fbWFkdmlzZWAuIFRoZSBwYXRjaCB3aWxsIGJlIGNhbGxlZCBieSBvbmUgb2YgdGhvc2UgZnVuY3Rpb25zLiBTaW1pbGFybHksIGZvciB0aGUgc3RhdGljIGBxdWV1ZV9mb2xpb3NfcG1kYCBhbmQgYHF1ZXVlX2ZvbGlvc19odWdldGxiYCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCwgYHF1ZXVlX3BhZ2VzX3JhbmdlYCBhbmQgYGRvX21iaW5kYC4KCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBkYW1vbl9nZXRfZm9saW9gIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZnJvbSB0aGlzIGluaXRpYWwgYW5hbHlzaXMuIFRoZXNlIGFyZSB2aXNpYmxlIGFuZCwgdGh1cywgcHJvYmFibHkgdGhlIHBvaW50cyBvZiBlbnRyeSBhbmQgaW50ZWdyYXRpb24gb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkfGJvb2x8c3RydWN0IGZvbGlvIFxcKikgKGRhbW9uX2dldF9mb2xpb3xtYWR2aXNlX2ZyZWVfaHVnZV9wbWR8bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlfHF1ZXVlX2ZvbGlvc19wbWR8cXVldWVfZm9saW9zX2h1Z2V0bGIpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfd3BfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5LVx0XHRcdCAgIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyMzU9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMzE0LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyMzE1OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0yMzE2LVx0XHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcbi0tXG5tbS9tYWR2aXNlLmM9MzQzPXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jLTM1Mi1cbm1tL21hZHZpc2UuYzozNTM6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbm1tL21hZHZpc2UuYy0zNTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTItXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbm1tL21lbXBvbGljeS5jLTY1NC17XG4tLVxubW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzc1LVxubW0vbWVtcG9saWN5LmM6Nzc2OnN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbm1tL21lbXBvbGljeS5jLTc3Ny1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQ2FsbGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlnIGludG8gdGhpcy4gTXkgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyB0aGVzZSB0aHJlZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lczogYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAuIEtub3dpbmcgdGhlIGNhbGxlcnMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcyBhcmUgYmVpbmcgbGV2ZXJhZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2Ygd29ya2xvYWRzIGFuZCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIHRyaWdnZXIgdGhlaXIgaW52b2NhdGlvbiwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIHN5c3RlbSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiBzY2VuYXJpb3MgaW52b2x2aW5nIHBhZ2UgcmVjbGFpbSwgY29sZCBkYXRhIGV2aWN0aW9uLCBvciBodWdlIHBhZ2UgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbnMgd2lsbCBnaXZlIGluc2lnaHQgaW50byB0aGUgbG9naWMgZHJpdmluZyB0aGVzZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MzQzPXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jLTM1Mi1cbm1tL21hZHZpc2UuYzozNTM6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbm1tL21hZHZpc2UuYy0zNTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xubW0vbWFkdmlzZS5jOjU3MjpcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXG5tbS9tYWR2aXNlLmMtNTczLVx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwsIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHByaW1hcmlseSBsZXZlcmFnZWQgd2l0aGluIHRoZSBgY29sZF93YWxrX29wc2AgYW5kLCBtb3JlIHRoYW4gbGlrZWx5LCBgcGFnZW91dF93YWxrX29wc2Agc3RydWN0dXJlcy4gVGhhdCYjMzk7cyBteSBpbW1lZGlhdGUgd29ya2luZyBoeXBvdGhlc2lzLgoKTm93LCB0byByZWFsbHkgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGhvdyB0aGVzZSBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGFjdHVhbGx5ICpxdWV1ZWQqIGZvciBwcm9jZXNzaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGludG8gYHF1ZXVlX2ZvbGlvc19wbWRgIGFuZCBgcXVldWVfZm9saW9zX2h1Z2V0bGJgLiBUaGV5JiMzOTtyZSBwcm9iYWJseSBrZXkgdG8gd2hlcmUgYW5kIHdoZW4gdGhlc2UgY29sZCBvciBwYWdlb3V0IG9wZXJhdGlvbnMgY29tZSBpbnRvIHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZnVuY3Rpb25zIHdpbGwgc2hvdyBtZSBob3cgdGhpcyBgbWFkdmlzZWAgaGludCBpcyB1c2VkIGF0IGEgYnJvYWRlciBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9mb2xpb3NfcG1kfHF1ZXVlX2ZvbGlvc19odWdldGxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTItXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbm1tL21lbXBvbGljeS5jLTY1NC17XG4tLVxubW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzAyLVx0aWYgKHB0bCkge1xubW0vbWVtcG9saWN5LmM6NzAzOlx0XHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XG5tbS9tZW1wb2xpY3kuYy03MDQtXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tLVxubW0vbWVtcG9saWN5LmMtNzc1LVxubW0vbWVtcG9saWN5LmM6Nzc2OnN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbm1tL21lbXBvbGljeS5jLTc3Ny1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tZW1wb2xpY3kuYz05NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcbm1tL21lbXBvbGljeS5jOjk1OTpcdC5odWdldGxiX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX2h1Z2V0bGIsXG5tbS9tZW1wb2xpY3kuYy05NjAtXHQucG1kX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcbi0tXG5tbS9tZW1wb2xpY3kuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcbm1tL21lbXBvbGljeS5jOjk2NjpcdC5odWdldGxiX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX2h1Z2V0bGIsXG5tbS9tZW1wb2xpY3kuYy05NjctXHQucG1kX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIGBtbV93YWxrX29wc2AgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYG1tX3dhbGtfb3BzYCBhcmUgdXNlZC4gVGhpcyBzZWVtcyB0byBiZSB3aGVyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYWN0aW9uIGhhcHBlbnMsIHBhcnRpY3VsYXJseSBmcm9tIHRoZSBsb29rcyBvZiBpdCwgd2l0aCBgZG9fbWJpbmRgIG9yIGBtYmluZGAgZHJpdmluZyBtZW1wb2xpY3kgY2hhbmdlcyBhbmQgYG1hZHZpc2VgIGZvciB0aGUgbWFkdmlzZSBzdHVmZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGF0IGludGVyYWN0aW9uIHBvaW50IGlzLiBJJiMzOTtsbCBiZXQgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCB0aGF04oCZcyB0aGUga2V5IGZ1bmN0aW9uLiBUaW1lIHRvIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgYXJlYSBhbmQgY29ubmVjdCB0aGUgZG90cy4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sZF93YWxrX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWFkdmlzZS5jLTU3MC1cbm1tL21hZHZpc2UuYzo1NzE6c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xubW0vbWFkdmlzZS5jLTU3Mi1cdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXG4tLVxubW0vbWFkdmlzZS5jPTU3Nj1zdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21hZHZpc2UuYy01ODctXHR0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTtcbm1tL21hZHZpc2UuYzo1ODg6XHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCwgXHUwMDI2Y29sZF93YWxrX29wcyxcbm1tL21hZHZpc2UuYy01ODktXHRcdFx0XHUwMDI2d2Fsa19wcml2YXRlKTtcbi0tXG5tbS9tYWR2aXNlLmM9NjE0PXN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWFkdmlzZS5jLTYyMy1cdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xubW0vbWFkdmlzZS5jOjYyNDpcdHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLCBcdTAwMjZjb2xkX3dhbGtfb3BzLFxubW0vbWFkdmlzZS5jLTYyNS1cdFx0XHQgICAgXHUwMDI2d2Fsa19wcml2YXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG1hZHZpc2VgIEJlaGF2aW9yKioKCkFscmlnaHQsIEkmIzM5O20gdHJhY2luZyBiYWNrIHNvbWUgYG1hZHZpc2VgIGNhbGxzIGhlcmUsIGZvY3VzaW5nIG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBTZWVtcyBsaWtlIGBtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZWAgYW5kIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAgYXJlIHRoZSBrZXkgY2FsbGVycyBvZiBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZXNlIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5JiMzOTtyZSBiZWluZyB1c2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIGhvdyB0aGUgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGVzZSBjYWxscy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGludGVuZGVkIGJlaGF2aW9yIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgVk1BIGFuZCBob3cgdGhlIGhpbnRzIG9yIGZsYWdzIHBhc3NlZCB0byBgbWFkdmlzZWAgYXJlIGJlaW5nIGludGVycHJldGVkIGFuZCBhY3RlZCB1cG9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgVk1BIHN0YXRlcyBhbmQgdHJhbnNpdGlvbnMgdGhhdCBoYXBwZW4gaW4gcmVzcG9uc2UgdG8gdGhlc2UgYG1hZHZpc2VgIGhpbnRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgYmVpbmcgZW1wbG95ZWQgaW4gdGhpcyBzZWN0aW9uIG9mIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfY29sZF9wYWdlX3JhbmdlfG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xuLS1cbm1tL21hZHZpc2UuYy01NzUtXG5tbS9tYWR2aXNlLmM6NTc2OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tYWR2aXNlLmMtNTc3LVx0XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmM9NTk4PXN0YXRpYyBsb25nIG1hZHZpc2VfY29sZChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtNjA3LVx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVx1MDAzZW1tKTtcbm1tL21hZHZpc2UuYzo2MDg6XHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jLTYwOS1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tLVxubW0vbWFkdmlzZS5jLTYxMy1cbm1tL21hZHZpc2UuYzo2MTQ6c3RhdGljIHZvaWQgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21hZHZpc2UuYy02MTUtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21hZHZpc2UuYz02Mjk9c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy02NDgtXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3ItXHUwMDNlbW0pO1xubW0vbWFkdmlzZS5jOjY0OTpcdG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKFx1MDAyNnRsYiwgdm1hLCBcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZXJhbmdlKTtcbm1tL21hZHZpc2UuYy02NTAtXHR0bGJfZmluaXNoX21tdShcdTAwMjZ0bGIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDQ5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBtYWR2aXNlYCBDYWxsZXJzKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGdvdCBgbWFkdmlzZV9jb2xkYCBhbmQgYG1hZHZpc2VfcGFnZW91dGAgZmxhZ2dlZCBhcyB0aGUgcHJpbWFyeSBjYWxsZXJzIGhlcmUuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIGBxdWV1ZV9wYWdlc193YWxrX29wc2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsIHRvIHRydWx5IGdyYXNwIHRoZSBmbG93LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1ZXVlX3BhZ2VzX3dhbGtfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTkxNz1zdGF0aWMgaW50IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2Fsayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy05NTctXG5tbS9tZW1wb2xpY3kuYzo5NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcbm1tL21lbXBvbGljeS5jLTk1OS1cdC5odWdldGxiX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX2h1Z2V0bGIsXG4tLVxubW0vbWVtcG9saWN5LmM9OTg3PXF1ZXVlX3BhZ2VzX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMDAwLVx0Y29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSAoZmxhZ3MgXHUwMDI2IE1QT0xfTUZfV1JMT0NLKSA/XG5tbS9tZW1wb2xpY3kuYzoxMDAxOlx0XHRcdFx1MDAyNnF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzIDogXHUwMDI2cXVldWVfcGFnZXNfd2Fsa19vcHM7XG5tbS9tZW1wb2xpY3kuYy0xMDAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrOiBgcXVldWVfcGFnZXNfcmFuZ2VgIGluIEZvY3VzKioKCkFscmlnaHQsIHNvIHRoZSBwcmltYXJ5IHRoaW5nIEkmIzM5O20gZm9jdXNpbmcgb24gcmlnaHQgbm93IGlzIHRoZSBmdW5jdGlvbiBgcXVldWVfcGFnZXNfcmFuZ2VgLiBUaGF0JiMzOTtzIHRoZSBjYWxsZXIuIFVuZGVyc3RhbmRpbmcgKml0cyogZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCB3aGVyZSB0aGUgYXBwbGljYXRpb24gZmxvdyBpcyByaWdodCBub3cuIEl0IG1lYW5zIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHdoYXQga2luZCBvZiBsb2dpYyBpcyBkcml2aW5nICppdCogYW5kIHRoZW4gd29yayBiYWNrIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFdoYXQgdHJpZ2dlcnMgKnRoYXQqIG9uZT8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgd2hhdCBwcmVjaXNlbHkgaXMgaXQgdHJ5aW5nIHRvIGFjaGlldmU/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGRpdmluZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgYHF1ZXVlX3BhZ2VzX3JhbmdlYCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzIGFuZCB3aHkgaXQgaXMgY2FsbGluZyB3aGF0IGl0IGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9wYWdlc19yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz02ODk9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy03NDktXHRcdFx0ICogbWlncmF0ZV9wYWdlcyhcdTAwMjZwYWdlbGlzdCkgcmV0dXJucyBucl9mYWlsZWQgZm9saW9zLCBzb1xubW0vbWVtcG9saWN5LmM6NzUwOlx0XHRcdCAqIGNoZWNrIFwmIzM0O2xhcmdlXCYjMzQ7IG5vdyBzbyB0aGF0IHF1ZXVlX3BhZ2VzX3JhbmdlKCkgcmV0dXJuc1xubW0vbWVtcG9saWN5LmMtNzUxLVx0XHRcdCAqIGEgY29tcGFyYWJsZSBucl9mYWlsZWQgZm9saW9zLiAgVGhpcyBkb2VzIGltcGx5IHRoYXRcbi0tXG5tbS9tZW1wb2xpY3kuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcbi0tXG5tbS9tZW1wb2xpY3kuYy05NzctICpcbm1tL21lbXBvbGljeS5jOjk3ODogKiBxdWV1ZV9wYWdlc19yYW5nZSgpIG1heSByZXR1cm46XG5tbS9tZW1wb2xpY3kuYy05NzktICogMCAtIGFsbCBwYWdlcyBhbHJlYWR5IG9uIHRoZSByaWdodCBub2RlLCBvciBzdWNjZXNzZnVsbHkgcXVldWVkIGZvciBtb3Zpbmdcbi0tXG5tbS9tZW1wb2xpY3kuYz05ODY9c3RhdGljIGxvbmdcbm1tL21lbXBvbGljeS5jOjk4NzpxdWV1ZV9wYWdlc19yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS9tZW1wb2xpY3kuYy05ODgtXHRcdG5vZGVtYXNrX3QgKm5vZGVzLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuLS1cbm1tL21lbXBvbGljeS5jPTEyODk9c3RhdGljIGxvbmcgbWlncmF0ZV90b19ub2RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgc291cmNlLCBpbnQgZGVzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMzIwLVx0ICovXG5tbS9tZW1wb2xpY3kuYzoxMzIxOlx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHZtYS1cdTAwM2V2bV9zdGFydCwgbW0tXHUwMDNldGFza19zaXplLCBcdTAwMjZubWFzayxcbm1tL21lbXBvbGljeS5jLTEzMjItXHRcdFx0XHQgICAgICBmbGFncyB8IE1QT0xfTUZfRElTQ09OVElHX09LLCBcdTAwMjZwYWdlbGlzdCk7XG4tLVxubW0vbWVtcG9saWN5LmM9MTQ5Mz1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNTU2LVx0ICovXG5tbS9tZW1wb2xpY3kuYzoxNTU3Olx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLFxubW0vbWVtcG9saWN5LmMtMTU1OC1cdFx0XHRmbGFncyB8IE1QT0xfTUZfSU5WRVJUIHwgTVBPTF9NRl9XUkxPQ0ssIFx1MDAyNnBhZ2VsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIxMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ2FsbHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggcmVzcGVjdCB0byBodWdlIHBhZ2VzIGFuZCBOVU1BLiBUaGlua2luZyBpdCB0aHJvdWdoLCB0aGUga2V5IGNhbGxzIGluaXRpYXRpbmcgdGhpcyBwcm9jZXNzIGFwcGVhciB0byBiZSBgZG9fbWJpbmRgIGFuZCBgbWlncmF0ZV90b19ub2RlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIE5vdywgd2hlbiBkZWFsaW5nIHdpdGggdGhhdCBsZXZlbCBvZiBpbnRlcmFjdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXJuZWF0aCBhbmQgdGhlIGltcG9ydGFudCBjYWxsIGluIHRoYXQgY2hhaW4gaXMgbGlrZWx5IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBHb2luZyBpbiB0aGVyZSBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gbWFwIG91dCB0aGUgaW50ZXJuYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI4OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjktXHRcdFx0ICAgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjIzNT12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzMTQtICovXG5tbS9odWdlX21lbW9yeS5jOjIzMTU6Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTIzMTYtXHRcdHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KVxuLS1cbm1tL21hZHZpc2UuYz02NTU9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtNjcxLVx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxubW0vbWFkdmlzZS5jOjY3MjpcdFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcbm1tL21hZHZpc2UuYy02NzMtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MDUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgbWFkdmlzZWAgd29ya3MsIHNwZWNpZmljYWxseSB0aGUgYE1BRFZfRlJFRWAgZmxhZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gZmluZCBob3cgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIGNvbm5lY3RzIHRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzZWUgaXQmIzM5O3MgY2FsbGluZyBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYC4gVGhhdCBpbW1lZGlhdGVseSBzcGFya3MgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiB3aHkgdGhlIGp1bXAgdG8gSHVnZSBQTURzPyBJcyB0aGlzIHJlbGF0ZWQgdG8gZnJlZWluZyBsYXJnZXIgYmxvY2tzIG9mIG1lbW9yeSBhdCBvbmNlPwoKVGhlbiBJIHRoaW5rIGJhY2sgdG8gdGhlIGNhbGxzLiBJIHJlY2FsbCBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgaXMgYSBjb3JlIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBgbWFkdmlzZV9mcmVlX3NpbmdsZV92bWFgIGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBsaW5rIHRvIGB2bWFgLCBhcyBgdm1hYCBpcyB0aGUgY29yZSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIHZpcnR1YWwgbWVtb3J5IGFyZWFzLiBJIHN1cHBvc2UgaXQgbXVzdCBiZSBzb21lIGtpbmQgb2YgaXRlcmF0aW9uIG9yIG1hbmlwdWxhdGlvbiBvZiB0aGUgdm1hIHN0cnVjdHVyZS4KClRoZSBjb25uZWN0aW9uIGZyb20gYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIHRvIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBpdCYjMzk7cyB1c2VkIHdpdGggYG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBwcm9iYWJseSBpbiB0aGUgaGFuZGxpbmcgb2YgYSBzcGVjaWZpYyB2aXJ0dWFsIG1lbW9yeSBzZWdtZW50IHRoYXQgcmVxdWlyZXMgYE1BRFZfRlJFRWAuIFRpbWUgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBhbmQgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfZnJlZV9wdGVfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTYyOT1zdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTY1NC1cbm1tL21hZHZpc2UuYzo2NTU6c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21hZHZpc2UuYy02NTYtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vbWFkdmlzZS5jPTgwMj1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy04MTEtXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG5tbS9tYWR2aXNlLmM6ODEyOlx0XHQucG1kX2VudHJ5XHRcdD0gbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZSxcbm1tL21hZHZpc2UuYy04MTMtXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDM1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAgQ2FsbGVyKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoaXMgcGFydGljdWxhciBwcm9jZXNzLCBhbmQgdGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gTm93LCB3aGF0IGRvZXMgaXQgYWN0dWFsbHkgKmRvKj8gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCwgYnV0IGZvciBub3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpdHNlbGYgdHJpZ2dlcnMuCgpPa2F5LCBub3cgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IHRha2VzIG1lLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGRhbW9uX2dldF9mb2xpb2AsIHRoZSBuZXh0IHBpZWNlIHRvIGFuYWx5emUuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBmb2xpbyBpcyByZXRyaWV2ZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSB3b3JrZmxvdy4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZSBmb2xpbyBpcyBiZWluZyBoYW5kbGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMtMTgtXG5tbS9kYW1vbi9jb3JlLmM6MTk6LyogZm9yIGRhbW9uX2dldF9mb2xpbygpIHVzZWQgYnkgbm9kZSBlbGlnaWJsZSBtZW1vcnkgbWV0cmljcyAqL1xubW0vZGFtb24vY29yZS5jLTIwLSNpbmNsdWRlIFwmIzM0O29wcy1jb21tb24uaFwmIzM0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODI1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTI4NzYtICpcbm1tL2RhbW9uL2NvcmUuYzoyODc3OiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZGFtb25fZ2V0X2ZvbGlvKCkgZnJvbSBvcHMtY29tbW9uLmMsIHdoaWNoIGlzXG5tbS9kYW1vbi9jb3JlLmMtMjg3OC0gKiBvbmx5IGF2YWlsYWJsZSB3aGVuIENPTkZJR19EQU1PTl9QQUREUiBpcyBlbmFibGVkLiBJdCBhbHNvIHJlcXVpcmVzIHRoZVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODgxPXN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI5MDQtXG5tbS9kYW1vbi9jb3JlLmM6MjkwNTpcdFx0XHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL2NvcmUuYy0yOTA2LVx0XHRcdFx0aWYgKCFmb2xpbykge1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMy0gKi9cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNDpzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yNS17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTQzPXZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy01NC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo1NTpcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTYtXHRpZiAoIWZvbGlvKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz03ND12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtODYtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6ODc6XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhwZm4pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTg4LVx0aWYgKCFmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtNy1cbm1tL2RhbW9uL29wcy1jb21tb24uaDo4OnN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mzg9c3RhdGljIHZvaWQgZGFtb25fcGFfbWtvbGQocGh5c19hZGRyX3QgcGFkZHIpXG5tbS9kYW1vbi9wYWRkci5jLTM5LXtcbm1tL2RhbW9uL3BhZGRyLmM6NDA6XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTQxLVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Njg9c3RhdGljIGJvb2wgZGFtb25fcGFfeW91bmcocGh5c19hZGRyX3QgcGFkZHIpXG5tbS9kYW1vbi9wYWRkci5jLTY5LXtcbm1tL2RhbW9uL3BhZGRyLmM6NzA6XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTcxLVx0Ym9vbCBhY2Nlc3NlZDtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE1Nz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzUtXHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYzoxNzY6XHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MjIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI0Ni1cdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmM6MjQ3Olx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTI0OC1cdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0yNzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjg3LVx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYzoyODg6XHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmMtMjg5LVx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTMyNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMzUtXHR3aGlsZSAoYWRkciBcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XG5tbS9kYW1vbi9wYWRkci5jOjMzNjpcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xubW0vZGFtb24vcGFkZHIuYy0zMzctXHRcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM3My1cdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmM6Mzc0Olx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTM3NS1cdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjAyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIFpPTkVfREVWSUNFIEZvbGlvIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYGRhbW9uX2dldF9mb2xpb2AgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQsIGFuZCBpdCYjMzk7cyB1c2VkIGV4dGVuc2l2ZWx5IHdpdGhpbiBEQU1PTi4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0aGUgaW5jbHVzaW9uIG9mIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcy4gVGhpcyBjbGVhcmx5IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgWk9ORV9ERVZJQ0UgZm9saW9zIGZyb20gYmVpbmcgcHJvY2Vzc2VkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIERBTU9OIGl0c2VsZiwgSSYjMzk7bGwgbG9vayBmb3IgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fUEFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9WQUREUmAuIEZvciBjb250ZXh0LCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyB0aGlzIG1pZ2h0IHJlbGF0ZSB0byBtYWR2aXNlLCBzbyBJJiMzOTtsbCBjaGVjayBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIChwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCkuIEFuZCBqdXN0IGZvciBjb21wbGV0ZW5lc3MsIGdpdmVuIERBTU9OJiMzOTtzIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBtZW1vcnkgcGxhY2VtZW50LCBJIHNob3VsZCBhbHNvIHZlcmlmeSBgQ09ORklHX05VTUFgIGlzIHN0aWxsIGNvbnNpZGVyZWQuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9LY29uZmlnYCB0byBzdGFydCBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGFyb3VuZCBgREFNT05gIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM4MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBteSBicmFpbiBqdXN0IGtpY2tlZCBpbiBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgemVyb2luZyBpbiBvbiB0aGUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgY29uZmlndXJhdGlvbi4gVGltZSB0byB0YWtlIGEgbG9vayBhdCBpdC4gSSBrbm93IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZXR0aW5nIHF1aXRlIHdlbGwsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQmIzM5O3MgdGhlIHN5c3RlbSBsb2FkIGxpa2U/IEFyZSB3ZSBzZWVpbmcgYW55IHVuZXhwZWN0ZWQgbWVtb3J5IGZyYWdtZW50YXRpb24gb3IgcGVyZm9ybWFuY2UgZGlwcyB0aGF0IHRoaXMgY29uZmlnIG1pZ2h0IGJlIGludm9sdmVkIHdpdGg/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaWYgaXQgYWxpZ25zIHdpdGggdGhlIGFwcGxpY2F0aW9uJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBnb2Fscy4gQSBxdWljayBjaGVjayB3aWxsIGNvbmZpcm0gaWYgaXQgaXMgc2V0IGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfd3BfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5LVx0XHRcdCAgIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyMzU9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMzE0LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyMzE1OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0yMzE2LVx0XHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcbi0tXG5tbS9tYWR2aXNlLmM9NjU1PXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWFkdmlzZS5jLTY3MS1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kKSlcbm1tL21hZHZpc2UuYzo2NzI6XHRcdGlmIChtYWR2aXNlX2ZyZWVfaHVnZV9wbWQodGxiLCB2bWEsIHBtZCwgYWRkciwgbmV4dCkpXG5tbS9tYWR2aXNlLmMtNjczLVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgVEhQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgY29uZGl0aW9uYWxseSBjb21waWxpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGF0JiMzOTtzIG5vIHN1cnByaXNlOyBpdCYjMzk7cyBwcmFjdGljYWxseSB0aGUgY2VudHJhbCBmaWxlIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMgKFRIUCkuIE15IHNwaWRleS1zZW5zZSBpcyB0ZWxsaW5nIG1lIHRvIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHRoZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBvcHRpb24uIFRoYXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIGlzbiYjMzk7dCBpdD8gSWYgdGhhdCYjMzk7cyAqbm90KiBlbmFibGVkLCB0aGVuIHRoZSBlbnRpcmUgbW9kdWxlIGNvbnRhaW5pbmcgYG1tL2h1Z2VfbWVtb3J5LmNgIHdvbiYjMzk7dCBldmVuIGJlIHBhcnQgb2YgdGhlIGJ1aWxkLiBJdCYjMzk7cyBhIGtleSBkZXBlbmRlbmN5LiBObyBUSFAsIG5vIGNvZGUuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcy4gV2hlbiBJIHNlZSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBJIGtub3cgdGhhdCBhbGwgdGhlIFRIUC1zcGVjaWZpYyBmdW5jdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb3JlIFRIUCBtYW5hZ2VtZW50IGxvZ2ljIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYXJlIGJlaW5nIGJyb3VnaHQgaW50byB0aGUga2VybmVsICpvbmx5KiBpZiB0aGUgdXNlciBjb25maWd1cmVzIHRoZSBrZXJuZWwgZm9yIFRIUCBzdXBwb3J0LiBJdOKAmXMgYW4gZXNzZW50aWFsIGxpbmsgaW4gdGhlIGNoYWluIGZvciBUSFAgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyBmdW5jdGlvbnMgbGlrZSBgX19hbGxvY19odWdlcGFnZWAsIGBfX2ZyZWVfaHVnZXBhZ2VgLCBgc3BsaXRfaHVnZV9wYWdlYCwgYW5kIHNvIG9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgbGlua2FnZSBoZWxwcyBtZSBkZWJ1ZyBUSFAgaXNzdWVzLiBLbm93aW5nICp3aGVuKiB0aGlzIGZpbGUgZ2V0cyBjb21waWxlZCBpcyBjcml0aWNhbCBmb3IgbmFycm93aW5nIGRvd24gdGhlIHNjb3BlIG9mIHBvdGVudGlhbCBwcm9ibGVtcyB3aGVuIHRyYWNraW5nIGJ1aWxkIGZhaWx1cmVzIG9yIGJlaGF2aW9yIHNwZWNpZmljIHRvIFRIUCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZzoKCioqTlVNQSBhbmQgTWVtb3J5IFBvbGljeTogQSBRdWljayBSZWNhcCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbW0vbWVtcG9saWN5LmNgLiBJIGFscmVhZHkga25ldyB0aGF0IHRoaXMgZmlsZSBkZWFscyB3aXRoIG1lbW9yeSBwb2xpY2llcywgYnV0IG5vdyBJJiMzOTttIG1ha2luZyB0aGUgY29ubmVjdGlvbiB3aXRoIE5VTUEuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGUgY29kZSBpbiBgbW0vbWVtcG9saWN5LmNgICpvbmx5KiBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aGVuIHRoZSBgQ09ORklHX05VTUFgIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIG5vdCBzdXJwcmlzaW5nLCBidXQgaXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbCB0byBrZWVwIGZyb250IG9mIG1pbmQuIEl0IGNvbmZpcm1zIHRoYXQgdGhlIG1lbW9yeSBwb2xpY3kgZmVhdHVyZXMgYXJlIGludHJpbnNpY2FsbHkgdGllZCB0byBOVU1BIGFyY2hpdGVjdHVyZXMgYW5kIGRvbiYjMzk7dCBjb250cmlidXRlIHRvIHRoZSBrZXJuZWwgaW4gYSBub24tTlVNQSBidWlsZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBrZXJuZWwgc2l6ZSwgZnVuY3Rpb25hbGl0eSwgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0PTM0MT1wYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBub2RlIGxvY2FsIHRvIHdoZXJlIHRoZSB0YXNrIGlzIHJ1bm5pbmcsXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdDozNDI6ZXhjZXB0IHBlcmhhcHMgYXMgbW9kaWZpZWQgYnkgdGhlIHRhc2smIzM5O3MgTlVNQSBtZW1wb2xpY3kgb3IgY3B1c2V0XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdC0zNDMtY29uZmlndXJhdGlvbiwgc28gbG9uZyBhcyBzdWZmaWNpZW50IGZyZWUgbWVtb3J5IHBhZ2VzIGFyZSBhdmFpbGFibGUuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MzUyPXRoZWlyIGNvbnRhaW5pbmcgdGFzayYjMzk7cyBtZW1vcnkgc3ByZWFkIHNldHRpbmdzLiAgSWYgbWVtb3J5IHNwcmVhZGluZ1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q6MzUzOmlzIHR1cm5lZCBvZmYsIHRoZW4gdGhlIGN1cnJlbnRseSBzcGVjaWZpZWQgTlVNQSBtZW1wb2xpY3kgb25jZSBhZ2FpblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QtMzU0LWFwcGxpZXMgdG8gbWVtb3J5IHBhZ2UgYWxsb2NhdGlvbnMuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MzgyPXBhZ2VzIG9uIHRoZSBwYXJlbnQgbm9kZSB3aWxsIGJlIGFkanVzdGVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUsIGlmIHN1ZmZpY2llbnRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0OjM4MzpyZXNvdXJjZXMgZXhpc3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRhc2smIzM5O3MgbWVtcG9saWN5IG9yIGNwdXNldCBjb25zdHJhaW50cy5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTM4NC1cbi0tXG5tbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXHQmIzQzOz0gaHVnZXRsYl92bWVtbWFwLm9cbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19OVU1BKSBcdCYjNDM7PSBtZW1wb2xpY3kub1xubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcdCYjNDM7PSBzcGFyc2Uub1xuLS1cbm1tL21lbXBvbGljeS5jPTM1OT1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKGdldF90YXNrX3BvbGljeSwgXCYjMzQ7a3ZtXCYjMzQ7KTtcbm1tL21lbXBvbGljeS5jLTM2MC1cbm1tL21lbXBvbGljeS5jOjM2MTpzdGF0aWMgY29uc3Qgc3RydWN0IG1lbXBvbGljeV9vcGVyYXRpb25zIHtcbm1tL21lbXBvbGljeS5jLTM2Mi1cdGludCAoKmNyZWF0ZSkoc3RydWN0IG1lbXBvbGljeSAqcG9sLCBjb25zdCBub2RlbWFza190ICpub2Rlcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9NTY1PXZvaWQgbXBvbF9yZWJpbmRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIG5vZGVtYXNrX3QgKm5ldylcbi0tXG5tbS9tZW1wb2xpY3kuYy01NzctXG5tbS9tZW1wb2xpY3kuYzo1Nzg6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1wb2xpY3lfb3BlcmF0aW9ucyBtcG9sX29wc1tNUE9MX01BWF0gPSB7XG5tbS9tZW1wb2xpY3kuYy01NzktXHRbTVBPTF9ERUZBVUxUXSA9IHtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDI1PXN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtcG9saWN5LmMtMjA0MS0gKiBSZXR1cm5zIGVmZmVjdGl2ZSBwb2xpY3kgZm9yIGEgVk1BIGF0IHNwZWNpZmllZCBhZGRyZXNzLlxubW0vbWVtcG9saWN5LmM6MjA0MjogKiBGYWxscyBiYWNrIHRvIGN1cnJlbnQtXHUwMDNlbWVtcG9saWN5IG9yIHN5c3RlbSBkZWZhdWx0IHBvbGljeSwgYXMgbmVjZXNzYXJ5LlxubW0vbWVtcG9saWN5LmMtMjA0My0gKiBTaGFyZWQgcG9saWNpZXMgW3Rob3NlIG1hcmtlZCBhcyBNUE9MX0ZfU0hBUkVEXSByZXF1aXJlIGFuIGV4dHJhIHJlZmVyZW5jZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBSaWdodCBub3cgSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgLiBNYWtlcyBzZW5zZSDigJMgbWVtb3J5IG1vbml0b3JpbmcgYW5kIE5VTUEgYXJlIGNvbW1vbiBjb25zaWRlcmF0aW9ucy4gTm93LCBJJiMzOTttIHNlZWluZyBhIGNoZWNrIHVzaW5nIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3Mgc2tpcHBpbmcgWk9ORV9ERVZJQ0UgZm9saW9zLiBPa2F5LCBzbyBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBpbnRlbmRlZCBiZWhhdmlvciBoZXJlLCB0aGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGF0IGxvZ2ljYWxseSBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmY29uZmlnIGFuZCBhbnkgcmVsZXZhbnQgYnVpbGQgc2NyaXB0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIxNz1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIyMS1cbm1tL0tjb25maWc6MTIyMjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIyMy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBtZW50aW9uIG9mIGBaT05FX0RFVklDRWAgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBXZSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gem9uZXMsIGFuZCB0aGUgJiMzNDtkZXZpY2UmIzM0OyBhc3BlY3Qgc3VnZ2VzdHMgaGFyZHdhcmUgb3IgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciwgbGlrZWx5IGluIGEgc3RvcmFnZSBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IGRlcGVuZGVuY2llcyBhbmQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBvZiBtb2RpZmljYXRpb25zLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNoYXJlZCByZXNvdXJjZSwgb3Igc29tZXRoaW5nIGlzb2xhdGVkIHRvIGEgc3BlY2lmaWMgem9uZT8gV2hhdCBvdGhlciBjb21wb25lbnRzIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgYFpPTkVfREVWSUNFYCBmdW5jdGlvbmFsaXR5PyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1pbmltaXplIHRoZSByaXNrIG9mIGludHJvZHVjaW5nIGluc3RhYmlsaXR5IG9yIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIHdoZW4gYWRkcmVzc2luZyBhbnkgdW5kZXJseWluZyBpc3N1ZXMuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNyaXRpY2FsIHBhdGhzIOKAkyB0aGUgb25lcyB0aGF0IGRpcmVjdGx5IGltcGFjdCBwZXJmb3JtYW5jZSwgcmVsaWFiaWxpdHksIGFuZCBzZWN1cml0eS4gSXQmIzM5O3MgdGltZSB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKlpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODItXHRkZXBlbmRzIG9uICFVTUxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjgzOlx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODQtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTYyPWNvbmZpZyBOVkRJTU1fUEZOXG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02NC1cdGRlZmF1bHQgTElCTlZESU1NXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjY1Olx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02Ni1cdHNlbGVjdCBORF9DTEFJTVxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWc9MjA2PWNvbmZpZyBQQ0lfUDJQRE1BXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7UENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3BjaS9LY29uZmlnOjIwODpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvcGNpL0tjb25maWctMjA5LVx0I1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnPTU9Y29uZmlnIERDU1NCTEtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZy03LVx0cHJvbXB0IFwmIzM0O0RDU1NCTEsgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWc6ODpcdGRlcGVuZHMgb24gUzM5MCBcdTAwMjZcdTAwMjYgQkxPQ0sgXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZy05LVx0c2VsZWN0IEZTX0RBWFxuLS1cbmRyaXZlcnMveGVuL0tjb25maWc9MzM2PWNvbmZpZyBYRU5fVU5QT1BVTEFURURfQUxMT0NcbmRyaXZlcnMveGVuL0tjb25maWctMzM3LVx0Ym9vbCBcJiMzNDtVc2UgdW5wb3B1bGF0ZWQgbWVtb3J5IHJhbmdlcyBmb3IgZ3Vlc3QgbWFwcGluZ3NcJiMzNDtcbmRyaXZlcnMveGVuL0tjb25maWc6MzM4Olx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZHJpdmVycy94ZW4vS2NvbmZpZy0zMzktXHRkZWZhdWx0IFhFTl9CQUNLRU5EIHx8IFhFTl9HTlRERVYgfHwgWEVOX0RPTTBcbi0tXG5mcy9LY29uZmlnPTU4PWNvbmZpZyBGU19EQVhcbi0tXG5mcy9LY29uZmlnLTYwLVx0ZGVwZW5kcyBvbiBNTVVcbmZzL0tjb25maWc6NjE6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnLTYyLVx0c2VsZWN0IEZTX0lPTUFQXG4tLVxuZnMvS2NvbmZpZz05MD1jb25maWcgRlNfREFYX1BNRFxuLS1cbmZzL0tjb25maWctOTMtXHRkZXBlbmRzIG9uIEZTX0RBWFxuZnMvS2NvbmZpZzo5NDpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWctOTUtXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4tLVxubW0vS2NvbmZpZz0xMjUyPWNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjUzLVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbm1tL0tjb25maWc6MTI1NDpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTI1NS1cdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrIGZvciBaT05FX0RFVklDRSoqCgpPa2F5LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcHJvY2VlZCwgYnV0IEkmIzM5O3ZlIGxlYXJuZWQgZW5vdWdoIG92ZXIgdGhlIHllYXJzIHRvIGtub3cgdGhhdCBqdW1waW5nIHRvIGNvbmNsdXNpb25zIGNhbiBiZSBhIGNvc3RseSBtaXN0YWtlLiBMZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKnBvdGVudGlhbCogZGVwZW5kZW5jeSBsYW5kc2NhcGUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGUgYFpPTkVfREVWSUNFYCBvcHRpb24gaXMgYXQgcGxheSBoZXJlLCB3aGljaCBpcyBjbGVhcmx5IG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQuIEkmIzM5O2Qga2ljayBteXNlbGYgaWYgSSBkaWRuJiMzOTt0IHZlcmlmeSBpdHMgZGlyZWN0IGRlcGVuZGVuY2llcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYW55ICppbmRpcmVjdCogZGVwZW5kZW5jaWVzIG9uIG90aGVyIEtjb25maWcgdmFyaWFibGVzIGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2ssIGJ1dCBpdOKAmXMgY3JpdGljYWwgdG8gZXN0YWJsaXNoIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBzdGFydCBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3IgdGhlIGFyY2hpdGVjdHVyZSBpbiBnZW5lcmFsLiBUaGF0IGBLY29uZmlnYCBmaWxlIGhvbGRzIHRoZSBrZXlzIHRvIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMTc9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjEtXG5tbS9LY29uZmlnOjEyMjI6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjMtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgWk9ORV9ERVZJQ0UqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWxpZXMgb24gYFpPTkVfREVWSUNFYC4gVGhpcyBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBhbnkgbW9kdWxlcywgZnVuY3Rpb25zLCBvciBjb25maWd1cmF0aW9ucyB0aGF0IHV0aWxpemUgb3IgcmVmZXJlbmNlIHRoYXQgc3BlY2lmaWMgdmFyaWFibGUgb3Igb2JqZWN0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMgZmlyc3QsIGJ1dCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IGluZGlyZWN0IGRlcGVuZGVuY2llcyBjb3VsZCBiZSBjcnVjaWFsIOKAkyBzb21ldGhpbmcgdGhhdCBjYWxscyBhIGZ1bmN0aW9uIHRoYXQgKnVzZXMqIGBaT05FX0RFVklDRWAsIGZvciBleGFtcGxlLiBJJiMzOTtsbCBuZWVkIHRvIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LCBwZXJoYXBzIHN0YXJ0aW5nIHdpdGggYSBjb2RlIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIHRoZSB2YXJpYWJsZSBhbmQgdGhlbiBidWlsZGluZyBhIG1hcCBvZiBob3cgdGhleSByZWxhdGUgdG8gb3RoZXIgY29tcG9uZW50cy4gVGhlIGFyY2hpdGVjdHVyZSBpcyBrZXkgaGVyZS4gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgY29kZWJhc2UsIEkgbWlnaHQgbGV2ZXJhZ2Ugc29tZSB0b29saW5nIHRvIGF1dG9tYXRlIHRoZSBkZXBlbmRlbmN5IGFuYWx5c2lzIHRvIHNvbWUgZXh0ZW50LiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gZGVsdmUgaW50byB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMuIFRoZSBhaW0gaXMgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2Ugb3IgbW9kaWZpY2F0aW9uIHRvIGBaT05FX0RFVklDRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIyMDpcdFx0ZGVmYXVsdCB5IGlmIEFSTTY0XG4xMjIxOlx0XG4xMjIyOlx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMjIzOlx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjEyMjQ6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTIyNTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTIyNjpcdFxuMTIyNzpcdFx0aGVscFxuMTIyODpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTIyOTpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTIzMDpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjEyMzE6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMjMyOlx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjEyMzM6XHRcbjEyMzQ6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxuMTIzNTpcdFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXG4xMjM2Olx0XHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcbjEyMzc6XHRcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXG4xMjM4Olx0XHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxuMTIzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UgJmFtcDsgTUVNT1JZX0hPVFJFTU9WRSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgemVyb2VzIGluIG9uIGEgcmVsYXRpb25zaGlwOiBgWk9ORV9ERVZJQ0VgICpkZXBlbmRzKiBvbiBgTUVNT1JZX0hPVFJFTU9WRWAuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBMb2dpY2FsbHksIGlmIGBaT05FX0RFVklDRWAgaXMgcmVsaWFudCBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZGVwZW5kZW5jeSBpbiBkZXRhaWwuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyByZWxhdGlvbnNoaXAuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzcGVjaWZpY3Mgb2YgYE1FTU9SWV9IT1RSRU1PVkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpkb2VzKiBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0IGRvZXMgaXQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBgWk9ORV9ERVZJQ0VgLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBjb2RlLCBsb29raW5nIGF0IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGFuZCBhc3Nlc3Npbmcgd2hhdCBwb3RlbnRpYWwgaW1wYWN0IGBNRU1PUllfSE9UUkVNT1ZFYCYjMzk7cyBiZWhhdmlvdXIgaGFzIG9uIGBaT05FX0RFVklDRWAuIFRpbWUgdG8gZHJpbGwgZG93biBvbiBgTUVNT1JZX0hPVFJFTU9WRWAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTc4PWVuZGNob2ljZVxubW0vS2NvbmZpZy01NzktXG5tbS9LY29uZmlnOjU4MDpjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy01ODEtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIExhbmRzY2FwZSBvZiBgTUVNT1JZX0hPVFJFTU9WRWAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSAqcmVhbCogcGljdHVyZSBoZXJlPyYjMzQ7IEkgbmVlZCB0byBtYXAgb3V0IHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IGdyYXBoIGZvciBgTUVNT1JZX0hPVFJFTU9WRWAuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgcG90ZW50aWFsbHkgY29tcGxleCBzeXN0ZW0sIGFuZCBhIGhvdC1yZW1vdmUgb3BlcmF0aW9uIGNhbiB0b3VjaCBhIHN1cnByaXNpbmcgbnVtYmVyIG9mIGNvbXBvbmVudHMsIGV2ZW4gd2hlbiBzZWVtaW5nbHkgaXNvbGF0ZWQuIEkgbmVlZCBhIG1lbnRhbCBjaGVja2xpc3QsIGEgc29ydCBvZiBob2xpc3RpYyB2aWV3IG9mIHRoZSBzeXN0ZW0mIzM5O3MgaW50ZXJhY3Rpb25zLgoKRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG9idmlvdXM6IHRoZSBrZXJuZWwgbW9kdWxlcyBkaXJlY3RseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCDigJMgdGhlIG9uZXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpb24sIGZyZWVpbmcsIE5VTUEgbm9kZSBoYW5kbGluZywgcGFnZSBtaWdyYXRpb24sIGV0Yy4gVGhvc2UgYXJlIHRoZSBmcm9udC1saW5lIGRlcGVuZGVuY2llcy4gQnV0IGl0JiMzOTtzIHJhcmVseSB0aGF0IHNpbXBsZS4gV2hhdCYjMzk7cyB1cHN0cmVhbT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkIGFuZCBob3c/IFdoYXQgbGF5ZXJzIG9mIHRoZSBjb2RlIGFyZSB0aGUgZGVwZW5kZW5jaWVzIGVudGFuZ2xlZCBpbj8KClRoZW4sIEkmIzM5O20gYWxyZWFkeSBicmFuY2hpbmcgb3V0LiBBcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgaW1wbGljYXRpb25zPyBUb29scywgbW9uaXRvcmluZyBhZ2VudHMsIG9yIHN5c3RlbSBzZXJ2aWNlcyB0aGF0IG5lZWQgdG8gYmUgYXdhcmUgb2YsIG9yIHJlYWN0IHRvLCBhIG1lbW9yeSBob3QtcmVtb3ZlIGV2ZW50PyBBIG1pc3NlZCBub3RpZmljYXRpb24gaW4gdGhlIHJpZ2h0IHBsYWNlIGNhbiBsZWFkIHRvIHNlcmlvdXMgaW5zdGFiaWxpdHksIHNvIHRob3NlIGltcGxpY2F0aW9ucyBhcmUgY3JpdGljYWwgdG8gbXkgZXZhbHVhdGlvbi4gSSBjYW4mIzM5O3QgYmUgY2FyZWxlc3MgYWJvdXQgc3VjaCBhIGZ1bmRhbWVudGFsIGNoYW5nZS4KCkFuZCwgb2YgY291cnNlLCB0aGUgaGFyZHdhcmUuIFRoZSBCSU9TLCB0aGUgZmlybXdhcmUsIHRoZSBhY3R1YWwgcGh5c2ljYWwgbWVtb3J5IGNvbnRyb2xsZXJzIOKAkyB3aGF0JiMzOTtzIHRoZWlyIHJvbGUsIGFuZCBhcmUgdGhlcmUgYW55IGZpcm13YXJlIHF1aXJrcyBvciBsaW1pdGF0aW9ucyB0aGF0IHdpbGwgYml0ZSBtZSBkb3duIHRoZSByb2FkPyBUaGV5JiMzOTtyZSBhbHdheXMgdGhlIGhpZGRlbiB2YXJpYWJsZS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGFueSB2ZW5kb3IgZG9jdW1lbnRhdGlvbiBvbiBob3RwbHVnIHN1cHBvcnQsIG9yIGlmIHRoaXMgaXMgYW4gYXJlYSB3aGVyZSBJIGhhdmUgdG8gcmVseSBvbiBnb29kIG9sZC1mYXNoaW9uZWQgZW1waXJpY2FsIGRhdGEuCgpGaW5hbGx5LCBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBlZGdlIGNhc2VzLiBFcnJvciBoYW5kbGluZywgdGhlIGltcGFjdCBvZiBpbnRlcnJ1cHRzIGR1cmluZyB0aGUgaG90LXJlbW92ZSBwcm9jZXNzLCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4uLiB0aGlzIGtpbmQgb2YgdGhpbmcgYWx3YXlzIGVuZHMgdXAgYmVpbmcgdGhlIG1vc3QgZGlmZmljdWx0IHBhcnQsIGFuZCB0aGUgbW9zdCByZXdhcmRpbmcgdG8gZ2V0IHJpZ2h0LiBJIGhhdmUgdG8gY29uc2lkZXIgZmF1bHQgdG9sZXJhbmNlOiB3aGF0IGhhcHBlbnMgaWYgdGhlIG9wZXJhdGlvbiBmYWlscyBtaWQtd2F5LCBhbmQgaG93IHdpbGwgaXQgYWZmZWN0IHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGF2YWlsYWJpbGl0eT8gSW4gYWRkaXRpb24gdG8gc2FmZXR5LCBJIG11c3QgZm9jdXMgb24gZGF0YSBpbnRlZ3JpdHkuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIGJ1aWxkIGEgbWVudGFsIGZyYW1ld29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBpZGVudGlmaWVkIGV2ZXJ5IHBvdGVudGlhbCBpbXBhY3QgcG9pbnQuIEl0JiMzOTtzIGEgY29tcGxleCBpbnRlcmFjdGlvbiwgYnV0IHRoZSBvbmx5IHdheSB0byB0YWNrbGUgYSBjb21wbGV4IHN5c3RlbSBjaGFuZ2Ugd2l0aCBjb25maWRlbmNlIGlzIHRvIGJlIGNvbXByZWhlbnNpdmUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggZGVwZW5kZW5jeSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Nzg6XHRlbmRjaG9pY2VcbiA1Nzk6XHRcbiA1ODA6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MTpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODI6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODM6XHRcbiA1ODQ6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODU6XHRcdGRlZl9ib29sIHlcbiA1ODY6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1ODEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVwZW5kZW5jeSBBbmFseXNpczogTWVtb3J5IEhvdC1BZGQvUmVtb3ZlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtZW1vcnkgaG90LWFkZC9yZW1vdmUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBhcmNoaXRlY3R1cmUuIEZpcnN0IHVwLCBgTUVNT1JZX0hPVFJFTU9WRWAuLi4gb2theSwgdGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpdCYjMzk7cyBhIHNlbGYtY29udGFpbmVkIGZlYXR1cmUuIE5vIGltbWVkaWF0ZWx5IG9idmlvdXMgZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lLiBXZSYjMzk7cmUga2VlcGluZyB0aGF0IHNpbXBsZSwgd2hpY2ggaXMgZ29vZC4gTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gdGhlIGhvdC1wbHVnIHNpZGUgb2YgdGhpbmdzLCBgTUVNT1JZX0hPVFBMVUdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgaGF2ZSB0byBjb25zaWRlciBob3cgbWVtb3J5IGlzIGhhbmRsZWQgYXQgdGhlIGhhcmR3YXJlLCBmaXJtd2FyZSwgYW5kIHNvZnR3YXJlIGxheWVycyBzaW11bHRhbmVvdXNseS4gTmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdGhlcmUuIEdvdHRhIGVuc3VyZSB0aGF0IGFueSBob3QtcGx1ZyBhY3Rpb25zIHBsYXkgbmljZWx5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUwOD1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUxMS0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTEyOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTEzLVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkyNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUtcmVsYXRlZCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgUmVsYXRlZCB0byBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBaT05FX0RFVklDRWAgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiB0byBrZWVwIGFuIGV5ZSBvbiBoZXJlLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggaXQuIEJhc2VkIG9uIHRoZSBpbml0aWFsIHNjYW4sIEkgc2VlIHRoZXNlIGFzIHRoZSBwcmltYXJ5IGNhbmRpZGF0ZXMgZm9yIGNsb3NlciBleGFtaW5hdGlvbjogYGRhbW9uX2dldF9mb2xpb2AsIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkYCwgYG1hZHZpc2VfcGFnZW91dGAsIGBkb19tYmluZGAsIGFuZCBgcXVldWVfcGFnZXNfcmFuZ2VgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGluIHRoaXMga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBzY2VuYXJpby4KCkhhbmcgb24gYSBzZWNvbmTigKYgSSYjMzk7dmUgZ290IHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIExldCBtZSBzZWUuLi4geWVzLCBgbWFkdmlzZV9jb2xkYCBhbmQgYG1hZHZpc2VfcGFnZW91dGAgYXJlIHN0YXRpYy4gT2theSwgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggdGhlIGFuYWx5c2lzLiBCYWNrIHRvIGZpZ3VyaW5nIG91dCBob3cgYWxsIG9mIHRoaXMgdGllcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmMtMzUyLVxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxubW0vbWFkdmlzZS5jLTM1NC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jPTU3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XG5tbS9tYWR2aXNlLmM6NTcyOlx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcbm1tL21hZHZpc2UuYy01NzMtXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcbi0tXG5tbS9tYWR2aXNlLmMtNTc1LVxubW0vbWFkdmlzZS5jOjU3NjpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWFkdmlzZS5jLTU3Ny1cdFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jPTU5Mz1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX21hZHZfbHJ1X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tYWR2aXNlLmMtNTk3LVxubW0vbWFkdmlzZS5jOjU5ODpzdGF0aWMgbG9uZyBtYWR2aXNlX2NvbGQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtNTk5LXtcbi0tXG5tbS9tYWR2aXNlLmMtNjA3LVx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVx1MDAzZW1tKTtcbm1tL21hZHZpc2UuYzo2MDg6XHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jLTYwOS1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tLVxubW0vbWFkdmlzZS5jPTEzNDE9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM1Ny1cdGNhc2UgTUFEVl9DT0xEOlxubW0vbWFkdmlzZS5jOjEzNTg6XHRcdHJldHVybiBtYWR2aXNlX2NvbGQobWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTM1OS1cdGNhc2UgTUFEVl9QQUdFT1VUOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUaGlua2luZyBUaHJvdWdoIHRoZSBgbWFkdmlzZWAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtYWR2aXNlYCwgYW5kIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZsb3cgaGVyZS4gVGhlIHdob2xlIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIG5vIHN1cnByaXNlcyB0aGVyZSwgd2UgbmVlZCBpdCB0byBiZSBzbyB3ZSBjYW4gbWFpbnRhaW4gdGhlIG5lY2Vzc2FyeSBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiBUaGUgcmVhbCBtZWF0IG9mIHRoZSBvcGVyYXRpb24gZ2V0cyBraWNrZWQgb2ZmIGZyb20gYGRvX21hZHZpc2VgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGhhbmRsZXMgdGhlIGNvcmUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIGFuZCBhbnkgaW5pdGlhbCB2YWxpZGF0aW9uLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBkb19tYWR2aXNlYCBwcm9iYWJseSBoYW5kbGVzIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCB0aGVuIHBhc3NlcyB0aGUgcmVsZXZhbnQgZGV0YWlscyBkb3duIHRvIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBsb2dpYy4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGVudHJ5LXBvaW50IC8gY29yZS1mdW5jdGlvbiBwYXJhZGlnbSB3ZSBzZWUgYWxsIG92ZXIgdGhlIHBsYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgYGRvX21hZHZpc2VgIGludGVyYWN0cyB3aXRoIGFueSBwZXItcHJvY2VzcyBvciBnbG9iYWwgcGFyYW1ldGVycy4gSXQmIzM5O3MgYSBzdGFuZGFyZCBwYXR0ZXJuLCBJIGV4cGVjdCB0aGVyZSBpcyBzdGFuZGFyZCB2YWxpZGF0aW9uIGFuZCBzb21lIGZvcm0gb2YgZXJyb3IgY2hlY2tpbmcsIGJlZm9yZSBmaW5hbGx5IGdldHRpbmcgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbiB0byBhY3R1YWxseSBkbyB0aGUgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fbWFkdmlzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9NDIxNz1leHRlcm4gaW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCxcbmluY2x1ZGUvbGludXgvbW0uaC00MjE4LVx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcbmluY2x1ZGUvbGludXgvbW0uaDo0MjE5OmV4dGVybiBpbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKTtcbmluY2x1ZGUvbGludXgvbW0uaC00MjIwLVxuLS1cbmlvX3VyaW5nL2FkdmlzZS5jPTUxPWludCBpb19tYWR2aXNlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvYWR2aXNlLmMtNTgtXG5pb191cmluZy9hZHZpc2UuYzo1OTpcdHJldCA9IGRvX21hZHZpc2UoY3VycmVudC1cdTAwM2VtbSwgbWEtXHUwMDNlYWRkciwgbWEtXHUwMDNlbGVuLCBtYS1cdTAwM2VhZHZpY2UpO1xuaW9fdXJpbmcvYWR2aXNlLmMtNjAtXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz03MTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MzAtXG5tbS9kYW1vbi92YWRkci5jOjczMTpcdGFwcGxpZWQgPSBkb19tYWR2aXNlKG1tLCBzdGFydCwgbGVuLCBiZWhhdmlvcikgPyAwIDogbGVuO1xubW0vZGFtb24vdmFkZHIuYy03MzItXHRtbXB1dChtbSk7XG4tLVxubW0vbWFkdmlzZS5jPTE4OTA9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE5ODYtICovXG5tbS9tYWR2aXNlLmM6MTk4NzppbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE5ODgte1xuLS1cbm1tL21hZHZpc2UuYz0yMDE1PVNZU0NBTExfREVGSU5FMyhtYWR2aXNlLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW5faW4sIGludCwgYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMjAxNi17XG5tbS9tYWR2aXNlLmM6MjAxNzpcdHJldHVybiBkb19tYWR2aXNlKGN1cnJlbnQtXHUwMDNlbW0sIHN0YXJ0LCBsZW5faW4sIGJlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0yMDE4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MDAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZzoKCioqRXhhbWluaW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbiBTY29wZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2Uga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZWdpc3RlcmluZyBhcyBpbnRlcmVzdGluZyB0aGF0IHRoZSBgZG9fbWFkdmlzZWAgZnVuY3Rpb24gaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGltcGxpZXMgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHNvdXJjZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFNpbWlsYXJseSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgZG9fbWJpbmRgLCB0aGUgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIG1lbXBvbGljeSBvcGVyYXRpb25zLCBpcyBhbHNvIG5vbi1zdGF0aWMsIHN1Z2dlc3RpbmcgdGhlIHNhbWUgYWNjZXNzaWJpbGl0eSBwYXR0ZXJuIGFwcGxpZXMuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBwb2ludHMgdG8gdGhlc2UgZnVuY3Rpb25zIGJlaW5nIHBhcnQgb2YgYSBicm9hZGVyIEFQSSBvciBtb2R1bGUgaW50ZXJmYWNlIHdpdGhpbiB0aGUga2VybmVsLCBkZXNpZ25lZCB0byBiZSBjYWxsZWQgYnkgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIHBlcmhhcHMgZXZlbiB1c2VyLXNwYWNlIHZpYSBzeXN0ZW0gY2FsbHMuIEkmIzM5O2QgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCByZWFzb25zLCBidXQgdGhlIGxhY2sgb2YgYHN0YXRpY2AgZGVjbGFyYXRpb24gaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgaW50ZW5kZWQgZXh0ZXJuYWwgdXNhZ2UuIFRoaXMgb3BlbnMgZG9vcnMgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGFkdmlzb3J5IGZ1bmN0aW9ucyBhbmQgbWVtb3J5IGJpbmRpbmcgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdCB3aXRoIG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX21iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTYxMj1zdGF0aWMgYm9vbCBzdHJpY3RseV91bm1vdmFibGUodW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYy02MTQtXHQvKlxubW0vbWVtcG9saWN5LmM6NjE1Olx0ICogU1RSSUNUIHdpdGhvdXQgTU9WRSBmbGFncyBsZXRzIGRvX21iaW5kKCkgZmFpbCBpbW1lZGlhdGVseSB3aXRoIC1FSU9cbm1tL21lbXBvbGljeS5jLTYxNi1cdCAqIGlmIGFueSBtaXNwbGFjZWQgcGFnZSBpcyBmb3VuZC5cbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDg2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDkyLVxubW0vbWVtcG9saWN5LmM6MTQ5MzpzdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbm1tL21lbXBvbGljeS5jLTE0OTQtXHRcdCAgICAgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgc2hvcnQgbW9kZV9mbGFncyxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNzQ2PXN0YXRpYyBsb25nIGtlcm5lbF9tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzYzLVxubW0vbWVtcG9saWN5LmM6MTc2NDpcdHJldHVybiBkb19tYmluZChzdGFydCwgbGVuLCBsbW9kZSwgbW9kZV9mbGFncywgXHUwMDI2bm9kZXMsIGZsYWdzKTtcbm1tL21lbXBvbGljeS5jLTE3NjUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI2NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipTdGF0aWMgQmluZGluZ3MgYW5kIEtlcm5lbCBDYWxscyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBmbG93IGNvcnJlY3RseS4gYGRvX21iaW5kYC4uLnRoYXQmIzM5O3Mgc3RhdGljLCBpc24mIzM5O3QgaXQ/IE1lYW5pbmcgaXQmIzM5O3MgYmVpbmcgdXNlZCBpbiBhIGZpeGVkIGNvbnRleHQuIFRoaXMgY291bGQgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBpcyBzdHJ1Y3R1cmVkIGFuZCBleGVjdXRlZC4gTGV0JiMzOTtzIG5vdCBhc3N1bWUgYW55dGhpbmcgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrZXJuZWxfbWJpbmRgIG5leHQuIFNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyAqdGhhdCogd2lsbCBjbGFyaWZ5IGEgbG90IGFib3V0IHRoZSBtZW1vcnkgYmluZGluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2VybmVsX21iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTE3Mjg9c3RhdGljIGlubGluZSBpbnQgc2FuaXRpemVfbXBvbF9mbGFncyhpbnQgKm1vZGUsIHVuc2lnbmVkIHNob3J0ICpmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzQ1LVxubW0vbWVtcG9saWN5LmM6MTc0NjpzdGF0aWMgbG9uZyBrZXJuZWxfbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG5tbS9tZW1wb2xpY3kuYy0xNzQ3LVx0XHRcdCB1bnNpZ25lZCBsb25nIG1vZGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICpubWFzayxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xODM0PVNZU0NBTExfREVGSU5FNihtYmluZCwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xODM3LXtcbm1tL21lbXBvbGljeS5jOjE4Mzg6XHRyZXR1cm4ga2VybmVsX21iaW5kKHN0YXJ0LCBsZW4sIG1vZGUsIG5tYXNrLCBtYXhub2RlLCBmbGFncyk7XG5tbS9tZW1wb2xpY3kuYy0xODM5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEJpbmRpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpSaWdodCwgc28gYGtlcm5lbF9tYmluZGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IGRpcmVjdGx5IGV4cG9zZWQgZm9yIHVzZSBvdXRzaWRlIG9mIGl0cyBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gVGhlcmVmb3JlLCB0aGUgdXNlci1sZXZlbCBlbnRyeSBwb2ludCBmb3IgbWVtb3J5IGJpbmRpbmcgbXVzdCBiZSBgc3lzX21iaW5kYC4gQW5kIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgZGVmaW5lZCBhcyBgU1lTQ0FMTF9ERUZJTkU2KG1iaW5kLCAuLi4pYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgc3lzX21iaW5kYCBpcyB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRoYXQgdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbSB3b3VsZCBpbnRlcmFjdCB3aXRoLgoKSG1tLi4uIHdhaXQgYSBtaW51dGUuIGBxdWV1ZV9wYWdlc19yYW5nZWAgaXMgKm5vbi1zdGF0aWMqPyBUaGF0IHRocm93cyBhIHNsaWdodCB3cmVuY2ggaW50byBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBJZiBpdCYjMzk7cyBub3Qgc3RhdGljLCBpdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBleHBvc2VkLCBhbmQgY291bGQgYmUgdXNlZCBpbiBhIGJyb2FkZXIgc2NvcGUuIEl0IG1ha2VzIG1lIHdvbmRlciB3aGF0IHJlbGF0aW9uc2hpcCBpdCBoYXMgdG8gYGtlcm5lbF9tYmluZGAgYW5kIGBzeXNfbWJpbmRgLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgd2hlcmUgYHF1ZXVlX3BhZ2VzX3JhbmdlYCBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlc2Ugb3RoZXIgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIElzIGl0IGJlaW5nIHNoYXJlZCB3aXRoIG90aGVyIG1vZHVsZXM/IE9yIGlzIGl0IGEgaGVscGVyIGZ1bmN0aW9uIGRlc2lnbmVkIGZvciB1c2Ugd2l0aGluIG1lbW9yeSBiaW5kaW5nIGZ1bmN0aW9ucyB0aGF0IGhhcHBlbiB0byBiZSBhY2Nlc3NpYmxlIGJ5IG90aGVyIGFyZWFzIG9mIHRoZSBjb2RlPyBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY3Jvc3MtcmVmZXJlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfcGFnZXNfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzQ5LVx0XHRcdCAqIG1pZ3JhdGVfcGFnZXMoXHUwMDI2cGFnZWxpc3QpIHJldHVybnMgbnJfZmFpbGVkIGZvbGlvcywgc29cbm1tL21lbXBvbGljeS5jOjc1MDpcdFx0XHQgKiBjaGVjayBcJiMzNDtsYXJnZVwmIzM0OyBub3cgc28gdGhhdCBxdWV1ZV9wYWdlc19yYW5nZSgpIHJldHVybnNcbm1tL21lbXBvbGljeS5jLTc1MS1cdFx0XHQgKiBhIGNvbXBhcmFibGUgbnJfZmFpbGVkIGZvbGlvcy4gIFRoaXMgZG9lcyBpbXBseSB0aGF0XG4tLVxubW0vbWVtcG9saWN5LmM9OTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfbG9ja192bWFfd2Fsa19vcHMgPSB7XG4tLVxubW0vbWVtcG9saWN5LmMtOTc3LSAqXG5tbS9tZW1wb2xpY3kuYzo5Nzg6ICogcXVldWVfcGFnZXNfcmFuZ2UoKSBtYXkgcmV0dXJuOlxubW0vbWVtcG9saWN5LmMtOTc5LSAqIDAgLSBhbGwgcGFnZXMgYWxyZWFkeSBvbiB0aGUgcmlnaHQgbm9kZSwgb3Igc3VjY2Vzc2Z1bGx5IHF1ZXVlZCBmb3IgbW92aW5nXG4tLVxubW0vbWVtcG9saWN5LmM9OTg2PXN0YXRpYyBsb25nXG5tbS9tZW1wb2xpY3kuYzo5ODc6cXVldWVfcGFnZXNfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vbWVtcG9saWN5LmMtOTg4LVx0XHRub2RlbWFza190ICpub2RlcywgdW5zaWduZWQgbG9uZyBmbGFncyxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xMjg5PXN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXG4tLVxubW0vbWVtcG9saWN5LmMtMTMyMC1cdCAqL1xubW0vbWVtcG9saWN5LmM6MTMyMTpcdG5yX2ZhaWxlZCA9IHF1ZXVlX3BhZ2VzX3JhbmdlKG1tLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1tLVx1MDAzZXRhc2tfc2l6ZSwgXHUwMDI2bm1hc2ssXG5tbS9tZW1wb2xpY3kuYy0xMzIyLVx0XHRcdFx0ICAgICAgZmxhZ3MgfCBNUE9MX01GX0RJU0NPTlRJR19PSywgXHUwMDI2cGFnZWxpc3QpO1xuLS1cbm1tL21lbXBvbGljeS5jPTE0OTM9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxubW0vbWVtcG9saWN5LmMtMTU1Ni1cdCAqL1xubW0vbWVtcG9saWN5LmM6MTU1NzpcdG5yX2ZhaWxlZCA9IHF1ZXVlX3BhZ2VzX3JhbmdlKG1tLCBzdGFydCwgZW5kLCBubWFzayxcbm1tL21lbXBvbGljeS5jLTE1NTgtXHRcdFx0ZmxhZ3MgfCBNUE9MX01GX0lOVkVSVCB8IE1QT0xfTUZfV1JMT0NLLCBcdTAwMjZwYWdlbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBob3cgdG8gdGFja2xlIHRoaXMgbWVtb3J5IHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBwYWdlIHJhbmdlcy4gSSYjMzk7bSBub3RpbmcgdGhhdCBgcXVldWVfcGFnZXNfcmFuZ2VgIGlzIGEgc3RhdGljIGVudGl0eSwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgb2YgaW52ZXN0aWdhdGlvbiB3aGVuIGNvbnNpZGVyaW5nIGhvdyB0byBtYWtlIG1lbW9yeSBwb2xpY3kgYWRqdXN0bWVudHMuIEFscmlnaHQsIHNvIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBtZW1wb2xpY3kgbWFuaXB1bGF0aW9uIGxvb2sgbGlrZSB0aGV5IGFyZSBgc3lzX21iaW5kYCwgYGRvX21pZ3JhdGVfcGFnZXNgIGFuZCBgbWlncmF0ZV90b19ub2RlYCwgeWVzPyBIb2xkIG9uLi4uIGl0IGFwcGVhcnMgdGhhdCBgbWlncmF0ZV90b19ub2RlYCBpcyBhbHNvIHN0YXRpY2FsbHkgZGVmaW5lZC4gU28sIGxldCBtZSByZS1ldmFsdWF0ZS4uLiBwZXJoYXBzIHRoZSBiZXR0ZXIgZnVuY3Rpb24gdG8gdGFyZ2V0IHdvdWxkIGJlIGBzeXNfbWlncmF0ZV9wYWdlc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdG9fbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0xMjU2PXN0YXRpYyBib29sIG1pZ3JhdGVfZm9saW9fYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvbGlzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMjg4LSAqL1xubW0vbWVtcG9saWN5LmM6MTI4OTpzdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxubW0vbWVtcG9saWN5LmMtMTI5MC1cdFx0XHQgICAgaW50IGZsYWdzKVxuLS1cbm1tL21lbXBvbGljeS5jPTEzNDM9aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG4tLVxubW0vbWVtcG9saWN5LmMtMTQyNC1cdFx0bm9kZV9jbGVhcihzb3VyY2UsIHRtcCk7XG5tbS9tZW1wb2xpY3kuYzoxNDI1Olx0XHRlcnIgPSBtaWdyYXRlX3RvX25vZGUobW0sIHNvdXJjZSwgZGVzdCwgZmxhZ3MpO1xubW0vbWVtcG9saWN5LmMtMTQyNi1cdFx0aWYgKGVyciBcdTAwM2UgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSwgYXMgaWYgSSYjMzk7bSB0aGlua2luZyB0aGVtLgoKKipBbmFseXppbmcgRnVuY3Rpb24gU2NvcGU6IGBkb19taWdyYXRlX3BhZ2VzYCoqCgpSaWdodCwgc28gdGhlIHN5c3RlbSBmbGFnZ2VkIGBkb19taWdyYXRlX3BhZ2VzYC4gVGhlIGtleSB0aGluZyBqdW1waW5nIG91dCBhdCBtZSBpbW1lZGlhdGVseSBpcyB0aGF0IGl0JiMzOTtzICpub24tc3RhdGljKi4gT2theSwgd2hhdCBkb2VzIHRoYXQgcmVhbGx5IG1lYW4gaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBwcm9qZWN0PwoKVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgYGRvX21pZ3JhdGVfcGFnZXNgIGlzbiYjMzk7dCBkZXNpZ25lZCBhcyBhIHV0aWxpdHkgZnVuY3Rpb24sIHNvbWV0aGluZyB0aGF0JiMzOTtzIHNlbGYtY29udGFpbmVkIGFuZCBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LiBJbnN0ZWFkLCBpdCYjMzk7cyB0aWVkIHRvIGFuICppbnN0YW5jZSogb2YgYSBjbGFzcyBvciBtb2R1bGUuIFRoYXQgbWVhbnMgaXQgbGlrZWx5IHJlbGllcyBvbiDigJMgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVzIOKAkyBpbnRlcm5hbCBzdGF0ZSBkYXRhLiBJdCYjMzk7cyBub3QgYSBwdXJlbHkgZnVuY3Rpb25hbCBvcGVyYXRpb24uIFdlIG5lZWQgdG8ga25vdyAqd2hhdCogdGhhdCBzdGF0ZSBpcywgYW5kIGhvdyBjaGFuZ2VzIHRvIHRoYXQgc3RhdGUgY291bGQgaW1wYWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCgpTbywgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kOgoKKiAgICoqVGhlIGNvbnRleHQ6KiogV2hhdCBjbGFzcy9vYmplY3Qgb3ducyBgZG9fbWlncmF0ZV9wYWdlc2A/IEtub3dpbmcgdGhlIGNsYXNzIHdpbGwgY2x1ZSBtZSBpbnRvIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgb3RoZXIgbWV0aG9kcyBhdmFpbGFibGUgdG8gdGhlIGNsYXNzLgoqICAgKipUaGUgZGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgbWV0aG9kcyBvciB2YXJpYWJsZXMgZG9lcyBgZG9fbWlncmF0ZV9wYWdlc2AgY2FsbCBvciByZWZlcmVuY2U/IEFyZSB0aGVyZSBhbnkgc2hhcmVkIHJlc291cmNlcz8gS25vd2luZyB0aGUgY2xhc3Mgc2hvdWxkIGhlbHAgY2xhcmlmeSB0aGVzZSBkZXBlbmRlbmNpZXMuCiogICAqKlRoZSBpbXBsaWNhdGlvbnM6KiogV2hhdCB3aWxsIGhhcHBlbiBpZiB0aGlzIGlzbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseT8gV2hhdCBzdGF0ZSB3aWxsIGJlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzPwoqICAgKipUaGUgcmlza3M6KiogV2hhdCBjb3VsZCBnbyB3cm9uZyBpZiB0aGUgaW5zdGFuY2UgaXMgbm90IGNvcnJlY3RseSBpbnN0YW50aWF0ZWQgb3IgcGFzc2VkIGluIGEgcHJvYmxlbWF0aWMgc3RhdGU/CgpBIG5vbi1zdGF0aWMgbWV0aG9kIGltcGxpZXMgYW4gaW5zdGFuY2Utc3BlY2lmaWMgbWlncmF0aW9uLCBhbmQgaWYgdGhpcyBpbXBhY3RzIHRoZSBzeXN0ZW0sIHRoZW4gdGhhdCBsZXZlbCBvZiBhbmFseXNpcyBpcyB3YXJyYW50ZWQuIEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIGl0cyB1c2FnZSBhbmQgZXhhbWluaW5nIHRoZSBjbGFzcyBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MTUzPXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19oaWdoZXN0X3pvbmUoZW51bSB6b25lX3R5cGUgaylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTE1OC1cbmluY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg6MTU5OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xNjAtXHRcdCAgICAgY29uc3Qgbm9kZW1hc2tfdCAqdG8sIGludCBmbGFncyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaD0yNjg9c3RhdGljIGlubGluZSBib29sIGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KG5vZGVtYXNrX3QgKm0pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yNzItXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjI3MzpzdGF0aWMgaW5saW5lIGludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yNzQtXHRcdFx0XHQgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9MjUzMj1zdGF0aWMgdm9pZCBjcHVzZXRfbWlncmF0ZV9tbV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMjUzNy1cdC8qIG9uIGEgd3Egd29ya2VyLCBubyBuZWVkIHRvIHdvcnJ5IGFib3V0ICVjdXJyZW50JiMzOTtzIG1lbXNfYWxsb3dlZCAqL1xua2VybmVsL2Nncm91cC9jcHVzZXQuYzoyNTM4Olx0ZG9fbWlncmF0ZV9wYWdlcyhtd29yay1cdTAwM2VtbSwgXHUwMDI2bXdvcmstXHUwMDNlZnJvbSwgXHUwMDI2bXdvcmstXHUwMDNldG8sIE1QT0xfTUZfTU9WRV9BTEwpO1xua2VybmVsL2Nncm91cC9jcHVzZXQuYy0yNTM5LVx0bW1wdXQobXdvcmstXHUwMDNlbW0pO1xuLS1cbm1tL21lbXBvbGljeS5jPTEyODk9c3RhdGljIGxvbmcgbWlncmF0ZV90b19ub2RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgc291cmNlLCBpbnQgZGVzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMzQyLSAqL1xubW0vbWVtcG9saWN5LmM6MTM0MzppbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSxcbm1tL21lbXBvbGljeS5jLTEzNDQtXHRcdCAgICAgY29uc3Qgbm9kZW1hc2tfdCAqdG8sIGludCBmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMzkxLVx0XHRcdC8qXG5tbS9tZW1wb2xpY3kuYzoxMzkyOlx0XHRcdCAqIGRvX21pZ3JhdGVfcGFnZXMoKSB0cmllcyB0byBtYWludGFpbiB0aGUgcmVsYXRpdmVcbm1tL21lbXBvbGljeS5jLTEzOTMtXHRcdFx0ICogbm9kZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhZ2VzIGVzdGFibGlzaGVkIGJldHdlZW5cbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDc0PXN0YXRpYyBib29sIG1pZ3JhdGVfZm9saW9fYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvbGlzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDc5LVxubW0vbWVtcG9saWN5LmM6MTQ4MDppbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSxcbm1tL21lbXBvbGljeS5jLTE0ODEtXHRcdCAgICAgY29uc3Qgbm9kZW1hc2tfdCAqdG8sIGludCBmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYz0xODY3PXN0YXRpYyBpbnQga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkX3QgcGlkLCB1bnNpZ25lZCBsb25nIG1heG5vZGUsXG4tLVxubW0vbWVtcG9saWN5LmMtMTkzOC1cbm1tL21lbXBvbGljeS5jOjE5Mzk6XHRlcnIgPSBkb19taWdyYXRlX3BhZ2VzKG1tLCBvbGQsIG5ldyxcbm1tL21lbXBvbGljeS5jLTE5NDAtXHRcdGNhcGFibGUoQ0FQX1NZU19OSUNFKSA/IE1QT0xfTUZfTU9WRV9BTEwgOiBNUE9MX01GX01PVkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI0MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIE1pZ3JhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBzdGFydCByZWFsbHkgZGlnZ2luZyBpbi4gYGRvX21pZ3JhdGVfcGFnZXNgIHNlZW1zIGxpa2UgYSBzb2xpZCBwb2ludCB0byB6b29tIGluIG9uLCBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMuIEJ1dCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IEkmIzM5O20gc2VlaW5nIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLi4uIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgYSBjYW5kaWRhdGUuIEFsc28sIGBkYW1vbl9nZXRfZm9saW9gIGFuZCBgZG9fbWFkdmlzZWAgYXJlIGJvdGggbm9uLXN0YXRpYyBhcyB3ZWxsLCBzbyB0aGV5IGFyZSBwb3NzaWJsZSBjYW5kaWRhdGVzIHRvIGNvbnNpZGVyLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEkgbmVlZCB0byBrbm93IGlmIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm1hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIENvZGUgVmlzaWJpbGl0eSBhbmQgRnVuY3Rpb24gRXhwb3J0KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBoZXJlLiBJdCYjMzk7cyAqZGVmaW5pdGVseSogbm90IG1hcmtlZCBhcyBleHBvcnRlZCwgd2hpY2ggaXMgbXkgZmlyc3Qgb2JzZXJ2YXRpb24uIEJ1dCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub24tc3RhdGljKiBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE5vbi1zdGF0aWMgaW1wbGllcyBpdCAqY291bGQqIGJlIGFjY2Vzc2libGUgZnJvbSBlbHNld2hlcmUsIHBvdGVudGlhbGx5IHdpdGhpbiB0aGUgc2FtZSBjb21waWxlZCB1bml0IG9yIGxpbmtlZCBsaWJyYXJ5LCBldmVuIGlmIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkIHZpYSBhIGRlY2xhcmF0aW9uLiBOb3cgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdOKAmXMgYSBwb3NzaWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGBkYW1vbl9nZXRfZm9saW9gIGlzIGFjdHVhbGx5IGJlaW5nIGV4cG9zZWQgaW4gdGhlIG9iamVjdCBmaWxlIG9yIHNoYXJlZCBsaWJyYXJ5LCBldmVuIGlmIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGBleHRlcm5gLiBUaW1lIHRvIGNoZWNrIHRoZSBzeW1ib2wgdGFibGU7IEkgbmVlZCB0byB2ZXJpZnkgaXRzIHZpc2liaWxpdHksIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRvIGRpY3RhdGUgaG93IEkgYXBwcm9hY2ggYW55IHBvdGVudGlhbCBsaW5rYWdlIGlzc3VlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRhbW9uX2dldF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUmIzM5O3MgTWVtb3J5IE1hbmFnZW1lbnQgU3RyYXRlZ3kqKgoKT2theSwgc28gdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCBpdCAqaXMqIG5vbi1zdGF0aWMsIHdoaWNoIGdpdmVzIHVzIHNvbWUgZmxleGliaWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgbWFpbiBzeW1ib2xzIGFyZSB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZTogYGRhbW9uX2dldF9mb2xpb2AsIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgZG9fbWFkdmlzZWAsIGFuZCBgZG9fbWlncmF0ZV9wYWdlc2AuIEkmIzM5O20gYWxzbyB0aGlua2luZyBhYm91dCBgbWJpbmRgLCBzaW5jZSB0aGF0JiMzOTtzIGEgc3lzdGVtIGNhbGwsIGFuZCB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGFuIGFzc29jaWF0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbiwganVzdCBpbiBjYXNlLiBIbW0sIGBrZXJuZWxfbWJpbmRgIGlzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBvdXQuIFdlIGhhdmUgYHN5c19tYmluZGAsIGJ1dCBJIHRoaW5rIEkgY2FuIGp1c3Qgc3RpY2sgd2l0aCBgZG9fbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19tYWR2aXNlYCAtIHRoZXkmIzM5O3JlIHByb2JhYmx5IHN1ZmZpY2llbnQgZm9yIHdoYXQgSSBuZWVkIHRvIGRvLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYFpPTkVfREVWSUNFYCwgYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBOVU1BYCBpbiB0aGUgbWl4LiBIYW5nIG9u4oCmIGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIHdoaWNoIGl0c2VsZiBoYXMgbm8gZGVwZW5kZW5jaWVzLiBHaXZlbiB0aGF0IGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1FTU9SWV9IT1RSRU1PVkVgIGlzIGVuYWJsZWQgaWYgSSB3YW50IGBaT05FX0RFVklDRWAuIFJlbWVtYmVyLCBhIGRlcGVuZGVuY3kgKm11c3QqIGJlIGVuYWJsZWQuIFNpbmNlIGl0JiMzOTtzIGEgYGJvb2xgLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgWk9ORV9ERVZJQ0VgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcywganVzdCB0byBiZSBzdXJlLiBOb3BlLCBqdXN0IGBNRU1PUllfSE9UUkVNT1ZFYC4gQWxyaWdodCwgbGV0JiMzOTtzIHJldmlzaXQgdGhhdCBgTUVNT1JZX0hPVFJFTU9WRWAgY29uZmlnIG9uZSBtb3JlIHRpbWUgYW5kIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBub3RoaW5nIGVsc2UgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Nzg6XHRlbmRjaG9pY2VcbiA1Nzk6XHRcbiA1ODA6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MTpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODI6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODM6XHRcbiA1ODQ6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODU6XHRcdGRlZl9ib29sIHlcbiA1ODY6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgQ29uZmxpY3RpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKSG9sZCBvbiBhIHNlY29uZC4gSXNuJiMzOTt0IGBNRU1PUllfSE9UUkVNT1ZFYCBzdXBwb3NlZCB0byBiZSBjb25kaXRpb25hbCBvbiBgTUVNT1JZX0hPVFBMVUdgPyBXaHkgaXMgaXQgYXBwZWFyaW5nIHdpdGhpbiBhbiBgaWYgTUVNT1JZX0hPVFBMVUdgIGJsb2NrPyBUaGF0IHNlZW1zIHJlZHVuZGFudC4gVGhpcyBwcm9iYWJseSBpc24mIzM5O3QgYSBidWcsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgaXQgYXMgYSBtYXR0ZXIgb2YgZHVlIGRpbGlnZW5jZS4gSSBzaG91bGQgY2hlY2sgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCBtZSBnbyBsb29rIGF0IGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU3OCwgYW5kIGNvbmZpcm0gdGhlIGV4cGVjdGVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBvcHRpb25zLiBJJiMzOTttIHN1cmUgSSYjMzk7bGwgZmluZCBhbiBleHBsYW5hdGlvbiB0aGVyZS4gSXQgY291bGQgYmUgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb24gSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgZ3Jhc3BpbmcsIG9yIGl0IGNvdWxkIHNpbXBseSBiZSBhIHF1aXJrIG9mIGhvdyB0aGUgb3B0aW9ucyBhcmUgc3RydWN0dXJlZC4gSXQmIzM5O3MgYmVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFxuIDU1MTpcdGNvbmZpZyBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfQVVUT1xuIDU1MjpcdFx0Ym9vbCBcJiMzNDthdXRvXCYjMzQ7XG4gNTUzOlx0XHRoZWxwXG4gNTU0Olx0XHQgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRoZSBrZXJuZWwgdG8gYXV0b21hdGljYWxseSBvbmxpbmVcbiA1NTU6XHRcdCAgaG90cGx1Z2dlZCBtZW1vcnkgaW50byB0aGUgem9uZSBpdCB0aGlua3MgaXMgcmVhc29uYWJsZS5cbiA1NTY6XHRcdCAgVGhpcyBtZW1vcnkgbWF5IGJlIHV0aWxpemVkIGZvciBrZXJuZWwgZGF0YS5cbiA1NTc6XHRcbiA1NTg6XHRjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0tFUk5FTFxuIDU1OTpcdFx0Ym9vbCBcJiMzNDtrZXJuZWxcJiMzNDtcbiA1NjA6XHRcdGhlbHBcbiA1NjE6XHRcdCAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IG9ubGluZVxuIDU2MjpcdFx0ICBob3RwbHVnZ2VkIG1lbW9yeSBpbnRvIGEgem9uZSBjYXBhYmxlIG9mIGJlaW5nIHVzZWQgZm9yIGtlcm5lbFxuIDU2MzpcdFx0ICBkYXRhLiBUaGlzIHR5cGljYWxseSBtZWFucyBaT05FX05PUk1BTC5cbiA1NjQ6XHRcbiA1NjU6XHRjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX01PVkFCTEVcbiA1NjY6XHRcdGJvb2wgXCYjMzQ7bW92YWJsZVwmIzM0O1xuIDU2NzpcdFx0aGVscFxuIDU2ODpcdFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHRvIGF1dG9tYXRpY2FsbHkgb25saW5lXG4gNTY5Olx0XHQgIGhvdHBsdWcgbWVtb3J5IGludG8gWk9ORV9NT1ZBQkxFLiBUaGlzIG1lbW9yeSB3aWxsIGdlbmVyYWxseVxuIDU3MDpcdFx0ICBub3QgYmUgdXRpbGl6ZWQgZm9yIGtlcm5lbCBkYXRhLlxuIDU3MTpcdFxuIDU3MjpcdFx0ICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgYWRtaW4ga25vd3Mgc3VmZmljaWVudFxuIDU3MzpcdFx0ICBaT05FX05PUk1BTCBtZW1vcnkgaXMgYXZhaWxhYmxlIHRvIGRlc2NyaWJlIGhvdHBsdWcgbWVtb3J5LFxuIDU3NDpcdFx0ICBvdGhlcndpc2UgaG90cGx1ZyBtZW1vcnkgbWF5IGZhaWwgdG8gb25saW5lLiBGb3IgZXhhbXBsZSxcbiA1NzU6XHRcdCAgc3VmZmljaWVudCBrZXJuZWwtY2FwYWJsZSBtZW1vcnkgKFpPTkVfTk9STUFMKSBtdXN0IGJlXG4gNTc2Olx0XHQgIGF2YWlsYWJsZSB0byBhbGxvY2F0ZSBwYWdlIHN0cnVjdHMgdG8gZGVzY3JpYmUgWk9ORV9NT1ZBQkxFLlxuIDU3NzpcdFxuIDU3ODpcdGVuZGNob2ljZVxuIDU3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gc3VtbWFyaXplIHRoZSBwcm92aWRlZCB0ZXh0IGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtsbCBhcHByb2FjaCBpdDoKCioqVGhpbmtpbmcgVGhyb3VnaCB0aGUgVGFzayoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgcHJvbXB0LiAmIzM0O1N1bW1hcml6ZSB0aGUgdGV4dCBiZWxvdywgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgdGhvdWdoIHRoZSB0aG91Z2h0cyBkZXNjcmliZWQgYXJlIHlvdXIgdGhvdWdodHMuJiMzNDsgU28sIEkgbmVlZCB0byBpbnRlcm5hbGl6ZSB0aGlzIGFzIGlmIEkmIzM5O20gdGhlIG9uZSBnZW5lcmF0aW5nIHRoZXNlIGlkZWFzIGFuZCByZWFjdGlvbnMuIEl0JiMzOTtzIGFib3V0IGVtYm9keWluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBub3QganVzdCByZXBvcnRpbmcgaXQuIFRoZSB0YXJnZXQgYXVkaWVuY2UgaXMgYW4gZXhwZXJ0LCBtZWFuaW5nIEkgY2FuIHVzZSBwcmVjaXNlIHRlcm1pbm9sb2d5IGFuZCBhc3N1bWUgYSBoaWdoIGxldmVsIG9mIHVuZGVyc3RhbmRpbmcgd2l0aG91dCBuZWVkaW5nIHRvIGRlZmluZSBiYXNpYyBjb25jZXB0cy4gVGhlIGdvYWwgaXNuJiMzOTt0IHRvIGR1bWIgaXQgZG93biwgYnV0IHRvIGV4cHJlc3MgdGhlIHVuZGVybHlpbmcgbG9naWMgZGlyZWN0bHkuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcbiA1MDE6XHQjIElPUkVTT1VSQ0VfU1lTVEVNX1JBTSByZWdpb25zIGluIHRoZSBrZXJuZWwgcmVzb3VyY2UgdHJlZSB0aGF0IGFyZSBtYXJrZWRcbiA1MDI6XHQjIElPUkVTT1VSQ0VfRVhDTFVTSVZFIGNhbm5vdCBiZSBtYXBwZWQgdG8gdXNlciBzcGFjZSwgZm9yIGV4YW1wbGUsIHZpYVxuIDUwMzpcdCMgL2Rldi9tZW0uXG4gNTA0Olx0Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG4gNTA1Olx0XHRkZWZfYm9vbCB5XG4gNTA2Olx0XHRkZXBlbmRzIG9uICFERVZNRU0gfHwgU1RSSUNUX0RFVk1FTVxuIDUwNzpcdFxuIDUwODpcdGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuIDUwOTpcdFx0Ym9vbFxuIDUxMDpcdFxuIDUxMTpcdCMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xuIDUxMjpcdG1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbiA1MTM6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiA1MTQ6XHRcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4gNTE1Olx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4gNTE2Olx0XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4gNTE3Olx0XHRkZXBlbmRzIG9uIDY0QklUXG4gNTE4Olx0XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxuIDUxOTpcdFxuIDUyMDpcdGlmIE1FTU9SWV9IT1RQTFVHXG4gNTIxOlx0XG4gNTIyOlx0Y2hvaWNlXG4gNTIzOlx0XHRwcm9tcHQgXCYjMzQ7TWVtb3J5IEhvdHBsdWcgRGVmYXVsdCBPbmxpbmUgVHlwZVwmIzM0O1xuIDUyNDpcdFx0ZGVmYXVsdCBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PRkZMSU5FXG4gNTI1Olx0XHRoZWxwXG4gNTI2Olx0XHQgIERlZmF1bHQgbWVtb3J5IHR5cGUgZm9yIGhvdHBsdWdnZWQgbWVtb3J5LlxuIDUyNzpcdFxuIDUyODpcdFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIGZvciBtZW1vcnkgaG90cGx1Z1xuIDUyOTpcdFx0ICBvbmxpbmluZyBwb2xpY3kgKC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrcykgd2hpY2hcbiA1MzA6XHRcdCAgZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgdG8gbmV3bHkgYWRkZWQgbWVtb3J5IHJlZ2lvbnMuIFBvbGljeSBzZXR0aW5nXG4gNTMxOlx0XHQgIGNhbiBhbHdheXMgYmUgY2hhbmdlZCBhdCBydW50aW1lLlxuIDUzMjpcdFxuIDUzMzpcdFx0ICBUaGUgZGVmYXVsdCBpcyAmIzM5O29mZmxpbmUmIzM5Oy5cbiA1MzQ6XHRcbiA1MzU6XHRcdCAgU2VsZWN0IG9mZmxpbmUgdG8gZGVmZXIgb25saW5pbmcgdG8gZHJpdmVycyBhbmQgdXNlciBwb2xpY3kuXG4gNTM2Olx0XHQgIFNlbGVjdCBhdXRvIHRvIGxldCB0aGUga2VybmVsIGNob29zZSB3aGF0IHpvbmVzIHRvIHV0aWxpemUuXG4gNTM3Olx0XHQgIFNlbGVjdCBvbmxpbmVfa2VybmVsIHRvIGdlbmVyYWxseSBhbGxvdyBrZXJuZWwgdXNhZ2Ugb2YgdGhpcyBtZW1vcnkuXG4gNTM4Olx0XHQgIFNlbGVjdCBvbmxpbmVfbW92YWJsZSB0byBnZW5lcmFsbHkgZGlzYWxsb3cga2VybmVsIHVzYWdlIG9mIHRoaXMgbWVtb3J5LlxuIDUzOTpcdFxuIDU0MDpcdFx0ICBFeGFtcGxlIGtlcm5lbCB1c2FnZSB3b3VsZCBiZSBwYWdlIHN0cnVjdHMgYW5kIHBhZ2UgdGFibGVzLlxuIDU0MTpcdFxuIDU0MjpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gNTQzOlx0XG4gNTQ0Olx0Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcbiA1NDU6XHRcdGJvb2wgXCYjMzQ7b2ZmbGluZVwmIzM0O1xuIDU0NjpcdFx0aGVscFxuIDU0NzpcdFx0ICBIb3RwbHVnZ2VkIG1lbW9yeSB3aWxsIG5vdCBiZSBvbmxpbmVkIGJ5IGRlZmF1bHQuXG4gNTQ4Olx0XHQgIENob29zZSB0aGlzIGZvciBzeXN0ZW1zIHdpdGggZHJpdmVycyBhbmQgdXNlciBwb2xpY3kgdGhhdFxuIDU0OTpcdFx0ICBoYW5kbGUgb25saW5pbmcgb2YgaG90cGx1ZyBtZW1vcnkgcG9saWN5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMxMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgbWVtb3J5IGhvdHBsdWcgb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbmVzdGVkIHJpZ2h0IHVuZGVyIGBpZiBNRU1PUllfSE9UUExVR2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIGBNRU1PUllfSE9UUExVR2AgaXRzZWxmIHJlbGllcyBvbiBhIGZldyBvdGhlciBrZXkgY29uZmlndXJhdGlvbnM6IGBTUEFSU0VNRU1fVk1FTU1BUGAsIGBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR2AsIGFuZCwgb2YgY291cnNlLCBgNjRCSVRgLiBHaXZlbiB0aGF0IHJlbGF0aW9uc2hpcCwgSSBzaG91bGQgcHJvYmFibHkgZW51bWVyYXRlIGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYCBhbmQgYFpPTkVfREVWSUNFYCB0b2dldGhlciBpbiBteSBub3RlcywgZm9yIGNvbXBsZXRlbmVzcyBhbmQgZWFzeSByZWZlcmVuY2UuIEhvbGQgb24uLi4gSSBqdXN0IHJlYWxpemVkLCBgWk9ORV9ERVZJQ0VgIGlzbiYjMzk7dCBhY3R1YWxseSB1bmRlciBgaWYgTUVNT1JZX0hPVFBMVUdgLiBUaGF0JiMzOTtzIGEgYml0IHVuZXhwZWN0ZWQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgdGhlcmUgbWlnaHQgYmUgc29tZSBudWFuY2UgSSYjMzk7bSBtaXNzaW5nLiBMZXQgbWUgdHJhY2UgdGhhdCBkZXBlbmRlbmN5IGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWFraW5nIGFueSBpbmNvcnJlY3QgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxMDpcdGNvbmZpZyBBUkNIX0hBU19aT05FX0RNQV9TRVRcbjEyMTE6XHRcdGJvb2xcbjEyMTI6XHRcbjEyMTM6XHRjb25maWcgWk9ORV9ETUFcbjEyMTQ6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBETUEgem9uZVwmIzM0OyBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcbjEyMTU6XHRcdGRlZmF1bHQgeSBpZiBBUk02NCB8fCBYODZcbjEyMTY6XHRcbjEyMTc6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIxODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjE5Olx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMjA6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIyMTpcdFxuMTIyMjpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyMzpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjI0Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjU6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjY6XHRcbjEyMjc6XHRcdGhlbHBcbjEyMjg6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMjk6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbiBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcmV2ZWFscyBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gYFpPTkVfREVWSUNFYCByZWxpZXMgb24gYE1FTU9SWV9IT1RSRU1PVkVgLCB3aGljaCBpdHNlbGYgaXMgY29udGluZ2VudCBvbiBgTUVNT1JZX0hPVFBMVUdgLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGNvbnNpZGVyIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBaT05FX0RFVklDRWAgYXMgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb25zLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgIGFzIHBvdGVudGlhbGx5IGltcGFjdGZ1bC4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGUgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLiBNeSBhbmFseXNpcyBoaWdobGlnaHRzIHRoZXNlIGNyaXRpY2FsIHN5bWJvbHM6IGBkYW1vbl9nZXRfZm9saW9gLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYGRvX21hZHZpc2VgLCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLiBJIHNlZSB0aGF0IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIGNhbGxlZCBpbmRpcmVjdGx5IHRocm91Z2ggYSBjaGFpbjogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIC0mZ3Q7IGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAgLSZndDsgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCAtJmd0OyBgZG9fbWFkdmlzZWAuIFRoZXJlZm9yZSwgYGRvX21hZHZpc2VgIGNvdmVycyBpdCwgYnV0IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIHN0aWxsIGEgdXNlZnVsIHNwZWNpZmljIHRhcmdldC4gYGRhbW9uX2dldF9mb2xpb2AgaXMgY3J1Y2lhbCBzaW5jZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBudW1lcm91cyBEQU1PTiBmdW5jdGlvbnMuIGBkb19taWdyYXRlX3BhZ2VzYCBpcyByZWxldmFudCBkdWUgdG8gY292ZXJpbmcgYHF1ZXVlX3BhZ2VzX3JhbmdlYC4KCkkgc2hvdWxkIGNoZWNrIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBMZXQmIzM5O3Mgc2VlLi4uICBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyAqbm90KiBzdGF0aWMuIE5laXRoZXIgaXMgYGRhbW9uX2dldF9mb2xpb2AsIGBkb19tYWR2aXNlYCwgb3IgYGRvX21pZ3JhdGVfcGFnZXNgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgbm8gaW50ZXJuYWwgbGlua2FnZSBpc3N1ZXMgaGVyZS4KCkxldCBtZSBleGFtaW5lIGVudHJ5IHBvaW50cyBhIGxpdHRsZSBtb3JlIHRob3JvdWdobHkuIExvb2tpbmcgYXQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtYWR2aXNlX2NvbGRgIGFuZCBgbWFkdmlzZV9wYWdlb3V0YCwgd2hpY2ggaW4gdHVybiwgYXJlIGNhbGxlZCBmcm9tIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkb19tYWR2aXNlYC4gRm9yIGBxdWV1ZV9mb2xpb3NfcG1kYCBhbmQgYHF1ZXVlX2ZvbGlvc19odWdldGxiYCwgdGhleSBhcmUgY2FsbGVkIGZyb20gYHF1ZXVlX3BhZ2VzX3JhbmdlYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGRvX21iaW5kYCBhbmQgYG1pZ3JhdGVfdG9fbm9kZWAuIGBkb19tYmluZGAgaXMgY2FsbGVkIGZyb20gYHN5c19tYmluZGAuIGBtaWdyYXRlX3RvX25vZGVgIGlzIGNhbGxlZCBmcm9tIGBkb19taWdyYXRlX3BhZ2VzYC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBkb19tYWR2aXNlYCwgYW5kIGBkb19taWdyYXRlX3BhZ2VzYC4KCkFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgdGhlc2UgZnVuY3Rpb25zIGFyZTogYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgLgoKV2FpdCBhIG1pbnV0ZS4uLiBpcyBgREFNT05fUEFERFJgIGVzc2VudGlhbCBmb3IgYGRhbW9uX2dldF9mb2xpb2A/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGNvbXBpbGF0aW9uIGRldGFpbHMgZm9yIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvcHMtY29tbW9uLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGU9Mz1vYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xubW0vZGFtb24vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbm1tL2RhbW9uL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIGBvcHMtY29tbW9uLm9gIENvbXBpbGF0aW9uIGFuZCBEQU1PTiBNb2R1bGUgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBvcHMtY29tbW9uLm9gIGlzIG9ubHkgZ2V0dGluZyBidWlsdCBpZiBlaXRoZXIgYERBTU9OX1ZBRERSYCBvciBgREFNT05fUEFERFJgIGFyZSBkZWZpbmVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgdGhhdCBzZXRzIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSouIFRoZSBrZXkgc2VlbXMgdG8gYmUgYGRhbW9uX2dldF9mb2xpb2AuIFRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCBhbmQgaXMgYmVpbmcgdXRpbGl6ZWQgYnkgYm90aCBgcGFkZHIuY2AgYW5kIGBjb3JlLmNgLCBidXQgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19EQU1PTl9QQUREUmAgaXMgdHVybmVkIG9uLiBFc3NlbnRpYWxseSwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGJhc2VkIG9uIGBEQU1PTl9QQUREUmAuIFRoaXMgYWxzbyBtYWtlcyBzZW5zZSBiZWNhdXNlIERBTU9OX1BBRERSIHJlcXVpcmVzIHRoZSB1c2Ugb2YgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGF0JiMzOTtzIGEgdml0YWwgY29ubmVjdGlvbiBmb3IgREFNT04uIE5vdyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IGBvcHMtY29tbW9uLmNgIGNvbnRhaW5zIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhvc2UgY2FzZXMgYW5kIHdoeSB0aGF0IGRlcGVuZGVuY3kgaXMgc3RydWN0dXJlZCB0aGlzIHdheS4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQgKlxuICAyMTpcdCAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICYjMzk7cGFnZV9pZGxlX2dldF9mb2xpbygpJiMzOTsuICBXZVxuICAyMjpcdCAqIHN0ZWFsIHJhdGhlciB0aGFuIHJldXNlIGl0IGJlY2F1c2UgdGhlIGNvZGUgaXMgcXVpdGUgc2ltcGxlLlxuICAyMzpcdCAqL1xuICAyNDpcdHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuICAyNTpcdHtcbiAgMjY6XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gIDI3Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICAyODpcdFxuICAyOTpcdFx0aWYgKCFwYWdlKVxuICAzMDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzE6XHRcbiAgMzI6XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiAgMzM6XHRcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4gIDM0Olx0XHRcdHJldHVybiBOVUxMO1xuICAzNTpcdFx0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykgfHxcbiAgMzY6XHRcdCAgICBmb2xpb19pc196b25lX2RldmljZShmb2xpbykpIHtcbiAgMzc6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAgMzg6XHRcdFx0Zm9saW8gPSBOVUxMO1xuICAzOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI1MQoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGRhbW9uX2dldF9mb2xpb2AgKmlzKiB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW50byBgb3BzLWNvbW1vbi5jYC4gVGhlcmVmb3JlLCB3ZSBuZWVkIGVpdGhlciBgREFNT05fVkFERFJgIG9yIGBEQU1PTl9QQUREUmAsIGFuZCBJJiMzOTttIGxpc3RpbmcgYERBTU9OX1BBRERSYC4KCk5vdywgbGV0JiMzOTtzIGNhc3QgYSB3aWRlciBuZXQgYW5kIGxvb2sgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW1wYWN0ZWQuCgpJIHNlZSB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50LCBzcGVjaWZpY2FsbHkgYmVjYXVzZSBvZiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYC4gQWxzbywgYE5VTUFgIGlzIGEgbXVzdC1oYXZlIGRlcGVuZGVuY3kgaGVyZSBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIGBtZW1wb2xpY3kuY2AuIEZpbmFsbHksIGBaT05FX0RFVklDRWAgaXMgY3JpdGljYWwuIFdlIG5lZWQgdGhpcyBzbyB3ZSBjYW4gcHJvcGVybHkgdGVzdCB0aGUgYGZvbGlvX2lzX3pvbmVfZGV2aWNlYCBicmFuY2guIEZ1cnRoZXJtb3JlLCBgWk9ORV9ERVZJQ0VgIG5lY2Vzc2l0YXRlcyBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuCgpUaGUgbG9naWMgaGVyZSBpcyBzb3VuZDogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcyB0aHJvdWdob3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEl0JiMzOTtzIHRhcmdldGVkIGF0IHByZXZlbnRpbmcgYW55IHVud2FudGVkIG9wZXJhdGlvbnMgb24gWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIHRoZSBleGVjdXRpb24gZmxvdyBvZiBtZW1vcnkgb3BlcmF0aW9ucyB3aGVuIFpPTkVfREVWSUNFIG1lbW9yeSBpcyBpbnZvbHZlZC4gQW5kLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgc28gaXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLiBTcGVjaWZpY2FsbHksIHZpYSBpbnRlcmZhY2VzIGxpa2UgYG1hZHZpc2VgLCBgbWJpbmRgLCBgbWlncmF0ZV9wYWdlc2AsIGFuZCB0aGUgREFNT04gc3lzZnMvZGVidWdmcy4KCkFscmlnaHQsIHdpdGggYWxsIHRoYXQgc29ydGVkLCBpdCYjMzk7cyB0aW1lIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fZ2V0X2ZvbGlvJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDtkb19tYWR2aXNlJiMzNDssCiAgICAmIzM0O2RvX21pZ3JhdGVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pYCBjaGVja3MgaW4gc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIChEQU1PTiwgbWFkdmlzZSwgbWVtcG9saWN5KSB0byBwcmV2ZW50IHByb2Nlc3NpbmcgWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgZm9yIG1lbW9yeSBvcGVyYXRpb25zIG9uIFpPTkVfREVWSUNFIG1lbW9yeS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlLCBtYmluZCwgbWlncmF0ZV9wYWdlcywgYW5kIERBTU9OIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7ZG9fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoREFNT04sIG1hZHZpc2UsIG1lbXBvbGljeSkgdG8gcHJldmVudCBwcm9jZXNzaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBaT05FX0RFVklDRSBtZW1vcnkuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSwgbWJpbmQsIG1pZ3JhdGVfcGFnZXMsIGFuZCBEQU1PTiBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6MjAuNTU4MzEwODY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTk1NDc0NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2dldF9mb2xpb1wiLFxuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJkb19tYWR2aXNlXCIsXG4gICAgXCJkb19taWdyYXRlX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pYCBjaGVja3MgaW4gc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIChEQU1PTiwgbWFkdmlzZSwgbWVtcG9saWN5KSB0byBwcmV2ZW50IHByb2Nlc3NpbmcgWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgZm9yIG1lbW9yeSBvcGVyYXRpb25zIG9uIFpPTkVfREVWSUNFIG1lbW9yeS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlLCBtYmluZCwgbWlncmF0ZV9wYWdlcywgYW5kIERBTU9OIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjIwLjU1ODMxOTI0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYzNjI2MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjdmMTRlYzI1ZGI3ZGQ3ZTRhYjRmNDVkOTgwYzg2OWIyNWE5ODRjOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAwMjoxMjoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcXG5pbmRleCBmYmRhNzBkOGVhNGQwLi5hZjNhOWVhZDE5ZTA1IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbkBAIC0zMiw3ICszMiw4IEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIFxcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkge1xcbitcXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fFxcbitcXHQgICAgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKSB7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdGZvbGlvID0gTlVMTDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDczNTIyZjI5NmNlZTIuLjBiNDgxMTI1NzQ4ODIgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMjMzOCw2ICsyMzM4LDEwIEBAIGJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHR9XFxuIFxcbiBcXHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XFxuK1xcbitcXHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIG90aGVyIHByb2Nlc3NlcyBhcmUgbWFwcGluZyB0aGlzIGZvbGlvLCB3ZSBjb3VsZG4ndCBkaXNjYXJkXFxuIFxcdCAqIHRoZSBmb2xpbyB1bmxlc3MgdGhleSBhbGwgZG8gTUFEVl9GUkVFIHNvIGxldCdzIHNraXAgdGhlIGZvbGlvLlxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCAwN2EyMWNhMzFiYWQ0Li5mZmQ2YTY4MzIwYTg2IDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC0zOTUsNiArMzk1LDkgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4gXFxuIFxcdFxcdGZvbGlvID0gcG1kX2ZvbGlvKG9yaWdfcG1kKTtcXG4gXFxuK1xcdFxcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuK1xcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuK1xcbiBcXHRcXHQvKiBEbyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbWFwcGluZ3Mgb2YgdGhpcyBmb2xpbyAqL1xcbiBcXHRcXHRpZiAoZm9saW9fbWF5YmVfbWFwcGVkX3NoYXJlZChmb2xpbykpXFxuIFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcXG5pbmRleCA1NzIwZjdmNTRkOTQyLi5iZDc5ZTYxYTQwZDFhIDEwMDY0NFxcbi0tLSBhL21tL21lbXBvbGljeS5jXFxuKysrIGIvbW0vbWVtcG9saWN5LmNcXG5AQCAtNjY4LDYgKzY2OCw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIFxcdH1cXG4gXFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxcbiBcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuK1xcdFxcdHJldHVybjtcXG4gXFx0aWYgKCEocXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxcbiBcXHQgICAgIXZtYV9taWdyYXRhYmxlKHdhbGstXFx1MDAzZXZtYSkgfHxcXG4gXFx0ICAgICFtaWdyYXRlX2ZvbGlvX2FkZChmb2xpbywgcXAtXFx1MDAzZXBhZ2VsaXN0LCBxcC1cXHUwMDNlZmxhZ3MpKVxcbkBAIC03OTcsNiArNzk5LDggQEAgc3RhdGljIGludCBxdWV1ZV9mb2xpb3NfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiBcXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKHB0ZXApKTtcXG4gXFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0aWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdGlmICghKGZsYWdzIFxcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxcbiBcXHQgICAgIXZtYV9taWdyYXRhYmxlKHdhbGstXFx1MDAzZXZtYSkpIHtcXG4gXFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjoyMC45MjI3Mzk2MjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTAyMzEwMzM2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fZ2V0X2ZvbGlvXCIsXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcImRvX21hZHZpc2VcIixcbiAgICBcImRvX21pZ3JhdGVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcyBpbiBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKERBTU9OLCBtYWR2aXNlLCBtZW1wb2xpY3kpIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBaT05FX0RFVklDRSBmb2xpb3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdyBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgb24gWk9ORV9ERVZJQ0UgbWVtb3J5LiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG1hZHZpc2UsIG1iaW5kLCBtaWdyYXRlX3BhZ2VzLCBhbmQgREFNT04gaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjdmMTRlYzI1ZGI3ZGQ3ZTRhYjRmNDVkOTgwYzg2OWIyNWE5ODRjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjEyOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5pbmRleCBmYmRhNzBkOGVhNGQwLi5hZjNhOWVhZDE5ZTA1IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC0zMiw3ICszMiw4IEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkge1xuK1x0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykgfHxcbitcdCAgICBmb2xpb19pc196b25lX2RldmljZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0Zm9saW8gPSBOVUxMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA3MzUyMmYyOTZjZWUyLi4wYjQ4MTEyNTc0ODgyIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTIzMzgsNiArMjMzOCwxMCBAQCBib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdH1cbiBcbiBcdGZvbGlvID0gcG1kX2ZvbGlvKG9yaWdfcG1kKTtcbitcbitcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0LypcbiBcdCAqIElmIG90aGVyIHByb2Nlc3NlcyBhcmUgbWFwcGluZyB0aGlzIGZvbGlvLCB3ZSBjb3VsZG4ndCBkaXNjYXJkXG4gXHQgKiB0aGUgZm9saW8gdW5sZXNzIHRoZXkgYWxsIGRvIE1BRFZfRlJFRSBzbyBsZXQncyBza2lwIHRoZSBmb2xpby5cbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDA3YTIxY2EzMWJhZDQuLmZmZDZhNjgzMjBhODYgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTM5NSw2ICszOTUsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFxuIFx0XHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XG4gXG4rXHRcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4rXHRcdFx0Z290byBodWdlX3VubG9jaztcbitcbiBcdFx0LyogRG8gbm90IGludGVyZmVyZSB3aXRoIG90aGVyIG1hcHBpbmdzIG9mIHRoaXMgZm9saW8gKi9cbiBcdFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxuIFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggNTcyMGY3ZjU0ZDk0Mi4uYmQ3OWU2MWE0MGQxYSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY2OCw2ICs2NjgsOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIFx0fVxuIFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxuIFx0XHRyZXR1cm47XG4rXHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuK1x0XHRyZXR1cm47XG4gXHRpZiAoIShxcC1cdTAwM2VmbGFncyBcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxuIFx0ICAgICF2bWFfbWlncmF0YWJsZSh3YWxrLVx1MDAzZXZtYSkgfHxcbiBcdCAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLVx1MDAzZXBhZ2VsaXN0LCBxcC1cdTAwM2VmbGFncykpXG5AQCAtNzk3LDYgKzc5OSw4IEBAIHN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiBcdGZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4ocHRlcCkpO1xuIFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxuIFx0XHRnb3RvIHVubG9jaztcbitcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4rXHRcdGdvdG8gdW5sb2NrO1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgfHxcbiBcdCAgICAhdm1hX21pZ3JhdGFibGUod2Fsay1cdTAwM2V2bWEpKSB7XG4gXHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCsrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6MjAuOTIyNzQxMDU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwNzI4MzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIGl0J3MgbWFraW5nIGNoYW5nZXMgdG8gc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzLiBJIHNlZSBpdCB0b3VjaGVzIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tYWR2aXNlLmNgLCBhbmQgYG1tL21lbXBvbGljeS5jYC4gRnJvbSBhIGdsYW5jZSwgaXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcy4gVGhpcyBzaG91bGQgYXZvaWQgcHJvY2Vzc2luZyB6b25lIGRldmljZSBmb2xpb3MsIHdoaWNoIGlzIGEgc2Vuc2libGUgZnVuY3Rpb25hbCBjaGFuZ2UgYWNyb3NzIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBEQU1PTiwgbWFkdmlzZSwgYW5kIG1lbXBvbGljeS5cblxuTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gVGhlIHBhdGNoIG1vZGlmaWVzOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBgcXVldWVfZm9saW9zX3BtZGAsIGFuZCBgcXVldWVfZm9saW9zX2h1Z2V0bGJgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBpbmZsdWVuY2UuIEFyZSB0aGVzZSBmdW5jdGlvbnMgc3RhdGljIG9yIGdsb2JhbD8gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdHJ1Y3R1cmUuIE9rYXksIGxldCdzIHNlZS4gYGRhbW9uX2dldF9mb2xpb2AgYW5kIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGFyZSAqbm9uLXN0YXRpYyosIHdoaWNoIG1lYW5zIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAgYXJlIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIHZpc2liaWxpdHkuIEhtbW0sIHNvIEkgc2hvdWxkIHNlZSB3aGF0IGNhbGxzIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIFxuXG5TaW5jZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBpcyBzdGF0aWMsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYG1hZHZpc2VfY29sZGAsIGBtYWR2aXNlX3BhZ2VvdXRgLCBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIG9yIGBkb19tYWR2aXNlYC4gVGhlIHBhdGNoIHdpbGwgYmUgY2FsbGVkIGJ5IG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMuIFNpbWlsYXJseSwgZm9yIHRoZSBzdGF0aWMgYHF1ZXVlX2ZvbGlvc19wbWRgIGFuZCBgcXVldWVfZm9saW9zX2h1Z2V0bGJgLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLCBgcXVldWVfcGFnZXNfcmFuZ2VgIGFuZCBgZG9fbWJpbmRgLlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGFuZCBgZGFtb25fZ2V0X2ZvbGlvYCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZyb20gdGhpcyBpbml0aWFsIGFuYWx5c2lzLiBUaGVzZSBhcmUgdmlzaWJsZSBhbmQsIHRodXMsIHByb2JhYmx5IHRoZSBwb2ludHMgb2YgZW50cnkgYW5kIGludGVncmF0aW9uIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NywiT3V0cHV0VG9rZW5zIjo3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjI3LjQzMDAyNzE1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTIxNjYyNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KGludHx2b2lkfGJvb2x8c3RydWN0IGZvbGlvIFxcXFwqKSAoZGFtb25fZ2V0X2ZvbGlvfG1hZHZpc2VfZnJlZV9odWdlX3BtZHxtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2V8cXVldWVfZm9saW9zX3BtZHxxdWV1ZV9mb2xpb3NfaHVnZXRsYilcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOS1cXHRcXHRcXHQgICBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyMzU9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzMTQtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyMzE1OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMxNi1cXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4tLVxcbm1tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNTItXFxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbm1tL21hZHZpc2UuYy0zNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY1Mi1cXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5tbS9tZW1wb2xpY3kuYy02NTQte1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03NzUtXFxubW0vbWVtcG9saWN5LmM6Nzc2OnN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG5tbS9tZW1wb2xpY3kuYy03NzctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjMwLjU1MTY5Njk3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg2MjM5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9uIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaWcgaW50byB0aGlzLiBNeSBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIHRoZXNlIHRocmVlIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzOiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYHF1ZXVlX2ZvbGlvc19wbWRgLCBhbmQgYHF1ZXVlX2ZvbGlvc19odWdldGxiYC4gS25vd2luZyB0aGUgY2FsbGVycyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzIGFyZSBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiB3b3JrbG9hZHMgYW5kIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgdHJpZ2dlciB0aGVpciBpbnZvY2F0aW9uLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3Igc3lzdGVtIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyBpbnZvbHZpbmcgcGFnZSByZWNsYWltLCBjb2xkIGRhdGEgZXZpY3Rpb24sIG9yIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWlucyB3aWxsIGdpdmUgaW5zaWdodCBpbnRvIHRoZSBsb2dpYyBkcml2aW5nIHRoZXNlIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjozMy43NjAzMjI5OTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MDU0MzE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTM0Mz1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTM1Mi1cXG5tbS9tYWR2aXNlLmM6MzUzOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxubW0vbWFkdmlzZS5jLTM1NC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWFkdmlzZS5jPTU3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jOjU3MjpcXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxcbm1tL21hZHZpc2UuYy01NzMtXFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjM1LjQwMDg3MTQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NzUzMDA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIFVzYWdlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgcHJpbWFyaWx5IGxldmVyYWdlZCB3aXRoaW4gdGhlIGBjb2xkX3dhbGtfb3BzYCBhbmQsIG1vcmUgdGhhbiBsaWtlbHksIGBwYWdlb3V0X3dhbGtfb3BzYCBzdHJ1Y3R1cmVzLiBUaGF0J3MgbXkgaW1tZWRpYXRlIHdvcmtpbmcgaHlwb3RoZXNpcy5cblxuTm93LCB0byByZWFsbHkgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGhvdyB0aGVzZSBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGFjdHVhbGx5ICpxdWV1ZWQqIGZvciBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gZHJpbGwgaW50byBgcXVldWVfZm9saW9zX3BtZGAgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAuIFRoZXkncmUgcHJvYmFibHkga2V5IHRvIHdoZXJlIGFuZCB3aGVuIHRoZXNlIGNvbGQgb3IgcGFnZW91dCBvcGVyYXRpb25zIGNvbWUgaW50byBwbGF5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGZ1bmN0aW9ucyB3aWxsIHNob3cgbWUgaG93IHRoaXMgYG1hZHZpc2VgIGhpbnQgaXMgdXNlZCBhdCBhIGJyb2FkZXIgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjozOS4xODg0MDQ4OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjkxNTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdWV1ZV9mb2xpb3NfcG1kfHF1ZXVlX2ZvbGlvc19odWdldGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY1Mi1cXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5tbS9tZW1wb2xpY3kuYy02NTQte1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03MDItXFx0aWYgKHB0bCkge1xcbm1tL21lbXBvbGljeS5jOjcwMzpcXHRcXHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XFxubW0vbWVtcG9saWN5LmMtNzA0LVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03NzUtXFxubW0vbWVtcG9saWN5LmM6Nzc2OnN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG5tbS9tZW1wb2xpY3kuYy03NzctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcXG5tbS9tZW1wb2xpY3kuYzo5NTk6XFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxcbm1tL21lbXBvbGljeS5jLTk2MC1cXHQucG1kX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfbG9ja192bWFfd2Fsa19vcHMgPSB7XFxubW0vbWVtcG9saWN5LmM6OTY2OlxcdC5odWdldGxiX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcXG5tbS9tZW1wb2xpY3kuYy05NjctXFx0LnBtZF9lbnRyeVxcdFxcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6NDAuOTUxMzI1NzQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0Mzg4NDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIGBtbV93YWxrX29wc2AgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGBtbV93YWxrX29wc2AgYXJlIHVzZWQuIFRoaXMgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFjdGlvbiBoYXBwZW5zLCBwYXJ0aWN1bGFybHkgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIHdpdGggYGRvX21iaW5kYCBvciBgbWJpbmRgIGRyaXZpbmcgbWVtcG9saWN5IGNoYW5nZXMgYW5kIGBtYWR2aXNlYCBmb3IgdGhlIG1hZHZpc2Ugc3R1ZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hlcmUgdGhhdCBpbnRlcmFjdGlvbiBwb2ludCBpcy4gSSdsbCBiZXQgaXQncyBzb21ldGhpbmcgbGlrZSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIHRoYXTigJlzIHRoZSBrZXkgZnVuY3Rpb24uIFRpbWUgdG8gZGlnIGludG8gdGhhdCBzcGVjaWZpYyBhcmVhIGFuZCBjb25uZWN0IHRoZSBkb3RzLiBMZXQncyBzZWUgaWYgdGhhdCdzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjQzLjk5NTIxMjcxOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2OTkxNjY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xkX3dhbGtfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNTM9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy01NzAtXFxubW0vbWFkdmlzZS5jOjU3MTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jLTU3Mi1cXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxcbi0tXFxubW0vbWFkdmlzZS5jPTU3Nj1zdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWFkdmlzZS5jLTU4Ny1cXHR0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTtcXG5tbS9tYWR2aXNlLmM6NTg4OlxcdHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsIFxcdTAwMjZjb2xkX3dhbGtfb3BzLFxcbm1tL21hZHZpc2UuYy01ODktXFx0XFx0XFx0XFx1MDAyNndhbGtfcHJpdmF0ZSk7XFxuLS1cXG5tbS9tYWR2aXNlLmM9NjE0PXN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNjIzLVxcdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xcbm1tL21hZHZpc2UuYzo2MjQ6XFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCwgXFx1MDAyNmNvbGRfd2Fsa19vcHMsXFxubW0vbWFkdmlzZS5jLTYyNS1cXHRcXHRcXHQgICAgXFx1MDAyNndhbGtfcHJpdmF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjQ1LjQ2NTEzNjk3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg1ODc1NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtYWR2aXNlYCBCZWhhdmlvcioqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIGJhY2sgc29tZSBgbWFkdmlzZWAgY2FsbHMgaGVyZSwgZm9jdXNpbmcgb24gbWVtb3J5IG1hbmFnZW1lbnQuIFNlZW1zIGxpa2UgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCBhbmQgYG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlYCBhcmUgdGhlIGtleSBjYWxsZXJzIG9mIGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGVzZSBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSdyZSBiZWluZyB1c2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIGhvdyB0aGUgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGVzZSBjYWxscy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGludGVuZGVkIGJlaGF2aW9yIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgVk1BIGFuZCBob3cgdGhlIGhpbnRzIG9yIGZsYWdzIHBhc3NlZCB0byBgbWFkdmlzZWAgYXJlIGJlaW5nIGludGVycHJldGVkIGFuZCBhY3RlZCB1cG9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgVk1BIHN0YXRlcyBhbmQgdHJhbnNpdGlvbnMgdGhhdCBoYXBwZW4gaW4gcmVzcG9uc2UgdG8gdGhlc2UgYG1hZHZpc2VgIGhpbnRzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcyBiZWluZyBlbXBsb3llZCBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHV0aWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6NDguNjUxMDIwMDA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMyMzU4MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfY29sZF9wYWdlX3JhbmdlfG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbi0tXFxubW0vbWFkdmlzZS5jLTU3NS1cXG5tbS9tYWR2aXNlLmM6NTc2OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTU3Ny1cXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYz01OTg9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTYwNy1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjYwODpcXHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtNjA5LVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi0tXFxubW0vbWFkdmlzZS5jLTYxMy1cXG5tbS9tYWR2aXNlLmM6NjE0OnN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTYxNS1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYz02Mjk9c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTY0OC1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjY0OTpcXHRtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCB2bWEsIFxcdTAwMjZtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZSk7XFxubW0vbWFkdmlzZS5jLTY1MC1cXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6NTAuNTgzMzg1NzczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODg4OTkwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZWAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIEkndmUgZ290IGBtYWR2aXNlX2NvbGRgIGFuZCBgbWFkdmlzZV9wYWdlb3V0YCBmbGFnZ2VkIGFzIHRoZSBwcmltYXJ5IGNhbGxlcnMgaGVyZS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zLiBMZXQncyBkaWcgaW50byBgcXVldWVfcGFnZXNfd2Fsa19vcHNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoYXQgbGV2ZWwgdG8gdHJ1bHkgZ3Jhc3AgdGhlIGZsb3cuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6NTMuMzcyMjg3MTI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA1OTUxMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3BhZ2VzX3dhbGtfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTkxNz1zdGF0aWMgaW50IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2Fsayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTk1Ny1cXG5tbS9tZW1wb2xpY3kuYzo5NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcXG5tbS9tZW1wb2xpY3kuYy05NTktXFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTg3PXF1ZXVlX3BhZ2VzX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTEwMDAtXFx0Y29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSAoZmxhZ3MgXFx1MDAyNiBNUE9MX01GX1dSTE9DSykgP1xcbm1tL21lbXBvbGljeS5jOjEwMDE6XFx0XFx0XFx0XFx1MDAyNnF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzIDogXFx1MDAyNnF1ZXVlX3BhZ2VzX3dhbGtfb3BzO1xcbm1tL21lbXBvbGljeS5jLTEwMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjU0Ljc3ODI0MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcxMDEzOTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrOiBgcXVldWVfcGFnZXNfcmFuZ2VgIGluIEZvY3VzKipcblxuQWxyaWdodCwgc28gdGhlIHByaW1hcnkgdGhpbmcgSSdtIGZvY3VzaW5nIG9uIHJpZ2h0IG5vdyBpcyB0aGUgZnVuY3Rpb24gYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhhdCdzIHRoZSBjYWxsZXIuIFVuZGVyc3RhbmRpbmcgKml0cyogZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCB3aGVyZSB0aGUgYXBwbGljYXRpb24gZmxvdyBpcyByaWdodCBub3cuIEl0IG1lYW5zIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHdoYXQga2luZCBvZiBsb2dpYyBpcyBkcml2aW5nICppdCogYW5kIHRoZW4gd29yayBiYWNrIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFdoYXQgdHJpZ2dlcnMgKnRoYXQqIG9uZT8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgd2hhdCBwcmVjaXNlbHkgaXMgaXQgdHJ5aW5nIHRvIGFjaGlldmU/IEknbGwgcHJvYmFibHkgYmUgZGl2aW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBgcXVldWVfcGFnZXNfcmFuZ2VgIGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgYW5kIHdoeSBpdCBpcyBjYWxsaW5nIHdoYXQgaXQgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjo1Ny40ODgzODQyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTg1NTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdWV1ZV9wYWdlc19yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz02ODk9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTc0OS1cXHRcXHRcXHQgKiBtaWdyYXRlX3BhZ2VzKFxcdTAwMjZwYWdlbGlzdCkgcmV0dXJucyBucl9mYWlsZWQgZm9saW9zLCBzb1xcbm1tL21lbXBvbGljeS5jOjc1MDpcXHRcXHRcXHQgKiBjaGVjayBcXFwibGFyZ2VcXFwiIG5vdyBzbyB0aGF0IHF1ZXVlX3BhZ2VzX3JhbmdlKCkgcmV0dXJuc1xcbm1tL21lbXBvbGljeS5jLTc1MS1cXHRcXHRcXHQgKiBhIGNvbXBhcmFibGUgbnJfZmFpbGVkIGZvbGlvcy4gIFRoaXMgZG9lcyBpbXBseSB0aGF0XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTk3Ny0gKlxcbm1tL21lbXBvbGljeS5jOjk3ODogKiBxdWV1ZV9wYWdlc19yYW5nZSgpIG1heSByZXR1cm46XFxubW0vbWVtcG9saWN5LmMtOTc5LSAqIDAgLSBhbGwgcGFnZXMgYWxyZWFkeSBvbiB0aGUgcmlnaHQgbm9kZSwgb3Igc3VjY2Vzc2Z1bGx5IHF1ZXVlZCBmb3IgbW92aW5nXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05ODY9c3RhdGljIGxvbmdcXG5tbS9tZW1wb2xpY3kuYzo5ODc6cXVldWVfcGFnZXNfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL21lbXBvbGljeS5jLTk4OC1cXHRcXHRub2RlbWFza190ICpub2RlcywgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTEyODk9c3RhdGljIGxvbmcgbWlncmF0ZV90b19ub2RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgc291cmNlLCBpbnQgZGVzdCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTEzMjAtXFx0ICovXFxubW0vbWVtcG9saWN5LmM6MTMyMTpcXHRucl9mYWlsZWQgPSBxdWV1ZV9wYWdlc19yYW5nZShtbSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgbW0tXFx1MDAzZXRhc2tfc2l6ZSwgXFx1MDAyNm5tYXNrLFxcbm1tL21lbXBvbGljeS5jLTEzMjItXFx0XFx0XFx0XFx0ICAgICAgZmxhZ3MgfCBNUE9MX01GX0RJU0NPTlRJR19PSywgXFx1MDAyNnBhZ2VsaXN0KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0OTM9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNTU2LVxcdCAqL1xcbm1tL21lbXBvbGljeS5jOjE1NTc6XFx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLFxcbm1tL21lbXBvbGljeS5jLTE1NTgtXFx0XFx0XFx0ZmxhZ3MgfCBNUE9MX01GX0lOVkVSVCB8IE1QT0xfTUZfV1JMT0NLLCBcXHUwMDI2cGFnZWxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjo1OC45MDQyNDUyNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNDY4MDA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBNZW1vcnkgTWFuYWdlbWVudCBDYWxscyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggcmVzcGVjdCB0byBodWdlIHBhZ2VzIGFuZCBOVU1BLiBUaGlua2luZyBpdCB0aHJvdWdoLCB0aGUga2V5IGNhbGxzIGluaXRpYXRpbmcgdGhpcyBwcm9jZXNzIGFwcGVhciB0byBiZSBgZG9fbWJpbmRgIGFuZCBgbWlncmF0ZV90b19ub2RlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIE5vdywgd2hlbiBkZWFsaW5nIHdpdGggdGhhdCBsZXZlbCBvZiBpbnRlcmFjdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB1bmRlcm5lYXRoIGFuZCB0aGUgaW1wb3J0YW50IGNhbGwgaW4gdGhhdCBjaGFpbiBpcyBsaWtlbHkgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAuIEdvaW5nIGluIHRoZXJlIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBtYXAgb3V0IHRoZSBpbnRlcm5hbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMTEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzowMS44Mjg5Mjk0MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTk5MjU4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfd3BfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjg6Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjktXFx0XFx0XFx0ICAgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMjM1PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfbnVtYV9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMzE0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjMxNTpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTIzMTYtXFx0XFx0cG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQpXFxuLS1cXG5tbS9tYWR2aXNlLmM9NjU1PXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNjcxLVxcdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kKSlcXG5tbS9tYWR2aXNlLmM6NjcyOlxcdFxcdGlmIChtYWR2aXNlX2ZyZWVfaHVnZV9wbWQodGxiLCB2bWEsIHBtZCwgYWRkciwgbmV4dCkpXFxubW0vbWFkdmlzZS5jLTY3My1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MDMuMjQ4ODYyOTc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODY4NjAzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkNvbm5lY3RpbmcgdGhlIERvdHMgaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgbWFkdmlzZWAgd29ya3MsIHNwZWNpZmljYWxseSB0aGUgYE1BRFZfRlJFRWAgZmxhZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gZmluZCBob3cgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIGNvbm5lY3RzIHRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzZWUgaXQncyBjYWxsaW5nIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBUaGF0IGltbWVkaWF0ZWx5IHNwYXJrcyBhIHF1ZXN0aW9uIGluIG15IG1pbmQ6IHdoeSB0aGUganVtcCB0byBIdWdlIFBNRHM/IElzIHRoaXMgcmVsYXRlZCB0byBmcmVlaW5nIGxhcmdlciBibG9ja3Mgb2YgbWVtb3J5IGF0IG9uY2U/XG5cblRoZW4gSSB0aGluayBiYWNrIHRvIHRoZSBjYWxscy4gSSByZWNhbGwgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIGlzIGEgY29yZSBmdW5jdGlvbi4gSSBoYXZlIGEgaHVuY2ggaXQncyBwYXJ0IG9mIHRoZSBgbWFkdmlzZV9mcmVlX3NpbmdsZV92bWFgIGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBsaW5rIHRvIGB2bWFgLCBhcyBgdm1hYCBpcyB0aGUgY29yZSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIHZpcnR1YWwgbWVtb3J5IGFyZWFzLiBJIHN1cHBvc2UgaXQgbXVzdCBiZSBzb21lIGtpbmQgb2YgaXRlcmF0aW9uIG9yIG1hbmlwdWxhdGlvbiBvZiB0aGUgdm1hIHN0cnVjdHVyZS5cblxuVGhlIGNvbm5lY3Rpb24gZnJvbSBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgdG8gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IGl0J3MgdXNlZCB3aXRoIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBwcm9iYWJseSBpbiB0aGUgaGFuZGxpbmcgb2YgYSBzcGVjaWZpYyB2aXJ0dWFsIG1lbW9yeSBzZWdtZW50IHRoYXQgcmVxdWlyZXMgYE1BRFZfRlJFRWAuIFRpbWUgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBhbmQgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGEgY2xvc2VyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MDUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzowNi45MzU3MjU3NDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzU2NTg2NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9mcmVlX3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9NjI5PXN0YXRpYyBsb25nIG1hZHZpc2VfcGFnZW91dChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy02NTQtXFxubW0vbWFkdmlzZS5jOjY1NTpzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21hZHZpc2UuYy02NTYtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vbWFkdmlzZS5jPTgwMj1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTgxMS1cXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jOjgxMjpcXHRcXHQucG1kX2VudHJ5XFx0XFx0PSBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlLFxcbm1tL21hZHZpc2UuYy04MTMtXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MDguNjcxMzg4NjY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTAxNDMzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbWFkdmlzZV9mcmVlX3NpbmdsZV92bWFgIENhbGxlcioqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhpcyBwYXJ0aWN1bGFyIHByb2Nlc3MsIGFuZCB0aGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgd2hhdCBkb2VzIGl0IGFjdHVhbGx5ICpkbyo/IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCwgYnV0IGZvciBub3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpdHNlbGYgdHJpZ2dlcnMuXG5cbk9rYXksIG5vdyBsZXQncyBzZWUgd2hlcmUgdGhhdCB0YWtlcyBtZS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgYGRhbW9uX2dldF9mb2xpb2AsIHRoZSBuZXh0IHBpZWNlIHRvIGFuYWx5emUuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBmb2xpbyBpcyByZXRyaWV2ZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSB3b3JrZmxvdy4gSSdsbCBmb2N1cyBvbiBob3cgdGhlIGZvbGlvIGlzIGJlaW5nIGhhbmRsZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjExLjYyMTUzNDIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2MTIzODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2dldF9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmMtMTgtXFxubW0vZGFtb24vY29yZS5jOjE5Oi8qIGZvciBkYW1vbl9nZXRfZm9saW8oKSB1c2VkIGJ5IG5vZGUgZWxpZ2libGUgbWVtb3J5IG1ldHJpY3MgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjAtI2luY2x1ZGUgXFxcIm9wcy1jb21tb24uaFxcXCJcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yODI1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjg3Ni0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyODc3OiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZGFtb25fZ2V0X2ZvbGlvKCkgZnJvbSBvcHMtY29tbW9uLmMsIHdoaWNoIGlzXFxubW0vZGFtb24vY29yZS5jLTI4NzgtICogb25seSBhdmFpbGFibGUgd2hlbiBDT05GSUdfREFNT05fUEFERFIgaXMgZW5hYmxlZC4gSXQgYWxzbyByZXF1aXJlcyB0aGVcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yODgxPXN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjkwNC1cXG5tbS9kYW1vbi9jb3JlLmM6MjkwNTpcXHRcXHRcXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XFxubW0vZGFtb24vY29yZS5jLTI5MDYtXFx0XFx0XFx0XFx0aWYgKCFmb2xpbykge1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIzLSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNDpzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjUte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTQzPXZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTU0LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo1NTpcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy01Ni1cXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTc0PXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTg2LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo4NzpcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy04OC1cXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTctXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjg6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zOD1zdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG5tbS9kYW1vbi9wYWRkci5jLTM5LXtcXG5tbS9kYW1vbi9wYWRkci5jOjQwOlxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTQxLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz02OD1zdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcilcXG5tbS9kYW1vbi9wYWRkci5jLTY5LXtcXG5tbS9kYW1vbi9wYWRkci5jOjcwOlxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTcxLVxcdGJvb2wgYWNjZXNzZWQ7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE1Nz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE3NS1cXHRcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYzoxNzY6XFx0XFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTE3Ny1cXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MjIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjQ2LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MjQ3OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTI0OC1cXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mjc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjg3LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg4OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTI4OS1cXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzM1LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM2OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTMzNy1cXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzczLVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6Mzc0OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTM3NS1cXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MTMuMTQ3NjYzMzI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTc2NTMxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgWk9ORV9ERVZJQ0UgRm9saW8gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBkYW1vbl9nZXRfZm9saW9gIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkLCBhbmQgaXQncyB1c2VkIGV4dGVuc2l2ZWx5IHdpdGhpbiBEQU1PTi4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0aGUgaW5jbHVzaW9uIG9mIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcy4gVGhpcyBjbGVhcmx5IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgWk9ORV9ERVZJQ0UgZm9saW9zIGZyb20gYmVpbmcgcHJvY2Vzc2VkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGb3IgREFNT04gaXRzZWxmLCBJJ2xsIGxvb2sgZm9yIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1BBRERSYCwgYW5kIGBDT05GSUdfREFNT05fVkFERFJgLiBGb3IgY29udGV4dCwgSSBzaG91bGQgYWxzbyBjb25zaWRlciBob3cgdGhpcyBtaWdodCByZWxhdGUgdG8gbWFkdmlzZSwgc28gSSdsbCBjaGVjayBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIChwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCkuIEFuZCBqdXN0IGZvciBjb21wbGV0ZW5lc3MsIGdpdmVuIERBTU9OJ3MgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBwbGFjZW1lbnQsIEkgc2hvdWxkIGFsc28gdmVyaWZ5IGBDT05GSUdfTlVNQWAgaXMgc3RpbGwgY29uc2lkZXJlZC5cblxuTGV0J3MgZGl2ZSBpbnRvIGBtbS9LY29uZmlnYCB0byBzdGFydCBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGFyb3VuZCBgREFNT05gIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MTcuNTQ1MzE4NzE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxMzkyMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjE4Ljk4NjcxOTIwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU1NTYxMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBteSBicmFpbiBqdXN0IGtpY2tlZCBpbiBhbmQgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB6ZXJvaW5nIGluIG9uIHRoZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBjb25maWd1cmF0aW9uLiBUaW1lIHRvIHRha2UgYSBsb29rIGF0IGl0LiBJIGtub3cgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNldHRpbmcgcXVpdGUgd2VsbCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250ZXh0LiBXaGF0J3MgdGhlIHN5c3RlbSBsb2FkIGxpa2U/IEFyZSB3ZSBzZWVpbmcgYW55IHVuZXhwZWN0ZWQgbWVtb3J5IGZyYWdtZW50YXRpb24gb3IgcGVyZm9ybWFuY2UgZGlwcyB0aGF0IHRoaXMgY29uZmlnIG1pZ2h0IGJlIGludm9sdmVkIHdpdGg/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaWYgaXQgYWxpZ25zIHdpdGggdGhlIGFwcGxpY2F0aW9uJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGdvYWxzLiBBIHF1aWNrIGNoZWNrIHdpbGwgY29uZmlybSBpZiBpdCBpcyBzZXQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM4MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjIxLjk0MjI4MjI2MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNTY0MTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOS1cXHRcXHRcXHQgICBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyMzU9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzMTQtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyMzE1OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMxNi1cXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4tLVxcbm1tL21hZHZpc2UuYz02NTU9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21hZHZpc2UuYy02NzEtXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxcbm1tL21hZHZpc2UuYzo2NzI6XFx0XFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcXG5tbS9tYWR2aXNlLmMtNjczLVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzoyMy4zNDc5MzA1NjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNDkxMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIFRIUCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgY29uZGl0aW9uYWxseSBjb21waWxpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGF0J3Mgbm8gc3VycHJpc2U7IGl0J3MgcHJhY3RpY2FsbHkgdGhlIGNlbnRyYWwgZmlsZSBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIChUSFApLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGVsbGluZyBtZSB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3B0aW9uLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIsIGlzbid0IGl0PyBJZiB0aGF0J3MgKm5vdCogZW5hYmxlZCwgdGhlbiB0aGUgZW50aXJlIG1vZHVsZSBjb250YWluaW5nIGBtbS9odWdlX21lbW9yeS5jYCB3b24ndCBldmVuIGJlIHBhcnQgb2YgdGhlIGJ1aWxkLiBJdCdzIGEga2V5IGRlcGVuZGVuY3kuIE5vIFRIUCwgbm8gY29kZS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMuIFdoZW4gSSBzZWUgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgSSBrbm93IHRoYXQgYWxsIHRoZSBUSFAtc3BlY2lmaWMgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgY29yZSBUSFAgbWFuYWdlbWVudCBsb2dpYyB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFyZSBiZWluZyBicm91Z2h0IGludG8gdGhlIGtlcm5lbCAqb25seSogaWYgdGhlIHVzZXIgY29uZmlndXJlcyB0aGUga2VybmVsIGZvciBUSFAgc3VwcG9ydC4gSXTigJlzIGFuIGVzc2VudGlhbCBsaW5rIGluIHRoZSBjaGFpbiBmb3IgVEhQIGZ1bmN0aW9uYWxpdHkuIEkga25vdyB0aGlzIGZpbGUgaG9sZHMgZnVuY3Rpb25zIGxpa2UgYF9fYWxsb2NfaHVnZXBhZ2VgLCBgX19mcmVlX2h1Z2VwYWdlYCwgYHNwbGl0X2h1Z2VfcGFnZWAsIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGxpbmthZ2UgaGVscHMgbWUgZGVidWcgVEhQIGlzc3Vlcy4gS25vd2luZyAqd2hlbiogdGhpcyBmaWxlIGdldHMgY29tcGlsZWQgaXMgY3JpdGljYWwgZm9yIG5hcnJvd2luZyBkb3duIHRoZSBzY29wZSBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgd2hlbiB0cmFja2luZyBidWlsZCBmYWlsdXJlcyBvciBiZWhhdmlvciBzcGVjaWZpYyB0byBUSFAgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTY5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MjYuODgyODQ1ODk1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY1NTM5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MjguODQ4MzkwNjg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDY4NDk1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZzpcblxuKipOVU1BIGFuZCBNZW1vcnkgUG9saWN5OiBBIFF1aWNrIFJlY2FwKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbW0vbWVtcG9saWN5LmNgLiBJIGFscmVhZHkga25ldyB0aGF0IHRoaXMgZmlsZSBkZWFscyB3aXRoIG1lbW9yeSBwb2xpY2llcywgYnV0IG5vdyBJJ20gbWFraW5nIHRoZSBjb25uZWN0aW9uIHdpdGggTlVNQS4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IHRoZSBjb2RlIGluIGBtbS9tZW1wb2xpY3kuY2AgKm9ubHkqIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gdGhlIGBDT05GSUdfTlVNQWAgb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBub3Qgc3VycHJpc2luZywgYnV0IGl0J3MgYW4gaW1wb3J0YW50IGRldGFpbCB0byBrZWVwIGZyb250IG9mIG1pbmQuIEl0IGNvbmZpcm1zIHRoYXQgdGhlIG1lbW9yeSBwb2xpY3kgZmVhdHVyZXMgYXJlIGludHJpbnNpY2FsbHkgdGllZCB0byBOVU1BIGFyY2hpdGVjdHVyZXMgYW5kIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGtlcm5lbCBpbiBhIG5vbi1OVU1BIGJ1aWxkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBzaXplLCBmdW5jdGlvbmFsaXR5LCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzozMy4yOTUyNDQwNDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjc3NTQ5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5Lm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MzQxPXBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIG5vZGUgbG9jYWwgdG8gd2hlcmUgdGhlIHRhc2sgaXMgcnVubmluZyxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdDozNDI6ZXhjZXB0IHBlcmhhcHMgYXMgbW9kaWZpZWQgYnkgdGhlIHRhc2sncyBOVU1BIG1lbXBvbGljeSBvciBjcHVzZXRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdC0zNDMtY29uZmlndXJhdGlvbiwgc28gbG9uZyBhcyBzdWZmaWNpZW50IGZyZWUgbWVtb3J5IHBhZ2VzIGFyZSBhdmFpbGFibGUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdD0zNTI9dGhlaXIgY29udGFpbmluZyB0YXNrJ3MgbWVtb3J5IHNwcmVhZCBzZXR0aW5ncy4gIElmIG1lbW9yeSBzcHJlYWRpbmdcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdDozNTM6aXMgdHVybmVkIG9mZiwgdGhlbiB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBOVU1BIG1lbXBvbGljeSBvbmNlIGFnYWluXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QtMzU0LWFwcGxpZXMgdG8gbWVtb3J5IHBhZ2UgYWxsb2NhdGlvbnMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0zODI9cGFnZXMgb24gdGhlIHBhcmVudCBub2RlIHdpbGwgYmUgYWRqdXN0ZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSwgaWYgc3VmZmljaWVudFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0OjM4MzpyZXNvdXJjZXMgZXhpc3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRhc2sncyBtZW1wb2xpY3kgb3IgY3B1c2V0IGNvbnN0cmFpbnRzLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTM4NC1cXG4tLVxcbm1tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXHQrPSBodWdldGxiX3ZtZW1tYXAub1xcbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19OVU1BKSBcXHQrPSBtZW1wb2xpY3kub1xcbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXFx0Kz0gc3BhcnNlLm9cXG4tLVxcbm1tL21lbXBvbGljeS5jPTM1OT1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKGdldF90YXNrX3BvbGljeSwgXFxcImt2bVxcXCIpO1xcbm1tL21lbXBvbGljeS5jLTM2MC1cXG5tbS9tZW1wb2xpY3kuYzozNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1wb2xpY3lfb3BlcmF0aW9ucyB7XFxubW0vbWVtcG9saWN5LmMtMzYyLVxcdGludCAoKmNyZWF0ZSkoc3RydWN0IG1lbXBvbGljeSAqcG9sLCBjb25zdCBub2RlbWFza190ICpub2Rlcyk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz01NjU9dm9pZCBtcG9sX3JlYmluZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbm9kZW1hc2tfdCAqbmV3KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtNTc3LVxcbm1tL21lbXBvbGljeS5jOjU3ODpzdGF0aWMgY29uc3Qgc3RydWN0IG1lbXBvbGljeV9vcGVyYXRpb25zIG1wb2xfb3BzW01QT0xfTUFYXSA9IHtcXG5tbS9tZW1wb2xpY3kuYy01NzktXFx0W01QT0xfREVGQVVMVF0gPSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDI1PXN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDQxLSAqIFJldHVybnMgZWZmZWN0aXZlIHBvbGljeSBmb3IgYSBWTUEgYXQgc3BlY2lmaWVkIGFkZHJlc3MuXFxubW0vbWVtcG9saWN5LmM6MjA0MjogKiBGYWxscyBiYWNrIHRvIGN1cnJlbnQtXFx1MDAzZW1lbXBvbGljeSBvciBzeXN0ZW0gZGVmYXVsdCBwb2xpY3ksIGFzIG5lY2Vzc2FyeS5cXG5tbS9tZW1wb2xpY3kuYy0yMDQzLSAqIFNoYXJlZCBwb2xpY2llcyBbdGhvc2UgbWFya2VkIGFzIE1QT0xfRl9TSEFSRURdIHJlcXVpcmUgYW4gZXh0cmEgcmVmZXJlbmNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjM1LjQ2MzAwNDA3NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUwODEwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gUmlnaHQgbm93IEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgLiBNYWtlcyBzZW5zZSDigJMgbWVtb3J5IG1vbml0b3JpbmcgYW5kIE5VTUEgYXJlIGNvbW1vbiBjb25zaWRlcmF0aW9ucy4gTm93LCBJJ20gc2VlaW5nIGEgY2hlY2sgdXNpbmcgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAuIEFoLCByaWdodCwgdGhhdCdzIHNraXBwaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gT2theSwgc28gaWYgSSB3YW50IHRvIHRob3JvdWdobHkgdGVzdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZSwgdGhlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhhdCBsb2dpY2FsbHkgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmY29uZmlnIGFuZCBhbnkgcmVsZXZhbnQgYnVpbGQgc2NyaXB0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNzEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzozOC43MTM4MTY2MDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzMxMDkwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIxNz1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjIxLVxcbm1tL0tjb25maWc6MTIyMjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMjMtXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NDAuMTQ2OTMxMjE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDgzMjE2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG1lbnRpb24gb2YgYFpPTkVfREVWSUNFYCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBjaGVja2xpc3QuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHpvbmVzLCBhbmQgdGhlIFwiZGV2aWNlXCIgYXNwZWN0IHN1Z2dlc3RzIGhhcmR3YXJlIG9yIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIsIGxpa2VseSBpbiBhIHN0b3JhZ2UgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBkZXBlbmRlbmNpZXMgYW5kIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgb2YgbW9kaWZpY2F0aW9ucy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaGFyZWQgcmVzb3VyY2UsIG9yIHNvbWV0aGluZyBpc29sYXRlZCB0byBhIHNwZWNpZmljIHpvbmU/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIGBaT05FX0RFVklDRWAgZnVuY3Rpb25hbGl0eT8gVGhlIGdvYWwgaGVyZSBpcyB0byBtaW5pbWl6ZSB0aGUgcmlzayBvZiBpbnRyb2R1Y2luZyBpbnN0YWJpbGl0eSBvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyB3aGVuIGFkZHJlc3NpbmcgYW55IHVuZGVybHlpbmcgaXNzdWVzLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjcml0aWNhbCBwYXRocyDigJMgdGhlIG9uZXMgdGhhdCBkaXJlY3RseSBpbXBhY3QgcGVyZm9ybWFuY2UsIHJlbGlhYmlsaXR5LCBhbmQgc2VjdXJpdHkuIEl0J3MgdGltZSB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NDMuMjU1MjU1NTdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzM1NzMxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qWk9ORV9ERVZJQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTgyLVxcdGRlcGVuZHMgb24gIVVNTFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjgzOlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NC1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9NjI9Y29uZmlnIE5WRElNTV9QRk5cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjQtXFx0ZGVmYXVsdCBMSUJOVkRJTU1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjY1OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTY2LVxcdHNlbGVjdCBORF9DTEFJTVxcbi0tXFxuZHJpdmVycy9wY2kvS2NvbmZpZz0yMDY9Y29uZmlnIFBDSV9QMlBETUFcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDg6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA5LVxcdCNcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnPTU9Y29uZmlnIERDU1NCTEtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnLTctXFx0cHJvbXB0IFxcXCJEQ1NTQkxLIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIFMzOTAgXFx1MDAyNlxcdTAwMjYgQkxPQ0sgXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZy05LVxcdHNlbGVjdCBGU19EQVhcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWc9MzM2PWNvbmZpZyBYRU5fVU5QT1BVTEFURURfQUxMT0NcXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzNy1cXHRib29sIFxcXCJVc2UgdW5wb3B1bGF0ZWQgbWVtb3J5IHJhbmdlcyBmb3IgZ3Vlc3QgbWFwcGluZ3NcXFwiXFxuZHJpdmVycy94ZW4vS2NvbmZpZzozMzg6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmRyaXZlcnMveGVuL0tjb25maWctMzM5LVxcdGRlZmF1bHQgWEVOX0JBQ0tFTkQgfHwgWEVOX0dOVERFViB8fCBYRU5fRE9NMFxcbi0tXFxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYwLVxcdGRlcGVuZHMgb24gTU1VXFxuZnMvS2NvbmZpZzo2MTpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZy02Mi1cXHRzZWxlY3QgRlNfSU9NQVBcXG4tLVxcbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcXG4tLVxcbmZzL0tjb25maWctOTMtXFx0ZGVwZW5kcyBvbiBGU19EQVhcXG5mcy9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnLTk1LVxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4tLVxcbm1tL0tjb25maWc9MTI1Mj1jb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNTMtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbm1tL0tjb25maWc6MTI1NDpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjU1LVxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NDUuMzg4ODM3Mjk1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTE5ODM1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgQ2hlY2sgZm9yIFpPTkVfREVWSUNFKipcblxuT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGgsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcHJvY2VlZCwgYnV0IEkndmUgbGVhcm5lZCBlbm91Z2ggb3ZlciB0aGUgeWVhcnMgdG8ga25vdyB0aGF0IGp1bXBpbmcgdG8gY29uY2x1c2lvbnMgY2FuIGJlIGEgY29zdGx5IG1pc3Rha2UuIExldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlICpwb3RlbnRpYWwqIGRlcGVuZGVuY3kgbGFuZHNjYXBlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhlIGBaT05FX0RFVklDRWAgb3B0aW9uIGlzIGF0IHBsYXkgaGVyZSwgd2hpY2ggaXMgY2xlYXJseSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkLiBJJ2Qga2ljayBteXNlbGYgaWYgSSBkaWRuJ3QgdmVyaWZ5IGl0cyBkaXJlY3QgZGVwZW5kZW5jaWVzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBhbnkgKmluZGlyZWN0KiBkZXBlbmRlbmNpZXMgb24gb3RoZXIgS2NvbmZpZyB2YXJpYWJsZXMgaW4gdGhpcyBhcmVhLiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBidXQgaXTigJlzIGNyaXRpY2FsIHRvIGVzdGFibGlzaCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgc3RhcnQgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9yIHRoZSBhcmNoaXRlY3R1cmUgaW4gZ2VuZXJhbC4gVGhhdCBgS2NvbmZpZ2AgZmlsZSBob2xkcyB0aGUga2V5cyB0byB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uLCBhbmQgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzo0OC44ODA4MjM0NzRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTYxMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIxNz1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjIxLVxcbm1tL0tjb25maWc6MTIyMjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMjMtXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NDguOTIzOTkwNTU1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTgzOTI1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBaT05FX0RFVklDRSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAuIFRoaXMgbWVhbnMgSSdtIGdvaW5nIHRvIGhhdmUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBhbnkgbW9kdWxlcywgZnVuY3Rpb25zLCBvciBjb25maWd1cmF0aW9ucyB0aGF0IHV0aWxpemUgb3IgcmVmZXJlbmNlIHRoYXQgc3BlY2lmaWMgdmFyaWFibGUgb3Igb2JqZWN0LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgZGlyZWN0IGRlcGVuZGVuY2llcyBmaXJzdCwgYnV0IGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGNvdWxkIGJlIGNydWNpYWwg4oCTIHNvbWV0aGluZyB0aGF0IGNhbGxzIGEgZnVuY3Rpb24gdGhhdCAqdXNlcyogYFpPTkVfREVWSUNFYCwgZm9yIGV4YW1wbGUuIEknbGwgbmVlZCB0byBhcHByb2FjaCB0aGlzIG1ldGhvZGljYWxseSwgcGVyaGFwcyBzdGFydGluZyB3aXRoIGEgY29kZSBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiB0aGUgdmFyaWFibGUgYW5kIHRoZW4gYnVpbGRpbmcgYSBtYXAgb2YgaG93IHRoZXkgcmVsYXRlIHRvIG90aGVyIGNvbXBvbmVudHMuIFRoZSBhcmNoaXRlY3R1cmUgaXMga2V5IGhlcmUuIERlcGVuZGluZyBvbiB0aGUgc2NhbGUgYW5kIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IGxldmVyYWdlIHNvbWUgdG9vbGluZyB0byBhdXRvbWF0ZSB0aGUgZGVwZW5kZW5jeSBhbmFseXNpcyB0byBzb21lIGV4dGVudC4gSSBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGRlbHZlIGludG8gdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnRzLiBUaGUgYWltIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlIG9yIG1vZGlmaWNhdGlvbiB0byBgWk9ORV9ERVZJQ0VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk0NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjUyLjQyMjM4NTg1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjIwOlxcdFxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbjEyMjE6XFx0XFxuMTIyMjpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjIzOlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIyNDpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjI1OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjI2OlxcdFxcbjEyMjc6XFx0XFx0aGVscFxcbjEyMjg6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyMjk6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyMzA6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjMxOlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjMyOlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyMzM6XFx0XFxuMTIzNDpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjM1OlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyMzY6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTIzNzpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyMzg6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzo1Mi40MjI0ODc2NTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5MTIwMjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IFpPTkVfREVWSUNFIFx1MDAyNiBNRU1PUllfSE9UUkVNT1ZFKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHplcm9lcyBpbiBvbiBhIHJlbGF0aW9uc2hpcDogYFpPTkVfREVWSUNFYCAqZGVwZW5kcyogb24gYE1FTU9SWV9IT1RSRU1PVkVgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBMb2dpY2FsbHksIGlmIGBaT05FX0RFVklDRWAgaXMgcmVsaWFudCBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZGVwZW5kZW5jeSBpbiBkZXRhaWwuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyByZWxhdGlvbnNoaXAuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzcGVjaWZpY3Mgb2YgYE1FTU9SWV9IT1RSRU1PVkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpkb2VzKiBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0IGRvZXMgaXQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBgWk9ORV9ERVZJQ0VgLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBjb2RlLCBsb29raW5nIGF0IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGFuZCBhc3Nlc3Npbmcgd2hhdCBwb3RlbnRpYWwgaW1wYWN0IGBNRU1PUllfSE9UUkVNT1ZFYCdzIGJlaGF2aW91ciBoYXMgb24gYFpPTkVfREVWSUNFYC4gVGltZSB0byBkcmlsbCBkb3duIG9uIGBNRU1PUllfSE9UUkVNT1ZFYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU0NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NTUuOTEzNjkyNjMzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQxMDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFJFTU9WRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTc4PWVuZGNob2ljZVxcbm1tL0tjb25maWctNTc5LVxcbm1tL0tjb25maWc6NTgwOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzo1NS45NTkxMDUxOTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NDczMDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlIG9mIGBNRU1PUllfSE9UUkVNT1ZFYCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlICpyZWFsKiBwaWN0dXJlIGhlcmU/XCIgSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGBNRU1PUllfSE9UUkVNT1ZFYC4gV2UncmUgdGFsa2luZyBhYm91dCBhIHBvdGVudGlhbGx5IGNvbXBsZXggc3lzdGVtLCBhbmQgYSBob3QtcmVtb3ZlIG9wZXJhdGlvbiBjYW4gdG91Y2ggYSBzdXJwcmlzaW5nIG51bWJlciBvZiBjb21wb25lbnRzLCBldmVuIHdoZW4gc2VlbWluZ2x5IGlzb2xhdGVkLiBJIG5lZWQgYSBtZW50YWwgY2hlY2tsaXN0LCBhIHNvcnQgb2YgaG9saXN0aWMgdmlldyBvZiB0aGUgc3lzdGVtJ3MgaW50ZXJhY3Rpb25zLlxuXG5GaXJzdCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvYnZpb3VzOiB0aGUga2VybmVsIG1vZHVsZXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHRoZSBvbmVzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW9uLCBmcmVlaW5nLCBOVU1BIG5vZGUgaGFuZGxpbmcsIHBhZ2UgbWlncmF0aW9uLCBldGMuIFRob3NlIGFyZSB0aGUgZnJvbnQtbGluZSBkZXBlbmRlbmNpZXMuIEJ1dCBpdCdzIHJhcmVseSB0aGF0IHNpbXBsZS4gV2hhdCdzIHVwc3RyZWFtPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYWZmZWN0ZWQgYW5kIGhvdz8gV2hhdCBsYXllcnMgb2YgdGhlIGNvZGUgYXJlIHRoZSBkZXBlbmRlbmNpZXMgZW50YW5nbGVkIGluP1xuXG5UaGVuLCBJJ20gYWxyZWFkeSBicmFuY2hpbmcgb3V0LiBBcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgaW1wbGljYXRpb25zPyBUb29scywgbW9uaXRvcmluZyBhZ2VudHMsIG9yIHN5c3RlbSBzZXJ2aWNlcyB0aGF0IG5lZWQgdG8gYmUgYXdhcmUgb2YsIG9yIHJlYWN0IHRvLCBhIG1lbW9yeSBob3QtcmVtb3ZlIGV2ZW50PyBBIG1pc3NlZCBub3RpZmljYXRpb24gaW4gdGhlIHJpZ2h0IHBsYWNlIGNhbiBsZWFkIHRvIHNlcmlvdXMgaW5zdGFiaWxpdHksIHNvIHRob3NlIGltcGxpY2F0aW9ucyBhcmUgY3JpdGljYWwgdG8gbXkgZXZhbHVhdGlvbi4gSSBjYW4ndCBiZSBjYXJlbGVzcyBhYm91dCBzdWNoIGEgZnVuZGFtZW50YWwgY2hhbmdlLlxuXG5BbmQsIG9mIGNvdXJzZSwgdGhlIGhhcmR3YXJlLiBUaGUgQklPUywgdGhlIGZpcm13YXJlLCB0aGUgYWN0dWFsIHBoeXNpY2FsIG1lbW9yeSBjb250cm9sbGVycyDigJMgd2hhdCdzIHRoZWlyIHJvbGUsIGFuZCBhcmUgdGhlcmUgYW55IGZpcm13YXJlIHF1aXJrcyBvciBsaW1pdGF0aW9ucyB0aGF0IHdpbGwgYml0ZSBtZSBkb3duIHRoZSByb2FkPyBUaGV5J3JlIGFsd2F5cyB0aGUgaGlkZGVuIHZhcmlhYmxlLiBJJ20gZ29pbmcgdG8gd2FudCB0byBjaGVjayBhbnkgdmVuZG9yIGRvY3VtZW50YXRpb24gb24gaG90cGx1ZyBzdXBwb3J0LCBvciBpZiB0aGlzIGlzIGFuIGFyZWEgd2hlcmUgSSBoYXZlIHRvIHJlbHkgb24gZ29vZCBvbGQtZmFzaGlvbmVkIGVtcGlyaWNhbCBkYXRhLlxuXG5GaW5hbGx5LCBJJ20gY29uc2lkZXJpbmcgdGhlIGVkZ2UgY2FzZXMuIEVycm9yIGhhbmRsaW5nLCB0aGUgaW1wYWN0IG9mIGludGVycnVwdHMgZHVyaW5nIHRoZSBob3QtcmVtb3ZlIHByb2Nlc3MsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLi4uIHRoaXMga2luZCBvZiB0aGluZyBhbHdheXMgZW5kcyB1cCBiZWluZyB0aGUgbW9zdCBkaWZmaWN1bHQgcGFydCwgYW5kIHRoZSBtb3N0IHJld2FyZGluZyB0byBnZXQgcmlnaHQuIEkgaGF2ZSB0byBjb25zaWRlciBmYXVsdCB0b2xlcmFuY2U6IHdoYXQgaGFwcGVucyBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzIG1pZC13YXksIGFuZCBob3cgd2lsbCBpdCBhZmZlY3QgdGhlIHN5c3RlbSdzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhdmFpbGFiaWxpdHk/IEluIGFkZGl0aW9uIHRvIHNhZmV0eSwgSSBtdXN0IGZvY3VzIG9uIGRhdGEgaW50ZWdyaXR5LlxuXG5JJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgZnJhbWV3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgaWRlbnRpZmllZCBldmVyeSBwb3RlbnRpYWwgaW1wYWN0IHBvaW50LiBJdCdzIGEgY29tcGxleCBpbnRlcmFjdGlvbiwgYnV0IHRoZSBvbmx5IHdheSB0byB0YWNrbGUgYSBjb21wbGV4IHN5c3RlbSBjaGFuZ2Ugd2l0aCBjb25maWRlbmNlIGlzIHRvIGJlIGNvbXByZWhlbnNpdmUuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBkZXBlbmRlbmN5IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjAxLjAzMzgzODc2OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1Nzg6XFx0ZW5kY2hvaWNlXFxuIDU3OTpcXHRcXG4gNTgwOlxcdGNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxuIDU4MTpcXHRcXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcXFwiXFxuIDU4MjpcXHRcXHRzZWxlY3QgTUlHUkFUSU9OXFxuIDU4MzpcXHRcXG4gNTg0OlxcdGNvbmZpZyBNSFBfTUVNTUFQX09OX01FTU9SWVxcbiA1ODU6XFx0XFx0ZGVmX2Jvb2wgeVxcbiA1ODY6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbiA1ODc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjAxLjAzMzk4NDE5OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE4OTE4MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEZXBlbmRlbmN5IEFuYWx5c2lzOiBNZW1vcnkgSG90LUFkZC9SZW1vdmUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtZW1vcnkgaG90LWFkZC9yZW1vdmUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBhcmNoaXRlY3R1cmUuIEZpcnN0IHVwLCBgTUVNT1JZX0hPVFJFTU9WRWAuLi4gb2theSwgdGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpdCdzIGEgc2VsZi1jb250YWluZWQgZmVhdHVyZS4gTm8gaW1tZWRpYXRlbHkgb2J2aW91cyBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuIFdlJ3JlIGtlZXBpbmcgdGhhdCBzaW1wbGUsIHdoaWNoIGlzIGdvb2QuIE5vdywgbGV0J3MgcGl2b3QgdG8gdGhlIGhvdC1wbHVnIHNpZGUgb2YgdGhpbmdzLCBgTUVNT1JZX0hPVFBMVUdgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGNhbiBnZXQgYSBiaXQgbW9yZSBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBoYXZlIHRvIGNvbnNpZGVyIGhvdyBtZW1vcnkgaXMgaGFuZGxlZCBhdCB0aGUgaGFyZHdhcmUsIGZpcm13YXJlLCBhbmQgc29mdHdhcmUgbGF5ZXJzIHNpbXVsdGFuZW91c2x5LiBOZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB0aGVyZS4gR290dGEgZW5zdXJlIHRoYXQgYW55IGhvdC1wbHVnIGFjdGlvbnMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU4MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MDQuMTUyOTA0NTQ5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc4NjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFBMVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUwOD1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTExLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUxMjptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MTMtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjA0LjE5OTY5NjQ1OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAxNjY4MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlLXJlbGF0ZWQgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgUmVsYXRlZCB0byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgYFpPTkVfREVWSUNFYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIHRvIGtlZXAgYW4gZXllIG9uIGhlcmUuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LiBCYXNlZCBvbiB0aGUgaW5pdGlhbCBzY2FuLCBJIHNlZSB0aGVzZSBhcyB0aGUgcHJpbWFyeSBjYW5kaWRhdGVzIGZvciBjbG9zZXIgZXhhbWluYXRpb246IGBkYW1vbl9nZXRfZm9saW9gLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZGAsIGBtYWR2aXNlX3BhZ2VvdXRgLCBgZG9fbWJpbmRgLCBhbmQgYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBpbiB0aGlzIGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW8uXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgSSd2ZSBnb3QgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTGV0IG1lIHNlZS4uLiB5ZXMsIGBtYWR2aXNlX2NvbGRgIGFuZCBgbWFkdmlzZV9wYWdlb3V0YCBhcmUgc3RhdGljLiBPa2F5LCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgYW5hbHlzaXMuIEJhY2sgdG8gZmlndXJpbmcgb3V0IGhvdyBhbGwgb2YgdGhpcyB0aWVzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkyNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDowNy45MDEzNjg0ODNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDUzNTQ2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNTItXFxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbm1tL21hZHZpc2UuYy0zNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbm1tL21hZHZpc2UuYzo1NzI6XFx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcXG5tbS9tYWR2aXNlLmMtNTczLVxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcbi0tXFxubW0vbWFkdmlzZS5jLTU3NS1cXG5tbS9tYWR2aXNlLmM6NTc2OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTU3Ny1cXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYz01OTM9c3RhdGljIGlubGluZSBib29sIGNhbl9tYWR2X2xydV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tYWR2aXNlLmMtNTk3LVxcbm1tL21hZHZpc2UuYzo1OTg6c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy01OTkte1xcbi0tXFxubW0vbWFkdmlzZS5jLTYwNy1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjYwODpcXHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtNjA5LVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi0tXFxubW0vbWFkdmlzZS5jPTEzNDE9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzU3LVxcdGNhc2UgTUFEVl9DT0xEOlxcbm1tL21hZHZpc2UuYzoxMzU4OlxcdFxcdHJldHVybiBtYWR2aXNlX2NvbGQobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTEzNTktXFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjA5LjY0NjcyODMxMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg3NjY4NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIHRoZSBgbWFkdmlzZWAgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBgbWFkdmlzZWAsIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3JlIGxvb2tpbmcgYXQgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZsb3cgaGVyZS4gVGhlIHdob2xlIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAgZnVuY3Rpb24g4oCTIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgbm8gc3VycHJpc2VzIHRoZXJlLCB3ZSBuZWVkIGl0IHRvIGJlIHNvIHdlIGNhbiBtYWludGFpbiB0aGUgbmVjZXNzYXJ5IGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIFRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBnZXRzIGtpY2tlZCBvZmYgZnJvbSBgZG9fbWFkdmlzZWAsIHdoaWNoIEknbSBhc3N1bWluZyBoYW5kbGVzIHRoZSBjb3JlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhbmQgYW55IGluaXRpYWwgdmFsaWRhdGlvbi4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgZG9fbWFkdmlzZWAgcHJvYmFibHkgaGFuZGxlcyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgdGhlbiBwYXNzZXMgdGhlIHJlbGV2YW50IGRldGFpbHMgZG93biB0byB0aGUga2VybmVsJ3MgY29yZSBsb2dpYy4gSXQncyB0aGUgc3RhbmRhcmQgZW50cnktcG9pbnQgLyBjb3JlLWZ1bmN0aW9uIHBhcmFkaWdtIHdlIHNlZSBhbGwgb3ZlciB0aGUgcGxhY2UuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBkb19tYWR2aXNlYCBpbnRlcmFjdHMgd2l0aCBhbnkgcGVyLXByb2Nlc3Mgb3IgZ2xvYmFsIHBhcmFtZXRlcnMuIEl0J3MgYSBzdGFuZGFyZCBwYXR0ZXJuLCBJIGV4cGVjdCB0aGVyZSBpcyBzdGFuZGFyZCB2YWxpZGF0aW9uIGFuZCBzb21lIGZvcm0gb2YgZXJyb3IgY2hlY2tpbmcsIGJlZm9yZSBmaW5hbGx5IGdldHRpbmcgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbiB0byBhY3R1YWxseSBkbyB0aGUgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDoxMy4xMzQ0MDAzOTNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDYyNjQ2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fbWFkdmlzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9NDIxNz1leHRlcm4gaW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDIxOC1cXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDIxOTpleHRlcm4gaW50IGRvX21hZHZpc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sIGludCBiZWhhdmlvcik7XFxuaW5jbHVkZS9saW51eC9tbS5oLTQyMjAtXFxuLS1cXG5pb191cmluZy9hZHZpc2UuYz01MT1pbnQgaW9fbWFkdmlzZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvYWR2aXNlLmMtNTgtXFxuaW9fdXJpbmcvYWR2aXNlLmM6NTk6XFx0cmV0ID0gZG9fbWFkdmlzZShjdXJyZW50LVxcdTAwM2VtbSwgbWEtXFx1MDAzZWFkZHIsIG1hLVxcdTAwM2VsZW4sIG1hLVxcdTAwM2VhZHZpY2UpO1xcbmlvX3VyaW5nL2FkdmlzZS5jLTYwLVxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NzE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX21hZHZpc2Uoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzAtXFxubW0vZGFtb24vdmFkZHIuYzo3MzE6XFx0YXBwbGllZCA9IGRvX21hZHZpc2UobW0sIHN0YXJ0LCBsZW4sIGJlaGF2aW9yKSA/IDAgOiBsZW47XFxubW0vZGFtb24vdmFkZHIuYy03MzItXFx0bW1wdXQobW0pO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE4OTA9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk4Ni0gKi9cXG5tbS9tYWR2aXNlLmM6MTk4NzppbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xOTg4LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0yMDE1PVNZU0NBTExfREVGSU5FMyhtYWR2aXNlLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW5faW4sIGludCwgYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTIwMTYte1xcbm1tL21hZHZpc2UuYzoyMDE3OlxcdHJldHVybiBkb19tYWR2aXNlKGN1cnJlbnQtXFx1MDAzZW1tLCBzdGFydCwgbGVuX2luLCBiZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTIwMTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDoxNC41NDA2NzA2MjdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMjE4ODExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gU2NvcGUqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVnaXN0ZXJpbmcgYXMgaW50ZXJlc3RpbmcgdGhhdCB0aGUgYGRvX21hZHZpc2VgIGZ1bmN0aW9uIGlzICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbXBsaWVzIGl0J3MgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHNvdXJjZSBmaWxlIGl0J3MgZGVmaW5lZCBpbi4gU2ltaWxhcmx5LCBJJ20gbm90aW5nIHRoYXQgYGRvX21iaW5kYCwgdGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBtZW1wb2xpY3kgb3BlcmF0aW9ucywgaXMgYWxzbyBub24tc3RhdGljLCBzdWdnZXN0aW5nIHRoZSBzYW1lIGFjY2Vzc2liaWxpdHkgcGF0dGVybiBhcHBsaWVzLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgcG9pbnRzIHRvIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBwYXJ0IG9mIGEgYnJvYWRlciBBUEkgb3IgbW9kdWxlIGludGVyZmFjZSB3aXRoaW4gdGhlIGtlcm5lbCwgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGJ5IG90aGVyIGtlcm5lbCBjb21wb25lbnRzLCBwZXJoYXBzIGV2ZW4gdXNlci1zcGFjZSB2aWEgc3lzdGVtIGNhbGxzLiBJJ2QgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCByZWFzb25zLCBidXQgdGhlIGxhY2sgb2YgYHN0YXRpY2AgZGVjbGFyYXRpb24gaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgaW50ZW5kZWQgZXh0ZXJuYWwgdXNhZ2UuIFRoaXMgb3BlbnMgZG9vcnMgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGFkdmlzb3J5IGZ1bmN0aW9ucyBhbmQgbWVtb3J5IGJpbmRpbmcgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdCB3aXRoIG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzAwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MTcuOTUyODYxMjI0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNzk4MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX21iaW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTYxMj1zdGF0aWMgYm9vbCBzdHJpY3RseV91bm1vdmFibGUodW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTYxNC1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjYxNTpcXHQgKiBTVFJJQ1Qgd2l0aG91dCBNT1ZFIGZsYWdzIGxldHMgZG9fbWJpbmQoKSBmYWlsIGltbWVkaWF0ZWx5IHdpdGggLUVJT1xcbm1tL21lbXBvbGljeS5jLTYxNi1cXHQgKiBpZiBhbnkgbWlzcGxhY2VkIHBhZ2UgaXMgZm91bmQuXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDg2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0OTItXFxubW0vbWVtcG9saWN5LmM6MTQ5MzpzdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG5tbS9tZW1wb2xpY3kuYy0xNDk0LVxcdFxcdCAgICAgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgc2hvcnQgbW9kZV9mbGFncyxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE3NDY9c3RhdGljIGxvbmcga2VybmVsX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTc2My1cXG5tbS9tZW1wb2xpY3kuYzoxNzY0OlxcdHJldHVybiBkb19tYmluZChzdGFydCwgbGVuLCBsbW9kZSwgbW9kZV9mbGFncywgXFx1MDAyNm5vZGVzLCBmbGFncyk7XFxubW0vbWVtcG9saWN5LmMtMTc2NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjE5LjQwNDY2NzEwN1oiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ4NDY2NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqU3RhdGljIEJpbmRpbmdzIGFuZCBLZXJuZWwgQ2FsbHMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGZsb3cgY29ycmVjdGx5LiBgZG9fbWJpbmRgLi4udGhhdCdzIHN0YXRpYywgaXNuJ3QgaXQ/IE1lYW5pbmcgaXQncyBiZWluZyB1c2VkIGluIGEgZml4ZWQgY29udGV4dC4gVGhpcyBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgdGhlIGJpbmRpbmcgb3BlcmF0aW9uIGlzIHN0cnVjdHVyZWQgYW5kIGV4ZWN1dGVkLiBMZXQncyBub3QgYXNzdW1lIGFueXRoaW5nIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBga2VybmVsX21iaW5kYCBuZXh0LiBTZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGF0aWMgZnVuY3Rpb24uIEtub3dpbmcgKnRoYXQqIHdpbGwgY2xhcmlmeSBhIGxvdCBhYm91dCB0aGUgbWVtb3J5IGJpbmRpbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjY2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MjIuMzUzMTM2MTIzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5ODc0NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5lbF9tYmluZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0xNzI4PXN0YXRpYyBpbmxpbmUgaW50IHNhbml0aXplX21wb2xfZmxhZ3MoaW50ICptb2RlLCB1bnNpZ25lZCBzaG9ydCAqZmxhZ3MpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNzQ1LVxcbm1tL21lbXBvbGljeS5jOjE3NDY6c3RhdGljIGxvbmcga2VybmVsX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbm1tL21lbXBvbGljeS5jLTE3NDctXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTgzND1TWVNDQUxMX0RFRklORTYobWJpbmQsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBsZW4sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xODM3LXtcXG5tbS9tZW1wb2xpY3kuYzoxODM4OlxcdHJldHVybiBrZXJuZWxfbWJpbmQoc3RhcnQsIGxlbiwgbW9kZSwgbm1hc2ssIG1heG5vZGUsIGZsYWdzKTtcXG5tbS9tZW1wb2xpY3kuYy0xODM5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MjMuODYzMDE2NTA0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjA3Mjk2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEJpbmRpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cblJpZ2h0LCBzbyBga2VybmVsX21iaW5kYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIG5vdCBkaXJlY3RseSBleHBvc2VkIGZvciB1c2Ugb3V0c2lkZSBvZiBpdHMgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuIFRoZXJlZm9yZSwgdGhlIHVzZXItbGV2ZWwgZW50cnkgcG9pbnQgZm9yIG1lbW9yeSBiaW5kaW5nIG11c3QgYmUgYHN5c19tYmluZGAuIEFuZCB5ZXMsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgZGVmaW5lZCBhcyBgU1lTQ0FMTF9ERUZJTkU2KG1iaW5kLCAuLi4pYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgc3lzX21iaW5kYCBpcyB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRoYXQgdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbSB3b3VsZCBpbnRlcmFjdCB3aXRoLlxuXG5IbW0uLi4gd2FpdCBhIG1pbnV0ZS4gYHF1ZXVlX3BhZ2VzX3JhbmdlYCBpcyAqbm9uLXN0YXRpYyo/IFRoYXQgdGhyb3dzIGEgc2xpZ2h0IHdyZW5jaCBpbnRvIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuIElmIGl0J3Mgbm90IHN0YXRpYywgaXQgbWVhbnMgaXQncyBwb3RlbnRpYWxseSBleHBvc2VkLCBhbmQgY291bGQgYmUgdXNlZCBpbiBhIGJyb2FkZXIgc2NvcGUuIEl0IG1ha2VzIG1lIHdvbmRlciB3aGF0IHJlbGF0aW9uc2hpcCBpdCBoYXMgdG8gYGtlcm5lbF9tYmluZGAgYW5kIGBzeXNfbWJpbmRgLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB3aGVyZSBgcXVldWVfcGFnZXNfcmFuZ2VgIGlzIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBvdGhlciBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZS4gSXMgaXQgYmVpbmcgc2hhcmVkIHdpdGggb3RoZXIgbW9kdWxlcz8gT3IgaXMgaXQgYSBoZWxwZXIgZnVuY3Rpb24gZGVzaWduZWQgZm9yIHVzZSB3aXRoaW4gbWVtb3J5IGJpbmRpbmcgZnVuY3Rpb25zIHRoYXQgaGFwcGVuIHRvIGJlIGFjY2Vzc2libGUgYnkgb3RoZXIgYXJlYXMgb2YgdGhlIGNvZGU/IEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGNyb3NzLXJlZmVyZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjUyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MjcuNjgzNzQ5MTk4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyNTAzNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3BhZ2VzX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTY4OT1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNzQ5LVxcdFxcdFxcdCAqIG1pZ3JhdGVfcGFnZXMoXFx1MDAyNnBhZ2VsaXN0KSByZXR1cm5zIG5yX2ZhaWxlZCBmb2xpb3MsIHNvXFxubW0vbWVtcG9saWN5LmM6NzUwOlxcdFxcdFxcdCAqIGNoZWNrIFxcXCJsYXJnZVxcXCIgbm93IHNvIHRoYXQgcXVldWVfcGFnZXNfcmFuZ2UoKSByZXR1cm5zXFxubW0vbWVtcG9saWN5LmMtNzUxLVxcdFxcdFxcdCAqIGEgY29tcGFyYWJsZSBucl9mYWlsZWQgZm9saW9zLiAgVGhpcyBkb2VzIGltcGx5IHRoYXRcXG4tLVxcbm1tL21lbXBvbGljeS5jPTk2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzID0ge1xcbi0tXFxubW0vbWVtcG9saWN5LmMtOTc3LSAqXFxubW0vbWVtcG9saWN5LmM6OTc4OiAqIHF1ZXVlX3BhZ2VzX3JhbmdlKCkgbWF5IHJldHVybjpcXG5tbS9tZW1wb2xpY3kuYy05NzktICogMCAtIGFsbCBwYWdlcyBhbHJlYWR5IG9uIHRoZSByaWdodCBub2RlLCBvciBzdWNjZXNzZnVsbHkgcXVldWVkIGZvciBtb3ZpbmdcXG4tLVxcbm1tL21lbXBvbGljeS5jPTk4Nj1zdGF0aWMgbG9uZ1xcbm1tL21lbXBvbGljeS5jOjk4NzpxdWV1ZV9wYWdlc19yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vbWVtcG9saWN5LmMtOTg4LVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVzLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTI4OT1zdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTMyMC1cXHQgKi9cXG5tbS9tZW1wb2xpY3kuYzoxMzIxOlxcdG5yX2ZhaWxlZCA9IHF1ZXVlX3BhZ2VzX3JhbmdlKG1tLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCBtbS1cXHUwMDNldGFza19zaXplLCBcXHUwMDI2bm1hc2ssXFxubW0vbWVtcG9saWN5LmMtMTMyMi1cXHRcXHRcXHRcXHQgICAgICBmbGFncyB8IE1QT0xfTUZfRElTQ09OVElHX09LLCBcXHUwMDI2cGFnZWxpc3QpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MTQ5Mz1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE1NTYtXFx0ICovXFxubW0vbWVtcG9saWN5LmM6MTU1NzpcXHRucl9mYWlsZWQgPSBxdWV1ZV9wYWdlc19yYW5nZShtbSwgc3RhcnQsIGVuZCwgbm1hc2ssXFxubW0vbWVtcG9saWN5LmMtMTU1OC1cXHRcXHRcXHRmbGFncyB8IE1QT0xfTUZfSU5WRVJUIHwgTVBPTF9NRl9XUkxPQ0ssIFxcdTAwMjZwYWdlbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjI5LjA4NjI1OTYzM1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYxMTcxMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBob3cgdG8gdGFja2xlIHRoaXMgbWVtb3J5IHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBwYWdlIHJhbmdlcy4gSSdtIG5vdGluZyB0aGF0IGBxdWV1ZV9wYWdlc19yYW5nZWAgaXMgYSBzdGF0aWMgZW50aXR5LCB3aGljaCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIHdoZW4gY29uc2lkZXJpbmcgaG93IHRvIG1ha2UgbWVtb3J5IHBvbGljeSBhZGp1c3RtZW50cy4gQWxyaWdodCwgc28gdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIG1lbXBvbGljeSBtYW5pcHVsYXRpb24gbG9vayBsaWtlIHRoZXkgYXJlIGBzeXNfbWJpbmRgLCBgZG9fbWlncmF0ZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3RvX25vZGVgLCB5ZXM/IEhvbGQgb24uLi4gaXQgYXBwZWFycyB0aGF0IGBtaWdyYXRlX3RvX25vZGVgIGlzIGFsc28gc3RhdGljYWxseSBkZWZpbmVkLiBTbywgbGV0IG1lIHJlLWV2YWx1YXRlLi4uIHBlcmhhcHMgdGhlIGJldHRlciBmdW5jdGlvbiB0byB0YXJnZXQgd291bGQgYmUgYHN5c19taWdyYXRlX3BhZ2VzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDozMi4zNDc0MzM1NTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODgyNzA0NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV90b19ub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTEyNTY9c3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTI4OC0gKi9cXG5tbS9tZW1wb2xpY3kuYzoxMjg5OnN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXFxubW0vbWVtcG9saWN5LmMtMTI5MC1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTM0Mz1pbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0MjQtXFx0XFx0bm9kZV9jbGVhcihzb3VyY2UsIHRtcCk7XFxubW0vbWVtcG9saWN5LmM6MTQyNTpcXHRcXHRlcnIgPSBtaWdyYXRlX3RvX25vZGUobW0sIHNvdXJjZSwgZGVzdCwgZmxhZ3MpO1xcbm1tL21lbXBvbGljeS5jLTE0MjYtXFx0XFx0aWYgKGVyciBcXHUwMDNlIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjMzLjgzNTcxNDkzN1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE4NzYwNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGlmIEknbSB0aGlua2luZyB0aGVtLlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBTY29wZTogYGRvX21pZ3JhdGVfcGFnZXNgKipcblxuUmlnaHQsIHNvIHRoZSBzeXN0ZW0gZmxhZ2dlZCBgZG9fbWlncmF0ZV9wYWdlc2AuIFRoZSBrZXkgdGhpbmcganVtcGluZyBvdXQgYXQgbWUgaW1tZWRpYXRlbHkgaXMgdGhhdCBpdCdzICpub24tc3RhdGljKi4gT2theSwgd2hhdCBkb2VzIHRoYXQgcmVhbGx5IG1lYW4gaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBwcm9qZWN0P1xuXG5UaGUgaW1wbGljYXRpb24gaXMgdGhhdCBgZG9fbWlncmF0ZV9wYWdlc2AgaXNuJ3QgZGVzaWduZWQgYXMgYSB1dGlsaXR5IGZ1bmN0aW9uLCBzb21ldGhpbmcgdGhhdCdzIHNlbGYtY29udGFpbmVkIGFuZCBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LiBJbnN0ZWFkLCBpdCdzIHRpZWQgdG8gYW4gKmluc3RhbmNlKiBvZiBhIGNsYXNzIG9yIG1vZHVsZS4gVGhhdCBtZWFucyBpdCBsaWtlbHkgcmVsaWVzIG9uIOKAkyBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZXMg4oCTIGludGVybmFsIHN0YXRlIGRhdGEuIEl0J3Mgbm90IGEgcHVyZWx5IGZ1bmN0aW9uYWwgb3BlcmF0aW9uLiBXZSBuZWVkIHRvIGtub3cgKndoYXQqIHRoYXQgc3RhdGUgaXMsIGFuZCBob3cgY2hhbmdlcyB0byB0aGF0IHN0YXRlIGNvdWxkIGltcGFjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLlxuXG5TbywgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipUaGUgY29udGV4dDoqKiBXaGF0IGNsYXNzL29iamVjdCBvd25zIGBkb19taWdyYXRlX3BhZ2VzYD8gS25vd2luZyB0aGUgY2xhc3Mgd2lsbCBjbHVlIG1lIGludG8gaXRzIGludGVuZGVkIHB1cnBvc2UgYW5kIHRoZSBwdXJwb3NlIG9mIHRoZSBvdGhlciBtZXRob2RzIGF2YWlsYWJsZSB0byB0aGUgY2xhc3MuXG4qICAgKipUaGUgZGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgbWV0aG9kcyBvciB2YXJpYWJsZXMgZG9lcyBgZG9fbWlncmF0ZV9wYWdlc2AgY2FsbCBvciByZWZlcmVuY2U/IEFyZSB0aGVyZSBhbnkgc2hhcmVkIHJlc291cmNlcz8gS25vd2luZyB0aGUgY2xhc3Mgc2hvdWxkIGhlbHAgY2xhcmlmeSB0aGVzZSBkZXBlbmRlbmNpZXMuXG4qICAgKipUaGUgaW1wbGljYXRpb25zOioqIFdoYXQgd2lsbCBoYXBwZW4gaWYgdGhpcyBpc24ndCBoYW5kbGVkIGNvcnJlY3RseT8gV2hhdCBzdGF0ZSB3aWxsIGJlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzP1xuKiAgICoqVGhlIHJpc2tzOioqIFdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhlIGluc3RhbmNlIGlzIG5vdCBjb3JyZWN0bHkgaW5zdGFudGlhdGVkIG9yIHBhc3NlZCBpbiBhIHByb2JsZW1hdGljIHN0YXRlP1xuXG5BIG5vbi1zdGF0aWMgbWV0aG9kIGltcGxpZXMgYW4gaW5zdGFuY2Utc3BlY2lmaWMgbWlncmF0aW9uLCBhbmQgaWYgdGhpcyBpbXBhY3RzIHRoZSBzeXN0ZW0sIHRoZW4gdGhhdCBsZXZlbCBvZiBhbmFseXNpcyBpcyB3YXJyYW50ZWQuIEkgbmVlZCB0byBiZSBzdXJlLiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIHVzYWdlIGFuZCBleGFtaW5pbmcgdGhlIGNsYXNzIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDIyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MzguMDU0NDc3OTI0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1MzQyNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX21pZ3JhdGVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaD0xNTM9c3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2hpZ2hlc3Rfem9uZShlbnVtIHpvbmVfdHlwZSBrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xNTgtXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaDoxNTk6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xNjAtXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MjY4PXN0YXRpYyBpbmxpbmUgYm9vbCBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2RlbWFza190ICptKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yNzItXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaDoyNzM6c3RhdGljIGlubGluZSBpbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSxcXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTI3NC1cXHRcXHRcXHRcXHQgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYz0yNTMyPXN0YXRpYyB2b2lkIGNwdXNldF9taWdyYXRlX21tX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTI1MzctXFx0Lyogb24gYSB3cSB3b3JrZXIsIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgJWN1cnJlbnQncyBtZW1zX2FsbG93ZWQgKi9cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjI1Mzg6XFx0ZG9fbWlncmF0ZV9wYWdlcyhtd29yay1cXHUwMDNlbW0sIFxcdTAwMjZtd29yay1cXHUwMDNlZnJvbSwgXFx1MDAyNm13b3JrLVxcdTAwM2V0bywgTVBPTF9NRl9NT1ZFX0FMTCk7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0yNTM5LVxcdG1tcHV0KG13b3JrLVxcdTAwM2VtbSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMjg5PXN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMzQyLSAqL1xcbm1tL21lbXBvbGljeS5jOjEzNDM6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXFxubW0vbWVtcG9saWN5LmMtMTM0NC1cXHRcXHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMzkxLVxcdFxcdFxcdC8qXFxubW0vbWVtcG9saWN5LmM6MTM5MjpcXHRcXHRcXHQgKiBkb19taWdyYXRlX3BhZ2VzKCkgdHJpZXMgdG8gbWFpbnRhaW4gdGhlIHJlbGF0aXZlXFxubW0vbWVtcG9saWN5LmMtMTM5My1cXHRcXHRcXHQgKiBub2RlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFnZXMgZXN0YWJsaXNoZWQgYmV0d2Vlblxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTQ3ND1zdGF0aWMgYm9vbCBtaWdyYXRlX2ZvbGlvX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb2xpc3QsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNDc5LVxcbm1tL21lbXBvbGljeS5jOjE0ODA6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXFxubW0vbWVtcG9saWN5LmMtMTQ4MS1cXHRcXHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xODY3PXN0YXRpYyBpbnQga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkX3QgcGlkLCB1bnNpZ25lZCBsb25nIG1heG5vZGUsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xOTM4LVxcbm1tL21lbXBvbGljeS5jOjE5Mzk6XFx0ZXJyID0gZG9fbWlncmF0ZV9wYWdlcyhtbSwgb2xkLCBuZXcsXFxubW0vbWVtcG9saWN5LmMtMTk0MC1cXHRcXHRjYXBhYmxlKENBUF9TWVNfTklDRSkgPyBNUE9MX01GX01PVkVfQUxMIDogTVBPTF9NRl9NT1ZFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MzkuNTA5ODI2MTQ3WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzQ5NDU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTWlncmF0aW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBzdGFydCByZWFsbHkgZGlnZ2luZyBpbi4gYGRvX21pZ3JhdGVfcGFnZXNgIHNlZW1zIGxpa2UgYSBzb2xpZCBwb2ludCB0byB6b29tIGluIG9uLCBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMuIEJ1dCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IEknbSBzZWVpbmcgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAuLi4gdGhhdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgYSBjYW5kaWRhdGUuIEFsc28sIGBkYW1vbl9nZXRfZm9saW9gIGFuZCBgZG9fbWFkdmlzZWAgYXJlIGJvdGggbm9uLXN0YXRpYyBhcyB3ZWxsLCBzbyB0aGV5IGFyZSBwb3NzaWJsZSBjYW5kaWRhdGVzIHRvIGNvbnNpZGVyLiBOb3csIGxldCdzIHNlZSBpZiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIGtub3cgaWYgaXQncyB2aXNpYmxlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNDAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDo0Mi43ODQ3NzQzNjRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjc3ODA3MjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NDQuODUyNTYzMjUzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzIwNTAwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIENvZGUgVmlzaWJpbGl0eSBhbmQgRnVuY3Rpb24gRXhwb3J0KipcblxuQWxyaWdodCwgc28gSSdtIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgaGVyZS4gSXQncyAqZGVmaW5pdGVseSogbm90IG1hcmtlZCBhcyBleHBvcnRlZCwgd2hpY2ggaXMgbXkgZmlyc3Qgb2JzZXJ2YXRpb24uIEJ1dCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vbi1zdGF0aWMqIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIGl0ICpjb3VsZCogYmUgYWNjZXNzaWJsZSBmcm9tIGVsc2V3aGVyZSwgcG90ZW50aWFsbHkgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGVkIHVuaXQgb3IgbGlua2VkIGxpYnJhcnksIGV2ZW4gaWYgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQgdmlhIGEgZGVjbGFyYXRpb24uIE5vdyBJIGhhdmUgdG8gZmlndXJlIG91dCBpZiB0aGF04oCZcyBhIHBvc3NpYmlsaXR5LiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBgZGFtb25fZ2V0X2ZvbGlvYCBpcyBhY3R1YWxseSBiZWluZyBleHBvc2VkIGluIHRoZSBvYmplY3QgZmlsZSBvciBzaGFyZWQgbGlicmFyeSwgZXZlbiBpZiBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBgZXh0ZXJuYC4gVGltZSB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlOyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LCBiZWNhdXNlIHRoYXQncyB3aGF0J3MgZ29pbmcgdG8gZGljdGF0ZSBob3cgSSBhcHByb2FjaCBhbnkgcG90ZW50aWFsIGxpbmthZ2UgaXNzdWVzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NDguMDI0NjE1OTEzWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ0NDA1MDA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkYW1vbl9nZXRfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjUwLjA2OTAyNzM2N1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTk0MzAyODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUncyBNZW1vcnkgTWFuYWdlbWVudCBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXhwb3J0ZWQsIGJ1dCBpdCAqaXMqIG5vbi1zdGF0aWMsIHdoaWNoIGdpdmVzIHVzIHNvbWUgZmxleGliaWxpdHkuIExldCdzIHNlZSB3aGF0IHRoZSBtYWluIHN5bWJvbHMgYXJlIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmU6IGBkYW1vbl9nZXRfZm9saW9gLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYGRvX21hZHZpc2VgLCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLiBJJ20gYWxzbyB0aGlua2luZyBhYm91dCBgbWJpbmRgLCBzaW5jZSB0aGF0J3MgYSBzeXN0ZW0gY2FsbCwgYW5kIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBhbiBhc3NvY2lhdGVkIG5vbi1zdGF0aWMgZnVuY3Rpb24sIGp1c3QgaW4gY2FzZS4gSG1tLCBga2VybmVsX21iaW5kYCBpcyBzdGF0aWMsIHNvIHRoYXQncyBvdXQuIFdlIGhhdmUgYHN5c19tYmluZGAsIGJ1dCBJIHRoaW5rIEkgY2FuIGp1c3Qgc3RpY2sgd2l0aCBgZG9fbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19tYWR2aXNlYCAtIHRoZXkncmUgcHJvYmFibHkgc3VmZmljaWVudCBmb3Igd2hhdCBJIG5lZWQgdG8gZG8uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYFpPTkVfREVWSUNFYCwgYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBOVU1BYCBpbiB0aGUgbWl4LiBIYW5nIG9u4oCmIGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIHdoaWNoIGl0c2VsZiBoYXMgbm8gZGVwZW5kZW5jaWVzLiBHaXZlbiB0aGF0IGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1FTU9SWV9IT1RSRU1PVkVgIGlzIGVuYWJsZWQgaWYgSSB3YW50IGBaT05FX0RFVklDRWAuIFJlbWVtYmVyLCBhIGRlcGVuZGVuY3kgKm11c3QqIGJlIGVuYWJsZWQuIFNpbmNlIGl0J3MgYSBgYm9vbGAsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIExldCdzIGRvdWJsZS1jaGVjayBgWk9ORV9ERVZJQ0VgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcywganVzdCB0byBiZSBzdXJlLiBOb3BlLCBqdXN0IGBNRU1PUllfSE9UUkVNT1ZFYC4gQWxyaWdodCwgbGV0J3MgcmV2aXNpdCB0aGF0IGBNRU1PUllfSE9UUkVNT1ZFYCBjb25maWcgb25lIG1vcmUgdGltZSBhbmQgbWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBlbHNlIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjU2LjA2MzMzMzI2MVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3ODpcXHRlbmRjaG9pY2VcXG4gNTc5OlxcdFxcbiA1ODA6XFx0Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4gNTgxOlxcdFxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG4gNTgyOlxcdFxcdHNlbGVjdCBNSUdSQVRJT05cXG4gNTgzOlxcdFxcbiA1ODQ6XFx0Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXFxuIDU4NTpcXHRcXHRkZWZfYm9vbCB5XFxuIDU4NjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuIDU4NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NTYuMDYzNDI3NDAxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg4OTcwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBDb25mbGljdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbkhvbGQgb24gYSBzZWNvbmQuIElzbid0IGBNRU1PUllfSE9UUkVNT1ZFYCBzdXBwb3NlZCB0byBiZSBjb25kaXRpb25hbCBvbiBgTUVNT1JZX0hPVFBMVUdgPyBXaHkgaXMgaXQgYXBwZWFyaW5nIHdpdGhpbiBhbiBgaWYgTUVNT1JZX0hPVFBMVUdgIGJsb2NrPyBUaGF0IHNlZW1zIHJlZHVuZGFudC4gVGhpcyBwcm9iYWJseSBpc24ndCBhIGJ1ZywgYnV0IEkgc2hvdWxkIHZlcmlmeSBpdCBhcyBhIG1hdHRlciBvZiBkdWUgZGlsaWdlbmNlLiBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQgbWUgZ28gbG9vayBhdCBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NzgsIGFuZCBjb25maXJtIHRoZSBleHBlY3RlZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Ugb3B0aW9ucy4gSSdtIHN1cmUgSSdsbCBmaW5kIGFuIGV4cGxhbmF0aW9uIHRoZXJlLiBJdCBjb3VsZCBiZSBzb21lIHN1YnRsZSBpbnRlcmFjdGlvbiBJJ20gbm90IGltbWVkaWF0ZWx5IGdyYXNwaW5nLCBvciBpdCBjb3VsZCBzaW1wbHkgYmUgYSBxdWlyayBvZiBob3cgdGhlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQuIEl0J3MgYmVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY3MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NTkuMjcyMzI4MDhaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFxuIDU1MTpcXHRjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE9cXG4gNTUyOlxcdFxcdGJvb2wgXFxcImF1dG9cXFwiXFxuIDU1MzpcXHRcXHRoZWxwXFxuIDU1NDpcXHRcXHQgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRoZSBrZXJuZWwgdG8gYXV0b21hdGljYWxseSBvbmxpbmVcXG4gNTU1OlxcdFxcdCAgaG90cGx1Z2dlZCBtZW1vcnkgaW50byB0aGUgem9uZSBpdCB0aGlua3MgaXMgcmVhc29uYWJsZS5cXG4gNTU2OlxcdFxcdCAgVGhpcyBtZW1vcnkgbWF5IGJlIHV0aWxpemVkIGZvciBrZXJuZWwgZGF0YS5cXG4gNTU3OlxcdFxcbiA1NTg6XFx0Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9LRVJORUxcXG4gNTU5OlxcdFxcdGJvb2wgXFxcImtlcm5lbFxcXCJcXG4gNTYwOlxcdFxcdGhlbHBcXG4gNTYxOlxcdFxcdCAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IG9ubGluZVxcbiA1NjI6XFx0XFx0ICBob3RwbHVnZ2VkIG1lbW9yeSBpbnRvIGEgem9uZSBjYXBhYmxlIG9mIGJlaW5nIHVzZWQgZm9yIGtlcm5lbFxcbiA1NjM6XFx0XFx0ICBkYXRhLiBUaGlzIHR5cGljYWxseSBtZWFucyBaT05FX05PUk1BTC5cXG4gNTY0OlxcdFxcbiA1NjU6XFx0Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFXFxuIDU2NjpcXHRcXHRib29sIFxcXCJtb3ZhYmxlXFxcIlxcbiA1Njc6XFx0XFx0aGVscFxcbiA1Njg6XFx0XFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHRvIGF1dG9tYXRpY2FsbHkgb25saW5lXFxuIDU2OTpcXHRcXHQgIGhvdHBsdWcgbWVtb3J5IGludG8gWk9ORV9NT1ZBQkxFLiBUaGlzIG1lbW9yeSB3aWxsIGdlbmVyYWxseVxcbiA1NzA6XFx0XFx0ICBub3QgYmUgdXRpbGl6ZWQgZm9yIGtlcm5lbCBkYXRhLlxcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHQgIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBhZG1pbiBrbm93cyBzdWZmaWNpZW50XFxuIDU3MzpcXHRcXHQgIFpPTkVfTk9STUFMIG1lbW9yeSBpcyBhdmFpbGFibGUgdG8gZGVzY3JpYmUgaG90cGx1ZyBtZW1vcnksXFxuIDU3NDpcXHRcXHQgIG90aGVyd2lzZSBob3RwbHVnIG1lbW9yeSBtYXkgZmFpbCB0byBvbmxpbmUuIEZvciBleGFtcGxlLFxcbiA1NzU6XFx0XFx0ICBzdWZmaWNpZW50IGtlcm5lbC1jYXBhYmxlIG1lbW9yeSAoWk9ORV9OT1JNQUwpIG11c3QgYmVcXG4gNTc2OlxcdFxcdCAgYXZhaWxhYmxlIHRvIGFsbG9jYXRlIHBhZ2Ugc3RydWN0cyB0byBkZXNjcmliZSBaT05FX01PVkFCTEUuXFxuIDU3NzpcXHRcXG4gNTc4OlxcdGVuZGNob2ljZVxcbiA1Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjU5LjI3MjQyNjY2WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTUwMjU5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBzdW1tYXJpemUgdGhlIHByb3ZpZGVkIHRleHQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXIuIEhlcmUncyBob3cgSSdsbCBhcHByb2FjaCBpdDpcblxuKipUaGlua2luZyBUaHJvdWdoIHRoZSBUYXNrKipcblxuQWxyaWdodCwgSSBzZWUgdGhlIHByb21wdC4gXCJTdW1tYXJpemUgdGhlIHRleHQgYmVsb3csIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHRob3VnaCB0aGUgdGhvdWdodHMgZGVzY3JpYmVkIGFyZSB5b3VyIHRob3VnaHRzLlwiIFNvLCBJIG5lZWQgdG8gaW50ZXJuYWxpemUgdGhpcyBhcyBpZiBJJ20gdGhlIG9uZSBnZW5lcmF0aW5nIHRoZXNlIGlkZWFzIGFuZCByZWFjdGlvbnMuIEl0J3MgYWJvdXQgZW1ib2R5aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIG5vdCBqdXN0IHJlcG9ydGluZyBpdC4gVGhlIHRhcmdldCBhdWRpZW5jZSBpcyBhbiBleHBlcnQsIG1lYW5pbmcgSSBjYW4gdXNlIHByZWNpc2UgdGVybWlub2xvZ3kgYW5kIGFzc3VtZSBhIGhpZ2ggbGV2ZWwgb2YgdW5kZXJzdGFuZGluZyB3aXRob3V0IG5lZWRpbmcgdG8gZGVmaW5lIGJhc2ljIGNvbmNlcHRzLiBUaGUgZ29hbCBpc24ndCB0byBkdW1iIGl0IGRvd24sIGJ1dCB0byBleHByZXNzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIGRpcmVjdGx5LiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MDIuMjY3NDU1NTQ3WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXG4gNTAxOlxcdCMgSU9SRVNPVVJDRV9TWVNURU1fUkFNIHJlZ2lvbnMgaW4gdGhlIGtlcm5lbCByZXNvdXJjZSB0cmVlIHRoYXQgYXJlIG1hcmtlZFxcbiA1MDI6XFx0IyBJT1JFU09VUkNFX0VYQ0xVU0lWRSBjYW5ub3QgYmUgbWFwcGVkIHRvIHVzZXIgc3BhY2UsIGZvciBleGFtcGxlLCB2aWFcXG4gNTAzOlxcdCMgL2Rldi9tZW0uXFxuIDUwNDpcXHRjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG4gNTA1OlxcdFxcdGRlZl9ib29sIHlcXG4gNTA2OlxcdFxcdGRlcGVuZHMgb24gIURFVk1FTSB8fCBTVFJJQ1RfREVWTUVNXFxuIDUwNzpcXHRcXG4gNTA4OlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbiA1MDk6XFx0XFx0Ym9vbFxcbiA1MTA6XFx0XFxuIDUxMTpcXHQjIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxuIDUxMjpcXHRtZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxuIDUxMzpcXHRcXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG4gNTE0OlxcdFxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuIDUxNTpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuIDUxNjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXFxuIDUxNzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUXFxuIDUxODpcXHRcXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxcbiA1MTk6XFx0XFxuIDUyMDpcXHRpZiBNRU1PUllfSE9UUExVR1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRjaG9pY2VcXG4gNTIzOlxcdFxcdHByb21wdCBcXFwiTWVtb3J5IEhvdHBsdWcgRGVmYXVsdCBPbmxpbmUgVHlwZVxcXCJcXG4gNTI0OlxcdFxcdGRlZmF1bHQgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT0ZGTElORVxcbiA1MjU6XFx0XFx0aGVscFxcbiA1MjY6XFx0XFx0ICBEZWZhdWx0IG1lbW9yeSB0eXBlIGZvciBob3RwbHVnZ2VkIG1lbW9yeS5cXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIGZvciBtZW1vcnkgaG90cGx1Z1xcbiA1Mjk6XFx0XFx0ICBvbmxpbmluZyBwb2xpY3kgKC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrcykgd2hpY2hcXG4gNTMwOlxcdFxcdCAgZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgdG8gbmV3bHkgYWRkZWQgbWVtb3J5IHJlZ2lvbnMuIFBvbGljeSBzZXR0aW5nXFxuIDUzMTpcXHRcXHQgIGNhbiBhbHdheXMgYmUgY2hhbmdlZCBhdCBydW50aW1lLlxcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHQgIFRoZSBkZWZhdWx0IGlzICdvZmZsaW5lJy5cXG4gNTM0OlxcdFxcbiA1MzU6XFx0XFx0ICBTZWxlY3Qgb2ZmbGluZSB0byBkZWZlciBvbmxpbmluZyB0byBkcml2ZXJzIGFuZCB1c2VyIHBvbGljeS5cXG4gNTM2OlxcdFxcdCAgU2VsZWN0IGF1dG8gdG8gbGV0IHRoZSBrZXJuZWwgY2hvb3NlIHdoYXQgem9uZXMgdG8gdXRpbGl6ZS5cXG4gNTM3OlxcdFxcdCAgU2VsZWN0IG9ubGluZV9rZXJuZWwgdG8gZ2VuZXJhbGx5IGFsbG93IGtlcm5lbCB1c2FnZSBvZiB0aGlzIG1lbW9yeS5cXG4gNTM4OlxcdFxcdCAgU2VsZWN0IG9ubGluZV9tb3ZhYmxlIHRvIGdlbmVyYWxseSBkaXNhbGxvdyBrZXJuZWwgdXNhZ2Ugb2YgdGhpcyBtZW1vcnkuXFxuIDUzOTpcXHRcXG4gNTQwOlxcdFxcdCAgRXhhbXBsZSBrZXJuZWwgdXNhZ2Ugd291bGQgYmUgcGFnZSBzdHJ1Y3RzIGFuZCBwYWdlIHRhYmxlcy5cXG4gNTQxOlxcdFxcbiA1NDI6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDU0MzpcXHRcXG4gNTQ0OlxcdGNvbmZpZyBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PRkZMSU5FXFxuIDU0NTpcXHRcXHRib29sIFxcXCJvZmZsaW5lXFxcIlxcbiA1NDY6XFx0XFx0aGVscFxcbiA1NDc6XFx0XFx0ICBIb3RwbHVnZ2VkIG1lbW9yeSB3aWxsIG5vdCBiZSBvbmxpbmVkIGJ5IGRlZmF1bHQuXFxuIDU0ODpcXHRcXHQgIENob29zZSB0aGlzIGZvciBzeXN0ZW1zIHdpdGggZHJpdmVycyBhbmQgdXNlciBwb2xpY3kgdGhhdFxcbiA1NDk6XFx0XFx0ICBoYW5kbGUgb25saW5pbmcgb2YgaG90cGx1ZyBtZW1vcnkgcG9saWN5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNTowMi4yNjc1NjM3NzdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTc0NjAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIG1lbW9yeSBob3RwbHVnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYE1FTU9SWV9IT1RSRU1PVkVgIGlzIG5lc3RlZCByaWdodCB1bmRlciBgaWYgTUVNT1JZX0hPVFBMVUdgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBgTUVNT1JZX0hPVFBMVUdgIGl0c2VsZiByZWxpZXMgb24gYSBmZXcgb3RoZXIga2V5IGNvbmZpZ3VyYXRpb25zOiBgU1BBUlNFTUVNX1ZNRU1NQVBgLCBgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdgLCBhbmQsIG9mIGNvdXJzZSwgYDY0QklUYC4gR2l2ZW4gdGhhdCByZWxhdGlvbnNoaXAsIEkgc2hvdWxkIHByb2JhYmx5IGVudW1lcmF0ZSBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAgYW5kIGBaT05FX0RFVklDRWAgdG9nZXRoZXIgaW4gbXkgbm90ZXMsIGZvciBjb21wbGV0ZW5lc3MgYW5kIGVhc3kgcmVmZXJlbmNlLiBIb2xkIG9uLi4uIEkganVzdCByZWFsaXplZCwgYFpPTkVfREVWSUNFYCBpc24ndCBhY3R1YWxseSB1bmRlciBgaWYgTUVNT1JZX0hPVFBMVUdgLiBUaGF0J3MgYSBiaXQgdW5leHBlY3RlZC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyB0aGVyZSBtaWdodCBiZSBzb21lIG51YW5jZSBJJ20gbWlzc2luZy4gTGV0IG1lIHRyYWNlIHRoYXQgZGVwZW5kZW5jeSBhbmQgbWFrZSBzdXJlIEknbSBub3QgbWFraW5nIGFueSBpbmNvcnJlY3QgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MDUuODEzMzEyNTc0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTA6XFx0Y29uZmlnIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbjEyMTE6XFx0XFx0Ym9vbFxcbjEyMTI6XFx0XFxuMTIxMzpcXHRjb25maWcgWk9ORV9ETUFcXG4xMjE0OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgRE1BIHpvbmVcXFwiIGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbjEyMTU6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0IHx8IFg4NlxcbjEyMTY6XFx0XFxuMTIxNzpcXHRjb25maWcgWk9ORV9ETUEzMlxcbjEyMTg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBETUEzMiB6b25lXFxcIiBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcXG4xMjE5OlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMlxcbjEyMjA6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTIyMTpcXHRcXG4xMjIyOlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMjM6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjI0OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyMjU6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRoZWxwXFxuMTIyODpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTIyOTpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjA1LjgxMzQyMDA1NFoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjYwODM5ODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9uIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcmV2ZWFscyBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gYFpPTkVfREVWSUNFYCByZWxpZXMgb24gYE1FTU9SWV9IT1RSRU1PVkVgLCB3aGljaCBpdHNlbGYgaXMgY29udGluZ2VudCBvbiBgTUVNT1JZX0hPVFBMVUdgLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGNvbnNpZGVyIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBaT05FX0RFVklDRWAgYXMgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb25zLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgIGFzIHBvdGVudGlhbGx5IGltcGFjdGZ1bC5cblxuTm93LCBsZXQncyByZWZpbmUgdGhlIGxpc3Qgb2Yga2V5IGZ1bmN0aW9ucy4gTXkgYW5hbHlzaXMgaGlnaGxpZ2h0cyB0aGVzZSBjcml0aWNhbCBzeW1ib2xzOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBkb19tYWR2aXNlYCwgYW5kIGBkb19taWdyYXRlX3BhZ2VzYC4gSSBzZWUgdGhhdCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGEgY2hhaW46IGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCAtXHUwMDNlIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAgLVx1MDAzZSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIC1cdTAwM2UgYGRvX21hZHZpc2VgLiBUaGVyZWZvcmUsIGBkb19tYWR2aXNlYCBjb3ZlcnMgaXQsIGJ1dCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBzdGlsbCBhIHVzZWZ1bCBzcGVjaWZpYyB0YXJnZXQuIGBkYW1vbl9nZXRfZm9saW9gIGlzIGNydWNpYWwgc2luY2UgaXQncyBjYWxsZWQgZnJvbSBudW1lcm91cyBEQU1PTiBmdW5jdGlvbnMuIGBkb19taWdyYXRlX3BhZ2VzYCBpcyByZWxldmFudCBkdWUgdG8gY292ZXJpbmcgYHF1ZXVlX3BhZ2VzX3JhbmdlYC5cblxuSSBzaG91bGQgY2hlY2sgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIExldCdzIHNlZS4uLiAgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgKm5vdCogc3RhdGljLiBOZWl0aGVyIGlzIGBkYW1vbl9nZXRfZm9saW9gLCBgZG9fbWFkdmlzZWAsIG9yIGBkb19taWdyYXRlX3BhZ2VzYC4gVGhhdCdzIGdvb2QgdG8ga25vdywgbm8gaW50ZXJuYWwgbGlua2FnZSBpc3N1ZXMgaGVyZS5cblxuTGV0IG1lIGV4YW1pbmUgZW50cnkgcG9pbnRzIGEgbGl0dGxlIG1vcmUgdGhvcm91Z2hseS4gTG9va2luZyBhdCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgaXQncyBjYWxsZWQgZnJvbSBgbWFkdmlzZV9jb2xkYCBhbmQgYG1hZHZpc2VfcGFnZW91dGAsIHdoaWNoIGluIHR1cm4sIGFyZSBjYWxsZWQgZnJvbSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgZG9fbWFkdmlzZWAuIEZvciBgcXVldWVfZm9saW9zX3BtZGAgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAsIHRoZXkgYXJlIGNhbGxlZCBmcm9tIGBxdWV1ZV9wYWdlc19yYW5nZWAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkb19tYmluZGAgYW5kIGBtaWdyYXRlX3RvX25vZGVgLiBgZG9fbWJpbmRgIGlzIGNhbGxlZCBmcm9tIGBzeXNfbWJpbmRgLiBgbWlncmF0ZV90b19ub2RlYCBpcyBjYWxsZWQgZnJvbSBgZG9fbWlncmF0ZV9wYWdlc2AuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBkb19tYWR2aXNlYCwgYW5kIGBkb19taWdyYXRlX3BhZ2VzYC5cblxuQW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGVzZSBmdW5jdGlvbnMgYXJlOiBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBEQU1PTmAsIGBEQU1PTl9QQUREUmAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgTlVNQWAuXG5cbldhaXQgYSBtaW51dGUuLi4gaXMgYERBTU9OX1BBRERSYCBlc3NlbnRpYWwgZm9yIGBkYW1vbl9nZXRfZm9saW9gPyBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBjb21waWxhdGlvbiBkZXRhaWxzIGZvciBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNToxOC40MjE4MjE3MzRaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDAzOTU4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BzLWNvbW1vbi5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL01ha2VmaWxlPTM9b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxubW0vZGFtb24vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjAuODYyMjI0MjQyWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODEwNDc5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgb3BzLWNvbW1vbi5vYCBDb21waWxhdGlvbiBhbmQgREFNT04gTW9kdWxlIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBvcHMtY29tbW9uLm9gIGlzIG9ubHkgZ2V0dGluZyBidWlsdCBpZiBlaXRoZXIgYERBTU9OX1ZBRERSYCBvciBgREFNT05fUEFERFJgIGFyZSBkZWZpbmVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gVGhlIGtleSBzZWVtcyB0byBiZSBgZGFtb25fZ2V0X2ZvbGlvYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsIGFuZCBpcyBiZWluZyB1dGlsaXplZCBieSBib3RoIGBwYWRkci5jYCBhbmQgYGNvcmUuY2AsIGJ1dCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX0RBTU9OX1BBRERSYCBpcyB0dXJuZWQgb24uIEVzc2VudGlhbGx5LCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgYmFzZWQgb24gYERBTU9OX1BBRERSYC4gVGhpcyBhbHNvIG1ha2VzIHNlbnNlIGJlY2F1c2UgREFNT05fUEFERFIgcmVxdWlyZXMgdGhlIHVzZSBvZiBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoYXQncyBhIHZpdGFsIGNvbm5lY3Rpb24gZm9yIERBTU9OLiBOb3cgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBgb3BzLWNvbW1vbi5jYCBjb250YWlucyB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgaW52b2x2ZWQgaW4gdGhvc2UgY2FzZXMgYW5kIHdoeSB0aGF0IGRlcGVuZGVuY3kgaXMgc3RydWN0dXJlZCB0aGlzIHdheS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjEyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjQuNTQzMjc2OTc4WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL29wcy1jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQgKlxcbiAgMjE6XFx0ICogVGhlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBzdG9sZW4gZnJvbSB0aGUgJ3BhZ2VfaWRsZV9nZXRfZm9saW8oKScuICBXZVxcbiAgMjI6XFx0ICogc3RlYWwgcmF0aGVyIHRoYW4gcmV1c2UgaXQgYmVjYXVzZSB0aGUgY29kZSBpcyBxdWl0ZSBzaW1wbGUuXFxuICAyMzpcXHQgKi9cXG4gIDI0OlxcdHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiAgMjU6XFx0e1xcbiAgMjY6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4gIDI3OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdGlmICghcGFnZSlcXG4gIDMwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuICAzMzpcXHRcXHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxcbiAgMzQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzNTpcXHRcXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fFxcbiAgMzY6XFx0XFx0ICAgIGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSkge1xcbiAgMzc6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gIDM4OlxcdFxcdFxcdGZvbGlvID0gTlVMTDtcXG4gIDM5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjQuNTQzMzQ1NTY5WiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1Mzg2NTgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBkYW1vbl9nZXRfZm9saW9gICppcyogdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gYG9wcy1jb21tb24uY2AuIFRoZXJlZm9yZSwgd2UgbmVlZCBlaXRoZXIgYERBTU9OX1ZBRERSYCBvciBgREFNT05fUEFERFJgLCBhbmQgSSdtIGxpc3RpbmcgYERBTU9OX1BBRERSYC5cblxuTm93LCBsZXQncyBjYXN0IGEgd2lkZXIgbmV0IGFuZCBsb29rIGZvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkLlxuXG5JIHNlZSB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50LCBzcGVjaWZpY2FsbHkgYmVjYXVzZSBvZiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYC4gQWxzbywgYE5VTUFgIGlzIGEgbXVzdC1oYXZlIGRlcGVuZGVuY3kgaGVyZSBzaW5jZSBpdCdzIGRpcmVjdGx5IHRpZWQgdG8gYG1lbXBvbGljeS5jYC4gRmluYWxseSwgYFpPTkVfREVWSUNFYCBpcyBjcml0aWNhbC4gV2UgbmVlZCB0aGlzIHNvIHdlIGNhbiBwcm9wZXJseSB0ZXN0IHRoZSBgZm9saW9faXNfem9uZV9kZXZpY2VgIGJyYW5jaC4gRnVydGhlcm1vcmUsIGBaT05FX0RFVklDRWAgbmVjZXNzaXRhdGVzIGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC5cblxuVGhlIGxvZ2ljIGhlcmUgaXMgc291bmQ6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pYCBjaGVja3MgdGhyb3VnaG91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLiBJdCdzIHRhcmdldGVkIGF0IHByZXZlbnRpbmcgYW55IHVud2FudGVkIG9wZXJhdGlvbnMgb24gWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIHRoZSBleGVjdXRpb24gZmxvdyBvZiBtZW1vcnkgb3BlcmF0aW9ucyB3aGVuIFpPTkVfREVWSUNFIG1lbW9yeSBpcyBpbnZvbHZlZC4gQW5kLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBzbyBpdCdzIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gU3BlY2lmaWNhbGx5LCB2aWEgaW50ZXJmYWNlcyBsaWtlIGBtYWR2aXNlYCwgYG1iaW5kYCwgYG1pZ3JhdGVfcGFnZXNgLCBhbmQgdGhlIERBTU9OIHN5c2ZzL2RlYnVnZnMuXG5cbkFscmlnaHQsIHdpdGggYWxsIHRoYXQgc29ydGVkLCBpdCdzIHRpbWUgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjUxLCJPdXRwdXRUb2tlbnMiOjE5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjMxLjA4MjAwNzE4MloiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzYyODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9nZXRfZm9saW9cIixcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwiZG9fbWFkdmlzZVwiLFxuICAgIFwiZG9fbWlncmF0ZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoREFNT04sIG1hZHZpc2UsIG1lbXBvbGljeSkgdG8gcHJldmVudCBwcm9jZXNzaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBaT05FX0RFVklDRSBtZW1vcnkuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSwgbWJpbmQsIG1pZ3JhdGVfcGFnZXMsIGFuZCBEQU1PTiBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2dldF9mb2xpb1wiLFxuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJkb19tYWR2aXNlXCIsXG4gICAgXCJkb19taWdyYXRlX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pYCBjaGVja3MgaW4gc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIChEQU1PTiwgbWFkdmlzZSwgbWVtcG9saWN5KSB0byBwcmV2ZW50IHByb2Nlc3NpbmcgWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgZm9yIG1lbW9yeSBvcGVyYXRpb25zIG9uIFpPTkVfREVWSUNFIG1lbW9yeS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlLCBtYmluZCwgbWlncmF0ZV9wYWdlcywgYW5kIERBTU9OIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlqdx4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 01:54:14 +0000 UTC FinishedAt: 2026-07-30 02:15:32 +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": "ae98967f6e94c2239d81795f9f6c987add5518c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "DAMON", "DAMON_PADDR", "TRANSPARENT_HUGEPAGE", "NUMA" ], "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": "ae98967f6e94c2239d81795f9f6c987add5518c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE", "DAMON", "DAMON_PADDR", "TRANSPARENT_HUGEPAGE", "NUMA" ], "series_id": "5fc6c486-9572-4b32-a36e-657c4ecafc59" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_get_folio", "madvise_free_huge_pmd", "do_madvise", "do_migrate_pages" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7ZG9fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoREFNT04sIG1hZHZpc2UsIG1lbXBvbGljeSkgdG8gcHJldmVudCBwcm9jZXNzaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBaT05FX0RFVklDRSBtZW1vcnkuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSwgbWJpbmQsIG1pZ3JhdGVfcGFnZXMsIGFuZCBEQU1PTiBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjdmMTRlYzI1ZGI3ZGQ3ZTRhYjRmNDVkOTgwYzg2OWIyNWE5ODRjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjEyOjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggZmJkYTcwZDhlYTRkMC4uYWYzYTllYWQxOWUwNSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtMzIsNyAmIzQzOzMyLDggQEAgc3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXG4gXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4gXHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmICh1bmxpa2VseShwYWdlX2ZvbGlvKHBhZ2UpICE9IGZvbGlvKSB8fCAhZm9saW9fdGVzdF9scnUoZm9saW8pKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykgfHxcbiYjNDM7XHQgICAgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKSB7XG4gXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdGZvbGlvID0gTlVMTDtcbiBcdH1cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggNzM1MjJmMjk2Y2VlMi4uMGI0ODExMjU3NDg4MiAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yMzM4LDYgJiM0MzsyMzM4LDEwIEBAIGJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0fVxuIFxuIFx0Zm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpO1xuJiM0MztcbiYjNDM7XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIG90aGVyIHByb2Nlc3NlcyBhcmUgbWFwcGluZyB0aGlzIGZvbGlvLCB3ZSBjb3VsZG4mIzM5O3QgZGlzY2FyZFxuIFx0ICogdGhlIGZvbGlvIHVubGVzcyB0aGV5IGFsbCBkbyBNQURWX0ZSRUUgc28gbGV0JiMzOTtzIHNraXAgdGhlIGZvbGlvLlxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggMDdhMjFjYTMxYmFkNC4uZmZkNmE2ODMyMGE4NiAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jXG5AQCAtMzk1LDYgJiM0MzszOTUsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFxuIFx0XHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XG4gXG4mIzQzO1x0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuJiM0MztcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuJiM0MztcbiBcdFx0LyogRG8gbm90IGludGVyZmVyZSB3aXRoIG90aGVyIG1hcHBpbmdzIG9mIHRoaXMgZm9saW8gKi9cbiBcdFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxuIFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggNTcyMGY3ZjU0ZDk0Mi4uYmQ3OWU2MWE0MGQxYSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY2OCw2ICYjNDM7NjY4LDggQEAgc3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiBcdH1cbiBcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm47XG4gXHRpZiAoIShxcC1cdTAwM2VmbGFncyBcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxuIFx0ICAgICF2bWFfbWlncmF0YWJsZSh3YWxrLVx1MDAzZXZtYSkgfHxcbiBcdCAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLVx1MDAzZXBhZ2VsaXN0LCBxcC1cdTAwM2VmbGFncykpXG5AQCAtNzk3LDYgJiM0Mzs3OTksOCBAQCBzdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKHB0ZXApKTtcbiBcdGlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSlcbiBcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0aWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgfHxcbiBcdCAgICAhdm1hX21pZ3JhdGFibGUod2Fsay1cdTAwM2V2bWEpKSB7XG4gXHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7ZG9fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoREFNT04sIG1hZHZpc2UsIG1lbXBvbGljeSkgdG8gcHJldmVudCBwcm9jZXNzaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBaT05FX0RFVklDRSBtZW1vcnkuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSwgbWJpbmQsIG1pZ3JhdGVfcGFnZXMsIGFuZCBEQU1PTiBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjdmMTRlYzI1ZGI3ZGQ3ZTRhYjRmNDVkOTgwYzg2OWIyNWE5ODRjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDAyOjEyOjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCmluZGV4IGZiZGE3MGQ4ZWE0ZDAuLmFmM2E5ZWFkMTllMDUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKQEAgLTMyLDcgJiM0MzszMiw4IEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKQogCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKIAlpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKQogCQlyZXR1cm4gTlVMTDsKLQlpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkgewomIzQzOwlpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fAomIzQzOwkgICAgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKSB7CiAJCWZvbGlvX3B1dChmb2xpbyk7CiAJCWZvbGlvID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCA3MzUyMmYyOTZjZWUyLi4wYjQ4MTEyNTc0ODgyIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTIzMzgsNiAmIzQzOzIzMzgsMTAgQEAgYm9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJfQogCiAJZm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpOwomIzQzOwomIzQzOwlpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJLyoKIAkgKiBJZiBvdGhlciBwcm9jZXNzZXMgYXJlIG1hcHBpbmcgdGhpcyBmb2xpbywgd2UgY291bGRuJiMzOTt0IGRpc2NhcmQKIAkgKiB0aGUgZm9saW8gdW5sZXNzIHRoZXkgYWxsIGRvIE1BRFZfRlJFRSBzbyBsZXQmIzM5O3Mgc2tpcCB0aGUgZm9saW8uCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggMDdhMjFjYTMxYmFkNC4uZmZkNmE2ODMyMGE4NiAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21hZHZpc2UuYwpAQCAtMzk1LDYgJiM0MzszOTUsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCiAJCWZvbGlvID0gcG1kX2ZvbGlvKG9yaWdfcG1kKTsKIAomIzQzOwkJaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSkKJiM0MzsJCQlnb3RvIGh1Z2VfdW5sb2NrOwomIzQzOwogCQkvKiBEbyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbWFwcGluZ3Mgb2YgdGhpcyBmb2xpbyAqLwogCQlpZiAoZm9saW9fbWF5YmVfbWFwcGVkX3NoYXJlZChmb2xpbykpCiAJCQlnb3RvIGh1Z2VfdW5sb2NrOwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA1NzIwZjdmNTRkOTQyLi5iZDc5ZTYxYTQwZDFhIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb2xpY3kuYwpAQCAtNjY4LDYgJiM0Mzs2NjgsOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogCX0KIAlpZiAoIXF1ZXVlX2ZvbGlvX3JlcXVpcmVkKGZvbGlvLCBxcCkpCiAJCXJldHVybjsKJiM0MzsJaWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSkKJiM0MzsJCXJldHVybjsKIAlpZiAoIShxcC0mZ3Q7ZmxhZ3MgJmFtcDsgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fAogCSAgICAhdm1hX21pZ3JhdGFibGUod2Fsay0mZ3Q7dm1hKSB8fAogCSAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLSZndDtwYWdlbGlzdCwgcXAtJmd0O2ZsYWdzKSkKQEAgLTc5Nyw2ICYjNDM7Nzk5LDggQEAgc3RhdGljIGludCBxdWV1ZV9mb2xpb3NfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCWZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4ocHRlcCkpOwogCWlmICghcXVldWVfZm9saW9fcmVxdWlyZWQoZm9saW8sIHFwKSkKIAkJZ290byB1bmxvY2s7CiYjNDM7CWlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpCiYjNDM7CQlnb3RvIHVubG9jazsKIAlpZiAoIShmbGFncyAmYW1wOyAoTVBPTF9NRl9NT1ZFIHwgTVBPTF9NRl9NT1ZFX0FMTCkpIHx8CiAJICAgICF2bWFfbWlncmF0YWJsZSh3YWxrLSZndDt2bWEpKSB7CiAJCXFwLSZndDtucl9mYWlsZWQmIzQzOyYjNDM7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY3CgkJCQkJCQlvdXRwdXQ6IDc3CgkJCQkJCQl0aG91Z2h0czogNDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBpdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMuIEkgc2VlIGl0IHRvdWNoZXMgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21hZHZpc2UuY2AsIGFuZCBgbW0vbWVtcG9saWN5LmNgLiBGcm9tIGEgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRpbmcgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzLiBUaGlzIHNob3VsZCBhdm9pZCBwcm9jZXNzaW5nIHpvbmUgZGV2aWNlIGZvbGlvcywgd2hpY2ggaXMgYSBzZW5zaWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBhY3Jvc3MgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXM6IERBTU9OLCBtYWR2aXNlLCBhbmQgbWVtcG9saWN5LgoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gVGhlIHBhdGNoIG1vZGlmaWVzOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBgcXVldWVfZm9saW9zX3BtZGAsIGFuZCBgcXVldWVfZm9saW9zX2h1Z2V0bGJgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaW5mbHVlbmNlLiBBcmUgdGhlc2UgZnVuY3Rpb25zIHN0YXRpYyBvciBnbG9iYWw/IEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHN0cnVjdHVyZS4gT2theSwgbGV0JiMzOTtzIHNlZS4gYGRhbW9uX2dldF9mb2xpb2AgYW5kIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGFyZSAqbm9uLXN0YXRpYyosIHdoaWNoIG1lYW5zIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAgYXJlIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIHZpc2liaWxpdHkuIEhtbW0sIHNvIEkgc2hvdWxkIHNlZSB3aGF0IGNhbGxzIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIAoKU2luY2UgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgaXMgc3RhdGljLCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBtYWR2aXNlX2NvbGRgLCBgbWFkdmlzZV9wYWdlb3V0YCwgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBvciBgZG9fbWFkdmlzZWAuIFRoZSBwYXRjaCB3aWxsIGJlIGNhbGxlZCBieSBvbmUgb2YgdGhvc2UgZnVuY3Rpb25zLiBTaW1pbGFybHksIGZvciB0aGUgc3RhdGljIGBxdWV1ZV9mb2xpb3NfcG1kYCBhbmQgYHF1ZXVlX2ZvbGlvc19odWdldGxiYCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlYCwgYHF1ZXVlX3BhZ2VzX3JhbmdlYCBhbmQgYGRvX21iaW5kYC4KCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgYW5kIGBkYW1vbl9nZXRfZm9saW9gIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZnJvbSB0aGlzIGluaXRpYWwgYW5hbHlzaXMuIFRoZXNlIGFyZSB2aXNpYmxlIGFuZCwgdGh1cywgcHJvYmFibHkgdGhlIHBvaW50cyBvZiBlbnRyeSBhbmQgaW50ZWdyYXRpb24gb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkfGJvb2x8c3RydWN0IGZvbGlvIFxcKikgKGRhbW9uX2dldF9mb2xpb3xtYWR2aXNlX2ZyZWVfaHVnZV9wbWR8bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlfHF1ZXVlX2ZvbGlvc19wbWR8cXVldWVfZm9saW9zX2h1Z2V0bGIpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfd3BfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5LVx0XHRcdCAgIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyMzU9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMzE0LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyMzE1OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0yMzE2LVx0XHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcbi0tXG5tbS9tYWR2aXNlLmM9MzQzPXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jLTM1Mi1cbm1tL21hZHZpc2UuYzozNTM6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbm1tL21hZHZpc2UuYy0zNTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTItXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbm1tL21lbXBvbGljeS5jLTY1NC17XG4tLVxubW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzc1LVxubW0vbWVtcG9saWN5LmM6Nzc2OnN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbm1tL21lbXBvbGljeS5jLTc3Ny1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQ2FsbGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlnIGludG8gdGhpcy4gTXkgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyB0aGVzZSB0aHJlZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lczogYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAuIEtub3dpbmcgdGhlIGNhbGxlcnMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcyBhcmUgYmVpbmcgbGV2ZXJhZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2Ygd29ya2xvYWRzIGFuZCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIHRyaWdnZXIgdGhlaXIgaW52b2NhdGlvbiwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIHN5c3RlbSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpbiBzY2VuYXJpb3MgaW52b2x2aW5nIHBhZ2UgcmVjbGFpbSwgY29sZCBkYXRhIGV2aWN0aW9uLCBvciBodWdlIHBhZ2UgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbnMgd2lsbCBnaXZlIGluc2lnaHQgaW50byB0aGUgbG9naWMgZHJpdmluZyB0aGVzZSBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MzQzPXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jLTM1Mi1cbm1tL21hZHZpc2UuYzozNTM6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbm1tL21hZHZpc2UuYy0zNTQtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xubW0vbWFkdmlzZS5jOjU3MjpcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXG5tbS9tYWR2aXNlLmMtNTczLVx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwsIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHByaW1hcmlseSBsZXZlcmFnZWQgd2l0aGluIHRoZSBgY29sZF93YWxrX29wc2AgYW5kLCBtb3JlIHRoYW4gbGlrZWx5LCBgcGFnZW91dF93YWxrX29wc2Agc3RydWN0dXJlcy4gVGhhdCYjMzk7cyBteSBpbW1lZGlhdGUgd29ya2luZyBoeXBvdGhlc2lzLgoKTm93LCB0byByZWFsbHkgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGhvdyB0aGVzZSBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGFjdHVhbGx5ICpxdWV1ZWQqIGZvciBwcm9jZXNzaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGludG8gYHF1ZXVlX2ZvbGlvc19wbWRgIGFuZCBgcXVldWVfZm9saW9zX2h1Z2V0bGJgLiBUaGV5JiMzOTtyZSBwcm9iYWJseSBrZXkgdG8gd2hlcmUgYW5kIHdoZW4gdGhlc2UgY29sZCBvciBwYWdlb3V0IG9wZXJhdGlvbnMgY29tZSBpbnRvIHBsYXkuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZnVuY3Rpb25zIHdpbGwgc2hvdyBtZSBob3cgdGhpcyBgbWFkdmlzZWAgaGludCBpcyB1c2VkIGF0IGEgYnJvYWRlciBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9mb2xpb3NfcG1kfHF1ZXVlX2ZvbGlvc19odWdldGxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTItXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbm1tL21lbXBvbGljeS5jLTY1NC17XG4tLVxubW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzAyLVx0aWYgKHB0bCkge1xubW0vbWVtcG9saWN5LmM6NzAzOlx0XHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XG5tbS9tZW1wb2xpY3kuYy03MDQtXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tLVxubW0vbWVtcG9saWN5LmMtNzc1LVxubW0vbWVtcG9saWN5LmM6Nzc2OnN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbm1tL21lbXBvbGljeS5jLTc3Ny1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tZW1wb2xpY3kuYz05NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcbm1tL21lbXBvbGljeS5jOjk1OTpcdC5odWdldGxiX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX2h1Z2V0bGIsXG5tbS9tZW1wb2xpY3kuYy05NjAtXHQucG1kX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcbi0tXG5tbS9tZW1wb2xpY3kuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcbm1tL21lbXBvbGljeS5jOjk2NjpcdC5odWdldGxiX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX2h1Z2V0bGIsXG5tbS9tZW1wb2xpY3kuYy05NjctXHQucG1kX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIGBtbV93YWxrX29wc2AgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYG1tX3dhbGtfb3BzYCBhcmUgdXNlZC4gVGhpcyBzZWVtcyB0byBiZSB3aGVyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYWN0aW9uIGhhcHBlbnMsIHBhcnRpY3VsYXJseSBmcm9tIHRoZSBsb29rcyBvZiBpdCwgd2l0aCBgZG9fbWJpbmRgIG9yIGBtYmluZGAgZHJpdmluZyBtZW1wb2xpY3kgY2hhbmdlcyBhbmQgYG1hZHZpc2VgIGZvciB0aGUgbWFkdmlzZSBzdHVmZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGF0IGludGVyYWN0aW9uIHBvaW50IGlzLiBJJiMzOTtsbCBiZXQgaXQmIzM5O3Mgc29tZXRoaW5nIGxpa2UgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCB0aGF04oCZcyB0aGUga2V5IGZ1bmN0aW9uLiBUaW1lIHRvIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgYXJlYSBhbmQgY29ubmVjdCB0aGUgZG90cy4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sZF93YWxrX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MzUzPXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWFkdmlzZS5jLTU3MC1cbm1tL21hZHZpc2UuYzo1NzE6c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xubW0vbWFkdmlzZS5jLTU3Mi1cdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXG4tLVxubW0vbWFkdmlzZS5jPTU3Nj1zdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21hZHZpc2UuYy01ODctXHR0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTtcbm1tL21hZHZpc2UuYzo1ODg6XHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCwgXHUwMDI2Y29sZF93YWxrX29wcyxcbm1tL21hZHZpc2UuYy01ODktXHRcdFx0XHUwMDI2d2Fsa19wcml2YXRlKTtcbi0tXG5tbS9tYWR2aXNlLmM9NjE0PXN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWFkdmlzZS5jLTYyMy1cdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xubW0vbWFkdmlzZS5jOjYyNDpcdHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLCBcdTAwMjZjb2xkX3dhbGtfb3BzLFxubW0vbWFkdmlzZS5jLTYyNS1cdFx0XHQgICAgXHUwMDI2d2Fsa19wcml2YXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG1hZHZpc2VgIEJlaGF2aW9yKioKCkFscmlnaHQsIEkmIzM5O20gdHJhY2luZyBiYWNrIHNvbWUgYG1hZHZpc2VgIGNhbGxzIGhlcmUsIGZvY3VzaW5nIG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBTZWVtcyBsaWtlIGBtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZWAgYW5kIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAgYXJlIHRoZSBrZXkgY2FsbGVycyBvZiBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZXNlIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5JiMzOTtyZSBiZWluZyB1c2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIGhvdyB0aGUgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGVzZSBjYWxscy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGludGVuZGVkIGJlaGF2aW9yIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgVk1BIGFuZCBob3cgdGhlIGhpbnRzIG9yIGZsYWdzIHBhc3NlZCB0byBgbWFkdmlzZWAgYXJlIGJlaW5nIGludGVycHJldGVkIGFuZCBhY3RlZCB1cG9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgVk1BIHN0YXRlcyBhbmQgdHJhbnNpdGlvbnMgdGhhdCBoYXBwZW4gaW4gcmVzcG9uc2UgdG8gdGhlc2UgYG1hZHZpc2VgIGhpbnRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgYmVpbmcgZW1wbG95ZWQgaW4gdGhpcyBzZWN0aW9uIG9mIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfY29sZF9wYWdlX3JhbmdlfG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xuLS1cbm1tL21hZHZpc2UuYy01NzUtXG5tbS9tYWR2aXNlLmM6NTc2OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG5tbS9tYWR2aXNlLmMtNTc3LVx0XHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmM9NTk4PXN0YXRpYyBsb25nIG1hZHZpc2VfY29sZChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtNjA3LVx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVx1MDAzZW1tKTtcbm1tL21hZHZpc2UuYzo2MDg6XHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jLTYwOS1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tLVxubW0vbWFkdmlzZS5jLTYxMy1cbm1tL21hZHZpc2UuYzo2MTQ6c3RhdGljIHZvaWQgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21hZHZpc2UuYy02MTUtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21hZHZpc2UuYz02Mjk9c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy02NDgtXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3ItXHUwMDNlbW0pO1xubW0vbWFkdmlzZS5jOjY0OTpcdG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKFx1MDAyNnRsYiwgdm1hLCBcdTAwMjZtYWR2X2JlaGF2aW9yLVx1MDAzZXJhbmdlKTtcbm1tL21hZHZpc2UuYy02NTAtXHR0bGJfZmluaXNoX21tdShcdTAwMjZ0bGIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDQ5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBtYWR2aXNlYCBDYWxsZXJzKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGdvdCBgbWFkdmlzZV9jb2xkYCBhbmQgYG1hZHZpc2VfcGFnZW91dGAgZmxhZ2dlZCBhcyB0aGUgcHJpbWFyeSBjYWxsZXJzIGhlcmUuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbnRvIGBxdWV1ZV9wYWdlc193YWxrX29wc2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsIHRvIHRydWx5IGdyYXNwIHRoZSBmbG93LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3F1ZXVlX3BhZ2VzX3dhbGtfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTkxNz1zdGF0aWMgaW50IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2Fsayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy05NTctXG5tbS9tZW1wb2xpY3kuYzo5NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcbm1tL21lbXBvbGljeS5jLTk1OS1cdC5odWdldGxiX2VudHJ5XHRcdD0gcXVldWVfZm9saW9zX2h1Z2V0bGIsXG4tLVxubW0vbWVtcG9saWN5LmM9OTg3PXF1ZXVlX3BhZ2VzX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMDAwLVx0Y29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSAoZmxhZ3MgXHUwMDI2IE1QT0xfTUZfV1JMT0NLKSA/XG5tbS9tZW1wb2xpY3kuYzoxMDAxOlx0XHRcdFx1MDAyNnF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzIDogXHUwMDI2cXVldWVfcGFnZXNfd2Fsa19vcHM7XG5tbS9tZW1wb2xpY3kuYy0xMDAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrOiBgcXVldWVfcGFnZXNfcmFuZ2VgIGluIEZvY3VzKioKCkFscmlnaHQsIHNvIHRoZSBwcmltYXJ5IHRoaW5nIEkmIzM5O20gZm9jdXNpbmcgb24gcmlnaHQgbm93IGlzIHRoZSBmdW5jdGlvbiBgcXVldWVfcGFnZXNfcmFuZ2VgLiBUaGF0JiMzOTtzIHRoZSBjYWxsZXIuIFVuZGVyc3RhbmRpbmcgKml0cyogZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCB3aGVyZSB0aGUgYXBwbGljYXRpb24gZmxvdyBpcyByaWdodCBub3cuIEl0IG1lYW5zIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHdoYXQga2luZCBvZiBsb2dpYyBpcyBkcml2aW5nICppdCogYW5kIHRoZW4gd29yayBiYWNrIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFdoYXQgdHJpZ2dlcnMgKnRoYXQqIG9uZT8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgd2hhdCBwcmVjaXNlbHkgaXMgaXQgdHJ5aW5nIHRvIGFjaGlldmU/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGRpdmluZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgYHF1ZXVlX3BhZ2VzX3JhbmdlYCBpbnRlcmFjdHMgd2l0aCBvdGhlciBjb21wb25lbnRzIGFuZCB3aHkgaXQgaXMgY2FsbGluZyB3aGF0IGl0IGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV9wYWdlc19yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz02ODk9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1wb2xpY3kuYy03NDktXHRcdFx0ICogbWlncmF0ZV9wYWdlcyhcdTAwMjZwYWdlbGlzdCkgcmV0dXJucyBucl9mYWlsZWQgZm9saW9zLCBzb1xubW0vbWVtcG9saWN5LmM6NzUwOlx0XHRcdCAqIGNoZWNrIFwmIzM0O2xhcmdlXCYjMzQ7IG5vdyBzbyB0aGF0IHF1ZXVlX3BhZ2VzX3JhbmdlKCkgcmV0dXJuc1xubW0vbWVtcG9saWN5LmMtNzUxLVx0XHRcdCAqIGEgY29tcGFyYWJsZSBucl9mYWlsZWQgZm9saW9zLiAgVGhpcyBkb2VzIGltcGx5IHRoYXRcbi0tXG5tbS9tZW1wb2xpY3kuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcbi0tXG5tbS9tZW1wb2xpY3kuYy05NzctICpcbm1tL21lbXBvbGljeS5jOjk3ODogKiBxdWV1ZV9wYWdlc19yYW5nZSgpIG1heSByZXR1cm46XG5tbS9tZW1wb2xpY3kuYy05NzktICogMCAtIGFsbCBwYWdlcyBhbHJlYWR5IG9uIHRoZSByaWdodCBub2RlLCBvciBzdWNjZXNzZnVsbHkgcXVldWVkIGZvciBtb3Zpbmdcbi0tXG5tbS9tZW1wb2xpY3kuYz05ODY9c3RhdGljIGxvbmdcbm1tL21lbXBvbGljeS5jOjk4NzpxdWV1ZV9wYWdlc19yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS9tZW1wb2xpY3kuYy05ODgtXHRcdG5vZGVtYXNrX3QgKm5vZGVzLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxuLS1cbm1tL21lbXBvbGljeS5jPTEyODk9c3RhdGljIGxvbmcgbWlncmF0ZV90b19ub2RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgc291cmNlLCBpbnQgZGVzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMzIwLVx0ICovXG5tbS9tZW1wb2xpY3kuYzoxMzIxOlx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHZtYS1cdTAwM2V2bV9zdGFydCwgbW0tXHUwMDNldGFza19zaXplLCBcdTAwMjZubWFzayxcbm1tL21lbXBvbGljeS5jLTEzMjItXHRcdFx0XHQgICAgICBmbGFncyB8IE1QT0xfTUZfRElTQ09OVElHX09LLCBcdTAwMjZwYWdlbGlzdCk7XG4tLVxubW0vbWVtcG9saWN5LmM9MTQ5Mz1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNTU2LVx0ICovXG5tbS9tZW1wb2xpY3kuYzoxNTU3Olx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLFxubW0vbWVtcG9saWN5LmMtMTU1OC1cdFx0XHRmbGFncyB8IE1QT0xfTUZfSU5WRVJUIHwgTVBPTF9NRl9XUkxPQ0ssIFx1MDAyNnBhZ2VsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIxMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ2FsbHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggcmVzcGVjdCB0byBodWdlIHBhZ2VzIGFuZCBOVU1BLiBUaGlua2luZyBpdCB0aHJvdWdoLCB0aGUga2V5IGNhbGxzIGluaXRpYXRpbmcgdGhpcyBwcm9jZXNzIGFwcGVhciB0byBiZSBgZG9fbWJpbmRgIGFuZCBgbWlncmF0ZV90b19ub2RlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIE5vdywgd2hlbiBkZWFsaW5nIHdpdGggdGhhdCBsZXZlbCBvZiBpbnRlcmFjdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXJuZWF0aCBhbmQgdGhlIGltcG9ydGFudCBjYWxsIGluIHRoYXQgY2hhaW4gaXMgbGlrZWx5IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBHb2luZyBpbiB0aGVyZSBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gbWFwIG91dCB0aGUgaW50ZXJuYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI4OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjktXHRcdFx0ICAgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjIzNT12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzMTQtICovXG5tbS9odWdlX21lbW9yeS5jOjIzMTU6Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTIzMTYtXHRcdHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KVxuLS1cbm1tL21hZHZpc2UuYz02NTU9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtNjcxLVx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxubW0vbWFkdmlzZS5jOjY3MjpcdFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcbm1tL21hZHZpc2UuYy02NzMtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MDUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgbWFkdmlzZWAgd29ya3MsIHNwZWNpZmljYWxseSB0aGUgYE1BRFZfRlJFRWAgZmxhZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gZmluZCBob3cgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIGNvbm5lY3RzIHRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzZWUgaXQmIzM5O3MgY2FsbGluZyBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYC4gVGhhdCBpbW1lZGlhdGVseSBzcGFya3MgYSBxdWVzdGlvbiBpbiBteSBtaW5kOiB3aHkgdGhlIGp1bXAgdG8gSHVnZSBQTURzPyBJcyB0aGlzIHJlbGF0ZWQgdG8gZnJlZWluZyBsYXJnZXIgYmxvY2tzIG9mIG1lbW9yeSBhdCBvbmNlPwoKVGhlbiBJIHRoaW5rIGJhY2sgdG8gdGhlIGNhbGxzLiBJIHJlY2FsbCBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgaXMgYSBjb3JlIGZ1bmN0aW9uLiBJIGhhdmUgYSBodW5jaCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBgbWFkdmlzZV9mcmVlX3NpbmdsZV92bWFgIGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBsaW5rIHRvIGB2bWFgLCBhcyBgdm1hYCBpcyB0aGUgY29yZSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIHZpcnR1YWwgbWVtb3J5IGFyZWFzLiBJIHN1cHBvc2UgaXQgbXVzdCBiZSBzb21lIGtpbmQgb2YgaXRlcmF0aW9uIG9yIG1hbmlwdWxhdGlvbiBvZiB0aGUgdm1hIHN0cnVjdHVyZS4KClRoZSBjb25uZWN0aW9uIGZyb20gYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIHRvIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBpdCYjMzk7cyB1c2VkIHdpdGggYG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBwcm9iYWJseSBpbiB0aGUgaGFuZGxpbmcgb2YgYSBzcGVjaWZpYyB2aXJ0dWFsIG1lbW9yeSBzZWdtZW50IHRoYXQgcmVxdWlyZXMgYE1BRFZfRlJFRWAuIFRpbWUgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBhbmQgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfZnJlZV9wdGVfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTYyOT1zdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTY1NC1cbm1tL21hZHZpc2UuYzo2NTU6c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21hZHZpc2UuYy02NTYtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vbWFkdmlzZS5jPTgwMj1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy04MTEtXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XG5tbS9tYWR2aXNlLmM6ODEyOlx0XHQucG1kX2VudHJ5XHRcdD0gbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZSxcbm1tL21hZHZpc2UuYy04MTMtXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDM1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAgQ2FsbGVyKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoaXMgcGFydGljdWxhciBwcm9jZXNzLCBhbmQgdGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gTm93LCB3aGF0IGRvZXMgaXQgYWN0dWFsbHkgKmRvKj8gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCwgYnV0IGZvciBub3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpdHNlbGYgdHJpZ2dlcnMuCgpPa2F5LCBub3cgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IHRha2VzIG1lLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGRhbW9uX2dldF9mb2xpb2AsIHRoZSBuZXh0IHBpZWNlIHRvIGFuYWx5emUuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBmb2xpbyBpcyByZXRyaWV2ZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSB3b3JrZmxvdy4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZSBmb2xpbyBpcyBiZWluZyBoYW5kbGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMtMTgtXG5tbS9kYW1vbi9jb3JlLmM6MTk6LyogZm9yIGRhbW9uX2dldF9mb2xpbygpIHVzZWQgYnkgbm9kZSBlbGlnaWJsZSBtZW1vcnkgbWV0cmljcyAqL1xubW0vZGFtb24vY29yZS5jLTIwLSNpbmNsdWRlIFwmIzM0O29wcy1jb21tb24uaFwmIzM0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODI1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXG4tLVxubW0vZGFtb24vY29yZS5jLTI4NzYtICpcbm1tL2RhbW9uL2NvcmUuYzoyODc3OiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZGFtb25fZ2V0X2ZvbGlvKCkgZnJvbSBvcHMtY29tbW9uLmMsIHdoaWNoIGlzXG5tbS9kYW1vbi9jb3JlLmMtMjg3OC0gKiBvbmx5IGF2YWlsYWJsZSB3aGVuIENPTkZJR19EQU1PTl9QQUREUiBpcyBlbmFibGVkLiBJdCBhbHNvIHJlcXVpcmVzIHRoZVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yODgxPXN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI5MDQtXG5tbS9kYW1vbi9jb3JlLmM6MjkwNTpcdFx0XHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL2NvcmUuYy0yOTA2LVx0XHRcdFx0aWYgKCFmb2xpbykge1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMy0gKi9cbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNDpzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yNS17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTQzPXZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy01NC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo1NTpcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNTYtXHRpZiAoIWZvbGlvKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz03ND12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtODYtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6ODc6XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhwZm4pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTg4LVx0aWYgKCFmb2xpbylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtNy1cbm1tL2RhbW9uL29wcy1jb21tb24uaDo4OnN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mzg9c3RhdGljIHZvaWQgZGFtb25fcGFfbWtvbGQocGh5c19hZGRyX3QgcGFkZHIpXG5tbS9kYW1vbi9wYWRkci5jLTM5LXtcbm1tL2RhbW9uL3BhZGRyLmM6NDA6XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTQxLVxuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Njg9c3RhdGljIGJvb2wgZGFtb25fcGFfeW91bmcocGh5c19hZGRyX3QgcGFkZHIpXG5tbS9kYW1vbi9wYWRkci5jLTY5LXtcbm1tL2RhbW9uL3BhZGRyLmM6NzA6XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTcxLVx0Ym9vbCBhY2Nlc3NlZDtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE1Nz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNzUtXHRcdFx0XHRcdGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xubW0vZGFtb24vcGFkZHIuYzoxNzY6XHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbm1tL2RhbW9uL3BhZGRyLmMtMTc3LVx0XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGN0eCkge1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MjIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTI0Ni1cdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmM6MjQ3Olx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTI0OC1cdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0yNzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjg3LVx0d2hpbGUgKGFkZHIgXHUwMDNjIGRhbW9uX3BhX3BoeXNfYWRkcihyLVx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xubW0vZGFtb24vcGFkZHIuYzoyODg6XHRcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcbm1tL2RhbW9uL3BhZGRyLmMtMjg5LVx0XHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTMyNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9taWdyYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0zMzUtXHR3aGlsZSAoYWRkciBcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlYXIuZW5kLCBhZGRyX3VuaXQpKSB7XG5tbS9kYW1vbi9wYWRkci5jOjMzNjpcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xubW0vZGFtb24vcGFkZHIuYy0zMzctXHRcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM3My1cdHdoaWxlIChhZGRyIFx1MDAzYyBkYW1vbl9wYV9waHlzX2FkZHIoci1cdTAwM2Vhci5lbmQsIGFkZHJfdW5pdCkpIHtcbm1tL2RhbW9uL3BhZGRyLmM6Mzc0Olx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jLTM3NS1cdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjAyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIFpPTkVfREVWSUNFIEZvbGlvIEhhbmRsaW5nKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYGRhbW9uX2dldF9mb2xpb2AgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQsIGFuZCBpdCYjMzk7cyB1c2VkIGV4dGVuc2l2ZWx5IHdpdGhpbiBEQU1PTi4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0aGUgaW5jbHVzaW9uIG9mIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcy4gVGhpcyBjbGVhcmx5IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgWk9ORV9ERVZJQ0UgZm9saW9zIGZyb20gYmVpbmcgcHJvY2Vzc2VkLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIERBTU9OIGl0c2VsZiwgSSYjMzk7bGwgbG9vayBmb3IgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fUEFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9WQUREUmAuIEZvciBjb250ZXh0LCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyB0aGlzIG1pZ2h0IHJlbGF0ZSB0byBtYWR2aXNlLCBzbyBJJiMzOTtsbCBjaGVjayBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIChwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCkuIEFuZCBqdXN0IGZvciBjb21wbGV0ZW5lc3MsIGdpdmVuIERBTU9OJiMzOTtzIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBtZW1vcnkgcGxhY2VtZW50LCBJIHNob3VsZCBhbHNvIHZlcmlmeSBgQ09ORklHX05VTUFgIGlzIHN0aWxsIGNvbnNpZGVyZWQuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9LY29uZmlnYCB0byBzdGFydCBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGFyb3VuZCBgREFNT05gIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM4MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBteSBicmFpbiBqdXN0IGtpY2tlZCBpbiBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgemVyb2luZyBpbiBvbiB0aGUgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgY29uZmlndXJhdGlvbi4gVGltZSB0byB0YWtlIGEgbG9vayBhdCBpdC4gSSBrbm93IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZXR0aW5nIHF1aXRlIHdlbGwsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQmIzM5O3MgdGhlIHN5c3RlbSBsb2FkIGxpa2U/IEFyZSB3ZSBzZWVpbmcgYW55IHVuZXhwZWN0ZWQgbWVtb3J5IGZyYWdtZW50YXRpb24gb3IgcGVyZm9ybWFuY2UgZGlwcyB0aGF0IHRoaXMgY29uZmlnIG1pZ2h0IGJlIGludm9sdmVkIHdpdGg/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaWYgaXQgYWxpZ25zIHdpdGggdGhlIGFwcGxpY2F0aW9uJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBnb2Fscy4gQSBxdWljayBjaGVjayB3aWxsIGNvbmZpcm0gaWYgaXQgaXMgc2V0IGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9mcmVlX2h1Z2VfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfd3BfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5LVx0XHRcdCAgIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyMzU9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMzE0LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyMzE1OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0yMzE2LVx0XHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcbi0tXG5tbS9tYWR2aXNlLmM9NjU1PXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWFkdmlzZS5jLTY3MS1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kKSlcbm1tL21hZHZpc2UuYzo2NzI6XHRcdGlmIChtYWR2aXNlX2ZyZWVfaHVnZV9wbWQodGxiLCB2bWEsIHBtZCwgYWRkciwgbmV4dCkpXG5tbS9tYWR2aXNlLmMtNjczLVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgVEhQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgY29uZGl0aW9uYWxseSBjb21waWxpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGF0JiMzOTtzIG5vIHN1cnByaXNlOyBpdCYjMzk7cyBwcmFjdGljYWxseSB0aGUgY2VudHJhbCBmaWxlIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMgKFRIUCkuIE15IHNwaWRleS1zZW5zZSBpcyB0ZWxsaW5nIG1lIHRvIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHRoZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBvcHRpb24uIFRoYXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIGlzbiYjMzk7dCBpdD8gSWYgdGhhdCYjMzk7cyAqbm90KiBlbmFibGVkLCB0aGVuIHRoZSBlbnRpcmUgbW9kdWxlIGNvbnRhaW5pbmcgYG1tL2h1Z2VfbWVtb3J5LmNgIHdvbiYjMzk7dCBldmVuIGJlIHBhcnQgb2YgdGhlIGJ1aWxkLiBJdCYjMzk7cyBhIGtleSBkZXBlbmRlbmN5LiBObyBUSFAsIG5vIGNvZGUuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcy4gV2hlbiBJIHNlZSB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBJIGtub3cgdGhhdCBhbGwgdGhlIFRIUC1zcGVjaWZpYyBmdW5jdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb3JlIFRIUCBtYW5hZ2VtZW50IGxvZ2ljIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYXJlIGJlaW5nIGJyb3VnaHQgaW50byB0aGUga2VybmVsICpvbmx5KiBpZiB0aGUgdXNlciBjb25maWd1cmVzIHRoZSBrZXJuZWwgZm9yIFRIUCBzdXBwb3J0LiBJdOKAmXMgYW4gZXNzZW50aWFsIGxpbmsgaW4gdGhlIGNoYWluIGZvciBUSFAgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyBmdW5jdGlvbnMgbGlrZSBgX19hbGxvY19odWdlcGFnZWAsIGBfX2ZyZWVfaHVnZXBhZ2VgLCBgc3BsaXRfaHVnZV9wYWdlYCwgYW5kIHNvIG9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgbGlua2FnZSBoZWxwcyBtZSBkZWJ1ZyBUSFAgaXNzdWVzLiBLbm93aW5nICp3aGVuKiB0aGlzIGZpbGUgZ2V0cyBjb21waWxlZCBpcyBjcml0aWNhbCBmb3IgbmFycm93aW5nIGRvd24gdGhlIHNjb3BlIG9mIHBvdGVudGlhbCBwcm9ibGVtcyB3aGVuIHRyYWNraW5nIGJ1aWxkIGZhaWx1cmVzIG9yIGJlaGF2aW9yIHNwZWNpZmljIHRvIFRIUCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MzQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZzoKCioqTlVNQSBhbmQgTWVtb3J5IFBvbGljeTogQSBRdWljayBSZWNhcCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbW0vbWVtcG9saWN5LmNgLiBJIGFscmVhZHkga25ldyB0aGF0IHRoaXMgZmlsZSBkZWFscyB3aXRoIG1lbW9yeSBwb2xpY2llcywgYnV0IG5vdyBJJiMzOTttIG1ha2luZyB0aGUgY29ubmVjdGlvbiB3aXRoIE5VTUEuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGUgY29kZSBpbiBgbW0vbWVtcG9saWN5LmNgICpvbmx5KiBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aGVuIHRoZSBgQ09ORklHX05VTUFgIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIG5vdCBzdXJwcmlzaW5nLCBidXQgaXQmIzM5O3MgYW4gaW1wb3J0YW50IGRldGFpbCB0byBrZWVwIGZyb250IG9mIG1pbmQuIEl0IGNvbmZpcm1zIHRoYXQgdGhlIG1lbW9yeSBwb2xpY3kgZmVhdHVyZXMgYXJlIGludHJpbnNpY2FsbHkgdGllZCB0byBOVU1BIGFyY2hpdGVjdHVyZXMgYW5kIGRvbiYjMzk7dCBjb250cmlidXRlIHRvIHRoZSBrZXJuZWwgaW4gYSBub24tTlVNQSBidWlsZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBrZXJuZWwgc2l6ZSwgZnVuY3Rpb25hbGl0eSwgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2NwdXNldHMucnN0PTM0MT1wYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBub2RlIGxvY2FsIHRvIHdoZXJlIHRoZSB0YXNrIGlzIHJ1bm5pbmcsXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdDozNDI6ZXhjZXB0IHBlcmhhcHMgYXMgbW9kaWZpZWQgYnkgdGhlIHRhc2smIzM5O3MgTlVNQSBtZW1wb2xpY3kgb3IgY3B1c2V0XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdC0zNDMtY29uZmlndXJhdGlvbiwgc28gbG9uZyBhcyBzdWZmaWNpZW50IGZyZWUgbWVtb3J5IHBhZ2VzIGFyZSBhdmFpbGFibGUuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MzUyPXRoZWlyIGNvbnRhaW5pbmcgdGFzayYjMzk7cyBtZW1vcnkgc3ByZWFkIHNldHRpbmdzLiAgSWYgbWVtb3J5IHNwcmVhZGluZ1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q6MzUzOmlzIHR1cm5lZCBvZmYsIHRoZW4gdGhlIGN1cnJlbnRseSBzcGVjaWZpZWQgTlVNQSBtZW1wb2xpY3kgb25jZSBhZ2FpblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QtMzU0LWFwcGxpZXMgdG8gbWVtb3J5IHBhZ2UgYWxsb2NhdGlvbnMuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MzgyPXBhZ2VzIG9uIHRoZSBwYXJlbnQgbm9kZSB3aWxsIGJlIGFkanVzdGVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUsIGlmIHN1ZmZpY2llbnRcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0OjM4MzpyZXNvdXJjZXMgZXhpc3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRhc2smIzM5O3MgbWVtcG9saWN5IG9yIGNwdXNldCBjb25zdHJhaW50cy5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTM4NC1cbi0tXG5tbS9NYWtlZmlsZT04NT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVApXHQmIzQzOz0gaHVnZXRsYl92bWVtbWFwLm9cbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19OVU1BKSBcdCYjNDM7PSBtZW1wb2xpY3kub1xubW0vTWFrZWZpbGUtODctb2JqLSQoQ09ORklHX1NQQVJTRU1FTSlcdCYjNDM7PSBzcGFyc2Uub1xuLS1cbm1tL21lbXBvbGljeS5jPTM1OT1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKGdldF90YXNrX3BvbGljeSwgXCYjMzQ7a3ZtXCYjMzQ7KTtcbm1tL21lbXBvbGljeS5jLTM2MC1cbm1tL21lbXBvbGljeS5jOjM2MTpzdGF0aWMgY29uc3Qgc3RydWN0IG1lbXBvbGljeV9vcGVyYXRpb25zIHtcbm1tL21lbXBvbGljeS5jLTM2Mi1cdGludCAoKmNyZWF0ZSkoc3RydWN0IG1lbXBvbGljeSAqcG9sLCBjb25zdCBub2RlbWFza190ICpub2Rlcyk7XG4tLVxubW0vbWVtcG9saWN5LmM9NTY1PXZvaWQgbXBvbF9yZWJpbmRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIG5vZGVtYXNrX3QgKm5ldylcbi0tXG5tbS9tZW1wb2xpY3kuYy01NzctXG5tbS9tZW1wb2xpY3kuYzo1Nzg6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1wb2xpY3lfb3BlcmF0aW9ucyBtcG9sX29wc1tNUE9MX01BWF0gPSB7XG5tbS9tZW1wb2xpY3kuYy01NzktXHRbTVBPTF9ERUZBVUxUXSA9IHtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDI1PXN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtcG9saWN5LmMtMjA0MS0gKiBSZXR1cm5zIGVmZmVjdGl2ZSBwb2xpY3kgZm9yIGEgVk1BIGF0IHNwZWNpZmllZCBhZGRyZXNzLlxubW0vbWVtcG9saWN5LmM6MjA0MjogKiBGYWxscyBiYWNrIHRvIGN1cnJlbnQtXHUwMDNlbWVtcG9saWN5IG9yIHN5c3RlbSBkZWZhdWx0IHBvbGljeSwgYXMgbmVjZXNzYXJ5LlxubW0vbWVtcG9saWN5LmMtMjA0My0gKiBTaGFyZWQgcG9saWNpZXMgW3Rob3NlIG1hcmtlZCBhcyBNUE9MX0ZfU0hBUkVEXSByZXF1aXJlIGFuIGV4dHJhIHJlZmVyZW5jZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBSaWdodCBub3cgSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgLiBNYWtlcyBzZW5zZSDigJMgbWVtb3J5IG1vbml0b3JpbmcgYW5kIE5VTUEgYXJlIGNvbW1vbiBjb25zaWRlcmF0aW9ucy4gTm93LCBJJiMzOTttIHNlZWluZyBhIGNoZWNrIHVzaW5nIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3Mgc2tpcHBpbmcgWk9ORV9ERVZJQ0UgZm9saW9zLiBPa2F5LCBzbyBpZiBJIHdhbnQgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBpbnRlbmRlZCBiZWhhdmlvciBoZXJlLCB0aGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGF0IGxvZ2ljYWxseSBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmY29uZmlnIGFuZCBhbnkgcmVsZXZhbnQgYnVpbGQgc2NyaXB0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIxNz1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIyMS1cbm1tL0tjb25maWc6MTIyMjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIyMy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBtZW50aW9uIG9mIGBaT05FX0RFVklDRWAgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBXZSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gem9uZXMsIGFuZCB0aGUgJiMzNDtkZXZpY2UmIzM0OyBhc3BlY3Qgc3VnZ2VzdHMgaGFyZHdhcmUgb3IgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciwgbGlrZWx5IGluIGEgc3RvcmFnZSBjb250ZXh0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IGRlcGVuZGVuY2llcyBhbmQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBvZiBtb2RpZmljYXRpb25zLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNoYXJlZCByZXNvdXJjZSwgb3Igc29tZXRoaW5nIGlzb2xhdGVkIHRvIGEgc3BlY2lmaWMgem9uZT8gV2hhdCBvdGhlciBjb21wb25lbnRzIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgYFpPTkVfREVWSUNFYCBmdW5jdGlvbmFsaXR5PyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1pbmltaXplIHRoZSByaXNrIG9mIGludHJvZHVjaW5nIGluc3RhYmlsaXR5IG9yIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIHdoZW4gYWRkcmVzc2luZyBhbnkgdW5kZXJseWluZyBpc3N1ZXMuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNyaXRpY2FsIHBhdGhzIOKAkyB0aGUgb25lcyB0aGF0IGRpcmVjdGx5IGltcGFjdCBwZXJmb3JtYW5jZSwgcmVsaWFiaWxpdHksIGFuZCBzZWN1cml0eS4gSXQmIzM5O3MgdGltZSB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKlpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODItXHRkZXBlbmRzIG9uICFVTUxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjgzOlx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODQtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTYyPWNvbmZpZyBOVkRJTU1fUEZOXG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02NC1cdGRlZmF1bHQgTElCTlZESU1NXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjY1Olx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy02Ni1cdHNlbGVjdCBORF9DTEFJTVxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWc9MjA2PWNvbmZpZyBQQ0lfUDJQRE1BXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7UENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3BjaS9LY29uZmlnOjIwODpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmRyaXZlcnMvcGNpL0tjb25maWctMjA5LVx0I1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnPTU9Y29uZmlnIERDU1NCTEtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZy03LVx0cHJvbXB0IFwmIzM0O0RDU1NCTEsgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWc6ODpcdGRlcGVuZHMgb24gUzM5MCBcdTAwMjZcdTAwMjYgQkxPQ0sgXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZy05LVx0c2VsZWN0IEZTX0RBWFxuLS1cbmRyaXZlcnMveGVuL0tjb25maWc9MzM2PWNvbmZpZyBYRU5fVU5QT1BVTEFURURfQUxMT0NcbmRyaXZlcnMveGVuL0tjb25maWctMzM3LVx0Ym9vbCBcJiMzNDtVc2UgdW5wb3B1bGF0ZWQgbWVtb3J5IHJhbmdlcyBmb3IgZ3Vlc3QgbWFwcGluZ3NcJiMzNDtcbmRyaXZlcnMveGVuL0tjb25maWc6MzM4Olx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuZHJpdmVycy94ZW4vS2NvbmZpZy0zMzktXHRkZWZhdWx0IFhFTl9CQUNLRU5EIHx8IFhFTl9HTlRERVYgfHwgWEVOX0RPTTBcbi0tXG5mcy9LY29uZmlnPTU4PWNvbmZpZyBGU19EQVhcbi0tXG5mcy9LY29uZmlnLTYwLVx0ZGVwZW5kcyBvbiBNTVVcbmZzL0tjb25maWc6NjE6XHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnLTYyLVx0c2VsZWN0IEZTX0lPTUFQXG4tLVxuZnMvS2NvbmZpZz05MD1jb25maWcgRlNfREFYX1BNRFxuLS1cbmZzL0tjb25maWctOTMtXHRkZXBlbmRzIG9uIEZTX0RBWFxuZnMvS2NvbmZpZzo5NDpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWctOTUtXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4tLVxubW0vS2NvbmZpZz0xMjUyPWNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjUzLVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbm1tL0tjb25maWc6MTI1NDpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTI1NS1cdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1OTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqS2NvbmZpZyBEZXBlbmRlbmN5IENoZWNrIGZvciBaT05FX0RFVklDRSoqCgpPa2F5LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcHJvY2VlZCwgYnV0IEkmIzM5O3ZlIGxlYXJuZWQgZW5vdWdoIG92ZXIgdGhlIHllYXJzIHRvIGtub3cgdGhhdCBqdW1waW5nIHRvIGNvbmNsdXNpb25zIGNhbiBiZSBhIGNvc3RseSBtaXN0YWtlLiBMZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKnBvdGVudGlhbCogZGVwZW5kZW5jeSBsYW5kc2NhcGUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGUgYFpPTkVfREVWSUNFYCBvcHRpb24gaXMgYXQgcGxheSBoZXJlLCB3aGljaCBpcyBjbGVhcmx5IG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQuIEkmIzM5O2Qga2ljayBteXNlbGYgaWYgSSBkaWRuJiMzOTt0IHZlcmlmeSBpdHMgZGlyZWN0IGRlcGVuZGVuY2llcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYW55ICppbmRpcmVjdCogZGVwZW5kZW5jaWVzIG9uIG90aGVyIEtjb25maWcgdmFyaWFibGVzIGluIHRoaXMgYXJlYS4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2ssIGJ1dCBpdOKAmXMgY3JpdGljYWwgdG8gZXN0YWJsaXNoIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBzdGFydCBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3IgdGhlIGFyY2hpdGVjdHVyZSBpbiBnZW5lcmFsLiBUaGF0IGBLY29uZmlnYCBmaWxlIGhvbGRzIHRoZSBrZXlzIHRvIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMTc9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMjEtXG5tbS9LY29uZmlnOjEyMjI6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMjMtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgWk9ORV9ERVZJQ0UqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWxpZXMgb24gYFpPTkVfREVWSUNFYC4gVGhpcyBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBhbnkgbW9kdWxlcywgZnVuY3Rpb25zLCBvciBjb25maWd1cmF0aW9ucyB0aGF0IHV0aWxpemUgb3IgcmVmZXJlbmNlIHRoYXQgc3BlY2lmaWMgdmFyaWFibGUgb3Igb2JqZWN0LiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMgZmlyc3QsIGJ1dCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IGluZGlyZWN0IGRlcGVuZGVuY2llcyBjb3VsZCBiZSBjcnVjaWFsIOKAkyBzb21ldGhpbmcgdGhhdCBjYWxscyBhIGZ1bmN0aW9uIHRoYXQgKnVzZXMqIGBaT05FX0RFVklDRWAsIGZvciBleGFtcGxlLiBJJiMzOTtsbCBuZWVkIHRvIGFwcHJvYWNoIHRoaXMgbWV0aG9kaWNhbGx5LCBwZXJoYXBzIHN0YXJ0aW5nIHdpdGggYSBjb2RlIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIHRoZSB2YXJpYWJsZSBhbmQgdGhlbiBidWlsZGluZyBhIG1hcCBvZiBob3cgdGhleSByZWxhdGUgdG8gb3RoZXIgY29tcG9uZW50cy4gVGhlIGFyY2hpdGVjdHVyZSBpcyBrZXkgaGVyZS4gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgY29kZWJhc2UsIEkgbWlnaHQgbGV2ZXJhZ2Ugc29tZSB0b29saW5nIHRvIGF1dG9tYXRlIHRoZSBkZXBlbmRlbmN5IGFuYWx5c2lzIHRvIHNvbWUgZXh0ZW50LiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gZGVsdmUgaW50byB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBwb2ludHMuIFRoZSBhaW0gaXMgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2Ugb3IgbW9kaWZpY2F0aW9uIHRvIGBaT05FX0RFVklDRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIyMDpcdFx0ZGVmYXVsdCB5IGlmIEFSTTY0XG4xMjIxOlx0XG4xMjIyOlx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMjIzOlx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjEyMjQ6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTIyNTpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTIyNjpcdFxuMTIyNzpcdFx0aGVscFxuMTIyODpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTIyOTpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTIzMDpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjEyMzE6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMjMyOlx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjEyMzM6XHRcbjEyMzQ6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxuMTIzNTpcdFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXG4xMjM2Olx0XHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcbjEyMzc6XHRcdCAgb24gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cywgb24gcHJvY2Vzc29yIGZlYXR1cmVzLCBrZXJuZWwgY29uZmlnXG4xMjM4Olx0XHQgICg1IGxldmVsIHBhZ2UgdGFibGUpIGFuZCBwaHlzaWNhbCBtZW1vcnkgcHJlc2VudCBvbiB0aGUgc3lzdGVtLlxuMTIzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UgJmFtcDsgTUVNT1JZX0hPVFJFTU9WRSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgemVyb2VzIGluIG9uIGEgcmVsYXRpb25zaGlwOiBgWk9ORV9ERVZJQ0VgICpkZXBlbmRzKiBvbiBgTUVNT1JZX0hPVFJFTU9WRWAuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBMb2dpY2FsbHksIGlmIGBaT05FX0RFVklDRWAgaXMgcmVsaWFudCBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZGVwZW5kZW5jeSBpbiBkZXRhaWwuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyByZWxhdGlvbnNoaXAuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzcGVjaWZpY3Mgb2YgYE1FTU9SWV9IT1RSRU1PVkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpkb2VzKiBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0IGRvZXMgaXQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBgWk9ORV9ERVZJQ0VgLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBjb2RlLCBsb29raW5nIGF0IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGFuZCBhc3Nlc3Npbmcgd2hhdCBwb3RlbnRpYWwgaW1wYWN0IGBNRU1PUllfSE9UUkVNT1ZFYCYjMzk7cyBiZWhhdmlvdXIgaGFzIG9uIGBaT05FX0RFVklDRWAuIFRpbWUgdG8gZHJpbGwgZG93biBvbiBgTUVNT1JZX0hPVFJFTU9WRWAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTc4PWVuZGNob2ljZVxubW0vS2NvbmZpZy01NzktXG5tbS9LY29uZmlnOjU4MDpjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy01ODEtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIExhbmRzY2FwZSBvZiBgTUVNT1JZX0hPVFJFTU9WRWAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSAqcmVhbCogcGljdHVyZSBoZXJlPyYjMzQ7IEkgbmVlZCB0byBtYXAgb3V0IHRoZSBjb21wbGV0ZSBkZXBlbmRlbmN5IGdyYXBoIGZvciBgTUVNT1JZX0hPVFJFTU9WRWAuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgcG90ZW50aWFsbHkgY29tcGxleCBzeXN0ZW0sIGFuZCBhIGhvdC1yZW1vdmUgb3BlcmF0aW9uIGNhbiB0b3VjaCBhIHN1cnByaXNpbmcgbnVtYmVyIG9mIGNvbXBvbmVudHMsIGV2ZW4gd2hlbiBzZWVtaW5nbHkgaXNvbGF0ZWQuIEkgbmVlZCBhIG1lbnRhbCBjaGVja2xpc3QsIGEgc29ydCBvZiBob2xpc3RpYyB2aWV3IG9mIHRoZSBzeXN0ZW0mIzM5O3MgaW50ZXJhY3Rpb25zLgoKRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG9idmlvdXM6IHRoZSBrZXJuZWwgbW9kdWxlcyBkaXJlY3RseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCDigJMgdGhlIG9uZXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpb24sIGZyZWVpbmcsIE5VTUEgbm9kZSBoYW5kbGluZywgcGFnZSBtaWdyYXRpb24sIGV0Yy4gVGhvc2UgYXJlIHRoZSBmcm9udC1saW5lIGRlcGVuZGVuY2llcy4gQnV0IGl0JiMzOTtzIHJhcmVseSB0aGF0IHNpbXBsZS4gV2hhdCYjMzk7cyB1cHN0cmVhbT8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkIGFuZCBob3c/IFdoYXQgbGF5ZXJzIG9mIHRoZSBjb2RlIGFyZSB0aGUgZGVwZW5kZW5jaWVzIGVudGFuZ2xlZCBpbj8KClRoZW4sIEkmIzM5O20gYWxyZWFkeSBicmFuY2hpbmcgb3V0LiBBcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgaW1wbGljYXRpb25zPyBUb29scywgbW9uaXRvcmluZyBhZ2VudHMsIG9yIHN5c3RlbSBzZXJ2aWNlcyB0aGF0IG5lZWQgdG8gYmUgYXdhcmUgb2YsIG9yIHJlYWN0IHRvLCBhIG1lbW9yeSBob3QtcmVtb3ZlIGV2ZW50PyBBIG1pc3NlZCBub3RpZmljYXRpb24gaW4gdGhlIHJpZ2h0IHBsYWNlIGNhbiBsZWFkIHRvIHNlcmlvdXMgaW5zdGFiaWxpdHksIHNvIHRob3NlIGltcGxpY2F0aW9ucyBhcmUgY3JpdGljYWwgdG8gbXkgZXZhbHVhdGlvbi4gSSBjYW4mIzM5O3QgYmUgY2FyZWxlc3MgYWJvdXQgc3VjaCBhIGZ1bmRhbWVudGFsIGNoYW5nZS4KCkFuZCwgb2YgY291cnNlLCB0aGUgaGFyZHdhcmUuIFRoZSBCSU9TLCB0aGUgZmlybXdhcmUsIHRoZSBhY3R1YWwgcGh5c2ljYWwgbWVtb3J5IGNvbnRyb2xsZXJzIOKAkyB3aGF0JiMzOTtzIHRoZWlyIHJvbGUsIGFuZCBhcmUgdGhlcmUgYW55IGZpcm13YXJlIHF1aXJrcyBvciBsaW1pdGF0aW9ucyB0aGF0IHdpbGwgYml0ZSBtZSBkb3duIHRoZSByb2FkPyBUaGV5JiMzOTtyZSBhbHdheXMgdGhlIGhpZGRlbiB2YXJpYWJsZS4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNoZWNrIGFueSB2ZW5kb3IgZG9jdW1lbnRhdGlvbiBvbiBob3RwbHVnIHN1cHBvcnQsIG9yIGlmIHRoaXMgaXMgYW4gYXJlYSB3aGVyZSBJIGhhdmUgdG8gcmVseSBvbiBnb29kIG9sZC1mYXNoaW9uZWQgZW1waXJpY2FsIGRhdGEuCgpGaW5hbGx5LCBJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBlZGdlIGNhc2VzLiBFcnJvciBoYW5kbGluZywgdGhlIGltcGFjdCBvZiBpbnRlcnJ1cHRzIGR1cmluZyB0aGUgaG90LXJlbW92ZSBwcm9jZXNzLCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4uLiB0aGlzIGtpbmQgb2YgdGhpbmcgYWx3YXlzIGVuZHMgdXAgYmVpbmcgdGhlIG1vc3QgZGlmZmljdWx0IHBhcnQsIGFuZCB0aGUgbW9zdCByZXdhcmRpbmcgdG8gZ2V0IHJpZ2h0LiBJIGhhdmUgdG8gY29uc2lkZXIgZmF1bHQgdG9sZXJhbmNlOiB3aGF0IGhhcHBlbnMgaWYgdGhlIG9wZXJhdGlvbiBmYWlscyBtaWQtd2F5LCBhbmQgaG93IHdpbGwgaXQgYWZmZWN0IHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGF2YWlsYWJpbGl0eT8gSW4gYWRkaXRpb24gdG8gc2FmZXR5LCBJIG11c3QgZm9jdXMgb24gZGF0YSBpbnRlZ3JpdHkuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIGJ1aWxkIGEgbWVudGFsIGZyYW1ld29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBpZGVudGlmaWVkIGV2ZXJ5IHBvdGVudGlhbCBpbXBhY3QgcG9pbnQuIEl0JiMzOTtzIGEgY29tcGxleCBpbnRlcmFjdGlvbiwgYnV0IHRoZSBvbmx5IHdheSB0byB0YWNrbGUgYSBjb21wbGV4IHN5c3RlbSBjaGFuZ2Ugd2l0aCBjb25maWRlbmNlIGlzIHRvIGJlIGNvbXByZWhlbnNpdmUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggZGVwZW5kZW5jeSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Nzg6XHRlbmRjaG9pY2VcbiA1Nzk6XHRcbiA1ODA6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MTpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODI6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODM6XHRcbiA1ODQ6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODU6XHRcdGRlZl9ib29sIHlcbiA1ODY6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1ODEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGVwZW5kZW5jeSBBbmFseXNpczogTWVtb3J5IEhvdC1BZGQvUmVtb3ZlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtZW1vcnkgaG90LWFkZC9yZW1vdmUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBhcmNoaXRlY3R1cmUuIEZpcnN0IHVwLCBgTUVNT1JZX0hPVFJFTU9WRWAuLi4gb2theSwgdGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpdCYjMzk7cyBhIHNlbGYtY29udGFpbmVkIGZlYXR1cmUuIE5vIGltbWVkaWF0ZWx5IG9idmlvdXMgZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lLiBXZSYjMzk7cmUga2VlcGluZyB0aGF0IHNpbXBsZSwgd2hpY2ggaXMgZ29vZC4gTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gdGhlIGhvdC1wbHVnIHNpZGUgb2YgdGhpbmdzLCBgTUVNT1JZX0hPVFBMVUdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGFuZCBsaWtlbHkgaGF2ZSB0byBjb25zaWRlciBob3cgbWVtb3J5IGlzIGhhbmRsZWQgYXQgdGhlIGhhcmR3YXJlLCBmaXJtd2FyZSwgYW5kIHNvZnR3YXJlIGxheWVycyBzaW11bHRhbmVvdXNseS4gTmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgdGhlcmUuIEdvdHRhIGVuc3VyZSB0aGF0IGFueSBob3QtcGx1ZyBhY3Rpb25zIHBsYXkgbmljZWx5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUwOD1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUxMS0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTEyOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTEzLVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkyNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUtcmVsYXRlZCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgUmVsYXRlZCB0byBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBaT05FX0RFVklDRWAgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiB0byBrZWVwIGFuIGV5ZSBvbiBoZXJlLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggaXQuIEJhc2VkIG9uIHRoZSBpbml0aWFsIHNjYW4sIEkgc2VlIHRoZXNlIGFzIHRoZSBwcmltYXJ5IGNhbmRpZGF0ZXMgZm9yIGNsb3NlciBleGFtaW5hdGlvbjogYGRhbW9uX2dldF9mb2xpb2AsIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgbWFkdmlzZV9jb2xkYCwgYG1hZHZpc2VfcGFnZW91dGAsIGBkb19tYmluZGAsIGFuZCBgcXVldWVfcGFnZXNfcmFuZ2VgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGluIHRoaXMga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBzY2VuYXJpby4KCkhhbmcgb24gYSBzZWNvbmTigKYgSSYjMzk7dmUgZ290IHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIExldCBtZSBzZWUuLi4geWVzLCBgbWFkdmlzZV9jb2xkYCBhbmQgYG1hZHZpc2VfcGFnZW91dGAgYXJlIHN0YXRpYy4gT2theSwgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggdGhlIGFuYWx5c2lzLiBCYWNrIHRvIGZpZ3VyaW5nIG91dCBob3cgYWxsIG9mIHRoaXMgdGllcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmMtMzUyLVxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxubW0vbWFkdmlzZS5jLTM1NC1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWFkdmlzZS5jPTU3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XG5tbS9tYWR2aXNlLmM6NTcyOlx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcbm1tL21hZHZpc2UuYy01NzMtXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcbi0tXG5tbS9tYWR2aXNlLmMtNTc1LVxubW0vbWFkdmlzZS5jOjU3NjpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWFkdmlzZS5jLTU3Ny1cdFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jPTU5Mz1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX21hZHZfbHJ1X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tYWR2aXNlLmMtNTk3LVxubW0vbWFkdmlzZS5jOjU5ODpzdGF0aWMgbG9uZyBtYWR2aXNlX2NvbGQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtNTk5LXtcbi0tXG5tbS9tYWR2aXNlLmMtNjA3LVx0dGxiX2dhdGhlcl9tbXUoXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVx1MDAzZW1tKTtcbm1tL21hZHZpc2UuYzo2MDg6XHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jLTYwOS1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4tLVxubW0vbWFkdmlzZS5jPTEzNDE9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTM1Ny1cdGNhc2UgTUFEVl9DT0xEOlxubW0vbWFkdmlzZS5jOjEzNTg6XHRcdHJldHVybiBtYWR2aXNlX2NvbGQobWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTM1OS1cdGNhc2UgTUFEVl9QQUdFT1VUOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg0MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUaGlua2luZyBUaHJvdWdoIHRoZSBgbWFkdmlzZWAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtYWR2aXNlYCwgYW5kIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZsb3cgaGVyZS4gVGhlIHdob2xlIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIG5vIHN1cnByaXNlcyB0aGVyZSwgd2UgbmVlZCBpdCB0byBiZSBzbyB3ZSBjYW4gbWFpbnRhaW4gdGhlIG5lY2Vzc2FyeSBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiBUaGUgcmVhbCBtZWF0IG9mIHRoZSBvcGVyYXRpb24gZ2V0cyBraWNrZWQgb2ZmIGZyb20gYGRvX21hZHZpc2VgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGhhbmRsZXMgdGhlIGNvcmUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIGFuZCBhbnkgaW5pdGlhbCB2YWxpZGF0aW9uLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBkb19tYWR2aXNlYCBwcm9iYWJseSBoYW5kbGVzIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCB0aGVuIHBhc3NlcyB0aGUgcmVsZXZhbnQgZGV0YWlscyBkb3duIHRvIHRoZSBrZXJuZWwmIzM5O3MgY29yZSBsb2dpYy4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGVudHJ5LXBvaW50IC8gY29yZS1mdW5jdGlvbiBwYXJhZGlnbSB3ZSBzZWUgYWxsIG92ZXIgdGhlIHBsYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgYGRvX21hZHZpc2VgIGludGVyYWN0cyB3aXRoIGFueSBwZXItcHJvY2VzcyBvciBnbG9iYWwgcGFyYW1ldGVycy4gSXQmIzM5O3MgYSBzdGFuZGFyZCBwYXR0ZXJuLCBJIGV4cGVjdCB0aGVyZSBpcyBzdGFuZGFyZCB2YWxpZGF0aW9uIGFuZCBzb21lIGZvcm0gb2YgZXJyb3IgY2hlY2tpbmcsIGJlZm9yZSBmaW5hbGx5IGdldHRpbmcgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbiB0byBhY3R1YWxseSBkbyB0aGUgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fbWFkdmlzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9NDIxNz1leHRlcm4gaW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCxcbmluY2x1ZGUvbGludXgvbW0uaC00MjE4LVx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcbmluY2x1ZGUvbGludXgvbW0uaDo0MjE5OmV4dGVybiBpbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKTtcbmluY2x1ZGUvbGludXgvbW0uaC00MjIwLVxuLS1cbmlvX3VyaW5nL2FkdmlzZS5jPTUxPWludCBpb19tYWR2aXNlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvYWR2aXNlLmMtNTgtXG5pb191cmluZy9hZHZpc2UuYzo1OTpcdHJldCA9IGRvX21hZHZpc2UoY3VycmVudC1cdTAwM2VtbSwgbWEtXHUwMDNlYWRkciwgbWEtXHUwMDNlbGVuLCBtYS1cdTAwM2VhZHZpY2UpO1xuaW9fdXJpbmcvYWR2aXNlLmMtNjAtXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz03MTk9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3NfbWFkdmlzZShzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQsXG4tLVxubW0vZGFtb24vdmFkZHIuYy03MzAtXG5tbS9kYW1vbi92YWRkci5jOjczMTpcdGFwcGxpZWQgPSBkb19tYWR2aXNlKG1tLCBzdGFydCwgbGVuLCBiZWhhdmlvcikgPyAwIDogbGVuO1xubW0vZGFtb24vdmFkZHIuYy03MzItXHRtbXB1dChtbSk7XG4tLVxubW0vbWFkdmlzZS5jPTE4OTA9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE5ODYtICovXG5tbS9tYWR2aXNlLmM6MTk4NzppbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE5ODgte1xuLS1cbm1tL21hZHZpc2UuYz0yMDE1PVNZU0NBTExfREVGSU5FMyhtYWR2aXNlLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW5faW4sIGludCwgYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMjAxNi17XG5tbS9tYWR2aXNlLmM6MjAxNzpcdHJldHVybiBkb19tYWR2aXNlKGN1cnJlbnQtXHUwMDNlbW0sIHN0YXJ0LCBsZW5faW4sIGJlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0yMDE4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MDAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZzoKCioqRXhhbWluaW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbiBTY29wZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2Uga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZWdpc3RlcmluZyBhcyBpbnRlcmVzdGluZyB0aGF0IHRoZSBgZG9fbWFkdmlzZWAgZnVuY3Rpb24gaXMgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGltcGxpZXMgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHNvdXJjZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFNpbWlsYXJseSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgZG9fbWJpbmRgLCB0aGUgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIG1lbXBvbGljeSBvcGVyYXRpb25zLCBpcyBhbHNvIG5vbi1zdGF0aWMsIHN1Z2dlc3RpbmcgdGhlIHNhbWUgYWNjZXNzaWJpbGl0eSBwYXR0ZXJuIGFwcGxpZXMuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBwb2ludHMgdG8gdGhlc2UgZnVuY3Rpb25zIGJlaW5nIHBhcnQgb2YgYSBicm9hZGVyIEFQSSBvciBtb2R1bGUgaW50ZXJmYWNlIHdpdGhpbiB0aGUga2VybmVsLCBkZXNpZ25lZCB0byBiZSBjYWxsZWQgYnkgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIHBlcmhhcHMgZXZlbiB1c2VyLXNwYWNlIHZpYSBzeXN0ZW0gY2FsbHMuIEkmIzM5O2QgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCByZWFzb25zLCBidXQgdGhlIGxhY2sgb2YgYHN0YXRpY2AgZGVjbGFyYXRpb24gaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgaW50ZW5kZWQgZXh0ZXJuYWwgdXNhZ2UuIFRoaXMgb3BlbnMgZG9vcnMgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGFkdmlzb3J5IGZ1bmN0aW9ucyBhbmQgbWVtb3J5IGJpbmRpbmcgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdCB3aXRoIG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX21iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTYxMj1zdGF0aWMgYm9vbCBzdHJpY3RseV91bm1vdmFibGUodW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYy02MTQtXHQvKlxubW0vbWVtcG9saWN5LmM6NjE1Olx0ICogU1RSSUNUIHdpdGhvdXQgTU9WRSBmbGFncyBsZXRzIGRvX21iaW5kKCkgZmFpbCBpbW1lZGlhdGVseSB3aXRoIC1FSU9cbm1tL21lbXBvbGljeS5jLTYxNi1cdCAqIGlmIGFueSBtaXNwbGFjZWQgcGFnZSBpcyBmb3VuZC5cbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDg2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDkyLVxubW0vbWVtcG9saWN5LmM6MTQ5MzpzdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbm1tL21lbXBvbGljeS5jLTE0OTQtXHRcdCAgICAgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgc2hvcnQgbW9kZV9mbGFncyxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNzQ2PXN0YXRpYyBsb25nIGtlcm5lbF9tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzYzLVxubW0vbWVtcG9saWN5LmM6MTc2NDpcdHJldHVybiBkb19tYmluZChzdGFydCwgbGVuLCBsbW9kZSwgbW9kZV9mbGFncywgXHUwMDI2bm9kZXMsIGZsYWdzKTtcbm1tL21lbXBvbGljeS5jLTE3NjUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI2NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipTdGF0aWMgQmluZGluZ3MgYW5kIEtlcm5lbCBDYWxscyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBmbG93IGNvcnJlY3RseS4gYGRvX21iaW5kYC4uLnRoYXQmIzM5O3Mgc3RhdGljLCBpc24mIzM5O3QgaXQ/IE1lYW5pbmcgaXQmIzM5O3MgYmVpbmcgdXNlZCBpbiBhIGZpeGVkIGNvbnRleHQuIFRoaXMgY291bGQgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IHRoZSBiaW5kaW5nIG9wZXJhdGlvbiBpcyBzdHJ1Y3R1cmVkIGFuZCBleGVjdXRlZC4gTGV0JiMzOTtzIG5vdCBhc3N1bWUgYW55dGhpbmcgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrZXJuZWxfbWJpbmRgIG5leHQuIFNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN0YXRpYyBmdW5jdGlvbi4gS25vd2luZyAqdGhhdCogd2lsbCBjbGFyaWZ5IGEgbG90IGFib3V0IHRoZSBtZW1vcnkgYmluZGluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2VybmVsX21iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTE3Mjg9c3RhdGljIGlubGluZSBpbnQgc2FuaXRpemVfbXBvbF9mbGFncyhpbnQgKm1vZGUsIHVuc2lnbmVkIHNob3J0ICpmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzQ1LVxubW0vbWVtcG9saWN5LmM6MTc0NjpzdGF0aWMgbG9uZyBrZXJuZWxfbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG5tbS9tZW1wb2xpY3kuYy0xNzQ3LVx0XHRcdCB1bnNpZ25lZCBsb25nIG1vZGUsIGNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICpubWFzayxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xODM0PVNZU0NBTExfREVGSU5FNihtYmluZCwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xODM3LXtcbm1tL21lbXBvbGljeS5jOjE4Mzg6XHRyZXR1cm4ga2VybmVsX21iaW5kKHN0YXJ0LCBsZW4sIG1vZGUsIG5tYXNrLCBtYXhub2RlLCBmbGFncyk7XG5tbS9tZW1wb2xpY3kuYy0xODM5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEJpbmRpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpSaWdodCwgc28gYGtlcm5lbF9tYmluZGAgaXMgYSAqc3RhdGljKiBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IGRpcmVjdGx5IGV4cG9zZWQgZm9yIHVzZSBvdXRzaWRlIG9mIGl0cyBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gVGhlcmVmb3JlLCB0aGUgdXNlci1sZXZlbCBlbnRyeSBwb2ludCBmb3IgbWVtb3J5IGJpbmRpbmcgbXVzdCBiZSBgc3lzX21iaW5kYC4gQW5kIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgZGVmaW5lZCBhcyBgU1lTQ0FMTF9ERUZJTkU2KG1iaW5kLCAuLi4pYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgc3lzX21iaW5kYCBpcyB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRoYXQgdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbSB3b3VsZCBpbnRlcmFjdCB3aXRoLgoKSG1tLi4uIHdhaXQgYSBtaW51dGUuIGBxdWV1ZV9wYWdlc19yYW5nZWAgaXMgKm5vbi1zdGF0aWMqPyBUaGF0IHRocm93cyBhIHNsaWdodCB3cmVuY2ggaW50byBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBJZiBpdCYjMzk7cyBub3Qgc3RhdGljLCBpdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBleHBvc2VkLCBhbmQgY291bGQgYmUgdXNlZCBpbiBhIGJyb2FkZXIgc2NvcGUuIEl0IG1ha2VzIG1lIHdvbmRlciB3aGF0IHJlbGF0aW9uc2hpcCBpdCBoYXMgdG8gYGtlcm5lbF9tYmluZGAgYW5kIGBzeXNfbWJpbmRgLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgd2hlcmUgYHF1ZXVlX3BhZ2VzX3JhbmdlYCBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlc2Ugb3RoZXIgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIElzIGl0IGJlaW5nIHNoYXJlZCB3aXRoIG90aGVyIG1vZHVsZXM/IE9yIGlzIGl0IGEgaGVscGVyIGZ1bmN0aW9uIGRlc2lnbmVkIGZvciB1c2Ugd2l0aGluIG1lbW9yeSBiaW5kaW5nIGZ1bmN0aW9ucyB0aGF0IGhhcHBlbiB0byBiZSBhY2Nlc3NpYmxlIGJ5IG90aGVyIGFyZWFzIG9mIHRoZSBjb2RlPyBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY3Jvc3MtcmVmZXJlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfcGFnZXNfcmFuZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtcG9saWN5LmMtNzQ5LVx0XHRcdCAqIG1pZ3JhdGVfcGFnZXMoXHUwMDI2cGFnZWxpc3QpIHJldHVybnMgbnJfZmFpbGVkIGZvbGlvcywgc29cbm1tL21lbXBvbGljeS5jOjc1MDpcdFx0XHQgKiBjaGVjayBcJiMzNDtsYXJnZVwmIzM0OyBub3cgc28gdGhhdCBxdWV1ZV9wYWdlc19yYW5nZSgpIHJldHVybnNcbm1tL21lbXBvbGljeS5jLTc1MS1cdFx0XHQgKiBhIGNvbXBhcmFibGUgbnJfZmFpbGVkIGZvbGlvcy4gIFRoaXMgZG9lcyBpbXBseSB0aGF0XG4tLVxubW0vbWVtcG9saWN5LmM9OTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfbG9ja192bWFfd2Fsa19vcHMgPSB7XG4tLVxubW0vbWVtcG9saWN5LmMtOTc3LSAqXG5tbS9tZW1wb2xpY3kuYzo5Nzg6ICogcXVldWVfcGFnZXNfcmFuZ2UoKSBtYXkgcmV0dXJuOlxubW0vbWVtcG9saWN5LmMtOTc5LSAqIDAgLSBhbGwgcGFnZXMgYWxyZWFkeSBvbiB0aGUgcmlnaHQgbm9kZSwgb3Igc3VjY2Vzc2Z1bGx5IHF1ZXVlZCBmb3IgbW92aW5nXG4tLVxubW0vbWVtcG9saWN5LmM9OTg2PXN0YXRpYyBsb25nXG5tbS9tZW1wb2xpY3kuYzo5ODc6cXVldWVfcGFnZXNfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vbWVtcG9saWN5LmMtOTg4LVx0XHRub2RlbWFza190ICpub2RlcywgdW5zaWduZWQgbG9uZyBmbGFncyxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xMjg5PXN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXG4tLVxubW0vbWVtcG9saWN5LmMtMTMyMC1cdCAqL1xubW0vbWVtcG9saWN5LmM6MTMyMTpcdG5yX2ZhaWxlZCA9IHF1ZXVlX3BhZ2VzX3JhbmdlKG1tLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1tLVx1MDAzZXRhc2tfc2l6ZSwgXHUwMDI2bm1hc2ssXG5tbS9tZW1wb2xpY3kuYy0xMzIyLVx0XHRcdFx0ICAgICAgZmxhZ3MgfCBNUE9MX01GX0RJU0NPTlRJR19PSywgXHUwMDI2cGFnZWxpc3QpO1xuLS1cbm1tL21lbXBvbGljeS5jPTE0OTM9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG4tLVxubW0vbWVtcG9saWN5LmMtMTU1Ni1cdCAqL1xubW0vbWVtcG9saWN5LmM6MTU1NzpcdG5yX2ZhaWxlZCA9IHF1ZXVlX3BhZ2VzX3JhbmdlKG1tLCBzdGFydCwgZW5kLCBubWFzayxcbm1tL21lbXBvbGljeS5jLTE1NTgtXHRcdFx0ZmxhZ3MgfCBNUE9MX01GX0lOVkVSVCB8IE1QT0xfTUZfV1JMT0NLLCBcdTAwMjZwYWdlbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTY0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBob3cgdG8gdGFja2xlIHRoaXMgbWVtb3J5IHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBwYWdlIHJhbmdlcy4gSSYjMzk7bSBub3RpbmcgdGhhdCBgcXVldWVfcGFnZXNfcmFuZ2VgIGlzIGEgc3RhdGljIGVudGl0eSwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgb2YgaW52ZXN0aWdhdGlvbiB3aGVuIGNvbnNpZGVyaW5nIGhvdyB0byBtYWtlIG1lbW9yeSBwb2xpY3kgYWRqdXN0bWVudHMuIEFscmlnaHQsIHNvIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBtZW1wb2xpY3kgbWFuaXB1bGF0aW9uIGxvb2sgbGlrZSB0aGV5IGFyZSBgc3lzX21iaW5kYCwgYGRvX21pZ3JhdGVfcGFnZXNgIGFuZCBgbWlncmF0ZV90b19ub2RlYCwgeWVzPyBIb2xkIG9uLi4uIGl0IGFwcGVhcnMgdGhhdCBgbWlncmF0ZV90b19ub2RlYCBpcyBhbHNvIHN0YXRpY2FsbHkgZGVmaW5lZC4gU28sIGxldCBtZSByZS1ldmFsdWF0ZS4uLiBwZXJoYXBzIHRoZSBiZXR0ZXIgZnVuY3Rpb24gdG8gdGFyZ2V0IHdvdWxkIGJlIGBzeXNfbWlncmF0ZV9wYWdlc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdG9fbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0xMjU2PXN0YXRpYyBib29sIG1pZ3JhdGVfZm9saW9fYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvbGlzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMjg4LSAqL1xubW0vbWVtcG9saWN5LmM6MTI4OTpzdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxubW0vbWVtcG9saWN5LmMtMTI5MC1cdFx0XHQgICAgaW50IGZsYWdzKVxuLS1cbm1tL21lbXBvbGljeS5jPTEzNDM9aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXG4tLVxubW0vbWVtcG9saWN5LmMtMTQyNC1cdFx0bm9kZV9jbGVhcihzb3VyY2UsIHRtcCk7XG5tbS9tZW1wb2xpY3kuYzoxNDI1Olx0XHRlcnIgPSBtaWdyYXRlX3RvX25vZGUobW0sIHNvdXJjZSwgZGVzdCwgZmxhZ3MpO1xubW0vbWVtcG9saWN5LmMtMTQyNi1cdFx0aWYgKGVyciBcdTAwM2UgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSwgYXMgaWYgSSYjMzk7bSB0aGlua2luZyB0aGVtLgoKKipBbmFseXppbmcgRnVuY3Rpb24gU2NvcGU6IGBkb19taWdyYXRlX3BhZ2VzYCoqCgpSaWdodCwgc28gdGhlIHN5c3RlbSBmbGFnZ2VkIGBkb19taWdyYXRlX3BhZ2VzYC4gVGhlIGtleSB0aGluZyBqdW1waW5nIG91dCBhdCBtZSBpbW1lZGlhdGVseSBpcyB0aGF0IGl0JiMzOTtzICpub24tc3RhdGljKi4gT2theSwgd2hhdCBkb2VzIHRoYXQgcmVhbGx5IG1lYW4gaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBwcm9qZWN0PwoKVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgYGRvX21pZ3JhdGVfcGFnZXNgIGlzbiYjMzk7dCBkZXNpZ25lZCBhcyBhIHV0aWxpdHkgZnVuY3Rpb24sIHNvbWV0aGluZyB0aGF0JiMzOTtzIHNlbGYtY29udGFpbmVkIGFuZCBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LiBJbnN0ZWFkLCBpdCYjMzk7cyB0aWVkIHRvIGFuICppbnN0YW5jZSogb2YgYSBjbGFzcyBvciBtb2R1bGUuIFRoYXQgbWVhbnMgaXQgbGlrZWx5IHJlbGllcyBvbiDigJMgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVzIOKAkyBpbnRlcm5hbCBzdGF0ZSBkYXRhLiBJdCYjMzk7cyBub3QgYSBwdXJlbHkgZnVuY3Rpb25hbCBvcGVyYXRpb24uIFdlIG5lZWQgdG8ga25vdyAqd2hhdCogdGhhdCBzdGF0ZSBpcywgYW5kIGhvdyBjaGFuZ2VzIHRvIHRoYXQgc3RhdGUgY291bGQgaW1wYWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCgpTbywgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kOgoKKiAgICoqVGhlIGNvbnRleHQ6KiogV2hhdCBjbGFzcy9vYmplY3Qgb3ducyBgZG9fbWlncmF0ZV9wYWdlc2A/IEtub3dpbmcgdGhlIGNsYXNzIHdpbGwgY2x1ZSBtZSBpbnRvIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgb3RoZXIgbWV0aG9kcyBhdmFpbGFibGUgdG8gdGhlIGNsYXNzLgoqICAgKipUaGUgZGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgbWV0aG9kcyBvciB2YXJpYWJsZXMgZG9lcyBgZG9fbWlncmF0ZV9wYWdlc2AgY2FsbCBvciByZWZlcmVuY2U/IEFyZSB0aGVyZSBhbnkgc2hhcmVkIHJlc291cmNlcz8gS25vd2luZyB0aGUgY2xhc3Mgc2hvdWxkIGhlbHAgY2xhcmlmeSB0aGVzZSBkZXBlbmRlbmNpZXMuCiogICAqKlRoZSBpbXBsaWNhdGlvbnM6KiogV2hhdCB3aWxsIGhhcHBlbiBpZiB0aGlzIGlzbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseT8gV2hhdCBzdGF0ZSB3aWxsIGJlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzPwoqICAgKipUaGUgcmlza3M6KiogV2hhdCBjb3VsZCBnbyB3cm9uZyBpZiB0aGUgaW5zdGFuY2UgaXMgbm90IGNvcnJlY3RseSBpbnN0YW50aWF0ZWQgb3IgcGFzc2VkIGluIGEgcHJvYmxlbWF0aWMgc3RhdGU/CgpBIG5vbi1zdGF0aWMgbWV0aG9kIGltcGxpZXMgYW4gaW5zdGFuY2Utc3BlY2lmaWMgbWlncmF0aW9uLCBhbmQgaWYgdGhpcyBpbXBhY3RzIHRoZSBzeXN0ZW0sIHRoZW4gdGhhdCBsZXZlbCBvZiBhbmFseXNpcyBpcyB3YXJyYW50ZWQuIEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIGl0cyB1c2FnZSBhbmQgZXhhbWluaW5nIHRoZSBjbGFzcyBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MTUzPXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19oaWdoZXN0X3pvbmUoZW51bSB6b25lX3R5cGUgaylcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTE1OC1cbmluY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg6MTU5OmludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xNjAtXHRcdCAgICAgY29uc3Qgbm9kZW1hc2tfdCAqdG8sIGludCBmbGFncyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaD0yNjg9c3RhdGljIGlubGluZSBib29sIGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KG5vZGVtYXNrX3QgKm0pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yNzItXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjI3MzpzdGF0aWMgaW5saW5lIGludCBkb19taWdyYXRlX3BhZ2VzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBub2RlbWFza190ICpmcm9tLFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yNzQtXHRcdFx0XHQgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmM9MjUzMj1zdGF0aWMgdm9pZCBjcHVzZXRfbWlncmF0ZV9tbV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMjUzNy1cdC8qIG9uIGEgd3Egd29ya2VyLCBubyBuZWVkIHRvIHdvcnJ5IGFib3V0ICVjdXJyZW50JiMzOTtzIG1lbXNfYWxsb3dlZCAqL1xua2VybmVsL2Nncm91cC9jcHVzZXQuYzoyNTM4Olx0ZG9fbWlncmF0ZV9wYWdlcyhtd29yay1cdTAwM2VtbSwgXHUwMDI2bXdvcmstXHUwMDNlZnJvbSwgXHUwMDI2bXdvcmstXHUwMDNldG8sIE1QT0xfTUZfTU9WRV9BTEwpO1xua2VybmVsL2Nncm91cC9jcHVzZXQuYy0yNTM5LVx0bW1wdXQobXdvcmstXHUwMDNlbW0pO1xuLS1cbm1tL21lbXBvbGljeS5jPTEyODk9c3RhdGljIGxvbmcgbWlncmF0ZV90b19ub2RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgc291cmNlLCBpbnQgZGVzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMzQyLSAqL1xubW0vbWVtcG9saWN5LmM6MTM0MzppbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSxcbm1tL21lbXBvbGljeS5jLTEzNDQtXHRcdCAgICAgY29uc3Qgbm9kZW1hc2tfdCAqdG8sIGludCBmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYy0xMzkxLVx0XHRcdC8qXG5tbS9tZW1wb2xpY3kuYzoxMzkyOlx0XHRcdCAqIGRvX21pZ3JhdGVfcGFnZXMoKSB0cmllcyB0byBtYWludGFpbiB0aGUgcmVsYXRpdmVcbm1tL21lbXBvbGljeS5jLTEzOTMtXHRcdFx0ICogbm9kZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhZ2VzIGVzdGFibGlzaGVkIGJldHdlZW5cbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDc0PXN0YXRpYyBib29sIG1pZ3JhdGVfZm9saW9fYWRkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvbGlzdCxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDc5LVxubW0vbWVtcG9saWN5LmM6MTQ4MDppbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSxcbm1tL21lbXBvbGljeS5jLTE0ODEtXHRcdCAgICAgY29uc3Qgbm9kZW1hc2tfdCAqdG8sIGludCBmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYz0xODY3PXN0YXRpYyBpbnQga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkX3QgcGlkLCB1bnNpZ25lZCBsb25nIG1heG5vZGUsXG4tLVxubW0vbWVtcG9saWN5LmMtMTkzOC1cbm1tL21lbXBvbGljeS5jOjE5Mzk6XHRlcnIgPSBkb19taWdyYXRlX3BhZ2VzKG1tLCBvbGQsIG5ldyxcbm1tL21lbXBvbGljeS5jLTE5NDAtXHRcdGNhcGFibGUoQ0FQX1NZU19OSUNFKSA/IE1QT0xfTUZfTU9WRV9BTEwgOiBNUE9MX01GX01PVkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI0MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIE1pZ3JhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBzdGFydCByZWFsbHkgZGlnZ2luZyBpbi4gYGRvX21pZ3JhdGVfcGFnZXNgIHNlZW1zIGxpa2UgYSBzb2xpZCBwb2ludCB0byB6b29tIGluIG9uLCBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMuIEJ1dCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IEkmIzM5O20gc2VlaW5nIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLi4uIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgYSBjYW5kaWRhdGUuIEFsc28sIGBkYW1vbl9nZXRfZm9saW9gIGFuZCBgZG9fbWFkdmlzZWAgYXJlIGJvdGggbm9uLXN0YXRpYyBhcyB3ZWxsLCBzbyB0aGV5IGFyZSBwb3NzaWJsZSBjYW5kaWRhdGVzIHRvIGNvbnNpZGVyLiBOb3csIGxldCYjMzk7cyBzZWUgaWYgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEkgbmVlZCB0byBrbm93IGlmIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm1hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIENvZGUgVmlzaWJpbGl0eSBhbmQgRnVuY3Rpb24gRXhwb3J0KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBoZXJlLiBJdCYjMzk7cyAqZGVmaW5pdGVseSogbm90IG1hcmtlZCBhcyBleHBvcnRlZCwgd2hpY2ggaXMgbXkgZmlyc3Qgb2JzZXJ2YXRpb24uIEJ1dCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub24tc3RhdGljKiBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE5vbi1zdGF0aWMgaW1wbGllcyBpdCAqY291bGQqIGJlIGFjY2Vzc2libGUgZnJvbSBlbHNld2hlcmUsIHBvdGVudGlhbGx5IHdpdGhpbiB0aGUgc2FtZSBjb21waWxlZCB1bml0IG9yIGxpbmtlZCBsaWJyYXJ5LCBldmVuIGlmIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkIHZpYSBhIGRlY2xhcmF0aW9uLiBOb3cgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdOKAmXMgYSBwb3NzaWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGBkYW1vbl9nZXRfZm9saW9gIGlzIGFjdHVhbGx5IGJlaW5nIGV4cG9zZWQgaW4gdGhlIG9iamVjdCBmaWxlIG9yIHNoYXJlZCBsaWJyYXJ5LCBldmVuIGlmIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGBleHRlcm5gLiBUaW1lIHRvIGNoZWNrIHRoZSBzeW1ib2wgdGFibGU7IEkgbmVlZCB0byB2ZXJpZnkgaXRzIHZpc2liaWxpdHksIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIHRvIGRpY3RhdGUgaG93IEkgYXBwcm9hY2ggYW55IHBvdGVudGlhbCBsaW5rYWdlIGlzc3VlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRhbW9uX2dldF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzkzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUmIzM5O3MgTWVtb3J5IE1hbmFnZW1lbnQgU3RyYXRlZ3kqKgoKT2theSwgc28gdGhpcyBmdW5jdGlvbiBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCBpdCAqaXMqIG5vbi1zdGF0aWMsIHdoaWNoIGdpdmVzIHVzIHNvbWUgZmxleGliaWxpdHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgbWFpbiBzeW1ib2xzIGFyZSB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZTogYGRhbW9uX2dldF9mb2xpb2AsIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLCBgZG9fbWFkdmlzZWAsIGFuZCBgZG9fbWlncmF0ZV9wYWdlc2AuIEkmIzM5O20gYWxzbyB0aGlua2luZyBhYm91dCBgbWJpbmRgLCBzaW5jZSB0aGF0JiMzOTtzIGEgc3lzdGVtIGNhbGwsIGFuZCB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGFuIGFzc29jaWF0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbiwganVzdCBpbiBjYXNlLiBIbW0sIGBrZXJuZWxfbWJpbmRgIGlzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBvdXQuIFdlIGhhdmUgYHN5c19tYmluZGAsIGJ1dCBJIHRoaW5rIEkgY2FuIGp1c3Qgc3RpY2sgd2l0aCBgZG9fbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19tYWR2aXNlYCAtIHRoZXkmIzM5O3JlIHByb2JhYmx5IHN1ZmZpY2llbnQgZm9yIHdoYXQgSSBuZWVkIHRvIGRvLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYFpPTkVfREVWSUNFYCwgYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBOVU1BYCBpbiB0aGUgbWl4LiBIYW5nIG9u4oCmIGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIHdoaWNoIGl0c2VsZiBoYXMgbm8gZGVwZW5kZW5jaWVzLiBHaXZlbiB0aGF0IGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1FTU9SWV9IT1RSRU1PVkVgIGlzIGVuYWJsZWQgaWYgSSB3YW50IGBaT05FX0RFVklDRWAuIFJlbWVtYmVyLCBhIGRlcGVuZGVuY3kgKm11c3QqIGJlIGVuYWJsZWQuIFNpbmNlIGl0JiMzOTtzIGEgYGJvb2xgLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgWk9ORV9ERVZJQ0VgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcywganVzdCB0byBiZSBzdXJlLiBOb3BlLCBqdXN0IGBNRU1PUllfSE9UUkVNT1ZFYC4gQWxyaWdodCwgbGV0JiMzOTtzIHJldmlzaXQgdGhhdCBgTUVNT1JZX0hPVFJFTU9WRWAgY29uZmlnIG9uZSBtb3JlIHRpbWUgYW5kIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBub3RoaW5nIGVsc2UgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1Nzg6XHRlbmRjaG9pY2VcbiA1Nzk6XHRcbiA1ODA6XHRjb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuIDU4MTpcdFx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbiA1ODI6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA1ODM6XHRcbiA1ODQ6XHRjb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcbiA1ODU6XHRcdGRlZl9ib29sIHlcbiA1ODY6XHRcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbiA1ODc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgQ29uZmxpY3RpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKSG9sZCBvbiBhIHNlY29uZC4gSXNuJiMzOTt0IGBNRU1PUllfSE9UUkVNT1ZFYCBzdXBwb3NlZCB0byBiZSBjb25kaXRpb25hbCBvbiBgTUVNT1JZX0hPVFBMVUdgPyBXaHkgaXMgaXQgYXBwZWFyaW5nIHdpdGhpbiBhbiBgaWYgTUVNT1JZX0hPVFBMVUdgIGJsb2NrPyBUaGF0IHNlZW1zIHJlZHVuZGFudC4gVGhpcyBwcm9iYWJseSBpc24mIzM5O3QgYSBidWcsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgaXQgYXMgYSBtYXR0ZXIgb2YgZHVlIGRpbGlnZW5jZS4gSSBzaG91bGQgY2hlY2sgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCBtZSBnbyBsb29rIGF0IGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU3OCwgYW5kIGNvbmZpcm0gdGhlIGV4cGVjdGVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBvcHRpb25zLiBJJiMzOTttIHN1cmUgSSYjMzk7bGwgZmluZCBhbiBleHBsYW5hdGlvbiB0aGVyZS4gSXQgY291bGQgYmUgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb24gSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgZ3Jhc3BpbmcsIG9yIGl0IGNvdWxkIHNpbXBseSBiZSBhIHF1aXJrIG9mIGhvdyB0aGUgb3B0aW9ucyBhcmUgc3RydWN0dXJlZC4gSXQmIzM5O3MgYmVzdCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFxuIDU1MTpcdGNvbmZpZyBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfQVVUT1xuIDU1MjpcdFx0Ym9vbCBcJiMzNDthdXRvXCYjMzQ7XG4gNTUzOlx0XHRoZWxwXG4gNTU0Olx0XHQgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRoZSBrZXJuZWwgdG8gYXV0b21hdGljYWxseSBvbmxpbmVcbiA1NTU6XHRcdCAgaG90cGx1Z2dlZCBtZW1vcnkgaW50byB0aGUgem9uZSBpdCB0aGlua3MgaXMgcmVhc29uYWJsZS5cbiA1NTY6XHRcdCAgVGhpcyBtZW1vcnkgbWF5IGJlIHV0aWxpemVkIGZvciBrZXJuZWwgZGF0YS5cbiA1NTc6XHRcbiA1NTg6XHRjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0tFUk5FTFxuIDU1OTpcdFx0Ym9vbCBcJiMzNDtrZXJuZWxcJiMzNDtcbiA1NjA6XHRcdGhlbHBcbiA1NjE6XHRcdCAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IG9ubGluZVxuIDU2MjpcdFx0ICBob3RwbHVnZ2VkIG1lbW9yeSBpbnRvIGEgem9uZSBjYXBhYmxlIG9mIGJlaW5nIHVzZWQgZm9yIGtlcm5lbFxuIDU2MzpcdFx0ICBkYXRhLiBUaGlzIHR5cGljYWxseSBtZWFucyBaT05FX05PUk1BTC5cbiA1NjQ6XHRcbiA1NjU6XHRjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX01PVkFCTEVcbiA1NjY6XHRcdGJvb2wgXCYjMzQ7bW92YWJsZVwmIzM0O1xuIDU2NzpcdFx0aGVscFxuIDU2ODpcdFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHRvIGF1dG9tYXRpY2FsbHkgb25saW5lXG4gNTY5Olx0XHQgIGhvdHBsdWcgbWVtb3J5IGludG8gWk9ORV9NT1ZBQkxFLiBUaGlzIG1lbW9yeSB3aWxsIGdlbmVyYWxseVxuIDU3MDpcdFx0ICBub3QgYmUgdXRpbGl6ZWQgZm9yIGtlcm5lbCBkYXRhLlxuIDU3MTpcdFxuIDU3MjpcdFx0ICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgYWRtaW4ga25vd3Mgc3VmZmljaWVudFxuIDU3MzpcdFx0ICBaT05FX05PUk1BTCBtZW1vcnkgaXMgYXZhaWxhYmxlIHRvIGRlc2NyaWJlIGhvdHBsdWcgbWVtb3J5LFxuIDU3NDpcdFx0ICBvdGhlcndpc2UgaG90cGx1ZyBtZW1vcnkgbWF5IGZhaWwgdG8gb25saW5lLiBGb3IgZXhhbXBsZSxcbiA1NzU6XHRcdCAgc3VmZmljaWVudCBrZXJuZWwtY2FwYWJsZSBtZW1vcnkgKFpPTkVfTk9STUFMKSBtdXN0IGJlXG4gNTc2Olx0XHQgIGF2YWlsYWJsZSB0byBhbGxvY2F0ZSBwYWdlIHN0cnVjdHMgdG8gZGVzY3JpYmUgWk9ORV9NT1ZBQkxFLlxuIDU3NzpcdFxuIDU3ODpcdGVuZGNob2ljZVxuIDU3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gc3VtbWFyaXplIHRoZSBwcm92aWRlZCB0ZXh0IGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtsbCBhcHByb2FjaCBpdDoKCioqVGhpbmtpbmcgVGhyb3VnaCB0aGUgVGFzayoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgcHJvbXB0LiAmIzM0O1N1bW1hcml6ZSB0aGUgdGV4dCBiZWxvdywgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgdGhvdWdoIHRoZSB0aG91Z2h0cyBkZXNjcmliZWQgYXJlIHlvdXIgdGhvdWdodHMuJiMzNDsgU28sIEkgbmVlZCB0byBpbnRlcm5hbGl6ZSB0aGlzIGFzIGlmIEkmIzM5O20gdGhlIG9uZSBnZW5lcmF0aW5nIHRoZXNlIGlkZWFzIGFuZCByZWFjdGlvbnMuIEl0JiMzOTtzIGFib3V0IGVtYm9keWluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBub3QganVzdCByZXBvcnRpbmcgaXQuIFRoZSB0YXJnZXQgYXVkaWVuY2UgaXMgYW4gZXhwZXJ0LCBtZWFuaW5nIEkgY2FuIHVzZSBwcmVjaXNlIHRlcm1pbm9sb2d5IGFuZCBhc3N1bWUgYSBoaWdoIGxldmVsIG9mIHVuZGVyc3RhbmRpbmcgd2l0aG91dCBuZWVkaW5nIHRvIGRlZmluZSBiYXNpYyBjb25jZXB0cy4gVGhlIGdvYWwgaXNuJiMzOTt0IHRvIGR1bWIgaXQgZG93biwgYnV0IHRvIGV4cHJlc3MgdGhlIHVuZGVybHlpbmcgbG9naWMgZGlyZWN0bHkuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcbiA1MDE6XHQjIElPUkVTT1VSQ0VfU1lTVEVNX1JBTSByZWdpb25zIGluIHRoZSBrZXJuZWwgcmVzb3VyY2UgdHJlZSB0aGF0IGFyZSBtYXJrZWRcbiA1MDI6XHQjIElPUkVTT1VSQ0VfRVhDTFVTSVZFIGNhbm5vdCBiZSBtYXBwZWQgdG8gdXNlciBzcGFjZSwgZm9yIGV4YW1wbGUsIHZpYVxuIDUwMzpcdCMgL2Rldi9tZW0uXG4gNTA0Olx0Y29uZmlnIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG4gNTA1Olx0XHRkZWZfYm9vbCB5XG4gNTA2Olx0XHRkZXBlbmRzIG9uICFERVZNRU0gfHwgU1RSSUNUX0RFVk1FTVxuIDUwNzpcdFxuIDUwODpcdGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuIDUwOTpcdFx0Ym9vbFxuIDUxMDpcdFxuIDUxMTpcdCMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xuIDUxMjpcdG1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbiA1MTM6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiA1MTQ6XHRcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4gNTE1Olx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4gNTE2Olx0XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4gNTE3Olx0XHRkZXBlbmRzIG9uIDY0QklUXG4gNTE4Olx0XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxuIDUxOTpcdFxuIDUyMDpcdGlmIE1FTU9SWV9IT1RQTFVHXG4gNTIxOlx0XG4gNTIyOlx0Y2hvaWNlXG4gNTIzOlx0XHRwcm9tcHQgXCYjMzQ7TWVtb3J5IEhvdHBsdWcgRGVmYXVsdCBPbmxpbmUgVHlwZVwmIzM0O1xuIDUyNDpcdFx0ZGVmYXVsdCBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PRkZMSU5FXG4gNTI1Olx0XHRoZWxwXG4gNTI2Olx0XHQgIERlZmF1bHQgbWVtb3J5IHR5cGUgZm9yIGhvdHBsdWdnZWQgbWVtb3J5LlxuIDUyNzpcdFxuIDUyODpcdFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIGZvciBtZW1vcnkgaG90cGx1Z1xuIDUyOTpcdFx0ICBvbmxpbmluZyBwb2xpY3kgKC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrcykgd2hpY2hcbiA1MzA6XHRcdCAgZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgdG8gbmV3bHkgYWRkZWQgbWVtb3J5IHJlZ2lvbnMuIFBvbGljeSBzZXR0aW5nXG4gNTMxOlx0XHQgIGNhbiBhbHdheXMgYmUgY2hhbmdlZCBhdCBydW50aW1lLlxuIDUzMjpcdFxuIDUzMzpcdFx0ICBUaGUgZGVmYXVsdCBpcyAmIzM5O29mZmxpbmUmIzM5Oy5cbiA1MzQ6XHRcbiA1MzU6XHRcdCAgU2VsZWN0IG9mZmxpbmUgdG8gZGVmZXIgb25saW5pbmcgdG8gZHJpdmVycyBhbmQgdXNlciBwb2xpY3kuXG4gNTM2Olx0XHQgIFNlbGVjdCBhdXRvIHRvIGxldCB0aGUga2VybmVsIGNob29zZSB3aGF0IHpvbmVzIHRvIHV0aWxpemUuXG4gNTM3Olx0XHQgIFNlbGVjdCBvbmxpbmVfa2VybmVsIHRvIGdlbmVyYWxseSBhbGxvdyBrZXJuZWwgdXNhZ2Ugb2YgdGhpcyBtZW1vcnkuXG4gNTM4Olx0XHQgIFNlbGVjdCBvbmxpbmVfbW92YWJsZSB0byBnZW5lcmFsbHkgZGlzYWxsb3cga2VybmVsIHVzYWdlIG9mIHRoaXMgbWVtb3J5LlxuIDUzOTpcdFxuIDU0MDpcdFx0ICBFeGFtcGxlIGtlcm5lbCB1c2FnZSB3b3VsZCBiZSBwYWdlIHN0cnVjdHMgYW5kIHBhZ2UgdGFibGVzLlxuIDU0MTpcdFxuIDU0MjpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gNTQzOlx0XG4gNTQ0Olx0Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcbiA1NDU6XHRcdGJvb2wgXCYjMzQ7b2ZmbGluZVwmIzM0O1xuIDU0NjpcdFx0aGVscFxuIDU0NzpcdFx0ICBIb3RwbHVnZ2VkIG1lbW9yeSB3aWxsIG5vdCBiZSBvbmxpbmVkIGJ5IGRlZmF1bHQuXG4gNTQ4Olx0XHQgIENob29zZSB0aGlzIGZvciBzeXN0ZW1zIHdpdGggZHJpdmVycyBhbmQgdXNlciBwb2xpY3kgdGhhdFxuIDU0OTpcdFx0ICBoYW5kbGUgb25saW5pbmcgb2YgaG90cGx1ZyBtZW1vcnkgcG9saWN5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjMxMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgbWVtb3J5IGhvdHBsdWcgb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgTUVNT1JZX0hPVFJFTU9WRWAgaXMgbmVzdGVkIHJpZ2h0IHVuZGVyIGBpZiBNRU1PUllfSE9UUExVR2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIGBNRU1PUllfSE9UUExVR2AgaXRzZWxmIHJlbGllcyBvbiBhIGZldyBvdGhlciBrZXkgY29uZmlndXJhdGlvbnM6IGBTUEFSU0VNRU1fVk1FTU1BUGAsIGBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR2AsIGFuZCwgb2YgY291cnNlLCBgNjRCSVRgLiBHaXZlbiB0aGF0IHJlbGF0aW9uc2hpcCwgSSBzaG91bGQgcHJvYmFibHkgZW51bWVyYXRlIGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYCBhbmQgYFpPTkVfREVWSUNFYCB0b2dldGhlciBpbiBteSBub3RlcywgZm9yIGNvbXBsZXRlbmVzcyBhbmQgZWFzeSByZWZlcmVuY2UuIEhvbGQgb24uLi4gSSBqdXN0IHJlYWxpemVkLCBgWk9ORV9ERVZJQ0VgIGlzbiYjMzk7dCBhY3R1YWxseSB1bmRlciBgaWYgTUVNT1JZX0hPVFBMVUdgLiBUaGF0JiMzOTtzIGEgYml0IHVuZXhwZWN0ZWQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgdGhlcmUgbWlnaHQgYmUgc29tZSBudWFuY2UgSSYjMzk7bSBtaXNzaW5nLiBMZXQgbWUgdHJhY2UgdGhhdCBkZXBlbmRlbmN5IGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWFraW5nIGFueSBpbmNvcnJlY3QgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxMDpcdGNvbmZpZyBBUkNIX0hBU19aT05FX0RNQV9TRVRcbjEyMTE6XHRcdGJvb2xcbjEyMTI6XHRcbjEyMTM6XHRjb25maWcgWk9ORV9ETUFcbjEyMTQ6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBETUEgem9uZVwmIzM0OyBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcbjEyMTU6XHRcdGRlZmF1bHQgeSBpZiBBUk02NCB8fCBYODZcbjEyMTY6XHRcbjEyMTc6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIxODpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjE5Olx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMjA6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIyMTpcdFxuMTIyMjpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIyMzpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjI0Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyMjU6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyMjY6XHRcbjEyMjc6XHRcdGhlbHBcbjEyMjg6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyMjk6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbiBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcmV2ZWFscyBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gYFpPTkVfREVWSUNFYCByZWxpZXMgb24gYE1FTU9SWV9IT1RSRU1PVkVgLCB3aGljaCBpdHNlbGYgaXMgY29udGluZ2VudCBvbiBgTUVNT1JZX0hPVFBMVUdgLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGNvbnNpZGVyIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBaT05FX0RFVklDRWAgYXMgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb25zLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgIGFzIHBvdGVudGlhbGx5IGltcGFjdGZ1bC4KCk5vdywgbGV0JiMzOTtzIHJlZmluZSB0aGUgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLiBNeSBhbmFseXNpcyBoaWdobGlnaHRzIHRoZXNlIGNyaXRpY2FsIHN5bWJvbHM6IGBkYW1vbl9nZXRfZm9saW9gLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYGRvX21hZHZpc2VgLCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLiBJIHNlZSB0aGF0IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIGNhbGxlZCBpbmRpcmVjdGx5IHRocm91Z2ggYSBjaGFpbjogYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIC0mZ3Q7IGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAgLSZndDsgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCAtJmd0OyBgZG9fbWFkdmlzZWAuIFRoZXJlZm9yZSwgYGRvX21hZHZpc2VgIGNvdmVycyBpdCwgYnV0IGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGlzIHN0aWxsIGEgdXNlZnVsIHNwZWNpZmljIHRhcmdldC4gYGRhbW9uX2dldF9mb2xpb2AgaXMgY3J1Y2lhbCBzaW5jZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBudW1lcm91cyBEQU1PTiBmdW5jdGlvbnMuIGBkb19taWdyYXRlX3BhZ2VzYCBpcyByZWxldmFudCBkdWUgdG8gY292ZXJpbmcgYHF1ZXVlX3BhZ2VzX3JhbmdlYC4KCkkgc2hvdWxkIGNoZWNrIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBMZXQmIzM5O3Mgc2VlLi4uICBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyAqbm90KiBzdGF0aWMuIE5laXRoZXIgaXMgYGRhbW9uX2dldF9mb2xpb2AsIGBkb19tYWR2aXNlYCwgb3IgYGRvX21pZ3JhdGVfcGFnZXNgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgbm8gaW50ZXJuYWwgbGlua2FnZSBpc3N1ZXMgaGVyZS4KCkxldCBtZSBleGFtaW5lIGVudHJ5IHBvaW50cyBhIGxpdHRsZSBtb3JlIHRob3JvdWdobHkuIExvb2tpbmcgYXQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtYWR2aXNlX2NvbGRgIGFuZCBgbWFkdmlzZV9wYWdlb3V0YCwgd2hpY2ggaW4gdHVybiwgYXJlIGNhbGxlZCBmcm9tIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkb19tYWR2aXNlYC4gRm9yIGBxdWV1ZV9mb2xpb3NfcG1kYCBhbmQgYHF1ZXVlX2ZvbGlvc19odWdldGxiYCwgdGhleSBhcmUgY2FsbGVkIGZyb20gYHF1ZXVlX3BhZ2VzX3JhbmdlYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGRvX21iaW5kYCBhbmQgYG1pZ3JhdGVfdG9fbm9kZWAuIGBkb19tYmluZGAgaXMgY2FsbGVkIGZyb20gYHN5c19tYmluZGAuIGBtaWdyYXRlX3RvX25vZGVgIGlzIGNhbGxlZCBmcm9tIGBkb19taWdyYXRlX3BhZ2VzYC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBkb19tYWR2aXNlYCwgYW5kIGBkb19taWdyYXRlX3BhZ2VzYC4KCkFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgdGhlc2UgZnVuY3Rpb25zIGFyZTogYFpPTkVfREVWSUNFYCwgYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgLgoKV2FpdCBhIG1pbnV0ZS4uLiBpcyBgREFNT05fUEFERFJgIGVzc2VudGlhbCBmb3IgYGRhbW9uX2dldF9mb2xpb2A/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGNvbXBpbGF0aW9uIGRldGFpbHMgZm9yIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvcHMtY29tbW9uLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vTWFrZWZpbGU9Mz1vYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xubW0vZGFtb24vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbm1tL2RhbW9uL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIGBvcHMtY29tbW9uLm9gIENvbXBpbGF0aW9uIGFuZCBEQU1PTiBNb2R1bGUgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBvcHMtY29tbW9uLm9gIGlzIG9ubHkgZ2V0dGluZyBidWlsdCBpZiBlaXRoZXIgYERBTU9OX1ZBRERSYCBvciBgREFNT05fUEFERFJgIGFyZSBkZWZpbmVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgdGhhdCBzZXRzIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSouIFRoZSBrZXkgc2VlbXMgdG8gYmUgYGRhbW9uX2dldF9mb2xpb2AuIFRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCBhbmQgaXMgYmVpbmcgdXRpbGl6ZWQgYnkgYm90aCBgcGFkZHIuY2AgYW5kIGBjb3JlLmNgLCBidXQgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19EQU1PTl9QQUREUmAgaXMgdHVybmVkIG9uLiBFc3NlbnRpYWxseSwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGJhc2VkIG9uIGBEQU1PTl9QQUREUmAuIFRoaXMgYWxzbyBtYWtlcyBzZW5zZSBiZWNhdXNlIERBTU9OX1BBRERSIHJlcXVpcmVzIHRoZSB1c2Ugb2YgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGF0JiMzOTtzIGEgdml0YWwgY29ubmVjdGlvbiBmb3IgREFNT04uIE5vdyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBleGFjdGx5IGBvcHMtY29tbW9uLmNgIGNvbnRhaW5zIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgaW52b2x2ZWQgaW4gdGhvc2UgY2FzZXMgYW5kIHdoeSB0aGF0IGRlcGVuZGVuY3kgaXMgc3RydWN0dXJlZCB0aGlzIHdheS4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQgKlxuICAyMTpcdCAqIFRoZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24gaXMgc3RvbGVuIGZyb20gdGhlICYjMzk7cGFnZV9pZGxlX2dldF9mb2xpbygpJiMzOTsuICBXZVxuICAyMjpcdCAqIHN0ZWFsIHJhdGhlciB0aGFuIHJldXNlIGl0IGJlY2F1c2UgdGhlIGNvZGUgaXMgcXVpdGUgc2ltcGxlLlxuICAyMzpcdCAqL1xuICAyNDpcdHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuICAyNTpcdHtcbiAgMjY6XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gIDI3Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICAyODpcdFxuICAyOTpcdFx0aWYgKCFwYWdlKVxuICAzMDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgMzE6XHRcbiAgMzI6XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiAgMzM6XHRcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4gIDM0Olx0XHRcdHJldHVybiBOVUxMO1xuICAzNTpcdFx0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykgfHxcbiAgMzY6XHRcdCAgICBmb2xpb19pc196b25lX2RldmljZShmb2xpbykpIHtcbiAgMzc6XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAgMzg6XHRcdFx0Zm9saW8gPSBOVUxMO1xuICAzOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI1MQoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGRhbW9uX2dldF9mb2xpb2AgKmlzKiB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW50byBgb3BzLWNvbW1vbi5jYC4gVGhlcmVmb3JlLCB3ZSBuZWVkIGVpdGhlciBgREFNT05fVkFERFJgIG9yIGBEQU1PTl9QQUREUmAsIGFuZCBJJiMzOTttIGxpc3RpbmcgYERBTU9OX1BBRERSYC4KCk5vdywgbGV0JiMzOTtzIGNhc3QgYSB3aWRlciBuZXQgYW5kIGxvb2sgZm9yIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW1wYWN0ZWQuCgpJIHNlZSB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50LCBzcGVjaWZpY2FsbHkgYmVjYXVzZSBvZiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYC4gQWxzbywgYE5VTUFgIGlzIGEgbXVzdC1oYXZlIGRlcGVuZGVuY3kgaGVyZSBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIGBtZW1wb2xpY3kuY2AuIEZpbmFsbHksIGBaT05FX0RFVklDRWAgaXMgY3JpdGljYWwuIFdlIG5lZWQgdGhpcyBzbyB3ZSBjYW4gcHJvcGVybHkgdGVzdCB0aGUgYGZvbGlvX2lzX3pvbmVfZGV2aWNlYCBicmFuY2guIEZ1cnRoZXJtb3JlLCBgWk9ORV9ERVZJQ0VgIG5lY2Vzc2l0YXRlcyBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAuCgpUaGUgbG9naWMgaGVyZSBpcyBzb3VuZDogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcyB0aHJvdWdob3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEl0JiMzOTtzIHRhcmdldGVkIGF0IHByZXZlbnRpbmcgYW55IHVud2FudGVkIG9wZXJhdGlvbnMgb24gWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIHRoZSBleGVjdXRpb24gZmxvdyBvZiBtZW1vcnkgb3BlcmF0aW9ucyB3aGVuIFpPTkVfREVWSUNFIG1lbW9yeSBpcyBpbnZvbHZlZC4gQW5kLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgc28gaXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLiBTcGVjaWZpY2FsbHksIHZpYSBpbnRlcmZhY2VzIGxpa2UgYG1hZHZpc2VgLCBgbWJpbmRgLCBgbWlncmF0ZV9wYWdlc2AsIGFuZCB0aGUgREFNT04gc3lzZnMvZGVidWdmcy4KCkFscmlnaHQsIHdpdGggYWxsIHRoYXQgc29ydGVkLCBpdCYjMzk7cyB0aW1lIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7LAogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fZ2V0X2ZvbGlvJiMzNDssCiAgICAmIzM0O21hZHZpc2VfZnJlZV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDtkb19tYWR2aXNlJiMzNDssCiAgICAmIzM0O2RvX21pZ3JhdGVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pYCBjaGVja3MgaW4gc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIChEQU1PTiwgbWFkdmlzZSwgbWVtcG9saWN5KSB0byBwcmV2ZW50IHByb2Nlc3NpbmcgWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgZm9yIG1lbW9yeSBvcGVyYXRpb25zIG9uIFpPTkVfREVWSUNFIG1lbW9yeS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlLCBtYmluZCwgbWlncmF0ZV9wYWdlcywgYW5kIERBTU9OIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OywKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2ZyZWVfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7ZG9fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDtkb19taWdyYXRlX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoREFNT04sIG1hZHZpc2UsIG1lbXBvbGljeSkgdG8gcHJldmVudCBwcm9jZXNzaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBaT05FX0RFVklDRSBtZW1vcnkuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSwgbWJpbmQsIG1pZ3JhdGVfcGFnZXMsIGFuZCBEQU1PTiBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6MjAuNTU4MzEwODY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTk1NDc0NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2dldF9mb2xpb1wiLFxuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJkb19tYWR2aXNlXCIsXG4gICAgXCJkb19taWdyYXRlX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pYCBjaGVja3MgaW4gc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIChEQU1PTiwgbWFkdmlzZSwgbWVtcG9saWN5KSB0byBwcmV2ZW50IHByb2Nlc3NpbmcgWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgZm9yIG1lbW9yeSBvcGVyYXRpb25zIG9uIFpPTkVfREVWSUNFIG1lbW9yeS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlLCBtYmluZCwgbWlncmF0ZV9wYWdlcywgYW5kIERBTU9OIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjIwLjU1ODMxOTI0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzYzNjI2MTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjdmMTRlYzI1ZGI3ZGQ3ZTRhYjRmNDVkOTgwYzg2OWIyNWE5ODRjOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAwMjoxMjoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcXG5pbmRleCBmYmRhNzBkOGVhNGQwLi5hZjNhOWVhZDE5ZTA1IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbkBAIC0zMiw3ICszMiw4IEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuIFxcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkge1xcbitcXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fFxcbitcXHQgICAgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKSB7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdGZvbGlvID0gTlVMTDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDczNTIyZjI5NmNlZTIuLjBiNDgxMTI1NzQ4ODIgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMjMzOCw2ICsyMzM4LDEwIEBAIGJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHR9XFxuIFxcbiBcXHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XFxuK1xcbitcXHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIG90aGVyIHByb2Nlc3NlcyBhcmUgbWFwcGluZyB0aGlzIGZvbGlvLCB3ZSBjb3VsZG4ndCBkaXNjYXJkXFxuIFxcdCAqIHRoZSBmb2xpbyB1bmxlc3MgdGhleSBhbGwgZG8gTUFEVl9GUkVFIHNvIGxldCdzIHNraXAgdGhlIGZvbGlvLlxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCAwN2EyMWNhMzFiYWQ0Li5mZmQ2YTY4MzIwYTg2IDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC0zOTUsNiArMzk1LDkgQEAgc3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4gXFxuIFxcdFxcdGZvbGlvID0gcG1kX2ZvbGlvKG9yaWdfcG1kKTtcXG4gXFxuK1xcdFxcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuK1xcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuK1xcbiBcXHRcXHQvKiBEbyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbWFwcGluZ3Mgb2YgdGhpcyBmb2xpbyAqL1xcbiBcXHRcXHRpZiAoZm9saW9fbWF5YmVfbWFwcGVkX3NoYXJlZChmb2xpbykpXFxuIFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcXG5pbmRleCA1NzIwZjdmNTRkOTQyLi5iZDc5ZTYxYTQwZDFhIDEwMDY0NFxcbi0tLSBhL21tL21lbXBvbGljeS5jXFxuKysrIGIvbW0vbWVtcG9saWN5LmNcXG5AQCAtNjY4LDYgKzY2OCw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX2ZvbGlvc19wbWQocG1kX3QgKnBtZCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIFxcdH1cXG4gXFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxcbiBcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuK1xcdFxcdHJldHVybjtcXG4gXFx0aWYgKCEocXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxcbiBcXHQgICAgIXZtYV9taWdyYXRhYmxlKHdhbGstXFx1MDAzZXZtYSkgfHxcXG4gXFx0ICAgICFtaWdyYXRlX2ZvbGlvX2FkZChmb2xpbywgcXAtXFx1MDAzZXBhZ2VsaXN0LCBxcC1cXHUwMDNlZmxhZ3MpKVxcbkBAIC03OTcsNiArNzk5LDggQEAgc3RhdGljIGludCBxdWV1ZV9mb2xpb3NfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiBcXHRmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKHB0ZXApKTtcXG4gXFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0aWYgKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdGlmICghKGZsYWdzIFxcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxcbiBcXHQgICAgIXZtYV9taWdyYXRhYmxlKHdhbGstXFx1MDAzZXZtYSkpIHtcXG4gXFx0XFx0cXAtXFx1MDAzZW5yX2ZhaWxlZCsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjoyMC45MjI3Mzk2MjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTAyMzEwMzM2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJNRU1PUllfSE9UUkVNT1ZFXCIsXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fZ2V0X2ZvbGlvXCIsXG4gICAgXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIixcbiAgICBcImRvX21hZHZpc2VcIixcbiAgICBcImRvX21pZ3JhdGVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcyBpbiBzZXZlcmFsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKERBTU9OLCBtYWR2aXNlLCBtZW1wb2xpY3kpIHRvIHByZXZlbnQgcHJvY2Vzc2luZyBaT05FX0RFVklDRSBmb2xpb3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBleGVjdXRpb24gZmxvdyBmb3IgbWVtb3J5IG9wZXJhdGlvbnMgb24gWk9ORV9ERVZJQ0UgbWVtb3J5LiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG1hZHZpc2UsIG1iaW5kLCBtaWdyYXRlX3BhZ2VzLCBhbmQgREFNT04gaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjdmMTRlYzI1ZGI3ZGQ3ZTRhYjRmNDVkOTgwYzg2OWIyNWE5ODRjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAyOjEyOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5pbmRleCBmYmRhNzBkOGVhNGQwLi5hZjNhOWVhZDE5ZTA1IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC0zMiw3ICszMiw4IEBAIHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuIFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIFx0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkge1xuK1x0aWYgKHVubGlrZWx5KHBhZ2VfZm9saW8ocGFnZSkgIT0gZm9saW8pIHx8ICFmb2xpb190ZXN0X2xydShmb2xpbykgfHxcbitcdCAgICBmb2xpb19pc196b25lX2RldmljZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0Zm9saW8gPSBOVUxMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA3MzUyMmYyOTZjZWUyLi4wYjQ4MTEyNTc0ODgyIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTIzMzgsNiArMjMzOCwxMCBAQCBib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdH1cbiBcbiBcdGZvbGlvID0gcG1kX2ZvbGlvKG9yaWdfcG1kKTtcbitcbitcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0LypcbiBcdCAqIElmIG90aGVyIHByb2Nlc3NlcyBhcmUgbWFwcGluZyB0aGlzIGZvbGlvLCB3ZSBjb3VsZG4ndCBkaXNjYXJkXG4gXHQgKiB0aGUgZm9saW8gdW5sZXNzIHRoZXkgYWxsIGRvIE1BRFZfRlJFRSBzbyBsZXQncyBza2lwIHRoZSBmb2xpby5cbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDA3YTIxY2EzMWJhZDQuLmZmZDZhNjgzMjBhODYgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTM5NSw2ICszOTUsOSBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFxuIFx0XHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XG4gXG4rXHRcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4rXHRcdFx0Z290byBodWdlX3VubG9jaztcbitcbiBcdFx0LyogRG8gbm90IGludGVyZmVyZSB3aXRoIG90aGVyIG1hcHBpbmdzIG9mIHRoaXMgZm9saW8gKi9cbiBcdFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxuIFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xuaW5kZXggNTcyMGY3ZjU0ZDk0Mi4uYmQ3OWU2MWE0MGQxYSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTY2OCw2ICs2NjgsOCBAQCBzdGF0aWMgdm9pZCBxdWV1ZV9mb2xpb3NfcG1kKHBtZF90ICpwbWQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIFx0fVxuIFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxuIFx0XHRyZXR1cm47XG4rXHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuK1x0XHRyZXR1cm47XG4gXHRpZiAoIShxcC1cdTAwM2VmbGFncyBcdTAwMjYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSB8fFxuIFx0ICAgICF2bWFfbWlncmF0YWJsZSh3YWxrLVx1MDAzZXZtYSkgfHxcbiBcdCAgICAhbWlncmF0ZV9mb2xpb19hZGQoZm9saW8sIHFwLVx1MDAzZXBhZ2VsaXN0LCBxcC1cdTAwM2VmbGFncykpXG5AQCAtNzk3LDYgKzc5OSw4IEBAIHN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbiBcdGZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4ocHRlcCkpO1xuIFx0aWYgKCFxdWV1ZV9mb2xpb19yZXF1aXJlZChmb2xpbywgcXApKVxuIFx0XHRnb3RvIHVubG9jaztcbitcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4rXHRcdGdvdG8gdW5sb2NrO1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgfHxcbiBcdCAgICAhdm1hX21pZ3JhdGFibGUod2Fsay1cdTAwM2V2bWEpKSB7XG4gXHRcdHFwLVx1MDAzZW5yX2ZhaWxlZCsrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6MjAuOTIyNzQxMDU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwNzI4MzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIGl0J3MgbWFraW5nIGNoYW5nZXMgdG8gc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGVzLiBJIHNlZSBpdCB0b3VjaGVzIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tYWR2aXNlLmNgLCBhbmQgYG1tL21lbXBvbGljeS5jYC4gRnJvbSBhIGdsYW5jZSwgaXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcy4gVGhpcyBzaG91bGQgYXZvaWQgcHJvY2Vzc2luZyB6b25lIGRldmljZSBmb2xpb3MsIHdoaWNoIGlzIGEgc2Vuc2libGUgZnVuY3Rpb25hbCBjaGFuZ2UgYWNyb3NzIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBEQU1PTiwgbWFkdmlzZSwgYW5kIG1lbXBvbGljeS5cblxuTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZmZWN0ZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gVGhlIHBhdGNoIG1vZGlmaWVzOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBgcXVldWVfZm9saW9zX3BtZGAsIGFuZCBgcXVldWVfZm9saW9zX2h1Z2V0bGJgLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBpbmZsdWVuY2UuIEFyZSB0aGVzZSBmdW5jdGlvbnMgc3RhdGljIG9yIGdsb2JhbD8gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdHJ1Y3R1cmUuIE9rYXksIGxldCdzIHNlZS4gYGRhbW9uX2dldF9mb2xpb2AgYW5kIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGFyZSAqbm9uLXN0YXRpYyosIHdoaWNoIG1lYW5zIHRoZXkgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGBxdWV1ZV9mb2xpb3NfcG1kYCwgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAgYXJlIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIHZpc2liaWxpdHkuIEhtbW0sIHNvIEkgc2hvdWxkIHNlZSB3aGF0IGNhbGxzIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuIFxuXG5TaW5jZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBpcyBzdGF0aWMsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYG1hZHZpc2VfY29sZGAsIGBtYWR2aXNlX3BhZ2VvdXRgLCBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIG9yIGBkb19tYWR2aXNlYC4gVGhlIHBhdGNoIHdpbGwgYmUgY2FsbGVkIGJ5IG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMuIFNpbWlsYXJseSwgZm9yIHRoZSBzdGF0aWMgYHF1ZXVlX2ZvbGlvc19wbWRgIGFuZCBgcXVldWVfZm9saW9zX2h1Z2V0bGJgLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2VgLCBgcXVldWVfcGFnZXNfcmFuZ2VgIGFuZCBgZG9fbWJpbmRgLlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIGFuZCBgZGFtb25fZ2V0X2ZvbGlvYCBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZyb20gdGhpcyBpbml0aWFsIGFuYWx5c2lzLiBUaGVzZSBhcmUgdmlzaWJsZSBhbmQsIHRodXMsIHByb2JhYmx5IHRoZSBwb2ludHMgb2YgZW50cnkgYW5kIGludGVncmF0aW9uIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NywiT3V0cHV0VG9rZW5zIjo3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjI3LjQzMDAyNzE1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTIxNjYyNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KGludHx2b2lkfGJvb2x8c3RydWN0IGZvbGlvIFxcXFwqKSAoZGFtb25fZ2V0X2ZvbGlvfG1hZHZpc2VfZnJlZV9odWdlX3BtZHxtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2V8cXVldWVfZm9saW9zX3BtZHxxdWV1ZV9mb2xpb3NfaHVnZXRsYilcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOS1cXHRcXHRcXHQgICBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyMzU9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzMTQtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyMzE1OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMxNi1cXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4tLVxcbm1tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNTItXFxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbm1tL21hZHZpc2UuYy0zNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY1Mi1cXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5tbS9tZW1wb2xpY3kuYy02NTQte1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03NzUtXFxubW0vbWVtcG9saWN5LmM6Nzc2OnN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG5tbS9tZW1wb2xpY3kuYy03NzctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjMwLjU1MTY5Njk3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg2MjM5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9uIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaWcgaW50byB0aGlzLiBNeSBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIHRoZXNlIHRocmVlIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzOiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYHF1ZXVlX2ZvbGlvc19wbWRgLCBhbmQgYHF1ZXVlX2ZvbGlvc19odWdldGxiYC4gS25vd2luZyB0aGUgY2FsbGVycyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzIGFyZSBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiB3b3JrbG9hZHMgYW5kIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgdHJpZ2dlciB0aGVpciBpbnZvY2F0aW9uLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3Igc3lzdGVtIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyBpbnZvbHZpbmcgcGFnZSByZWNsYWltLCBjb2xkIGRhdGEgZXZpY3Rpb24sIG9yIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWlucyB3aWxsIGdpdmUgaW5zaWdodCBpbnRvIHRoZSBsb2dpYyBkcml2aW5nIHRoZXNlIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjozMy43NjAzMjI5OTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MDU0MzE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTM0Mz1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTM1Mi1cXG5tbS9tYWR2aXNlLmM6MzUzOnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxubW0vbWFkdmlzZS5jLTM1NC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWFkdmlzZS5jPTU3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jOjU3MjpcXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxcbm1tL21hZHZpc2UuYy01NzMtXFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjM1LjQwMDg3MTQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NzUzMDA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgIFVzYWdlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgcHJpbWFyaWx5IGxldmVyYWdlZCB3aXRoaW4gdGhlIGBjb2xkX3dhbGtfb3BzYCBhbmQsIG1vcmUgdGhhbiBsaWtlbHksIGBwYWdlb3V0X3dhbGtfb3BzYCBzdHJ1Y3R1cmVzLiBUaGF0J3MgbXkgaW1tZWRpYXRlIHdvcmtpbmcgaHlwb3RoZXNpcy5cblxuTm93LCB0byByZWFsbHkgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGhvdyB0aGVzZSBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIGFjdHVhbGx5ICpxdWV1ZWQqIGZvciBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gZHJpbGwgaW50byBgcXVldWVfZm9saW9zX3BtZGAgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAuIFRoZXkncmUgcHJvYmFibHkga2V5IHRvIHdoZXJlIGFuZCB3aGVuIHRoZXNlIGNvbGQgb3IgcGFnZW91dCBvcGVyYXRpb25zIGNvbWUgaW50byBwbGF5LiBVbmRlcnN0YW5kaW5nIHRob3NlIGZ1bmN0aW9ucyB3aWxsIHNob3cgbWUgaG93IHRoaXMgYG1hZHZpc2VgIGhpbnQgaXMgdXNlZCBhdCBhIGJyb2FkZXIgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjozOS4xODg0MDQ4OTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjkxNTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdWV1ZV9mb2xpb3NfcG1kfHF1ZXVlX2ZvbGlvc19odWdldGxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTY0ND1zdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfZm9saW9fcmVxdWlyZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY1Mi1cXG5tbS9tZW1wb2xpY3kuYzo2NTM6c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5tbS9tZW1wb2xpY3kuYy02NTQte1xcbi0tXFxubW0vbWVtcG9saWN5LmM9Njg5PXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03MDItXFx0aWYgKHB0bCkge1xcbm1tL21lbXBvbGljeS5jOjcwMzpcXHRcXHRxdWV1ZV9mb2xpb3NfcG1kKHBtZCwgd2Fsayk7XFxubW0vbWVtcG9saWN5LmMtNzA0LVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYy03NzUtXFxubW0vbWVtcG9saWN5LmM6Nzc2OnN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG5tbS9tZW1wb2xpY3kuYy03NzctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcXG5tbS9tZW1wb2xpY3kuYzo5NTk6XFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxcbm1tL21lbXBvbGljeS5jLTk2MC1cXHQucG1kX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcXVldWVfcGFnZXNfbG9ja192bWFfd2Fsa19vcHMgPSB7XFxubW0vbWVtcG9saWN5LmM6OTY2OlxcdC5odWdldGxiX2VudHJ5XFx0XFx0PSBxdWV1ZV9mb2xpb3NfaHVnZXRsYixcXG5tbS9tZW1wb2xpY3kuYy05NjctXFx0LnBtZF9lbnRyeVxcdFxcdD0gcXVldWVfZm9saW9zX3B0ZV9yYW5nZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6NDAuOTUxMzI1NzQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0Mzg4NDQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIGBtbV93YWxrX29wc2AgYW5kIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGBtbV93YWxrX29wc2AgYXJlIHVzZWQuIFRoaXMgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFjdGlvbiBoYXBwZW5zLCBwYXJ0aWN1bGFybHkgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIHdpdGggYGRvX21iaW5kYCBvciBgbWJpbmRgIGRyaXZpbmcgbWVtcG9saWN5IGNoYW5nZXMgYW5kIGBtYWR2aXNlYCBmb3IgdGhlIG1hZHZpc2Ugc3R1ZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hlcmUgdGhhdCBpbnRlcmFjdGlvbiBwb2ludCBpcy4gSSdsbCBiZXQgaXQncyBzb21ldGhpbmcgbGlrZSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIHRoYXTigJlzIHRoZSBrZXkgZnVuY3Rpb24uIFRpbWUgdG8gZGlnIGludG8gdGhhdCBzcGVjaWZpYyBhcmVhIGFuZCBjb25uZWN0IHRoZSBkb3RzLiBMZXQncyBzZWUgaWYgdGhhdCdzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY5NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjQzLjk5NTIxMjcxOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2OTkxNjY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xkX3dhbGtfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNTM9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy01NzAtXFxubW0vbWFkdmlzZS5jOjU3MTpzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jLTU3Mi1cXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxcbi0tXFxubW0vbWFkdmlzZS5jPTU3Nj1zdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWFkdmlzZS5jLTU4Ny1cXHR0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTtcXG5tbS9tYWR2aXNlLmM6NTg4OlxcdHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsIFxcdTAwMjZjb2xkX3dhbGtfb3BzLFxcbm1tL21hZHZpc2UuYy01ODktXFx0XFx0XFx0XFx1MDAyNndhbGtfcHJpdmF0ZSk7XFxuLS1cXG5tbS9tYWR2aXNlLmM9NjE0PXN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNjIzLVxcdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xcbm1tL21hZHZpc2UuYzo2MjQ6XFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCwgXFx1MDAyNmNvbGRfd2Fsa19vcHMsXFxubW0vbWFkdmlzZS5jLTYyNS1cXHRcXHRcXHQgICAgXFx1MDAyNndhbGtfcHJpdmF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjQ1LjQ2NTEzNjk3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg1ODc1NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtYWR2aXNlYCBCZWhhdmlvcioqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIGJhY2sgc29tZSBgbWFkdmlzZWAgY2FsbHMgaGVyZSwgZm9jdXNpbmcgb24gbWVtb3J5IG1hbmFnZW1lbnQuIFNlZW1zIGxpa2UgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCBhbmQgYG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlYCBhcmUgdGhlIGtleSBjYWxsZXJzIG9mIGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGVzZSBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSdyZSBiZWluZyB1c2VkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIGhvdyB0aGUgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGVzZSBjYWxscy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQgdGhlIGludGVuZGVkIGJlaGF2aW9yIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgVk1BIGFuZCBob3cgdGhlIGhpbnRzIG9yIGZsYWdzIHBhc3NlZCB0byBgbWFkdmlzZWAgYXJlIGJlaW5nIGludGVycHJldGVkIGFuZCBhY3RlZCB1cG9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgVk1BIHN0YXRlcyBhbmQgdHJhbnNpdGlvbnMgdGhhdCBoYXBwZW4gaW4gcmVzcG9uc2UgdG8gdGhlc2UgYG1hZHZpc2VgIGhpbnRzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcyBiZWluZyBlbXBsb3llZCBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHV0aWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6NDguNjUxMDIwMDA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMyMzU4MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfY29sZF9wYWdlX3JhbmdlfG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbi0tXFxubW0vbWFkdmlzZS5jLTU3NS1cXG5tbS9tYWR2aXNlLmM6NTc2OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTU3Ny1cXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYz01OTg9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTYwNy1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjYwODpcXHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtNjA5LVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi0tXFxubW0vbWFkdmlzZS5jLTYxMy1cXG5tbS9tYWR2aXNlLmM6NjE0OnN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTYxNS1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYz02Mjk9c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTY0OC1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjY0OTpcXHRtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCB2bWEsIFxcdTAwMjZtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZSk7XFxubW0vbWFkdmlzZS5jLTY1MC1cXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6NTAuNTgzMzg1NzczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODg4OTkwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZWAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHNvIEkndmUgZ290IGBtYWR2aXNlX2NvbGRgIGFuZCBgbWFkdmlzZV9wYWdlb3V0YCBmbGFnZ2VkIGFzIHRoZSBwcmltYXJ5IGNhbGxlcnMgaGVyZS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zLiBMZXQncyBkaWcgaW50byBgcXVldWVfcGFnZXNfd2Fsa19vcHNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoYXQgbGV2ZWwgdG8gdHJ1bHkgZ3Jhc3AgdGhlIGZsb3cuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDQ5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTI6NTMuMzcyMjg3MTI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA1OTUxMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3BhZ2VzX3dhbGtfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTkxNz1zdGF0aWMgaW50IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2Fsayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTk1Ny1cXG5tbS9tZW1wb2xpY3kuYzo5NTg6c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc193YWxrX29wcyA9IHtcXG5tbS9tZW1wb2xpY3kuYy05NTktXFx0Lmh1Z2V0bGJfZW50cnlcXHRcXHQ9IHF1ZXVlX2ZvbGlvc19odWdldGxiLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9OTg3PXF1ZXVlX3BhZ2VzX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTEwMDAtXFx0Y29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSAoZmxhZ3MgXFx1MDAyNiBNUE9MX01GX1dSTE9DSykgP1xcbm1tL21lbXBvbGljeS5jOjEwMDE6XFx0XFx0XFx0XFx1MDAyNnF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzIDogXFx1MDAyNnF1ZXVlX3BhZ2VzX3dhbGtfb3BzO1xcbm1tL21lbXBvbGljeS5jLTEwMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEyOjU0Ljc3ODI0MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcxMDEzOTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrOiBgcXVldWVfcGFnZXNfcmFuZ2VgIGluIEZvY3VzKipcblxuQWxyaWdodCwgc28gdGhlIHByaW1hcnkgdGhpbmcgSSdtIGZvY3VzaW5nIG9uIHJpZ2h0IG5vdyBpcyB0aGUgZnVuY3Rpb24gYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhhdCdzIHRoZSBjYWxsZXIuIFVuZGVyc3RhbmRpbmcgKml0cyogZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCB3aGVyZSB0aGUgYXBwbGljYXRpb24gZmxvdyBpcyByaWdodCBub3cuIEl0IG1lYW5zIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHdoYXQga2luZCBvZiBsb2dpYyBpcyBkcml2aW5nICppdCogYW5kIHRoZW4gd29yayBiYWNrIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFdoYXQgdHJpZ2dlcnMgKnRoYXQqIG9uZT8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgd2hhdCBwcmVjaXNlbHkgaXMgaXQgdHJ5aW5nIHRvIGFjaGlldmU/IEknbGwgcHJvYmFibHkgYmUgZGl2aW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBgcXVldWVfcGFnZXNfcmFuZ2VgIGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgYW5kIHdoeSBpdCBpcyBjYWxsaW5nIHdoYXQgaXQgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjo1Ny40ODgzODQyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTg1NTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdWV1ZV9wYWdlc19yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz02ODk9c3RhdGljIGludCBxdWV1ZV9mb2xpb3NfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTc0OS1cXHRcXHRcXHQgKiBtaWdyYXRlX3BhZ2VzKFxcdTAwMjZwYWdlbGlzdCkgcmV0dXJucyBucl9mYWlsZWQgZm9saW9zLCBzb1xcbm1tL21lbXBvbGljeS5jOjc1MDpcXHRcXHRcXHQgKiBjaGVjayBcXFwibGFyZ2VcXFwiIG5vdyBzbyB0aGF0IHF1ZXVlX3BhZ2VzX3JhbmdlKCkgcmV0dXJuc1xcbm1tL21lbXBvbGljeS5jLTc1MS1cXHRcXHRcXHQgKiBhIGNvbXBhcmFibGUgbnJfZmFpbGVkIGZvbGlvcy4gIFRoaXMgZG9lcyBpbXBseSB0aGF0XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBxdWV1ZV9wYWdlc19sb2NrX3ZtYV93YWxrX29wcyA9IHtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTk3Ny0gKlxcbm1tL21lbXBvbGljeS5jOjk3ODogKiBxdWV1ZV9wYWdlc19yYW5nZSgpIG1heSByZXR1cm46XFxubW0vbWVtcG9saWN5LmMtOTc5LSAqIDAgLSBhbGwgcGFnZXMgYWxyZWFkeSBvbiB0aGUgcmlnaHQgbm9kZSwgb3Igc3VjY2Vzc2Z1bGx5IHF1ZXVlZCBmb3IgbW92aW5nXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz05ODY9c3RhdGljIGxvbmdcXG5tbS9tZW1wb2xpY3kuYzo5ODc6cXVldWVfcGFnZXNfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL21lbXBvbGljeS5jLTk4OC1cXHRcXHRub2RlbWFza190ICpub2RlcywgdW5zaWduZWQgbG9uZyBmbGFncyxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTEyODk9c3RhdGljIGxvbmcgbWlncmF0ZV90b19ub2RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgc291cmNlLCBpbnQgZGVzdCxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTEzMjAtXFx0ICovXFxubW0vbWVtcG9saWN5LmM6MTMyMTpcXHRucl9mYWlsZWQgPSBxdWV1ZV9wYWdlc19yYW5nZShtbSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgbW0tXFx1MDAzZXRhc2tfc2l6ZSwgXFx1MDAyNm5tYXNrLFxcbm1tL21lbXBvbGljeS5jLTEzMjItXFx0XFx0XFx0XFx0ICAgICAgZmxhZ3MgfCBNUE9MX01GX0RJU0NPTlRJR19PSywgXFx1MDAyNnBhZ2VsaXN0KTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0OTM9c3RhdGljIGxvbmcgZG9fbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNTU2LVxcdCAqL1xcbm1tL21lbXBvbGljeS5jOjE1NTc6XFx0bnJfZmFpbGVkID0gcXVldWVfcGFnZXNfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLFxcbm1tL21lbXBvbGljeS5jLTE1NTgtXFx0XFx0XFx0ZmxhZ3MgfCBNUE9MX01GX0lOVkVSVCB8IE1QT0xfTUZfV1JMT0NLLCBcXHUwMDI2cGFnZWxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMjo1OC45MDQyNDUyNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNDY4MDA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBNZW1vcnkgTWFuYWdlbWVudCBDYWxscyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggcmVzcGVjdCB0byBodWdlIHBhZ2VzIGFuZCBOVU1BLiBUaGlua2luZyBpdCB0aHJvdWdoLCB0aGUga2V5IGNhbGxzIGluaXRpYXRpbmcgdGhpcyBwcm9jZXNzIGFwcGVhciB0byBiZSBgZG9fbWJpbmRgIGFuZCBgbWlncmF0ZV90b19ub2RlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuIE5vdywgd2hlbiBkZWFsaW5nIHdpdGggdGhhdCBsZXZlbCBvZiBpbnRlcmFjdGlvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB1bmRlcm5lYXRoIGFuZCB0aGUgaW1wb3J0YW50IGNhbGwgaW4gdGhhdCBjaGFpbiBpcyBsaWtlbHkgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAuIEdvaW5nIGluIHRoZXJlIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBtYXAgb3V0IHRoZSBpbnRlcm5hbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMTEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzowMS44Mjg5Mjk0MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTk5MjU4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfd3BfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjg6Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjktXFx0XFx0XFx0ICAgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMjM1PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfbnVtYV9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMzE0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjMxNTpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTIzMTYtXFx0XFx0cG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQpXFxuLS1cXG5tbS9tYWR2aXNlLmM9NjU1PXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNjcxLVxcdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kKSlcXG5tbS9tYWR2aXNlLmM6NjcyOlxcdFxcdGlmIChtYWR2aXNlX2ZyZWVfaHVnZV9wbWQodGxiLCB2bWEsIHBtZCwgYWRkciwgbmV4dCkpXFxubW0vbWFkdmlzZS5jLTY3My1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MDMuMjQ4ODYyOTc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODY4NjAzNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkNvbm5lY3RpbmcgdGhlIERvdHMgaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgbWFkdmlzZWAgd29ya3MsIHNwZWNpZmljYWxseSB0aGUgYE1BRFZfRlJFRWAgZmxhZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gZmluZCBob3cgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIGNvbm5lY3RzIHRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzZWUgaXQncyBjYWxsaW5nIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLiBUaGF0IGltbWVkaWF0ZWx5IHNwYXJrcyBhIHF1ZXN0aW9uIGluIG15IG1pbmQ6IHdoeSB0aGUganVtcCB0byBIdWdlIFBNRHM/IElzIHRoaXMgcmVsYXRlZCB0byBmcmVlaW5nIGxhcmdlciBibG9ja3Mgb2YgbWVtb3J5IGF0IG9uY2U/XG5cblRoZW4gSSB0aGluayBiYWNrIHRvIHRoZSBjYWxscy4gSSByZWNhbGwgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgIGlzIGEgY29yZSBmdW5jdGlvbi4gSSBoYXZlIGEgaHVuY2ggaXQncyBwYXJ0IG9mIHRoZSBgbWFkdmlzZV9mcmVlX3NpbmdsZV92bWFgIGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBsaW5rIHRvIGB2bWFgLCBhcyBgdm1hYCBpcyB0aGUgY29yZSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIHZpcnR1YWwgbWVtb3J5IGFyZWFzLiBJIHN1cHBvc2UgaXQgbXVzdCBiZSBzb21lIGtpbmQgb2YgaXRlcmF0aW9uIG9yIG1hbmlwdWxhdGlvbiBvZiB0aGUgdm1hIHN0cnVjdHVyZS5cblxuVGhlIGNvbm5lY3Rpb24gZnJvbSBgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZWAgdG8gYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IGl0J3MgdXNlZCB3aXRoIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBwcm9iYWJseSBpbiB0aGUgaGFuZGxpbmcgb2YgYSBzcGVjaWZpYyB2aXJ0dWFsIG1lbW9yeSBzZWdtZW50IHRoYXQgcmVxdWlyZXMgYE1BRFZfRlJFRWAuIFRpbWUgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBhbmQgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGEgY2xvc2VyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MDUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzowNi45MzU3MjU3NDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzU2NTg2NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9mcmVlX3B0ZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9NjI5PXN0YXRpYyBsb25nIG1hZHZpc2VfcGFnZW91dChzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy02NTQtXFxubW0vbWFkdmlzZS5jOjY1NTpzdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21hZHZpc2UuYy02NTYtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbi0tXFxubW0vbWFkdmlzZS5jPTgwMj1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9zaW5nbGVfdm1hKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTgxMS1cXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jOjgxMjpcXHRcXHQucG1kX2VudHJ5XFx0XFx0PSBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlLFxcbm1tL21hZHZpc2UuYy04MTMtXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MDguNjcxMzg4NjY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTAxNDMzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbWFkdmlzZV9mcmVlX3NpbmdsZV92bWFgIENhbGxlcioqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAuIFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhpcyBwYXJ0aWN1bGFyIHByb2Nlc3MsIGFuZCB0aGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgd2hhdCBkb2VzIGl0IGFjdHVhbGx5ICpkbyo/IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCwgYnV0IGZvciBub3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpdHNlbGYgdHJpZ2dlcnMuXG5cbk9rYXksIG5vdyBsZXQncyBzZWUgd2hlcmUgdGhhdCB0YWtlcyBtZS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgYGRhbW9uX2dldF9mb2xpb2AsIHRoZSBuZXh0IHBpZWNlIHRvIGFuYWx5emUuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBmb2xpbyBpcyByZXRyaWV2ZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSB3b3JrZmxvdy4gSSdsbCBmb2N1cyBvbiBob3cgdGhlIGZvbGlvIGlzIGJlaW5nIGhhbmRsZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjExLjYyMTUzNDIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2MTIzODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2dldF9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmMtMTgtXFxubW0vZGFtb24vY29yZS5jOjE5Oi8qIGZvciBkYW1vbl9nZXRfZm9saW8oKSB1c2VkIGJ5IG5vZGUgZWxpZ2libGUgbWVtb3J5IG1ldHJpY3MgKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjAtI2luY2x1ZGUgXFxcIm9wcy1jb21tb24uaFxcXCJcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yODI1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX2dldF9ub2RlX21lbWNnX3VzZWRfYnAoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjg3Ni0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyODc3OiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZGFtb25fZ2V0X2ZvbGlvKCkgZnJvbSBvcHMtY29tbW9uLmMsIHdoaWNoIGlzXFxubW0vZGFtb24vY29yZS5jLTI4NzgtICogb25seSBhdmFpbGFibGUgd2hlbiBDT05GSUdfREFNT05fUEFERFIgaXMgZW5hYmxlZC4gSXQgYWxzbyByZXF1aXJlcyB0aGVcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yODgxPXN0YXRpYyBwaHlzX2FkZHJfdCBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjkwNC1cXG5tbS9kYW1vbi9jb3JlLmM6MjkwNTpcXHRcXHRcXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XFxubW0vZGFtb24vY29yZS5jLTI5MDYtXFx0XFx0XFx0XFx0aWYgKCFmb2xpbykge1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIzLSAqL1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyNDpzdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjUte1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTQzPXZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTU0LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo1NTpcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy01Ni1cXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTc0PXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTg2LVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzo4NzpcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy04OC1cXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTctXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjg6c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zOD1zdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG5tbS9kYW1vbi9wYWRkci5jLTM5LXtcXG5tbS9kYW1vbi9wYWRkci5jOjQwOlxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTQxLVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz02OD1zdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkcilcXG5tbS9kYW1vbi9wYWRkci5jLTY5LXtcXG5tbS9kYW1vbi9wYWRkci5jOjcwOlxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTcxLVxcdGJvb2wgYWNjZXNzZWQ7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTE1Nz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTE3NS1cXHRcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCk7XFxubW0vZGFtb24vcGFkZHIuYzoxNzY6XFx0XFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTE3Ny1cXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MjIwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3BhZ2VvdXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjQ2LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MjQ3OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTI0OC1cXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9Mjc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjg3LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg4OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTI4OS1cXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzM1LVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM2OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTMzNy1cXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzczLVxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZGFtb25fcGFfcGh5c19hZGRyKHItXFx1MDAzZWFyLmVuZCwgYWRkcl91bml0KSkge1xcbm1tL2RhbW9uL3BhZGRyLmM6Mzc0OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKGFkZHIpKTtcXG5tbS9kYW1vbi9wYWRkci5jLTM3NS1cXHRcXHRpZiAoZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhmb2xpbywgcykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MTMuMTQ3NjYzMzI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTc2NTMxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCBmb3IgWk9ORV9ERVZJQ0UgRm9saW8gSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBkYW1vbl9nZXRfZm9saW9gIGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkLCBhbmQgaXQncyB1c2VkIGV4dGVuc2l2ZWx5IHdpdGhpbiBEQU1PTi4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0aGUgaW5jbHVzaW9uIG9mIGBmb2xpb19pc196b25lX2RldmljZShmb2xpbylgIGNoZWNrcy4gVGhpcyBjbGVhcmx5IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgWk9ORV9ERVZJQ0UgZm9saW9zIGZyb20gYmVpbmcgcHJvY2Vzc2VkLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGb3IgREFNT04gaXRzZWxmLCBJJ2xsIGxvb2sgZm9yIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1BBRERSYCwgYW5kIGBDT05GSUdfREFNT05fVkFERFJgLiBGb3IgY29udGV4dCwgSSBzaG91bGQgYWxzbyBjb25zaWRlciBob3cgdGhpcyBtaWdodCByZWxhdGUgdG8gbWFkdmlzZSwgc28gSSdsbCBjaGVjayBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIChwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCkuIEFuZCBqdXN0IGZvciBjb21wbGV0ZW5lc3MsIGdpdmVuIERBTU9OJ3MgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBwbGFjZW1lbnQsIEkgc2hvdWxkIGFsc28gdmVyaWZ5IGBDT05GSUdfTlVNQWAgaXMgc3RpbGwgY29uc2lkZXJlZC5cblxuTGV0J3MgZGl2ZSBpbnRvIGBtbS9LY29uZmlnYCB0byBzdGFydCBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIGFyb3VuZCBgREFNT05gIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MTcuNTQ1MzE4NzE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxMzkyMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjE4Ljk4NjcxOTIwNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU1NTYxMjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBteSBicmFpbiBqdXN0IGtpY2tlZCBpbiBhbmQgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB6ZXJvaW5nIGluIG9uIHRoZSBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBjb25maWd1cmF0aW9uLiBUaW1lIHRvIHRha2UgYSBsb29rIGF0IGl0LiBJIGtub3cgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNldHRpbmcgcXVpdGUgd2VsbCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250ZXh0LiBXaGF0J3MgdGhlIHN5c3RlbSBsb2FkIGxpa2U/IEFyZSB3ZSBzZWVpbmcgYW55IHVuZXhwZWN0ZWQgbWVtb3J5IGZyYWdtZW50YXRpb24gb3IgcGVyZm9ybWFuY2UgZGlwcyB0aGF0IHRoaXMgY29uZmlnIG1pZ2h0IGJlIGludm9sdmVkIHdpdGg/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaWYgaXQgYWxpZ25zIHdpdGggdGhlIGFwcGxpY2F0aW9uJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIGdvYWxzLiBBIHF1aWNrIGNoZWNrIHdpbGwgY29uZmlybSBpZiBpdCBpcyBzZXQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM4MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjIxLjk0MjI4MjI2MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNTY0MTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2ZyZWVfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc9dm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyODpib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOS1cXHRcXHRcXHQgICBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyMzU9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzMTQtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyMzE1OmJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMxNi1cXHRcXHRwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dClcXG4tLVxcbm1tL21hZHZpc2UuYz02NTU9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21hZHZpc2UuYy02NzEtXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWQpKVxcbm1tL21hZHZpc2UuYzo2NzI6XFx0XFx0aWYgKG1hZHZpc2VfZnJlZV9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyLCBuZXh0KSlcXG5tbS9tYWR2aXNlLmMtNjczLVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzoyMy4zNDc5MzA1NjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNDkxMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIFRIUCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgY29uZGl0aW9uYWxseSBjb21waWxpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGF0J3Mgbm8gc3VycHJpc2U7IGl0J3MgcHJhY3RpY2FsbHkgdGhlIGNlbnRyYWwgZmlsZSBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIChUSFApLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGVsbGluZyBtZSB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3B0aW9uLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIsIGlzbid0IGl0PyBJZiB0aGF0J3MgKm5vdCogZW5hYmxlZCwgdGhlbiB0aGUgZW50aXJlIG1vZHVsZSBjb250YWluaW5nIGBtbS9odWdlX21lbW9yeS5jYCB3b24ndCBldmVuIGJlIHBhcnQgb2YgdGhlIGJ1aWxkLiBJdCdzIGEga2V5IGRlcGVuZGVuY3kuIE5vIFRIUCwgbm8gY29kZS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMuIFdoZW4gSSBzZWUgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgSSBrbm93IHRoYXQgYWxsIHRoZSBUSFAtc3BlY2lmaWMgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgY29yZSBUSFAgbWFuYWdlbWVudCBsb2dpYyB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFyZSBiZWluZyBicm91Z2h0IGludG8gdGhlIGtlcm5lbCAqb25seSogaWYgdGhlIHVzZXIgY29uZmlndXJlcyB0aGUga2VybmVsIGZvciBUSFAgc3VwcG9ydC4gSXTigJlzIGFuIGVzc2VudGlhbCBsaW5rIGluIHRoZSBjaGFpbiBmb3IgVEhQIGZ1bmN0aW9uYWxpdHkuIEkga25vdyB0aGlzIGZpbGUgaG9sZHMgZnVuY3Rpb25zIGxpa2UgYF9fYWxsb2NfaHVnZXBhZ2VgLCBgX19mcmVlX2h1Z2VwYWdlYCwgYHNwbGl0X2h1Z2VfcGFnZWAsIGFuZCBzbyBvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGxpbmthZ2UgaGVscHMgbWUgZGVidWcgVEhQIGlzc3Vlcy4gS25vd2luZyAqd2hlbiogdGhpcyBmaWxlIGdldHMgY29tcGlsZWQgaXMgY3JpdGljYWwgZm9yIG5hcnJvd2luZyBkb3duIHRoZSBzY29wZSBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgd2hlbiB0cmFja2luZyBidWlsZCBmYWlsdXJlcyBvciBiZWhhdmlvciBzcGVjaWZpYyB0byBUSFAgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTY5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MjYuODgyODQ1ODk1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY1NTM5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5Lm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6MjguODQ4MzkwNjg3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDY4NDk1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZzpcblxuKipOVU1BIGFuZCBNZW1vcnkgUG9saWN5OiBBIFF1aWNrIFJlY2FwKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgbW0vbWVtcG9saWN5LmNgLiBJIGFscmVhZHkga25ldyB0aGF0IHRoaXMgZmlsZSBkZWFscyB3aXRoIG1lbW9yeSBwb2xpY2llcywgYnV0IG5vdyBJJ20gbWFraW5nIHRoZSBjb25uZWN0aW9uIHdpdGggTlVNQS4gVGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IHRoZSBjb2RlIGluIGBtbS9tZW1wb2xpY3kuY2AgKm9ubHkqIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gdGhlIGBDT05GSUdfTlVNQWAgb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBub3Qgc3VycHJpc2luZywgYnV0IGl0J3MgYW4gaW1wb3J0YW50IGRldGFpbCB0byBrZWVwIGZyb250IG9mIG1pbmQuIEl0IGNvbmZpcm1zIHRoYXQgdGhlIG1lbW9yeSBwb2xpY3kgZmVhdHVyZXMgYXJlIGludHJpbnNpY2FsbHkgdGllZCB0byBOVU1BIGFyY2hpdGVjdHVyZXMgYW5kIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGtlcm5lbCBpbiBhIG5vbi1OVU1BIGJ1aWxkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBzaXplLCBmdW5jdGlvbmFsaXR5LCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MzQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzozMy4yOTUyNDQwNDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjc3NTQ5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9saWN5Lm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3Q9MzQxPXBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIG5vZGUgbG9jYWwgdG8gd2hlcmUgdGhlIHRhc2sgaXMgcnVubmluZyxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdDozNDI6ZXhjZXB0IHBlcmhhcHMgYXMgbW9kaWZpZWQgYnkgdGhlIHRhc2sncyBOVU1BIG1lbXBvbGljeSBvciBjcHVzZXRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdC0zNDMtY29uZmlndXJhdGlvbiwgc28gbG9uZyBhcyBzdWZmaWNpZW50IGZyZWUgbWVtb3J5IHBhZ2VzIGFyZSBhdmFpbGFibGUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdD0zNTI9dGhlaXIgY29udGFpbmluZyB0YXNrJ3MgbWVtb3J5IHNwcmVhZCBzZXR0aW5ncy4gIElmIG1lbW9yeSBzcHJlYWRpbmdcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12MS9jcHVzZXRzLnJzdDozNTM6aXMgdHVybmVkIG9mZiwgdGhlbiB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBOVU1BIG1lbXBvbGljeSBvbmNlIGFnYWluXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvY3B1c2V0cy5yc3QtMzU0LWFwcGxpZXMgdG8gbWVtb3J5IHBhZ2UgYWxsb2NhdGlvbnMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0zODI9cGFnZXMgb24gdGhlIHBhcmVudCBub2RlIHdpbGwgYmUgYWRqdXN0ZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSwgaWYgc3VmZmljaWVudFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0OjM4MzpyZXNvdXJjZXMgZXhpc3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRhc2sncyBtZW1wb2xpY3kgb3IgY3B1c2V0IGNvbnN0cmFpbnRzLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0LTM4NC1cXG4tLVxcbm1tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXHQrPSBodWdldGxiX3ZtZW1tYXAub1xcbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19OVU1BKSBcXHQrPSBtZW1wb2xpY3kub1xcbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXFx0Kz0gc3BhcnNlLm9cXG4tLVxcbm1tL21lbXBvbGljeS5jPTM1OT1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKGdldF90YXNrX3BvbGljeSwgXFxcImt2bVxcXCIpO1xcbm1tL21lbXBvbGljeS5jLTM2MC1cXG5tbS9tZW1wb2xpY3kuYzozNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1wb2xpY3lfb3BlcmF0aW9ucyB7XFxubW0vbWVtcG9saWN5LmMtMzYyLVxcdGludCAoKmNyZWF0ZSkoc3RydWN0IG1lbXBvbGljeSAqcG9sLCBjb25zdCBub2RlbWFza190ICpub2Rlcyk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz01NjU9dm9pZCBtcG9sX3JlYmluZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbm9kZW1hc2tfdCAqbmV3KVxcbi0tXFxubW0vbWVtcG9saWN5LmMtNTc3LVxcbm1tL21lbXBvbGljeS5jOjU3ODpzdGF0aWMgY29uc3Qgc3RydWN0IG1lbXBvbGljeV9vcGVyYXRpb25zIG1wb2xfb3BzW01QT0xfTUFYXSA9IHtcXG5tbS9tZW1wb2xpY3kuYy01NzktXFx0W01QT0xfREVGQVVMVF0gPSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDI1PXN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDQxLSAqIFJldHVybnMgZWZmZWN0aXZlIHBvbGljeSBmb3IgYSBWTUEgYXQgc3BlY2lmaWVkIGFkZHJlc3MuXFxubW0vbWVtcG9saWN5LmM6MjA0MjogKiBGYWxscyBiYWNrIHRvIGN1cnJlbnQtXFx1MDAzZW1lbXBvbGljeSBvciBzeXN0ZW0gZGVmYXVsdCBwb2xpY3ksIGFzIG5lY2Vzc2FyeS5cXG5tbS9tZW1wb2xpY3kuYy0yMDQzLSAqIFNoYXJlZCBwb2xpY2llcyBbdGhvc2UgbWFya2VkIGFzIE1QT0xfRl9TSEFSRURdIHJlcXVpcmUgYW4gZXh0cmEgcmVmZXJlbmNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjM1LjQ2MzAwNDA3NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUwODEwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gUmlnaHQgbm93IEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgLiBNYWtlcyBzZW5zZSDigJMgbWVtb3J5IG1vbml0b3JpbmcgYW5kIE5VTUEgYXJlIGNvbW1vbiBjb25zaWRlcmF0aW9ucy4gTm93LCBJJ20gc2VlaW5nIGEgY2hlY2sgdXNpbmcgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAuIEFoLCByaWdodCwgdGhhdCdzIHNraXBwaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gT2theSwgc28gaWYgSSB3YW50IHRvIHRob3JvdWdobHkgdGVzdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZSwgdGhlIGZvY3VzIG5lZWRzIHRvIGJlIG9uIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhhdCBsb2dpY2FsbHkgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmY29uZmlnIGFuZCBhbnkgcmVsZXZhbnQgYnVpbGQgc2NyaXB0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNzEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzozOC43MTM4MTY2MDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzMxMDkwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpPTkVfREVWSUNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIxNz1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjIxLVxcbm1tL0tjb25maWc6MTIyMjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMjMtXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NDAuMTQ2OTMxMjE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDgzMjE2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG1lbnRpb24gb2YgYFpPTkVfREVWSUNFYCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIG1lbnRhbCBjaGVja2xpc3QuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHpvbmVzLCBhbmQgdGhlIFwiZGV2aWNlXCIgYXNwZWN0IHN1Z2dlc3RzIGhhcmR3YXJlIG9yIGEgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIsIGxpa2VseSBpbiBhIHN0b3JhZ2UgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY3VycmVudCBkZXBlbmRlbmNpZXMgYW5kIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgb2YgbW9kaWZpY2F0aW9ucy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaGFyZWQgcmVzb3VyY2UsIG9yIHNvbWV0aGluZyBpc29sYXRlZCB0byBhIHNwZWNpZmljIHpvbmU/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIGBaT05FX0RFVklDRWAgZnVuY3Rpb25hbGl0eT8gVGhlIGdvYWwgaGVyZSBpcyB0byBtaW5pbWl6ZSB0aGUgcmlzayBvZiBpbnRyb2R1Y2luZyBpbnN0YWJpbGl0eSBvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyB3aGVuIGFkZHJlc3NpbmcgYW55IHVuZGVybHlpbmcgaXNzdWVzLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjcml0aWNhbCBwYXRocyDigJMgdGhlIG9uZXMgdGhhdCBkaXJlY3RseSBpbXBhY3QgcGVyZm9ybWFuY2UsIHJlbGlhYmlsaXR5LCBhbmQgc2VjdXJpdHkuIEl0J3MgdGltZSB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NDMuMjU1MjU1NTdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzM1NzMxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qWk9ORV9ERVZJQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc9Nzk9Y29uZmlnIERSTV9YRV9HUFVTVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTgyLVxcdGRlcGVuZHMgb24gIVVNTFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjgzOlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NC1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9NjI9Y29uZmlnIE5WRElNTV9QRk5cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctNjQtXFx0ZGVmYXVsdCBMSUJOVkRJTU1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjY1OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTY2LVxcdHNlbGVjdCBORF9DTEFJTVxcbi0tXFxuZHJpdmVycy9wY2kvS2NvbmZpZz0yMDY9Y29uZmlnIFBDSV9QMlBETUFcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDg6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA5LVxcdCNcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnPTU9Y29uZmlnIERDU1NCTEtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnLTctXFx0cHJvbXB0IFxcXCJEQ1NTQkxLIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIFMzOTAgXFx1MDAyNlxcdTAwMjYgQkxPQ0sgXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZy05LVxcdHNlbGVjdCBGU19EQVhcXG4tLVxcbmRyaXZlcnMveGVuL0tjb25maWc9MzM2PWNvbmZpZyBYRU5fVU5QT1BVTEFURURfQUxMT0NcXG5kcml2ZXJzL3hlbi9LY29uZmlnLTMzNy1cXHRib29sIFxcXCJVc2UgdW5wb3B1bGF0ZWQgbWVtb3J5IHJhbmdlcyBmb3IgZ3Vlc3QgbWFwcGluZ3NcXFwiXFxuZHJpdmVycy94ZW4vS2NvbmZpZzozMzg6XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbmRyaXZlcnMveGVuL0tjb25maWctMzM5LVxcdGRlZmF1bHQgWEVOX0JBQ0tFTkQgfHwgWEVOX0dOVERFViB8fCBYRU5fRE9NMFxcbi0tXFxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYwLVxcdGRlcGVuZHMgb24gTU1VXFxuZnMvS2NvbmZpZzo2MTpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZy02Mi1cXHRzZWxlY3QgRlNfSU9NQVBcXG4tLVxcbmZzL0tjb25maWc9OTA9Y29uZmlnIEZTX0RBWF9QTURcXG4tLVxcbmZzL0tjb25maWctOTMtXFx0ZGVwZW5kcyBvbiBGU19EQVhcXG5mcy9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnLTk1LVxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4tLVxcbm1tL0tjb25maWc9MTI1Mj1jb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNTMtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbm1tL0tjb25maWc6MTI1NDpcXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjU1LVxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NDUuMzg4ODM3Mjk1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTE5ODM1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgQ2hlY2sgZm9yIFpPTkVfREVWSUNFKipcblxuT2theSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGgsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gcHJvY2VlZCwgYnV0IEkndmUgbGVhcm5lZCBlbm91Z2ggb3ZlciB0aGUgeWVhcnMgdG8ga25vdyB0aGF0IGp1bXBpbmcgdG8gY29uY2x1c2lvbnMgY2FuIGJlIGEgY29zdGx5IG1pc3Rha2UuIExldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlICpwb3RlbnRpYWwqIGRlcGVuZGVuY3kgbGFuZHNjYXBlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhlIGBaT05FX0RFVklDRWAgb3B0aW9uIGlzIGF0IHBsYXkgaGVyZSwgd2hpY2ggaXMgY2xlYXJseSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkLiBJJ2Qga2ljayBteXNlbGYgaWYgSSBkaWRuJ3QgdmVyaWZ5IGl0cyBkaXJlY3QgZGVwZW5kZW5jaWVzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBhbnkgKmluZGlyZWN0KiBkZXBlbmRlbmNpZXMgb24gb3RoZXIgS2NvbmZpZyB2YXJpYWJsZXMgaW4gdGhpcyBhcmVhLiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBidXQgaXTigJlzIGNyaXRpY2FsIHRvIGVzdGFibGlzaCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgc3RhcnQgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9yIHRoZSBhcmNoaXRlY3R1cmUgaW4gZ2VuZXJhbC4gVGhhdCBgS2NvbmZpZ2AgZmlsZSBob2xkcyB0aGUga2V5cyB0byB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uLCBhbmQgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzo0OC44ODA4MjM0NzRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTYxMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIxNz1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjIxLVxcbm1tL0tjb25maWc6MTIyMjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMjMtXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NDguOTIzOTkwNTU1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTgzOTI1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBaT05FX0RFVklDRSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAuIFRoaXMgbWVhbnMgSSdtIGdvaW5nIHRvIGhhdmUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciBhbnkgbW9kdWxlcywgZnVuY3Rpb25zLCBvciBjb25maWd1cmF0aW9ucyB0aGF0IHV0aWxpemUgb3IgcmVmZXJlbmNlIHRoYXQgc3BlY2lmaWMgdmFyaWFibGUgb3Igb2JqZWN0LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgZGlyZWN0IGRlcGVuZGVuY2llcyBmaXJzdCwgYnV0IGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGNvdWxkIGJlIGNydWNpYWwg4oCTIHNvbWV0aGluZyB0aGF0IGNhbGxzIGEgZnVuY3Rpb24gdGhhdCAqdXNlcyogYFpPTkVfREVWSUNFYCwgZm9yIGV4YW1wbGUuIEknbGwgbmVlZCB0byBhcHByb2FjaCB0aGlzIG1ldGhvZGljYWxseSwgcGVyaGFwcyBzdGFydGluZyB3aXRoIGEgY29kZSBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiB0aGUgdmFyaWFibGUgYW5kIHRoZW4gYnVpbGRpbmcgYSBtYXAgb2YgaG93IHRoZXkgcmVsYXRlIHRvIG90aGVyIGNvbXBvbmVudHMuIFRoZSBhcmNoaXRlY3R1cmUgaXMga2V5IGhlcmUuIERlcGVuZGluZyBvbiB0aGUgc2NhbGUgYW5kIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGViYXNlLCBJIG1pZ2h0IGxldmVyYWdlIHNvbWUgdG9vbGluZyB0byBhdXRvbWF0ZSB0aGUgZGVwZW5kZW5jeSBhbmFseXNpcyB0byBzb21lIGV4dGVudC4gSSBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIGRlbHZlIGludG8gdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBwb3RlbnRpYWwgaW50ZWdyYXRpb24gcG9pbnRzLiBUaGUgYWltIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlIG9yIG1vZGlmaWNhdGlvbiB0byBgWk9ORV9ERVZJQ0VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk0NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjEzOjUyLjQyMjM4NTg1M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjIwOlxcdFxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbjEyMjE6XFx0XFxuMTIyMjpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjIzOlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIyNDpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjI1OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjI2OlxcdFxcbjEyMjc6XFx0XFx0aGVscFxcbjEyMjg6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyMjk6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyMzA6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjMxOlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjMyOlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyMzM6XFx0XFxuMTIzNDpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjM1OlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyMzY6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTIzNzpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyMzg6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzo1Mi40MjI0ODc2NTNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5MTIwMjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IFpPTkVfREVWSUNFIFx1MDAyNiBNRU1PUllfSE9UUkVNT1ZFKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHplcm9lcyBpbiBvbiBhIHJlbGF0aW9uc2hpcDogYFpPTkVfREVWSUNFYCAqZGVwZW5kcyogb24gYE1FTU9SWV9IT1RSRU1PVkVgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBtZW50YWwgY2hlY2tsaXN0LiBMb2dpY2FsbHksIGlmIGBaT05FX0RFVklDRWAgaXMgcmVsaWFudCBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZGVwZW5kZW5jeSBpbiBkZXRhaWwuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyByZWxhdGlvbnNoaXAuIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzcGVjaWZpY3Mgb2YgYE1FTU9SWV9IT1RSRU1PVkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpkb2VzKiBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0IGRvZXMgaXQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBgWk9ORV9ERVZJQ0VgLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBsb29raW5nIGF0IHRoZSBjb2RlLCBsb29raW5nIGF0IHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGFuZCBhc3Nlc3Npbmcgd2hhdCBwb3RlbnRpYWwgaW1wYWN0IGBNRU1PUllfSE9UUkVNT1ZFYCdzIGJlaGF2aW91ciBoYXMgb24gYFpPTkVfREVWSUNFYC4gVGltZSB0byBkcmlsbCBkb3duIG9uIGBNRU1PUllfSE9UUkVNT1ZFYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU0NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTM6NTUuOTEzNjkyNjMzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQxMDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFJFTU9WRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTc4PWVuZGNob2ljZVxcbm1tL0tjb25maWctNTc5LVxcbm1tL0tjb25maWc6NTgwOmNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxMzo1NS45NTkxMDUxOTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NDczMDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlIG9mIGBNRU1PUllfSE9UUkVNT1ZFYCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlICpyZWFsKiBwaWN0dXJlIGhlcmU/XCIgSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNvbXBsZXRlIGRlcGVuZGVuY3kgZ3JhcGggZm9yIGBNRU1PUllfSE9UUkVNT1ZFYC4gV2UncmUgdGFsa2luZyBhYm91dCBhIHBvdGVudGlhbGx5IGNvbXBsZXggc3lzdGVtLCBhbmQgYSBob3QtcmVtb3ZlIG9wZXJhdGlvbiBjYW4gdG91Y2ggYSBzdXJwcmlzaW5nIG51bWJlciBvZiBjb21wb25lbnRzLCBldmVuIHdoZW4gc2VlbWluZ2x5IGlzb2xhdGVkLiBJIG5lZWQgYSBtZW50YWwgY2hlY2tsaXN0LCBhIHNvcnQgb2YgaG9saXN0aWMgdmlldyBvZiB0aGUgc3lzdGVtJ3MgaW50ZXJhY3Rpb25zLlxuXG5GaXJzdCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBvYnZpb3VzOiB0aGUga2VybmVsIG1vZHVsZXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHRoZSBvbmVzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW9uLCBmcmVlaW5nLCBOVU1BIG5vZGUgaGFuZGxpbmcsIHBhZ2UgbWlncmF0aW9uLCBldGMuIFRob3NlIGFyZSB0aGUgZnJvbnQtbGluZSBkZXBlbmRlbmNpZXMuIEJ1dCBpdCdzIHJhcmVseSB0aGF0IHNpbXBsZS4gV2hhdCdzIHVwc3RyZWFtPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYWZmZWN0ZWQgYW5kIGhvdz8gV2hhdCBsYXllcnMgb2YgdGhlIGNvZGUgYXJlIHRoZSBkZXBlbmRlbmNpZXMgZW50YW5nbGVkIGluP1xuXG5UaGVuLCBJJ20gYWxyZWFkeSBicmFuY2hpbmcgb3V0LiBBcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgaW1wbGljYXRpb25zPyBUb29scywgbW9uaXRvcmluZyBhZ2VudHMsIG9yIHN5c3RlbSBzZXJ2aWNlcyB0aGF0IG5lZWQgdG8gYmUgYXdhcmUgb2YsIG9yIHJlYWN0IHRvLCBhIG1lbW9yeSBob3QtcmVtb3ZlIGV2ZW50PyBBIG1pc3NlZCBub3RpZmljYXRpb24gaW4gdGhlIHJpZ2h0IHBsYWNlIGNhbiBsZWFkIHRvIHNlcmlvdXMgaW5zdGFiaWxpdHksIHNvIHRob3NlIGltcGxpY2F0aW9ucyBhcmUgY3JpdGljYWwgdG8gbXkgZXZhbHVhdGlvbi4gSSBjYW4ndCBiZSBjYXJlbGVzcyBhYm91dCBzdWNoIGEgZnVuZGFtZW50YWwgY2hhbmdlLlxuXG5BbmQsIG9mIGNvdXJzZSwgdGhlIGhhcmR3YXJlLiBUaGUgQklPUywgdGhlIGZpcm13YXJlLCB0aGUgYWN0dWFsIHBoeXNpY2FsIG1lbW9yeSBjb250cm9sbGVycyDigJMgd2hhdCdzIHRoZWlyIHJvbGUsIGFuZCBhcmUgdGhlcmUgYW55IGZpcm13YXJlIHF1aXJrcyBvciBsaW1pdGF0aW9ucyB0aGF0IHdpbGwgYml0ZSBtZSBkb3duIHRoZSByb2FkPyBUaGV5J3JlIGFsd2F5cyB0aGUgaGlkZGVuIHZhcmlhYmxlLiBJJ20gZ29pbmcgdG8gd2FudCB0byBjaGVjayBhbnkgdmVuZG9yIGRvY3VtZW50YXRpb24gb24gaG90cGx1ZyBzdXBwb3J0LCBvciBpZiB0aGlzIGlzIGFuIGFyZWEgd2hlcmUgSSBoYXZlIHRvIHJlbHkgb24gZ29vZCBvbGQtZmFzaGlvbmVkIGVtcGlyaWNhbCBkYXRhLlxuXG5GaW5hbGx5LCBJJ20gY29uc2lkZXJpbmcgdGhlIGVkZ2UgY2FzZXMuIEVycm9yIGhhbmRsaW5nLCB0aGUgaW1wYWN0IG9mIGludGVycnVwdHMgZHVyaW5nIHRoZSBob3QtcmVtb3ZlIHByb2Nlc3MsIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLi4uIHRoaXMga2luZCBvZiB0aGluZyBhbHdheXMgZW5kcyB1cCBiZWluZyB0aGUgbW9zdCBkaWZmaWN1bHQgcGFydCwgYW5kIHRoZSBtb3N0IHJld2FyZGluZyB0byBnZXQgcmlnaHQuIEkgaGF2ZSB0byBjb25zaWRlciBmYXVsdCB0b2xlcmFuY2U6IHdoYXQgaGFwcGVucyBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzIG1pZC13YXksIGFuZCBob3cgd2lsbCBpdCBhZmZlY3QgdGhlIHN5c3RlbSdzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBhdmFpbGFiaWxpdHk/IEluIGFkZGl0aW9uIHRvIHNhZmV0eSwgSSBtdXN0IGZvY3VzIG9uIGRhdGEgaW50ZWdyaXR5LlxuXG5JJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgZnJhbWV3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgaWRlbnRpZmllZCBldmVyeSBwb3RlbnRpYWwgaW1wYWN0IHBvaW50LiBJdCdzIGEgY29tcGxleCBpbnRlcmFjdGlvbiwgYnV0IHRoZSBvbmx5IHdheSB0byB0YWNrbGUgYSBjb21wbGV4IHN5c3RlbSBjaGFuZ2Ugd2l0aCBjb25maWRlbmNlIGlzIHRvIGJlIGNvbXByZWhlbnNpdmUuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBkZXBlbmRlbmN5IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjAxLjAzMzgzODc2OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1Nzg6XFx0ZW5kY2hvaWNlXFxuIDU3OTpcXHRcXG4gNTgwOlxcdGNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxuIDU4MTpcXHRcXHRib29sIFxcXCJBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcXFwiXFxuIDU4MjpcXHRcXHRzZWxlY3QgTUlHUkFUSU9OXFxuIDU4MzpcXHRcXG4gNTg0OlxcdGNvbmZpZyBNSFBfTUVNTUFQX09OX01FTU9SWVxcbiA1ODU6XFx0XFx0ZGVmX2Jvb2wgeVxcbiA1ODY6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbiA1ODc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjAxLjAzMzk4NDE5OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE4OTE4MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEZXBlbmRlbmN5IEFuYWx5c2lzOiBNZW1vcnkgSG90LUFkZC9SZW1vdmUqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtZW1vcnkgaG90LWFkZC9yZW1vdmUgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBhcmNoaXRlY3R1cmUuIEZpcnN0IHVwLCBgTUVNT1JZX0hPVFJFTU9WRWAuLi4gb2theSwgdGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpdCdzIGEgc2VsZi1jb250YWluZWQgZmVhdHVyZS4gTm8gaW1tZWRpYXRlbHkgb2J2aW91cyBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuIFdlJ3JlIGtlZXBpbmcgdGhhdCBzaW1wbGUsIHdoaWNoIGlzIGdvb2QuIE5vdywgbGV0J3MgcGl2b3QgdG8gdGhlIGhvdC1wbHVnIHNpZGUgb2YgdGhpbmdzLCBgTUVNT1JZX0hPVFBMVUdgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGNhbiBnZXQgYSBiaXQgbW9yZSBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBoYXZlIHRvIGNvbnNpZGVyIGhvdyBtZW1vcnkgaXMgaGFuZGxlZCBhdCB0aGUgaGFyZHdhcmUsIGZpcm13YXJlLCBhbmQgc29mdHdhcmUgbGF5ZXJzIHNpbXVsdGFuZW91c2x5LiBOZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB0aGVyZS4gR290dGEgZW5zdXJlIHRoYXQgYW55IGhvdC1wbHVnIGFjdGlvbnMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU4MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MDQuMTUyOTA0NTQ5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc4NjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFBMVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUwOD1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTExLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUxMjptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MTMtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjA0LjE5OTY5NjQ1OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAxNjY4MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlLXJlbGF0ZWQgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgUmVsYXRlZCB0byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgYFpPTkVfREVWSUNFYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIHRvIGtlZXAgYW4gZXllIG9uIGhlcmUuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIGl0LiBCYXNlZCBvbiB0aGUgaW5pdGlhbCBzY2FuLCBJIHNlZSB0aGVzZSBhcyB0aGUgcHJpbWFyeSBjYW5kaWRhdGVzIGZvciBjbG9zZXIgZXhhbWluYXRpb246IGBkYW1vbl9nZXRfZm9saW9gLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYG1hZHZpc2VfY29sZGAsIGBtYWR2aXNlX3BhZ2VvdXRgLCBgZG9fbWJpbmRgLCBhbmQgYHF1ZXVlX3BhZ2VzX3JhbmdlYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBpbiB0aGlzIGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW8uXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgSSd2ZSBnb3QgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gTGV0IG1lIHNlZS4uLiB5ZXMsIGBtYWR2aXNlX2NvbGRgIGFuZCBgbWFkdmlzZV9wYWdlb3V0YCBhcmUgc3RhdGljLiBPa2F5LCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgYW5hbHlzaXMuIEJhY2sgdG8gZmlndXJpbmcgb3V0IGhvdyBhbGwgb2YgdGhpcyB0aWVzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkyNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDowNy45MDEzNjg0ODNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDUzNTQ2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNDM9c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zNTItXFxubW0vbWFkdmlzZS5jOjM1MzpzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbm1tL21hZHZpc2UuYy0zNTQtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21hZHZpc2UuYz01NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbm1tL21hZHZpc2UuYzo1NzI6XFx0LnBtZF9lbnRyeSA9IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSxcXG5tbS9tYWR2aXNlLmMtNTczLVxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcbi0tXFxubW0vbWFkdmlzZS5jLTU3NS1cXG5tbS9tYWR2aXNlLmM6NTc2OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTU3Ny1cXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYz01OTM9c3RhdGljIGlubGluZSBib29sIGNhbl9tYWR2X2xydV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tYWR2aXNlLmMtNTk3LVxcbm1tL21hZHZpc2UuYzo1OTg6c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy01OTkte1xcbi0tXFxubW0vbWFkdmlzZS5jLTYwNy1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjYwODpcXHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtNjA5LVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi0tXFxubW0vbWFkdmlzZS5jPTEzNDE9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzU3LVxcdGNhc2UgTUFEVl9DT0xEOlxcbm1tL21hZHZpc2UuYzoxMzU4OlxcdFxcdHJldHVybiBtYWR2aXNlX2NvbGQobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTEzNTktXFx0Y2FzZSBNQURWX1BBR0VPVVQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjA5LjY0NjcyODMxMloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg3NjY4NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIHRoZSBgbWFkdmlzZWAgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBgbWFkdmlzZWAsIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3JlIGxvb2tpbmcgYXQgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZsb3cgaGVyZS4gVGhlIHdob2xlIGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmAgZnVuY3Rpb24g4oCTIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgbm8gc3VycHJpc2VzIHRoZXJlLCB3ZSBuZWVkIGl0IHRvIGJlIHNvIHdlIGNhbiBtYWludGFpbiB0aGUgbmVjZXNzYXJ5IGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIFRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBnZXRzIGtpY2tlZCBvZmYgZnJvbSBgZG9fbWFkdmlzZWAsIHdoaWNoIEknbSBhc3N1bWluZyBoYW5kbGVzIHRoZSBjb3JlIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhbmQgYW55IGluaXRpYWwgdmFsaWRhdGlvbi4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgZG9fbWFkdmlzZWAgcHJvYmFibHkgaGFuZGxlcyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgdGhlbiBwYXNzZXMgdGhlIHJlbGV2YW50IGRldGFpbHMgZG93biB0byB0aGUga2VybmVsJ3MgY29yZSBsb2dpYy4gSXQncyB0aGUgc3RhbmRhcmQgZW50cnktcG9pbnQgLyBjb3JlLWZ1bmN0aW9uIHBhcmFkaWdtIHdlIHNlZSBhbGwgb3ZlciB0aGUgcGxhY2UuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBkb19tYWR2aXNlYCBpbnRlcmFjdHMgd2l0aCBhbnkgcGVyLXByb2Nlc3Mgb3IgZ2xvYmFsIHBhcmFtZXRlcnMuIEl0J3MgYSBzdGFuZGFyZCBwYXR0ZXJuLCBJIGV4cGVjdCB0aGVyZSBpcyBzdGFuZGFyZCB2YWxpZGF0aW9uIGFuZCBzb21lIGZvcm0gb2YgZXJyb3IgY2hlY2tpbmcsIGJlZm9yZSBmaW5hbGx5IGdldHRpbmcgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbiB0byBhY3R1YWxseSBkbyB0aGUgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDoxMy4xMzQ0MDAzOTNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDYyNjQ2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fbWFkdmlzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9NDIxNz1leHRlcm4gaW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDIxOC1cXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVmKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDIxOTpleHRlcm4gaW50IGRvX21hZHZpc2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sIGludCBiZWhhdmlvcik7XFxuaW5jbHVkZS9saW51eC9tbS5oLTQyMjAtXFxuLS1cXG5pb191cmluZy9hZHZpc2UuYz01MT1pbnQgaW9fbWFkdmlzZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvYWR2aXNlLmMtNTgtXFxuaW9fdXJpbmcvYWR2aXNlLmM6NTk6XFx0cmV0ID0gZG9fbWFkdmlzZShjdXJyZW50LVxcdTAwM2VtbSwgbWEtXFx1MDAzZWFkZHIsIG1hLVxcdTAwM2VsZW4sIG1hLVxcdTAwM2VhZHZpY2UpO1xcbmlvX3VyaW5nL2FkdmlzZS5jLTYwLVxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NzE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX21hZHZpc2Uoc3RydWN0IGRhbW9uX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03MzAtXFxubW0vZGFtb24vdmFkZHIuYzo3MzE6XFx0YXBwbGllZCA9IGRvX21hZHZpc2UobW0sIHN0YXJ0LCBsZW4sIGJlaGF2aW9yKSA/IDAgOiBsZW47XFxubW0vZGFtb24vdmFkZHIuYy03MzItXFx0bW1wdXQobW0pO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE4OTA9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk4Ni0gKi9cXG5tbS9tYWR2aXNlLmM6MTk4NzppbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xOTg4LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0yMDE1PVNZU0NBTExfREVGSU5FMyhtYWR2aXNlLCB1bnNpZ25lZCBsb25nLCBzdGFydCwgc2l6ZV90LCBsZW5faW4sIGludCwgYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTIwMTYte1xcbm1tL21hZHZpc2UuYzoyMDE3OlxcdHJldHVybiBkb19tYWR2aXNlKGN1cnJlbnQtXFx1MDAzZW1tLCBzdGFydCwgbGVuX2luLCBiZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTIwMTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDoxNC41NDA2NzA2MjdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMjE4ODExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gU2NvcGUqKlxuXG5BbHJpZ2h0LCBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVnaXN0ZXJpbmcgYXMgaW50ZXJlc3RpbmcgdGhhdCB0aGUgYGRvX21hZHZpc2VgIGZ1bmN0aW9uIGlzICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbXBsaWVzIGl0J3MgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIHNwZWNpZmljIHNvdXJjZSBmaWxlIGl0J3MgZGVmaW5lZCBpbi4gU2ltaWxhcmx5LCBJJ20gbm90aW5nIHRoYXQgYGRvX21iaW5kYCwgdGhlIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCBtZW1wb2xpY3kgb3BlcmF0aW9ucywgaXMgYWxzbyBub24tc3RhdGljLCBzdWdnZXN0aW5nIHRoZSBzYW1lIGFjY2Vzc2liaWxpdHkgcGF0dGVybiBhcHBsaWVzLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgcG9pbnRzIHRvIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBwYXJ0IG9mIGEgYnJvYWRlciBBUEkgb3IgbW9kdWxlIGludGVyZmFjZSB3aXRoaW4gdGhlIGtlcm5lbCwgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGJ5IG90aGVyIGtlcm5lbCBjb21wb25lbnRzLCBwZXJoYXBzIGV2ZW4gdXNlci1zcGFjZSB2aWEgc3lzdGVtIGNhbGxzLiBJJ2QgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCByZWFzb25zLCBidXQgdGhlIGxhY2sgb2YgYHN0YXRpY2AgZGVjbGFyYXRpb24gaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgaW50ZW5kZWQgZXh0ZXJuYWwgdXNhZ2UuIFRoaXMgb3BlbnMgZG9vcnMgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGFkdmlzb3J5IGZ1bmN0aW9ucyBhbmQgbWVtb3J5IGJpbmRpbmcgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdCB3aXRoIG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzAwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MTcuOTUyODYxMjI0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNzk4MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX21iaW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTYxMj1zdGF0aWMgYm9vbCBzdHJpY3RseV91bm1vdmFibGUodW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTYxNC1cXHQvKlxcbm1tL21lbXBvbGljeS5jOjYxNTpcXHQgKiBTVFJJQ1Qgd2l0aG91dCBNT1ZFIGZsYWdzIGxldHMgZG9fbWJpbmQoKSBmYWlsIGltbWVkaWF0ZWx5IHdpdGggLUVJT1xcbm1tL21lbXBvbGljeS5jLTYxNi1cXHQgKiBpZiBhbnkgbWlzcGxhY2VkIHBhZ2UgaXMgZm91bmQuXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDg2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0OTItXFxubW0vbWVtcG9saWN5LmM6MTQ5MzpzdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG5tbS9tZW1wb2xpY3kuYy0xNDk0LVxcdFxcdCAgICAgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgc2hvcnQgbW9kZV9mbGFncyxcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE3NDY9c3RhdGljIGxvbmcga2VybmVsX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTc2My1cXG5tbS9tZW1wb2xpY3kuYzoxNzY0OlxcdHJldHVybiBkb19tYmluZChzdGFydCwgbGVuLCBsbW9kZSwgbW9kZV9mbGFncywgXFx1MDAyNm5vZGVzLCBmbGFncyk7XFxubW0vbWVtcG9saWN5LmMtMTc2NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjE5LjQwNDY2NzEwN1oiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ4NDY2NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqU3RhdGljIEJpbmRpbmdzIGFuZCBLZXJuZWwgQ2FsbHMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGZsb3cgY29ycmVjdGx5LiBgZG9fbWJpbmRgLi4udGhhdCdzIHN0YXRpYywgaXNuJ3QgaXQ/IE1lYW5pbmcgaXQncyBiZWluZyB1c2VkIGluIGEgZml4ZWQgY29udGV4dC4gVGhpcyBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgdGhlIGJpbmRpbmcgb3BlcmF0aW9uIGlzIHN0cnVjdHVyZWQgYW5kIGV4ZWN1dGVkLiBMZXQncyBub3QgYXNzdW1lIGFueXRoaW5nIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBga2VybmVsX21iaW5kYCBuZXh0LiBTZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGF0aWMgZnVuY3Rpb24uIEtub3dpbmcgKnRoYXQqIHdpbGwgY2xhcmlmeSBhIGxvdCBhYm91dCB0aGUgbWVtb3J5IGJpbmRpbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjY2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MjIuMzUzMTM2MTIzWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5ODc0NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5lbF9tYmluZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0xNzI4PXN0YXRpYyBpbmxpbmUgaW50IHNhbml0aXplX21wb2xfZmxhZ3MoaW50ICptb2RlLCB1bnNpZ25lZCBzaG9ydCAqZmxhZ3MpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNzQ1LVxcbm1tL21lbXBvbGljeS5jOjE3NDY6c3RhdGljIGxvbmcga2VybmVsX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbm1tL21lbXBvbGljeS5jLTE3NDctXFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTgzND1TWVNDQUxMX0RFRklORTYobWJpbmQsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBsZW4sXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xODM3LXtcXG5tbS9tZW1wb2xpY3kuYzoxODM4OlxcdHJldHVybiBrZXJuZWxfbWJpbmQoc3RhcnQsIGxlbiwgbW9kZSwgbm1hc2ssIG1heG5vZGUsIGZsYWdzKTtcXG5tbS9tZW1wb2xpY3kuYy0xODM5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MjMuODYzMDE2NTA0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjA3Mjk2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IEJpbmRpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cblJpZ2h0LCBzbyBga2VybmVsX21iaW5kYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIG5vdCBkaXJlY3RseSBleHBvc2VkIGZvciB1c2Ugb3V0c2lkZSBvZiBpdHMgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuIFRoZXJlZm9yZSwgdGhlIHVzZXItbGV2ZWwgZW50cnkgcG9pbnQgZm9yIG1lbW9yeSBiaW5kaW5nIG11c3QgYmUgYHN5c19tYmluZGAuIEFuZCB5ZXMsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgZGVmaW5lZCBhcyBgU1lTQ0FMTF9ERUZJTkU2KG1iaW5kLCAuLi4pYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgc3lzX21iaW5kYCBpcyB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRoYXQgdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbSB3b3VsZCBpbnRlcmFjdCB3aXRoLlxuXG5IbW0uLi4gd2FpdCBhIG1pbnV0ZS4gYHF1ZXVlX3BhZ2VzX3JhbmdlYCBpcyAqbm9uLXN0YXRpYyo/IFRoYXQgdGhyb3dzIGEgc2xpZ2h0IHdyZW5jaCBpbnRvIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuIElmIGl0J3Mgbm90IHN0YXRpYywgaXQgbWVhbnMgaXQncyBwb3RlbnRpYWxseSBleHBvc2VkLCBhbmQgY291bGQgYmUgdXNlZCBpbiBhIGJyb2FkZXIgc2NvcGUuIEl0IG1ha2VzIG1lIHdvbmRlciB3aGF0IHJlbGF0aW9uc2hpcCBpdCBoYXMgdG8gYGtlcm5lbF9tYmluZGAgYW5kIGBzeXNfbWJpbmRgLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB3aGVyZSBgcXVldWVfcGFnZXNfcmFuZ2VgIGlzIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBvdGhlciBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZS4gSXMgaXQgYmVpbmcgc2hhcmVkIHdpdGggb3RoZXIgbW9kdWxlcz8gT3IgaXMgaXQgYSBoZWxwZXIgZnVuY3Rpb24gZGVzaWduZWQgZm9yIHVzZSB3aXRoaW4gbWVtb3J5IGJpbmRpbmcgZnVuY3Rpb25zIHRoYXQgaGFwcGVuIHRvIGJlIGFjY2Vzc2libGUgYnkgb3RoZXIgYXJlYXMgb2YgdGhlIGNvZGU/IEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGNyb3NzLXJlZmVyZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjUyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MjcuNjgzNzQ5MTk4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyNTAzNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX3BhZ2VzX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTY4OT1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtNzQ5LVxcdFxcdFxcdCAqIG1pZ3JhdGVfcGFnZXMoXFx1MDAyNnBhZ2VsaXN0KSByZXR1cm5zIG5yX2ZhaWxlZCBmb2xpb3MsIHNvXFxubW0vbWVtcG9saWN5LmM6NzUwOlxcdFxcdFxcdCAqIGNoZWNrIFxcXCJsYXJnZVxcXCIgbm93IHNvIHRoYXQgcXVldWVfcGFnZXNfcmFuZ2UoKSByZXR1cm5zXFxubW0vbWVtcG9saWN5LmMtNzUxLVxcdFxcdFxcdCAqIGEgY29tcGFyYWJsZSBucl9mYWlsZWQgZm9saW9zLiAgVGhpcyBkb2VzIGltcGx5IHRoYXRcXG4tLVxcbm1tL21lbXBvbGljeS5jPTk2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHF1ZXVlX3BhZ2VzX2xvY2tfdm1hX3dhbGtfb3BzID0ge1xcbi0tXFxubW0vbWVtcG9saWN5LmMtOTc3LSAqXFxubW0vbWVtcG9saWN5LmM6OTc4OiAqIHF1ZXVlX3BhZ2VzX3JhbmdlKCkgbWF5IHJldHVybjpcXG5tbS9tZW1wb2xpY3kuYy05NzktICogMCAtIGFsbCBwYWdlcyBhbHJlYWR5IG9uIHRoZSByaWdodCBub2RlLCBvciBzdWNjZXNzZnVsbHkgcXVldWVkIGZvciBtb3ZpbmdcXG4tLVxcbm1tL21lbXBvbGljeS5jPTk4Nj1zdGF0aWMgbG9uZ1xcbm1tL21lbXBvbGljeS5jOjk4NzpxdWV1ZV9wYWdlc19yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vbWVtcG9saWN5LmMtOTg4LVxcdFxcdG5vZGVtYXNrX3QgKm5vZGVzLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTI4OT1zdGF0aWMgbG9uZyBtaWdyYXRlX3RvX25vZGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBzb3VyY2UsIGludCBkZXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTMyMC1cXHQgKi9cXG5tbS9tZW1wb2xpY3kuYzoxMzIxOlxcdG5yX2ZhaWxlZCA9IHF1ZXVlX3BhZ2VzX3JhbmdlKG1tLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCBtbS1cXHUwMDNldGFza19zaXplLCBcXHUwMDI2bm1hc2ssXFxubW0vbWVtcG9saWN5LmMtMTMyMi1cXHRcXHRcXHRcXHQgICAgICBmbGFncyB8IE1QT0xfTUZfRElTQ09OVElHX09LLCBcXHUwMDI2cGFnZWxpc3QpO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MTQ5Mz1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE1NTYtXFx0ICovXFxubW0vbWVtcG9saWN5LmM6MTU1NzpcXHRucl9mYWlsZWQgPSBxdWV1ZV9wYWdlc19yYW5nZShtbSwgc3RhcnQsIGVuZCwgbm1hc2ssXFxubW0vbWVtcG9saWN5LmMtMTU1OC1cXHRcXHRcXHRmbGFncyB8IE1QT0xfTUZfSU5WRVJUIHwgTVBPTF9NRl9XUkxPQ0ssIFxcdTAwMjZwYWdlbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjI5LjA4NjI1OTYzM1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYxMTcxMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBob3cgdG8gdGFja2xlIHRoaXMgbWVtb3J5IHBvbGljeSBpbXBsZW1lbnRhdGlvbiwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBwYWdlIHJhbmdlcy4gSSdtIG5vdGluZyB0aGF0IGBxdWV1ZV9wYWdlc19yYW5nZWAgaXMgYSBzdGF0aWMgZW50aXR5LCB3aGljaCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIHdoZW4gY29uc2lkZXJpbmcgaG93IHRvIG1ha2UgbWVtb3J5IHBvbGljeSBhZGp1c3RtZW50cy4gQWxyaWdodCwgc28gdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIG1lbXBvbGljeSBtYW5pcHVsYXRpb24gbG9vayBsaWtlIHRoZXkgYXJlIGBzeXNfbWJpbmRgLCBgZG9fbWlncmF0ZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3RvX25vZGVgLCB5ZXM/IEhvbGQgb24uLi4gaXQgYXBwZWFycyB0aGF0IGBtaWdyYXRlX3RvX25vZGVgIGlzIGFsc28gc3RhdGljYWxseSBkZWZpbmVkLiBTbywgbGV0IG1lIHJlLWV2YWx1YXRlLi4uIHBlcmhhcHMgdGhlIGJldHRlciBmdW5jdGlvbiB0byB0YXJnZXQgd291bGQgYmUgYHN5c19taWdyYXRlX3BhZ2VzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1NjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDozMi4zNDc0MzM1NTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODgyNzA0NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV90b19ub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTEyNTY9c3RhdGljIGJvb2wgbWlncmF0ZV9mb2xpb19hZGQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqZm9saW9saXN0LFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTI4OC0gKi9cXG5tbS9tZW1wb2xpY3kuYzoxMjg5OnN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXFxubW0vbWVtcG9saWN5LmMtMTI5MC1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTM0Mz1pbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0MjQtXFx0XFx0bm9kZV9jbGVhcihzb3VyY2UsIHRtcCk7XFxubW0vbWVtcG9saWN5LmM6MTQyNTpcXHRcXHRlcnIgPSBtaWdyYXRlX3RvX25vZGUobW0sIHNvdXJjZSwgZGVzdCwgZmxhZ3MpO1xcbm1tL21lbXBvbGljeS5jLTE0MjYtXFx0XFx0aWYgKGVyciBcXHUwMDNlIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjMzLjgzNTcxNDkzN1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE4NzYwNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGlmIEknbSB0aGlua2luZyB0aGVtLlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBTY29wZTogYGRvX21pZ3JhdGVfcGFnZXNgKipcblxuUmlnaHQsIHNvIHRoZSBzeXN0ZW0gZmxhZ2dlZCBgZG9fbWlncmF0ZV9wYWdlc2AuIFRoZSBrZXkgdGhpbmcganVtcGluZyBvdXQgYXQgbWUgaW1tZWRpYXRlbHkgaXMgdGhhdCBpdCdzICpub24tc3RhdGljKi4gT2theSwgd2hhdCBkb2VzIHRoYXQgcmVhbGx5IG1lYW4gaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBwcm9qZWN0P1xuXG5UaGUgaW1wbGljYXRpb24gaXMgdGhhdCBgZG9fbWlncmF0ZV9wYWdlc2AgaXNuJ3QgZGVzaWduZWQgYXMgYSB1dGlsaXR5IGZ1bmN0aW9uLCBzb21ldGhpbmcgdGhhdCdzIHNlbGYtY29udGFpbmVkIGFuZCBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LiBJbnN0ZWFkLCBpdCdzIHRpZWQgdG8gYW4gKmluc3RhbmNlKiBvZiBhIGNsYXNzIG9yIG1vZHVsZS4gVGhhdCBtZWFucyBpdCBsaWtlbHkgcmVsaWVzIG9uIOKAkyBhbmQgcG90ZW50aWFsbHkgbW9kaWZpZXMg4oCTIGludGVybmFsIHN0YXRlIGRhdGEuIEl0J3Mgbm90IGEgcHVyZWx5IGZ1bmN0aW9uYWwgb3BlcmF0aW9uLiBXZSBuZWVkIHRvIGtub3cgKndoYXQqIHRoYXQgc3RhdGUgaXMsIGFuZCBob3cgY2hhbmdlcyB0byB0aGF0IHN0YXRlIGNvdWxkIGltcGFjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLlxuXG5TbywgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipUaGUgY29udGV4dDoqKiBXaGF0IGNsYXNzL29iamVjdCBvd25zIGBkb19taWdyYXRlX3BhZ2VzYD8gS25vd2luZyB0aGUgY2xhc3Mgd2lsbCBjbHVlIG1lIGludG8gaXRzIGludGVuZGVkIHB1cnBvc2UgYW5kIHRoZSBwdXJwb3NlIG9mIHRoZSBvdGhlciBtZXRob2RzIGF2YWlsYWJsZSB0byB0aGUgY2xhc3MuXG4qICAgKipUaGUgZGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgbWV0aG9kcyBvciB2YXJpYWJsZXMgZG9lcyBgZG9fbWlncmF0ZV9wYWdlc2AgY2FsbCBvciByZWZlcmVuY2U/IEFyZSB0aGVyZSBhbnkgc2hhcmVkIHJlc291cmNlcz8gS25vd2luZyB0aGUgY2xhc3Mgc2hvdWxkIGhlbHAgY2xhcmlmeSB0aGVzZSBkZXBlbmRlbmNpZXMuXG4qICAgKipUaGUgaW1wbGljYXRpb25zOioqIFdoYXQgd2lsbCBoYXBwZW4gaWYgdGhpcyBpc24ndCBoYW5kbGVkIGNvcnJlY3RseT8gV2hhdCBzdGF0ZSB3aWxsIGJlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzP1xuKiAgICoqVGhlIHJpc2tzOioqIFdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhlIGluc3RhbmNlIGlzIG5vdCBjb3JyZWN0bHkgaW5zdGFudGlhdGVkIG9yIHBhc3NlZCBpbiBhIHByb2JsZW1hdGljIHN0YXRlP1xuXG5BIG5vbi1zdGF0aWMgbWV0aG9kIGltcGxpZXMgYW4gaW5zdGFuY2Utc3BlY2lmaWMgbWlncmF0aW9uLCBhbmQgaWYgdGhpcyBpbXBhY3RzIHRoZSBzeXN0ZW0sIHRoZW4gdGhhdCBsZXZlbCBvZiBhbmFseXNpcyBpcyB3YXJyYW50ZWQuIEkgbmVlZCB0byBiZSBzdXJlLiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIHVzYWdlIGFuZCBleGFtaW5pbmcgdGhlIGNsYXNzIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDIyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MzguMDU0NDc3OTI0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1MzQyNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX21pZ3JhdGVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaD0xNTM9c3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2hpZ2hlc3Rfem9uZShlbnVtIHpvbmVfdHlwZSBrKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xNTgtXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaDoxNTk6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xNjAtXFx0XFx0ICAgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MjY4PXN0YXRpYyBpbmxpbmUgYm9vbCBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2RlbWFza190ICptKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yNzItXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaDoyNzM6c3RhdGljIGlubGluZSBpbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgbm9kZW1hc2tfdCAqZnJvbSxcXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTI3NC1cXHRcXHRcXHRcXHQgICBjb25zdCBub2RlbWFza190ICp0bywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYz0yNTMyPXN0YXRpYyB2b2lkIGNwdXNldF9taWdyYXRlX21tX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTI1MzctXFx0Lyogb24gYSB3cSB3b3JrZXIsIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgJWN1cnJlbnQncyBtZW1zX2FsbG93ZWQgKi9cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jOjI1Mzg6XFx0ZG9fbWlncmF0ZV9wYWdlcyhtd29yay1cXHUwMDNlbW0sIFxcdTAwMjZtd29yay1cXHUwMDNlZnJvbSwgXFx1MDAyNm13b3JrLVxcdTAwM2V0bywgTVBPTF9NRl9NT1ZFX0FMTCk7XFxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0yNTM5LVxcdG1tcHV0KG13b3JrLVxcdTAwM2VtbSk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xMjg5PXN0YXRpYyBsb25nIG1pZ3JhdGVfdG9fbm9kZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHNvdXJjZSwgaW50IGRlc3QsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMzQyLSAqL1xcbm1tL21lbXBvbGljeS5jOjEzNDM6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXFxubW0vbWVtcG9saWN5LmMtMTM0NC1cXHRcXHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMzkxLVxcdFxcdFxcdC8qXFxubW0vbWVtcG9saWN5LmM6MTM5MjpcXHRcXHRcXHQgKiBkb19taWdyYXRlX3BhZ2VzKCkgdHJpZXMgdG8gbWFpbnRhaW4gdGhlIHJlbGF0aXZlXFxubW0vbWVtcG9saWN5LmMtMTM5My1cXHRcXHRcXHQgKiBub2RlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFnZXMgZXN0YWJsaXNoZWQgYmV0d2Vlblxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTQ3ND1zdGF0aWMgYm9vbCBtaWdyYXRlX2ZvbGlvX2FkZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb2xpc3QsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xNDc5LVxcbm1tL21lbXBvbGljeS5jOjE0ODA6aW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IG5vZGVtYXNrX3QgKmZyb20sXFxubW0vbWVtcG9saWN5LmMtMTQ4MS1cXHRcXHQgICAgIGNvbnN0IG5vZGVtYXNrX3QgKnRvLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xODY3PXN0YXRpYyBpbnQga2VybmVsX21pZ3JhdGVfcGFnZXMocGlkX3QgcGlkLCB1bnNpZ25lZCBsb25nIG1heG5vZGUsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xOTM4LVxcbm1tL21lbXBvbGljeS5jOjE5Mzk6XFx0ZXJyID0gZG9fbWlncmF0ZV9wYWdlcyhtbSwgb2xkLCBuZXcsXFxubW0vbWVtcG9saWN5LmMtMTk0MC1cXHRcXHRjYXBhYmxlKENBUF9TWVNfTklDRSkgPyBNUE9MX01GX01PVkVfQUxMIDogTVBPTF9NRl9NT1ZFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6MzkuNTA5ODI2MTQ3WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzQ5NDU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTWlncmF0aW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBzdGFydCByZWFsbHkgZGlnZ2luZyBpbi4gYGRvX21pZ3JhdGVfcGFnZXNgIHNlZW1zIGxpa2UgYSBzb2xpZCBwb2ludCB0byB6b29tIGluIG9uLCBhIGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMuIEJ1dCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IEknbSBzZWVpbmcgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAuLi4gdGhhdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgYSBjYW5kaWRhdGUuIEFsc28sIGBkYW1vbl9nZXRfZm9saW9gIGFuZCBgZG9fbWFkdmlzZWAgYXJlIGJvdGggbm9uLXN0YXRpYyBhcyB3ZWxsLCBzbyB0aGV5IGFyZSBwb3NzaWJsZSBjYW5kaWRhdGVzIHRvIGNvbnNpZGVyLiBOb3csIGxldCdzIHNlZSBpZiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIGtub3cgaWYgaXQncyB2aXNpYmxlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNDAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNDo0Mi43ODQ3NzQzNjRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjc3ODA3MjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NDQuODUyNTYzMjUzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzIwNTAwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIENvZGUgVmlzaWJpbGl0eSBhbmQgRnVuY3Rpb24gRXhwb3J0KipcblxuQWxyaWdodCwgc28gSSdtIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgaGVyZS4gSXQncyAqZGVmaW5pdGVseSogbm90IG1hcmtlZCBhcyBleHBvcnRlZCwgd2hpY2ggaXMgbXkgZmlyc3Qgb2JzZXJ2YXRpb24uIEJ1dCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vbi1zdGF0aWMqIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gTm9uLXN0YXRpYyBpbXBsaWVzIGl0ICpjb3VsZCogYmUgYWNjZXNzaWJsZSBmcm9tIGVsc2V3aGVyZSwgcG90ZW50aWFsbHkgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGVkIHVuaXQgb3IgbGlua2VkIGxpYnJhcnksIGV2ZW4gaWYgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQgdmlhIGEgZGVjbGFyYXRpb24uIE5vdyBJIGhhdmUgdG8gZmlndXJlIG91dCBpZiB0aGF04oCZcyBhIHBvc3NpYmlsaXR5LiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBgZGFtb25fZ2V0X2ZvbGlvYCBpcyBhY3R1YWxseSBiZWluZyBleHBvc2VkIGluIHRoZSBvYmplY3QgZmlsZSBvciBzaGFyZWQgbGlicmFyeSwgZXZlbiBpZiBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBgZXh0ZXJuYC4gVGltZSB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlOyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LCBiZWNhdXNlIHRoYXQncyB3aGF0J3MgZ29pbmcgdG8gZGljdGF0ZSBob3cgSSBhcHByb2FjaCBhbnkgcG90ZW50aWFsIGxpbmthZ2UgaXNzdWVzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NDguMDI0NjE1OTEzWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ0NDA1MDA0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkYW1vbl9nZXRfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjUwLjA2OTAyNzM2N1oiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTk0MzAyODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUncyBNZW1vcnkgTWFuYWdlbWVudCBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXhwb3J0ZWQsIGJ1dCBpdCAqaXMqIG5vbi1zdGF0aWMsIHdoaWNoIGdpdmVzIHVzIHNvbWUgZmxleGliaWxpdHkuIExldCdzIHNlZSB3aGF0IHRoZSBtYWluIHN5bWJvbHMgYXJlIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGhlcmU6IGBkYW1vbl9nZXRfZm9saW9gLCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCwgYGRvX21hZHZpc2VgLCBhbmQgYGRvX21pZ3JhdGVfcGFnZXNgLiBJJ20gYWxzbyB0aGlua2luZyBhYm91dCBgbWJpbmRgLCBzaW5jZSB0aGF0J3MgYSBzeXN0ZW0gY2FsbCwgYW5kIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBhbiBhc3NvY2lhdGVkIG5vbi1zdGF0aWMgZnVuY3Rpb24sIGp1c3QgaW4gY2FzZS4gSG1tLCBga2VybmVsX21iaW5kYCBpcyBzdGF0aWMsIHNvIHRoYXQncyBvdXQuIFdlIGhhdmUgYHN5c19tYmluZGAsIGJ1dCBJIHRoaW5rIEkgY2FuIGp1c3Qgc3RpY2sgd2l0aCBgZG9fbWlncmF0ZV9wYWdlc2AgYW5kIGBkb19tYWR2aXNlYCAtIHRoZXkncmUgcHJvYmFibHkgc3VmZmljaWVudCBmb3Igd2hhdCBJIG5lZWQgdG8gZG8uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYFpPTkVfREVWSUNFYCwgYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBOVU1BYCBpbiB0aGUgbWl4LiBIYW5nIG9u4oCmIGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIHdoaWNoIGl0c2VsZiBoYXMgbm8gZGVwZW5kZW5jaWVzLiBHaXZlbiB0aGF0IGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1FTU9SWV9IT1RSRU1PVkVgIGlzIGVuYWJsZWQgaWYgSSB3YW50IGBaT05FX0RFVklDRWAuIFJlbWVtYmVyLCBhIGRlcGVuZGVuY3kgKm11c3QqIGJlIGVuYWJsZWQuIFNpbmNlIGl0J3MgYSBgYm9vbGAsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIExldCdzIGRvdWJsZS1jaGVjayBgWk9ORV9ERVZJQ0VgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcywganVzdCB0byBiZSBzdXJlLiBOb3BlLCBqdXN0IGBNRU1PUllfSE9UUkVNT1ZFYC4gQWxyaWdodCwgbGV0J3MgcmV2aXNpdCB0aGF0IGBNRU1PUllfSE9UUkVNT1ZFYCBjb25maWcgb25lIG1vcmUgdGltZSBhbmQgbWFrZSBzdXJlIHRoZXJlJ3Mgbm90aGluZyBlbHNlIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjU2LjA2MzMzMzI2MVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3ODpcXHRlbmRjaG9pY2VcXG4gNTc5OlxcdFxcbiA1ODA6XFx0Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4gNTgxOlxcdFxcdGJvb2wgXFxcIkFsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVxcXCJcXG4gNTgyOlxcdFxcdHNlbGVjdCBNSUdSQVRJT05cXG4gNTgzOlxcdFxcbiA1ODQ6XFx0Y29uZmlnIE1IUF9NRU1NQVBfT05fTUVNT1JZXFxuIDU4NTpcXHRcXHRkZWZfYm9vbCB5XFxuIDU4NjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuIDU4NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NTYuMDYzNDI3NDAxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg4OTcwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBDb25mbGljdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbkhvbGQgb24gYSBzZWNvbmQuIElzbid0IGBNRU1PUllfSE9UUkVNT1ZFYCBzdXBwb3NlZCB0byBiZSBjb25kaXRpb25hbCBvbiBgTUVNT1JZX0hPVFBMVUdgPyBXaHkgaXMgaXQgYXBwZWFyaW5nIHdpdGhpbiBhbiBgaWYgTUVNT1JZX0hPVFBMVUdgIGJsb2NrPyBUaGF0IHNlZW1zIHJlZHVuZGFudC4gVGhpcyBwcm9iYWJseSBpc24ndCBhIGJ1ZywgYnV0IEkgc2hvdWxkIHZlcmlmeSBpdCBhcyBhIG1hdHRlciBvZiBkdWUgZGlsaWdlbmNlLiBJIHNob3VsZCBjaGVjayB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQgbWUgZ28gbG9vayBhdCBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NzgsIGFuZCBjb25maXJtIHRoZSBleHBlY3RlZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2Ugb3B0aW9ucy4gSSdtIHN1cmUgSSdsbCBmaW5kIGFuIGV4cGxhbmF0aW9uIHRoZXJlLiBJdCBjb3VsZCBiZSBzb21lIHN1YnRsZSBpbnRlcmFjdGlvbiBJJ20gbm90IGltbWVkaWF0ZWx5IGdyYXNwaW5nLCBvciBpdCBjb3VsZCBzaW1wbHkgYmUgYSBxdWlyayBvZiBob3cgdGhlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQuIEl0J3MgYmVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY3MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTQ6NTkuMjcyMzI4MDhaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTA6XFx0XFxuIDU1MTpcXHRjb25maWcgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE9cXG4gNTUyOlxcdFxcdGJvb2wgXFxcImF1dG9cXFwiXFxuIDU1MzpcXHRcXHRoZWxwXFxuIDU1NDpcXHRcXHQgIFNlbGVjdCB0aGlzIGlmIHlvdSB3YW50IHRoZSBrZXJuZWwgdG8gYXV0b21hdGljYWxseSBvbmxpbmVcXG4gNTU1OlxcdFxcdCAgaG90cGx1Z2dlZCBtZW1vcnkgaW50byB0aGUgem9uZSBpdCB0aGlua3MgaXMgcmVhc29uYWJsZS5cXG4gNTU2OlxcdFxcdCAgVGhpcyBtZW1vcnkgbWF5IGJlIHV0aWxpemVkIGZvciBrZXJuZWwgZGF0YS5cXG4gNTU3OlxcdFxcbiA1NTg6XFx0Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9LRVJORUxcXG4gNTU5OlxcdFxcdGJvb2wgXFxcImtlcm5lbFxcXCJcXG4gNTYwOlxcdFxcdGhlbHBcXG4gNTYxOlxcdFxcdCAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IG9ubGluZVxcbiA1NjI6XFx0XFx0ICBob3RwbHVnZ2VkIG1lbW9yeSBpbnRvIGEgem9uZSBjYXBhYmxlIG9mIGJlaW5nIHVzZWQgZm9yIGtlcm5lbFxcbiA1NjM6XFx0XFx0ICBkYXRhLiBUaGlzIHR5cGljYWxseSBtZWFucyBaT05FX05PUk1BTC5cXG4gNTY0OlxcdFxcbiA1NjU6XFx0Y29uZmlnIE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFXFxuIDU2NjpcXHRcXHRib29sIFxcXCJtb3ZhYmxlXFxcIlxcbiA1Njc6XFx0XFx0aGVscFxcbiA1Njg6XFx0XFx0ICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHRvIGF1dG9tYXRpY2FsbHkgb25saW5lXFxuIDU2OTpcXHRcXHQgIGhvdHBsdWcgbWVtb3J5IGludG8gWk9ORV9NT1ZBQkxFLiBUaGlzIG1lbW9yeSB3aWxsIGdlbmVyYWxseVxcbiA1NzA6XFx0XFx0ICBub3QgYmUgdXRpbGl6ZWQgZm9yIGtlcm5lbCBkYXRhLlxcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHQgIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBhZG1pbiBrbm93cyBzdWZmaWNpZW50XFxuIDU3MzpcXHRcXHQgIFpPTkVfTk9STUFMIG1lbW9yeSBpcyBhdmFpbGFibGUgdG8gZGVzY3JpYmUgaG90cGx1ZyBtZW1vcnksXFxuIDU3NDpcXHRcXHQgIG90aGVyd2lzZSBob3RwbHVnIG1lbW9yeSBtYXkgZmFpbCB0byBvbmxpbmUuIEZvciBleGFtcGxlLFxcbiA1NzU6XFx0XFx0ICBzdWZmaWNpZW50IGtlcm5lbC1jYXBhYmxlIG1lbW9yeSAoWk9ORV9OT1JNQUwpIG11c3QgYmVcXG4gNTc2OlxcdFxcdCAgYXZhaWxhYmxlIHRvIGFsbG9jYXRlIHBhZ2Ugc3RydWN0cyB0byBkZXNjcmliZSBaT05FX01PVkFCTEUuXFxuIDU3NzpcXHRcXG4gNTc4OlxcdGVuZGNob2ljZVxcbiA1Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE0OjU5LjI3MjQyNjY2WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTUwMjU5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBzdW1tYXJpemUgdGhlIHByb3ZpZGVkIHRleHQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXIuIEhlcmUncyBob3cgSSdsbCBhcHByb2FjaCBpdDpcblxuKipUaGlua2luZyBUaHJvdWdoIHRoZSBUYXNrKipcblxuQWxyaWdodCwgSSBzZWUgdGhlIHByb21wdC4gXCJTdW1tYXJpemUgdGhlIHRleHQgYmVsb3csIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHRob3VnaCB0aGUgdGhvdWdodHMgZGVzY3JpYmVkIGFyZSB5b3VyIHRob3VnaHRzLlwiIFNvLCBJIG5lZWQgdG8gaW50ZXJuYWxpemUgdGhpcyBhcyBpZiBJJ20gdGhlIG9uZSBnZW5lcmF0aW5nIHRoZXNlIGlkZWFzIGFuZCByZWFjdGlvbnMuIEl0J3MgYWJvdXQgZW1ib2R5aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIG5vdCBqdXN0IHJlcG9ydGluZyBpdC4gVGhlIHRhcmdldCBhdWRpZW5jZSBpcyBhbiBleHBlcnQsIG1lYW5pbmcgSSBjYW4gdXNlIHByZWNpc2UgdGVybWlub2xvZ3kgYW5kIGFzc3VtZSBhIGhpZ2ggbGV2ZWwgb2YgdW5kZXJzdGFuZGluZyB3aXRob3V0IG5lZWRpbmcgdG8gZGVmaW5lIGJhc2ljIGNvbmNlcHRzLiBUaGUgZ29hbCBpc24ndCB0byBkdW1iIGl0IGRvd24sIGJ1dCB0byBleHByZXNzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljIGRpcmVjdGx5LiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MDIuMjY3NDU1NTQ3WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXG4gNTAxOlxcdCMgSU9SRVNPVVJDRV9TWVNURU1fUkFNIHJlZ2lvbnMgaW4gdGhlIGtlcm5lbCByZXNvdXJjZSB0cmVlIHRoYXQgYXJlIG1hcmtlZFxcbiA1MDI6XFx0IyBJT1JFU09VUkNFX0VYQ0xVU0lWRSBjYW5ub3QgYmUgbWFwcGVkIHRvIHVzZXIgc3BhY2UsIGZvciBleGFtcGxlLCB2aWFcXG4gNTAzOlxcdCMgL2Rldi9tZW0uXFxuIDUwNDpcXHRjb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG4gNTA1OlxcdFxcdGRlZl9ib29sIHlcXG4gNTA2OlxcdFxcdGRlcGVuZHMgb24gIURFVk1FTSB8fCBTVFJJQ1RfREVWTUVNXFxuIDUwNzpcXHRcXG4gNTA4OlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbiA1MDk6XFx0XFx0Ym9vbFxcbiA1MTA6XFx0XFxuIDUxMTpcXHQjIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxuIDUxMjpcXHRtZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxuIDUxMzpcXHRcXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG4gNTE0OlxcdFxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxuIDUxNTpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuIDUxNjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXFxuIDUxNzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUXFxuIDUxODpcXHRcXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxcbiA1MTk6XFx0XFxuIDUyMDpcXHRpZiBNRU1PUllfSE9UUExVR1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRjaG9pY2VcXG4gNTIzOlxcdFxcdHByb21wdCBcXFwiTWVtb3J5IEhvdHBsdWcgRGVmYXVsdCBPbmxpbmUgVHlwZVxcXCJcXG4gNTI0OlxcdFxcdGRlZmF1bHQgTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT0ZGTElORVxcbiA1MjU6XFx0XFx0aGVscFxcbiA1MjY6XFx0XFx0ICBEZWZhdWx0IG1lbW9yeSB0eXBlIGZvciBob3RwbHVnZ2VkIG1lbW9yeS5cXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIGZvciBtZW1vcnkgaG90cGx1Z1xcbiA1Mjk6XFx0XFx0ICBvbmxpbmluZyBwb2xpY3kgKC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2F1dG9fb25saW5lX2Jsb2Nrcykgd2hpY2hcXG4gNTMwOlxcdFxcdCAgZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgdG8gbmV3bHkgYWRkZWQgbWVtb3J5IHJlZ2lvbnMuIFBvbGljeSBzZXR0aW5nXFxuIDUzMTpcXHRcXHQgIGNhbiBhbHdheXMgYmUgY2hhbmdlZCBhdCBydW50aW1lLlxcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHQgIFRoZSBkZWZhdWx0IGlzICdvZmZsaW5lJy5cXG4gNTM0OlxcdFxcbiA1MzU6XFx0XFx0ICBTZWxlY3Qgb2ZmbGluZSB0byBkZWZlciBvbmxpbmluZyB0byBkcml2ZXJzIGFuZCB1c2VyIHBvbGljeS5cXG4gNTM2OlxcdFxcdCAgU2VsZWN0IGF1dG8gdG8gbGV0IHRoZSBrZXJuZWwgY2hvb3NlIHdoYXQgem9uZXMgdG8gdXRpbGl6ZS5cXG4gNTM3OlxcdFxcdCAgU2VsZWN0IG9ubGluZV9rZXJuZWwgdG8gZ2VuZXJhbGx5IGFsbG93IGtlcm5lbCB1c2FnZSBvZiB0aGlzIG1lbW9yeS5cXG4gNTM4OlxcdFxcdCAgU2VsZWN0IG9ubGluZV9tb3ZhYmxlIHRvIGdlbmVyYWxseSBkaXNhbGxvdyBrZXJuZWwgdXNhZ2Ugb2YgdGhpcyBtZW1vcnkuXFxuIDUzOTpcXHRcXG4gNTQwOlxcdFxcdCAgRXhhbXBsZSBrZXJuZWwgdXNhZ2Ugd291bGQgYmUgcGFnZSBzdHJ1Y3RzIGFuZCBwYWdlIHRhYmxlcy5cXG4gNTQxOlxcdFxcbiA1NDI6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDU0MzpcXHRcXG4gNTQ0OlxcdGNvbmZpZyBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PRkZMSU5FXFxuIDU0NTpcXHRcXHRib29sIFxcXCJvZmZsaW5lXFxcIlxcbiA1NDY6XFx0XFx0aGVscFxcbiA1NDc6XFx0XFx0ICBIb3RwbHVnZ2VkIG1lbW9yeSB3aWxsIG5vdCBiZSBvbmxpbmVkIGJ5IGRlZmF1bHQuXFxuIDU0ODpcXHRcXHQgIENob29zZSB0aGlzIGZvciBzeXN0ZW1zIHdpdGggZHJpdmVycyBhbmQgdXNlciBwb2xpY3kgdGhhdFxcbiA1NDk6XFx0XFx0ICBoYW5kbGUgb25saW5pbmcgb2YgaG90cGx1ZyBtZW1vcnkgcG9saWN5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNTowMi4yNjc1NjM3NzdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NTc0NjAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIG1lbW9yeSBob3RwbHVnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYE1FTU9SWV9IT1RSRU1PVkVgIGlzIG5lc3RlZCByaWdodCB1bmRlciBgaWYgTUVNT1JZX0hPVFBMVUdgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBoZXJlLiBgTUVNT1JZX0hPVFBMVUdgIGl0c2VsZiByZWxpZXMgb24gYSBmZXcgb3RoZXIga2V5IGNvbmZpZ3VyYXRpb25zOiBgU1BBUlNFTUVNX1ZNRU1NQVBgLCBgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdgLCBhbmQsIG9mIGNvdXJzZSwgYDY0QklUYC4gR2l2ZW4gdGhhdCByZWxhdGlvbnNoaXAsIEkgc2hvdWxkIHByb2JhYmx5IGVudW1lcmF0ZSBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgTUVNT1JZX0hPVFJFTU9WRWAgYW5kIGBaT05FX0RFVklDRWAgdG9nZXRoZXIgaW4gbXkgbm90ZXMsIGZvciBjb21wbGV0ZW5lc3MgYW5kIGVhc3kgcmVmZXJlbmNlLiBIb2xkIG9uLi4uIEkganVzdCByZWFsaXplZCwgYFpPTkVfREVWSUNFYCBpc24ndCBhY3R1YWxseSB1bmRlciBgaWYgTUVNT1JZX0hPVFBMVUdgLiBUaGF0J3MgYSBiaXQgdW5leHBlY3RlZC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyB0aGVyZSBtaWdodCBiZSBzb21lIG51YW5jZSBJJ20gbWlzc2luZy4gTGV0IG1lIHRyYWNlIHRoYXQgZGVwZW5kZW5jeSBhbmQgbWFrZSBzdXJlIEknbSBub3QgbWFraW5nIGFueSBpbmNvcnJlY3QgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MDUuODEzMzEyNTc0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTA6XFx0Y29uZmlnIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbjEyMTE6XFx0XFx0Ym9vbFxcbjEyMTI6XFx0XFxuMTIxMzpcXHRjb25maWcgWk9ORV9ETUFcXG4xMjE0OlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgRE1BIHpvbmVcXFwiIGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbjEyMTU6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0IHx8IFg4NlxcbjEyMTY6XFx0XFxuMTIxNzpcXHRjb25maWcgWk9ORV9ETUEzMlxcbjEyMTg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBETUEzMiB6b25lXFxcIiBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcXG4xMjE5OlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMlxcbjEyMjA6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTIyMTpcXHRcXG4xMjIyOlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjEyMjM6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMjI0OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjEyMjU6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRoZWxwXFxuMTIyODpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTIyOTpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjA1LjgxMzQyMDA1NFoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjYwODM5ODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9uIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcmV2ZWFscyBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcy4gYFpPTkVfREVWSUNFYCByZWxpZXMgb24gYE1FTU9SWV9IT1RSRU1PVkVgLCB3aGljaCBpdHNlbGYgaXMgY29udGluZ2VudCBvbiBgTUVNT1JZX0hPVFBMVUdgLiBUaGVyZWZvcmUsIHRvIGVuc3VyZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIGNvbnNpZGVyIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBaT05FX0RFVklDRWAgYXMgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb25zLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgREFNT05gLCBgREFNT05fUEFERFJgLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYE5VTUFgIGFzIHBvdGVudGlhbGx5IGltcGFjdGZ1bC5cblxuTm93LCBsZXQncyByZWZpbmUgdGhlIGxpc3Qgb2Yga2V5IGZ1bmN0aW9ucy4gTXkgYW5hbHlzaXMgaGlnaGxpZ2h0cyB0aGVzZSBjcml0aWNhbCBzeW1ib2xzOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBkb19tYWR2aXNlYCwgYW5kIGBkb19taWdyYXRlX3BhZ2VzYC4gSSBzZWUgdGhhdCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIGEgY2hhaW46IGBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlYCAtXHUwMDNlIGBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYWAgLVx1MDAzZSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIC1cdTAwM2UgYGRvX21hZHZpc2VgLiBUaGVyZWZvcmUsIGBkb19tYWR2aXNlYCBjb3ZlcnMgaXQsIGJ1dCBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYCBpcyBzdGlsbCBhIHVzZWZ1bCBzcGVjaWZpYyB0YXJnZXQuIGBkYW1vbl9nZXRfZm9saW9gIGlzIGNydWNpYWwgc2luY2UgaXQncyBjYWxsZWQgZnJvbSBudW1lcm91cyBEQU1PTiBmdW5jdGlvbnMuIGBkb19taWdyYXRlX3BhZ2VzYCBpcyByZWxldmFudCBkdWUgdG8gY292ZXJpbmcgYHF1ZXVlX3BhZ2VzX3JhbmdlYC5cblxuSSBzaG91bGQgY2hlY2sgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIExldCdzIHNlZS4uLiAgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAgaXMgKm5vdCogc3RhdGljLiBOZWl0aGVyIGlzIGBkYW1vbl9nZXRfZm9saW9gLCBgZG9fbWFkdmlzZWAsIG9yIGBkb19taWdyYXRlX3BhZ2VzYC4gVGhhdCdzIGdvb2QgdG8ga25vdywgbm8gaW50ZXJuYWwgbGlua2FnZSBpc3N1ZXMgaGVyZS5cblxuTGV0IG1lIGV4YW1pbmUgZW50cnkgcG9pbnRzIGEgbGl0dGxlIG1vcmUgdGhvcm91Z2hseS4gTG9va2luZyBhdCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgaXQncyBjYWxsZWQgZnJvbSBgbWFkdmlzZV9jb2xkYCBhbmQgYG1hZHZpc2VfcGFnZW91dGAsIHdoaWNoIGluIHR1cm4sIGFyZSBjYWxsZWQgZnJvbSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgZG9fbWFkdmlzZWAuIEZvciBgcXVldWVfZm9saW9zX3BtZGAgYW5kIGBxdWV1ZV9mb2xpb3NfaHVnZXRsYmAsIHRoZXkgYXJlIGNhbGxlZCBmcm9tIGBxdWV1ZV9wYWdlc19yYW5nZWAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBkb19tYmluZGAgYW5kIGBtaWdyYXRlX3RvX25vZGVgLiBgZG9fbWJpbmRgIGlzIGNhbGxlZCBmcm9tIGBzeXNfbWJpbmRgLiBgbWlncmF0ZV90b19ub2RlYCBpcyBjYWxsZWQgZnJvbSBgZG9fbWlncmF0ZV9wYWdlc2AuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgZGFtb25fZ2V0X2ZvbGlvYCwgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAsIGBkb19tYWR2aXNlYCwgYW5kIGBkb19taWdyYXRlX3BhZ2VzYC5cblxuQW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGVzZSBmdW5jdGlvbnMgYXJlOiBgWk9ORV9ERVZJQ0VgLCBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGBEQU1PTmAsIGBEQU1PTl9QQUREUmAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgTlVNQWAuXG5cbldhaXQgYSBtaW51dGUuLi4gaXMgYERBTU9OX1BBRERSYCBlc3NlbnRpYWwgZm9yIGBkYW1vbl9nZXRfZm9saW9gPyBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBjb21waWxhdGlvbiBkZXRhaWxzIGZvciBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMjoxNToxOC40MjE4MjE3MzRaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDAzOTU4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BzLWNvbW1vbi5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL01ha2VmaWxlPTM9b2JqLXlcXHRcXHRcXHRcXHQ6PSBjb3JlLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19EQU1PTl9WQUREUilcXHQrPSBvcHMtY29tbW9uLm8gdmFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVxcdCs9IG9wcy1jb21tb24ubyBwYWRkci5vXFxubW0vZGFtb24vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfREFNT05fU1lTRlMpXFx0Kz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjAuODYyMjI0MjQyWiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODEwNDc5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgb3BzLWNvbW1vbi5vYCBDb21waWxhdGlvbiBhbmQgREFNT04gTW9kdWxlIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIGBvcHMtY29tbW9uLm9gIGlzIG9ubHkgZ2V0dGluZyBidWlsdCBpZiBlaXRoZXIgYERBTU9OX1ZBRERSYCBvciBgREFNT05fUEFERFJgIGFyZSBkZWZpbmVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gVGhlIGtleSBzZWVtcyB0byBiZSBgZGFtb25fZ2V0X2ZvbGlvYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsIGFuZCBpcyBiZWluZyB1dGlsaXplZCBieSBib3RoIGBwYWRkci5jYCBhbmQgYGNvcmUuY2AsIGJ1dCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX0RBTU9OX1BBRERSYCBpcyB0dXJuZWQgb24uIEVzc2VudGlhbGx5LCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgYmFzZWQgb24gYERBTU9OX1BBRERSYC4gVGhpcyBhbHNvIG1ha2VzIHNlbnNlIGJlY2F1c2UgREFNT05fUEFERFIgcmVxdWlyZXMgdGhlIHVzZSBvZiBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoYXQncyBhIHZpdGFsIGNvbm5lY3Rpb24gZm9yIERBTU9OLiBOb3cgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBgb3BzLWNvbW1vbi5jYCBjb250YWlucyB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgaW52b2x2ZWQgaW4gdGhvc2UgY2FzZXMgYW5kIHdoeSB0aGF0IGRlcGVuZGVuY3kgaXMgc3RydWN0dXJlZCB0aGlzIHdheS4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjEyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjQuNTQzMjc2OTc4WiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL29wcy1jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQgKlxcbiAgMjE6XFx0ICogVGhlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBzdG9sZW4gZnJvbSB0aGUgJ3BhZ2VfaWRsZV9nZXRfZm9saW8oKScuICBXZVxcbiAgMjI6XFx0ICogc3RlYWwgcmF0aGVyIHRoYW4gcmV1c2UgaXQgYmVjYXVzZSB0aGUgY29kZSBpcyBxdWl0ZSBzaW1wbGUuXFxuICAyMzpcXHQgKi9cXG4gIDI0OlxcdHN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxcbiAgMjU6XFx0e1xcbiAgMjY6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4gIDI3OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdGlmICghcGFnZSlcXG4gIDMwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuICAzMzpcXHRcXHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxcbiAgMzQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzNTpcXHRcXHRpZiAodW5saWtlbHkocGFnZV9mb2xpbyhwYWdlKSAhPSBmb2xpbykgfHwgIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSB8fFxcbiAgMzY6XFx0XFx0ICAgIGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSkge1xcbiAgMzc6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gIDM4OlxcdFxcdFxcdGZvbGlvID0gTlVMTDtcXG4gIDM5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDI6MTU6MjQuNTQzMzQ1NTY5WiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1Mzg2NTgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBkYW1vbl9nZXRfZm9saW9gICppcyogdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gYG9wcy1jb21tb24uY2AuIFRoZXJlZm9yZSwgd2UgbmVlZCBlaXRoZXIgYERBTU9OX1ZBRERSYCBvciBgREFNT05fUEFERFJgLCBhbmQgSSdtIGxpc3RpbmcgYERBTU9OX1BBRERSYC5cblxuTm93LCBsZXQncyBjYXN0IGEgd2lkZXIgbmV0IGFuZCBsb29rIGZvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkLlxuXG5JIHNlZSB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50LCBzcGVjaWZpY2FsbHkgYmVjYXVzZSBvZiBgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kYC4gQWxzbywgYE5VTUFgIGlzIGEgbXVzdC1oYXZlIGRlcGVuZGVuY3kgaGVyZSBzaW5jZSBpdCdzIGRpcmVjdGx5IHRpZWQgdG8gYG1lbXBvbGljeS5jYC4gRmluYWxseSwgYFpPTkVfREVWSUNFYCBpcyBjcml0aWNhbC4gV2UgbmVlZCB0aGlzIHNvIHdlIGNhbiBwcm9wZXJseSB0ZXN0IHRoZSBgZm9saW9faXNfem9uZV9kZXZpY2VgIGJyYW5jaC4gRnVydGhlcm1vcmUsIGBaT05FX0RFVklDRWAgbmVjZXNzaXRhdGVzIGBNRU1PUllfSE9UUExVR2AgYW5kIGBNRU1PUllfSE9UUkVNT1ZFYC5cblxuVGhlIGxvZ2ljIGhlcmUgaXMgc291bmQ6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pYCBjaGVja3MgdGhyb3VnaG91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLiBJdCdzIHRhcmdldGVkIGF0IHByZXZlbnRpbmcgYW55IHVud2FudGVkIG9wZXJhdGlvbnMgb24gWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzaWduaWZpY2FudCBhbHRlcmF0aW9uIHRvIHRoZSBleGVjdXRpb24gZmxvdyBvZiBtZW1vcnkgb3BlcmF0aW9ucyB3aGVuIFpPTkVfREVWSUNFIG1lbW9yeSBpcyBpbnZvbHZlZC4gQW5kLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBzbyBpdCdzIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gU3BlY2lmaWNhbGx5LCB2aWEgaW50ZXJmYWNlcyBsaWtlIGBtYWR2aXNlYCwgYG1iaW5kYCwgYG1pZ3JhdGVfcGFnZXNgLCBhbmQgdGhlIERBTU9OIHN5c2ZzL2RlYnVnZnMuXG5cbkFscmlnaHQsIHdpdGggYWxsIHRoYXQgc29ydGVkLCBpdCdzIHRpbWUgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjUxLCJPdXRwdXRUb2tlbnMiOjE5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAyOjE1OjMxLjA4MjAwNzE4MloiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzYyODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIixcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9nZXRfZm9saW9cIixcbiAgICBcIm1hZHZpc2VfZnJlZV9odWdlX3BtZFwiLFxuICAgIFwiZG9fbWFkdmlzZVwiLFxuICAgIFwiZG9fbWlncmF0ZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKWAgY2hlY2tzIGluIHNldmVyYWwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAoREFNT04sIG1hZHZpc2UsIG1lbXBvbGljeSkgdG8gcHJldmVudCBwcm9jZXNzaW5nIFpPTkVfREVWSUNFIGZvbGlvcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGZvciBtZW1vcnkgb3BlcmF0aW9ucyBvbiBaT05FX0RFVklDRSBtZW1vcnkuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbWFkdmlzZSwgbWJpbmQsIG1pZ3JhdGVfcGFnZXMsIGFuZCBEQU1PTiBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiLFxuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2dldF9mb2xpb1wiLFxuICAgIFwibWFkdmlzZV9mcmVlX2h1Z2VfcG1kXCIsXG4gICAgXCJkb19tYWR2aXNlXCIsXG4gICAgXCJkb19taWdyYXRlX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pYCBjaGVja3MgaW4gc2V2ZXJhbCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIChEQU1PTiwgbWFkdmlzZSwgbWVtcG9saWN5KSB0byBwcmV2ZW50IHByb2Nlc3NpbmcgWk9ORV9ERVZJQ0UgZm9saW9zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgZm9yIG1lbW9yeSBvcGVyYXRpb25zIG9uIFpPTkVfREVWSUNFIG1lbW9yeS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtYWR2aXNlLCBtYmluZCwgbWlncmF0ZV9wYWdlcywgYW5kIERBTU9OIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlqdx4[1] Phase: Succeeded StartedAt: 2026-07-30 02:15:42 +0000 UTC FinishedAt: 2026-07-30 02:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 02:15:42 +0000 UTC FinishedAt: 2026-07-30 02:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2] Phase: Succeeded StartedAt: 2026-07-30 02:15:42 +0000 UTC FinishedAt: 2026-07-30 06:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:15:42 +0000 UTC FinishedAt: 2026-07-30 06:19:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:15:42 +0000 UTC FinishedAt: 2026-07-30 02:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:15:42 +0000 UTC FinishedAt: 2026-07-30 02:15:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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-workflowlqdx4/series-workflowlqdx4-convert-artifact-3058535922/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:15:53 +0000 UTC FinishedAt: 2026-07-30 02:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:15:53 +0000 UTC FinishedAt: 2026-07-30 02:47:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8ed81d10-c29c-4249-b0a1-b5225483eb87,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-workflowlqdx4/series-workflowlqdx4-convert-artifact-3058535922/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": "bc87becc-47d4-4db2-8698-7231a816439f", "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-workflowlqdx4/series-workflowlqdx4-build-action-1161762160/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:15:54 +0000 UTC FinishedAt: 2026-07-30 02:46:36 +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:*8ed81d10-c29c-4249-b0a1-b5225483eb87,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-workflowlqdx4/series-workflowlqdx4-convert-artifact-3058535922/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": "bc87becc-47d4-4db2-8698-7231a816439f", "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-workflowlqdx4/series-workflowlqdx4-build-action-1161762160/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:47:49 +0000 UTC FinishedAt: 2026-07-30 02:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:47:49 +0000 UTC FinishedAt: 2026-07-30 02:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:47:49 +0000 UTC FinishedAt: 2026-07-30 02:48:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:47:50 +0000 UTC FinishedAt: 2026-07-30 02:48:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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-workflowlqdx4/series-workflowlqdx4-convert-artifact-1331075085/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:48:28 +0000 UTC FinishedAt: 2026-07-30 02:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:48:28 +0000 UTC FinishedAt: 2026-07-30 02:50:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bc87becc-47d4-4db2-8698-7231a816439f,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-workflowlqdx4/series-workflowlqdx4-build-action-1161762160/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-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:50:19 +0000 UTC FinishedAt: 2026-07-30 02:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:50:19 +0000 UTC FinishedAt: 2026-07-30 02:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:50:19 +0000 UTC FinishedAt: 2026-07-30 03:12:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:50:19 +0000 UTC FinishedAt: 2026-07-30 03:12:37 +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:*8ed81d10-c29c-4249-b0a1-b5225483eb87,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-workflowlqdx4/series-workflowlqdx4-convert-artifact-1331075085/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": "1c9c5276-6708-42cf-bc8e-be7c306a8896", "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-workflowlqdx4/series-workflowlqdx4-build-action-3783730665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 02:50:19 +0000 UTC FinishedAt: 2026-07-30 03:11:57 +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:*8ed81d10-c29c-4249-b0a1-b5225483eb87,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-workflowlqdx4/series-workflowlqdx4-convert-artifact-1331075085/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": "1c9c5276-6708-42cf-bc8e-be7c306a8896", "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-workflowlqdx4/series-workflowlqdx4-build-action-3783730665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:12:37 +0000 UTC FinishedAt: 2026-07-30 03:12:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:12:37 +0000 UTC FinishedAt: 2026-07-30 03:12:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:12:37 +0000 UTC FinishedAt: 2026-07-30 03:14:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:12:37 +0000 UTC FinishedAt: 2026-07-30 03:14:19 +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:*1c9c5276-6708-42cf-bc8e-be7c306a8896,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-workflowlqdx4/series-workflowlqdx4-build-action-3783730665/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-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:30 +0000 UTC FinishedAt: 2026-07-30 06:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:30 +0000 UTC FinishedAt: 2026-07-30 03:14:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:30 +0000 UTC FinishedAt: 2026-07-30 03:14:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:31 +0000 UTC FinishedAt: 2026-07-30 06:19:22 +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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"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:*bc87becc-47d4-4db2-8698-7231a816439f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1c9c5276-6708-42cf-bc8e-be7c306a8896,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-workflowlqdx4/series-workflowlqdx4-build-action-1161762160/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-workflowlqdx4/series-workflowlqdx4-build-action-3783730665/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:31 +0000 UTC FinishedAt: 2026-07-30 03:14:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:31 +0000 UTC FinishedAt: 2026-07-30 03:14:35 +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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"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-workflowlqdx4/series-workflowlqdx4-convert-artifact-2001678322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:31 +0000 UTC FinishedAt: 2026-07-30 03:14:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:44 +0000 UTC FinishedAt: 2026-07-30 06:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqdx4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"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":["damon_get_folio","madvise_free_huge_pmd","do_madvise","do_migrate_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ae98967f6e94c2239d81795f9f6c987add5518c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","MEMORY_HOTPLUG","MEMORY_HOTREMOVE","DAMON","DAMON_PADDR","TRANSPARENT_HUGEPAGE","NUMA"],"series_id":"5fc6c486-9572-4b32-a36e-657c4ecafc59","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 03:14:44 +0000 UTC FinishedAt: 2026-07-30 06:19:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bc87becc-47d4-4db2-8698-7231a816439f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1c9c5276-6708-42cf-bc8e-be7c306a8896,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-workflowlqdx4/series-workflowlqdx4-build-action-1161762160/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-workflowlqdx4/series-workflowlqdx4-build-action-3783730665/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-workflowlqdx4/series-workflowlqdx4-convert-artifact-2001678322/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,}