ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2VkaXRpbmcudHh0IGIvcnVudGltZS9kb2MvZWRpdGluZy50eHQKaW5kZXggZTQ1MDQxMi4uZDY1ZWNlOCAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZWRpdGluZy50eHQKKysrIGIvcnVudGltZS9kb2MvZWRpdGluZy50eHQKQEAgLTEsNCArMSw0IEBACi0qZWRpdGluZy50eHQqICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGUuICBMYXN0IGNoYW5nZTogMjAwNiBBcHIgMDYKKyplZGl0aW5nLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4wZS4gIExhc3QgY2hhbmdlOiAyMDA2IEFwciAxNwogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtMTIxMyw3ICsxMjEzLDcgQEAKIENoYW5naW5nIGRpcmVjdG9yeSBmYWlscyB3aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBtb2RpZmllZCwgdGhlICcuJyBmbGFnIGlzCiBwcmVzZW50IGluICdjcG9wdGlvbnMnIGFuZCAiISIgaXMgbm90IHVzZWQgaW4gdGhlIGNvbW1hbmQuCiAKLQkJCQkJCQkqOmNkKiAqRTQ3MioKKwkJCQkJCQkqOmNkKiAqRTc0NyogKkU0NzIqCiA6Y2RbIV0JCQlPbiBub24tVW5peCBzeXN0ZW1zOiBQcmludCB0aGUgY3VycmVudCBkaXJlY3RvcnkKIAkJCW5hbWUuICBPbiBVbml4IHN5c3RlbXM6IENoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkKIAkJCXRvIHRoZSBob21lIGRpcmVjdG9yeS4gIFVzZSB8OnB3ZHwgdG8gcHJpbnQgdGhlCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90YWdzIGIvcnVudGltZS9kb2MvdGFncwppbmRleCA2YjJiMjdlLi5hMzI3MjYxIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy90YWdzCisrKyBiL3J1bnRpbWUvZG9jL3RhZ3MKQEAgLTM5NTgsNiArMzk1OCw3IEBACiBFNzQ0CW5ldGJlYW5zLnR4dAkvKkU3NDQqCiBFNzQ1CWV2YWwudHh0CS8qRTc0NSoKIEU3NDYJZXZhbC50eHQJLypFNzQ2KgorRTc0NwllZGl0aW5nLnR4dAkvKkU3NDcqCiBFNzQ3CXN5bnRheC50eHQJLypFNzQ3KgogRTc0OAlyZXBlYXQudHh0CS8qRTc0OCoKIEU3NDkJZXZhbC50eHQJLypFNzQ5KgpAQCAtNTYxNSw2ICs1NjE2LDcgQEAKIGhlYnJldy50eHQJaGVicmV3LnR4dAkvKmhlYnJldy50eHQqCiBoZWxwCXZhcmlvdXMudHh0CS8qaGVscCoKIGhlbHAtY29udGV4dAloZWxwLnR4dAkvKmhlbHAtY29udGV4dCoKK2hlbHAtdGFncwl0YWdzCTEKIGhlbHAtdHJhbnNsYXRlZAl2YXJpb3VzLnR4dAkvKmhlbHAtdHJhbnNsYXRlZCoKIGhlbHAteHRlcm0td2luZG93CXZhcmlvdXMudHh0CS8qaGVscC14dGVybS13aW5kb3cqCiBoZWxwLnR4dAloZWxwLnR4dAkvKmhlbHAudHh0KgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdG9kby50eHQgYi9ydW50aW1lL2RvYy90b2RvLnR4dAppbmRleCAwNDYzZGQ2Li41OTllMzcwIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy90b2RvLnR4dAorKysgYi9ydW50aW1lL2RvYy90b2RvLnR4dApAQCAtMSw0ICsxLDQgQEAKLSp0b2RvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4wZS4gIExhc3QgY2hhbmdlOiAyMDA2IEFwciAxNQorKnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBlLiAgTGFzdCBjaGFuZ2U6IDIwMDYgQXByIDE3CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKQEAgLTg2Miw2ICs4NjIsOSBAQAogCiAKIFByb2JsZW1zIHRoYXQgd2lsbCAocHJvYmFibHkpIG5vdCBiZSBzb2x2ZWQ6CistICAgR1RLOiB3aGVuIHVzaW5nIHRoZSBwb3B1cCBtZW51IHdpdGggc3BlbGxpbmcgc3VnZ2VzdGlvbnMgYW5kIHJlbGVhc2luZyB0aGUKKyAgICByaWdodCBtb3VzZSBidXR0b24gYmVmb3JlIHRoZSBtZW51IGFwcGVhcnMgc2VsZWN0aW5nIGFuIGl0ZW0gd2l0aCB0aGUKKyAgICByaWdodCBtb3VzZSBidXR0b24gaGFzIG5vIGVmZmVjdC4gIEdUSyBkb2VzIG5vdCBwcm9kdWNlIGFuIGV2ZW50IGZvciB0aGlzLgogLSAgIHh0ZXJtIHRpdGxlOiBUaGUgZm9sbG93aW5nIHNjZW5hcmlvIG1heSBvY2N1ciAoZXNwLiB3aGVuIHJ1bm5pbmcgdGhlIFZpbQogICAgIHRlc3Qgc2NyaXB0KTogVmltIDEgc2V0cyB0aGUgdGl0bGUgdG8gImZpbGUxIiwgdGhlbiByZXN0b3JlcyB0aGUgdGl0bGUgdG8KICAgICAieHRlcm0iIHdpdGggYW4gRVNDIHNlcXVlbmNlIHdoZW4gZXhpdGluZy4gIFZpbSAyIG9idGFpbnMgdGhlIG9sZCB0aXRsZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0IGIvcnVudGltZS9kb2MvdmVyc2lvbjcudHh0CmluZGV4IDRjZGQ0MWYuLjZkMDE4M2QgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3ZlcnNpb243LnR4dAorKysgYi9ydW50aW1lL2RvYy92ZXJzaW9uNy50eHQKQEAgLTEsNCArMSw0IEBACi0qdmVyc2lvbjcudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMGUuICBMYXN0IGNoYW5nZTogMjAwNiBBcHIgMTYKKyp2ZXJzaW9uNy50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wZS4gIExhc3QgY2hhbmdlOiAyMDA2IEFwciAxNwogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBCcmFtIE1vb2xlbmFhcgpAQCAtMjUxNCw0ICsyNTE0LDEwIEBACiBXaGVuIHVzaW5nICI6dnNwIiBvciAiOnNwIiB0aGUgYXZhaWxhYmxlIHNwYWNlIHdhc24ndCB1c2VkIGVxdWFsbHkgYmV0d2Vlbgogd2luZG93cy4gKFNlcnZhdGl1cyBCcmFuZHQpCiAKK0V4cGFuZGluZyA8Y1dPUkQ+IG9uIGEgdHJhaWxpbmcgYmxhbmsgcmVzdWx0ZWQgaW4gdGhlIGZpcnN0IHdvcmQgaW4gdGhlIGxpbmUKK2lmICdlbmNvZGluZycgaXMgYSBtdWx0aS1ieXRlIGVuY29kaW5nLgorCitTcGVsbCBjaGVja2luZzogc3BlbGxiYWR3b3JkKCkgZGlkbid0IHNlZSBhIG1pc3NpbmcgY2FwaXRhbCBpbiB0aGUgZmlyc3Qgd29yZAorb2YgYSBsaW5lLiAgUG9wdXAgbWVudSBub3cgb25seSBzdWdnZXN0IHRoZSBjYXBpdGFsaXplZCB3b3JkIHdoZW4gYXBwcm9wcmlhdGUuCisKICB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6CmRpZmYgLS1naXQgYS9ydW50aW1lL2xhbmcvbWVudV9mcl9mci5sYXRpbjEudmltIGIvcnVudGltZS9sYW5nL21lbnVfZnJfZnIubGF0aW4xLnZpbQppbmRleCBlZmNhNzFiLi5lNGIxYmI4IDEwMDY0NAotLS0gYS9ydW50aW1lL2xhbmcvbWVudV9mcl9mci5sYXRpbjEudmltCisrKyBiL3J1bnRpbWUvbGFuZy9tZW51X2ZyX2ZyLmxhdGluMS52aW0KQEAgLTEsNyArMSw4IEBACiAiIE1lbnUgVHJhbnNsYXRpb25zOglGcmFuY2FpcwogIiBNYWludGFpbmVyOgkJQWRyaWVuIEJlYXUgPHZlcnNpb24uZnJhbmNhaXNlQGZyZWUuZnI+CiAiIEZpcnN0IFZlcnNpb246CUZyYW5jb2lzIFRodW51cyA8dGh1bnVzQHN5c3RyYW4uZnI+Ci0iIExhc3QgQ2hhbmdlOgkJMjAwMyBNYXkgMjkKKyIgTGFzdCBNb2RpZmljYXRpb246ICAgIERhdmlkIEJsYW5jaGV0IDxkYXZpZC5ibGFuY2hldEBmcmVlLmZyPgorIiBMYXN0IENoYW5nZToJCTIwMDYgQXByIDExCiAKICIgUXVpdCB3aGVuIG1lbnUgdHJhbnNsYXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCiBpZiBleGlzdHMoImRpZF9tZW51X3RyYW5zIikKQEAgLTI0LDYgKzI1LDcgQEAKICIgLXNlcDEtCiBtZW51dHJhbnMgJkNyZWRpdHMJCQkJJlJlbWVyY2llbWVudHMKIG1lbnV0cmFucyBDbyZweWluZwkJCQkmTGljZW5zZQorbWVudXRyYW5zICZTcG9uc29yL1JlZ2lzdGVyCQkJU3BvbnNvci8mRW5yZWdpc3RyZW1lbnQKIG1lbnV0cmFucyBPJnJwaGFucwkJCQkmT3JwaGVsaW5zCiAiIC1zZXAyLQogbWVudXRyYW5zICZWZXJzaW9uCQkJCSZWZXJzaW9uCkBAIC0zNiw2ICszOCw3IEBACiAKIG1lbnV0cmFucyAmT3BlblwuXC5cLjxUYWI+OmUJCQkmT3V2cmlyXC5cLlwuPFRhYj46ZQogbWVudXRyYW5zIFNwJmxpdC1PcGVuXC5cLlwuPFRhYj46c3AJCU91dnJpclwg4FwgcCZhcnRcLlwuXC48VGFiPjpzcAorbWVudXRyYW5zIE9wZW5cIFRhYlwuXC5cLjxUYWI+OnRhYm5ldwkJT3V2cmlyXCBkYW5zXCB1blwgb25nbGV0XC5cLlwuPFRhYj46dGFibmV3CiBtZW51dHJhbnMgJk5ldzxUYWI+OmVuZXcJCQkmTm91dmVhdTxUYWI+OmVuZXcKIG1lbnV0cmFucyAmQ2xvc2U8VGFiPjpjbG9zZQkJCSZGZXJtZXI8VGFiPjpjbG9zZQogIiAtU0VQMS0KQEAgLTY0LDcgKzY3LDcgQEAKIG1lbnV0cmFucyBQdXRcICZCZWZvcmU8VGFiPltwCQkJUGxhY2VyXCBhJnZhbnQ8VGFiPltwCiBtZW51dHJhbnMgUHV0XCAmQWZ0ZXI8VGFiPl1wCQkJUGxhY2VyXCBhcHIm6HM8VGFiPl1wCiBtZW51dHJhbnMgJkRlbGV0ZTxUYWI+eAkJCQlFZmZhJmNlcjxUYWI+eAotbWVudXRyYW5zICZTZWxlY3RcIGFsbDxUYWI+Z2dWRwkJCSZT6WxlY3Rpb25uZXJcIHRvdXQ8VGFiPmdnVkcKK21lbnV0cmFucyAmU2VsZWN0XCBBbGw8VGFiPmdnVkcJCQkmU+lsZWN0aW9ubmVyXCB0b3V0PFRhYj5nZ1ZHCiAiIC1TRVAyLQogbWVudXRyYW5zICZGaW5kXC5cLlwuCQkJCVJlYyZoZXJjaGVyXC5cLlwuCiBtZW51dHJhbnMgRmluZFwgYW5kXCBSZXAmbGFjZVwuXC5cLgkJUmUmbXBsYWNlclwuXC5cLgpAQCAtMTMzLDYgKzEzNiwyNiBAQAogbWVudXRyYW5zIEJ1aWxkXCAmVGFnc1wgRmlsZQkJCSZH6W7pcmVyXCBmaWNoaWVyXCBkJ+l0aXF1ZXR0ZXMKIAogIiAtU0VQMS0KK21lbnV0cmFucyAmU3BlbGxpbmcJCQkmT3J0aG9ncmFwaGUKK21lbnV0cmFucyAmU3BlbGxcIENoZWNrXCBPbgkJCSZBY3RpdmVyCittZW51dHJhbnMgU3BlbGxcIENoZWNrXCAmT2ZmCQkJJkTpc2FjdGl2ZXIKK21lbnV0cmFucyBUb1wgJk5leHRcIGVycm9yPFRhYj5dcwkJwFwgbCdlcnJldXJcICZzdWl2YW50ZTxUYWI+XXMKK21lbnV0cmFucyBUb1wgJlByZXZpb3VzXCBlcnJvcjxUYWI+W3MJCcBcIGwnZXJyZXVyXCAmcHLpY+lkZW50ZTxUYWI+W3MKK21lbnV0cmFucyBTdWdnZXN0XCAmQ29ycmVjdGlvbnM8VGFiPno9CQlTdWdn6XJlclwgJmNvcnJlY3Rpb248VGFiPno9CittZW51dHJhbnMgJlJlcGVhdFwgY29ycmVjdGlvbjxUYWI+OnNwZWxscmVwYWxsCSZSZXBvcnRlclwgbGFcIGNvcnJlY3Rpb248VGFiPjpzcGVsbHJlcGFsbAorCithbiA0MC4zMzUuMjA1ICZUb29scy4mU3BlbGxpbmcuRnJhbudhaXNcIChmcikJOnNldCBzcGw9ZnIgc3BlbGw8Q1I+CittZW51dHJhbnMgU2V0XCBsYW5ndWFnZVwgdG9cICJlbiIJCUFuZ2xhaXMKK21lbnV0cmFucyBTZXRcIGxhbmd1YWdlXCB0b1wgImVuX2F1IgkJQW5nbGFpc1wgKGVuX2F1KQorbWVudXRyYW5zIFNldFwgbGFuZ3VhZ2VcIHRvXCAiZW5fY2EiCQlBbmdsYWlzXCAoZW5fY2EpCittZW51dHJhbnMgU2V0XCBsYW5ndWFnZVwgdG9cICJlbl9nYiIJCUFuZ2xhaXNcIChlbl9nYikKK21lbnV0cmFucyBTZXRcIGxhbmd1YWdlXCB0b1wgImVuX256IgkJQW5nbGFpc1wgKGVuX256KQorbWVudXRyYW5zIFNldFwgbGFuZ3VhZ2VcIHRvXCAiZW5fdXMiCQlBbmdsYWlzXCAoZW5fdXMpCisKK21lbnV0cmFucyAmRmluZFwgTW9yZVwgTGFuZ3VhZ2VzCQkmVHJvdXZlclwgZCdhdXRyZXNcIGxhbmd1ZXMgCisKKworCiBtZW51dHJhbnMgJkZvbGRpbmcJCQkJJlJlcGxpcwogCiBtZW51dHJhbnMgJkVuYWJsZS9EaXNhYmxlXCBmb2xkczxUYWI+emkJCQkmUmVwbGlzXCBvbi9vZmY8VGFiPnppCkBAIC0xODUsNyArMjA4LDcgQEAKIG1lbnV0cmFucyAmQ29udmVydFwgdG9cIEhFWDxUYWI+OiUheHhkCQlDb252ZXJ0aXJcIGVuXCBoZSZ4YTxUYWI+OiUheHhkCiBtZW51dHJhbnMgQ29udmUmcnRcIGJhY2s8VGFiPjolIXh4ZFwgLXIJCUTpY29uJnZlcnRpcjxUYWI+OiUheHhkXCAtcgogCi1tZW51dHJhbnMgJlNldFwgQ29tcGlsZXIJCQlUeXBlXCBkZVwgJmNvbXBpbGF0ZXVyCittZW51dHJhbnMgU2UmVFwgQ29tcGlsZXIJCQkmVHlwZVwgZGVcIGNvbXBpbGF0ZXVyCiAKIAogbWVudXRyYW5zICZCdWZmZXJzCQkJJlRhbXBvbnMKQEAgLTMyNyw2ICszNTAsNyBAQAogCiBtZW51dHJhbnMgJlN5bnRheAkJCSZTeW50YXhlCiAKK21lbnV0cmFucyAmT2ZmCQkJCQlE6XNhY3RpdmVyCiBtZW51dHJhbnMgJk1hbnVhbAkJCQkmTWFudWVsbGUKIG1lbnV0cmFucyBBJnV0b21hdGljCQkJCSZBdXRvbWF0aXF1ZQogbWVudXRyYW5zIG9uL29mZlwgZm9yXCAmVGhpc1wgZmlsZQkJT24vb2ZmXCBwb3VyXCAmY2VcIGZpY2hpZXIKQEAgLTQ0MCw1ICs0NjQsNSBAQAogbWVudXRyYW5zICZPZmYJCQkJCSZPZmYKICIgLVNFUDMtCiBtZW51dHJhbnMgQ28mbG9yXCB0ZXN0CQkJCVRlc3RlclwgbGVzXCBjbyZ1bGV1cnMKLW1lbnV0cmFucyAmSGlnaGxpZ2h0XCB0ZXN0CQkJVGVzdGVyXCBsZXNcIGcmcm91cGVzXCBkZVwgc3VybGlnbmFnZQorbWVudXRyYW5zICZIaWdobGlnaHRcIHRlc3QJCQlUZXN0ZXJcIGxlc1wgZyZyb3VwZXNcIGRlXCBzdXJicmlsbGFuY2UKIG1lbnV0cmFucyAmQ29udmVydFwgdG9cIEhUTUwJCQlDb24mdmVydGlyXCBlblwgSFRNTApkaWZmIC0tZ2l0IGEvcnVudGltZS9tZW51LnZpbSBiL3J1bnRpbWUvbWVudS52aW0KaW5kZXggYmY5NWQ2MS4uZDJiOGIzZCAxMDA2NDQKLS0tIGEvcnVudGltZS9tZW51LnZpbQorKysgYi9ydW50aW1lL21lbnUudmltCkBAIC0yLDcgKzIsNyBAQAogIiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgYXMgYSBzdGFydCBmb3IgeW91ciBvd24gc2V0IG9mIG1lbnVzLgogIgogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgotIiBMYXN0IENoYW5nZToJMjAwNiBBcHIgMTYKKyIgTGFzdCBDaGFuZ2U6CTIwMDYgQXByIDE3CiAKICIgTm90ZSB0aGF0ICI6YW4iIChzaG9ydCBmb3IgIjphbm9yZW1lbnUiKSBpcyBvZnRlbiB1c2VkIHRvIG1ha2UgYSBtZW51IHdvcmsKICIgaW4gYWxsIG1vZGVzIGFuZCBhdm9pZCBzaWRlIGVmZmVjdHMgZnJvbSBtYXBwaW5ncyBkZWZpbmVkIGJ5IHRoZSB1c2VyLgpAQCAtODk2LDcgKzg5NiwxMSBAQAogICAgICAgY2FsbCBjdXJzb3IoMCwgY3VyY29sKQkiIHB1dCB0aGUgY3Vyc29yIGJhY2sgd2hlcmUgaXQgd2FzCiAgICAgZW5kaWYKICAgICBpZiB3ICE9ICcnCi0gICAgICBsZXQgczpzdWdsaXN0ID0gc3BlbGxzdWdnZXN0KHcsIDEwKQorICAgICAgaWYgYSA9PSAnY2FwcycKKwlsZXQgczpzdWdsaXN0ID0gW3N1YnN0aXR1dGUodywgJy4qJywgJ1x1JicsICcnKV0KKyAgICAgIGVsc2UKKwlsZXQgczpzdWdsaXN0ID0gc3BlbGxzdWdnZXN0KHcsIDEwKQorICAgICAgZW5kaWYKICAgICAgIGlmIGxlbihzOnN1Z2xpc3QpIDw9IDAKIAljYWxsIGN1cnNvcigwLCBjdXJjb2wpCSIgcHV0IHRoZSBjdXJzb3IgYmFjayB3aGVyZSBpdCB3YXMKICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2F1dG9tYWtlLnZpbSBiL3J1bnRpbWUvc3ludGF4L2F1dG9tYWtlLnZpbQppbmRleCBlYTA5OTI3Li5kMDg3N2E1IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9hdXRvbWFrZS52aW0KKysrIGIvcnVudGltZS9zeW50YXgvYXV0b21ha2UudmltCkBAIC0xLDkgKzEsMTYgQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOglhdXRvbWFrZSBNYWtlZmlsZS5hbQotIiBNYWludGFpbmVyOglKb2huIFdpbGxpYW1zIDxqcndAcG9ib3guY29tPgotIiBMYXN0IGNoYW5nZToJMjAwMSBNYXkgMDkKLQotCisiIE1haW50YWluZXI6ICAgRGViaWFuIFZJTSBNYWludGFpbmVycyA8cGtnLXZpbS1tYWludGFpbmVyc0BsaXN0cy5hbGlvdGguZGViaWFuLm9yZz4KKyIgRm9ybWVyIE1haW50YWluZXI6CUpvaG4gV2lsbGlhbXMgPGpyd0Bwb2JveC5jb20+CisiIExhc3QgQ2hhbmdlOgkkTGFzdENoYW5nZWREYXRlOiAyMDA2LTA0LTE2IDIyOjA2OjQwIC0wNDAwIChkb20sIDE2IGFwciAyMDA2KSAkCisiIFVSTDogaHR0cDovL3N2bi5kZWJpYW4ub3JnL3dzdm4vcGtnLXZpbS90cnVuay9ydW50aW1lL3N5bnRheC9hdXRvbWFrZS52aW0/b3A9ZmlsZSZyZXY9MCZzYz0wCisiCisiIFhYWCBUaGlzIGZpbGUgaXMgaW4gbmVlZCBvZiBhIG5ldyBtYWludGFpbmVyLCBEZWJpYW4gVklNIE1haW50YWluZXJzIG1haW50YWluCisiICAgICBpdCBvbmx5IGJlY2F1c2UgcGF0Y2hlcyBoYXZlIGJlZW4gc3VibWl0dGVkIGZvciBpdCBieSBEZWJpYW4gdXNlcnMgYW5kIHRoZQorIiAgICAgZm9ybWVyIG1haW50YWluZXIgd2FzIE1JQSAoTWlzc2luZyBJbiBBY3Rpb24pLCB0YWtpbmcgb3ZlciBpdHMKKyIgICAgIG1haW50ZW5hbmNlIHdhcyB0aHVzIHRoZSBvbmx5IHdheSB0byBpbmNsdWRlIHRob3NlIHBhdGNoZXMuCisiICAgICBJZiB5b3UgY2FyZSBhYm91dCB0aGlzIGZpbGUsIGFuZCBoYXZlIHRpbWUgdG8gbWFpbnRhaW4gaXQgcGxlYXNlIGRvIHNvIQorIgogIiBUaGlzIHNjcmlwdCBhZGRzIHN1cHBvcnQgZm9yIGF1dG9tYWtlJ3MgTWFrZWZpbGUuYW0gZm9ybWF0LiBJdCBoaWdobGlnaHRzCiAiIE1ha2VmaWxlIHZhcmlhYmxlcyBzaWduaWZpY2FudCB0byBhdXRvbWFrZSBhcyB3ZWxsIGFzIGhpZ2hsaWdodGluZwogIiBhdXRvY29uZi1zdHlsZSBAdmFyaWFibGVAIHN1YnN0aXR1dGlvbnMgLiBTdWJzaXR1dGlvbnMgYXJlIG1hcmtlZCBhcyBlcnJvcnMKQEAgLTIwLDcgKzI3LDcgQEAKIAogc3luIG1hdGNoIGF1dG9tYWtlUHJpbWFyeSAiXltBLVphLXowLTlfXVwrXChfUFJPR1JBTVNcfExJQlJBUklFU1x8X0xJU1RcfF9TQ1JJUFRTXHxfREFUQVx8X0hFQURFUlNcfF9NQU5TXHxfVEVYSU5GT1NcfF9KQVZBXHxfTFRMSUJSQVJJRVNcKVxzKj0ibWU9ZS0xCiBzeW4gbWF0Y2ggYXV0b21ha2VQcmltYXJ5ICJeVEVTVFNccyo9Im1lPWUtMQotc3luIG1hdGNoIGF1dG9tYWtlU2Vjb25kYXJ5ICJeW0EtWmEtejAtOV9dXCtcKF9TT1VSQ0VTXHxfTERBRERcfF9MSUJBRERcfF9MREZMQUdTXHxfREVQRU5ERU5DSUVTXClccyo9Im1lPWUtMQorc3luIG1hdGNoIGF1dG9tYWtlU2Vjb25kYXJ5ICJeW0EtWmEtejAtOV9dXCtcKF9TT1VSQ0VTXHxfTERBRERcfF9MSUJBRERcfF9MREZMQUdTXHxfREVQRU5ERU5DSUVTXHxfQ1BQRkxBR1NcKVxzKj0ibWU9ZS0xCiBzeW4gbWF0Y2ggYXV0b21ha2VTZWNvbmRhcnkgIl5PTUlUX0RFUEVOREVOQ0lFU1xzKj0ibWU9ZS0xCiBzeW4gbWF0Y2ggYXV0b21ha2VFeHRyYSAiXkVYVFJBX1tBLVphLXowLTlfXVwrXHMqPSJtZT1lLTEKIHN5biBtYXRjaCBhdXRvbWFrZU9wdGlvbnMgIl5cKEFVVE9NQUtFX09QVElPTlNcfEVUQUdTX0FSR1NcfFRBR1NfREVQRU5ERU5DSUVTXClccyo9Im1lPWUtMQpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZGViY2hhbmdlbG9nLnZpbSBiL3J1bnRpbWUvc3ludGF4L2RlYmNoYW5nZWxvZy52aW0KaW5kZXggNTc3YjQ4ZC4uMjRhOWM5NiAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvZGViY2hhbmdlbG9nLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9kZWJjaGFuZ2Vsb2cudmltCkBAIC0xLDcgKzEsOSBAQAogIiBWaW0gc3ludGF4IGZpbGUKLSIgTGFuZ3VhZ2U6CURlYmlhbiBjaGFuZ2Vsb2cgZmlsZXMKLSIgTWFpbnRhaW5lcjoJV2ljaGVydCBBa2tlcm1hbiA8d2Fra2VybWFAZGViaWFuLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTMwIEFwcmlsIDIwMDEKKyIgTGFuZ3VhZ2U6ICAgIERlYmlhbiBjaGFuZ2Vsb2cgZmlsZXMKKyIgTWFpbnRhaW5lcjogIERlYmlhbiBWaW0gTWFpbnRhaW5lcnMgPHBrZy12aW0tbWFpbnRhaW5lcnNAbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmc+CisiIEZvcm1lciBNYWludGFpbmVyOiBXaWNoZXJ0IEFra2VybWFuIDx3YWtrZXJtYUBkZWJpYW4ub3JnPgorIiBMYXN0IENoYW5nZTogJExhc3RDaGFuZ2VkRGF0ZTogMjAwNi0wNC0xNiAyMTo1MDozMSAtMDQwMCAoZG9tLCAxNiBhcHIgMjAwNikgJAorIiBVUkw6IGh0dHA6Ly9zdm4uZGViaWFuLm9yZy93c3ZuL3BrZy12aW0vdHJ1bmsvcnVudGltZS9zeW50YXgvZGViY2hhbmdlbG9nLnZpbT9vcD1maWxlJnJldj0wJnNjPTAKIAogIiBTdGFuZGFyZCBzeW50YXggaW5pdGlhbGl6YXRpb24KIGlmIHZlcnNpb24gPCA2MDAKQEAgLTE1LDEwICsxNywxMCBAQAogCiAiIERlZmluZSBzb21lIGNvbW1vbiBleHByZXNzaW9ucyB3ZSBjYW4gdXNlIGxhdGVyIG9uCiBzeW4gbWF0Y2ggZGViY2hhbmdlbG9nTmFtZQljb250YWluZWQgIl5bWzphbHBoYTpdXVtbOmFsbnVtOl0uKy1dXCsgIgotc3luIG1hdGNoIGRlYmNoYW5nZWxvZ1VyZ2VuY3kJY29udGFpbmVkICI7IHVyZ2VuY3k9XChsb3dcfG1lZGl1bVx8aGlnaFx8Y3JpdGljYWxcKSIKLXN5biBtYXRjaCBkZWJjaGFuZ2Vsb2dUYXJnZXQJY29udGFpbmVkICJcKCBzdGFibGVcfCBmcm96ZW5cfCB1bnN0YWJsZVx8IGV4cGVyaW1lbnRhbFwpXCsiCitzeW4gbWF0Y2ggZGViY2hhbmdlbG9nVXJnZW5jeQljb250YWluZWQgIjsgdXJnZW5jeT1cKGxvd1x8bWVkaXVtXHxoaWdoXHxjcml0aWNhbFx8ZW1lcmdlbmN5XClcKCBcUy4qXClcPSIKK3N5biBtYXRjaCBkZWJjaGFuZ2Vsb2dUYXJnZXQJY29udGFpbmVkICJcKCBzdGFibGVcfCBmcm96ZW5cfCB1bnN0YWJsZVx8IHRlc3RpbmctcHJvcG9zZWQtdXBkYXRlc1x8IGV4cGVyaW1lbnRhbFx8IHNhcmdlLWJhY2twb3J0c1x8IHNhcmdlLXZvbGF0aWxlXHwgc3RhYmxlLXNlY3VyaXR5XHwgdGVzdGluZy1zZWN1cml0eVwpXCsiCiBzeW4gbWF0Y2ggZGViY2hhbmdlbG9nVmVyc2lvbgljb250YWluZWQgIiguXHstfSkiCi1zeW4gbWF0Y2ggZGViY2hhbmdlbG9nQ2xvc2VzCWNvbnRhaW5lZCAiY2xvc2VzOlxzKlwoYnVnXClcPSNcc1w9XGRcK1woLFxzKlwoYnVnXClcPSNcc1w9XGRcK1wpKiIKK3N5biBtYXRjaCBkZWJjaGFuZ2Vsb2dDbG9zZXMJY29udGFpbmVkICJjbG9zZXM6XHMqXChidWdcKVw9I1w9XHNcPVxkXCtcKCxccypcKGJ1Z1wpXD0jXD1cc1w9XGRcK1wpKiIKIHN5biBtYXRjaCBkZWJjaGFuZ2Vsb2dFbWFpbAljb250YWluZWQgIltfPVs6YWxudW06XS4rLV1cK0BbWzphbG51bTpdLi9cLV1cKyIKIHN5biBtYXRjaCBkZWJjaGFuZ2Vsb2dFbWFpbAljb250YWluZWQgIjwuXHstfT4iCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2RveHlnZW4udmltIGIvcnVudGltZS9zeW50YXgvZG94eWdlbi52aW0KaW5kZXggYmMwNGFlOS4uNGFlM2E5MyAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvZG94eWdlbi52aW0KKysrIGIvcnVudGltZS9zeW50YXgvZG94eWdlbi52aW0KQEAgLTQ4LDUyMCArNDgsNTE3IEBACiBlbmRpZgogCiBsZXQgczpjcG9fc2F2ZSA9ICZjcG8KLXNldCBjcG8mdmltCit0cnkKKyAgc2V0IGNwbyZ2aW0KIAotIiBTdGFydCBvZiBEb3h5Z2VuIHN5bnRheCBoaWxpZ2h0aW5nOgotIgorICAiIFN0YXJ0IG9mIERveHlnZW4gc3ludGF4IGhpbGlnaHRpbmc6CisgICIKIAotIiBDL0MrKyBTdHlsZSBsaW5lIGNvbW1lbnRzCi1zeW4gcmVnaW9uIGRveHlnZW5Db21tZW50IHN0YXJ0PSsvXCpcKFwqL1wpXEAhWyohXSsgIGVuZD0rXCovKyBjb250YWlucz1kb3h5Z2VuU3luY1N0YXJ0LGRveHlnZW5TdGFydCxkb3h5Z2VuVE9ETyBrZWVwZW5kCi1zeW4gcmVnaW9uIGRveHlnZW5Db21tZW50TCBzdGFydD0rLy9bLyFdPFxAISttZT1lLTEgZW5kPSskKyBjb250YWlucz1kb3h5Z2VuU3RhcnRMIGtlZXBlbmQgc2tpcHdoaXRlIHNraXBubCBuZXh0Z3JvdXA9ZG94eWdlbkNvbW1lbnQyCi1zeW4gcmVnaW9uIGRveHlnZW5Db21tZW50TCBzdGFydD0rLy9bLyFdPCttZT1lLTIgZW5kPSskKyBjb250YWlucz1kb3h5Z2VuU3RhcnRMIGtlZXBlbmQgc2tpcHdoaXRlIHNraXBubAotc3luIHJlZ2lvbiBkb3h5Z2VuQ29tbWVudEwgc3RhcnQ9Ky8vQFx6ZVt7fV0rIGVuZD0rJCsgY29udGFpbnM9ZG94eWdlbkdyb3VwRGVmaW5lLGRveHlnZW5Hcm91cERlZmluZVNwZWNpYWwKKyAgIiBDL0MrKyBTdHlsZSBsaW5lIGNvbW1lbnRzCisgIHN5biByZWdpb24gZG94eWdlbkNvbW1lbnQgc3RhcnQ9Ky9cKlwoXCovXClcQCFbKiFdKyAgZW5kPStcKi8rIGNvbnRhaW5zPWRveHlnZW5TeW5jU3RhcnQsZG94eWdlblN0YXJ0LGRveHlnZW5UT0RPIGtlZXBlbmQKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuQ29tbWVudEwgc3RhcnQ9Ky8vWy8hXTxcQCErbWU9ZS0xIGVuZD0rJCsgY29udGFpbnM9ZG94eWdlblN0YXJ0TCBrZWVwZW5kIHNraXB3aGl0ZSBza2lwbmwgbmV4dGdyb3VwPWRveHlnZW5Db21tZW50MgorICBzeW4gcmVnaW9uIGRveHlnZW5Db21tZW50TCBzdGFydD0rLy9bLyFdPCttZT1lLTIgZW5kPSskKyBjb250YWlucz1kb3h5Z2VuU3RhcnRMIGtlZXBlbmQgc2tpcHdoaXRlIHNraXBubAorICBzeW4gcmVnaW9uIGRveHlnZW5Db21tZW50TCBzdGFydD0rLy9AXHplW3t9XSsgZW5kPSskKyBjb250YWlucz1kb3h5Z2VuR3JvdXBEZWZpbmUsZG94eWdlbkdyb3VwRGVmaW5lU3BlY2lhbAogCi0iIFNpbmdsZSBsaW5lIGJyaWVmIGZvbGxvd2VkIGJ5IG11bHRpbGluZSBjb21tZW50Lgotc3luIHJlZ2lvbiBkb3h5Z2VuQ29tbWVudDIgc3RhcnQ9Ky9cKlwoXCovXClcQCFbKiFdKyBlbmQ9K1wqLysgY29udGFpbmVkIGNvbnRhaW5zPWRveHlnZW5TeW5jU3RhcnQyLGRveHlnZW5TdGFydDIsZG94eWdlblRPRE8ga2VlcGVuZAotIiBUaGlzIGhlbHBzIHdpdGggc3luYy1pbmcgYXMgZm9yIHNvbWUgcmVhc29uLCBzeW5jaW5nIGJlaGF2ZXMgZGlmZmVyZW50bHkgdG8gYSBub3JtYWwgcmVnaW9uLCBhbmQgdGhlIHN0YXJ0IHBhdHRlcm4gZG9lcyBub3QgZ2V0IG1hdGNoZWQuCi1zeW4gbWF0Y2ggZG94eWdlblN5bmNTdGFydDIgK1teKi9dKyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5Cb2R5LGRveHlnZW5QcmV2LGRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlblNraXBDb21tZW50LGRveHlnZW5TdGFydFNraXAyIHNraXB3aGl0ZSBza2lwbmwKKyAgIiBTaW5nbGUgbGluZSBicmllZiBmb2xsb3dlZCBieSBtdWx0aWxpbmUgY29tbWVudC4KKyAgc3luIHJlZ2lvbiBkb3h5Z2VuQ29tbWVudDIgc3RhcnQ9Ky9cKlwoXCovXClcQCFbKiFdKyBlbmQ9K1wqLysgY29udGFpbmVkIGNvbnRhaW5zPWRveHlnZW5TeW5jU3RhcnQyLGRveHlnZW5TdGFydDIsZG94eWdlblRPRE8ga2VlcGVuZAorICAiIFRoaXMgaGVscHMgd2l0aCBzeW5jLWluZyBhcyBmb3Igc29tZSByZWFzb24sIHN5bmNpbmcgYmVoYXZlcyBkaWZmZXJlbnRseSB0byBhIG5vcm1hbCByZWdpb24sIGFuZCB0aGUgc3RhcnQgcGF0dGVybiBkb2VzIG5vdCBnZXQgbWF0Y2hlZC4KKyAgc3luIG1hdGNoIGRveHlnZW5TeW5jU3RhcnQyICtbXiovXSsgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuQm9keSxkb3h5Z2VuUHJldixkb3h5Z2VuU3RhcnRTcGVjaWFsLGRveHlnZW5Ta2lwQ29tbWVudCxkb3h5Z2VuU3RhcnRTa2lwMiBza2lwd2hpdGUgc2tpcG5sCiAKLSIgU2tpcCBlbXB0eSBsaW5lcyBhdCB0aGUgc3RhcnQgZm9yIHdoZW4gY29tbWVudHMgc3RhcnQgb24gdGhlIDJuZC8zcmQgbGluZS4KLXN5biBtYXRjaCBkb3h5Z2VuU3RhcnRTa2lwMiArXlxzKlwqW14vXSttZT1lLTEgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuQm9keSxkb3h5Z2VuU3RhcnRTcGVjaWFsLGRveHlnZW5TdGFydFNraXAgc2tpcHdoaXRlIHNraXBubAotc3luIG1hdGNoIGRveHlnZW5TdGFydFNraXAyICteXHMqXCokKyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5Cb2R5LGRveHlnZW5TdGFydFNwZWNpYWwsLGRveHlnZW5TdGFydFNraXAgc2tpcHdoaXRlIHNraXBubAotc3luIG1hdGNoIGRveHlnZW5TdGFydDIgKy9cKlsqIV0rIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZG94eWdlbkJvZHksZG94eWdlblByZXYsZG94eWdlblN0YXJ0U3BlY2lhbCxkb3h5Z2VuU3RhcnRTa2lwMiBza2lwd2hpdGUgc2tpcG5sCisgICIgU2tpcCBlbXB0eSBsaW5lcyBhdCB0aGUgc3RhcnQgZm9yIHdoZW4gY29tbWVudHMgc3RhcnQgb24gdGhlIDJuZC8zcmQgbGluZS4KKyAgc3luIG1hdGNoIGRveHlnZW5TdGFydFNraXAyICteXHMqXCpbXi9dK21lPWUtMSBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5Cb2R5LGRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCBza2lwd2hpdGUgc2tpcG5sCisgIHN5biBtYXRjaCBkb3h5Z2VuU3RhcnRTa2lwMiArXlxzKlwqJCsgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuQm9keSxkb3h5Z2VuU3RhcnRTcGVjaWFsLCxkb3h5Z2VuU3RhcnRTa2lwIHNraXB3aGl0ZSBza2lwbmwKKyAgc3luIG1hdGNoIGRveHlnZW5TdGFydDIgKy9cKlsqIV0rIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZG94eWdlbkJvZHksZG94eWdlblByZXYsZG94eWdlblN0YXJ0U3BlY2lhbCxkb3h5Z2VuU3RhcnRTa2lwMiBza2lwd2hpdGUgc2tpcG5sCiAKLSIgTWF0Y2ggdGhlIFN0YXJ0aW5nIHBhdHRlcm4gKGVmZmVjdGl2ZWx5IGNyZWF0aW5nIHRoZSBzdGFydCBvZiBhIEJORikKLWlmICFleGlzdHMoJ2c6ZG94eWdlbl9qYXZhZG9jX2F1dG9icmllZicpIHx8IGc6ZG94eWdlbl9qYXZhZG9jX2F1dG9icmllZgotICBzeW4gbWF0Y2ggZG94eWdlblN0YXJ0ICsvXCpbKiFdKyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5CcmllZixkb3h5Z2VuUHJldixkb3h5Z2VuRmluZEJyaWVmU3BlY2lhbCxkb3h5Z2VuU3RhcnRTcGVjaWFsLGRveHlnZW5TdGFydFNraXAsZG94eWdlblBhZ2Ugc2tpcHdoaXRlIHNraXBubAotZWxzZQotICBzeW4gbWF0Y2ggZG94eWdlblN0YXJ0ICsvXCpbKiFdKyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5Cb2R5LGRveHlnZW5QcmV2LGRveHlnZW5GaW5kQnJpZWZTcGVjaWFsLGRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCxkb3h5Z2VuUGFnZSBza2lwd2hpdGUgc2tpcG5sCi1lbmRpZgotc3luIG1hdGNoIGRveHlnZW5TdGFydEwgKy8vWy8hXSsgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuUHJldkwsZG94eWdlbkJyaWVmTCxkb3h5Z2VuU3BlY2lhbCBza2lwd2hpdGUKLQotIiBUaGlzIGhlbHBzIHdpdGggc3luYy1pbmcgYXMgZm9yIHNvbWUgcmVhc29uLCBzeW5jaW5nIGJlaGF2ZXMgZGlmZmVyZW50bHkgdG8gYSBub3JtYWwgcmVnaW9uLCBhbmQgdGhlIHN0YXJ0IHBhdHRlcm4gZG9lcyBub3QgZ2V0IG1hdGNoZWQuCi1zeW4gbWF0Y2ggZG94eWdlblN5bmNTdGFydCArXHplW14qL10rIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZG94eWdlbkJyaWVmLGRveHlnZW5QcmV2LGRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCxkb3h5Z2VuUGFnZSBza2lwd2hpdGUgc2tpcG5sCi0KLSIgTWF0Y2ggdGhlIGZpcnN0IHNlbnRlbmNlIGFzIGEgYnJpZWYgY29tbWVudAotaWYgISBleGlzdHMoJ2c6ZG94eWdlbl9lbmRfcHVuY3R1YXRpb24nKQotICBsZXQgZzpkb3h5Z2VuX2VuZF9wdW5jdHVhdGlvbj0nWy5dJwotZW5kaWYKLWV4ZSAnc3luIHJlZ2lvbiBkb3h5Z2VuQnJpZWYgY29udGFpbmVkIHN0YXJ0PStbXFxAXVwoW3BjYmVhXVw+XHxlbVw+XHxyZWZcPlx8bGlua1w+XHxmXCRcfFskXFwmPD4jXVwpXHxbXiBcdFxcQCpdKyBzdGFydD0rXCheXHMqXClcQDwhXCovXEAhKyBzdGFydD0rXDxcaysgc2tpcD0rJy5kb3h5Z2VuX2VuZF9wdW5jdHVhdGlvbi4nXFMrIGVuZD0rJy5kb3h5Z2VuX2VuZF9wdW5jdHVhdGlvbi4nKyBlbmQ9K1woXHMqXChcblxzKlwqXD1ccypcKVtAXFxdXChbcGNiZWFdXD5cfGVtXD5cfHJlZlw+XHxsaW5rXD5cfGZcJFx8WyRcXCY8PiNdXClcQCFcKVxAPSsgY29udGFpbnM9ZG94eWdlblNtYWxsU3BlY2lhbCxkb3h5Z2VuQ29udGludWVDb21tZW50LGRveHlnZW5CcmllZkVuZENvbW1lbnQsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblNtYWxsU3BlY2lhbCxAZG94eWdlbkh0bWxHcm91cCxkb3h5Z2VuVE9ETyxkb3h5Z2VuT3RoZXJMaW5rLGRveHlnZW5IeXBlckxpbmssZG94eWdlbkhhc2hMaW5rICBza2lwbmwgbmV4dGdyb3VwPWRveHlnZW5Cb2R5JwotCi1zeW4gbWF0Y2ggZG94eWdlbkJyaWVmRW5kQ29tbWVudCArXCovKyBjb250YWluZWQKLQotZXhlICdzeW4gcmVnaW9uIGRveHlnZW5CcmllZkwgc3RhcnQ9K0Bca1xAIVx8W1xcQF1cKFtwY2JlYV1cPlx8ZW1cPlx8cmVmXD5cfGxpbmtcPlx8ZlwkXHxbJFxcJjw+I11cKVx8W14gXHRcXEBdKyBzdGFydD0rXDwrIHNraXA9KycuZG94eWdlbl9lbmRfcHVuY3R1YXRpb24uJ1xTKyBlbmQ9KycuZG94eWdlbl9lbmRfcHVuY3R1YXRpb24uJ1x8JCsgY29udGFpbmVkIGNvbnRhaW5zPWRveHlnZW5TbWFsbFNwZWNpYWwsZG94eWdlbkh5cGVyTGluayxkb3h5Z2VuSGFzaExpbmssQGRveHlnZW5IdG1sR3JvdXAga2VlcGVuZCcKLQotc3luIHJlZ2lvbiBkb3h5Z2VuQnJpZWZMaW5lIGNvbnRhaW5lZCBzdGFydD0rXDxcaysgZW5kPStcKFxuXHMqXCpcPVxzKlwoW0BcXF1cKFtwY2JlYV1cPlx8ZW1cPlx8cmVmXD5cfGxpbmtcPlx8ZlwkXHxbJFxcJjw+I11cKVxAIVwpXHxccyokXClcQD0rIGNvbnRhaW5zPWRveHlnZW5Db250aW51ZUNvbW1lbnQsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblNtYWxsU3BlY2lhbCxAZG94eWdlbkh0bWxHcm91cCxkb3h5Z2VuVE9ETyxkb3h5Z2VuT3RoZXJMaW5rLGRveHlnZW5IeXBlckxpbmssZG94eWdlbkhhc2hMaW5rICBza2lwd2hpdGUga2VlcGVuZAotCi0iIE1hdGNoIGEgJzwnIGZvciBhcHBseWluZyBhIGNvbW1lbnQgdG8gdGhlIHByZXZpb3VzIGVsZW1lbnQuCi1zeW4gbWF0Y2ggZG94eWdlblByZXYgKzwrIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZG94eWdlbkJyaWVmLGRveHlnZW5TcGVjaWFsLGRveHlnZW5TdGFydFNraXAgc2tpcHdoaXRlCi1zeW4gbWF0Y2ggZG94eWdlblByZXZMICs8KyBjb250YWluZWQgIG5leHRncm91cD1kb3h5Z2VuQnJpZWZMLGRveHlnZW5TcGVjaWFsIHNraXB3aGl0ZQotCi0iIFRoZXNlIGFyZSBhbnRpLWRveHlnZW4gY29tbWVudHMuICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIHR3byBhc3Rlcmlza3Mgb3IgMyAnLydzCi0iIHRoZW4gdHVybiB0aGUgY29tbWVudHMgYmFjayBpbnRvIG5vcm1hbCBDIGNvbW1lbnRzLgotc3luIHJlZ2lvbiBjQ29tbWVudCBzdGFydD0iL1wqXCpcKiIgZW5kPSJcKi8iIGNvbnRhaW5zPUBjQ29tbWVudEdyb3VwLGNDb21tZW50U3RyaW5nLGNDaGFyYWN0ZXIsY051bWJlcnNDb20sY1NwYWNlRXJyb3IKLXN5biByZWdpb24gY0NvbW1lbnRMIHN0YXJ0PSIvLy8vIiBza2lwPSJcXCQiIGVuZD0iJCIgY29udGFpbnM9QGNDb21tZW50R3JvdXAsY0NvbW1lbnQyU3RyaW5nLGNDaGFyYWN0ZXIsY051bWJlcnNDb20sY1NwYWNlRXJyb3IKLQotIiBTcGVjaWFsIGNvbW1hbmRzIGF0IHRoZSBzdGFydCBvZiB0aGUgYXJlYTogIHN0YXJ0aW5nIHdpdGggJ0AnIG9yICdcJwotc3luIHJlZ2lvbiBkb3h5Z2VuU3RhcnRTcGVjaWFsIGNvbnRhaW5lZCBzdGFydD0rW0BcXF1cKFtwY2JlYV1cPlx8ZW1cPlx8cmVmXD5cfGxpbmtcPlx8ZlwkXHxbJFxcJjw+I11cKVxAISsgZW5kPSskKyBlbmQ9K1wqLyttZT1zLTEsaGU9cy0xICBjb250YWlucz1kb3h5Z2VuU3BlY2lhbCBuZXh0Z3JvdXA9ZG94eWdlblNraXBDb21tZW50IHNraXBubCBrZWVwZW5kCi1zeW4gbWF0Y2ggZG94eWdlblNraXBDb21tZW50IGNvbnRhaW5lZCArXlxzKlwqL1xAISsgbmV4dGdyb3VwPWRveHlnZW5CcmllZixkb3h5Z2VuU3RhcnRTcGVjaWFsLGRveHlnZW5GaW5kQnJpZWZTcGVjaWFsLGRveHlnZW5QYWdlIHNraXB3aGl0ZQotCi0ic3luIHJlZ2lvbiBkb3h5Z2VuQm9keUJpdCBjb250YWluZWQgc3RhcnQ9KyQrCi0KLSIgVGhlIG1haW4gYm9keSBvZiBhIGRveHlnZW4gY29tbWVudC4KLXN5biByZWdpb24gZG94eWdlbkJvZHkgY29udGFpbmVkIHN0YXJ0PSsuXHwkKyBtYXRjaGdyb3VwPWRveHlnZW5FbmRDb21tZW50IGVuZD0rXCovK3JlPWUtMixtZT1lLTIgY29udGFpbnM9ZG94eWdlbkNvbnRpbnVlQ29tbWVudCxkb3h5Z2VuVE9ETyxkb3h5Z2VuU3BlY2lhbCxkb3h5Z2VuU21hbGxTcGVjaWFsLGRveHlnZW5IeXBlckxpbmssZG94eWdlbkhhc2hMaW5rLEBkb3h5Z2VuSHRtbEdyb3VwCi0KLSIgVGhlc2UgYWxsb3cgdGhlIHNraXBwaW5nIG9mIGNvbW1lbnQgY29udGludWF0aW9uICcqJyBjaGFyYWN0ZXJzLgotc3luIG1hdGNoIGRveHlnZW5Db250aW51ZUNvbW1lbnQgY29udGFpbmVkICteXHMqXCovXEAhXHMqKwotCi0iIENhdGNoIGEgQnJpZWYgY29tbWVudCB3aXRob3V0IHB1bmN0dWF0aW9uIC0gZmxhZyBpdCBhcyBhbiBlcnJvciBidXQKLSIgbWFrZSBzdXJlIHRoZSBlbmQgY29tbWVudCBpcyBwaWNrZWQgdXAgYWxzby4KLXN5biBtYXRjaCBkb3h5Z2VuRXJyb3JDb21tZW50IGNvbnRhaW5lZCArXCovKwotCi0KLSIgU2tpcCBlbXB0eSBsaW5lcyBhdCB0aGUgc3RhcnQgZm9yIHdoZW4gY29tbWVudHMgc3RhcnQgb24gdGhlIDJuZC8zcmQgbGluZS4KLWlmICFleGlzdHMoJ2c6ZG94eWdlbl9qYXZhZG9jX2F1dG9icmllZicpIHx8IGc6ZG94eWdlbl9qYXZhZG9jX2F1dG9icmllZgotICBzeW4gbWF0Y2ggZG94eWdlblN0YXJ0U2tpcCArXlxzKlwqW14vXSttZT1lLTEgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuQnJpZWYsZG94eWdlblN0YXJ0U3BlY2lhbCxkb3h5Z2VuRmluZEJyaWVmU3BlY2lhbCxkb3h5Z2VuU3RhcnRTa2lwLGRveHlnZW5QYWdlIHNraXB3aGl0ZSBza2lwbmwKLSAgc3luIG1hdGNoIGRveHlnZW5TdGFydFNraXAgK15ccypcKiQrIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZG94eWdlbkJyaWVmLGRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCxkb3h5Z2VuUGFnZSBza2lwd2hpdGUgc2tpcG5sCi1lbHNlCi0gIHN5biBtYXRjaCBkb3h5Z2VuU3RhcnRTa2lwICteXHMqXCpbXi9dK21lPWUtMSBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCxkb3h5Z2VuUGFnZSxkb3h5Z2VuQm9keSBza2lwd2hpdGUgc2tpcG5sCi0gIHN5biBtYXRjaCBkb3h5Z2VuU3RhcnRTa2lwICteXHMqXCokKyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCxkb3h5Z2VuUGFnZSxkb3h5Z2VuQm9keSBza2lwd2hpdGUgc2tpcG5sCi1lbmRpZgotCi0iIE1hdGNoIGFuIFtAXF1icmllZiBzbyB0aGF0IGl0IG1vdmVzIHRvIGJvZHktbW9kZS4KLSIKLSIKLSIgc3luIG1hdGNoIGRveHlnZW5CcmllZkxpbmUgIGNvbnRhaW5lZAotc3luIG1hdGNoIGRveHlnZW5CcmllZlNwZWNpYWwgY29udGFpbmVkICtbQFxcXSsgbmV4dGdyb3VwPWRveHlnZW5CcmllZldvcmQgc2tpcHdoaXRlCi1zeW4gcmVnaW9uIGRveHlnZW5GaW5kQnJpZWZTcGVjaWFsIHN0YXJ0PStbQFxcXWJyaWVmXD4rIGVuZD0rXChcblxzKlwqXD1ccypcKFtAXFxdXChbcGNiZWFdXD5cfGVtXD5cfHJlZlw+XHxsaW5rXD5cfGZcJFx8WyRcXCY8PiNdXClcQCFcKVx8XHMqJFwpXEA9KyBrZWVwZW5kIGNvbnRhaW5zPWRveHlnZW5CcmllZlNwZWNpYWwgbmV4dGdyb3VwPWRveHlnZW5Cb2R5IGtlZXBlbmQgc2tpcHdoaXRlIHNraXBubCBjb250YWluZWQKLQotCi0iIENyZWF0ZSB0aGUgc2luZ2xlIHdvcmQgbWF0Y2hpbmcgc3BlY2lhbCBpZGVudGlmaWVycy4KLQotZnVuISBzOkR4eUNyZWF0ZVNtYWxsU3BlY2lhbCgga3dvcmQsIG5hbWUgKQotCi0gIGxldCBteD0nWy06MC05QS1aYS16XyU9JisqLyF+PnxdXEA8IVwoWy0wLTlBLVphLXpfJT0rKi8hfj58I11cK1stMC05QS1aYS16XyU9KyovIX4+fF1cQCFcfFxcW1xcPD4mLl1AXHxbLixdWzAtOWEtekEtWl9dXEA9XHw6Olx8KFteKV0qKVx8JlswLTlhLXpBLVpdXHsyLDd9O1wpXCsnCi0gIGV4ZSAnc3luIHJlZ2lvbiBkb3h5Z2VuU3BlY2lhbCcuYTpuYW1lLidXb3JkIGNvbnRhaW5lZCBzdGFydD0rJy5hOmt3b3JkLicrIGVuZD0rXChcX3NcKycubXguJ1wpXEA8PVstYS16QS1aXzAtOSsqL14lfH4hPSZcXF1cQCErIHNraXB3aGl0ZSBjb250YWlucz1kb3h5Z2VuQ29udGludWVDb21tZW50LGRveHlnZW4nLmE6bmFtZS4nV29yZCcKLSAgZXhlICdzeW4gbWF0Y2ggZG94eWdlbicuYTpuYW1lLidXb3JkIGNvbnRhaW5lZCAiXF9zXEA8PScubXguJyIgY29udGFpbnM9ZG94eWdlbkh0bWxTcGVjaWFsIGtlZXBlbmQnCi1lbmRmdW4KLWNhbGwgczpEeHlDcmVhdGVTbWFsbFNwZWNpYWwoJ3AnLCAnQ29kZScpCi1jYWxsIHM6RHh5Q3JlYXRlU21hbGxTcGVjaWFsKCdjJywgJ0NvZGUnKQotY2FsbCBzOkR4eUNyZWF0ZVNtYWxsU3BlY2lhbCgnYicsICdCb2xkJykKLWNhbGwgczpEeHlDcmVhdGVTbWFsbFNwZWNpYWwoJ2UnLCAnRW1waGFzaXNlZCcpCi1jYWxsIHM6RHh5Q3JlYXRlU21hbGxTcGVjaWFsKCdlbScsICdFbXBoYXNpc2VkJykKLWNhbGwgczpEeHlDcmVhdGVTbWFsbFNwZWNpYWwoJ2EnLCAnQXJndW1lbnQnKQotY2FsbCBzOkR4eUNyZWF0ZVNtYWxsU3BlY2lhbCgncmVmJywgJ1JlZicpCi1kZWxmdW4gczpEeHlDcmVhdGVTbWFsbFNwZWNpYWwKLQotc3luIG1hdGNoIGRveHlnZW5TbWFsbFNwZWNpYWwgY29udGFpbmVkICtbQFxcXVwoXDxbcGNiZWFdXD5cfFw8ZW1cPlx8XDxyZWZcPlx8XDxsaW5rXD5cfGZcJFx8WyRcXCY8PiNdXClcQD0rIG5leHRncm91cD1kb3h5Z2VuT3RoZXJMaW5rLGRveHlnZW5IeXBlckxpbmssZG94eWdlbkhhc2hMaW5rLGRveHlnZW5Gb3JtdWxhLGRveHlnZW5TeW1ib2wsZG94eWdlblNwZWNpYWwuKldvcmQKLQotIiBOb3cgZm9yIHNwZWNpYWwgY2hhcmFjdGVycwotc3luIG1hdGNoIGRveHlnZW5TcGVjaWFsIGNvbnRhaW5lZCArW0BcXF1cKFw8W3BjYmVhXVw+XHxcPGVtXD5cfFw8cmVmXHxcPGxpbmtcPlw+XHxcPGZcJFx8WyRcXCY8PiNdXClcQCErIG5leHRncm91cD1kb3h5Z2VuUGFyYW0sZG94eWdlblJldHZhbCxkb3h5Z2VuQnJpZWZXb3JkLGRveHlnZW5Cb2xkLGRveHlnZW5CT3RoZXIsZG94eWdlbk90aGVyLGRveHlnZW5PdGhlclRPRE8sZG94eWdlbk90aGVyV0FSTixkb3h5Z2VuT3RoZXJCVUcsZG94eWdlblBhZ2UsZG94eWdlbkdyb3VwRGVmaW5lLGRveHlnZW5Db2RlUmVnaW9uLGRveHlnZW5WZXJiYXRpbVJlZ2lvbixkb3h5Z2VuRG90UmVnaW9uCi0iIGRveHlnZW5PdGhlckxpbmssZG94eWdlblN5bWJvbCxkb3h5Z2VuRm9ybXVsYSxkb3h5Z2VuRXJyb3JTcGVjaWFsLGRveHlnZW5TcGVjaWFsLipXb3JkCi0iCi1zeW4gbWF0Y2ggZG94eWdlbkdyb3VwRGVmaW5lIGNvbnRhaW5lZCArQFxAPD1be31dKwotc3luIG1hdGNoIGRveHlnZW5Hcm91cERlZmluZVNwZWNpYWwgY29udGFpbmVkICtAXHplW3t9XSsKLQotc3luIG1hdGNoIGRveHlnZW5FcnJvclNwZWNpYWwgY29udGFpbmVkICtccysKLQotIiBNYXRjaCBQYXJtYXRlcnMgYW5kIHJldHZhbHMgKGhpbGlnaHRpbmcgdGhlIGZpcnN0IHdvcmQgYXMgc3BlY2lhbCkuCi1zeW4gbWF0Y2ggZG94eWdlblBhcmFtRGlyZWN0aW9uIGNvbnRhaW5lZCArXFtcKFw8aW5cPlx8XDxvdXRcPlx8LFwpXCtcXSsgbmV4dGdyb3VwPWRveHlnZW5QYXJhbU5hbWUgc2tpcHdoaXRlCi1zeW4ga2V5d29yZCBkb3h5Z2VuUGFyYW0gY29udGFpbmVkIHBhcmFtIG5leHRncm91cD1kb3h5Z2VuUGFyYW1OYW1lLGRveHlnZW5QYXJhbURpcmVjdGlvbiBza2lwd2hpdGUKLXN5biBtYXRjaCBkb3h5Z2VuUGFyYW1OYW1lIGNvbnRhaW5lZCArW0EtWmEtejAtOV86XVwrKyBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxNdWx0aWxpbmVEZXNjIHNraXB3aGl0ZQotc3luIGtleXdvcmQgZG94eWdlblJldHZhbCBjb250YWluZWQgcmV0dmFsIHRocm93IGV4Y2VwdGlvbiBuZXh0Z3JvdXA9ZG94eWdlblBhcmFtTmFtZSBza2lwd2hpdGUKLQotIiBNYXRjaCBvbmUgbGluZSBpZGVudGlmaWVycy4KLXN5biBrZXl3b3JkIGRveHlnZW5PdGhlciBjb250YWluZWQgYWRkaW5kZXggYW5jaG9yCi1cIGRvbnRpbmNsdWRlIGVuZGh0bWxvbmx5IGVuZGxhdGV4b25seSBzaG93aW5pdGlhbGl6ZXIgaGlkZWluaXRpYWxpemVyCi1cIGV4YW1wbGUgaHRtbG9ubHkgaW1hZ2UgaW5jbHVkZSBpbmdyb3VwIGludGVybmFsIGxhdGV4b25seSBsaW5lCi1cIG92ZXJsb2FkIHJlbGF0ZXMgcmVsYXRlc2Fsc28gc2Egc2tpcCBza2lwbGluZQotXCB1bnRpbCB2ZXJiaW5jbHVkZSB2ZXJzaW9uIGFkZHRvZ3JvdXAgaHRtbGluY2x1ZGUgY29weWRvYyBkb3RmaWxlCi1cIHhtbG9ubHkgZW5keG1sb25seQotXCBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxPbmVsaW5lRGVzYwotCi1zeW4gcmVnaW9uIGRveHlnZW5Db2RlUmVnaW9uIGNvbnRhaW5lZCBtYXRjaGdyb3VwPWRveHlnZW5PdGhlciBzdGFydD0rXDxjb2RlXD4rIG1hdGNoZ3JvdXA9ZG94eWdlbk90aGVyIGVuZD0rW1xcQF1cQDw9XDxlbmRjb2RlXD4rIGNvbnRhaW5zPWRveHlnZW5Db2RlUmVnaW9uU3BlY2lhbCxkb3h5Z2VuQ29udGludWVDb21tZW50LGRveHlnZW5FcnJvckNvbW1lbnQKLXN5biBtYXRjaCBkb3h5Z2VuQ29kZVJlZ2lvblNwZWNpYWwgY29udGFpbmVkICtbXFxAXVwoZW5kY29kZVw+XClcQD0rCi0KLXN5biByZWdpb24gZG94eWdlblZlcmJhdGltUmVnaW9uIGNvbnRhaW5lZCBtYXRjaGdyb3VwPWRveHlnZW5PdGhlciBzdGFydD0rXDx2ZXJiYXRpbVw+KyBtYXRjaGdyb3VwPWRveHlnZW5PdGhlciBlbmQ9K1tcXEBdXEA8PVw8ZW5kdmVyYmF0aW1cPisgY29udGFpbnM9ZG94eWdlblZlcmJhdGltUmVnaW9uU3BlY2lhbCxkb3h5Z2VuQ29udGludWVDb21tZW50LGRveHlnZW5FcnJvckNvbW1lbnQKLXN5biBtYXRjaCBkb3h5Z2VuVmVyYmF0aW1SZWdpb25TcGVjaWFsIGNvbnRhaW5lZCArW1xcQF1cKGVuZHZlcmJhdGltXD5cKVxAPSsKLQotbGV0IGI6ZG94eWdlbl9zeW50YXhfc2F2ZT1iOmN1cnJlbnRfc3ludGF4Ci11bmxldCBiOmN1cnJlbnRfc3ludGF4Ci1zeW4gaW5jbHVkZSBARG90eCBzeW50YXgvZG90LnZpbQotbGV0IGI6Y3VycmVudF9zeW50YXg9Yjpkb3h5Z2VuX3N5bnRheF9zYXZlCi11bmxldCBiOmRveHlnZW5fc3ludGF4X3NhdmUKLXN5biByZWdpb24gZG94eWdlbkRvdFJlZ2lvbiBjb250YWluZWQgbWF0Y2hncm91cD1kb3h5Z2VuT3RoZXIgc3RhcnQ9K1w8ZG90XD4rIG1hdGNoZ3JvdXA9ZG94eWdlbk90aGVyIGVuZD0rW1xcQF1cQDw9XDxlbmRkb3RcPisgY29udGFpbnM9ZG94eWdlbkRvdFJlZ2lvblNwZWNpYWwsZG94eWdlbkVycm9yQ29tbWVudCxkb3h5Z2VuQ29udGludWVDb21tZW50LEBEb3R4Ci1zeW4gbWF0Y2ggZG94eWdlbkRvdFJlZ2lvblNwZWNpYWwgY29udGFpbmVkICtbXFxAXVwoZW5kZG90XD5cKVxAPSsKLQotIiBNYXRjaCBzaW5nbGUgbGluZSBpZGVudGlmaWVycy4KLXN5biBrZXl3b3JkIGRveHlnZW5CT3RoZXIgY29udGFpbmVkIGNsYXNzIGVudW0gZmlsZSBmbiBtYWlucGFnZSBpbnRlcmZhY2UKLVwgbmFtZXNwYWNlIHN0cnVjdCB0eXBlZGVmIHVuaW9uIHZhciBkZWYgbmFtZQotXCBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxUeXBlT25lbGluZURlc2MKLQotc3luIGtleXdvcmQgZG94eWdlbk90aGVyIGNvbnRhaW5lZCBwYXIgbmV4dGdyb3VwPWRveHlnZW5IZWFkZXJMaW5lCi1zeW4gcmVnaW9uIGRveHlnZW5IZWFkZXJMaW5lIHN0YXJ0PSsuKyBlbmQ9K14rIGNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPWRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYwotCi1zeW4ga2V5d29yZCBkb3h5Z2VuT3RoZXIgY29udGFpbmVkIGFyZyBhdXRob3IgZGF0ZSBkZXByZWNhdGVkIGxpIHJldHVybiBzZWUgaW52YXJpYW50IG5vdGUgcG9zdCBwcmUgcmVtYXJrcyBzaW5jZSB0ZXN0IG5leHRncm91cD1kb3h5Z2VuU3BlY2lhbE11bHRpbGluZURlc2MKLXN5biBrZXl3b3JkIGRveHlnZW5PdGhlclRPRE8gY29udGFpbmVkIHRvZG8gYXR0ZW50aW9uIG5leHRncm91cD1kb3h5Z2VuU3BlY2lhbE11bHRpbGluZURlc2MKLXN5biBrZXl3b3JkIGRveHlnZW5PdGhlcldBUk4gY29udGFpbmVkIHdhcm5pbmcgbmV4dGdyb3VwPWRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYwotc3luIGtleXdvcmQgZG94eWdlbk90aGVyQlVHIGNvbnRhaW5lZCBidWcgbmV4dGdyb3VwPWRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYwotCi0iIEhhbmRsZSBcbGluaywgXGVuZGxpbmssIGhpbGlnaHRpbmcgdGhlIGxpbmstdG8gYW5kIHRoZSBsaW5rIHRleHQgYml0cyBzZXBhcmF0ZWx5Lgotc3luIHJlZ2lvbiBkb3h5Z2VuT3RoZXJMaW5rIG1hdGNoZ3JvdXA9ZG94eWdlbk90aGVyIHN0YXJ0PStsaW5rKyBlbmQ9K1tcQF1cQDw9ZW5kbGlua1w+KyBjb250YWluZWQgY29udGFpbnM9ZG94eWdlbkxpbmtXb3JkLGRveHlnZW5Db250aW51ZUNvbW1lbnQsZG94eWdlbkxpbmtFcnJvcixkb3h5Z2VuRW5kbGlua1NwZWNpYWwKLXN5biBtYXRjaCBkb3h5Z2VuRW5kbGlua1NwZWNpYWwgY29udGFpbmVkICtbXFxAXVx6ZWVuZGxpbmtcPisKLQotc3luIG1hdGNoIGRveHlnZW5MaW5rV29yZCAiW19hLXpBLVo6IygpXVtfYS16MC05QS1aOiMoKV0qXD4iIGNvbnRhaW5lZCBza2lwbmwgbmV4dGdyb3VwPWRveHlnZW5MaW5rUmVzdCxkb3h5Z2VuQ29udGludWVMaW5rQ29tbWVudAotc3luIG1hdGNoIGRveHlnZW5MaW5rUmVzdCArW14qQFxcXVx8XCovXEAhXHxbQFxcXVwoZW5kbGlua1w+XClcQCErIGNvbnRhaW5lZCBza2lwbmwgbmV4dGdyb3VwPWRveHlnZW5MaW5rUmVzdCxkb3h5Z2VuQ29udGludWVMaW5rQ29tbWVudAotc3luIG1hdGNoIGRveHlnZW5Db250aW51ZUxpbmtDb21tZW50IGNvbnRhaW5lZCArXlxzKlwqXD1bXi9dK21lPWUtMSBuZXh0Z3JvdXA9ZG94eWdlbkxpbmtSZXN0Ci1zeW4gbWF0Y2ggZG94eWdlbkxpbmtFcnJvciAiXCovIiBjb250YWluZWQKLSIgI0xpbmsgaGlsaWdodGluZy4KLXN5biBtYXRjaCBkb3h5Z2VuSGFzaExpbmsgL1woW2EtekEtWl9dWzAtOWEtekEtWl9dKlwpXD8jXChcLlswLTlhLXpBLVpfXVxAPVx8W2EtekEtWjAtOV9dXCtcfDo6XHwoKVwpXCsvIGNvbnRhaW5lZCBjb250YWlucz1kb3h5Z2VuSGFzaFNwZWNpYWwKLXN5biBtYXRjaCBkb3h5Z2VuSGFzaFNwZWNpYWwgLyMvIGNvbnRhaW5lZAotc3luIG1hdGNoIGRveHlnZW5IeXBlckxpbmsgL1woXHNcfF5ccypcKlw/XClcQDw9XChodHRwXHxodHRwc1x8ZnRwXCk6XC9cL1stMC05YS16QS1aXz8mPSsjJS8uISc6O0BdXCsvIGNvbnRhaW5lZAotCi0iIEhhbmRsZSBccGFnZS4gIFRoaXMgZG9lcyBub3QgdXNlIGRveHlnZW5CcmllZi4KLXN5biBtYXRjaCBkb3h5Z2VuUGFnZSAiW1xcQF1wYWdlXD4ibWU9cysxIGNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPWRveHlnZW5QYWdlUGFnZQotc3luIGtleXdvcmQgZG94eWdlblBhZ2VQYWdlIHBhZ2UgY29udGFpbmVkIHNraXB3aGl0ZSBuZXh0Z3JvdXA9ZG94eWdlblBhZ2VJZGVudAotc3luIHJlZ2lvbiBkb3h5Z2VuUGFnZURlc2MgIHN0YXJ0PSsuXCsrIGVuZD0rJCsgY29udGFpbmVkIHNraXB3aGl0ZSBjb250YWlucz1kb3h5Z2VuU21hbGxTcGVjaWFsLEBkb3h5Z2VuSHRtbEdyb3VwIGtlZXBlbmQgc2tpcHdoaXRlIHNraXBubCBuZXh0Z3JvdXA9ZG94eWdlbkJvZHkKLXN5biBtYXRjaCBkb3h5Z2VuUGFnZUlkZW50ICJcPFthLXpBLVowLTldXCtcPiIgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuUGFnZURlc2MKLQotIiBIYW5kbGUgc2VjdGlvbgotc3luIGtleXdvcmQgZG94eWdlbk90aGVyIGRlZmdyb3VwIHNlY3Rpb24gc3Vic2VjdGlvbiBzdWJzdWJzZWN0aW9uIHdlYWtncm91cCBjb250YWluZWQgc2tpcHdoaXRlIG5leHRncm91cD1kb3h5Z2VuU3BlY2lhbElkZW50Ci1zeW4gcmVnaW9uIGRveHlnZW5TcGVjaWFsU2VjdGlvbkRlc2MgIHN0YXJ0PSsuXCsrIGVuZD0rJCsgY29udGFpbmVkIHNraXB3aGl0ZSBjb250YWlucz1kb3h5Z2VuU21hbGxTcGVjaWFsLEBkb3h5Z2VuSHRtbEdyb3VwIGtlZXBlbmQgc2tpcHdoaXRlIHNraXBubCBuZXh0Z3JvdXA9ZG94eWdlbkNvbnRpbnVlQ29tbWVudAotc3luIG1hdGNoIGRveHlnZW5TcGVjaWFsSWRlbnQgIlw8W2EtekEtWjAtOV1cK1w+IiBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5TcGVjaWFsU2VjdGlvbkRlc2MKLQotIiBEb2VzIHRoZSBvbmUtbGluZSBkZXNjcmlwdGlvbiBmb3IgdGhlIG9uZS1saW5lIHR5cGUgaWRlbnRpZmllcnMuCi1zeW4gcmVnaW9uIGRveHlnZW5TcGVjaWFsVHlwZU9uZWxpbmVEZXNjICBzdGFydD0rLlwrKyBlbmQ9KyQrIGNvbnRhaW5lZCBza2lwd2hpdGUgY29udGFpbnM9ZG94eWdlblNtYWxsU3BlY2lhbCxAZG94eWdlbkh0bWxHcm91cCBrZWVwZW5kCi1zeW4gcmVnaW9uIGRveHlnZW5TcGVjaWFsT25lbGluZURlc2MgIHN0YXJ0PSsuXCsrIGVuZD0rJCsgY29udGFpbmVkIHNraXB3aGl0ZSBjb250YWlucz1kb3h5Z2VuU21hbGxTcGVjaWFsLEBkb3h5Z2VuSHRtbEdyb3VwIGtlZXBlbmQKLQotIiBIYW5kbGUgdGhlIG11bHRpbGluZSBkZXNjcmlwdGlvbiBmb3IgdGhlIG11bHRpbGluZSB0eXBlIGlkZW50aWZpZXJzLgotIiBDb250aW51ZSB1bnRpbCBhbiAnZW1wdHknIGxpbmUgKGNhbiBjb250YWluIGEgJyonIGNvbnRpbnVhdGlvbikgb3IgdW50aWwgdGhlCi0iIG5leHQgd2hvbGUtbGluZSBAIGNvbW1hbmQgXCBjb21tYW5kLgotc3luIHJlZ2lvbiBkb3h5Z2VuU3BlY2lhbE11bHRpbGluZURlc2MgIHN0YXJ0PSsuXCsrIHNraXA9K15ccypcKFwqL1xAIVxzKlwpXD1cKFw8XHxbQFxcXVw8XChbcGNiZWFdXD5cfGVtXD5cfHJlZlx8bGlua1w+XD5cfGZcJFx8WyRcXCY8PiNdXClcfFteIFx0XFxAKl1cKSsgZW5kPSteKyBjb250YWluZWQgY29udGFpbnM9ZG94eWdlblNwZWNpYWxDb250aW51ZUNvbW1lbnQsZG94eWdlblNtYWxsU3BlY2lhbCxkb3h5Z2VuSHlwZXJMaW5rLGRveHlnZW5IYXNoTGluayxAZG94eWdlbkh0bWxHcm91cCAgc2tpcHdoaXRlIGtlZXBlbmQKLXN5biBtYXRjaCBkb3h5Z2VuU3BlY2lhbENvbnRpbnVlQ29tbWVudCBjb250YWluZWQgK15ccypcKi9cQCFccyorIG5leHRncm91cD1kb3h5Z2VuU3BlY2lhbCBza2lwd2hpdGUKLQotIiBIYW5kbGUgc3BlY2lhbCBjYXNlcyAgJ2JvbGQnIGFuZCAnZ3JvdXAnCi1zeW4ga2V5d29yZCBkb3h5Z2VuQm9sZCBjb250YWluZWQgYm9sZCBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxIZWFkaW5nCi1zeW4ga2V5d29yZCBkb3h5Z2VuQnJpZWZXb3JkIGNvbnRhaW5lZCBicmllZiBuZXh0Z3JvdXA9ZG94eWdlbkJyaWVmTGluZSBza2lwd2hpdGUKLXN5biBtYXRjaCBkb3h5Z2VuU3BlY2lhbEhlYWRpbmcgKy5cKysgY29udGFpbmVkIHNraXB3aGl0ZQotc3luIGtleXdvcmQgZG94eWdlbkdyb3VwIGNvbnRhaW5lZCBncm91cCBuZXh0Z3JvdXA9ZG94eWdlbkdyb3VwTmFtZSBza2lwd2hpdGUKLXN5biBrZXl3b3JkIGRveHlnZW5Hcm91cE5hbWUgY29udGFpbmVkICtca1wrKyBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxPbmVsaW5lRGVzYyBza2lwd2hpdGUKLQotIiBIYW5kbGUgc3BlY2lhbCBzeW1ib2wgaWRlbnRpZmllcnMgIEAkLCBAXCwgQCQgZXRjCi1zeW4gbWF0Y2ggZG94eWdlblN5bWJvbCBjb250YWluZWQgK1skXFwmPD4jXSsKLQotIiBTaW1wbGlzdGljIGhhbmRsaW5nIG9mIGZvcm11bGEgcmVnaW9ucwotc3luIHJlZ2lvbiBkb3h5Z2VuRm9ybXVsYSBjb250YWluZWQgbWF0Y2hncm91cD1kb3h5Z2VuRm9ybXVsYUVuZHMgc3RhcnQ9K2ZcJCsgZW5kPStbQFxcXWZcJCsgY29udGFpbnM9ZG94eWdlbkZvcm11bGFTcGVjaWFsLGRveHlnZW5Gb3JtdWxhT3BlcmF0b3IKLXN5biBtYXRjaCBkb3h5Z2VuRm9ybXVsYVNwZWNpYWwgY29udGFpbmVkICtbQFxcXVwoZlteJF1cfFteZl1cKSttZT1zKzEgbmV4dGdyb3VwPWRveHlnZW5Gb3JtdWxhS2V5d29yZCxkb3h5Z2VuRm9ybXVsYUVzY2FwZWQKLXN5biBtYXRjaCBkb3h5Z2VuRm9ybXVsYUVzY2FwZWQgY29udGFpbmVkICIuIgotc3luIG1hdGNoIGRveHlnZW5Gb3JtdWxhS2V5d29yZCBjb250YWluZWQgICJbYS16XVwrIgotc3luIG1hdGNoIGRveHlnZW5Gb3JtdWxhT3BlcmF0b3IgY29udGFpbmVkICtbX15dKwotCi1zeW4gcmVnaW9uIGRveHlnZW5Gb3JtdWxhIGNvbnRhaW5lZCBtYXRjaGdyb3VwPWRveHlnZW5Gb3JtdWxhRW5kcyBzdGFydD0rZlxbKyBlbmQ9K1tAXFxdZl0rIGNvbnRhaW5zPWRveHlnZW5Gb3JtdWxhU3BlY2lhbCxkb3h5Z2VuRm9ybXVsYU9wZXJhdG9yLGRveHlnZW5BdG9tCi1zeW4gcmVnaW9uIGRveHlnZW5BdG9tIGNvbnRhaW5lZCB0cmFuc3BhcmVudCBtYXRjaGdyb3VwPWRveHlnZW5Gb3JtdWxhT3BlcmF0b3Igc3RhcnQ9K3srIGVuZD0rfSsgY29udGFpbnM9ZG94eWdlbkF0b20sZG94eWdlbkZvcm11bGFTcGVjaWFsLGRveHlnZW5Gb3JtdWxhT3BlcmF0b3IKLQotIiBBZGQgVE9ETyBoaWxpZ2h0aW5nLgotc3luIGtleXdvcmQgZG94eWdlblRPRE8gY29udGFpbmVkIFRPRE8gUkVBRE1FIFhYWCBGSVhNRQotCi0iIFN1cHBvcnRlZCBIVE1MIHN1YnNldC4gIE5vdCBwZXJmZWN0LCBidXQgb2theS4KLXN5biBjYXNlIGlnbm9yZQotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFRhZyBjb250YWluZWQgbWF0Y2hncm91cD1kb3h5Z2VuSHRtbENoIHN0YXJ0PStcdlw8Lz1cemUoW2JpdWFwXXxlbXxzdHJvbmd8aW1nfGJyfGNlbnRlcnxjb2RlfGRmbnxkW2xkdF18aHJ8aFswLTNdfGxpfFtvdV1sfHByZXxzbWFsbHxzdWJ8c3VwfHRhYmxlfHR0fHZhcnxjYXB0aW9ufHNyY3xhbHR8bG9uZ2Rlc2N8bmFtZXxoZWlnaHR8d2lkdGh8dXNlbWFwfGlzbWFwfGhyZWZ8dHlwZSk+KyBza2lwPStcXDxcfFw8XGtcKz1cKCJbXiJdKiJcfCdbXiddKlwpKyBlbmQ9Kz4rIGNvbnRhaW5zPWRveHlnZW5IdG1sQ21kLGRveHlnZW5Db250aW51ZUNvbW1lbnQsZG94eWdlbkh0bWxWYXIKLXN5biBrZXl3b3JkIGRveHlnZW5IdG1sQ21kIGNvbnRhaW5lZCBiIGkgZW0gc3Ryb25nIHUgaW1nIGEgYnIgcCBjZW50ZXIgY29kZSBkZm4gZGwgZGQgZHQgaHIgaDEgaDIgaDMgbGkgb2wgdWwgcHJlIHNtYWxsIHN1YiBzdXAgdGFibGUgdHQgdmFyIGNhcHRpb24gbmV4dGdyb3VwPWRveHlnZW5IdG1sVmFyIHNraXB3aGl0ZQotc3luIGtleXdvcmQgZG94eWdlbkh0bWxWYXIgY29udGFpbmVkIHNyYyBhbHQgbG9uZ2Rlc2MgbmFtZSBoZWlnaHQgd2lkdGggdXNlbWFwIGlzbWFwIGhyZWYgdHlwZSBuZXh0Z3JvdXA9ZG94eWdlbkh0bWxFcXUgc2tpcHdoaXRlCi1zeW4gbWF0Y2ggZG94eWdlbkh0bWxFcXUgY29udGFpbmVkICs9KyBuZXh0Z3JvdXA9ZG94eWdlbkh0bWxFeHByIHNraXB3aGl0ZQotc3luIG1hdGNoIGRveHlnZW5IdG1sRXhwciBjb250YWluZWQgKyJcKFxcLlx8W14iXVwpKiJcfCdcKFxcLlx8W14nXVwpKicrIG5leHRncm91cD1kb3h5Z2VuSHRtbFZhciBza2lwd2hpdGUKLXN5biBjYXNlIG1hdGNoCi1zeW4gbWF0Y2ggZG94eWdlbkh0bWxTcGVjaWFsIGNvbnRhaW5lZCAiJlwoY29weVx8cXVvdFx8W0FFSU9VWWFlaW91eV11bWxcfFtBRUlPVVlhZWlvdXldYWN1dGVcfFtBRUlPVWFlaW91eV1ncmF2ZVx8W0FFSU9VYWVpb3V5XWNpcmNcfFtBTk9hbm9ddGlsZGVcfHN6bGlnXHxbQWFdcmluZ1x8bmJzcFx8Z3RcfGx0XHxhbXBcKTsiCi0KLXN5biBjbHVzdGVyIGRveHlnZW5IdG1sR3JvdXAgY29udGFpbnM9ZG94eWdlbkh0bWxDb2RlLGRveHlnZW5IdG1sQm9sZCxkb3h5Z2VuSHRtbFVuZGVybGluZSxkb3h5Z2VuSHRtbEl0YWxpYyxkb3h5Z2VuSHRtbFNwZWNpYWwsZG94eWdlbkh0bWxUYWcsZG94eWdlbkh0bWxMaW5rCi0KLXN5biBjbHVzdGVyIGRveHlnZW5IdG1sVG9wIGNvbnRhaW5zPUBTcGVsbCxkb3h5Z2VuSHRtbFNwZWNpYWwsZG94eWdlbkh0bWxUYWcsZG94eWdlbkNvbnRpbnVlQ29tbWVudAotIiBIdG1sIFN1cHBvcnQKLXN5biByZWdpb24gZG94eWdlbkh0bWxMaW5rIGNvbnRhaW5lZCBzdGFydD0rPFthQV1cPlxzKlwoXG5ccypcKlxzKlwpXD1cKFwobmFtZVx8aHJlZlwpPVwoIlteIl0qIlx8J1teJ10qJ1wpXClcPVxzKj4rIGVuZD0rPC9bYUFdPittZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wCi1oaSBsaW5rIGRveHlnZW5IdG1sTGluayBVbmRlcmxpbmVkCi0KLXN5biByZWdpb24gZG94eWdlbkh0bWxCb2xkIGNvbnRhaW5lZCBzdGFydD0iXGM8Ylw+IiBlbmQ9IlxjPC9iPiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sQm9sZFVuZGVybGluZSxkb3h5Z2VuSHRtbEJvbGRJdGFsaWMKLXN5biByZWdpb24gZG94eWdlbkh0bWxCb2xkIGNvbnRhaW5lZCBzdGFydD0iXGM8c3Ryb25nXD4iIGVuZD0iXGM8L3N0cm9uZz4ibWU9ZS05IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxkb3h5Z2VuSHRtbEJvbGRVbmRlcmxpbmUsZG94eWdlbkh0bWxCb2xkSXRhbGljCi1zeW4gcmVnaW9uIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZSBjb250YWluZWQgc3RhcnQ9IlxjPHVcPiIgZW5kPSJcYzwvdT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxkb3h5Z2VuSHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKLXN5biByZWdpb24gZG94eWdlbkh0bWxCb2xkSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iXGM8aVw+IiBlbmQ9IlxjPC9pPiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sQm9sZEl0YWxpY1VuZGVybGluZQotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbEJvbGRJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSJcYzxlbVw+IiBlbmQ9IlxjPC9lbT4ibWU9ZS01IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxkb3h5Z2VuSHRtbEJvbGRJdGFsaWNVbmRlcmxpbmUKLXN5biByZWdpb24gZG94eWdlbkh0bWxCb2xkVW5kZXJsaW5lSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iXGM8aVw+IiBlbmQ9IlxjPC9pPiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wCi1zeW4gcmVnaW9uIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZUl0YWxpYyBjb250YWluZWQgc3RhcnQ9IlxjPGVtXD4iIGVuZD0iXGM8L2VtPiJtZT1lLTUgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wCi1zeW4gcmVnaW9uIGRveHlnZW5IdG1sQm9sZEl0YWxpY1VuZGVybGluZSBjb250YWluZWQgc3RhcnQ9IlxjPHVcPiIgZW5kPSJcYzwvdT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxkb3h5Z2VuSHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKLQotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFVuZGVybGluZSBjb250YWluZWQgc3RhcnQ9IlxjPHVcPiIgZW5kPSJcYzwvdT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxkb3h5Z2VuSHRtbFVuZGVybGluZUJvbGQsZG94eWdlbkh0bWxVbmRlcmxpbmVJdGFsaWMKLXN5biByZWdpb24gZG94eWdlbkh0bWxVbmRlcmxpbmVCb2xkIGNvbnRhaW5lZCBzdGFydD0iXGM8Ylw+IiBlbmQ9IlxjPC9iPiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sVW5kZXJsaW5lQm9sZEl0YWxpYwotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFVuZGVybGluZUJvbGQgY29udGFpbmVkIHN0YXJ0PSJcYzxzdHJvbmdcPiIgZW5kPSJcYzwvc3Ryb25nPiJtZT1lLTkgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sVW5kZXJsaW5lQm9sZEl0YWxpYwotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFVuZGVybGluZUl0YWxpYyBjb250YWluZWQgc3RhcnQ9IlxjPGlcPiIgZW5kPSJcYzwvaT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxodG1VbmRlcmxpbmVJdGFsaWNCb2xkCi1zeW4gcmVnaW9uIGRveHlnZW5IdG1sVW5kZXJsaW5lSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iXGM8ZW1cPiIgZW5kPSJcYzwvZW0+Im1lPWUtNSBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsaHRtVW5kZXJsaW5lSXRhbGljQm9sZAotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFVuZGVybGluZUl0YWxpY0JvbGQgY29udGFpbmVkIHN0YXJ0PSJcYzxiXD4iIGVuZD0iXGM8L2I+Im1lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKLXN5biByZWdpb24gZG94eWdlbkh0bWxVbmRlcmxpbmVJdGFsaWNCb2xkIGNvbnRhaW5lZCBzdGFydD0iXGM8c3Ryb25nXD4iIGVuZD0iXGM8L3N0cm9uZz4ibWU9ZS05IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFVuZGVybGluZUJvbGRJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSJcYzxpXD4iIGVuZD0iXGM8L2k+Im1lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKLXN5biByZWdpb24gZG94eWdlbkh0bWxVbmRlcmxpbmVCb2xkSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iXGM8ZW1cPiIgZW5kPSJcYzwvZW0+Im1lPWUtNSBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKLQotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbEl0YWxpYyBjb250YWluZWQgc3RhcnQ9IlxjPGlcPiIgZW5kPSJcYzwvaT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxkb3h5Z2VuSHRtbEl0YWxpY0JvbGQsZG94eWdlbkh0bWxJdGFsaWNVbmRlcmxpbmUKLXN5biByZWdpb24gZG94eWdlbkh0bWxJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSJcYzxlbVw+IiBlbmQ9IlxjPC9lbT4ibWU9ZS01IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbEl0YWxpY0JvbGQgY29udGFpbmVkIHN0YXJ0PSJcYzxiXD4iIGVuZD0iXGM8L2I+Im1lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsZG94eWdlbkh0bWxJdGFsaWNCb2xkVW5kZXJsaW5lCi1zeW4gcmVnaW9uIGRveHlnZW5IdG1sSXRhbGljQm9sZCBjb250YWluZWQgc3RhcnQ9IlxjPHN0cm9uZ1w+IiBlbmQ9IlxjPC9zdHJvbmc+Im1lPWUtOSBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsZG94eWdlbkh0bWxJdGFsaWNCb2xkVW5kZXJsaW5lCi1zeW4gcmVnaW9uIGRveHlnZW5IdG1sSXRhbGljQm9sZFVuZGVybGluZSBjb250YWluZWQgc3RhcnQ9IlxjPHVcPiIgZW5kPSJcYzwvdT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbEl0YWxpY1VuZGVybGluZSBjb250YWluZWQgc3RhcnQ9IlxjPHVcPiIgZW5kPSJcYzwvdT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxkb3h5Z2VuSHRtbEl0YWxpY1VuZGVybGluZUJvbGQKLXN5biByZWdpb24gZG94eWdlbkh0bWxJdGFsaWNVbmRlcmxpbmVCb2xkIGNvbnRhaW5lZCBzdGFydD0iXGM8Ylw+IiBlbmQ9IlxjPC9iPiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wCi1zeW4gcmVnaW9uIGRveHlnZW5IdG1sSXRhbGljVW5kZXJsaW5lQm9sZCBjb250YWluZWQgc3RhcnQ9IlxjPHN0cm9uZ1w+IiBlbmQ9IlxjPC9zdHJvbmc+Im1lPWUtOSBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKLQotc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbENvZGUgY29udGFpbmVkIHN0YXJ0PSJcYzxjb2RlXD4iIGVuZD0iXGM8L2NvZGU+Im1lPWUtNyBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKLQotIiBQcmV2ZW50IHRoZSBkb3h5Z2VuIGNvbnRhaW5lZCBtYXRjaGVzIGZyb20gbGVha2luZyBpbnRvIHRoZSBjIGdyb3Vwcy4KLXN5biBjbHVzdGVyIGNQYXJlbkdyb3VwIGFkZD1kb3h5Z2VuLioKLXN5biBjbHVzdGVyIGNQYXJlbkdyb3VwIHJlbW92ZT1kb3h5Z2VuQ29tbWVudCxkb3h5Z2VuQ29tbWVudEwKLXN5biBjbHVzdGVyIGNQcmVQcm9jR3JvdXAgYWRkPWRveHlnZW4uKgotc3luIGNsdXN0ZXIgY011bHRpR3JvdXAgYWRkPWRveHlnZW4uKgotc3luIGNsdXN0ZXIgcmNQYXJlbkdyb3VwIGFkZD1kb3h5Z2VuLioKLXN5biBjbHVzdGVyIHJjUGFyZW5Hcm91cCByZW1vdmU9ZG94eWdlbkNvbW1lbnQsZG94eWdlbkNvbW1lbnRMCi1zeW4gY2x1c3RlciByY0dyb3VwIGFkZD1kb3h5Z2VuLioKLQotIiBUcmljayB0byBmb3JjZSBzcGVjaWFsIGRveHlnZW4gaGlsaWdodGluZyBpZiB0aGUgYmFja2dyb3VuZCBjaGFuZ2VzIChuZWVkIHRvCi0iIHN5biBjbGVhciBmaXJzdCkKLWlmICFleGlzdHMoJzpTeW5Db2xvcicpIAotICBpZiBleGlzdHMoImRpZF9kb3h5Z2VuX3N5bnRheF9pbml0cyIpCi0gICAgaWYgZGlkX2RveHlnZW5fc3ludGF4X2luaXRzICE9ICZiYWNrZ3JvdW5kICYmIHN5bklEYXR0cihoaWdobGlnaHRJRCgnZG94eWdlbl9EdW1teScpLCAnZmcnLCAnZ3VpJyk9PScnCi0gICAgICBjb21tYW5kIC1uYXJncz0rIFN5bkNvbG9yIGhpIDxhcmdzPgotICAgICAgdW5sZXQgZGlkX2RveHlnZW5fc3ludGF4X2luaXRzCi0gICAgZW5kaWYKKyAgIiBNYXRjaCB0aGUgU3RhcnRpbmcgcGF0dGVybiAoZWZmZWN0aXZlbHkgY3JlYXRpbmcgdGhlIHN0YXJ0IG9mIGEgQk5GKQorICBpZiAhZXhpc3RzKCdnOmRveHlnZW5famF2YWRvY19hdXRvYnJpZWYnKSB8fCBnOmRveHlnZW5famF2YWRvY19hdXRvYnJpZWYKKyAgICBzeW4gbWF0Y2ggZG94eWdlblN0YXJ0ICsvXCpbKiFdKyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5CcmllZixkb3h5Z2VuUHJldixkb3h5Z2VuRmluZEJyaWVmU3BlY2lhbCxkb3h5Z2VuU3RhcnRTcGVjaWFsLGRveHlnZW5TdGFydFNraXAsZG94eWdlblBhZ2Ugc2tpcHdoaXRlIHNraXBubAogICBlbHNlCi0gICAgICBjb21tYW5kIC1uYXJncz0rIFN5bkNvbG9yIGhpIGRlZiA8YXJncz4KKyAgICBzeW4gbWF0Y2ggZG94eWdlblN0YXJ0ICsvXCpbKiFdKyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5Cb2R5LGRveHlnZW5QcmV2LGRveHlnZW5GaW5kQnJpZWZTcGVjaWFsLGRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCxkb3h5Z2VuUGFnZSBza2lwd2hpdGUgc2tpcG5sCiAgIGVuZGlmCi1lbmRpZgorICBzeW4gbWF0Y2ggZG94eWdlblN0YXJ0TCArLy9bLyFdKyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5QcmV2TCxkb3h5Z2VuQnJpZWZMLGRveHlnZW5TcGVjaWFsIHNraXB3aGl0ZQogCi1pZiAhZXhpc3RzKCJkaWRfZG94eWdlbl9zeW50YXhfaW5pdHMiKQotICBjb21tYW5kIC1uYXJncz0rIFN5bkxpbmsgaGkgZGVmIGxpbmsgPGFyZ3M+Ci0gIGxldCBkaWRfZG94eWdlbl9zeW50YXhfaW5pdHMgPSAmYmFja2dyb3VuZAotICBoaSBkb3h5Z2VuX0R1bW15IGd1aWZnPWJsYWNrCisgICIgVGhpcyBoZWxwcyB3aXRoIHN5bmMtaW5nIGFzIGZvciBzb21lIHJlYXNvbiwgc3luY2luZyBiZWhhdmVzIGRpZmZlcmVudGx5IHRvIGEgbm9ybWFsIHJlZ2lvbiwgYW5kIHRoZSBzdGFydCBwYXR0ZXJuIGRvZXMgbm90IGdldCBtYXRjaGVkLgorICBzeW4gbWF0Y2ggZG94eWdlblN5bmNTdGFydCArXHplW14qL10rIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZG94eWdlbkJyaWVmLGRveHlnZW5QcmV2LGRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCxkb3h5Z2VuUGFnZSBza2lwd2hpdGUgc2tpcG5sCiAKLSAgZnVuISBzOkRveHlnZW5fSGlsaWdodHNfQmFzZSgpCi0gICAgU3luTGluayBkb3h5Z2VuSHRtbFNwZWNpYWwgU3BlY2lhbAotICAgIFN5bkxpbmsgZG94eWdlbkh0bWxWYXIgVHlwZQotICAgIFN5bkxpbmsgZG94eWdlbkh0bWxFeHByIFN0cmluZworICAiIE1hdGNoIHRoZSBmaXJzdCBzZW50ZW5jZSBhcyBhIGJyaWVmIGNvbW1lbnQKKyAgaWYgISBleGlzdHMoJ2c6ZG94eWdlbl9lbmRfcHVuY3R1YXRpb24nKQorICAgIGxldCBnOmRveHlnZW5fZW5kX3B1bmN0dWF0aW9uPSdbLl0nCisgIGVuZGlmCisgIGV4ZSAnc3luIHJlZ2lvbiBkb3h5Z2VuQnJpZWYgY29udGFpbmVkIHN0YXJ0PStbXFxAXVwoW3BjYmVhXVw+XHxlbVw+XHxyZWZcPlx8bGlua1w+XHxmXCRcfFskXFwmPD4jXVwpXHxbXiBcdFxcQCpdKyBzdGFydD0rXCheXHMqXClcQDwhXCovXEAhKyBzdGFydD0rXDxcaysgc2tpcD0rJy5kb3h5Z2VuX2VuZF9wdW5jdHVhdGlvbi4nXFMrIGVuZD0rJy5kb3h5Z2VuX2VuZF9wdW5jdHVhdGlvbi4nKyBlbmQ9K1woXHMqXChcblxzKlwqXD1ccypcKVtAXFxdXChbcGNiZWFdXD5cfGVtXD5cfHJlZlw+XHxsaW5rXD5cfGZcJFx8WyRcXCY8PiNdXClcQCFcKVxAPSsgY29udGFpbnM9ZG94eWdlblNtYWxsU3BlY2lhbCxkb3h5Z2VuQ29udGludWVDb21tZW50LGRveHlnZW5CcmllZkVuZENvbW1lbnQsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblNtYWxsU3BlY2lhbCxAZG94eWdlbkh0bWxHcm91cCxkb3h5Z2VuVE9ETyxkb3h5Z2VuT3RoZXJMaW5rLGRveHlnZW5IeXBlckxpbmssZG94eWdlbkhhc2hMaW5rICBza2lwbmwgbmV4dGdyb3VwPWRveHlnZW5Cb2R5JwogCi0gICAgU3luTGluayBkb3h5Z2VuU21hbGxTcGVjaWFsIFNwZWNpYWxDaGFyCisgIHN5biBtYXRjaCBkb3h5Z2VuQnJpZWZFbmRDb21tZW50ICtcKi8rIGNvbnRhaW5lZAogCi0gICAgU3luTGluayBkb3h5Z2VuU3BlY2lhbENvZGVXb3JkIGRveHlnZW5TbWFsbFNwZWNpYWwKLSAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsQm9sZFdvcmQgZG94eWdlblNtYWxsU3BlY2lhbAotICAgIFN5bkxpbmsgZG94eWdlblNwZWNpYWxFbXBoYXNpc2VkV29yZCBkb3h5Z2VuU21hbGxTcGVjaWFsCi0gICAgU3luTGluayBkb3h5Z2VuU3BlY2lhbEFyZ3VtZW50V29yZCBkb3h5Z2VuU21hbGxTcGVjaWFsCisgIGV4ZSAnc3luIHJlZ2lvbiBkb3h5Z2VuQnJpZWZMIHN0YXJ0PStAXGtcQCFcfFtcXEBdXChbcGNiZWFdXD5cfGVtXD5cfHJlZlw+XHxsaW5rXD5cfGZcJFx8WyRcXCY8PiNdXClcfFteIFx0XFxAXSsgc3RhcnQ9K1w8KyBza2lwPSsnLmRveHlnZW5fZW5kX3B1bmN0dWF0aW9uLidcUysgZW5kPSsnLmRveHlnZW5fZW5kX3B1bmN0dWF0aW9uLidcfCQrIGNvbnRhaW5lZCBjb250YWlucz1kb3h5Z2VuU21hbGxTcGVjaWFsLGRveHlnZW5IeXBlckxpbmssZG94eWdlbkhhc2hMaW5rLEBkb3h5Z2VuSHRtbEdyb3VwIGtlZXBlbmQnCiAKLSAgICAiIFN5bkNvbG9yIGRveHlnZW5Gb3JtdWxhS2V5d29yZCBjdGVybT1ib2xkIGN0ZXJtZmc9RGFya01hZ2VudGEgZ3VpZmc9RGFya01hZ2VudGEgZ3VpPWJvbGQKLSAgICBTeW5MaW5rIGRveHlnZW5Gb3JtdWxhS2V5d29yZCBLZXl3b3JkCi0gICAgIlN5bkNvbG9yIGRveHlnZW5Gb3JtdWxhRXNjYXBlZCAgY3Rlcm1mZz1EYXJrTWFnZW50YSBndWlmZz1EYXJrTWFnZW50YSBndWk9Ym9sZAotICAgIFN5bkxpbmsgZG94eWdlbkZvcm11bGFFc2NhcGVkIFNwZWNpYWwKLSAgICBTeW5MaW5rIGRveHlnZW5Gb3JtdWxhT3BlcmF0b3IgT3BlcmF0b3IKLSAgICBTeW5MaW5rIGRveHlnZW5Gb3JtdWxhIFN0YXRlbWVudAotICAgIFN5bkxpbmsgZG94eWdlblN5bWJvbCBDb25zdGFudAotICAgIFN5bkxpbmsgZG94eWdlblNwZWNpYWwgU3BlY2lhbAotICAgIFN5bkxpbmsgZG94eWdlbkZvcm11bGFTcGVjaWFsIFNwZWNpYWwKLSAgICAiU3luQ29sb3IgZG94eWdlbkZvcm11bGFTcGVjaWFsIGN0ZXJtZmc9RGFya0JsdWUgZ3VpZmc9RGFya0JsdWUKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuQnJpZWZMaW5lIGNvbnRhaW5lZCBzdGFydD0rXDxcaysgZW5kPStcKFxuXHMqXCpcPVxzKlwoW0BcXF1cKFtwY2JlYV1cPlx8ZW1cPlx8cmVmXD5cfGxpbmtcPlx8ZlwkXHxbJFxcJjw+I11cKVxAIVwpXHxccyokXClcQD0rIGNvbnRhaW5zPWRveHlnZW5Db250aW51ZUNvbW1lbnQsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblNtYWxsU3BlY2lhbCxAZG94eWdlbkh0bWxHcm91cCxkb3h5Z2VuVE9ETyxkb3h5Z2VuT3RoZXJMaW5rLGRveHlnZW5IeXBlckxpbmssZG94eWdlbkhhc2hMaW5rICBza2lwd2hpdGUga2VlcGVuZAorCisgICIgTWF0Y2ggYSAnPCcgZm9yIGFwcGx5aW5nIGEgY29tbWVudCB0byB0aGUgcHJldmlvdXMgZWxlbWVudC4KKyAgc3luIG1hdGNoIGRveHlnZW5QcmV2ICs8KyBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5CcmllZixkb3h5Z2VuU3BlY2lhbCxkb3h5Z2VuU3RhcnRTa2lwIHNraXB3aGl0ZQorICBzeW4gbWF0Y2ggZG94eWdlblByZXZMICs8KyBjb250YWluZWQgIG5leHRncm91cD1kb3h5Z2VuQnJpZWZMLGRveHlnZW5TcGVjaWFsIHNraXB3aGl0ZQorCisgICIgVGhlc2UgYXJlIGFudGktZG94eWdlbiBjb21tZW50cy4gIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdHdvIGFzdGVyaXNrcyBvciAzICcvJ3MKKyAgIiB0aGVuIHR1cm4gdGhlIGNvbW1lbnRzIGJhY2sgaW50byBub3JtYWwgQyBjb21tZW50cy4KKyAgc3luIHJlZ2lvbiBjQ29tbWVudCBzdGFydD0iL1wqXCpcKiIgZW5kPSJcKi8iIGNvbnRhaW5zPUBjQ29tbWVudEdyb3VwLGNDb21tZW50U3RyaW5nLGNDaGFyYWN0ZXIsY051bWJlcnNDb20sY1NwYWNlRXJyb3IKKyAgc3luIHJlZ2lvbiBjQ29tbWVudEwgc3RhcnQ9Ii8vLy8iIHNraXA9IlxcJCIgZW5kPSIkIiBjb250YWlucz1AY0NvbW1lbnRHcm91cCxjQ29tbWVudDJTdHJpbmcsY0NoYXJhY3RlcixjTnVtYmVyc0NvbSxjU3BhY2VFcnJvcgorCisgICIgU3BlY2lhbCBjb21tYW5kcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGFyZWE6ICBzdGFydGluZyB3aXRoICdAJyBvciAnXCcKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuU3RhcnRTcGVjaWFsIGNvbnRhaW5lZCBzdGFydD0rW0BcXF1cKFtwY2JlYV1cPlx8ZW1cPlx8cmVmXD5cfGxpbmtcPlx8ZlwkXHxbJFxcJjw+I11cKVxAISsgZW5kPSskKyBlbmQ9K1wqLyttZT1zLTEsaGU9cy0xICBjb250YWlucz1kb3h5Z2VuU3BlY2lhbCBuZXh0Z3JvdXA9ZG94eWdlblNraXBDb21tZW50IHNraXBubCBrZWVwZW5kCisgIHN5biBtYXRjaCBkb3h5Z2VuU2tpcENvbW1lbnQgY29udGFpbmVkICteXHMqXCovXEAhKyBuZXh0Z3JvdXA9ZG94eWdlbkJyaWVmLGRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblBhZ2Ugc2tpcHdoaXRlCisKKyAgInN5biByZWdpb24gZG94eWdlbkJvZHlCaXQgY29udGFpbmVkIHN0YXJ0PSskKworCisgICIgVGhlIG1haW4gYm9keSBvZiBhIGRveHlnZW4gY29tbWVudC4KKyAgc3luIHJlZ2lvbiBkb3h5Z2VuQm9keSBjb250YWluZWQgc3RhcnQ9Ky5cfCQrIG1hdGNoZ3JvdXA9ZG94eWdlbkVuZENvbW1lbnQgZW5kPStcKi8rcmU9ZS0yLG1lPWUtMiBjb250YWlucz1kb3h5Z2VuQ29udGludWVDb21tZW50LGRveHlnZW5UT0RPLGRveHlnZW5TcGVjaWFsLGRveHlnZW5TbWFsbFNwZWNpYWwsZG94eWdlbkh5cGVyTGluayxkb3h5Z2VuSGFzaExpbmssQGRveHlnZW5IdG1sR3JvdXAKKworICAiIFRoZXNlIGFsbG93IHRoZSBza2lwcGluZyBvZiBjb21tZW50IGNvbnRpbnVhdGlvbiAnKicgY2hhcmFjdGVycy4KKyAgc3luIG1hdGNoIGRveHlnZW5Db250aW51ZUNvbW1lbnQgY29udGFpbmVkICteXHMqXCovXEAhXHMqKworCisgICIgQ2F0Y2ggYSBCcmllZiBjb21tZW50IHdpdGhvdXQgcHVuY3R1YXRpb24gLSBmbGFnIGl0IGFzIGFuIGVycm9yIGJ1dAorICAiIG1ha2Ugc3VyZSB0aGUgZW5kIGNvbW1lbnQgaXMgcGlja2VkIHVwIGFsc28uCisgIHN5biBtYXRjaCBkb3h5Z2VuRXJyb3JDb21tZW50IGNvbnRhaW5lZCArXCovKworCisKKyAgIiBTa2lwIGVtcHR5IGxpbmVzIGF0IHRoZSBzdGFydCBmb3Igd2hlbiBjb21tZW50cyBzdGFydCBvbiB0aGUgMm5kLzNyZCBsaW5lLgorICBpZiAhZXhpc3RzKCdnOmRveHlnZW5famF2YWRvY19hdXRvYnJpZWYnKSB8fCBnOmRveHlnZW5famF2YWRvY19hdXRvYnJpZWYKKyAgICBzeW4gbWF0Y2ggZG94eWdlblN0YXJ0U2tpcCArXlxzKlwqW14vXSttZT1lLTEgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuQnJpZWYsZG94eWdlblN0YXJ0U3BlY2lhbCxkb3h5Z2VuRmluZEJyaWVmU3BlY2lhbCxkb3h5Z2VuU3RhcnRTa2lwLGRveHlnZW5QYWdlIHNraXB3aGl0ZSBza2lwbmwKKyAgICBzeW4gbWF0Y2ggZG94eWdlblN0YXJ0U2tpcCArXlxzKlwqJCsgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuQnJpZWYsZG94eWdlblN0YXJ0U3BlY2lhbCxkb3h5Z2VuRmluZEJyaWVmU3BlY2lhbCxkb3h5Z2VuU3RhcnRTa2lwLGRveHlnZW5QYWdlIHNraXB3aGl0ZSBza2lwbmwKKyAgZWxzZQorICAgIHN5biBtYXRjaCBkb3h5Z2VuU3RhcnRTa2lwICteXHMqXCpbXi9dK21lPWUtMSBjb250YWluZWQgbmV4dGdyb3VwPWRveHlnZW5TdGFydFNwZWNpYWwsZG94eWdlbkZpbmRCcmllZlNwZWNpYWwsZG94eWdlblN0YXJ0U2tpcCxkb3h5Z2VuUGFnZSxkb3h5Z2VuQm9keSBza2lwd2hpdGUgc2tpcG5sCisgICAgc3luIG1hdGNoIGRveHlnZW5TdGFydFNraXAgK15ccypcKiQrIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZG94eWdlblN0YXJ0U3BlY2lhbCxkb3h5Z2VuRmluZEJyaWVmU3BlY2lhbCxkb3h5Z2VuU3RhcnRTa2lwLGRveHlnZW5QYWdlLGRveHlnZW5Cb2R5IHNraXB3aGl0ZSBza2lwbmwKKyAgZW5kaWYKKworICAiIE1hdGNoIGFuIFtAXF1icmllZiBzbyB0aGF0IGl0IG1vdmVzIHRvIGJvZHktbW9kZS4KKyAgIgorICAiCisgICIgc3luIG1hdGNoIGRveHlnZW5CcmllZkxpbmUgIGNvbnRhaW5lZAorICBzeW4gbWF0Y2ggZG94eWdlbkJyaWVmU3BlY2lhbCBjb250YWluZWQgK1tAXFxdKyBuZXh0Z3JvdXA9ZG94eWdlbkJyaWVmV29yZCBza2lwd2hpdGUKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuRmluZEJyaWVmU3BlY2lhbCBzdGFydD0rW0BcXF1icmllZlw+KyBlbmQ9K1woXG5ccypcKlw9XHMqXChbQFxcXVwoW3BjYmVhXVw+XHxlbVw+XHxyZWZcPlx8bGlua1w+XHxmXCRcfFskXFwmPD4jXVwpXEAhXClcfFxzKiRcKVxAPSsga2VlcGVuZCBjb250YWlucz1kb3h5Z2VuQnJpZWZTcGVjaWFsIG5leHRncm91cD1kb3h5Z2VuQm9keSBrZWVwZW5kIHNraXB3aGl0ZSBza2lwbmwgY29udGFpbmVkCisKKworICAiIENyZWF0ZSB0aGUgc2luZ2xlIHdvcmQgbWF0Y2hpbmcgc3BlY2lhbCBpZGVudGlmaWVycy4KKworICBmdW4hIHM6RHh5Q3JlYXRlU21hbGxTcGVjaWFsKCBrd29yZCwgbmFtZSApCisKKyAgICBsZXQgbXg9J1stOjAtOUEtWmEtel8lPSYrKi8hfj58XVxAPCFcKFstMC05QS1aYS16XyU9KyovIX4+fCNdXCtbLTAtOUEtWmEtel8lPSsqLyF+PnxdXEAhXHxcXFtcXDw+Ji5dQFx8Wy4sXVswLTlhLXpBLVpfXVxAPVx8OjpcfChbXildKilcfCZbMC05YS16QS1aXVx7Miw3fTtcKVwrJworICAgIGV4ZSAnc3luIHJlZ2lvbiBkb3h5Z2VuU3BlY2lhbCcuYTpuYW1lLidXb3JkIGNvbnRhaW5lZCBzdGFydD0rJy5hOmt3b3JkLicrIGVuZD0rXChcX3NcKycubXguJ1wpXEA8PVstYS16QS1aXzAtOSsqL14lfH4hPSZcXF1cQCErIHNraXB3aGl0ZSBjb250YWlucz1kb3h5Z2VuQ29udGludWVDb21tZW50LGRveHlnZW4nLmE6bmFtZS4nV29yZCcKKyAgICBleGUgJ3N5biBtYXRjaCBkb3h5Z2VuJy5hOm5hbWUuJ1dvcmQgY29udGFpbmVkICJcX3NcQDw9Jy5teC4nIiBjb250YWlucz1kb3h5Z2VuSHRtbFNwZWNpYWwga2VlcGVuZCcKICAgZW5kZnVuCi0gIGNhbGwgczpEb3h5Z2VuX0hpbGlnaHRzX0Jhc2UoKQorICBjYWxsIHM6RHh5Q3JlYXRlU21hbGxTcGVjaWFsKCdwJywgJ0NvZGUnKQorICBjYWxsIHM6RHh5Q3JlYXRlU21hbGxTcGVjaWFsKCdjJywgJ0NvZGUnKQorICBjYWxsIHM6RHh5Q3JlYXRlU21hbGxTcGVjaWFsKCdiJywgJ0JvbGQnKQorICBjYWxsIHM6RHh5Q3JlYXRlU21hbGxTcGVjaWFsKCdlJywgJ0VtcGhhc2lzZWQnKQorICBjYWxsIHM6RHh5Q3JlYXRlU21hbGxTcGVjaWFsKCdlbScsICdFbXBoYXNpc2VkJykKKyAgY2FsbCBzOkR4eUNyZWF0ZVNtYWxsU3BlY2lhbCgnYScsICdBcmd1bWVudCcpCisgIGNhbGwgczpEeHlDcmVhdGVTbWFsbFNwZWNpYWwoJ3JlZicsICdSZWYnKQorICBkZWxmdW4gczpEeHlDcmVhdGVTbWFsbFNwZWNpYWwKIAotICBmdW4hIHM6RG94eWdlbl9IaWxpZ2h0cygpCi0gICAgIiBQaWNrIGEgc2Vuc2libGUgZGVmYXVsdCBmb3IgJ2NvZGV3b3JkJy4KLSAgICBsZXQgZm9udD0nJwotICAgIGlmIGV4aXN0cygnZzpkb3h5Z2VuX2NvZGV3b3JkX2ZvbnQnKQotICAgICAgaWYgZzpkb3h5Z2VuX2NvZGV3b3JkX2ZvbnQgIX4gJ1w8XGtcKz0nCi0gICAgICAgIGxldCBmb250PSdmb250PScuZzpkb3h5Z2VuX2NvZGV3b3JkX2ZvbnQKKyAgc3luIG1hdGNoIGRveHlnZW5TbWFsbFNwZWNpYWwgY29udGFpbmVkICtbQFxcXVwoXDxbcGNiZWFdXD5cfFw8ZW1cPlx8XDxyZWZcPlx8XDxsaW5rXD5cfGZcJFx8WyRcXCY8PiNdXClcQD0rIG5leHRncm91cD1kb3h5Z2VuT3RoZXJMaW5rLGRveHlnZW5IeXBlckxpbmssZG94eWdlbkhhc2hMaW5rLGRveHlnZW5Gb3JtdWxhLGRveHlnZW5TeW1ib2wsZG94eWdlblNwZWNpYWwuKldvcmQKKworICAiIE5vdyBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzCisgIHN5biBtYXRjaCBkb3h5Z2VuU3BlY2lhbCBjb250YWluZWQgK1tAXFxdXChcPFtwY2JlYV1cPlx8XDxlbVw+XHxcPHJlZlx8XDxsaW5rXD5cPlx8XDxmXCRcfFskXFwmPD4jXVwpXEAhKyBuZXh0Z3JvdXA9ZG94eWdlblBhcmFtLGRveHlnZW5SZXR2YWwsZG94eWdlbkJyaWVmV29yZCxkb3h5Z2VuQm9sZCxkb3h5Z2VuQk90aGVyLGRveHlnZW5PdGhlcixkb3h5Z2VuT3RoZXJUT0RPLGRveHlnZW5PdGhlcldBUk4sZG94eWdlbk90aGVyQlVHLGRveHlnZW5QYWdlLGRveHlnZW5Hcm91cERlZmluZSxkb3h5Z2VuQ29kZVJlZ2lvbixkb3h5Z2VuVmVyYmF0aW1SZWdpb24sZG94eWdlbkRvdFJlZ2lvbgorICAiIGRveHlnZW5PdGhlckxpbmssZG94eWdlblN5bWJvbCxkb3h5Z2VuRm9ybXVsYSxkb3h5Z2VuRXJyb3JTcGVjaWFsLGRveHlnZW5TcGVjaWFsLipXb3JkCisgICIKKyAgc3luIG1hdGNoIGRveHlnZW5Hcm91cERlZmluZSBjb250YWluZWQgK0BcQDw9W3t9XSsKKyAgc3luIG1hdGNoIGRveHlnZW5Hcm91cERlZmluZVNwZWNpYWwgY29udGFpbmVkICtAXHplW3t9XSsKKworICBzeW4gbWF0Y2ggZG94eWdlbkVycm9yU3BlY2lhbCBjb250YWluZWQgK1xzKworCisgICIgTWF0Y2ggUGFybWF0ZXJzIGFuZCByZXR2YWxzIChoaWxpZ2h0aW5nIHRoZSBmaXJzdCB3b3JkIGFzIHNwZWNpYWwpLgorICBzeW4gbWF0Y2ggZG94eWdlblBhcmFtRGlyZWN0aW9uIGNvbnRhaW5lZCArXFtcKFw8aW5cPlx8XDxvdXRcPlx8LFwpXCtcXSsgbmV4dGdyb3VwPWRveHlnZW5QYXJhbU5hbWUgc2tpcHdoaXRlCisgIHN5biBrZXl3b3JkIGRveHlnZW5QYXJhbSBjb250YWluZWQgcGFyYW0gbmV4dGdyb3VwPWRveHlnZW5QYXJhbU5hbWUsZG94eWdlblBhcmFtRGlyZWN0aW9uIHNraXB3aGl0ZQorICBzeW4gbWF0Y2ggZG94eWdlblBhcmFtTmFtZSBjb250YWluZWQgK1tBLVphLXowLTlfOl1cKysgbmV4dGdyb3VwPWRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYyBza2lwd2hpdGUKKyAgc3luIGtleXdvcmQgZG94eWdlblJldHZhbCBjb250YWluZWQgcmV0dmFsIHRocm93IGV4Y2VwdGlvbiBuZXh0Z3JvdXA9ZG94eWdlblBhcmFtTmFtZSBza2lwd2hpdGUKKworICAiIE1hdGNoIG9uZSBsaW5lIGlkZW50aWZpZXJzLgorICBzeW4ga2V5d29yZCBkb3h5Z2VuT3RoZXIgY29udGFpbmVkIGFkZGluZGV4IGFuY2hvcgorICBcIGRvbnRpbmNsdWRlIGVuZGh0bWxvbmx5IGVuZGxhdGV4b25seSBzaG93aW5pdGlhbGl6ZXIgaGlkZWluaXRpYWxpemVyCisgIFwgZXhhbXBsZSBodG1sb25seSBpbWFnZSBpbmNsdWRlIGluZ3JvdXAgaW50ZXJuYWwgbGF0ZXhvbmx5IGxpbmUKKyAgXCBvdmVybG9hZCByZWxhdGVzIHJlbGF0ZXNhbHNvIHNhIHNraXAgc2tpcGxpbmUKKyAgXCB1bnRpbCB2ZXJiaW5jbHVkZSB2ZXJzaW9uIGFkZHRvZ3JvdXAgaHRtbGluY2x1ZGUgY29weWRvYyBkb3RmaWxlCisgIFwgeG1sb25seSBlbmR4bWxvbmx5CisgIFwgbmV4dGdyb3VwPWRveHlnZW5TcGVjaWFsT25lbGluZURlc2MKKworICBzeW4gcmVnaW9uIGRveHlnZW5Db2RlUmVnaW9uIGNvbnRhaW5lZCBtYXRjaGdyb3VwPWRveHlnZW5PdGhlciBzdGFydD0rXDxjb2RlXD4rIG1hdGNoZ3JvdXA9ZG94eWdlbk90aGVyIGVuZD0rW1xcQF1cQDw9XDxlbmRjb2RlXD4rIGNvbnRhaW5zPWRveHlnZW5Db2RlUmVnaW9uU3BlY2lhbCxkb3h5Z2VuQ29udGludWVDb21tZW50LGRveHlnZW5FcnJvckNvbW1lbnQKKyAgc3luIG1hdGNoIGRveHlnZW5Db2RlUmVnaW9uU3BlY2lhbCBjb250YWluZWQgK1tcXEBdXChlbmRjb2RlXD5cKVxAPSsKKworICBzeW4gcmVnaW9uIGRveHlnZW5WZXJiYXRpbVJlZ2lvbiBjb250YWluZWQgbWF0Y2hncm91cD1kb3h5Z2VuT3RoZXIgc3RhcnQ9K1w8dmVyYmF0aW1cPisgbWF0Y2hncm91cD1kb3h5Z2VuT3RoZXIgZW5kPStbXFxAXVxAPD1cPGVuZHZlcmJhdGltXD4rIGNvbnRhaW5zPWRveHlnZW5WZXJiYXRpbVJlZ2lvblNwZWNpYWwsZG94eWdlbkNvbnRpbnVlQ29tbWVudCxkb3h5Z2VuRXJyb3JDb21tZW50CisgIHN5biBtYXRjaCBkb3h5Z2VuVmVyYmF0aW1SZWdpb25TcGVjaWFsIGNvbnRhaW5lZCArW1xcQF1cKGVuZHZlcmJhdGltXD5cKVxAPSsKKworICBsZXQgYjpkb3h5Z2VuX3N5bnRheF9zYXZlPWI6Y3VycmVudF9zeW50YXgKKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorICBzeW4gaW5jbHVkZSBARG90eCBzeW50YXgvZG90LnZpbQorICBsZXQgYjpjdXJyZW50X3N5bnRheD1iOmRveHlnZW5fc3ludGF4X3NhdmUKKyAgdW5sZXQgYjpkb3h5Z2VuX3N5bnRheF9zYXZlCisgIHN5biByZWdpb24gZG94eWdlbkRvdFJlZ2lvbiBjb250YWluZWQgbWF0Y2hncm91cD1kb3h5Z2VuT3RoZXIgc3RhcnQ9K1w8ZG90XD4rIG1hdGNoZ3JvdXA9ZG94eWdlbk90aGVyIGVuZD0rW1xcQF1cQDw9XDxlbmRkb3RcPisgY29udGFpbnM9ZG94eWdlbkRvdFJlZ2lvblNwZWNpYWwsZG94eWdlbkVycm9yQ29tbWVudCxkb3h5Z2VuQ29udGludWVDb21tZW50LEBEb3R4CisgIHN5biBtYXRjaCBkb3h5Z2VuRG90UmVnaW9uU3BlY2lhbCBjb250YWluZWQgK1tcXEBdXChlbmRkb3RcPlwpXEA9KworCisgICIgTWF0Y2ggc2luZ2xlIGxpbmUgaWRlbnRpZmllcnMuCisgIHN5biBrZXl3b3JkIGRveHlnZW5CT3RoZXIgY29udGFpbmVkIGNsYXNzIGVudW0gZmlsZSBmbiBtYWlucGFnZSBpbnRlcmZhY2UKKyAgXCBuYW1lc3BhY2Ugc3RydWN0IHR5cGVkZWYgdW5pb24gdmFyIGRlZiBuYW1lCisgIFwgbmV4dGdyb3VwPWRveHlnZW5TcGVjaWFsVHlwZU9uZWxpbmVEZXNjCisKKyAgc3luIGtleXdvcmQgZG94eWdlbk90aGVyIGNvbnRhaW5lZCBwYXIgbmV4dGdyb3VwPWRveHlnZW5IZWFkZXJMaW5lCisgIHN5biByZWdpb24gZG94eWdlbkhlYWRlckxpbmUgc3RhcnQ9Ky4rIGVuZD0rXisgY29udGFpbmVkIHNraXB3aGl0ZSBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxNdWx0aWxpbmVEZXNjCisKKyAgc3luIGtleXdvcmQgZG94eWdlbk90aGVyIGNvbnRhaW5lZCBhcmcgYXV0aG9yIGRhdGUgZGVwcmVjYXRlZCBsaSByZXR1cm4gc2VlIGludmFyaWFudCBub3RlIHBvc3QgcHJlIHJlbWFya3Mgc2luY2UgdGVzdCBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxNdWx0aWxpbmVEZXNjCisgIHN5biBrZXl3b3JkIGRveHlnZW5PdGhlclRPRE8gY29udGFpbmVkIHRvZG8gYXR0ZW50aW9uIG5leHRncm91cD1kb3h5Z2VuU3BlY2lhbE11bHRpbGluZURlc2MKKyAgc3luIGtleXdvcmQgZG94eWdlbk90aGVyV0FSTiBjb250YWluZWQgd2FybmluZyBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxNdWx0aWxpbmVEZXNjCisgIHN5biBrZXl3b3JkIGRveHlnZW5PdGhlckJVRyBjb250YWluZWQgYnVnIG5leHRncm91cD1kb3h5Z2VuU3BlY2lhbE11bHRpbGluZURlc2MKKworICAiIEhhbmRsZSBcbGluaywgXGVuZGxpbmssIGhpbGlnaHRpbmcgdGhlIGxpbmstdG8gYW5kIHRoZSBsaW5rIHRleHQgYml0cyBzZXBhcmF0ZWx5LgorICBzeW4gcmVnaW9uIGRveHlnZW5PdGhlckxpbmsgbWF0Y2hncm91cD1kb3h5Z2VuT3RoZXIgc3RhcnQ9K2xpbmsrIGVuZD0rW1xAXVxAPD1lbmRsaW5rXD4rIGNvbnRhaW5lZCBjb250YWlucz1kb3h5Z2VuTGlua1dvcmQsZG94eWdlbkNvbnRpbnVlQ29tbWVudCxkb3h5Z2VuTGlua0Vycm9yLGRveHlnZW5FbmRsaW5rU3BlY2lhbAorICBzeW4gbWF0Y2ggZG94eWdlbkVuZGxpbmtTcGVjaWFsIGNvbnRhaW5lZCArW1xcQF1cemVlbmRsaW5rXD4rCisKKyAgc3luIG1hdGNoIGRveHlnZW5MaW5rV29yZCAiW19hLXpBLVo6IygpXVtfYS16MC05QS1aOiMoKV0qXD4iIGNvbnRhaW5lZCBza2lwbmwgbmV4dGdyb3VwPWRveHlnZW5MaW5rUmVzdCxkb3h5Z2VuQ29udGludWVMaW5rQ29tbWVudAorICBzeW4gbWF0Y2ggZG94eWdlbkxpbmtSZXN0ICtbXipAXFxdXHxcKi9cQCFcfFtAXFxdXChlbmRsaW5rXD5cKVxAISsgY29udGFpbmVkIHNraXBubCBuZXh0Z3JvdXA9ZG94eWdlbkxpbmtSZXN0LGRveHlnZW5Db250aW51ZUxpbmtDb21tZW50CisgIHN5biBtYXRjaCBkb3h5Z2VuQ29udGludWVMaW5rQ29tbWVudCBjb250YWluZWQgK15ccypcKlw9W14vXSttZT1lLTEgbmV4dGdyb3VwPWRveHlnZW5MaW5rUmVzdAorICBzeW4gbWF0Y2ggZG94eWdlbkxpbmtFcnJvciAiXCovIiBjb250YWluZWQKKyAgIiAjTGluayBoaWxpZ2h0aW5nLgorICBzeW4gbWF0Y2ggZG94eWdlbkhhc2hMaW5rIC9cKFthLXpBLVpfXVswLTlhLXpBLVpfXSpcKVw/I1woXC5bMC05YS16QS1aX11cQD1cfFthLXpBLVowLTlfXVwrXHw6Olx8KClcKVwrLyBjb250YWluZWQgY29udGFpbnM9ZG94eWdlbkhhc2hTcGVjaWFsCisgIHN5biBtYXRjaCBkb3h5Z2VuSGFzaFNwZWNpYWwgLyMvIGNvbnRhaW5lZAorICBzeW4gbWF0Y2ggZG94eWdlbkh5cGVyTGluayAvXChcc1x8XlxzKlwqXD9cKVxAPD1cKGh0dHBcfGh0dHBzXHxmdHBcKTpcL1wvWy0wLTlhLXpBLVpfPyY9KyMlLy4hJzo7QF1cKy8gY29udGFpbmVkCisKKyAgIiBIYW5kbGUgXHBhZ2UuICBUaGlzIGRvZXMgbm90IHVzZSBkb3h5Z2VuQnJpZWYuCisgIHN5biBtYXRjaCBkb3h5Z2VuUGFnZSAiW1xcQF1wYWdlXD4ibWU9cysxIGNvbnRhaW5lZCBza2lwd2hpdGUgbmV4dGdyb3VwPWRveHlnZW5QYWdlUGFnZQorICBzeW4ga2V5d29yZCBkb3h5Z2VuUGFnZVBhZ2UgcGFnZSBjb250YWluZWQgc2tpcHdoaXRlIG5leHRncm91cD1kb3h5Z2VuUGFnZUlkZW50CisgIHN5biByZWdpb24gZG94eWdlblBhZ2VEZXNjICBzdGFydD0rLlwrKyBlbmQ9KyQrIGNvbnRhaW5lZCBza2lwd2hpdGUgY29udGFpbnM9ZG94eWdlblNtYWxsU3BlY2lhbCxAZG94eWdlbkh0bWxHcm91cCBrZWVwZW5kIHNraXB3aGl0ZSBza2lwbmwgbmV4dGdyb3VwPWRveHlnZW5Cb2R5CisgIHN5biBtYXRjaCBkb3h5Z2VuUGFnZUlkZW50ICJcPFthLXpBLVowLTldXCtcPiIgY29udGFpbmVkIG5leHRncm91cD1kb3h5Z2VuUGFnZURlc2MKKworICAiIEhhbmRsZSBzZWN0aW9uCisgIHN5biBrZXl3b3JkIGRveHlnZW5PdGhlciBkZWZncm91cCBzZWN0aW9uIHN1YnNlY3Rpb24gc3Vic3Vic2VjdGlvbiB3ZWFrZ3JvdXAgY29udGFpbmVkIHNraXB3aGl0ZSBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxJZGVudAorICBzeW4gcmVnaW9uIGRveHlnZW5TcGVjaWFsU2VjdGlvbkRlc2MgIHN0YXJ0PSsuXCsrIGVuZD0rJCsgY29udGFpbmVkIHNraXB3aGl0ZSBjb250YWlucz1kb3h5Z2VuU21hbGxTcGVjaWFsLEBkb3h5Z2VuSHRtbEdyb3VwIGtlZXBlbmQgc2tpcHdoaXRlIHNraXBubCBuZXh0Z3JvdXA9ZG94eWdlbkNvbnRpbnVlQ29tbWVudAorICBzeW4gbWF0Y2ggZG94eWdlblNwZWNpYWxJZGVudCAiXDxbYS16QS1aMC05XVwrXD4iIGNvbnRhaW5lZCBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxTZWN0aW9uRGVzYworCisgICIgRG9lcyB0aGUgb25lLWxpbmUgZGVzY3JpcHRpb24gZm9yIHRoZSBvbmUtbGluZSB0eXBlIGlkZW50aWZpZXJzLgorICBzeW4gcmVnaW9uIGRveHlnZW5TcGVjaWFsVHlwZU9uZWxpbmVEZXNjICBzdGFydD0rLlwrKyBlbmQ9KyQrIGNvbnRhaW5lZCBza2lwd2hpdGUgY29udGFpbnM9ZG94eWdlblNtYWxsU3BlY2lhbCxAZG94eWdlbkh0bWxHcm91cCBrZWVwZW5kCisgIHN5biByZWdpb24gZG94eWdlblNwZWNpYWxPbmVsaW5lRGVzYyAgc3RhcnQ9Ky5cKysgZW5kPSskKyBjb250YWluZWQgc2tpcHdoaXRlIGNvbnRhaW5zPWRveHlnZW5TbWFsbFNwZWNpYWwsQGRveHlnZW5IdG1sR3JvdXAga2VlcGVuZAorCisgICIgSGFuZGxlIHRoZSBtdWx0aWxpbmUgZGVzY3JpcHRpb24gZm9yIHRoZSBtdWx0aWxpbmUgdHlwZSBpZGVudGlmaWVycy4KKyAgIiBDb250aW51ZSB1bnRpbCBhbiAnZW1wdHknIGxpbmUgKGNhbiBjb250YWluIGEgJyonIGNvbnRpbnVhdGlvbikgb3IgdW50aWwgdGhlCisgICIgbmV4dCB3aG9sZS1saW5lIEAgY29tbWFuZCBcIGNvbW1hbmQuCisgIHN5biByZWdpb24gZG94eWdlblNwZWNpYWxNdWx0aWxpbmVEZXNjICBzdGFydD0rLlwrKyBza2lwPSteXHMqXChcKi9cQCFccypcKVw9XChcPFx8W0BcXF1cPFwoW3BjYmVhXVw+XHxlbVw+XHxyZWZcfGxpbmtcPlw+XHxmXCRcfFskXFwmPD4jXVwpXHxbXiBcdFxcQCpdXCkrIGVuZD0rXisgY29udGFpbmVkIGNvbnRhaW5zPWRveHlnZW5TcGVjaWFsQ29udGludWVDb21tZW50LGRveHlnZW5TbWFsbFNwZWNpYWwsZG94eWdlbkh5cGVyTGluayxkb3h5Z2VuSGFzaExpbmssQGRveHlnZW5IdG1sR3JvdXAgIHNraXB3aGl0ZSBrZWVwZW5kCisgIHN5biBtYXRjaCBkb3h5Z2VuU3BlY2lhbENvbnRpbnVlQ29tbWVudCBjb250YWluZWQgK15ccypcKi9cQCFccyorIG5leHRncm91cD1kb3h5Z2VuU3BlY2lhbCBza2lwd2hpdGUKKworICAiIEhhbmRsZSBzcGVjaWFsIGNhc2VzICAnYm9sZCcgYW5kICdncm91cCcKKyAgc3luIGtleXdvcmQgZG94eWdlbkJvbGQgY29udGFpbmVkIGJvbGQgbmV4dGdyb3VwPWRveHlnZW5TcGVjaWFsSGVhZGluZworICBzeW4ga2V5d29yZCBkb3h5Z2VuQnJpZWZXb3JkIGNvbnRhaW5lZCBicmllZiBuZXh0Z3JvdXA9ZG94eWdlbkJyaWVmTGluZSBza2lwd2hpdGUKKyAgc3luIG1hdGNoIGRveHlnZW5TcGVjaWFsSGVhZGluZyArLlwrKyBjb250YWluZWQgc2tpcHdoaXRlCisgIHN5biBrZXl3b3JkIGRveHlnZW5Hcm91cCBjb250YWluZWQgZ3JvdXAgbmV4dGdyb3VwPWRveHlnZW5Hcm91cE5hbWUgc2tpcHdoaXRlCisgIHN5biBrZXl3b3JkIGRveHlnZW5Hcm91cE5hbWUgY29udGFpbmVkICtca1wrKyBuZXh0Z3JvdXA9ZG94eWdlblNwZWNpYWxPbmVsaW5lRGVzYyBza2lwd2hpdGUKKworICAiIEhhbmRsZSBzcGVjaWFsIHN5bWJvbCBpZGVudGlmaWVycyAgQCQsIEBcLCBAJCBldGMKKyAgc3luIG1hdGNoIGRveHlnZW5TeW1ib2wgY29udGFpbmVkICtbJFxcJjw+I10rCisKKyAgIiBTaW1wbGlzdGljIGhhbmRsaW5nIG9mIGZvcm11bGEgcmVnaW9ucworICBzeW4gcmVnaW9uIGRveHlnZW5Gb3JtdWxhIGNvbnRhaW5lZCBtYXRjaGdyb3VwPWRveHlnZW5Gb3JtdWxhRW5kcyBzdGFydD0rZlwkKyBlbmQ9K1tAXFxdZlwkKyBjb250YWlucz1kb3h5Z2VuRm9ybXVsYVNwZWNpYWwsZG94eWdlbkZvcm11bGFPcGVyYXRvcgorICBzeW4gbWF0Y2ggZG94eWdlbkZvcm11bGFTcGVjaWFsIGNvbnRhaW5lZCArW0BcXF1cKGZbXiRdXHxbXmZdXCkrbWU9cysxIG5leHRncm91cD1kb3h5Z2VuRm9ybXVsYUtleXdvcmQsZG94eWdlbkZvcm11bGFFc2NhcGVkCisgIHN5biBtYXRjaCBkb3h5Z2VuRm9ybXVsYUVzY2FwZWQgY29udGFpbmVkICIuIgorICBzeW4gbWF0Y2ggZG94eWdlbkZvcm11bGFLZXl3b3JkIGNvbnRhaW5lZCAgIlthLXpdXCsiCisgIHN5biBtYXRjaCBkb3h5Z2VuRm9ybXVsYU9wZXJhdG9yIGNvbnRhaW5lZCArW19eXSsKKworICBzeW4gcmVnaW9uIGRveHlnZW5Gb3JtdWxhIGNvbnRhaW5lZCBtYXRjaGdyb3VwPWRveHlnZW5Gb3JtdWxhRW5kcyBzdGFydD0rZlxbKyBlbmQ9K1tAXFxdZl0rIGNvbnRhaW5zPWRveHlnZW5Gb3JtdWxhU3BlY2lhbCxkb3h5Z2VuRm9ybXVsYU9wZXJhdG9yLGRveHlnZW5BdG9tCisgIHN5biByZWdpb24gZG94eWdlbkF0b20gY29udGFpbmVkIHRyYW5zcGFyZW50IG1hdGNoZ3JvdXA9ZG94eWdlbkZvcm11bGFPcGVyYXRvciBzdGFydD0reysgZW5kPSt9KyBjb250YWlucz1kb3h5Z2VuQXRvbSxkb3h5Z2VuRm9ybXVsYVNwZWNpYWwsZG94eWdlbkZvcm11bGFPcGVyYXRvcgorCisgICIgQWRkIFRPRE8gaGlsaWdodGluZy4KKyAgc3luIGtleXdvcmQgZG94eWdlblRPRE8gY29udGFpbmVkIFRPRE8gUkVBRE1FIFhYWCBGSVhNRQorCisgICIgU3VwcG9ydGVkIEhUTUwgc3Vic2V0LiAgTm90IHBlcmZlY3QsIGJ1dCBva2F5LgorICBzeW4gY2FzZSBpZ25vcmUKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFRhZyBjb250YWluZWQgbWF0Y2hncm91cD1kb3h5Z2VuSHRtbENoIHN0YXJ0PStcdlw8Lz1cemUoW2JpdWFwXXxlbXxzdHJvbmd8aW1nfGJyfGNlbnRlcnxjb2RlfGRmbnxkW2xkdF18aHJ8aFswLTNdfGxpfFtvdV1sfHByZXxzbWFsbHxzdWJ8c3VwfHRhYmxlfHR0fHZhcnxjYXB0aW9ufHNyY3xhbHR8bG9uZ2Rlc2N8bmFtZXxoZWlnaHR8d2lkdGh8dXNlbWFwfGlzbWFwfGhyZWZ8dHlwZSk+KyBza2lwPStcXDxcfFw8XGtcKz1cKCJbXiJdKiJcfCdbXiddKlwpKyBlbmQ9Kz4rIGNvbnRhaW5zPWRveHlnZW5IdG1sQ21kLGRveHlnZW5Db250aW51ZUNvbW1lbnQsZG94eWdlbkh0bWxWYXIKKyAgc3luIGtleXdvcmQgZG94eWdlbkh0bWxDbWQgY29udGFpbmVkIGIgaSBlbSBzdHJvbmcgdSBpbWcgYSBiciBwIGNlbnRlciBjb2RlIGRmbiBkbCBkZCBkdCBociBoMSBoMiBoMyBsaSBvbCB1bCBwcmUgc21hbGwgc3ViIHN1cCB0YWJsZSB0dCB2YXIgY2FwdGlvbiBuZXh0Z3JvdXA9ZG94eWdlbkh0bWxWYXIgc2tpcHdoaXRlCisgIHN5biBrZXl3b3JkIGRveHlnZW5IdG1sVmFyIGNvbnRhaW5lZCBzcmMgYWx0IGxvbmdkZXNjIG5hbWUgaGVpZ2h0IHdpZHRoIHVzZW1hcCBpc21hcCBocmVmIHR5cGUgbmV4dGdyb3VwPWRveHlnZW5IdG1sRXF1IHNraXB3aGl0ZQorICBzeW4gbWF0Y2ggZG94eWdlbkh0bWxFcXUgY29udGFpbmVkICs9KyBuZXh0Z3JvdXA9ZG94eWdlbkh0bWxFeHByIHNraXB3aGl0ZQorICBzeW4gbWF0Y2ggZG94eWdlbkh0bWxFeHByIGNvbnRhaW5lZCArIlwoXFwuXHxbXiJdXCkqIlx8J1woXFwuXHxbXiddXCkqJysgbmV4dGdyb3VwPWRveHlnZW5IdG1sVmFyIHNraXB3aGl0ZQorICBzeW4gY2FzZSBtYXRjaAorICBzeW4gbWF0Y2ggZG94eWdlbkh0bWxTcGVjaWFsIGNvbnRhaW5lZCAiJlwoY29weVx8cXVvdFx8W0FFSU9VWWFlaW91eV11bWxcfFtBRUlPVVlhZWlvdXldYWN1dGVcfFtBRUlPVWFlaW91eV1ncmF2ZVx8W0FFSU9VYWVpb3V5XWNpcmNcfFtBTk9hbm9ddGlsZGVcfHN6bGlnXHxbQWFdcmluZ1x8bmJzcFx8Z3RcfGx0XHxhbXBcKTsiCisKKyAgc3luIGNsdXN0ZXIgZG94eWdlbkh0bWxHcm91cCBjb250YWlucz1kb3h5Z2VuSHRtbENvZGUsZG94eWdlbkh0bWxCb2xkLGRveHlnZW5IdG1sVW5kZXJsaW5lLGRveHlnZW5IdG1sSXRhbGljLGRveHlnZW5IdG1sU3BlY2lhbCxkb3h5Z2VuSHRtbFRhZyxkb3h5Z2VuSHRtbExpbmsKKworICBzeW4gY2x1c3RlciBkb3h5Z2VuSHRtbFRvcCBjb250YWlucz1AU3BlbGwsZG94eWdlbkh0bWxTcGVjaWFsLGRveHlnZW5IdG1sVGFnLGRveHlnZW5Db250aW51ZUNvbW1lbnQKKyAgIiBIdG1sIFN1cHBvcnQKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbExpbmsgY29udGFpbmVkIHN0YXJ0PSs8W2FBXVw+XHMqXChcblxzKlwqXHMqXClcPVwoXChuYW1lXHxocmVmXCk9XCgiW14iXSoiXHwnW14nXSonXClcKVw9XHMqPisgZW5kPSs8L1thQV0+K21lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKKyAgaGkgbGluayBkb3h5Z2VuSHRtbExpbmsgVW5kZXJsaW5lZAorCisgIHN5biByZWdpb24gZG94eWdlbkh0bWxCb2xkIGNvbnRhaW5lZCBzdGFydD0iXGM8Ylw+IiBlbmQ9IlxjPC9iPiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sQm9sZFVuZGVybGluZSxkb3h5Z2VuSHRtbEJvbGRJdGFsaWMKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbEJvbGQgY29udGFpbmVkIHN0YXJ0PSJcYzxzdHJvbmdcPiIgZW5kPSJcYzwvc3Ryb25nPiJtZT1lLTkgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sQm9sZFVuZGVybGluZSxkb3h5Z2VuSHRtbEJvbGRJdGFsaWMKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbEJvbGRVbmRlcmxpbmUgY29udGFpbmVkIHN0YXJ0PSJcYzx1XD4iIGVuZD0iXGM8L3U+Im1lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsZG94eWdlbkh0bWxCb2xkVW5kZXJsaW5lSXRhbGljCisgIHN5biByZWdpb24gZG94eWdlbkh0bWxCb2xkSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iXGM8aVw+IiBlbmQ9IlxjPC9pPiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sQm9sZEl0YWxpY1VuZGVybGluZQorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sQm9sZEl0YWxpYyBjb250YWluZWQgc3RhcnQ9IlxjPGVtXD4iIGVuZD0iXGM8L2VtPiJtZT1lLTUgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sQm9sZEl0YWxpY1VuZGVybGluZQorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZUl0YWxpYyBjb250YWluZWQgc3RhcnQ9IlxjPGlcPiIgZW5kPSJcYzwvaT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZUl0YWxpYyBjb250YWluZWQgc3RhcnQ9IlxjPGVtXD4iIGVuZD0iXGM8L2VtPiJtZT1lLTUgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wCisgIHN5biByZWdpb24gZG94eWdlbkh0bWxCb2xkSXRhbGljVW5kZXJsaW5lIGNvbnRhaW5lZCBzdGFydD0iXGM8dVw+IiBlbmQ9IlxjPC91PiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sQm9sZFVuZGVybGluZUl0YWxpYworCisgIHN5biByZWdpb24gZG94eWdlbkh0bWxVbmRlcmxpbmUgY29udGFpbmVkIHN0YXJ0PSJcYzx1XD4iIGVuZD0iXGM8L3U+Im1lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsZG94eWdlbkh0bWxVbmRlcmxpbmVCb2xkLGRveHlnZW5IdG1sVW5kZXJsaW5lSXRhbGljCisgIHN5biByZWdpb24gZG94eWdlbkh0bWxVbmRlcmxpbmVCb2xkIGNvbnRhaW5lZCBzdGFydD0iXGM8Ylw+IiBlbmQ9IlxjPC9iPiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sVW5kZXJsaW5lQm9sZEl0YWxpYworICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sVW5kZXJsaW5lQm9sZCBjb250YWluZWQgc3RhcnQ9IlxjPHN0cm9uZ1w+IiBlbmQ9IlxjPC9zdHJvbmc+Im1lPWUtOSBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsZG94eWdlbkh0bWxVbmRlcmxpbmVCb2xkSXRhbGljCisgIHN5biByZWdpb24gZG94eWdlbkh0bWxVbmRlcmxpbmVJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSJcYzxpXD4iIGVuZD0iXGM8L2k+Im1lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsaHRtVW5kZXJsaW5lSXRhbGljQm9sZAorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sVW5kZXJsaW5lSXRhbGljIGNvbnRhaW5lZCBzdGFydD0iXGM8ZW1cPiIgZW5kPSJcYzwvZW0+Im1lPWUtNSBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsaHRtVW5kZXJsaW5lSXRhbGljQm9sZAorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sVW5kZXJsaW5lSXRhbGljQm9sZCBjb250YWluZWQgc3RhcnQ9IlxjPGJcPiIgZW5kPSJcYzwvYj4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sVW5kZXJsaW5lSXRhbGljQm9sZCBjb250YWluZWQgc3RhcnQ9IlxjPHN0cm9uZ1w+IiBlbmQ9IlxjPC9zdHJvbmc+Im1lPWUtOSBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFVuZGVybGluZUJvbGRJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSJcYzxpXD4iIGVuZD0iXGM8L2k+Im1lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbFVuZGVybGluZUJvbGRJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSJcYzxlbVw+IiBlbmQ9IlxjPC9lbT4ibWU9ZS01IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAorCisgIHN5biByZWdpb24gZG94eWdlbkh0bWxJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSJcYzxpXD4iIGVuZD0iXGM8L2k+Im1lPWUtNCBjb250YWlucz1AZG94eWdlbkh0bWxUb3AsZG94eWdlbkh0bWxJdGFsaWNCb2xkLGRveHlnZW5IdG1sSXRhbGljVW5kZXJsaW5lCisgIHN5biByZWdpb24gZG94eWdlbkh0bWxJdGFsaWMgY29udGFpbmVkIHN0YXJ0PSJcYzxlbVw+IiBlbmQ9IlxjPC9lbT4ibWU9ZS01IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sSXRhbGljQm9sZCBjb250YWluZWQgc3RhcnQ9IlxjPGJcPiIgZW5kPSJcYzwvYj4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcCxkb3h5Z2VuSHRtbEl0YWxpY0JvbGRVbmRlcmxpbmUKKyAgc3luIHJlZ2lvbiBkb3h5Z2VuSHRtbEl0YWxpY0JvbGQgY29udGFpbmVkIHN0YXJ0PSJcYzxzdHJvbmdcPiIgZW5kPSJcYzwvc3Ryb25nPiJtZT1lLTkgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sSXRhbGljQm9sZFVuZGVybGluZQorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sSXRhbGljQm9sZFVuZGVybGluZSBjb250YWluZWQgc3RhcnQ9IlxjPHVcPiIgZW5kPSJcYzwvdT4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sSXRhbGljVW5kZXJsaW5lIGNvbnRhaW5lZCBzdGFydD0iXGM8dVw+IiBlbmQ9IlxjPC91PiJtZT1lLTQgY29udGFpbnM9QGRveHlnZW5IdG1sVG9wLGRveHlnZW5IdG1sSXRhbGljVW5kZXJsaW5lQm9sZAorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sSXRhbGljVW5kZXJsaW5lQm9sZCBjb250YWluZWQgc3RhcnQ9IlxjPGJcPiIgZW5kPSJcYzwvYj4ibWU9ZS00IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAorICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sSXRhbGljVW5kZXJsaW5lQm9sZCBjb250YWluZWQgc3RhcnQ9IlxjPHN0cm9uZ1w+IiBlbmQ9IlxjPC9zdHJvbmc+Im1lPWUtOSBjb250YWlucz1AZG94eWdlbkh0bWxUb3AKKworICBzeW4gcmVnaW9uIGRveHlnZW5IdG1sQ29kZSBjb250YWluZWQgc3RhcnQ9IlxjPGNvZGVcPiIgZW5kPSJcYzwvY29kZT4ibWU9ZS03IGNvbnRhaW5zPUBkb3h5Z2VuSHRtbFRvcAorCisgICIgUHJldmVudCB0aGUgZG94eWdlbiBjb250YWluZWQgbWF0Y2hlcyBmcm9tIGxlYWtpbmcgaW50byB0aGUgYyBncm91cHMuCisgIHN5biBjbHVzdGVyIGNQYXJlbkdyb3VwIGFkZD1kb3h5Z2VuLioKKyAgc3luIGNsdXN0ZXIgY1BhcmVuR3JvdXAgcmVtb3ZlPWRveHlnZW5Db21tZW50LGRveHlnZW5Db21tZW50TAorICBzeW4gY2x1c3RlciBjUHJlUHJvY0dyb3VwIGFkZD1kb3h5Z2VuLioKKyAgc3luIGNsdXN0ZXIgY011bHRpR3JvdXAgYWRkPWRveHlnZW4uKgorICBzeW4gY2x1c3RlciByY1BhcmVuR3JvdXAgYWRkPWRveHlnZW4uKgorICBzeW4gY2x1c3RlciByY1BhcmVuR3JvdXAgcmVtb3ZlPWRveHlnZW5Db21tZW50LGRveHlnZW5Db21tZW50TAorICBzeW4gY2x1c3RlciByY0dyb3VwIGFkZD1kb3h5Z2VuLioKKworICBsZXQgczpteV9zeW5jb2xvcj0wCisgIGlmICFleGlzdHMoJzpTeW5Db2xvcicpIAorICAgIGNvbW1hbmQgLW5hcmdzPSsgU3luQ29sb3IgaGkgZGVmIDxhcmdzPgorICAgIGxldCBzOm15X3N5bmNvbG9yPTEKKyAgZW5kaWYKKworICBsZXQgczpteV9zeW5saW5rPTAKKyAgaWYgIWV4aXN0cygnOlN5bkxpbmsnKQorICAgIGNvbW1hbmQgLW5hcmdzPSsgU3luTGluayBoaSBkZWYgbGluayA8YXJncz4KKyAgICBsZXQgczpteV9zeW5saW5rPTEKKyAgZW5kaWYKKworICB0cnkKKyAgICAibGV0IGRpZF9kb3h5Z2VuX3N5bnRheF9pbml0cyA9ICZiYWNrZ3JvdW5kCisgICAgaGkgZG94eWdlbl9EdW1teSBndWlmZz1ibGFjaworCisgICAgZnVuISBzOkRveHlnZW5fSGlsaWdodHNfQmFzZSgpCisgICAgICBTeW5MaW5rIGRveHlnZW5IdG1sU3BlY2lhbCBTcGVjaWFsCisgICAgICBTeW5MaW5rIGRveHlnZW5IdG1sVmFyIFR5cGUKKyAgICAgIFN5bkxpbmsgZG94eWdlbkh0bWxFeHByIFN0cmluZworCisgICAgICBTeW5MaW5rIGRveHlnZW5TbWFsbFNwZWNpYWwgU3BlY2lhbENoYXIKKworICAgICAgU3luTGluayBkb3h5Z2VuU3BlY2lhbENvZGVXb3JkIGRveHlnZW5TbWFsbFNwZWNpYWwKKyAgICAgIFN5bkxpbmsgZG94eWdlblNwZWNpYWxCb2xkV29yZCBkb3h5Z2VuU21hbGxTcGVjaWFsCisgICAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsRW1waGFzaXNlZFdvcmQgZG94eWdlblNtYWxsU3BlY2lhbAorICAgICAgU3luTGluayBkb3h5Z2VuU3BlY2lhbEFyZ3VtZW50V29yZCBkb3h5Z2VuU21hbGxTcGVjaWFsCisKKyAgICAgICIgU3luQ29sb3IgZG94eWdlbkZvcm11bGFLZXl3b3JkIGN0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrTWFnZW50YSBndWlmZz1EYXJrTWFnZW50YSBndWk9Ym9sZAorICAgICAgU3luTGluayBkb3h5Z2VuRm9ybXVsYUtleXdvcmQgS2V5d29yZAorICAgICAgIlN5bkNvbG9yIGRveHlnZW5Gb3JtdWxhRXNjYXBlZCAgY3Rlcm1mZz1EYXJrTWFnZW50YSBndWlmZz1EYXJrTWFnZW50YSBndWk9Ym9sZAorICAgICAgU3luTGluayBkb3h5Z2VuRm9ybXVsYUVzY2FwZWQgU3BlY2lhbAorICAgICAgU3luTGluayBkb3h5Z2VuRm9ybXVsYU9wZXJhdG9yIE9wZXJhdG9yCisgICAgICBTeW5MaW5rIGRveHlnZW5Gb3JtdWxhIFN0YXRlbWVudAorICAgICAgU3luTGluayBkb3h5Z2VuU3ltYm9sIENvbnN0YW50CisgICAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsIFNwZWNpYWwKKyAgICAgIFN5bkxpbmsgZG94eWdlbkZvcm11bGFTcGVjaWFsIFNwZWNpYWwKKyAgICAgICJTeW5Db2xvciBkb3h5Z2VuRm9ybXVsYVNwZWNpYWwgY3Rlcm1mZz1EYXJrQmx1ZSBndWlmZz1EYXJrQmx1ZQorICAgIGVuZGZ1bgorICAgIGNhbGwgczpEb3h5Z2VuX0hpbGlnaHRzX0Jhc2UoKQorCisgICAgZnVuISBzOkRveHlnZW5fSGlsaWdodHMoKQorICAgICAgIiBQaWNrIGEgc2Vuc2libGUgZGVmYXVsdCBmb3IgJ2NvZGV3b3JkJy4KKyAgICAgIGxldCBmb250PScnCisgICAgICBpZiBleGlzdHMoJ2c6ZG94eWdlbl9jb2Rld29yZF9mb250JykKKyAgICAgICAgaWYgZzpkb3h5Z2VuX2NvZGV3b3JkX2ZvbnQgIX4gJ1w8XGtcKz0nCisgICAgICAgICAgbGV0IGZvbnQ9J2ZvbnQ9Jy5nOmRveHlnZW5fY29kZXdvcmRfZm9udAorICAgICAgICBlbHNlCisgICAgICAgICAgbGV0IGZvbnQ9Zzpkb3h5Z2VuX2NvZGV3b3JkX2ZvbnQKKyAgICAgICAgZW5kaWYKICAgICAgIGVsc2UKLSAgICAgICAgbGV0IGZvbnQ9Zzpkb3h5Z2VuX2NvZGV3b3JkX2ZvbnQKLSAgICAgIGVuZGlmCi0gICAgZWxzZQotICAgICAgIiBUcnkgYW5kIHBpY2sgYSBmb250IChvbmx5IHNvbWUgcGxhdGZvcm1zIGhhdmUgYmVlbiB0ZXN0ZWQpLgotICAgICAgaWYgaGFzKCdndWlfcnVubmluZycpCi0gICAgICAgIGlmIGhhcygnZ3VpX2d0azInKQotICAgICAgICAgIGlmICZndWlmb250ID09ICcnCi0gICAgICAgICAgICBsZXQgZm9udD0iZm9udD0nRnJlZVNlcmlmIDEyJyIKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBsZXQgZm9udD0iZm9udD0nIi5zdWJzdGl0dXRlKCZndWlmb250LCAnXi5cey19XChbMC05XVwrXCkkJywgJ0ZyZWVTZXJpZiBcMScsJycpLiInIgotICAgICAgICAgIGVuZGlmCisgICAgICAgICIgVHJ5IGFuZCBwaWNrIGEgZm9udCAob25seSBzb21lIHBsYXRmb3JtcyBoYXZlIGJlZW4gdGVzdGVkKS4KKyAgICAgICAgaWYgaGFzKCdndWlfcnVubmluZycpCisgICAgICAgICAgaWYgaGFzKCdndWlfZ3RrMicpCisgICAgICAgICAgICBpZiAmZ3VpZm9udCA9PSAnJworICAgICAgICAgICAgICBsZXQgZm9udD0iZm9udD0nRnJlZVNlcmlmIDEyJyIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgbGV0IGZvbnQ9ImZvbnQ9JyIuc3Vic3RpdHV0ZSgmZ3VpZm9udCwgJ14uXHstfVwoWzAtOV1cK1wpJCcsICdGcmVlU2VyaWYgXDEnLCcnKS4iJyIKKyAgICAgICAgICAgIGVuZGlmCiAKLSAgICAgICAgZWxzZWlmIGhhcygnZ3VpX3dpbjMyJykgfHwgaGFzKCdndWlfd2luMTYnKSB8fCBoYXMoJ2d1aV93aW45NScpCi0gICAgICAgICAgaWYgJmd1aWZvbnQgPT0gJycKLSAgICAgICAgICAgIGxldCBmb250PSdmb250PUx1Y2lkYV9Db25zb2xlOmgxMCcKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBsZXQgZm9udD0nZm9udD0nLnN1YnN0aXR1dGUoJmd1aWZvbnQsICdeW146XSonLCAnTHVjaWRhX0NvbnNvbGUnLCcnKQorICAgICAgICAgIGVsc2VpZiBoYXMoJ2d1aV93aW4zMicpIHx8IGhhcygnZ3VpX3dpbjE2JykgfHwgaGFzKCdndWlfd2luOTUnKQorICAgICAgICAgICAgaWYgJmd1aWZvbnQgPT0gJycKKyAgICAgICAgICAgICAgbGV0IGZvbnQ9J2ZvbnQ9THVjaWRhX0NvbnNvbGU6aDEwJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBsZXQgZm9udD0nZm9udD0nLnN1YnN0aXR1dGUoJmd1aWZvbnQsICdeW146XSonLCAnTHVjaWRhX0NvbnNvbGUnLCcnKQorICAgICAgICAgICAgZW5kaWYKKyAgICAgICAgICBlbHNlaWYgaGFzKCdndWlfYXRoZW5hJykgfHwgaGFzKCdndWlfZ3RrJykgfHwgJmd1aWZvbnQ9fideXCgtW14tXVwrXClcezE0fScKKyAgICAgICAgICAgIGlmICZndWlmb250ID09ICcnCisgICAgICAgICAgICAgIGxldCBmb250PSdmb250PS1iJmgtbHVjaWRhdHlwZXdyaXRlci1tZWRpdW0tci1ub3JtYWwtKi0qLTE0MC0qLSotbS0qLWlzbzg4NTktMScKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICIgbGV0IGZvbnQ9J2ZvbnQ9Jy5zdWJzdGl0dXRlKCZndWlmb250LCdeXCgtW14tXVwrXClcezd9LVwoWzAtOV1cK1wpLionLCAnLWJcJmgtbHVjaWRhdHlwZXdyaXRlci1tZWRpdW0tci1ub3JtYWwtKi0qLVwyLSotKi1tLSotaXNvODg1OS0xJywnJykKKyAgICAgICAgICAgICIgVGhlIGFib3ZlIGxpbmUgd29ya3MsIGJ1dCBpdCBpcyBoYXJkIHRvIGV4cGVjdCB0aGUgY29tYmluYXRpb24gb2YKKyAgICAgICAgICAgICIgdGhlIHR3byBmb250cyB3aWxsIGxvb2sgZ29vZC4KKyAgICAgICAgICAgIGVuZGlmCisgICAgICAgICAgZWxzZWlmIGhhcygnZ3VpX2tkZScpCisgICAgICAgICAgICAiIGxldCBmb250PSdmb250PUJpdHN0cmVhbVwgVmVyYVwgU2Fuc1wgTW9uby8xMi8tMS81LzUwLzAvMC8wLzAvMCcKICAgICAgICAgICBlbmRpZgotICAgICAgICBlbHNlaWYgaGFzKCdndWlfYXRoZW5hJykgfHwgaGFzKCdndWlfZ3RrJykgfHwgJmd1aWZvbnQ9fideXCgtW14tXVwrXClcezE0fScKLSAgICAgICAgICBpZiAmZ3VpZm9udCA9PSAnJwotICAgICAgICAgICAgbGV0IGZvbnQ9J2ZvbnQ9LWImaC1sdWNpZGF0eXBld3JpdGVyLW1lZGl1bS1yLW5vcm1hbC0qLSotMTQwLSotKi1tLSotaXNvODg1OS0xJwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAiIGxldCBmb250PSdmb250PScuc3Vic3RpdHV0ZSgmZ3VpZm9udCwnXlwoLVteLV1cK1wpXHs3fS1cKFswLTldXCtcKS4qJywgJy1iXCZoLWx1Y2lkYXR5cGV3cml0ZXItbWVkaXVtLXItbm9ybWFsLSotKi1cMi0qLSotbS0qLWlzbzg4NTktMScsJycpCi0gICAgICAgICAgIiBUaGUgYWJvdmUgbGluZSB3b3JrcywgYnV0IGl0IGlzIGhhcmQgdG8gZXhwZWN0IHRoZSBjb21iaW5hdGlvbiBvZgotICAgICAgICAgICIgdGhlIHR3byBmb250cyB3aWxsIGxvb2sgZ29vZC4KLSAgICAgICAgICBlbmRpZgotICAgICAgICBlbHNlaWYgaGFzKCdndWlfa2RlJykKLSAgICAgICAgICAiIGxldCBmb250PSdmb250PUJpdHN0cmVhbVwgVmVyYVwgU2Fuc1wgTW9uby8xMi8tMS81LzUwLzAvMC8wLzAvMCcKICAgICAgICAgZW5kaWYKICAgICAgIGVuZGlmCi0gICAgZW5kaWYKLSAgICBpZiBmb250PT0nJyB8IGxldCBmb250PSdndWk9Ym9sZCcgfCBlbmRpZgotICAgIGV4ZSAnU3luQ29sb3IgZG94eWdlbkNvZGVXb3JkICAgICAgICAgICAgIHRlcm09Ym9sZCBjdGVybT1ib2xkICcuZm9udAotICAgIGlmIChleGlzdHMoJ2c6ZG94eWdlbl9lbmhhbmNlZF9jb2xvcicpICYmIGc6ZG94eWdlbl9lbmhhbmNlZF9jb2xvcikgfHwgKGV4aXN0cygnZzpkb3h5Z2VuX2VuaGFuY2VkX2NvbG91cicpICYmIGc6ZG94eWdlbl9lbmhhbmNlZF9jb2xvdXIpCi0gICAgICBpZiAmYmFja2dyb3VuZD09J2xpZ2h0JwotICAgICAgICBTeW5Db2xvciBkb3h5Z2VuQ29tbWVudCBjdGVybWZnPURhcmtSZWQgZ3VpZmc9RGFya1JlZAotICAgICAgICBTeW5Db2xvciBkb3h5Z2VuQnJpZWYgY3Rlcm09Ym9sZCBjdGVybWZnPUN5YW4gZ3VpZmc9RGFya0JsdWUgZ3VpPWJvbGQKLSAgICAgICAgU3luQ29sb3IgZG94eWdlbkJvZHkgY3Rlcm1mZz1EYXJrQmx1ZSBndWlmZz1EYXJrQmx1ZQotICAgICAgICBTeW5Db2xvciBkb3h5Z2VuU3BlY2lhbFR5cGVPbmVsaW5lRGVzYyBjdGVybT1ib2xkIGN0ZXJtZmc9RGFya1JlZCBndWlmZz1maXJlYnJpY2szIGd1aT1ib2xkCi0gICAgICAgIFN5bkNvbG9yIGRveHlnZW5CT3RoZXIgY3Rlcm09Ym9sZCBjdGVybWZnPURhcmtNYWdlbnRhIGd1aWZnPSNhYTUwYWEgZ3VpPWJvbGQKLSAgICAgICAgU3luQ29sb3IgZG94eWdlblBhcmFtIGN0ZXJtZmc9RGFya0dyYXkgZ3VpZmc9I2FhNTBhYQotICAgICAgICBTeW5Db2xvciBkb3h5Z2VuUGFyYW1OYW1lIGN0ZXJtPWl0YWxpYyBjdGVybWZnPURhcmtCbHVlIGd1aWZnPURlZXBTa3lCbHVlNCBndWk9aXRhbGljLGJvbGQKLSAgICAgICAgU3luQ29sb3IgZG94eWdlblNwZWNpYWxPbmVsaW5lRGVzYyBjdGVybT1ib2xkIGN0ZXJtZmc9RGFya0N5YW4gZ3VpZmc9RG9kZ2VyQmx1ZTMgZ3VpPWJvbGQKLSAgICAgICAgU3luQ29sb3IgZG94eWdlblNwZWNpYWxIZWFkaW5nIGN0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrQmx1ZSBndWlmZz1EZWVwU2t5Qmx1ZTQgZ3VpPWJvbGQKLSAgICAgICAgU3luQ29sb3IgZG94eWdlblByZXYgY3Rlcm1mZz1EYXJrR3JlZW4gZ3VpZmc9RGFya0dyZWVuCisgICAgICBpZiBmb250PT0nJyB8IGxldCBmb250PSdndWk9Ym9sZCcgfCBlbmRpZgorICAgICAgZXhlICdTeW5Db2xvciBkb3h5Z2VuQ29kZVdvcmQgICAgICAgICAgICAgdGVybT1ib2xkIGN0ZXJtPWJvbGQgJy5mb250CisgICAgICBpZiAoZXhpc3RzKCdnOmRveHlnZW5fZW5oYW5jZWRfY29sb3InKSAmJiBnOmRveHlnZW5fZW5oYW5jZWRfY29sb3IpIHx8IChleGlzdHMoJ2c6ZG94eWdlbl9lbmhhbmNlZF9jb2xvdXInKSAmJiBnOmRveHlnZW5fZW5oYW5jZWRfY29sb3VyKQorICAgICAgICBpZiAmYmFja2dyb3VuZD09J2xpZ2h0JworICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5Db21tZW50IGN0ZXJtZmc9RGFya1JlZCBndWlmZz1EYXJrUmVkCisgICAgICAgICAgU3luQ29sb3IgZG94eWdlbkJyaWVmIGN0ZXJtPWJvbGQgY3Rlcm1mZz1DeWFuIGd1aWZnPURhcmtCbHVlIGd1aT1ib2xkCisgICAgICAgICAgU3luQ29sb3IgZG94eWdlbkJvZHkgY3Rlcm1mZz1EYXJrQmx1ZSBndWlmZz1EYXJrQmx1ZQorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5TcGVjaWFsVHlwZU9uZWxpbmVEZXNjIGN0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrUmVkIGd1aWZnPWZpcmVicmljazMgZ3VpPWJvbGQKKyAgICAgICAgICBTeW5Db2xvciBkb3h5Z2VuQk90aGVyIGN0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrTWFnZW50YSBndWlmZz0jYWE1MGFhIGd1aT1ib2xkCisgICAgICAgICAgU3luQ29sb3IgZG94eWdlblBhcmFtIGN0ZXJtZmc9RGFya0dyYXkgZ3VpZmc9I2FhNTBhYQorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5QYXJhbU5hbWUgY3Rlcm09aXRhbGljIGN0ZXJtZmc9RGFya0JsdWUgZ3VpZmc9RGVlcFNreUJsdWU0IGd1aT1pdGFsaWMsYm9sZAorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5TcGVjaWFsT25lbGluZURlc2MgY3Rlcm09Ym9sZCBjdGVybWZnPURhcmtDeWFuIGd1aWZnPURvZGdlckJsdWUzIGd1aT1ib2xkCisgICAgICAgICAgU3luQ29sb3IgZG94eWdlblNwZWNpYWxIZWFkaW5nIGN0ZXJtPWJvbGQgY3Rlcm1mZz1EYXJrQmx1ZSBndWlmZz1EZWVwU2t5Qmx1ZTQgZ3VpPWJvbGQKKyAgICAgICAgICBTeW5Db2xvciBkb3h5Z2VuUHJldiBjdGVybWZnPURhcmtHcmVlbiBndWlmZz1EYXJrR3JlZW4KKyAgICAgICAgZWxzZQorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5Db21tZW50IGN0ZXJtZmc9TGlnaHRSZWQgZ3VpZmc9TGlnaHRSZWQKKyAgICAgICAgICBTeW5Db2xvciBkb3h5Z2VuQnJpZWYgY3Rlcm09Ym9sZCBjdGVybWZnPUN5YW4gY3Rlcm1iZz1kYXJrZ3JleSBndWlmZz1MaWdodEJsdWUgZ3VpPUJvbGQsSXRhbGljCisgICAgICAgICAgU3luQ29sb3IgZG94eWdlbkJvZHkgY3Rlcm1mZz1DeWFuIGd1aWZnPUxpZ2h0Qmx1ZQorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5TcGVjaWFsVHlwZU9uZWxpbmVEZXNjIGN0ZXJtPWJvbGQgY3Rlcm1mZz1SZWQgZ3VpZmc9ZmlyZWJyaWNrMyBndWk9Ym9sZAorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5CT3RoZXIgY3Rlcm09Ym9sZCBjdGVybWZnPU1hZ2VudGEgZ3VpZmc9I2FhNTBhYSBndWk9Ym9sZAorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5QYXJhbSBjdGVybWZnPUxpZ2h0R3JheSBndWlmZz1MaWdodEdyYXkKKyAgICAgICAgICBTeW5Db2xvciBkb3h5Z2VuUGFyYW1OYW1lIGN0ZXJtPWl0YWxpYyBjdGVybWZnPUxpZ2h0Qmx1ZSBndWlmZz1MaWdodEJsdWUgZ3VpPWl0YWxpYyxib2xkCisgICAgICAgICAgU3luQ29sb3IgZG94eWdlblNwZWNpYWxPbmVsaW5lRGVzYyBjdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRDeWFuIGd1aWZnPUxpZ2h0Q3lhbiBndWk9Ym9sZAorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5TcGVjaWFsSGVhZGluZyBjdGVybT1ib2xkIGN0ZXJtZmc9TGlnaHRCbHVlIGd1aWZnPUxpZ2h0Qmx1ZSBndWk9Ym9sZAorICAgICAgICAgIFN5bkNvbG9yIGRveHlnZW5QcmV2IGN0ZXJtZmc9TGlnaHRHcmVlbiBndWlmZz1MaWdodEdyZWVuCisgICAgICAgIGVuZGlmCiAgICAgICBlbHNlCi0gICAgICAgIFN5bkNvbG9yIGRveHlnZW5Db21tZW50IGN0ZXJtZmc9TGlnaHRSZWQgZ3VpZmc9TGlnaHRSZWQKLSAgICAgICAgU3luQ29sb3IgZG94eWdlbkJyaWVmIGN0ZXJtPWJvbGQgY3Rlcm1mZz1DeWFuIGN0ZXJtYmc9ZGFya2dyZXkgZ3VpZmc9TGlnaHRCbHVlIGd1aT1Cb2xkLEl0YWxpYwotICAgICAgICBTeW5Db2xvciBkb3h5Z2VuQm9keSBjdGVybWZnPUN5YW4gZ3VpZmc9TGlnaHRCbHVlCi0gICAgICAgIFN5bkNvbG9yIGRveHlnZW5TcGVjaWFsVHlwZU9uZWxpbmVEZXNjIGN0ZXJtPWJvbGQgY3Rlcm1mZz1SZWQgZ3VpZmc9ZmlyZWJyaWNrMyBndWk9Ym9sZAotICAgICAgICBTeW5Db2xvciBkb3h5Z2VuQk90aGVyIGN0ZXJtPWJvbGQgY3Rlcm1mZz1NYWdlbnRhIGd1aWZnPSNhYTUwYWEgZ3VpPWJvbGQKLSAgICAgICAgU3luQ29sb3IgZG94eWdlblBhcmFtIGN0ZXJtZmc9TGlnaHRHcmF5IGd1aWZnPUxpZ2h0R3JheQotICAgICAgICBTeW5Db2xvciBkb3h5Z2VuUGFyYW1OYW1lIGN0ZXJtPWl0YWxpYyBjdGVybWZnPUxpZ2h0Qmx1ZSBndWlmZz1MaWdodEJsdWUgZ3VpPWl0YWxpYyxib2xkCi0gICAgICAgIFN5bkNvbG9yIGRveHlnZW5TcGVjaWFsT25lbGluZURlc2MgY3Rlcm09Ym9sZCBjdGVybWZnPUxpZ2h0Q3lhbiBndWlmZz1MaWdodEN5YW4gZ3VpPWJvbGQKLSAgICAgICAgU3luQ29sb3IgZG94eWdlblNwZWNpYWxIZWFkaW5nIGN0ZXJtPWJvbGQgY3Rlcm1mZz1MaWdodEJsdWUgZ3VpZmc9TGlnaHRCbHVlIGd1aT1ib2xkCi0gICAgICAgIFN5bkNvbG9yIGRveHlnZW5QcmV2IGN0ZXJtZmc9TGlnaHRHcmVlbiBndWlmZz1MaWdodEdyZWVuCisgICAgICAgIFN5bkxpbmsgZG94eWdlbkNvbW1lbnQgU3BlY2lhbENvbW1lbnQKKyAgICAgICAgU3luTGluayBkb3h5Z2VuQnJpZWYgU3RhdGVtZW50CisgICAgICAgIFN5bkxpbmsgZG94eWdlbkJvZHkgQ29tbWVudAorICAgICAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsVHlwZU9uZWxpbmVEZXNjIFN0YXRlbWVudAorICAgICAgICBTeW5MaW5rIGRveHlnZW5CT3RoZXIgQ29uc3RhbnQKKyAgICAgICAgU3luTGluayBkb3h5Z2VuUGFyYW0gU3BlY2lhbENvbW1lbnQKKyAgICAgICAgU3luTGluayBkb3h5Z2VuUGFyYW1OYW1lIFVuZGVybGluZWQKKyAgICAgICAgU3luTGluayBkb3h5Z2VuU3BlY2lhbE9uZWxpbmVEZXNjIFN0YXRlbWVudAorICAgICAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsSGVhZGluZyBTdGF0ZW1lbnQKKyAgICAgICAgU3luTGluayBkb3h5Z2VuUHJldiBTcGVjaWFsQ29tbWVudAogICAgICAgZW5kaWYKLSAgICBlbHNlCi0gICAgICBTeW5MaW5rIGRveHlnZW5Db21tZW50IFNwZWNpYWxDb21tZW50Ci0gICAgICBTeW5MaW5rIGRveHlnZW5CcmllZiBTdGF0ZW1lbnQKLSAgICAgIFN5bkxpbmsgZG94eWdlbkJvZHkgQ29tbWVudAotICAgICAgU3luTGluayBkb3h5Z2VuU3BlY2lhbFR5cGVPbmVsaW5lRGVzYyBTdGF0ZW1lbnQKLSAgICAgIFN5bkxpbmsgZG94eWdlbkJPdGhlciBDb25zdGFudAotICAgICAgU3luTGluayBkb3h5Z2VuUGFyYW0gU3BlY2lhbENvbW1lbnQKLSAgICAgIFN5bkxpbmsgZG94eWdlblBhcmFtTmFtZSBVbmRlcmxpbmVkCi0gICAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsT25lbGluZURlc2MgU3RhdGVtZW50Ci0gICAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsSGVhZGluZyBTdGF0ZW1lbnQKLSAgICAgIFN5bkxpbmsgZG94eWdlblByZXYgU3BlY2lhbENvbW1lbnQKKyAgICBlbmRmdW4KKworICAgIGNhbGwgczpEb3h5Z2VuX0hpbGlnaHRzKCkKKworICAgICIgVGhpcyBpcyBzdGlsbCBhIHByb3Bvc2FsLCBidXQgd29uJ3QgZG8gYW55IGhhcm0uCisgICAgYXVnIGRveHlnZW5ncm91cAorICAgIGF1IQorICAgIGF1IFN5bnRheCBVc2VyQ29sb3JfcmVzZXQgbmVzdGVkIGNhbGwgczpEb3h5Z2VuX0hpbGlnaHRzX0Jhc2UoKQorICAgIGF1IFN5bnRheCBVc2VyQ29sb3Jfe29uLHJlc2V0LGVuYWJsZX0gbmVzdGVkIGNhbGwgczpEb3h5Z2VuX0hpbGlnaHRzKCkKKyAgICBhdWcgRU5ECisKKworICAgIFN5bkxpbmsgZG94eWdlbkJvZHkgICAgICAgICAgICAgICAgICAgQ29tbWVudAorICAgIFN5bkxpbmsgZG94eWdlblRPRE8gICAgICAgICAgICAgICAgICAgVG9kbworICAgIFN5bkxpbmsgZG94eWdlbk90aGVyVE9ETyAgICAgICAgICAgICAgVG9kbworICAgIFN5bkxpbmsgZG94eWdlbk90aGVyV0FSTiAgICAgICAgICAgICAgVG9kbworICAgIFN5bkxpbmsgZG94eWdlbk90aGVyQlVHICAgICAgICAgICAgICAgVG9kbworCisgICAgU3luTGluayBkb3h5Z2VuRXJyb3JTcGVjaWFsICAgICAgICAgICBFcnJvcgorICAgIFN5bkxpbmsgZG94eWdlbkVycm9yRW5kICAgICAgICAgICAgICAgRXJyb3IKKyAgICBTeW5MaW5rIGRveHlnZW5FcnJvckNvbW1lbnQgICAgICAgICAgIEVycm9yCisgICAgU3luTGluayBkb3h5Z2VuTGlua0Vycm9yICAgICAgICAgICAgICBFcnJvcgorICAgIFN5bkxpbmsgZG94eWdlbkJyaWVmU3BlY2lhbCAgICAgICAgICAgZG94eWdlblNwZWNpYWwKKyAgICBTeW5MaW5rIGRveHlnZW5IYXNoU3BlY2lhbCAgICAgICAgICAgIGRveHlnZW5TcGVjaWFsCisgICAgU3luTGluayBkb3h5Z2VuR3JvdXBEZWZpbmVTcGVjaWFsICAgICBkb3h5Z2VuU3BlY2lhbAorICAgIFN5bkxpbmsgZG94eWdlbkVuZGxpbmtTcGVjaWFsICAgICAgICAgZG94eWdlblNwZWNpYWwKKyAgICBTeW5MaW5rIGRveHlnZW5Db2RlUmVnaW9uU3BlY2lhbCAgICAgIGRveHlnZW5TcGVjaWFsCisgICAgU3luTGluayBkb3h5Z2VuVmVyYmF0aW1SZWdpb25TcGVjaWFsICBkb3h5Z2VuU3BlY2lhbAorICAgIFN5bkxpbmsgZG94eWdlbkdyb3VwRGVmaW5lICAgICAgICAgICAgZG94eWdlblBhcmFtCisKKyAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYyAgIGRveHlnZW5TcGVjaWFsT25lbGluZURlc2MKKyAgICBTeW5MaW5rIGRveHlnZW5Gb3JtdWxhRW5kcyAgICAgICAgICAgIGRveHlnZW5TcGVjaWFsCisgICAgU3luTGluayBkb3h5Z2VuQm9sZCAgICAgICAgICAgICAgICAgICBkb3h5Z2VuUGFyYW0KKyAgICBTeW5MaW5rIGRveHlnZW5CcmllZldvcmQgICAgICAgICAgICAgIGRveHlnZW5QYXJhbQorICAgIFN5bkxpbmsgZG94eWdlblJldHZhbCAgICAgICAgICAgICAgICAgZG94eWdlblBhcmFtCisgICAgU3luTGluayBkb3h5Z2VuT3RoZXIgICAgICAgICAgICAgICAgICBkb3h5Z2VuUGFyYW0KKyAgICBTeW5MaW5rIGRveHlnZW5TdGFydCAgICAgICAgICAgICAgICAgIGRveHlnZW5Db21tZW50CisgICAgU3luTGluayBkb3h5Z2VuU3RhcnQyICAgICAgICAgICAgICAgICBkb3h5Z2VuU3RhcnQKKyAgICBTeW5MaW5rIGRveHlnZW5Db21tZW50MiAgICAgICAgICAgICAgIGRveHlnZW5Db21tZW50CisgICAgU3luTGluayBkb3h5Z2VuQ29tbWVudEwgICAgICAgICAgICAgICBkb3h5Z2VuQ29tbWVudAorICAgIFN5bkxpbmsgZG94eWdlbkNvbnRpbnVlQ29tbWVudCAgICAgICAgZG94eWdlbkNvbW1lbnQKKyAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsQ29udGludWVDb21tZW50IGRveHlnZW5Db21tZW50CisgICAgU3luTGluayBkb3h5Z2VuU2tpcENvbW1lbnQgICAgICAgICAgICBkb3h5Z2VuQ29tbWVudAorICAgIFN5bkxpbmsgZG94eWdlbkVuZENvbW1lbnQgICAgICAgICAgICAgZG94eWdlbkNvbW1lbnQKKyAgICBTeW5MaW5rIGRveHlnZW5TdGFydEwgICAgICAgICAgICAgICAgIGRveHlnZW5Db21tZW50CisgICAgU3luTGluayBkb3h5Z2VuQnJpZWZFbmRDb21tZW50ICAgICAgICBkb3h5Z2VuQ29tbWVudAorICAgIFN5bkxpbmsgZG94eWdlblByZXZMICAgICAgICAgICAgICAgICAgZG94eWdlblByZXYKKyAgICBTeW5MaW5rIGRveHlnZW5CcmllZkwgICAgICAgICAgICAgICAgIGRveHlnZW5CcmllZgorICAgIFN5bkxpbmsgZG94eWdlbkJyaWVmTGluZSAgICAgICAgICAgICAgZG94eWdlbkJyaWVmCisgICAgU3luTGluayBkb3h5Z2VuSGVhZGVyTGluZSAgICAgICAgICAgICBkb3h5Z2VuU3BlY2lhbEhlYWRpbmcKKyAgICBTeW5MaW5rIGRveHlnZW5TdGFydFNraXAgICAgICAgICAgICAgIGRveHlnZW5Db250aW51ZUNvbW1lbnQKKyAgICBTeW5MaW5rIGRveHlnZW5MaW5rV29yZCAgICAgICAgICAgICAgIGRveHlnZW5QYXJhbU5hbWUKKyAgICBTeW5MaW5rIGRveHlnZW5MaW5rUmVzdCAgICAgICAgICAgICAgIGRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYworICAgIFN5bkxpbmsgZG94eWdlbkh5cGVyTGluayAgICAgICAgICAgICAgZG94eWdlbkxpbmtXb3JkCisgICAgU3luTGluayBkb3h5Z2VuSGFzaExpbmsgICAgICAgICAgICAgICBkb3h5Z2VuTGlua1dvcmQKKworICAgIFN5bkxpbmsgZG94eWdlblBhZ2UgICAgICAgICAgICAgICAgICAgZG94eWdlblNwZWNpYWwKKyAgICBTeW5MaW5rIGRveHlnZW5QYWdlUGFnZSAgICAgICAgICAgICAgIGRveHlnZW5CT3RoZXIKKyAgICBTeW5MaW5rIGRveHlnZW5QYWdlSWRlbnQgICAgICAgICAgICAgIGRveHlnZW5QYXJhbU5hbWUKKyAgICBTeW5MaW5rIGRveHlnZW5QYWdlRGVzYyAgICAgICAgICAgICAgIGRveHlnZW5TcGVjaWFsVHlwZU9uZWxpbmVEZXNjCisKKyAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsSWRlbnQgICAgICAgICAgIGRveHlnZW5QYWdlSWRlbnQKKyAgICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsU2VjdGlvbkRlc2MgICAgIGRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYworCisgICAgU3luTGluayBkb3h5Z2VuU3BlY2lhbFJlZldvcmQgICAgICAgICBkb3h5Z2VuT3RoZXIKKyAgICBTeW5MaW5rIGRveHlnZW5SZWZXb3JkICAgICAgICAgICAgICAgIGRveHlnZW5QYWdlSWRlbnQKKyAgICBTeW5MaW5rIGRveHlnZW5Db250aW51ZUxpbmtDb21tZW50ICAgIGRveHlnZW5Db21tZW50CisKKyAgICBTeW5MaW5rIGRveHlnZW5IdG1sQ2ggICAgICAgICAgICAgICAgIEZ1bmN0aW9uCisgICAgU3luTGluayBkb3h5Z2VuSHRtbENtZCAgICAgICAgICAgICAgICBTdGF0ZW1lbnQKKyAgICBTeW5MaW5rIGRveHlnZW5IdG1sQm9sZEl0YWxpY1VuZGVybGluZSAgICAgZG94eWdlbkh0bWxCb2xkVW5kZXJsaW5lSXRhbGljCisgICAgU3luTGluayBkb3h5Z2VuSHRtbFVuZGVybGluZUJvbGQgICAgICAgICAgIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZQorICAgIFN5bkxpbmsgZG94eWdlbkh0bWxVbmRlcmxpbmVJdGFsaWNCb2xkICAgICBkb3h5Z2VuSHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKKyAgICBTeW5MaW5rIGRveHlnZW5IdG1sVW5kZXJsaW5lQm9sZEl0YWxpYyAgICAgZG94eWdlbkh0bWxCb2xkVW5kZXJsaW5lSXRhbGljCisgICAgU3luTGluayBkb3h5Z2VuSHRtbEl0YWxpY1VuZGVybGluZSAgICAgICAgIGRveHlnZW5IdG1sVW5kZXJsaW5lSXRhbGljCisgICAgU3luTGluayBkb3h5Z2VuSHRtbEl0YWxpY0JvbGQgICAgICAgICAgICAgIGRveHlnZW5IdG1sQm9sZEl0YWxpYworICAgIFN5bkxpbmsgZG94eWdlbkh0bWxJdGFsaWNCb2xkVW5kZXJsaW5lICAgICBkb3h5Z2VuSHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKKyAgICBTeW5MaW5rIGRveHlnZW5IdG1sSXRhbGljVW5kZXJsaW5lQm9sZCAgICAgZG94eWdlbkh0bWxCb2xkVW5kZXJsaW5lSXRhbGljCisgICAgU3luTGluayBkb3h5Z2VuSHRtbExpbmsgICAgICAgICAgICAgICAgICAgIFVuZGVybGluZWQKKworICAgIFN5bkxpbmsgZG94eWdlblBhcmFtRGlyZWN0aW9uICAgICAgICAgICAgICBTdG9yYWdlQ2xhc3MKKworCisgICAgaWYgIWV4aXN0cygiZG94eWdlbl9teV9yZW5kZXJpbmciKSAmJiAhZXhpc3RzKCJodG1sX215X3JlbmRlcmluZyIpCisgICAgICBTeW5Db2xvciBkb3h5Z2VuQm9sZFdvcmQgICAgICAgICAgICAgdGVybT1ib2xkIGN0ZXJtPWJvbGQgZ3VpPWJvbGQKKyAgICAgIFN5bkNvbG9yIGRveHlnZW5FbXBoYXNpc2VkV29yZCAgICAgICB0ZXJtPWl0YWxpYyBjdGVybT1pdGFsaWMgZ3VpPWl0YWxpYworICAgICAgU3luTGluayAgZG94eWdlbkFyZ3VtZW50V29yZCAgICAgICAgIGRveHlnZW5FbXBoYXNpc2VkV29yZAorICAgICAgU3luTGluayAgZG94eWdlbkh0bWxDb2RlICAgICAgICAgICAgIGRveHlnZW5Db2RlV29yZAorICAgICAgU3luTGluayAgZG94eWdlbkh0bWxCb2xkICAgICAgICAgICAgIGRveHlnZW5Cb2xkV29yZAorICAgICAgU3luQ29sb3IgZG94eWdlbkh0bWxCb2xkVW5kZXJsaW5lICAgICAgIHRlcm09Ym9sZCx1bmRlcmxpbmUgY3Rlcm09Ym9sZCx1bmRlcmxpbmUgZ3VpPWJvbGQsdW5kZXJsaW5lCisgICAgICBTeW5Db2xvciBkb3h5Z2VuSHRtbEJvbGRJdGFsaWMgICAgICAgICAgdGVybT1ib2xkLGl0YWxpYyBjdGVybT1ib2xkLGl0YWxpYyBndWk9Ym9sZCxpdGFsaWMKKyAgICAgIFN5bkNvbG9yIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZUl0YWxpYyB0ZXJtPWJvbGQsaXRhbGljLHVuZGVybGluZSBjdGVybT1ib2xkLGl0YWxpYyx1bmRlcmxpbmUgZ3VpPWJvbGQsaXRhbGljLHVuZGVybGluZQorICAgICAgU3luQ29sb3IgZG94eWdlbkh0bWxVbmRlcmxpbmUgICAgICAgIHRlcm09dW5kZXJsaW5lIGN0ZXJtPXVuZGVybGluZSBndWk9dW5kZXJsaW5lCisgICAgICBTeW5Db2xvciBkb3h5Z2VuSHRtbFVuZGVybGluZUl0YWxpYyAgdGVybT1pdGFsaWMsdW5kZXJsaW5lIGN0ZXJtPWl0YWxpYyx1bmRlcmxpbmUgZ3VpPWl0YWxpYyx1bmRlcmxpbmUKKyAgICAgIFN5bkNvbG9yIGRveHlnZW5IdG1sSXRhbGljICAgICAgICAgICB0ZXJtPWl0YWxpYyBjdGVybT1pdGFsaWMgZ3VpPWl0YWxpYwogICAgIGVuZGlmCi0gIGVuZGZ1bgotICBmdW4hIHM6RG94eWdlbl9SZXNldFN5bnRheCgpCi0gICAgaWYgZXhpc3RzKCJkaWRfZG94eWdlbl9zeW50YXhfaW5pdHMiKQotICAgICAgdW5sZXQgZGlkX2RveHlnZW5fc3ludGF4X2luaXRzCi0gICAgZW5kaWYKLSAgZW5kZnVuCiAKLSAgY2FsbCBzOkRveHlnZW5fSGlsaWdodHMoKQotICAiIFRoaXMgaXMgc3RpbGwgYSBwcm9wb3NhbCwgYnV0IHdvbid0IGRvIGFueSBoYXJtLgotICBhdSBTeW50YXggVXNlckNvbG9yX3Jlc2V0IG5lc3RlZCBjYWxsIHM6RG94eWdlbl9IaWxpZ2h0c19CYXNlKCkKLSAgYXUgU3ludGF4IFVzZXJDb2xvcl97b24scmVzZXQsZW5hYmxlfSBuZXN0ZWQgY2FsbCBzOkRveHlnZW5fSGlsaWdodHMoKQotICAiYXUgVXNlciBTeW50YXhfVXNlckNvbG9yX29mZiBuZXN0ZWQgY2FsbCBzOkRveHlnZW5fUmVzZXRTeW50YXgoKQorICBmaW5hbGx5CisgICAgaWYgczpteV9zeW5saW5rIHwgZGVsY29tbWFuZCBTeW5MaW5rIHwgZW5kaWYKKyAgICBpZiBzOm15X3N5bmNvbG9yIHwgZGVsY29tbWFuZCBTeW5Db2xvciB8IGVuZGlmCisgIGVuZHRyeQogCi0KLSAgU3luTGluayBkb3h5Z2VuQm9keSAgICAgICAgICAgICAgICAgICBDb21tZW50Ci0gIFN5bkxpbmsgZG94eWdlblRPRE8gICAgICAgICAgICAgICAgICAgVG9kbwotICBTeW5MaW5rIGRveHlnZW5PdGhlclRPRE8gICAgICAgICAgICAgIFRvZG8KLSAgU3luTGluayBkb3h5Z2VuT3RoZXJXQVJOICAgICAgICAgICAgICBUb2RvCi0gIFN5bkxpbmsgZG94eWdlbk90aGVyQlVHICAgICAgICAgICAgICAgVG9kbwotCi0gIFN5bkxpbmsgZG94eWdlbkVycm9yU3BlY2lhbCAgICAgICAgICAgRXJyb3IKLSAgU3luTGluayBkb3h5Z2VuRXJyb3JFbmQgICAgICAgICAgICAgICBFcnJvcgotICBTeW5MaW5rIGRveHlnZW5FcnJvckNvbW1lbnQgICAgICAgICAgIEVycm9yCi0gIFN5bkxpbmsgZG94eWdlbkxpbmtFcnJvciAgICAgICAgICAgICAgRXJyb3IKLSAgU3luTGluayBkb3h5Z2VuQnJpZWZTcGVjaWFsICAgICAgICAgICBkb3h5Z2VuU3BlY2lhbAotICBTeW5MaW5rIGRveHlnZW5IYXNoU3BlY2lhbCAgICAgICAgICAgIGRveHlnZW5TcGVjaWFsCi0gIFN5bkxpbmsgZG94eWdlbkdyb3VwRGVmaW5lU3BlY2lhbCAgICAgZG94eWdlblNwZWNpYWwKLSAgU3luTGluayBkb3h5Z2VuRW5kbGlua1NwZWNpYWwgICAgICAgICBkb3h5Z2VuU3BlY2lhbAotICBTeW5MaW5rIGRveHlnZW5Db2RlUmVnaW9uU3BlY2lhbCAgICAgIGRveHlnZW5TcGVjaWFsCi0gIFN5bkxpbmsgZG94eWdlblZlcmJhdGltUmVnaW9uU3BlY2lhbCAgZG94eWdlblNwZWNpYWwKLSAgU3luTGluayBkb3h5Z2VuR3JvdXBEZWZpbmUgICAgICAgICAgICBkb3h5Z2VuUGFyYW0KLQotICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYyAgIGRveHlnZW5TcGVjaWFsT25lbGluZURlc2MKLSAgU3luTGluayBkb3h5Z2VuRm9ybXVsYUVuZHMgICAgICAgICAgICBkb3h5Z2VuU3BlY2lhbAotICBTeW5MaW5rIGRveHlnZW5Cb2xkICAgICAgICAgICAgICAgICAgIGRveHlnZW5QYXJhbQotICBTeW5MaW5rIGRveHlnZW5CcmllZldvcmQgICAgICAgICAgICAgIGRveHlnZW5QYXJhbQotICBTeW5MaW5rIGRveHlnZW5SZXR2YWwgICAgICAgICAgICAgICAgIGRveHlnZW5QYXJhbQotICBTeW5MaW5rIGRveHlnZW5PdGhlciAgICAgICAgICAgICAgICAgIGRveHlnZW5QYXJhbQotICBTeW5MaW5rIGRveHlnZW5TdGFydCAgICAgICAgICAgICAgICAgIGRveHlnZW5Db21tZW50Ci0gIFN5bkxpbmsgZG94eWdlblN0YXJ0MiAgICAgICAgICAgICAgICAgZG94eWdlblN0YXJ0Ci0gIFN5bkxpbmsgZG94eWdlbkNvbW1lbnQyICAgICAgICAgICAgICAgZG94eWdlbkNvbW1lbnQKLSAgU3luTGluayBkb3h5Z2VuQ29tbWVudEwgICAgICAgICAgICAgICBkb3h5Z2VuQ29tbWVudAotICBTeW5MaW5rIGRveHlnZW5Db250aW51ZUNvbW1lbnQgICAgICAgIGRveHlnZW5Db21tZW50Ci0gIFN5bkxpbmsgZG94eWdlblNwZWNpYWxDb250aW51ZUNvbW1lbnQgZG94eWdlbkNvbW1lbnQKLSAgU3luTGluayBkb3h5Z2VuU2tpcENvbW1lbnQgICAgICAgICAgICBkb3h5Z2VuQ29tbWVudAotICBTeW5MaW5rIGRveHlnZW5FbmRDb21tZW50ICAgICAgICAgICAgIGRveHlnZW5Db21tZW50Ci0gIFN5bkxpbmsgZG94eWdlblN0YXJ0TCAgICAgICAgICAgICAgICAgZG94eWdlbkNvbW1lbnQKLSAgU3luTGluayBkb3h5Z2VuQnJpZWZFbmRDb21tZW50ICAgICAgICBkb3h5Z2VuQ29tbWVudAotICBTeW5MaW5rIGRveHlnZW5QcmV2TCAgICAgICAgICAgICAgICAgIGRveHlnZW5QcmV2Ci0gIFN5bkxpbmsgZG94eWdlbkJyaWVmTCAgICAgICAgICAgICAgICAgZG94eWdlbkJyaWVmCi0gIFN5bkxpbmsgZG94eWdlbkJyaWVmTGluZSAgICAgICAgICAgICAgZG94eWdlbkJyaWVmCi0gIFN5bkxpbmsgZG94eWdlbkhlYWRlckxpbmUgICAgICAgICAgICAgZG94eWdlblNwZWNpYWxIZWFkaW5nCi0gIFN5bkxpbmsgZG94eWdlblN0YXJ0U2tpcCAgICAgICAgICAgICAgZG94eWdlbkNvbnRpbnVlQ29tbWVudAotICBTeW5MaW5rIGRveHlnZW5MaW5rV29yZCAgICAgICAgICAgICAgIGRveHlnZW5QYXJhbU5hbWUKLSAgU3luTGluayBkb3h5Z2VuTGlua1Jlc3QgICAgICAgICAgICAgICBkb3h5Z2VuU3BlY2lhbE11bHRpbGluZURlc2MKLSAgU3luTGluayBkb3h5Z2VuSHlwZXJMaW5rICAgICAgICAgICAgICBkb3h5Z2VuTGlua1dvcmQKLSAgU3luTGluayBkb3h5Z2VuSGFzaExpbmsgICAgICAgICAgICAgICBkb3h5Z2VuTGlua1dvcmQKLQotICBTeW5MaW5rIGRveHlnZW5QYWdlICAgICAgICAgICAgICAgICAgIGRveHlnZW5TcGVjaWFsCi0gIFN5bkxpbmsgZG94eWdlblBhZ2VQYWdlICAgICAgICAgICAgICAgZG94eWdlbkJPdGhlcgotICBTeW5MaW5rIGRveHlnZW5QYWdlSWRlbnQgICAgICAgICAgICAgIGRveHlnZW5QYXJhbU5hbWUKLSAgU3luTGluayBkb3h5Z2VuUGFnZURlc2MgICAgICAgICAgICAgICBkb3h5Z2VuU3BlY2lhbFR5cGVPbmVsaW5lRGVzYwotCi0gIFN5bkxpbmsgZG94eWdlblNwZWNpYWxJZGVudCAgICAgICAgICAgZG94eWdlblBhZ2VJZGVudAotICBTeW5MaW5rIGRveHlnZW5TcGVjaWFsU2VjdGlvbkRlc2MgICAgIGRveHlnZW5TcGVjaWFsTXVsdGlsaW5lRGVzYwotCi0gIFN5bkxpbmsgZG94eWdlblNwZWNpYWxSZWZXb3JkICAgICAgICAgZG94eWdlbk90aGVyCi0gIFN5bkxpbmsgZG94eWdlblJlZldvcmQgICAgICAgICAgICAgICAgZG94eWdlblBhZ2VJZGVudAotICBTeW5MaW5rIGRveHlnZW5Db250aW51ZUxpbmtDb21tZW50ICAgIGRveHlnZW5Db21tZW50Ci0KLSAgU3luTGluayBkb3h5Z2VuSHRtbENoICAgICAgICAgICAgICAgICBGdW5jdGlvbgotICBTeW5MaW5rIGRveHlnZW5IdG1sQ21kICAgICAgICAgICAgICAgIFN0YXRlbWVudAotICBTeW5MaW5rIGRveHlnZW5IdG1sQm9sZEl0YWxpY1VuZGVybGluZSAgICAgZG94eWdlbkh0bWxCb2xkVW5kZXJsaW5lSXRhbGljCi0gIFN5bkxpbmsgZG94eWdlbkh0bWxVbmRlcmxpbmVCb2xkICAgICAgICAgICBkb3h5Z2VuSHRtbEJvbGRVbmRlcmxpbmUKLSAgU3luTGluayBkb3h5Z2VuSHRtbFVuZGVybGluZUl0YWxpY0JvbGQgICAgIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZUl0YWxpYwotICBTeW5MaW5rIGRveHlnZW5IdG1sVW5kZXJsaW5lQm9sZEl0YWxpYyAgICAgZG94eWdlbkh0bWxCb2xkVW5kZXJsaW5lSXRhbGljCi0gIFN5bkxpbmsgZG94eWdlbkh0bWxJdGFsaWNVbmRlcmxpbmUgICAgICAgICBkb3h5Z2VuSHRtbFVuZGVybGluZUl0YWxpYwotICBTeW5MaW5rIGRveHlnZW5IdG1sSXRhbGljQm9sZCAgICAgICAgICAgICAgZG94eWdlbkh0bWxCb2xkSXRhbGljCi0gIFN5bkxpbmsgZG94eWdlbkh0bWxJdGFsaWNCb2xkVW5kZXJsaW5lICAgICBkb3h5Z2VuSHRtbEJvbGRVbmRlcmxpbmVJdGFsaWMKLSAgU3luTGluayBkb3h5Z2VuSHRtbEl0YWxpY1VuZGVybGluZUJvbGQgICAgIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZUl0YWxpYwotICBTeW5MaW5rIGRveHlnZW5IdG1sTGluayAgICAgICAgICAgICAgICAgICAgVW5kZXJsaW5lZAotCi0gIFN5bkxpbmsgZG94eWdlblBhcmFtRGlyZWN0aW9uICAgICAgICAgICAgICBTdG9yYWdlQ2xhc3MKLQotCi0gIGlmICFleGlzdHMoImRveHlnZW5fbXlfcmVuZGVyaW5nIikgJiYgIWV4aXN0cygiaHRtbF9teV9yZW5kZXJpbmciKQotICAgIFN5bkNvbG9yIGRveHlnZW5Cb2xkV29yZCAgICAgICAgICAgICB0ZXJtPWJvbGQgY3Rlcm09Ym9sZCBndWk9Ym9sZAotICAgIFN5bkNvbG9yIGRveHlnZW5FbXBoYXNpc2VkV29yZCAgICAgICB0ZXJtPWl0YWxpYyBjdGVybT1pdGFsaWMgZ3VpPWl0YWxpYwotICAgIFN5bkxpbmsgIGRveHlnZW5Bcmd1bWVudFdvcmQgICAgICAgICBkb3h5Z2VuRW1waGFzaXNlZFdvcmQKLSAgICBTeW5MaW5rICBkb3h5Z2VuSHRtbENvZGUgICAgICAgICAgICAgZG94eWdlbkNvZGVXb3JkCi0gICAgU3luTGluayAgZG94eWdlbkh0bWxCb2xkICAgICAgICAgICAgIGRveHlnZW5Cb2xkV29yZAotICAgIFN5bkNvbG9yIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZSAgICAgICB0ZXJtPWJvbGQsdW5kZXJsaW5lIGN0ZXJtPWJvbGQsdW5kZXJsaW5lIGd1aT1ib2xkLHVuZGVybGluZQotICAgIFN5bkNvbG9yIGRveHlnZW5IdG1sQm9sZEl0YWxpYyAgICAgICAgICB0ZXJtPWJvbGQsaXRhbGljIGN0ZXJtPWJvbGQsaXRhbGljIGd1aT1ib2xkLGl0YWxpYwotICAgIFN5bkNvbG9yIGRveHlnZW5IdG1sQm9sZFVuZGVybGluZUl0YWxpYyB0ZXJtPWJvbGQsaXRhbGljLHVuZGVybGluZSBjdGVybT1ib2xkLGl0YWxpYyx1bmRlcmxpbmUgZ3VpPWJvbGQsaXRhbGljLHVuZGVybGluZQotICAgIFN5bkNvbG9yIGRveHlnZW5IdG1sVW5kZXJsaW5lICAgICAgICB0ZXJtPXVuZGVybGluZSBjdGVybT11bmRlcmxpbmUgZ3VpPXVuZGVybGluZQotICAgIFN5bkNvbG9yIGRveHlnZW5IdG1sVW5kZXJsaW5lSXRhbGljICB0ZXJtPWl0YWxpYyx1bmRlcmxpbmUgY3Rlcm09aXRhbGljLHVuZGVybGluZSBndWk9aXRhbGljLHVuZGVybGluZQotICAgIFN5bkNvbG9yIGRveHlnZW5IdG1sSXRhbGljICAgICAgICAgICB0ZXJtPWl0YWxpYyBjdGVybT1pdGFsaWMgZ3VpPWl0YWxpYworICBpZiAmc3ludGF4PT0naWRsJworICAgIHN5biBjbHVzdGVyIGlkbENvbW1lbnRhYmxlIGFkZD1kb3h5Z2VuQ29tbWVudCxkb3h5Z2VuQ29tbWVudEwKICAgZW5kaWYKLSAgZGVsY29tbWFuZCBTeW5MaW5rCi0gIGRlbGNvbW1hbmQgU3luQ29sb3IKLWVuZGlmCiAKLWlmICZzeW50YXg9PSdpZGwnCi0gIHN5biBjbHVzdGVyIGlkbENvbW1lbnRhYmxlIGFkZD1kb3h5Z2VuQ29tbWVudCxkb3h5Z2VuQ29tbWVudEwKLWVuZGlmCisgICJzeW4gc3luYyBjbGVhcgorICAic3luIHN5bmMgbWF4bGluZXM9NTAwCisgICJzeW4gc3luYyBtaW5saW5lcz01MAorICBzeW4gc3luYyBtYXRjaCBkb3h5Z2VuQ29tbWVudCBncm91cHRoZXJlIGNDb21tZW50ICIvXEA8IS9cKiIKKyAgc3luIHN5bmMgbWF0Y2ggZG94eWdlblN5bmNDb21tZW50IGdyb3VwaGVyZSBkb3h5Z2VuQ29tbWVudCAiL1xAPCEvXCpbKiFdIgorICAic3luIHN5bmMgbWF0Y2ggZG94eWdlblN5bmNDb21tZW50IGdyb3VwaGVyZSBkb3h5Z2VuQ29tbWVudCAiL1wqWyohXSIgY29udGFpbnM9ZG94eWdlblN0YXJ0LGRveHlnZW5UT0RPIGtlZXBlbmQKKyAgc3luIHN5bmMgbWF0Y2ggZG94eWdlblN5bmNFbmRDb21tZW50IGdyb3VwdGhlcmUgTk9ORSAiXCovIgogCi0ic3luIHN5bmMgY2xlYXIKLSJzeW4gc3luYyBtYXhsaW5lcz01MDAKLSJzeW4gc3luYyBtaW5saW5lcz01MAotaWYgdjp2ZXJzaW9uID49IDYwMAotc3luIHN5bmMgbWF0Y2ggZG94eWdlbkNvbW1lbnQgZ3JvdXB0aGVyZSBjQ29tbWVudCAiL1xAPCEvXCoiCi1zeW4gc3luYyBtYXRjaCBkb3h5Z2VuU3luY0NvbW1lbnQgZ3JvdXBoZXJlIGRveHlnZW5Db21tZW50ICIvXEA8IS9cKlsqIV0iCi1lbHNlCi1zeW4gc3luYyBtYXRjaCBkb3h5Z2VuY0NvbW1lbnQgZ3JvdXB0aGVyZSBjQ29tbWVudCAiL1wqIgotc3luIHN5bmMgbWF0Y2ggZG94eWdlblN5bmNDb21tZW50IGdyb3VwaGVyZSBkb3h5Z2VuQ29tbWVudCAiL1wqWyohXSIKLWVuZGlmCi0ic3luIHN5bmMgbWF0Y2ggZG94eWdlblN5bmNDb21tZW50IGdyb3VwaGVyZSBkb3h5Z2VuQ29tbWVudCAiL1wqWyohXSIgY29udGFpbnM9ZG94eWdlblN0YXJ0LGRveHlnZW5UT0RPIGtlZXBlbmQKLXN5biBzeW5jIG1hdGNoIGRveHlnZW5TeW5jRW5kQ29tbWVudCBncm91cHRoZXJlIE5PTkUgIlwqLyIKKyAgaWYgIWV4aXN0cygnYjpjdXJyZW50X3N5bnRheCcpCisgICAgbGV0IGI6Y3VycmVudF9zeW50YXggPSAiZG94eWdlbiIKKyAgZWxzZQorICAgIGxldCBiOmN1cnJlbnRfc3ludGF4ID0gYjpjdXJyZW50X3N5bnRheC4nLmRveHlnZW4nCisgIGVuZGlmCiAKLWlmICFleGlzdHMoJ2I6Y3VycmVudF9zeW50YXgnKQotICBsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJkb3h5Z2VuIgotZWxzZQotICBsZXQgYjpjdXJyZW50X3N5bnRheCA9IGI6Y3VycmVudF9zeW50YXguJy5kb3h5Z2VuJwotZW5kaWYKK2ZpbmFsbHkKKyAgbGV0ICZjcG8gPSBzOmNwb19zYXZlCisgIHVubGV0IHM6Y3BvX3NhdmUKK2VuZHRyeQogCi1sZXQgJmNwbyA9IHM6Y3BvX3NhdmUKLXVubGV0IHM6Y3BvX3NhdmUKICIgdmltOmV0IHN3PTIgc3RzPTIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L211dHRyYy52aW0gYi9ydW50aW1lL3N5bnRheC9tdXR0cmMudmltCmluZGV4IDRhMWYxYTkuLmE5NWZlY2EgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L211dHRyYy52aW0KKysrIGIvcnVudGltZS9zeW50YXgvbXV0dHJjLnZpbQpAQCAtMSw5ICsxLDE4IEBACiAiIFZpbSBzeW50YXggZmlsZQogIiBMYW5ndWFnZToJTXV0dCBzZXR1cCBmaWxlcwotIiBNYWludGFpbmVyOglQcmViZW4gJ1BlcHBlJyBHdWxkYmVyZyA8cGVwcGUtdmltQHdpZWxkZXJzLm9yZz4KKyIgTWFpbnRhaW5lcjogICBEZWJpYW4gVklNIE1haW50YWluZXJzIDxwa2ctdmltLW1haW50YWluZXJzQGxpc3RzLmFsaW90aC5kZWJpYW4ub3JnPgorIiBGb3JtZXIgTWFpbnRhaW5lcjogUHJlYmVuICdQZXBwZScgR3VsZGJlcmcgPHBlcHBlLXZpbUB3aWVsZGVycy5vcmc+CiAiIENvbnRyaWJ1dG9yOglHYXJ5IEpvaG5zb24gPGdhcnlqb2huQHNway5hZ2lsZW50LmNvbT4KLSIgTGFzdCBDaGFuZ2U6CTI3IE1heSAyMDA0CisiIExhc3QgQ2hhbmdlOgkkTGFzdENoYW5nZWREYXRlOiAyMDA2LTA0LTE2IDIyOjA2OjQwIC0wNDAwIChkb20sIDE2IGFwciAyMDA2KSAkCisiIFVSTDogaHR0cDovL3N2bi5kZWJpYW4ub3JnL3dzdm4vcGtnLXZpbS90cnVuay9ydW50aW1lL3N5bnRheC9tdXR0cmMudmltP29wPWZpbGUmcmV2PTAmc2M9MAorIgorIiBYWFggVGhpcyBmaWxlIGlzIGluIG5lZWQgb2YgYSBuZXcgbWFpbnRhaW5lciwgRGViaWFuIFZJTSBNYWludGFpbmVycyBtYWludGFpbgorIiAgICAgaXQgb25seSBiZWNhdXNlIHBhdGNoZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBmb3IgaXQgYnkgRGViaWFuIHVzZXJzIGFuZCB0aGUKKyIgICAgIGZvcm1lciBtYWludGFpbmVyIHdhcyBNSUEgKE1pc3NpbmcgSW4gQWN0aW9uKSwgdGFraW5nIG92ZXIgaXRzCisiICAgICBtYWludGVuYW5jZSB3YXMgdGh1cyB0aGUgb25seSB3YXkgdG8gaW5jbHVkZSB0aG9zZSBwYXRjaGVzLgorIiAgICAgSWYgeW91IGNhcmUgYWJvdXQgdGhpcyBmaWxlLCBhbmQgaGF2ZSB0aW1lIHRvIG1haW50YWluIGl0IHBsZWFzZSBkbyBzbyEKIAorIiBYWFggb3V0ZGF0ZWQgY29tbWVudAogIiBUaGlzIGZpbGUgY292ZXJzIG11dHQgdmVyc2lvbiAxLjQuMi4xaQogCiAiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwpAQCAtMTIwLDYgKzEyOSw4IEBACiBzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZzdGF0dXNfb25fdG9wIGludnN0cmljdF90aHJlYWRzIGludnN1c3BlbmQgaW52dGV4dF9mbG93ZWQgaW52dGhvcm91Z2hfc2VhcmNoCiBzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZ0aHJlYWRfcmVjZWl2ZWQgaW52dGlsZGUgaW52dW5jb2xsYXBzZV9qdW1wIGludnVzZV84Yml0bWltZSBpbnZ1c2VfZG9tYWluIGludnVzZV9mcm9tCiBzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBpbnZ1c2VfaXB2NiBpbnZ1c2VyX2FnZW50IGludndhaXRfa2V5IGludndlZWQgaW52d3JhcF9zZWFyY2ggaW52d3JpdGVfYmNjCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sCWNvbnRhaW5lZCBjcnlwdF9hdXRvc2lnbiBjcnlwdF9hdXRvZW5jcnlwdCB4dGVybV9zZXRfdGl0bGVzCitzeW4ga2V5d29yZCBtdXR0cmNWYXJCb29sICAgICAgIGNvbnRhaW5lZCBtYWlsZGlyX2hlYWRlcl9jYWNoZV92ZXJpZnkKIAogc3luIGtleXdvcmQgbXV0dHJjVmFyUXVhZAljb250YWluZWQgYWJvcnRfbm9zdWJqZWN0IGFib3J0X3VubW9kaWZpZWQgY29weSBkZWxldGUgaG9ub3JfZm9sbG93dXBfdG8gaW5jbHVkZSBtaW1lX2ZvcndhcmQKIHN5biBrZXl3b3JkIG11dHRyY1ZhclF1YWQJY29udGFpbmVkIG1pbWVfZm9yd2FyZF9yZXN0IG1pbWVfZndkIG1vdmUgcGdwX2NyZWF0ZV90cmFkaXRpb25hbCBwZ3BfdmVyaWZ5X3NpZyBwb3BfZGVsZXRlCkBAIC0xMzksNyArMTUwLDcgQEAKIHN5biBrZXl3b3JkIG11dHRyY1Zhck51bQljb250YWluZWQgcGdwX3RpbWVvdXQgcG9wX2NoZWNraW50ZXJ2YWwgcmVhZF9pbmMgc2NvcmVfdGhyZXNob2xkX2RlbGV0ZSBzY29yZV90aHJlc2hvbGRfZmxhZwogc3luIGtleXdvcmQgbXV0dHJjVmFyTnVtCWNvbnRhaW5lZCBzY29yZV90aHJlc2hvbGRfcmVhZCBzZW5kbWFpbF93YWl0IHNsZWVwX3RpbWUgdGltZW91dCB3cmFwbWFyZ2luIHdyaXRlX2luYwogCi1zeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIGFsaWFzX2ZpbGUgYWxpYXNfZm9ybWF0IGFsdGVybmF0ZXMgYXR0YWNoX2Zvcm1hdCBhdHRhY2hfc2VwIGF0dHJpYnV0aW9uIGNlcnRpZmljYXRlX2ZpbGUKK3N5biBrZXl3b3JkIG11dHRyY1ZhclN0cgljb250YWluZWQgYWxpYXNfZmlsZSBhbGlhc19mb3JtYXQgYXR0YWNoX2Zvcm1hdCBhdHRhY2hfc2VwIGF0dHJpYnV0aW9uIGNlcnRpZmljYXRlX2ZpbGUKIHN5biBrZXl3b3JkIG11dHRyY1ZhclN0cgljb250YWluZWQgY2hhcnNldCBjb21wb3NlX2Zvcm1hdCBkYXRlX2Zvcm1hdCBkZWZhdWx0X2hvb2sgZGlzcGxheV9maWx0ZXIgZG90bG9ja19wcm9ncmFtIGRzbl9ub3RpZnkKIHN5biBrZXl3b3JkIG11dHRyY1ZhclN0cgljb250YWluZWQgZHNuX3JldHVybiBlZGl0b3IgZW50cm9weV9maWxlIGVzY2FwZSBmb2xkZXIgZm9sZGVyX2Zvcm1hdCBmb3J3X2Zvcm1hdCBmb3J3YXJkX2Zvcm1hdAogc3luIGtleXdvcmQgbXV0dHJjVmFyU3RyCWNvbnRhaW5lZCBmcm9tIGdlY29zX21hc2sgaGRyX2Zvcm1hdCBob3N0bmFtZSBpbWFwX2F1dGhlbnRpY2F0b3JzIGltYXBfZGVsaW1fY2hhcnMKQEAgLTE1NCw2ICsxNjUsNyBAQAogc3luIGtleXdvcmQgbXV0dHJjVmFyU3RyCWNvbnRhaW5lZCBwb3N0cG9uZWQgcHJlY29ubmVjdCBwcmludF9jbWQgcHJpbnRfY29tbWFuZCBxdWVyeV9jb21tYW5kIHF1b3RlX3JlZ2V4cCByZWFsbmFtZSByZWNvcmQKIHN5biBrZXl3b3JkIG11dHRyY1ZhclN0cgljb250YWluZWQgcmVwbHlfcmVnZXhwIHNlbmRfY2hhcnNldCBzZW5kbWFpbCBzaGVsbCBzaWduYXR1cmUgc2ltcGxlX3NlYXJjaCBzbWlsZXlzIHNvcnQgc29ydF9hbGlhcwogc3luIGtleXdvcmQgbXV0dHJjVmFyU3RyCWNvbnRhaW5lZCBzb3J0X2F1eCBzb3J0X2Jyb3dzZXIgc3Bvb2xmaWxlIHN0YXR1c19jaGFycyBzdGF0dXNfZm9ybWF0IHRtcGRpciB0b19jaGFycyB0dW5uZWwgdmlzdWFsCitzeW4ga2V5d29yZCBtdXR0cmNWYXJTdHIJY29udGFpbmVkIGhlYWRlcl9jYWNoZSBoZWFkZXJfY2FjaGVfcGFnZXNpemUgCiAKIHN5biBrZXl3b3JkIG11dHRyY01lbnUJCWNvbnRhaW5lZCBhbGlhcyBhdHRhY2ggYnJvd3NlciBjb21wb3NlIGVkaXRvciBpbmRleCBwYWdlciBwb3N0cG9uZSBwZ3AgbWl4IHF1ZXJ5IGdlbmVyaWMKIApAQCAtMTYxLDYgKzE3Myw3IEBACiBzeW4ga2V5d29yZCBtdXR0cmNDb21tYW5kCWZvbGRlci1ob29rIGhkcl9vcmRlciBpY29udi1ob29rIGlnbm9yZSBsaXN0cyBtYWlsYm94ZXMgbWVzc2FnZS1ob29rIG1ib3gtaG9vayBteV9oZHIKIHN5biBrZXl3b3JkIG11dHRyY0NvbW1hbmQJcGdwLWhvb2sgcHVzaCBzYXZlLWhvb2sgc2NvcmUgc2VuZC1ob29rIHNvdXJjZSBzdWJzY3JpYmUgdW5hbGlhcyB1bmF1dG9fdmlldyB1bmhkcl9vcmRlcgogc3luIGtleXdvcmQgbXV0dHJjQ29tbWFuZAl1bmhvb2sgdW5pZ25vcmUgdW5saXN0cyB1bm1vbm8gdW5teV9oZHIgdW5zY29yZSB1bnN1YnNjcmliZQorc3luIGtleXdvcmQgbXV0dHJjQ29tbWFuZAlzZW5kMi1ob29rIGFsdGVybmF0ZXMgdW5hbHRlcm5hdGVzCiAKIHN5biBrZXl3b3JkIG11dHRyY1NldAkJc2V0ICAgICBza2lwd2hpdGUgbmV4dGdyb3VwPW11dHRyY1Zhci4qCiBzeW4ga2V5d29yZCBtdXR0cmNVbnNldAkJdW5zZXQgICBza2lwd2hpdGUgbmV4dGdyb3VwPW11dHRyY1Zhci4qCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9waHAudmltIGIvcnVudGltZS9zeW50YXgvcGhwLnZpbQppbmRleCBiOTRhMjcxLi40NmI1NDdiIDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9waHAudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L3BocC52aW0KQEAgLTEsOCArMSwxNSBAQAogIiBWaW0gc3ludGF4IGZpbGUKICIgTGFuZ3VhZ2U6CXBocCBQSFAgMy80LzUKLSIgTWFpbnRhaW5lcjoJTHV0eiBFeW1lcnMgPGl4dGFiQHBvbHppbi5jb20+Ci0iIFVSTDoJCWh0dHA6Ly93d3cuaXNwLmRlL2RhdGEvcGhwLnZpbQotIiBMYXN0IENoYW5nZToJMjAwNCBGZWIgMDQKKyIgTWFpbnRhaW5lcjogICBEZWJpYW4gVklNIE1haW50YWluZXJzIDxwa2ctdmltLW1haW50YWluZXJzQGxpc3RzLmFsaW90aC5kZWJpYW4ub3JnPgorIiBGb3JtZXIgTWFpbnRhaW5lcjoJTHV0eiBFeW1lcnMgPGl4dGFiQHBvbHppbi5jb20+CisiIExhc3QgQ2hhbmdlOgkkTGFzdENoYW5nZWREYXRlOiAyMDA2LTA0LTE2IDIyOjA2OjQwIC0wNDAwIChkb20sIDE2IGFwciAyMDA2KSAkCisiIFVSTDogaHR0cDovL3N2bi5kZWJpYW4ub3JnL3dzdm4vcGtnLXZpbS90cnVuay9ydW50aW1lL3N5bnRheC9waHAudmltP29wPWZpbGUmcmV2PTAmc2M9MAorIgorIiBYWFggVGhpcyBmaWxlIGlzIGluIG5lZWQgb2YgYSBuZXcgbWFpbnRhaW5lciwgRGViaWFuIFZJTSBNYWludGFpbmVycyBtYWludGFpbgorIiAgICAgaXQgb25seSBiZWNhdXNlIHBhdGNoZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBmb3IgaXQgYnkgRGViaWFuIHVzZXJzIGFuZCB0aGUKKyIgICAgIGZvcm1lciBtYWludGFpbmVyIHdhcyBNSUEgKE1pc3NpbmcgSW4gQWN0aW9uKSwgdGFraW5nIG92ZXIgaXRzCisiICAgICBtYWludGVuYW5jZSB3YXMgdGh1cyB0aGUgb25seSB3YXkgdG8gaW5jbHVkZSB0aG9zZSBwYXRjaGVzLgorIiAgICAgSWYgeW91IGNhcmUgYWJvdXQgdGhpcyBmaWxlLCBhbmQgaGF2ZSB0aW1lIHRvIG1haW50YWluIGl0IHBsZWFzZSBkbyBzbyEKICIKICIgT3B0aW9ucwlwaHBfc3FsX3F1ZXJ5ID0gMSAgZm9yIFNRTCBzeW50YXggaGlnaGxpZ2h0aW5nIGluc2lkZSBzdHJpbmdzCiAiCQlwaHBfaHRtbEluU3RyaW5ncyA9IDEgIGZvciBIVE1MIHN5bnRheCBoaWdobGlnaHRpbmcgaW5zaWRlIHN0cmluZ3MKQEAgLTMyNiw5ICszMzMsMTEgQEAKICIgU3RyaW5nCiBpZiBleGlzdHMoInBocF9wYXJlbnRfZXJyb3Jfb3BlbiIpCiAgIHN5biByZWdpb24JcGhwU3RyaW5nRG91YmxlCW1hdGNoZ3JvdXA9Tm9uZSBzdGFydD0rIisgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9KyIrCWNvbnRhaW5zPUBwaHBBZGRTdHJpbmdzLHBocElkZW50aWZpZXIscGhwU3BlY2lhbENoYXIscGhwSWRlbnRpZmllclNpbXBseSxwaHBJZGVudGlmaWVyQ29tcGxleAljb250YWluZWQga2VlcGVuZAorICBzeW4gcmVnaW9uCXBocEJhY2t0aWNrCW1hdGNoZ3JvdXA9Tm9uZSBzdGFydD0rYCsgc2tpcD0rXFxcXFx8XFwiKyBlbmQ9K2ArCWNvbnRhaW5zPUBwaHBBZGRTdHJpbmdzLHBocElkZW50aWZpZXIscGhwU3BlY2lhbENoYXIscGhwSWRlbnRpZmllclNpbXBseSxwaHBJZGVudGlmaWVyQ29tcGxleAljb250YWluZWQga2VlcGVuZAogICBzeW4gcmVnaW9uCXBocFN0cmluZ1NpbmdsZQltYXRjaGdyb3VwPU5vbmUgc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKwljb250YWlucz1AcGhwQWRkU3RyaW5ncyBjb250YWluZWQga2VlcGVuZAogZWxzZQogICBzeW4gcmVnaW9uCXBocFN0cmluZ0RvdWJsZQltYXRjaGdyb3VwPU5vbmUgc3RhcnQ9KyIrIHNraXA9K1xcXFxcfFxcIisgZW5kPSsiKwljb250YWlucz1AcGhwQWRkU3RyaW5ncyxwaHBJZGVudGlmaWVyLHBocFNwZWNpYWxDaGFyLHBocElkZW50aWZpZXJTaW1wbHkscGhwSWRlbnRpZmllckNvbXBsZXggY29udGFpbmVkIGV4dGVuZCBrZWVwZW5kCisgIHN5biByZWdpb24JcGhwQmFja3RpY2sJbWF0Y2hncm91cD1Ob25lIHN0YXJ0PStgKyBza2lwPStcXFxcXHxcXCIrIGVuZD0rYCsJY29udGFpbnM9QHBocEFkZFN0cmluZ3MscGhwSWRlbnRpZmllcixwaHBTcGVjaWFsQ2hhcixwaHBJZGVudGlmaWVyU2ltcGx5LHBocElkZW50aWZpZXJDb21wbGV4IGNvbnRhaW5lZCBleHRlbmQga2VlcGVuZAogICBzeW4gcmVnaW9uCXBocFN0cmluZ1NpbmdsZQltYXRjaGdyb3VwPU5vbmUgc3RhcnQ9KycrIHNraXA9K1xcXFxcfFxcJysgZW5kPSsnKwljb250YWlucz1AcGhwQWRkU3RyaW5ncyBjb250YWluZWQga2VlcGVuZCBleHRlbmQKIGVuZGlmCiAKQEAgLTM1NSw3ICszNjQsNyBAQAogICBzeW4gbWF0Y2ggcGhwUGFyZW50CSJbKHtbXF19KV0iCWNvbnRhaW5lZAogZW5kaWYKIAotc3luIGNsdXN0ZXIJcGhwQ2xDb25zdAljb250YWlucz1waHBGdW5jdGlvbnMscGhwSWRlbnRpZmllcixwaHBDb25kaXRpb25hbCxwaHBSZXBlYXQscGhwU3RhdGVtZW50LHBocE9wZXJhdG9yLHBocFJlbGF0aW9uLHBocFN0cmluZ1NpbmdsZSxwaHBTdHJpbmdEb3VibGUscGhwTnVtYmVyLHBocEZsb2F0LHBocEtleXdvcmQscGhwVHlwZSxwaHBCb29sZWFuLHBocFN0cnVjdHVyZSxwaHBNZXRob2RzVmFyLHBocENvbnN0YW50LHBocENvcmVDb25zdGFudCxwaHBFeGNlcHRpb24KK3N5biBjbHVzdGVyCXBocENsQ29uc3QJY29udGFpbnM9cGhwRnVuY3Rpb25zLHBocElkZW50aWZpZXIscGhwQ29uZGl0aW9uYWwscGhwUmVwZWF0LHBocFN0YXRlbWVudCxwaHBPcGVyYXRvcixwaHBSZWxhdGlvbixwaHBTdHJpbmdTaW5nbGUscGhwU3RyaW5nRG91YmxlLHBocEJhY2t0aWNrLHBocE51bWJlcixwaHBGbG9hdCxwaHBLZXl3b3JkLHBocFR5cGUscGhwQm9vbGVhbixwaHBTdHJ1Y3R1cmUscGhwTWV0aG9kc1ZhcixwaHBDb25zdGFudCxwaHBDb3JlQ29uc3RhbnQscGhwRXhjZXB0aW9uCiBzeW4gY2x1c3RlcglwaHBDbEluc2lkZQljb250YWlucz1AcGhwQ2xDb25zdCxwaHBDb21tZW50LHBocExhYmVsLHBocFBhcmVudCxwaHBQYXJlbnRFcnJvcixwaHBJbmNsdWRlLHBocEhlcmVEb2MKIHN5biBjbHVzdGVyCXBocENsRnVuY3Rpb24JY29udGFpbnM9QHBocENsSW5zaWRlLHBocERlZmluZSxwaHBQYXJlbnRFcnJvcixwaHBTdG9yYWdlQ2xhc3MKIHN5biBjbHVzdGVyCXBocENsVG9wCWNvbnRhaW5zPUBwaHBDbEZ1bmN0aW9uLHBocEZvbGRGdW5jdGlvbixwaHBGb2xkQ2xhc3MscGhwRm9sZEludGVyZmFjZSxwaHBGb2xkVHJ5LHBocEZvbGRDYXRjaApAQCAtNDYzLDYgKzQ3Miw3IEBACiAgIEhpTGluawkgcGhwU3RydWN0dXJlCVN0cnVjdHVyZQogICBIaUxpbmsJIHBocFN0cmluZ1NpbmdsZQlTdHJpbmcKICAgSGlMaW5rCSBwaHBTdHJpbmdEb3VibGUJU3RyaW5nCisgIEhpTGluawkgcGhwQmFja3RpY2sJU3RyaW5nCiAgIEhpTGluawkgcGhwTnVtYmVyCU51bWJlcgogICBIaUxpbmsJIHBocEZsb2F0CUZsb2F0CiAgIEhpTGluawkgcGhwTWV0aG9kcwlGdW5jdGlvbgpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvc2xybnJjLnZpbSBiL3J1bnRpbWUvc3ludGF4L3Nscm5yYy52aW0KaW5kZXggYzE1ZDlhZi4uMDExYTIxNSAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvc2xybnJjLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9zbHJucmMudmltCkBAIC0xLDcgKzEsMTUgQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOglTbHJuIHNldHVwIGZpbGUgKGJhc2VkIG9uIHNscm4gMC45LjguMCkKLSIgTWFpbnRhaW5lcjoJUHJlYmVuICdQZXBwZScgR3VsZGJlcmcgPHBlcHBlLXZpbUB3aWVsZGVycy5vcmc+Ci0iIExhc3QgQ2hhbmdlOgkxOSBNYXkgMjAwNAorIiBNYWludGFpbmVyOiAgIERlYmlhbiBWSU0gTWFpbnRhaW5lcnMgPHBrZy12aW0tbWFpbnRhaW5lcnNAbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmc+CisiIEZvcm1lciBNYWludGFpbmVyOglQcmViZW4gJ1BlcHBlJyBHdWxkYmVyZyA8cGVwcGUtdmltQHdpZWxkZXJzLm9yZz4KKyIgTGFzdCBDaGFuZ2U6CSRMYXN0Q2hhbmdlZERhdGU6IDIwMDYtMDQtMTYgMjI6MDY6NDAgLTA0MDAgKGRvbSwgMTYgYXByIDIwMDYpICQKKyIgVVJMOiBodHRwOi8vc3ZuLmRlYmlhbi5vcmcvd3N2bi9wa2ctdmltL3RydW5rL3J1bnRpbWUvc3ludGF4L3Nscm5yYy52aW0/b3A9ZmlsZSZyZXY9MCZzYz0wCisiCisiIFhYWCBUaGlzIGZpbGUgaXMgaW4gbmVlZCBvZiBhIG5ldyBtYWludGFpbmVyLCBEZWJpYW4gVklNIE1haW50YWluZXJzIG1haW50YWluCisiICAgICBpdCBvbmx5IGJlY2F1c2UgcGF0Y2hlcyBoYXZlIGJlZW4gc3VibWl0dGVkIGZvciBpdCBieSBEZWJpYW4gdXNlcnMgYW5kIHRoZQorIiAgICAgZm9ybWVyIG1haW50YWluZXIgd2FzIE1JQSAoTWlzc2luZyBJbiBBY3Rpb24pLCB0YWtpbmcgb3ZlciBpdHMKKyIgICAgIG1haW50ZW5hbmNlIHdhcyB0aHVzIHRoZSBvbmx5IHdheSB0byBpbmNsdWRlIHRob3NlIHBhdGNoZXMuCisiICAgICBJZiB5b3UgY2FyZSBhYm91dCB0aGlzIGZpbGUsIGFuZCBoYXZlIHRpbWUgdG8gbWFpbnRhaW4gaXQgcGxlYXNlIGRvIHNvIQogCiAiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwogIiBGb3IgdmVyc2lvbiA2Lng6IFF1aXQgd2hlbiBhIHN5bnRheCBmaWxlIHdhcyBhbHJlYWR5IGxvYWRlZApAQCAtMTE5LDcgKzEyNyw3IEBACiBzeW4ga2V5d29yZCBzbHJucmNGdW5BcnQJY29udGFpbmVkIGhlbHAgaGlkZV9hcnRpY2xlIGxvY2F0ZV9hcnRpY2xlIG1hcmtfc3BvdCBuZXh0IG5leHRfaGlnaF9zY29yZSBuZXh0X3NhbWVfc3ViamVjdCBwaXBlIHBvc3QgcG9zdF9wb3N0cG9uZWQgcHJldmlvdXMgcHJpbnQgcXVpdCByZWRyYXcKIHN5biBrZXl3b3JkIHNscm5yY0Z1bkFydAljb250YWluZWQgcmVwZWF0X2xhc3Rfa2V5IHJlcGx5IHJlcXVlc3Qgc2F2ZSBzaG93X3Nwb2lsZXJzIHNocmlua19hcnRpY2xlX3dpbmRvdyBza2lwX3F1b3RlcyBza2lwX3RvX25leHRfZ3JvdXAgc2tpcF90b19wcmV2aW91c19ncm91cAogc3luIGtleXdvcmQgc2xybnJjRnVuQXJ0CWNvbnRhaW5lZCBzdWJqZWN0X3NlYXJjaF9iYWNrd2FyZCBzdWJqZWN0X3NlYXJjaF9mb3J3YXJkIHN1cGVyc2VkZSBzdXNwZW5kIHRhZ19oZWFkZXIgdG9nZ2xlX2NvbGxhcHNlX3RocmVhZHMgdG9nZ2xlX2hlYWRlcl9mb3JtYXRzCi1zeW4ga2V5d29yZCBzbHJucmNGdW5BcnQJY29udGFpbmVkIHRvZ2dsZV9oZWFkZXJfdGFnIHRvZ2dsZV9oZWFkZXJzIHRvZ2dsZV9wZ3BzaWduYXR1cmUgdG9nZ2xlX3F1b3RlcyB0b2dnbGVfcm90MTMgdG9nZ2xlX3NpZ25hdHVyZSB0b2dnbGVfdmVyYmF0aW1fbWFya3MKK3N5biBrZXl3b3JkIHNscm5yY0Z1bkFydAljb250YWluZWQgdG9nZ2xlX2hlYWRlcl90YWcgdG9nZ2xlX2hlYWRlcnMgdG9nZ2xlX3BncHNpZ25hdHVyZSB0b2dnbGVfcXVvdGVzIHRvZ2dsZV9yb3QxMyB0b2dnbGVfc2lnbmF0dXJlIHRvZ2dsZV9zb3J0IHRvZ2dsZV92ZXJiYXRpbV9tYXJrcwogc3luIGtleXdvcmQgc2xybnJjRnVuQXJ0CWNvbnRhaW5lZCB0b2dnbGVfdmVyYmF0aW1fdGV4dCB1bmNhdGNodXAgdW5jYXRjaHVwX2FsbCB1bmRlbGV0ZSB1bnRhZ19oZWFkZXJzIHZpZXdfc2NvcmVzIHdyYXBfYXJ0aWNsZSB6b29tX2FydGljbGVfd2luZG93CiAKICIgTGlzdGVkIGZvciByZW1vdmFsCkBAIC0xMzYsNyArMTQ0LDcgQEAKIHN5biBrZXl3b3JkIHNscm5yY0Z1bkdyb3VwCWNvbnRhaW5lZCBkb3duIGdyb3VwX2JvYiBncm91cF9lb2IgcGFnZWRvd24gcGFnZXVwIHRvZ2dsZV9ncm91cF9kaXNwbGF5IHVuY2F0Y2hfdXAgdXAKIAogIiBGdW5jdGlvbnMgaW4gcmVhZGxpbmUgbW9kZSAoYWN0dWFsbHkgZnJvbSBzbGFuZydzIHNscmxpbmUuYykKLXN5biBrZXl3b3JkIHNscm5yY0Z1blJlYWQJY29udGFpbmVkIGJkZWwgYm9sIGRlbCBkZWxlb2wgZG93biBlbnRlciBlb2wgbGVmdCBxdW90ZWRfaW5zZXJ0IHJpZ2h0IHNlbGZfaW5zZXJ0IHRyaW0gdXAKK3N5biBrZXl3b3JkIHNscm5yY0Z1blJlYWQJY29udGFpbmVkIGJkZWwgYm9sIGNvbXBsZXRlIGN5Y2xlIGRlbCBkZWxib2wgZGVsYm93IGRlbGVvbCBkb3duIGVudGVyIGVvbCBsZWZ0IHF1b3RlZF9pbnNlcnQgcmlnaHQgc2VsZl9pbnNlcnQgdHJpbSB1cAogCiAiIEJpbmRpbmcga2V5cwogc3luIGtleXdvcmQgc2xybnJjU2V0a2V5T2JqCWNvbnRhaW5lZCBhcnRpY2xlIGdyb3VwIHJlYWRsaW5lCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC9zdGF0YS52aW0gYi9ydW50aW1lL3N5bnRheC9zdGF0YS52aW0KaW5kZXggNDk5NTVjYy4uNTAwNTYwOSAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvc3RhdGEudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L3N0YXRhLnZpbQpAQCAtMSwxNCArMSwxNCBAQAogIiBzdGF0YS52aW0gLS0gVmltIHN5bnRheCBmaWxlIGZvciBTdGF0YSBkbywgYWRvLCBhbmQgY2xhc3MgZmlsZXMuCiAiIExhbmd1YWdlOglTdGF0YSBhbmQvb3IgTWF0YQogIiBNYWludGFpbmVyOglKZWZmIFBpdGJsYWRvIDxqcGl0YmxhZG9Ac3RhdGEuY29tPgotIiBMYXN0IENoYW5nZToJMTRhcHIyMDA2Ci0iIFZlcnNpb246CTEuMS4xCisiIExhc3QgQ2hhbmdlOgkxN2FwcjIwMDYKKyIgVmVyc2lvbjoJMS4xLjIKICIgTG9jYXRpb246CWh0dHA6Ly93d3cuc3RhdGEuY29tL3VzZXJzL2pwaXRibGFkby9maWxlcy92aW1maWxlcy9zeW50YXgvc3RhdGEudmltCiAKICIgTG9nOgogIiAxNGFwcjIwMDYJcmVuYW1lZCBzeW50YXggZ3JvdXBzIHN0KiB0byBzdGF0YSoKICIJCSdzeW50YXggY2xlYXInIG9ubHkgdW5kZXIgdmVyc2lvbiBjb250cm9sCi0iCQljaGVjayBmb3IgJ2I6Y3VycmVudF9zeW50YXgnLCByZW1vdmVkICdkaWRfc3RhdF9zeW50YXhfaW5pdHMnCisiCQljaGVjayBmb3IgJ2I6Y3VycmVudF9zeW50YXgnLCByZW1vdmVkICdkaWRfc3RhdGFfc3ludGF4X2luaXRzJwogCiBpZiB2ZXJzaW9uIDwgNjAwCiAJc3ludGF4IGNsZWFyCkBAIC0xODgsMjI0ICsxODgsMjI0IEBACiAKICIgU3RhdGEgZnVuY3Rpb25zCiAiIE1hdGgKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2FicygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9hY29zKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2FzaW4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vYXRhbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9hdGFuMigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9hdGFuaCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9jZWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2Nsb2dsb2coLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vY29tYigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9jb3MoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZGlnYW1tYSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9leHAoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZmxvb3IoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaW50KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludmNsb2dsb2coLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaW52bG9naXQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbG4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbG5mYWN0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2xuZmFjdG9yaWFsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2xuZ2FtbWEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbG9nKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2xvZzEwKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2xvZ2l0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21heCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9tb2QoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vcmVsZGlmKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3JvdW5kKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3NpZ24oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vc2luKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3NxcnQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vc3VtKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3RhbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS90YW5oKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3RyaWdhbW1hKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3RydW5jKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8YWJzKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8YWNvcygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGFzaW4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxhdGFuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8YXRhbjIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxhdGFuaCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGNlaWwoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxjbG9nbG9nKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Y29tYigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGNvcygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGRpZ2FtbWEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxleHAoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxmbG9vcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGludCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGludmNsb2dsb2coLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxpbnZsb2dpdCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGxuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bG5mYWN0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bG5mYWN0b3JpYWwoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxsbmdhbW1hKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bG9nKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bG9nMTAoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxsb2dpdCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1heCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1vZCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHJlbGRpZigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHJvdW5kKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8c2lnbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHNpbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHNxcnQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxzdW0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx0YW4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx0YW5oKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8dHJpZ2FtbWEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx0cnVuYygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCiAiIFByb2JhYmlsaXR5IGRpc3RyaXVidGlvbnMgYW5kIGRlbnNpdHkgZnVuY3Rpb25zCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9iZXRhZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L0Jpbm9taWFsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2Jpbm9ybSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9iaW5vcm1hbCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9jaGkyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2NoaTJ0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2RnYW1tYXBkYSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9kZ2FtbWFwZGFkYSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9kZ2FtbWFwZGFkeCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9kZ2FtbWFwZHgoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZGdhbW1hcGR4ZHgoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vRigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9GZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L0Z0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2dhbW1hZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2dhbW1hcCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9pYmV0YSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9pbnZiaW5vbWlhbCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9pbnZjaGkyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludmNoaTJ0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludkYoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaW52RnRhaWwoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaW52Z2FtbWFwKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludmliZXRhKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludm5jaGkyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludkZ0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludmliZXRhKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludm5vcm0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaW52bm9ybWFsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2ludnR0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2xubm9ybWFsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2xubm9ybWFsZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L25iZXRhZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L25jaGkyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L25GZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L25GdGFpbCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9uaWJldGEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbm9ybSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9ub3JtYWwoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbm9ybWFsZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L25vcm1kZW4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbnBuY2hpMigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS90ZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3R0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8YmV0YWRlbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPEJpbm9taWFsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Ymlub3JtKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Ymlub3JtYWwoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxjaGkyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Y2hpMnRhaWwoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxkZ2FtbWFwZGEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxkZ2FtbWFwZGFkYSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGRnYW1tYXBkYWR4KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZGdhbW1hcGR4KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZGdhbW1hcGR4ZHgoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxGKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8RmRlbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPEZ0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Z2FtbWFkZW4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxnYW1tYXAoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxpYmV0YSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGludmJpbm9taWFsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52Y2hpMigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGludmNoaTJ0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52RigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGludkZ0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52Z2FtbWFwKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52aWJldGEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxpbnZuY2hpMigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGludkZ0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52aWJldGEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxpbnZub3JtKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52bm9ybWFsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52dHRhaWwoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxsbm5vcm1hbCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGxubm9ybWFsZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bmJldGFkZW4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxuY2hpMigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG5GZGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bkZ0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bmliZXRhKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bm9ybSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG5vcm1hbCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG5vcm1hbGRlbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG5vcm1kZW4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxucG5jaGkyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8dGRlbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHR0YWlsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKICIgUmFuZG9tIG51bWJlcnMKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3VuaWZvcm0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx1bmlmb3JtKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKICIgU3RyaW5nCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9hYmJyZXYoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaGNoYXIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaW5kZXhub3QoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaXRyaW0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbGVuZ3RoKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2xvd2VyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2x0cmltKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3BsdXJhbCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9wcm9wZXIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vcmVhbCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9yZWdleG0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vcmVnZXhyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3JlZ2V4cygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9yZXZlcnNlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3J0cmltKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3N0cmluZygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9zdHJsZW4oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vc3RybWF0Y2goLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vc3RycG9zKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3N1Ymluc3RyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3N1Ymlud29yZCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9zdWJzdHIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vdHJpbSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS91cHBlcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS93b3JkKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3dvcmRjb3VudCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGFiYnJldigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGhjaGFyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW5kZXhub3QoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxpdHJpbSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGxlbmd0aCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGxvd2VyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bHRyaW0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxwbHVyYWwoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxwcm9wZXIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxyZWFsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cmVnZXhtKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cmVnZXhyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cmVnZXhzKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cmV2ZXJzZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHJ0cmltKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8c3RyaW5nKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8c3RybGVuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8c3RybWF0Y2goLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxzdHJwb3MoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxzdWJpbnN0cigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHN1Ymlud29yZCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHN1YnN0cigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHRyaW0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx1cHBlcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHdvcmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx3b3JkY291bnQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAogIiBQcm9ncmFtbWluZwotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vYXV0b2NvZGUoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vYnl0ZW9yZGVyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2MoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vX2NhbGxlcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9jaG9wKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2NsaXAoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vY29uZCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9lKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2Vwc2RvdWJsZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9lcHNmbG9hdCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9mbG9hdCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9oYXNfZXByb3AoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaGFzX2Vwcm9wKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2lubGlzdCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9pbnJhbmdlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2lyZWNvZGUoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbWF0cml4KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21heGJ5dGUoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbWF4ZG91YmxlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21heGZsb2F0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21heGludCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9tYXhsb25nKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21pKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21pbmJ5dGUoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbWluZG91YmxlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21pbmZsb2F0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21pbmludCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9taW5sb25nKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21pc3NpbmcoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9yZWNvZGUoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vcmVwbGF5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3JldHVybigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9zKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3NjYWxhcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGF1dG9jb2RlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Ynl0ZW9yZGVyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8YygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPF9jYWxsZXIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxjaG9wKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Y2xpcCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGNvbmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZXBzZG91YmxlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZXBzZmxvYXQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxmbG9hdCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGhhc19lcHJvcCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGhhc19lcHJvcCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGlubGlzdCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGlucmFuZ2UoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxpcmVjb2RlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bWF0cml4KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bWF4Ynl0ZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1heGRvdWJsZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1heGZsb2F0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bWF4aW50KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bWF4bG9uZygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1pKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bWluYnl0ZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1pbmRvdWJsZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1pbmZsb2F0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bWluaW50KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bWlubG9uZygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1pc3NpbmcoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cmVjb2RlKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cmVwbGF5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cmV0dXJuKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHNjYWxhcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCiAiIERhdGUKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2QoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZGF0ZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9kYXkoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZG93KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2RveSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9oYWxmeWVhcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9tZHkoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbW9udGgoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vcXVhcnRlcigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS93ZWVrKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3llYXIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxkKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZGF0ZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGRheSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGRvdygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGRveSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGhhbGZ5ZWFyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bWR5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bW9udGgoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxxdWFydGVyKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8d2VlaygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHllYXIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAogIiBUaW1lLXNlcmllcwotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZGFpbHkoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaGFsZnllYXJseSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9tb250aGx5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3F1YXJ0ZXJseSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS93ZWVrbHkoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0veWVhcmx5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZGFpbHkoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxoYWxmeWVhcmx5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bW9udGhseSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHF1YXJ0ZXJseSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHdlZWtseSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHllYXJseSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCiAiCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS95aCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS95bSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS95cSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS95dygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHloKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8eW0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx5cSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHl3KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKICIKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2QoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9tKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3EoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vdygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS95KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGgoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxtKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHcoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKICIKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2RvZmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZG9maCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9kb2ZtKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2RvZnEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZG9mdygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9kb2Z5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2hvZmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbW9mZCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9xb2ZkKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3dvZmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0veW9mZCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGRvZmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxkb2ZoKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZG9mbSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGRvZnEoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxkb2Z3KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8ZG9meSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGhvZmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxtb2ZkKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8cW9mZCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHdvZmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx5b2ZkKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKICIKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3RpbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS90d2l0aGluKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8dGluKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8dHdpdGhpbigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCiAiIE1hdHJpeAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vY29sbnVtYigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9jb2xzb2YoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZGV0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2RpYWcwY250KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2VsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2lzc3ltbWV0cmljKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L21hdG1pc3NpbmcoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbXJlbGRpZigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9yb3dudW1iKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3Jvd3NvZigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS90cmFjZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGNvbG51bWIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxjb2xzb2YoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxkZXQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxkaWFnMGNudCgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGVsKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aXNzeW1tZXRyaWMoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxtYXRtaXNzaW5nKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8bXJlbGRpZigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPHJvd251bWIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxyb3dzb2YoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx0cmFjZSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCiAiCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9jaG9sc2t5KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L2NvcnIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vZGlhZygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9nZXQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaGFkYW1hcmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vSSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9pbnYoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vaW52c3ltKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L0ooLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAotc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vbWF0dW5pZm9ybSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9udWxsbWF0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3N3ZWVwKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKLXN5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L3ZlYygvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCi1zeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS92ZWNkaWFnKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Y2hvbHNreSgvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPGNvcnIoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxkaWFnKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8Z2V0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aGFkYW1hcmQoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxJKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8aW52c3ltKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8SigvIGVuZD0vKS8gY29udGFpbnM9QHN0YXRhRnVuY0dyb3VwCitzeW4gcmVnaW9uIHN0YXRhRnVuYyBtYXRjaGdyb3VwPUZ1bmN0aW9uIHN0YXJ0PS9cPG1hdHVuaWZvcm0oLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDxudWxsbWF0KC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKK3N5biByZWdpb24gc3RhdGFGdW5jIG1hdGNoZ3JvdXA9RnVuY3Rpb24gc3RhcnQ9L1w8c3dlZXAoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx2ZWMoLyBlbmQ9LykvIGNvbnRhaW5zPUBzdGF0YUZ1bmNHcm91cAorc3luIHJlZ2lvbiBzdGF0YUZ1bmMgbWF0Y2hncm91cD1GdW5jdGlvbiBzdGFydD0vXDx2ZWNkaWFnKC8gZW5kPS8pLyBjb250YWlucz1Ac3RhdGFGdW5jR3JvdXAKIAogIiBFcnJvcnMgdG8gY2F0Y2gKICIgdGFrZW4gZnJvbSAkVklNUlVOVElNRS9zeW50YXgvYy52aW0gCmRpZmYgLS1naXQgYS9ydW50aW1lL3N5bnRheC90cHAudmltIGIvcnVudGltZS9zeW50YXgvdHBwLnZpbQppbmRleCA4ZWI3NDgwLi45MmZhNmY4IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC90cHAudmltCisrKyBiL3J1bnRpbWUvc3ludGF4L3RwcC52aW0KQEAgLTEsMTEgKzEsMTggQEAKICIgVmltIHN5bnRheCBmaWxlCiAiIExhbmd1YWdlOgl0cHAgLSBUZXh0IFByZXNlbnRhdGlvbiBQcm9ncmFtCi0iIE1haW50YWluZXI6CUdlcmZyaWVkIEZ1Y2hzIDxhbGZpZUBpc3Qub3JnPgorIiBNYWludGFpbmVyOiAgIERlYmlhbiBWSU0gTWFpbnRhaW5lcnMgPHBrZy12aW0tbWFpbnRhaW5lcnNAbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmc+CisiIEZvcm1lciBNYWludGFpbmVyOglHZXJmcmllZCBGdWNocyA8YWxmaWVAaXN0Lm9yZz4KKyIgTGFzdCBDaGFuZ2U6CSRMYXN0Q2hhbmdlZERhdGU6IDIwMDYtMDQtMTYgMjI6MDY6NDAgLTA0MDAgKGRvbSwgMTYgYXByIDIwMDYpICQKKyIgVVJMOiBodHRwOi8vc3ZuLmRlYmlhbi5vcmcvd3N2bi9wa2ctdmltL3RydW5rL3J1bnRpbWUvc3ludGF4L3RwcC52aW0/b3A9ZmlsZSZyZXY9MCZzYz0wCiAiIEZpbGVuYW1lczoJKi50cHAKLSIgTGFzdCBDaGFuZ2U6CTI4LiBPY3RvYmVyIDIwMDQKLSIgVVJMOgkJaHR0cDovL2FsZmllLmlzdC5vcmcvcHJvamVjdHMvdmltL3N5bnRheC90cHAudmltCiAiIExpY2Vuc2U6CUJTRAogIgorIiBYWFggVGhpcyBmaWxlIGlzIGluIG5lZWQgb2YgYSBuZXcgbWFpbnRhaW5lciwgRGViaWFuIFZJTSBNYWludGFpbmVycyBtYWludGFpbgorIiAgICAgaXQgb25seSBiZWNhdXNlIHBhdGNoZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBmb3IgaXQgYnkgRGViaWFuIHVzZXJzIGFuZCB0aGUKKyIgICAgIGZvcm1lciBtYWludGFpbmVyIHdhcyBNSUEgKE1pc3NpbmcgSW4gQWN0aW9uKSwgdGFraW5nIG92ZXIgaXRzCisiICAgICBtYWludGVuYW5jZSB3YXMgdGh1cyB0aGUgb25seSB3YXkgdG8gaW5jbHVkZSB0aG9zZSBwYXRjaGVzLgorIiAgICAgSWYgeW91IGNhcmUgYWJvdXQgdGhpcyBmaWxlLCBhbmQgaGF2ZSB0aW1lIHRvIG1haW50YWluIGl0IHBsZWFzZSBkbyBzbyEKKyIKICIgQ29tbWVudHMgYXJlIHZlcnkgd2VsY29tZSAtIGJ1dCBwbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91IGFyZSBjb21tZW50aW5nIG9uCiAiIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGZpbGUuCiAiIFNQQU0gaXMgX05PVF8gd2VsY29tZSAtIGJlIHJlYWR5IHRvIGJlIHJlcG9ydGVkIQpAQCAtMjQsMTUgKzMxLDE1IEBACiAKIAogIiIgbGlzdCBvZiB0aGUgbGVnYWwgc3dpdGNoZXMvb3B0aW9ucwotc3luIG1hdGNoIHRwcEFic3RyYWN0T3B0aW9uS2V5IGNvbnRhaW5lZCAiXi0tXCUoYXV0aG9yXHx0aXRsZVx8ZGF0ZVwpICoiIG5leHRncm91cD10cHBWYWx1ZQotc3luIG1hdGNoIHRwcFBhZ2VMb2NhbE9wdGlvbktleSBjb250YWluZWQgIl4tLVwlKGhlYWRpbmdcfGNlbnRlclx8cmlnaHRcfGh1Z2VcfHNldGh1Z2Vmb250XHxleGVjXCkgKiIgbmV4dGdyb3VwPXRwcFZhbHVlCitzeW4gbWF0Y2ggdHBwQWJzdHJhY3RPcHRpb25LZXkgY29udGFpbmVkICJeLS1cJShhdXRob3JcfHRpdGxlXHxkYXRlXHxmb290ZXJcKSAqIiBuZXh0Z3JvdXA9dHBwU3RyaW5nCitzeW4gbWF0Y2ggdHBwUGFnZUxvY2FsT3B0aW9uS2V5IGNvbnRhaW5lZCAiXi0tXCUoaGVhZGluZ1x8Y2VudGVyXHxyaWdodFx8aHVnZVx8c2V0aHVnZWZvbnRcfGV4ZWNcKSAqIiBuZXh0Z3JvdXA9dHBwU3RyaW5nCiBzeW4gbWF0Y2ggdHBwUGFnZUxvY2FsU3dpdGNoS2V5IGNvbnRhaW5lZCAiXi0tXCUoaG9ybGluZVx8LVx8XCUoYmVnaW5cfGVuZFwpXCUoXCUoc2hlbGxcKVw/b3V0cHV0XHxzbGlkZVwlKGxlZnRcfHJpZ2h0XHx0b3BcfGJvdHRvbVwpXClcfFwlKGJvbGRcfHJldlx8dWxcKVwlKG9uXHxvZmZcKVx8d2l0aGJvcmRlclwpIgotc3luIG1hdGNoIHRwcE5ld1BhZ2VPcHRpb25LZXkgY29udGFpbmVkICJeLS1uZXdwYWdlICoiIG5leHRncm91cD10cHBWYWx1ZQorc3luIG1hdGNoIHRwcE5ld1BhZ2VPcHRpb25LZXkgY29udGFpbmVkICJeLS1uZXdwYWdlICoiIG5leHRncm91cD10cHBTdHJpbmcKIHN5biBtYXRjaCB0cHBDb2xvck9wdGlvbktleSBjb250YWluZWQgIl4tLVwlKFwlKGJnXHxmZ1wpXD9jb2xvclwpICoiCiBzeW4gbWF0Y2ggdHBwVGltZU9wdGlvbktleSBjb250YWluZWQgIl4tLXNsZWVwICoiCiAKLXN5biBtYXRjaCB0cHBWYWx1ZSBjb250YWluZWQgIi4qIgotc3luIG1hdGNoIHRwcENvbG9yIGNvbnRhaW5lZCAiXCUod2hpdGVcfHllbGxvd1x8cmVkXHxncmVlblx8Ymx1ZVx8Y3lhblx8bWFnZW50YVx8YmxhY2tcKSIKK3N5biBtYXRjaCB0cHBTdHJpbmcgY29udGFpbmVkICIuKiIKK3N5biBtYXRjaCB0cHBDb2xvciBjb250YWluZWQgIlwlKHdoaXRlXHx5ZWxsb3dcfHJlZFx8Z3JlZW5cfGJsdWVcfGN5YW5cfG1hZ2VudGFcfGJsYWNrXHxkZWZhdWx0XCkiCiBzeW4gbWF0Y2ggdHBwVGltZSBjb250YWluZWQgIlxkXCsiCiAKIHN5biByZWdpb24gdHBwUGFnZUxvY2FsU3dpdGNoIHN0YXJ0PSJeLS0iIGVuZD0iJCIgY29udGFpbnM9dHBwUGFnZUxvY2FsU3dpdGNoS2V5IG9uZWxpbmUKQEAgLTQwLDcgKzQ3LDcgQEAKIHN5biByZWdpb24gdHBwVGltZU9wdGlvbiBzdGFydD0iXi0tc2xlZXAiIGVuZD0iJCIgY29udGFpbnM9dHBwVGltZU9wdGlvbktleSx0cHBUaW1lIG9uZWxpbmUKIHN5biByZWdpb24gdHBwTmV3UGFnZU9wdGlvbiBzdGFydD0iXi0tbmV3cGFnZSIgZW5kPSIkIiBjb250YWlucz10cHBOZXdQYWdlT3B0aW9uS2V5IG9uZWxpbmUKIHN5biByZWdpb24gdHBwUGFnZUxvY2FsT3B0aW9uIHN0YXJ0PSJeLS1cJShoZWFkaW5nXHxjZW50ZXJcfHJpZ2h0XHxodWdlXHxzZXRodWdlZm9udFx8ZXhlY1wpIiBlbmQ9IiQiIGNvbnRhaW5zPXRwcFBhZ2VMb2NhbE9wdGlvbktleSBvbmVsaW5lCi1zeW4gcmVnaW9uIHRwcEFic3RyYWN0T3B0aW9uIHN0YXJ0PSJeLS1cJShhdXRob3JcfHRpdGxlXHxkYXRlXCkiIGVuZD0iJCIgY29udGFpbnM9dHBwQWJzdHJhY3RPcHRpb25LZXkgb25lbGluZQorc3luIHJlZ2lvbiB0cHBBYnN0cmFjdE9wdGlvbiBzdGFydD0iXi0tXCUoYXV0aG9yXHx0aXRsZVx8ZGF0ZVx8Zm9vdGVyXCkiIGVuZD0iJCIgY29udGFpbnM9dHBwQWJzdHJhY3RPcHRpb25LZXkgb25lbGluZQogCiBpZiBtYWluX3N5bnRheCAhPSAnc2gnCiAgICIgc2hlbGwgY29tbWFuZApAQCAtNzQsNyArODEsNyBAQAogICBIaUxpbmsgdHBwQ29sb3JPcHRpb25LZXkJCUtleXdvcmQKICAgSGlMaW5rIHRwcFRpbWVPcHRpb25LZXkJCUNvbW1lbnQKICAgSGlMaW5rIHRwcE5ld1BhZ2VPcHRpb25LZXkJCVByZVByb2MKLSAgSGlMaW5rIHRwcFZhbHVlCQkJU3RyaW5nCisgIEhpTGluayB0cHBTdHJpbmcJCQlTdHJpbmcKICAgSGlMaW5rIHRwcENvbG9yCQkJU3RyaW5nCiAgIEhpTGluayB0cHBUaW1lCQkJTnVtYmVyCiAgIEhpTGluayB0cHBDb21tZW50CQkJQ29tbWVudApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvdmltLnZpbSBiL3J1bnRpbWUvc3ludGF4L3ZpbS52aW0KaW5kZXggYjRjYmQ1NS4uZjVlNjU0YSAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvdmltLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC92aW0udmltCkBAIC0yLDcgKzIsNyBAQAogIiBMYW5ndWFnZToJVmltIDcuMCBzY3JpcHQKICIgTWFpbnRhaW5lcjoJRHIuIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiA8TmRyT2NoaXBTQFBjYW1wYmVsbEFmYW1pbHkuTWJpej4KICIgTGFzdCBDaGFuZ2U6CUFwciAxMiwgMjAwNgotIiBWZXJzaW9uOgk3LjAtNDEKKyIgVmVyc2lvbjoJNy4wLTQyCiAiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGtleXdvcmQgbGlzdHM6IHt7ezEKIAogIiBRdWl0IHdoZW4gYSBzeW50YXggZmlsZSB3YXMgYWxyZWFkeSBsb2FkZWQge3t7MgpAQCAtMTYxLDcgKzE2MSwxMCBAQAogZW5kaWYKIHN5biBjYXNlIGlnbm9yZQogc3luIGtleXdvcmQgdmltVXNlckF0dHJiS2V5ICAgY29udGFpbmVkCWJhcgliYW5bZ10JY291W250XQlyYVtuZ2VdIGNvbVtwbGV0ZV0JblthcmdzXQlyZVtnaXN0ZXJdCi1zeW4ga2V5d29yZCB2aW1Vc2VyQXR0cmJDbXBsdCBjb250YWluZWQJYXVncm91cCBidWZmZXIgY29tbWFuZCBkaXIgZW52aXJvbm1lbnQgZXZlbnQgZXhwcmVzc2lvbiBmaWxlIGZ1bmN0aW9uIGhlbHAgaGlnaGxpZ2h0IG1hcHBpbmcgbWVudSBvcHRpb24gdGFnIHRhZ19saXN0ZmlsZXMgdmFyCitzeW4ga2V5d29yZCB2aW1Vc2VyQXR0cmJDbXBsdCBjb250YWluZWQJYXVncm91cCBidWZmZXIgY29tbWFuZCBkaXIgZW52aXJvbm1lbnQgZXZlbnQgZXhwcmVzc2lvbiBmaWxlIGZ1bmN0aW9uIGhlbHAgaGlnaGxpZ2h0IG1hcHBpbmcgbWVudSBvcHRpb24gc29tZXRoaW5nIHRhZyB0YWdfbGlzdGZpbGVzIHZhcgorc3luIGtleXdvcmQgdmltVXNlckF0dHJiQ21wbHQgY29udGFpbmVkCWN1c3RvbSBjdXN0b21saXN0IG5leHRncm91cD12aW1Vc2VyQXR0cmJDbXBsdEZ1bmMsdmltVXNlckNtZEVycm9yCitzeW4gbWF0Y2ggICB2aW1Vc2VyQXR0cmJDbXBsdEZ1bmMgY29udGFpbmVkCSIsXCUoXGhcdyojXHVcdypcfFx1XHcqXCkiaHM9cysxIG5leHRncm91cD12aW1Vc2VyQ21kRXJyb3IKKwogc3luIGNhc2UgbWF0Y2gKIHN5biBtYXRjaCAgIHZpbVVzZXJBdHRyYkNtcGx0IGNvbnRhaW5lZAkiY3VzdG9tLFx1XHcqIgogCkBAIC02OTUsNiArNjk4LDcgQEAKIGhpIGRlZiBsaW5rIHZpbVN5bmNOb25lCVR5cGUKIGhpIGRlZiBsaW5rIHZpbVRvZG8JVG9kbwogaGkgZGVmIGxpbmsgdmltVXNlckNtZEVycm9yCUVycm9yCitoaSBkZWYgbGluayB2aW1Vc2VyQXR0cmJDbXBsdEZ1bmMJU3BlY2lhbAogCiAiIEN1cnJlbnQgU3ludGF4IFZhcmlhYmxlOiB7e3syCiBsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJ2aW0iCmRpZmYgLS1naXQgYS9zcmMvR3ZpbUV4dC9ndmltZXh0LmNwcCBiL3NyYy9HdmltRXh0L2d2aW1leHQuY3BwCmluZGV4IGMyMDRhMGMuLmRiZDc2OWEgMTAwNjQ0Ci0tLSBhL3NyYy9HdmltRXh0L2d2aW1leHQuY3BwCisrKyBiL3NyYy9HdmltRXh0L2d2aW1leHQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkgICAgc3RyY3B5KGJ1Ziwgc2VhcmNocGF0aChidWYpKTsKIAogCS8vIHJlbW92ZSAiZ3ZpbS5leGUiIGZyb20gdGhlIGVuZAotCWZvciAoaWR4ID0gc3RybGVuKGJ1ZikgLSAxOyBpZHggPj0gMDsgaWR4LS0pCisJZm9yIChpZHggPSAoaW50KXN0cmxlbihidWYpIC0gMTsgaWR4ID49IDA7IGlkeC0tKQogCSAgICBpZiAoYnVmW2lkeF0gPT0gJ1xcJyB8fCBidWZbaWR4XSA9PSAnLycpCiAJICAgIHsKIAkJYnVmW2lkeCArIDFdID0gMDsKQEAgLTI3OSw3ICsyNzksNyBAQAogICAgIGdldFJ1bnRpbWVEaXIoc3pCdWZmKTsKICAgICBpZiAoc3pCdWZmWzBdICE9IDApCiAgICAgewotCWxlbiA9IHN0cmxlbihzekJ1ZmYpOworCWxlbiA9IChEV09SRClzdHJsZW4oc3pCdWZmKTsKIAlpZiAoZHluX2xpYmludGxfaW5pdChzekJ1ZmYpKQogCXsKIAkgICAgc3RyY3B5KHN6QnVmZiArIGxlbiwgImxhbmciKTsKQEAgLTc0MCw3ICs3NDAsNyBAQAogICAgIHJldHVybiBOT0VSUk9SOwogfQogCi1TVERNRVRIT0RJTVAgQ1NoZWxsRXh0OjpHZXRDb21tYW5kU3RyaW5nKFVJTlQgaWRDbWQsCitTVERNRVRIT0RJTVAgQ1NoZWxsRXh0OjpHZXRDb21tYW5kU3RyaW5nKFVJTlRfUFRSIGlkQ21kLAogCQkJCQkgVUlOVCB1RmxhZ3MsCiAJCQkJCSBVSU5UIEZBUiAqcmVzZXJ2ZWQsCiAJCQkJCSBMUFNUUiBwc3pOYW1lLApkaWZmIC0tZ2l0IGEvc3JjL0d2aW1FeHQvZ3ZpbWV4dC5oIGIvc3JjL0d2aW1FeHQvZ3ZpbWV4dC5oCmluZGV4IGQ2ODgwNzMuLmMwZTM5Y2IgMTAwNjQ0Ci0tLSBhL3NyYy9HdmltRXh0L2d2aW1leHQuaAorKysgYi9zcmMvR3ZpbUV4dC9ndmltZXh0LmgKQEAgLTQzLDYgKzQzLDEyIEBACiAjaW5jbHVkZSA8d2luZG93c3guaD4KICNpbmNsdWRlIDxzaGxvYmouaD4KIAorLyogQWNjb21tb2RhdGUgb2xkIHZlcnNpb25zIG9mIFZDIHRoYXQgZG9uJ3QgaGF2ZSBhIG1vZGVybiBQbGF0Zm9ybSBTREsgKi8KKyNpZiBfTVNDX1ZFUiA8IDEzMDAKKyN1bmRlZiAgVUlOVF9QVFIKKyNkZWZpbmUgVUlOVF9QVFIgVUlOVAorI2VuZGlmCisKICNkZWZpbmUgUmVzdWx0RnJvbVNob3J0KGkpICBSZXN1bHRGcm9tU2NvZGUoTUFLRV9TQ09ERShTRVZFUklUWV9TVUNDRVNTLCAwLCAoVVNIT1JUKShpKSkpCiAKIC8vIEluaXRpYWxpemUgR1VJRHMgKHNob3VsZCBiZSBkb25lIG9ubHkgYW5kIGF0LWxlYXN0IG9uY2UgcGVyIERMTC9FWEUpCkBAIC0xNTIsNyArMTU4LDcgQEAKIAogICAgIFNURE1FVEhPRElNUCBJbnZva2VDb21tYW5kKExQQ01JTlZPS0VDT01NQU5ESU5GTyBscGNtaSk7CiAKLSAgICBTVERNRVRIT0RJTVAgR2V0Q29tbWFuZFN0cmluZyhVSU5UIGlkQ21kLAorICAgIFNURE1FVEhPRElNUCBHZXRDb21tYW5kU3RyaW5nKFVJTlRfUFRSIGlkQ21kLAogCSAgICBVSU5UIHVGbGFncywKIAkgICAgVUlOVCBGQVIgKnJlc2VydmVkLAogCSAgICBMUFNUUiBwc3pOYW1lLApkaWZmIC0tZ2l0IGEvc3JjL01ha2VfbXZjLm1hayBiL3NyYy9NYWtlX212Yy5tYWsKaW5kZXggOWJiMDQ4Ny4uZjlkMjExZCAxMDA2NDQKLS0tIGEvc3JjL01ha2VfbXZjLm1haworKysgYi9zcmMvTWFrZV9tdmMubWFrCkBAIC0xNjcsMTMgKzE2NywxNiBAQAogT0JKRElSID0gJChPQkpESVIpZAogIWVuZGlmCiAKLSMgV2luMzIubWFrIHJlcXVpcmVzIHRoYXQgQ1BVIGJlIHNldCBhcHByb3ByaWF0ZWx5CisjIFdpbjMyLm1hayByZXF1aXJlcyB0aGF0IENQVSBiZSBzZXQgYXBwcm9wcmlhdGVseS4KKyMgVG8gY3Jvc3MtY29tcGlsZSBmb3IgV2luNjQsIHNldCBDUFU9QU1ENjQgb3IgQ1BVPUlBNjQuCiAKICFpZmRlZiBQUk9DRVNTT1JfQVJDSElURUNUVVJFCiAjIFdlJ3JlIG9uIFdpbmRvd3MgTlQgb3IgdXNpbmcgVkMgNisKKyEgaWZuZGVmIENQVQogQ1BVID0gJChQUk9DRVNTT1JfQVJDSElURUNUVVJFKQotISBpZiAoIiQoQ1BVKSIgPT0gIng4NiIpIHx8ICgiJChDUFUpIiA9PSAiWDg2IikKKyEgIGlmICgiJChDUFUpIiA9PSAieDg2IikgfHwgKCIkKENQVSkiID09ICJYODYiKQogQ1BVID0gaTM4NgorISAgZW5kaWYKICEgZW5kaWYKICFlbHNlICAjICFQUk9DRVNTT1JfQVJDSElURUNUVVJFCiAjIFdlJ3JlIG9uIFdpbmRvd3MgOTUKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwppbmRleCA2NGVkOTcxLi43ZDYyNWYyIDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmMKKysrIGIvc3JjL2J1ZmZlci5jCkBAIC0zMTcxLDcgKzMxNzEsNyBAQAogCQlpX25hbWUgPSBnZXR0YWlsKGN1cmJ1Zi0+Yl9mZm5hbWUpOwogCSAgICAqaV9zdHIgPSBOVUw7CiAJICAgIC8qIFRydW5jYXRlIG5hbWUgYXQgMTAwIGJ5dGVzLiAqLwotCSAgICBsZW4gPSBTVFJMRU4oaV9uYW1lKTsKKwkgICAgbGVuID0gKGludClTVFJMRU4oaV9uYW1lKTsKIAkgICAgaWYgKGxlbiA+IDEwMCkKIAkgICAgewogCQlsZW4gLT0gMTAwOwpAQCAtMzQyNSw3ICszNDI1LDcgQEAKIAkJfQogCQllbHNlCiAjZW5kaWYKLQkJICAgIG4gPSAocCAtIHQpIC0gaXRlbVtncm91cGl0ZW1bZ3JvdXBkZXB0aF1dLm1heHdpZCArIDE7CisJCSAgICBuID0gKGxvbmcpKHAgLSB0KSAtIGl0ZW1bZ3JvdXBpdGVtW2dyb3VwZGVwdGhdXS5tYXh3aWQgKyAxOwogCiAJCSp0ID0gJzwnOwogCQltY2hfbWVtbW92ZSh0ICsgMSwgdCArIG4sIHAgLSAodCArIG4pKTsKQEAgLTM0NjEsNyArMzQ2MSw3IEBACiAJCSAgICBtY2hfbWVtbW92ZSh0ICsgbiAtIGwsIHQsIHAgLSB0KTsKIAkJICAgIGwgPSBuIC0gbDsKIAkJICAgIGlmIChwICsgbCA+PSBvdXQgKyBvdXRsZW4pCi0JCQlsID0gKG91dCArIG91dGxlbikgLSBwIC0gMTsKKwkJCWwgPSAobG9uZykoKG91dCArIG91dGxlbikgLSBwIC0gMSk7CiAJCSAgICBwICs9IGw7CiAJCSAgICBmb3IgKG4gPSBncm91cGl0ZW1bZ3JvdXBkZXB0aF0gKyAxOyBuIDwgY3VyaXRlbTsgbisrKQogCQkJaXRlbVtuXS5zdGFydCArPSBsOwpAQCAtMzc5Miw3ICszNzkyLDcgQEAKIAkgICAgewogCQlpdGVtW2N1cml0ZW1dLnR5cGUgPSBIaWdobGlnaHQ7CiAJCWl0ZW1bY3VyaXRlbV0uc3RhcnQgPSBwOwotCQlpdGVtW2N1cml0ZW1dLm1pbndpZCA9IC1zeW5fbmFtZW4yaWQodCwgcyAtIHQpOworCQlpdGVtW2N1cml0ZW1dLm1pbndpZCA9IC1zeW5fbmFtZW4yaWQodCwgKGludCkocyAtIHQpKTsKIAkJY3VyaXRlbSsrOwogCSAgICB9CiAJICAgICsrczsKZGlmZiAtLWdpdCBhL3NyYy9jaGFyc2V0LmMgYi9zcmMvY2hhcnNldC5jCmluZGV4IGRmODY4NTIuLjZhZDhhZTUgMTAwNjQ0Ci0tLSBhL3NyYy9jaGFyc2V0LmMKKysrIGIvc3JjL2NoYXJzZXQuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJCWVsc2UKIAkJewogCQkgICAgdHJhbnNjaGFyX2hleChoZXhidWYsIGMpOwotCQkgICAgbGVuICs9IFNUUkxFTihoZXhidWYpOworCQkgICAgbGVuICs9IChpbnQpU1RSTEVOKGhleGJ1Zik7CiAJCX0KIAkgICAgfQogCSAgICBlbHNlCmRpZmYgLS1naXQgYS9zcmMvZGlmZi5jIGIvc3JjL2RpZmYuYwppbmRleCBmNTU3N2YxLi41ZjhhODRhIDEwMDY0NAotLS0gYS9zcmMvZGlmZi5jCisrKyBiL3NyYy9kaWZmLmMKQEAgLTE4NTAsOCArMTg1MCw4IEBACiAJCQkmJiB2aW1faXN3aGl0ZShsaW5lX29yZ1tzaV9vcmddKQogCQkJJiYgdmltX2lzd2hpdGUobGluZV9uZXdbc2lfbmV3XSkpCiAJCXsKLQkJICAgIHNpX29yZyA9IHNraXB3aGl0ZShsaW5lX29yZyArIHNpX29yZykgLSBsaW5lX29yZzsKLQkJICAgIHNpX25ldyA9IHNraXB3aGl0ZShsaW5lX25ldyArIHNpX25ldykgLSBsaW5lX25ldzsKKwkJICAgIHNpX29yZyA9IChpbnQpKHNraXB3aGl0ZShsaW5lX29yZyArIHNpX29yZykgLSBsaW5lX29yZyk7CisJCSAgICBzaV9uZXcgPSAoaW50KShza2lwd2hpdGUobGluZV9uZXcgKyBzaV9uZXcpIC0gbGluZV9uZXcpOwogCQl9CiAJCWVsc2UKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2VkaXQuYyBiL3NyYy9lZGl0LmMKaW5kZXggOGZkOWVkNC4uYzYyODdlMCAxMDA2NDQKLS0tIGEvc3JjL2VkaXQuYworKysgYi9zcmMvZWRpdC5jCkBAIC0yNDg1LDcgKzI0ODUsNyBAQAogCWNvbXBsX21hdGNoX2FycmF5c2l6ZSA9IDA7CiAJY29tcGwgPSBjb21wbF9maXJzdF9tYXRjaDsKIAlpZiAoY29tcGxfbGVhZGVyICE9IE5VTEwpCi0JICAgIGxlYWRfbGVuID0gU1RSTEVOKGNvbXBsX2xlYWRlcik7CisJICAgIGxlYWRfbGVuID0gKGludClTVFJMRU4oY29tcGxfbGVhZGVyKTsKIAlkbwogCXsKIAkgICAgaWYgKChjb21wbC0+Y3BfZmxhZ3MgJiBPUklHSU5BTF9URVhUKSA9PSAwCkBAIC0yNjQzLDcgKzI2NDMsNyBAQAogICAgICAqIHBhdHRlcm4uICovCiAgICAgaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKQogICAgIHsKLQlpID0gU1RSTEVOKHBhdCkgKyA4OworCWkgPSAoaW50KVNUUkxFTihwYXQpICsgODsKIAlwdHIgPSBhbGxvYyhpKTsKIAlpZiAocHRyID09IE5VTEwpCiAJICAgIHJldHVybjsKQEAgLTI5NjcsNyArMjk2Nyw3IEBACiAgICAgbWJfcHRyX2JhY2sobGluZSwgcCk7CiAKICAgICB2aW1fZnJlZShjb21wbF9sZWFkZXIpOwotICAgIGNvbXBsX2xlYWRlciA9IHZpbV9zdHJuc2F2ZShsaW5lICsgY29tcGxfY29sLCAocCAtIGxpbmUpIC0gY29tcGxfY29sKTsKKyAgICBjb21wbF9sZWFkZXIgPSB2aW1fc3RybnNhdmUobGluZSArIGNvbXBsX2NvbCwgKGludCkocCAtIGxpbmUpIC0gY29tcGxfY29sKTsKICAgICBpZiAoY29tcGxfbGVhZGVyICE9IE5VTEwpCiAgICAgewogCWluc19jb21wbF9kZWxfcHVtKCk7CkBAIC0zOTg4LDcgKzM5ODgsNyBAQAogCS8qIFNldCAiY29tcGxfc2hvd25fbWF0Y2giIHRvIHRoZSBhY3R1YWxseSBzaG93biBtYXRjaCwgaXQgbWF5IGRpZmZlcgogCSAqIHdoZW4gImNvbXBsX2xlYWRlciIgaXMgdXNlZCB0byBvbWl0IHNvbWUgb2YgdGhlIG1hdGNoZXMuICovCiAJd2hpbGUgKCFpbnNfY29tcGxfZXF1YWwoY29tcGxfc2hvd25fbWF0Y2gsCi0JCQkJCSAgIGNvbXBsX2xlYWRlciwgU1RSTEVOKGNvbXBsX2xlYWRlcikpCisJCQkJICAgICAgY29tcGxfbGVhZGVyLCAoaW50KVNUUkxFTihjb21wbF9sZWFkZXIpKQogCQkmJiBjb21wbF9zaG93bl9tYXRjaC0+Y3BfbmV4dCAhPSBOVUxMCiAJCSYmIGNvbXBsX3Nob3duX21hdGNoLT5jcF9uZXh0ICE9IGNvbXBsX2ZpcnN0X21hdGNoKQogCSAgICBjb21wbF9zaG93bl9tYXRjaCA9IGNvbXBsX3Nob3duX21hdGNoLT5jcF9uZXh0OwpAQCAtNDAzOCw3ICs0MDM4LDcgQEAKIAlpZiAoKGNvbXBsX3Nob3duX21hdGNoLT5jcF9mbGFncyAmIE9SSUdJTkFMX1RFWFQpID09IDAKIAkJJiYgY29tcGxfbGVhZGVyICE9IE5VTEwKIAkJJiYgIWluc19jb21wbF9lcXVhbChjb21wbF9zaG93bl9tYXRjaCwKLQkJCQkJICBjb21wbF9sZWFkZXIsIFNUUkxFTihjb21wbF9sZWFkZXIpKSkKKwkJCQkgICAgIGNvbXBsX2xlYWRlciwgKGludClTVFJMRU4oY29tcGxfbGVhZGVyKSkpCiAJICAgICsrdG9kbzsKIAllbHNlCiAJICAgIC8qIFJlbWVtYmVyIGEgbWF0Y2hpbmcgaXRlbS4gKi8KQEAgLTQ0NDYsNyArNDQ0Niw3IEBACiAJfQogCWVsc2UgaWYgKGN0cmxfeF9tb2RlID09IENUUkxfWF9XSE9MRV9MSU5FKQogCXsKLQkgICAgY29tcGxfY29sID0gc2tpcHdoaXRlKGxpbmUpIC0gbGluZTsKKwkgICAgY29tcGxfY29sID0gKGNvbG5yX1QpKHNraXB3aGl0ZShsaW5lKSAtIGxpbmUpOwogCSAgICBjb21wbF9sZW5ndGggPSAoaW50KWN1cnNfY29sIC0gKGludCljb21wbF9jb2w7CiAJICAgIGlmIChjb21wbF9sZW5ndGggPCAwKQkvKiBjdXJzb3IgaW4gaW5kZW50OiBlbXB0eSBwYXR0ZXJuICovCiAJCWNvbXBsX2xlbmd0aCA9IDA7CkBAIC01NjY4LDcgKzU2NjgsNyBAQAogICAgIGlmICghd2FzYXRlbmQgJiYgaGFzX2Zvcm1hdF9vcHRpb24oRk9fV0hJVEVfUEFSKSkKICAgICB7CiAJbmV3ID0gbWxfZ2V0X2N1cmxpbmUoKTsKLQlsZW4gPSBTVFJMRU4obmV3KTsKKwlsZW4gPSAoY29sbnJfVClTVFJMRU4obmV3KTsKIAlpZiAoY3Vyd2luLT53X2N1cnNvci5jb2wgPT0gbGVuKQogCXsKIAkgICAgcG5ldyA9IHZpbV9zdHJuc2F2ZShuZXcsIGxlbiArIDIpOwpAQCAtNTk4NCw3ICs1OTg0LDcgQEAKIAkgICAgICogZGVsZXRlZCBjaGFyYWN0ZXJzLiAqLwogCSAgICBpZiAoVklzdWFsX2FjdGl2ZSAmJiBWSXN1YWwubG51bSA9PSBjdXJ3aW4tPndfY3Vyc29yLmxudW0pCiAJICAgIHsKLQkJY2MgPSBTVFJMRU4obWxfZ2V0X2N1cmxpbmUoKSk7CisJCWNjID0gKGludClTVFJMRU4obWxfZ2V0X2N1cmxpbmUoKSk7CiAJCWlmIChWSXN1YWwuY29sID4gKGNvbG5yX1QpY2MpCiAJCXsKIAkJICAgIFZJc3VhbC5jb2wgPSBjYzsKQEAgLTY3MTgsNyArNjcxOCw3IEBACiAJICAgIGRlbF9jaGFyKEZBTFNFKTsKICMgaWZkZWYgRkVBVF9WUkVQTEFDRQogCSAgICBpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQotCQlvcmlnX2xlbiA9IFNUUkxFTihtbF9nZXRfY3Vyc29yKCkpOworCQlvcmlnX2xlbiA9IChpbnQpU1RSTEVOKG1sX2dldF9jdXJzb3IoKSk7CiAjIGVuZGlmCiAJICAgIHJlcGxhY2VfcHVzaChjYyk7CiAJfQpAQCAtNjcyOCw3ICs2NzI4LDcgQEAKIAkgICAgcGNoYXJfY3Vyc29yKGNjKTsKICNpZmRlZiBGRUFUX1ZSRVBMQUNFCiAJICAgIGlmIChTdGF0ZSAmIFZSRVBMQUNFX0ZMQUcpCi0JCW9yaWdfbGVuID0gU1RSTEVOKG1sX2dldF9jdXJzb3IoKSkgLSAxOworCQlvcmlnX2xlbiA9IChpbnQpU1RSTEVOKG1sX2dldF9jdXJzb3IoKSkgLSAxOwogI2VuZGlmCiAJfQogCXJlcGxhY2VfcG9wX2lucygpOwpAQCAtNjczOCw3ICs2NzM4LDcgQEAKIAl7CiAJICAgIC8qIEdldCB0aGUgbnVtYmVyIG9mIHNjcmVlbiBjZWxscyB1c2VkIGJ5IHRoZSBpbnNlcnRlZCBjaGFyYWN0ZXJzICovCiAJICAgIHAgPSBtbF9nZXRfY3Vyc29yKCk7Ci0JICAgIGluc19sZW4gPSBTVFJMRU4ocCkgLSBvcmlnX2xlbjsKKwkgICAgaW5zX2xlbiA9IChpbnQpU1RSTEVOKHApIC0gb3JpZ19sZW47CiAJICAgIHZjb2wgPSBzdGFydF92Y29sOwogCSAgICBmb3IgKGkgPSAwOyBpIDwgaW5zX2xlbjsgKytpKQogCSAgICB7CkBAIC03OTA4LDcgKzc5MDgsNyBAQAogCQkJCQkJCQkJVFJVRSk7CiAJCSAgICBpbnQJICAgIGxlbjsKIAotCQkgICAgbGVuID0gU1RSTEVOKHB0cik7CisJCSAgICBsZW4gPSAoaW50KVNUUkxFTihwdHIpOwogCQkgICAgaWYgKGxlbiA+IDAgJiYgcHRyW2xlbiAtIDFdID09ICcgJykKIAkJCXB0cltsZW4gLSAxXSA9IE5VTDsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2V2YWwuYyBiL3NyYy9ldmFsLmMKaW5kZXggNGRjNmEyOS4uMWYyMDhiOSAxMDA2NDQKLS0tIGEvc3JjL2V2YWwuYworKysgYi9zcmMvZXZhbC5jCkBAIC0xOTEzLDcgKzE5MTMsNyBAQAogICAgIGRpY3RpdGVtX1QJKmRpOwogICAgIGludAkJdG9kbzsKIAotICAgIHRvZG8gPSBodC0+aHRfdXNlZDsKKyAgICB0b2RvID0gKGludClodC0+aHRfdXNlZDsKICAgICBmb3IgKGhpID0gaHQtPmh0X2FycmF5OyB0b2RvID4gMCAmJiAhZ290X2ludDsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC0yNjY2LDcgKzI2NjYsNyBAQAogCQl0eXB2YWxfVCB0djsKIAogCQkvKiBoYW5kbGUgKz0sIC09IGFuZCAuPSAqLwotCQlpZiAoZ2V0X3Zhcl90dihscC0+bGxfbmFtZSwgU1RSTEVOKGxwLT5sbF9uYW1lKSwKKwkJaWYgKGdldF92YXJfdHYobHAtPmxsX25hbWUsIChpbnQpU1RSTEVOKGxwLT5sbF9uYW1lKSwKIAkJCQkJCQkgICAgICZ0diwgVFJVRSkgPT0gT0spCiAJCXsKIAkJICAgIGlmICh0dl9vcCgmdHYsIHJldHR2LCBvcCkgPT0gT0spCkBAIC0zMTI5LDcgKzMxMjksNyBAQAogCSsrZnVkaS5mZF9kaWN0LT5kdl9yZWZjb3VudDsKIAogICAgIC8qIElmIGl0IGlzIHRoZSBuYW1lIG9mIGEgdmFyaWFibGUgb2YgdHlwZSBWQVJfRlVOQyB1c2UgaXRzIGNvbnRlbnRzLiAqLwotICAgIGxlbiA9IFNUUkxFTih0b2ZyZWUpOworICAgIGxlbiA9IChpbnQpU1RSTEVOKHRvZnJlZSk7CiAgICAgbmFtZSA9IGRlcmVmX2Z1bmNfbmFtZSh0b2ZyZWUsICZsZW4pOwogCiAgICAgLyogU2tpcCB3aGl0ZSBzcGFjZSB0byBhbGxvdyAiOmNhbGwgZnVuYyAoKSIuICBOb3QgZ29vZCwgYnV0IHJlcXVpcmVkIGZvcgpAQCAtMzE2NCw3ICszMTY0LDcgQEAKIAkgICAgY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOwogCX0KIAlhcmcgPSBzdGFydGFyZzsKLQlpZiAoZ2V0X2Z1bmNfdHYobmFtZSwgU1RSTEVOKG5hbWUpLCAmcmV0dHYsICZhcmcsCisJaWYgKGdldF9mdW5jX3R2KG5hbWUsIChpbnQpU1RSTEVOKG5hbWUpLCAmcmV0dHYsICZhcmcsCiAJCSAgICBlYXAtPmxpbmUxLCBlYXAtPmxpbmUyLCAmZG9lc3JhbmdlLAogCQkJCQkgICAgIWVhcC0+c2tpcCwgZnVkaS5mZF9kaWN0KSA9PSBGQUlMKQogCXsKQEAgLTM0OTEsNyArMzQ5MSw3IEBACiAJCWlmIChkZWVwIDwgMCB8fCBkZWVwID4gMSkKIAkJewogCQkgICAgLyogcmVjdXJzaXZlOiBsb2NrL3VubG9jayB0aGUgaXRlbXMgdGhlIExpc3QgY29udGFpbnMgKi8KLQkJICAgIHRvZG8gPSBkLT5kdl9oYXNodGFiLmh0X3VzZWQ7CisJCSAgICB0b2RvID0gKGludClkLT5kdl9oYXNodGFiLmh0X3VzZWQ7CiAJCSAgICBmb3IgKGhpID0gZC0+ZHZfaGFzaHRhYi5odF9hcnJheTsgdG9kbyA+IDA7ICsraGkpCiAJCSAgICB7CiAJCQlpZiAoIUhBU0hJVEVNX0VNUFRZKGhpKSkKQEAgLTM1MzQsNyArMzUzNCw3IEBACiAgICAgaW50CQl0b2RvOwogCiAgICAgaGFzaF9sb2NrKCZnbG9idmFyaHQpOwotICAgIHRvZG8gPSBnbG9idmFyaHQuaHRfdXNlZDsKKyAgICB0b2RvID0gKGludClnbG9idmFyaHQuaHRfdXNlZDsKICAgICBmb3IgKGhpID0gZ2xvYnZhcmh0Lmh0X2FycmF5OyB0b2RvID4gMCAmJiAhZ290X2ludDsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC01NDgwLDcgKzU0ODAsNyBAQAogICAgIGlmIChkaWN0X2xlbihkMSkgIT0gZGljdF9sZW4oZDIpKQogCXJldHVybiBGQUxTRTsKIAotICAgIHRvZG8gPSBkMS0+ZHZfaGFzaHRhYi5odF91c2VkOworICAgIHRvZG8gPSAoaW50KWQxLT5kdl9oYXNodGFiLmh0X3VzZWQ7CiAgICAgZm9yIChoaSA9IGQxLT5kdl9oYXNodGFiLmh0X2FycmF5OyB0b2RvID4gMDsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC02MTMwLDcgKzYxMzAsNyBAQAogICAgIGludAkJdG9kbzsKICAgICBoYXNoaXRlbV9UCSpoaTsKIAotICAgIHRvZG8gPSBodC0+aHRfdXNlZDsKKyAgICB0b2RvID0gKGludClodC0+aHRfdXNlZDsKICAgICBmb3IgKGhpID0gaHQtPmh0X2FycmF5OyB0b2RvID4gMDsgKytoaSkKIAlpZiAoIUhBU0hJVEVNX0VNUFRZKGhpKSkKIAl7CkBAIC02MjUxLDcgKzYyNTEsNyBAQAogCiAgICAgLyogTG9jayB0aGUgaGFzaHRhYiwgd2UgZG9uJ3Qgd2FudCBpdCB0byByZXNpemUgd2hpbGUgZnJlZWluZyBpdGVtcy4gKi8KICAgICBoYXNoX2xvY2soJmQtPmR2X2hhc2h0YWIpOwotICAgIHRvZG8gPSBkLT5kdl9oYXNodGFiLmh0X3VzZWQ7CisgICAgdG9kbyA9IChpbnQpZC0+ZHZfaGFzaHRhYi5odF91c2VkOwogICAgIGZvciAoaGkgPSBkLT5kdl9oYXNodGFiLmh0X2FycmF5OyB0b2RvID4gMDsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC02MjgwLDcgKzYyODAsNyBAQAogewogICAgIGRpY3RpdGVtX1QgKmRpOwogCi0gICAgZGkgPSAoZGljdGl0ZW1fVCAqKWFsbG9jKHNpemVvZihkaWN0aXRlbV9UKSArIFNUUkxFTihrZXkpKTsKKyAgICBkaSA9IChkaWN0aXRlbV9UICopYWxsb2MoKHVuc2lnbmVkKShzaXplb2YoZGljdGl0ZW1fVCkgKyBTVFJMRU4oa2V5KSkpOwogICAgIGlmIChkaSAhPSBOVUxMKQogICAgIHsKIAlTVFJDUFkoZGktPmRpX2tleSwga2V5KTsKQEAgLTYyOTgsNyArNjI5OCw4IEBACiB7CiAgICAgZGljdGl0ZW1fVCAqZGk7CiAKLSAgICBkaSA9IChkaWN0aXRlbV9UICopYWxsb2Moc2l6ZW9mKGRpY3RpdGVtX1QpICsgU1RSTEVOKG9yZy0+ZGlfa2V5KSk7CisgICAgZGkgPSAoZGljdGl0ZW1fVCAqKWFsbG9jKCh1bnNpZ25lZCkoc2l6ZW9mKGRpY3RpdGVtX1QpCisJCQkJCQkgICAgICArIFNUUkxFTihvcmctPmRpX2tleSkpKTsKICAgICBpZiAoZGkgIT0gTlVMTCkKICAgICB7CiAJU1RSQ1BZKGRpLT5kaV9rZXksIG9yZy0+ZGlfa2V5KTsKQEAgLTYzNjUsNyArNjM2Niw3IEBACiAJICAgIG9yaWctPmR2X2NvcHlJRCA9IGNvcHlJRDsKIAkgICAgb3JpZy0+ZHZfY29weWRpY3QgPSBjb3B5OwogCX0KLQl0b2RvID0gb3JpZy0+ZHZfaGFzaHRhYi5odF91c2VkOworCXRvZG8gPSAoaW50KW9yaWctPmR2X2hhc2h0YWIuaHRfdXNlZDsKIAlmb3IgKGhpID0gb3JpZy0+ZHZfaGFzaHRhYi5odF9hcnJheTsgdG9kbyA+IDAgJiYgIWdvdF9pbnQ7ICsraGkpCiAJewogCSAgICBpZiAoIUhBU0hJVEVNX0VNUFRZKGhpKSkKQEAgLTY0NjIsNyArNjQ2Myw3IEBACiB7CiAgICAgaWYgKGQgPT0gTlVMTCkKIAlyZXR1cm4gMEw7Ci0gICAgcmV0dXJuIGQtPmR2X2hhc2h0YWIuaHRfdXNlZDsKKyAgICByZXR1cm4gKGxvbmcpZC0+ZHZfaGFzaHRhYi5odF91c2VkOwogfQogCiAvKgpAQCAtNjU2Nyw3ICs2NTY4LDcgQEAKICAgICBnYV9pbml0MigmZ2EsIChpbnQpc2l6ZW9mKGNoYXIpLCA4MCk7CiAgICAgZ2FfYXBwZW5kKCZnYSwgJ3snKTsKIAotICAgIHRvZG8gPSBkLT5kdl9oYXNodGFiLmh0X3VzZWQ7CisgICAgdG9kbyA9IChpbnQpZC0+ZHZfaGFzaHRhYi5odF91c2VkOwogICAgIGZvciAoaGkgPSBkLT5kdl9oYXNodGFiLmh0X2FycmF5OyB0b2RvID4gMCAmJiAhZ290X2ludDsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC02ODU5LDcgKzY4NjAsNyBAQAogICAgIGxlbiA9IChmdW5jdGlvbiA/IDEzIDogMyk7CiAgICAgaWYgKHN0ciAhPSBOVUxMKQogICAgIHsKLQlsZW4gKz0gU1RSTEVOKHN0cik7CisJbGVuICs9ICh1bnNpZ25lZClTVFJMRU4oc3RyKTsKIAlmb3IgKHAgPSBzdHI7ICpwICE9IE5VTDsgbWJfcHRyX2FkdihwKSkKIAkgICAgaWYgKCpwID09ICdcJycpCiAJCSsrbGVuOwpAQCAtNzI5MSw3ICs3MjkyLDcgQEAKIAkgICAgKmxlbnAgPSAwOwogCSAgICByZXR1cm4gKGNoYXJfdSAqKSIiOwkvKiBqdXN0IGluIGNhc2UgKi8KIAl9Ci0JKmxlbnAgPSBTVFJMRU4odi0+ZGlfdHYudnZhbC52X3N0cmluZyk7CisJKmxlbnAgPSAoaW50KVNUUkxFTih2LT5kaV90di52dmFsLnZfc3RyaW5nKTsKIAlyZXR1cm4gdi0+ZGlfdHYudnZhbC52X3N0cmluZzsKICAgICB9CiAKQEAgLTc1NTQsMjEgKzc1NTUsMjEgQEAKIAlzd2l0Y2ggKGVycm9yKQogCXsKIAkgICAgY2FzZSBFUlJPUl9VTktOT1dOOgotCQkgICAgZW1zZ19mdW5jbmFtZSgiRTExNzogVW5rbm93biBmdW5jdGlvbjogJXMiLCBuYW1lKTsKKwkJICAgIGVtc2dfZnVuY25hbWUoTl8oIkUxMTc6IFVua25vd24gZnVuY3Rpb246ICVzIiksIG5hbWUpOwogCQkgICAgYnJlYWs7CiAJICAgIGNhc2UgRVJST1JfVE9PTUFOWToKIAkJICAgIGVtc2dfZnVuY25hbWUoZV90b29tYW55YXJnLCBuYW1lKTsKIAkJICAgIGJyZWFrOwogCSAgICBjYXNlIEVSUk9SX1RPT0ZFVzoKLQkJICAgIGVtc2dfZnVuY25hbWUoIkUxMTk6IE5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiLAorCQkgICAgZW1zZ19mdW5jbmFtZShOXygiRTExOTogTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uOiAlcyIpLAogCQkJCQkJCQkJbmFtZSk7CiAJCSAgICBicmVhazsKIAkgICAgY2FzZSBFUlJPUl9TQ1JJUFQ6Ci0JCSAgICBlbXNnX2Z1bmNuYW1lKCJFMTIwOiBVc2luZyA8U0lEPiBub3QgaW4gYSBzY3JpcHQgY29udGV4dDogJXMiLAorCQkgICAgZW1zZ19mdW5jbmFtZShOXygiRTEyMDogVXNpbmcgPFNJRD4gbm90IGluIGEgc2NyaXB0IGNvbnRleHQ6ICVzIiksCiAJCQkJCQkJCQluYW1lKTsKIAkJICAgIGJyZWFrOwogCSAgICBjYXNlIEVSUk9SX0RJQ1Q6Ci0JCSAgICBlbXNnX2Z1bmNuYW1lKCJFNzI1OiBDYWxsaW5nIGRpY3QgZnVuY3Rpb24gd2l0aG91dCBEaWN0aW9uYXJ5OiAlcyIsCisJCSAgICBlbXNnX2Z1bmNuYW1lKE5fKCJFNzI1OiBDYWxsaW5nIGRpY3QgZnVuY3Rpb24gd2l0aG91dCBEaWN0aW9uYXJ5OiAlcyIpLAogCQkJCQkJCQkJbmFtZSk7CiAJCSAgICBicmVhazsKIAl9CkBAIC04MDQ3LDcgKzgwNDgsNyBAQAogCSAgICByZXR1cm47CiAJdCArPSAoKm1iX3B0cjJsZW4pKHQpOwogICAgIH0KLSAgICByZXR0di0+dnZhbC52X251bWJlciA9IHQgLSBzdHI7CisgICAgcmV0dHYtPnZ2YWwudl9udW1iZXIgPSAodmFybnVtYmVyX1QpKHQgLSBzdHIpOwogI2Vsc2UKICAgICBpZiAoaWR4IDw9IFNUUkxFTihzdHIpKQogCXJldHR2LT52dmFsLnZfbnVtYmVyID0gaWR4OwpAQCAtODExMCw3ICs4MTExLDcgQEAKICAgICB9CiAKICAgICBpZiAoaXRlbSA9PSBOVUxMKQotCSh2b2lkKWNhbGxfZnVuYyhmdW5jLCBTVFJMRU4oZnVuYyksIHJldHR2LCBhcmdjLCBhcmd2LAorCSh2b2lkKWNhbGxfZnVuYyhmdW5jLCAoaW50KVNUUkxFTihmdW5jKSwgcmV0dHYsIGFyZ2MsIGFyZ3YsCiAJCQkJIGN1cndpbi0+d19jdXJzb3IubG51bSwgY3Vyd2luLT53X2N1cnNvci5sbnVtLAogCQkJCQkJICAgICAgJmR1bW15LCBUUlVFLCBzZWxmZGljdCk7CiAKQEAgLTgxOTEsNyArODE5Miw3IEBACiAJewogCSAgICAvKiAnPiBjYW4gYmUgTUFYQ09MLCBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSB0aGVuICovCiAJICAgIGlmIChmcC0+bG51bSA8PSBjdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCkKLQkJY29sID0gU1RSTEVOKG1sX2dldChmcC0+bG51bSkpICsgMTsKKwkJY29sID0gKGNvbG5yX1QpU1RSTEVOKG1sX2dldChmcC0+bG51bSkpICsgMTsKIAkgICAgZWxzZQogCQljb2wgPSBNQVhDT0w7CiAJfQpAQCAtODQyMCw3ICs4NDIxLDcgQEAKIAkJICAgIEVNU0coXyhlX2ludmFyZykpOwogCSAgICB9CiAKLQkgICAgdG9kbyA9IGVycm9yID8gMCA6IGQtPmR2X2hhc2h0YWIuaHRfdXNlZDsKKwkgICAgdG9kbyA9IGVycm9yID8gMCA6IChpbnQpZC0+ZHZfaGFzaHRhYi5odF91c2VkOwogCSAgICBmb3IgKGhpID0gZC0+ZHZfaGFzaHRhYi5odF9hcnJheTsgdG9kbyA+IDA7ICsraGkpCiAJICAgIHsKIAkJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC04OTUyLDcgKzg5NTMsNyBAQAogCiAJICAgIC8qIEdvIG92ZXIgYWxsIGVudHJpZXMgaW4gdGhlIHNlY29uZCBkaWN0IGFuZCBhZGQgdGhlbSB0byB0aGUKIAkgICAgICogZmlyc3QgZGljdC4gKi8KLQkgICAgdG9kbyA9IGQyLT5kdl9oYXNodGFiLmh0X3VzZWQ7CisJICAgIHRvZG8gPSAoaW50KWQyLT5kdl9oYXNodGFiLmh0X3VzZWQ7CiAJICAgIGZvciAoaGkyID0gZDItPmR2X2hhc2h0YWIuaHRfYXJyYXk7IHRvZG8gPiAwOyArK2hpMikKIAkgICAgewogCQlpZiAoIUhBU0hJVEVNX0VNUFRZKGhpMikpCkBAIC05MTU0LDcgKzkxNTUsNyBAQAogCiAJICAgIGh0ID0gJmQtPmR2X2hhc2h0YWI7CiAJICAgIGhhc2hfbG9jayhodCk7Ci0JICAgIHRvZG8gPSBodC0+aHRfdXNlZDsKKwkgICAgdG9kbyA9IChpbnQpaHQtPmh0X3VzZWQ7CiAJICAgIGZvciAoaGkgPSBodC0+aHRfYXJyYXk7IHRvZG8gPiAwOyArK2hpKQogCSAgICB7CiAJCWlmICghSEFTSElURU1fRU1QVFkoaGkpKQpAQCAtMTEzMjAsNyArMTEzMjEsNyBAQAogCQlpZiAoeHBfbmFtZSA9PSBOVUxMKQogCQkgICAgcmV0dXJuOwogCi0JCXhwX25hbWVsZW4gPSBTVFJMRU4oeHBfbmFtZSk7CisJCXhwX25hbWVsZW4gPSAoaW50KVNUUkxFTih4cF9uYW1lKTsKIAogCQlpZiAocGFyc2VfY29tcGxfYXJnKHhwX25hbWUsIHhwX25hbWVsZW4sICZ4cF90eXBlLCAmYXJndCwKIAkJCQkJCQkgICAgICZ4cF9hcmcpID09IEZBSUwpCkBAIC0xMTYzNCw3ICsxMTYzNSw3IEBACiAgICAgaWYgKHJldHR2X2xpc3RfYWxsb2MocmV0dHYpID09IEZBSUwpCiAJcmV0dXJuOwogCi0gICAgdG9kbyA9IGQtPmR2X2hhc2h0YWIuaHRfdXNlZDsKKyAgICB0b2RvID0gKGludClkLT5kdl9oYXNodGFiLmh0X3VzZWQ7CiAgICAgZm9yIChoaSA9IGQtPmR2X2hhc2h0YWIuaHRfYXJyYXk7IHRvZG8gPiAwOyArK2hpKQogICAgIHsKIAlpZiAoIUhBU0hJVEVNX0VNUFRZKGhpKSkKQEAgLTEyMTUzLDggKzEyMTU0LDggQEAKIAkgICAgZWxzZQogCSAgICB7CiAjaWZkZWYgRkVBVF9NQllURQotCQlzdGFydGNvbCA9IHJlZ21hdGNoLnN0YXJ0cFswXQotCQkJCSAgICArICgqbWJfcHRyMmxlbikocmVnbWF0Y2guc3RhcnRwWzBdKSAtIHN0cjsKKwkJc3RhcnRjb2wgPSAoY29sbnJfVCkocmVnbWF0Y2guc3RhcnRwWzBdCisJCQkJICAgICsgKCptYl9wdHIybGVuKShyZWdtYXRjaC5zdGFydHBbMF0pIC0gc3RyKTsKICNlbHNlCiAJCXN0YXJ0Y29sID0gcmVnbWF0Y2guc3RhcnRwWzBdICsgMSAtIHN0cjsKICNlbmRpZgpAQCAtMTIxOTgsNyArMTIxOTksNyBAQAogCQllbHNlCiAJCSAgICByZXR0di0+dnZhbC52X251bWJlciA9CiAJCQkJCSh2YXJudW1iZXJfVCkocmVnbWF0Y2guZW5kcFswXSAtIHN0cik7Ci0JCXJldHR2LT52dmFsLnZfbnVtYmVyICs9IHN0ciAtIGV4cHI7CisJCXJldHR2LT52dmFsLnZfbnVtYmVyICs9ICh2YXJudW1iZXJfVCkoc3RyIC0gZXhwcik7CiAJICAgIH0KIAl9CiAJdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CkBAIC0xMjMyMyw3ICsxMjMyNCw3IEBACiAJZCA9IGFyZ3ZhcnNbMF0udnZhbC52X2RpY3Q7CiAJaWYgKGQgIT0gTlVMTCkKIAl7Ci0JICAgIHRvZG8gPSBkLT5kdl9oYXNodGFiLmh0X3VzZWQ7CisJICAgIHRvZG8gPSAoaW50KWQtPmR2X2hhc2h0YWIuaHRfdXNlZDsKIAkgICAgZm9yIChoaSA9IGQtPmR2X2hhc2h0YWIuaHRfYXJyYXk7IHRvZG8gPiAwOyArK2hpKQogCSAgICB7CiAJCWlmICghSEFTSElURU1fRU1QVFkoaGkpKQpAQCAtMTI3MTEsNyArMTI3MTIsNyBAQAogICAgIGZpbHRkID0gMDsKICAgICB3aGlsZSAoY250IDwgbWF4bGluZSB8fCBtYXhsaW5lIDwgMCkKICAgICB7Ci0JcmVhZGxlbiA9IGZyZWFkKGJ1ZiArIGZpbHRkLCAxLCBGUkVBRF9TSVpFIC0gZmlsdGQsIGZkKTsKKwlyZWFkbGVuID0gKGludClmcmVhZChidWYgKyBmaWx0ZCwgMSwgRlJFQURfU0laRSAtIGZpbHRkLCBmZCk7CiAJYnVmbGVuID0gZmlsdGQgKyByZWFkbGVuOwogCXRvbGlzdCA9IDA7CiAJZm9yICggOyBmaWx0ZCA8IGJ1ZmxlbiB8fCByZWFkbGVuIDw9IDA7ICsrZmlsdGQpCkBAIC0xNDU5OSw3ICsxNDYwMCw3IEBACiAgICAgY29weV90digmKCoobGlzdGl0ZW1fVCAqKilzMiktPmxpX3R2LCAmYXJndlsxXSk7CiAKICAgICByZXR0di52X3R5cGUgPSBWQVJfVU5LTk9XTjsJCS8qIGNsZWFyX3R2KCkgdXNlcyB0aGlzICovCi0gICAgcmVzID0gY2FsbF9mdW5jKGl0ZW1fY29tcGFyZV9mdW5jLCBTVFJMRU4oaXRlbV9jb21wYXJlX2Z1bmMpLAorICAgIHJlcyA9IGNhbGxfZnVuYyhpdGVtX2NvbXBhcmVfZnVuYywgKGludClTVFJMRU4oaXRlbV9jb21wYXJlX2Z1bmMpLAogCQkJCSAmcmV0dHYsIDIsIGFyZ3YsIDBMLCAwTCwgJmR1bW15LCBUUlVFLCBOVUxMKTsKICAgICBjbGVhcl90digmYXJndlswXSk7CiAgICAgY2xlYXJfdHYoJmFyZ3ZbMV0pOwpAQCAtMTUxMzQsNyArMTUxMzUsNyBAQAogCiAgICAgbmVlZGxlID0gZ2V0X3R2X3N0cmluZ19jaGsoJmFyZ3ZhcnNbMV0pOwogICAgIGhheXN0YWNrID0gZ2V0X3R2X3N0cmluZ19idWZfY2hrKCZhcmd2YXJzWzBdLCBidWYpOwotICAgIGhheXN0YWNrX2xlbiA9IFNUUkxFTihoYXlzdGFjayk7CisgICAgaGF5c3RhY2tfbGVuID0gKGludClTVFJMRU4oaGF5c3RhY2spOwogCiAgICAgcmV0dHYtPnZ2YWwudl9udW1iZXIgPSAtMTsKICAgICBpZiAobmVlZGxlID09IE5VTEwgfHwgaGF5c3RhY2sgPT0gTlVMTCkKQEAgLTE2OTcyLDcgKzE2OTczLDcgQEAKIAogCSAgICAvKiBJbnZva2UgdGhlIGZ1bmN0aW9uLiAgUmVjdXJzaXZlISAqLwogCSAgICBzID0gZnVuY3R2LnZ2YWwudl9zdHJpbmc7Ci0JICAgIHJldCA9IGdldF9mdW5jX3R2KHMsIFNUUkxFTihzKSwgcmV0dHYsIGFyZywKKwkgICAgcmV0ID0gZ2V0X2Z1bmNfdHYocywgKGludClTVFJMRU4ocyksIHJldHR2LCBhcmcsCiAJCQljdXJ3aW4tPndfY3Vyc29yLmxudW0sIGN1cndpbi0+d19jdXJzb3IubG51bSwKIAkJCSZsZW4sIGV2YWx1YXRlLCBzZWxmZGljdCk7CiAKQEAgLTE3NTEyLDcgKzE3NTEzLDcgQEAKICAgICBkaWN0aXRlbV9UCSp2OwogCiAgICAgaGFzaF9sb2NrKGh0KTsKLSAgICB0b2RvID0gaHQtPmh0X3VzZWQ7CisgICAgdG9kbyA9IChpbnQpaHQtPmh0X3VzZWQ7CiAgICAgZm9yIChoaSA9IGh0LT5odF9hcnJheTsgdG9kbyA+IDA7ICsraGkpCiAgICAgewogCWlmICghSEFTSElURU1fRU1QVFkoaGkpKQpAQCAtMTgxNjYsNyArMTgxNjcsNyBAQAogICAgIHsKIAlpZiAoIWVhcC0+c2tpcCkKIAl7Ci0JICAgIHRvZG8gPSBmdW5jX2hhc2h0YWIuaHRfdXNlZDsKKwkgICAgdG9kbyA9IChpbnQpZnVuY19oYXNodGFiLmh0X3VzZWQ7CiAJICAgIGZvciAoaGkgPSBmdW5jX2hhc2h0YWIuaHRfYXJyYXk7IHRvZG8gPiAwICYmICFnb3RfaW50OyArK2hpKQogCSAgICB7CiAJCWlmICghSEFTSElURU1fRU1QVFkoaGkpKQpAQCAtMTgyMDAsNyArMTgyMDEsNyBAQAogCSAgICB7CiAJCXJlZ21hdGNoLnJtX2ljID0gcF9pYzsKIAotCQl0b2RvID0gZnVuY19oYXNodGFiLmh0X3VzZWQ7CisJCXRvZG8gPSAoaW50KWZ1bmNfaGFzaHRhYi5odF91c2VkOwogCQlmb3IgKGhpID0gZnVuY19oYXNodGFiLmh0X2FycmF5OyB0b2RvID4gMCAmJiAhZ290X2ludDsgKytoaSkKIAkJewogCQkgICAgaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC0xODY4NCw4ICsxODY4NSw4IEBACiAJCWlmIChzY3JpcHRuYW1lICE9IE5VTEwpCiAJCXsKIAkJICAgIHAgPSB2aW1fc3RyY2hyKHNjcmlwdG5hbWUsICcvJyk7Ci0JCSAgICBwbGVuID0gU1RSTEVOKHApOwotCQkgICAgc2xlbiA9IFNUUkxFTihzb3VyY2luZ19uYW1lKTsKKwkJICAgIHBsZW4gPSAoaW50KVNUUkxFTihwKTsKKwkJICAgIHNsZW4gPSAoaW50KVNUUkxFTihzb3VyY2luZ19uYW1lKTsKIAkJICAgIGlmIChzbGVuID4gcGxlbiAmJiBmbmFtZWNtcChwLAogCQkJCQkgICAgc291cmNpbmdfbmFtZSArIHNsZW4gLSBwbGVuKSA9PSAwKQogCQkJaiA9IE9LOwpAQCAtMTg4NjYsNyArMTg4NjcsNyBAQAogCiAgICAgaWYgKGx2LmxsX2V4cF9uYW1lICE9IE5VTEwpCiAgICAgewotCWxlbiA9IFNUUkxFTihsdi5sbF9leHBfbmFtZSk7CisJbGVuID0gKGludClTVFJMRU4obHYubGxfZXhwX25hbWUpOwogCWlmIChsZWFkIDw9IDIgJiYgbHYubGxfbmFtZSA9PSBsdi5sbF9leHBfbmFtZQogCQkJCQkgJiYgU1RSTkNNUChsdi5sbF9uYW1lLCAiczoiLCAyKSA9PSAwKQogCXsKQEAgLTE5MTEwLDcgKzE5MTExLDcgQEAKICAgICB1ZnVuY19UCSoqc29ydHRhYjsKICAgICBpbnQJCXN0X2xlbiA9IDA7CiAKLSAgICB0b2RvID0gZnVuY19oYXNodGFiLmh0X3VzZWQ7CisgICAgdG9kbyA9IChpbnQpZnVuY19oYXNodGFiLmh0X3VzZWQ7CiAgICAgc29ydHRhYiA9ICh1ZnVuY19UICoqKWFsbG9jKCh1bnNpZ25lZCkoc2l6ZW9mKHVmdW5jX1QpICogdG9kbykpOwogCiAgICAgZm9yIChoaSA9IGZ1bmNfaGFzaHRhYi5odF9hcnJheTsgdG9kbyA+IDA7ICsraGkpCkBAIC0yMDI3NCw3ICsyMDI3NSw3IEBACiAKICAgICBmcHJpbnRmKGZwLCBfKCJcbiMgZ2xvYmFsIHZhcmlhYmxlczpcbiIpKTsKIAotICAgIHRvZG8gPSBnbG9idmFyaHQuaHRfdXNlZDsKKyAgICB0b2RvID0gKGludClnbG9idmFyaHQuaHRfdXNlZDsKICAgICBmb3IgKGhpID0gZ2xvYnZhcmh0Lmh0X2FycmF5OyB0b2RvID4gMDsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC0yMDMxMCw3ICsyMDMxMSw3IEBACiAgICAgaW50CQl0b2RvOwogICAgIGNoYXJfdQkqcCwgKnQ7CiAKLSAgICB0b2RvID0gZ2xvYnZhcmh0Lmh0X3VzZWQ7CisgICAgdG9kbyA9IChpbnQpZ2xvYnZhcmh0Lmh0X3VzZWQ7CiAgICAgZm9yIChoaSA9IGdsb2J2YXJodC5odF9hcnJheTsgdG9kbyA+IDA7ICsraGkpCiAgICAgewogCWlmICghSEFTSElURU1fRU1QVFkoaGkpKQpAQCAtMjA1NDIsNyArMjA1NDMsNyBAQAogICAgIGVsc2UKIAlwYnVmID0gdGZuYW1lID0gRnVsbE5hbWVfc2F2ZSgqZm5hbWVwLCBGQUxTRSk7CiAKLSAgICBsZW4gPSB0ZmxlbiA9IFNUUkxFTih0Zm5hbWUpOworICAgIGxlbiA9IHRmbGVuID0gKGludClTVFJMRU4odGZuYW1lKTsKIAogICAgIGlmICghZ2V0X3Nob3J0X3BhdGhuYW1lKCZ0Zm5hbWUsICZwYnVmLCAmbGVuKSkKIAlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9zcmMvZXhfY21kcy5jIGIvc3JjL2V4X2NtZHMuYwppbmRleCA1MzNiMmNjLi5hYWZlMzFjIDEwMDY0NAotLS0gYS9zcmMvZXhfY21kcy5jCisrKyBiL3NyYy9leF9jbWRzLmMKQEAgLTQzNSw3ICs0MzUsNyBAQAogICAgIGZvciAobG51bSA9IGVhcC0+bGluZTE7IGxudW0gPD0gZWFwLT5saW5lMjsgKytsbnVtKQogICAgIHsKIAlzID0gbWxfZ2V0KGxudW0pOwotCWxlbiA9IFNUUkxFTihzKTsKKwlsZW4gPSAoaW50KVNUUkxFTihzKTsKIAlpZiAobWF4bGVuIDwgbGVuKQogCSAgICBtYXhsZW4gPSBsZW47CiAKQEAgLTQ0NSwxMSArNDQ1LDExIEBACiAJewogCSAgICBpZiAoc29ydF9yeCkKIAkgICAgewotCQlzdGFydF9jb2wgPSByZWdtYXRjaC5zdGFydHBbMF0gLSBzOwotCQllbmRfY29sID0gcmVnbWF0Y2guZW5kcFswXSAtIHM7CisJCXN0YXJ0X2NvbCA9IChjb2xucl9UKShyZWdtYXRjaC5zdGFydHBbMF0gLSBzKTsKKwkJZW5kX2NvbCA9IChjb2xucl9UKShyZWdtYXRjaC5lbmRwWzBdIC0gcyk7CiAJICAgIH0KIAkgICAgZWxzZQotCQlzdGFydF9jb2wgPSByZWdtYXRjaC5lbmRwWzBdIC0gczsKKwkJc3RhcnRfY29sID0gKGNvbG5yX1QpKHJlZ21hdGNoLmVuZHBbMF0gLSBzKTsKIAl9CiAJZWxzZQogCSAgICBpZiAocmVnbWF0Y2gucmVncHJvZyAhPSBOVUxMKQpAQCAtNTI2LDcgKzUyNiw3IEBACiAJY291bnQgPSAwOwogCiAgICAgLyogQWRqdXN0IG1hcmtzIGZvciBkZWxldGVkIChvciBhZGRlZCkgbGluZXMgYW5kIHByZXBhcmUgZm9yIGRpc3BsYXlpbmcuICovCi0gICAgZGVsZXRlZCA9IGNvdW50IC0gKGxudW0gLSBlYXAtPmxpbmUyKTsKKyAgICBkZWxldGVkID0gKGxvbmcpKGNvdW50IC0gKGxudW0gLSBlYXAtPmxpbmUyKSk7CiAgICAgaWYgKGRlbGV0ZWQgPiAwKQogCW1hcmtfYWRqdXN0KGVhcC0+bGluZTIgLSBkZWxldGVkLCBlYXAtPmxpbmUyLCAobG9uZylNQVhMTlVNLCAtZGVsZXRlZCk7CiAgICAgZWxzZSBpZiAoZGVsZXRlZCA8IDApCkBAIC0zMTgyLDcgKzMxODIsNyBAQAogCiAJLyogU2V0IHY6c3dhcGNvbW1hbmQgZm9yIHRoZSBTd2FwRXhpc3RzIGF1dG9jb21tYW5kcy4gKi8KIAlpZiAoY29tbWFuZCAhPSBOVUxMKQotCSAgICBsZW4gPSBTVFJMRU4oY29tbWFuZCkgKyAzOworCSAgICBsZW4gPSAoaW50KVNUUkxFTihjb21tYW5kKSArIDM7CiAJZWxzZQogCSAgICBsZW4gPSAzMDsKIAlwID0gYWxsb2MoKHVuc2lnbmVkKWxlbik7CkBAIC0zOTg2LDcgKzM5ODYsNyBAQAogICAgIHN3aXRjaCAoKmtpbmQpCiAgICAgewogCWNhc2UgJy0nOgotCSAgICBzdGFydCA9IGxudW0gLSBiaWduZXNzICogKHggLSBraW5kKTsKKwkgICAgc3RhcnQgPSBsbnVtIC0gYmlnbmVzcyAqIChsaW5lbnJfVCkoeCAtIGtpbmQpOwogCSAgICBlbmQgPSBzdGFydCArIGJpZ25lc3M7CiAJICAgIGN1cnMgPSBlbmQ7CiAJICAgIGJyZWFrOwpAQCAtNDAxMyw3ICs0MDEzLDcgQEAKIAlkZWZhdWx0OiAgLyogJysnICovCiAJICAgIHN0YXJ0ID0gbG51bTsKIAkgICAgaWYgKCpraW5kID09ICcrJykKLQkJc3RhcnQgKz0gYmlnbmVzcyAqICh4IC0ga2luZCAtIDEpICsgMTsKKwkJc3RhcnQgKz0gYmlnbmVzcyAqIChsaW5lbnJfVCkoeCAtIGtpbmQgLSAxKSArIDE7CiAJICAgIGVsc2UgaWYgKGVhcC0+YWRkcl9jb3VudCA9PSAwKQogCQkrK3N0YXJ0OwogCSAgICBlbmQgPSBzdGFydCArIGJpZ25lc3MgLSAxOwpAQCAtNDUxNCw3ICs0NTE0LDcgQEAKIAkJICAgICAqIEF2b2lkcyB0aGF0ICI6cy9cbkJcQD0vL2djIiBnZXQgc3R1Y2suICovCiAJCSAgICBpZiAobm1hdGNoID4gMSkKIAkJICAgIHsKLQkJCW1hdGNoY29sID0gU1RSTEVOKHN1Yl9maXJzdGxpbmUpOworCQkJbWF0Y2hjb2wgPSAoY29sbnJfVClTVFJMRU4oc3ViX2ZpcnN0bGluZSk7CiAJCQlubWF0Y2ggPSAxOwogCQkgICAgfQogCQkgICAgc3ViX25zdWJzKys7CkBAIC00NjcxLDcgKzQ2NzEsNyBAQAogCQkJICogQXZvaWRzIHRoYXQgIjpzL1xuQlxAPS8vZ2MiIGdldCBzdHVjay4gKi8KIAkJCWlmIChubWF0Y2ggPiAxKQogCQkJewotCQkJICAgIG1hdGNoY29sID0gU1RSTEVOKHN1Yl9maXJzdGxpbmUpOworCQkJICAgIG1hdGNoY29sID0gKGNvbG5yX1QpU1RSTEVOKHN1Yl9maXJzdGxpbmUpOwogCQkJICAgIG5tYXRjaCA9IDE7CiAJCQl9CiAJCQlnb3RvIHNraXA7CkBAIC01MDI4LDcgKzUwMjgsNyBAQAogCWlmIChnb3RfaW50KQogCXsKIAkgICAgU1RSQ1BZKG1zZ19idWYsIF8oIihJbnRlcnJ1cHRlZCkgIikpOwotCSAgICBsZW4gPSBTVFJMRU4obXNnX2J1Zik7CisJICAgIGxlbiA9IChpbnQpU1RSTEVOKG1zZ19idWYpOwogCX0KIAlpZiAoc3ViX25zdWJzID09IDEpCiAJICAgIHZpbV9zbnByaW50ZigoY2hhciAqKW1zZ19idWYgKyBsZW4sIHNpemVvZihtc2dfYnVmKSAtIGxlbiwKQEAgLTUwMzcsNyArNTAzNyw3IEBACiAJICAgIHZpbV9zbnByaW50ZigoY2hhciAqKW1zZ19idWYgKyBsZW4sIHNpemVvZihtc2dfYnVmKSAtIGxlbiwKIAkJICAgIGNvdW50X29ubHkgPyBfKCIlbGQgbWF0Y2hlcyIpIDogXygiJWxkIHN1YnN0aXR1dGlvbnMiKSwKIAkJCQkJCQkJICAgc3ViX25zdWJzKTsKLQlsZW4gPSBTVFJMRU4obXNnX2J1Zik7CisJbGVuID0gKGludClTVFJMRU4obXNnX2J1Zik7CiAJaWYgKHN1Yl9ubGluZXMgPT0gMSkKIAkgICAgdmltX3NucHJpbnRmKChjaGFyICopbXNnX2J1ZiArIGxlbiwgc2l6ZW9mKG1zZ19idWYpIC0gbGVuLAogCQkgICAgIiVzIiwgXygiIG9uIDEgbGluZSIpKTsKQEAgLTU0MDcsNyArNTQwNyw3IEBACiAJLyogRmluZCBmaXJzdCBpdGVtIHdpdGggdGhlIHJlcXVlc3RlZCBsYW5ndWFnZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX21hdGNoZXM7ICsraSkKIAl7Ci0JICAgIGxlbiA9IFNUUkxFTihtYXRjaGVzW2ldKTsKKwkgICAgbGVuID0gKGludClTVFJMRU4obWF0Y2hlc1tpXSk7CiAJICAgIGlmIChsZW4gPiAzICYmIG1hdGNoZXNbaV1bbGVuIC0gM10gPT0gJ0AnCiAJCQkJICAmJiBTVFJJQ01QKG1hdGNoZXNbaV0gKyBsZW4gLSAyLCBsYW5nKSA9PSAwKQogCQlicmVhazsKQEAgLTU1MzksNyArNTUzOSw3IEBACiBjaGVja19oZWxwX2xhbmcoYXJnKQogICAgIGNoYXJfdSAqYXJnOwogewotICAgIGludCBsZW4gPSBTVFJMRU4oYXJnKTsKKyAgICBpbnQgbGVuID0gKGludClTVFJMRU4oYXJnKTsKIAogICAgIGlmIChsZW4gPj0gMyAmJiBhcmdbbGVuIC0gM10gPT0gJ0AnICYmIEFTQ0lJX0lTQUxQSEEoYXJnW2xlbiAtIDJdKQogCQkJCQkgICAgICAgJiYgQVNDSUlfSVNBTFBIQShhcmdbbGVuIC0gMV0pKQpAQCAtNjAzOSw3ICs2MDM5LDcgQEAKICAgICBnYV9pbml0MigmZ2EsIDEsIDEwKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZWNvdW50OyArK2kpCiAgICAgewotCWxlbiA9IFNUUkxFTihmaWxlc1tpXSk7CisJbGVuID0gKGludClTVFJMRU4oZmlsZXNbaV0pOwogCWlmIChsZW4gPiA0KQogCXsKIAkgICAgaWYgKFNUUklDTVAoZmlsZXNbaV0gKyBsZW4gLSA0LCAiLnR4dCIpID09IDApCkBAIC02MTcyLDcgKzYxNzIsNyBAQAogCSAgICBnb3RfaW50ID0gVFJVRTsKIAllbHNlCiAJewotCSAgICBzID0gYWxsb2MoMTggKyBTVFJMRU4odGFnZm5hbWUpKTsKKwkgICAgcyA9IGFsbG9jKDE4ICsgKHVuc2lnbmVkKVNUUkxFTih0YWdmbmFtZSkpOwogCSAgICBpZiAocyA9PSBOVUxMKQogCQlnb3RfaW50ID0gVFJVRTsKIAkgICAgZWxzZQpAQCAtNjU0OSw3ICs2NTQ5LDcgQEAKIAkJCSAgICBmb3IgKHMgPSBhcmc7IHMgPCBwOyArK3MpCiAJCQkJaWYgKCF2aW1faXNwcmludGMoKnMpKQogCQkJCSAgICBicmVhazsKLQkJCSAgICBjZWxscyA9IHMgLSBhcmc7CisJCQkgICAgY2VsbHMgPSAoaW50KShzIC0gYXJnKTsKIAkJCX0KIAkJCS8qIEN1cnJlbnRseSBtdXN0IGJlIG9uZSBvciB0d28gZGlzcGxheSBjZWxscyAqLwogCQkJaWYgKHMgIT0gcCB8fCBjZWxscyA8IDEgfHwgY2VsbHMgPiAyKQpAQCAtNjU2Miw3ICs2NTYyLDcgQEAKIAkJCXZpbV9mcmVlKHNwLT5zbl90ZXh0KTsKIAkJCS8qIEFsbG9jYXRlIG9uZSBieXRlIG1vcmUgaWYgd2UgbmVlZCB0byBwYWQgdXAKIAkJCSAqIHdpdGggYSBzcGFjZS4gKi8KLQkJCWxlbiA9IHAgLSBhcmcgKyAoKGNlbGxzID09IDEpID8gMSA6IDApOworCQkJbGVuID0gKGludCkocCAtIGFyZyArICgoY2VsbHMgPT0gMSkgPyAxIDogMCkpOwogCQkJc3AtPnNuX3RleHQgPSB2aW1fc3RybnNhdmUoYXJnLCBsZW4pOwogCiAJCQlpZiAoc3AtPnNuX3RleHQgIT0gTlVMTCAmJiBjZWxscyA9PSAxKQpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMyLmMgYi9zcmMvZXhfY21kczIuYwppbmRleCAzZDZlMjE3Li40ZDAxMDM5IDEwMDY0NAotLS0gYS9zcmMvZXhfY21kczIuYworKysgYi9zcmMvZXhfY21kczIuYwpAQCAtMTAyMyw3ICsxMDIzLDcgQEAKICAgICBpbnQJCWxlbjsKIAogICAgIGUgPSBza2lwdG93aGl0ZShlYXAtPmFyZyk7Ci0gICAgbGVuID0gZSAtIGVhcC0+YXJnOworICAgIGxlbiA9IChpbnQpKGUgLSBlYXAtPmFyZyk7CiAgICAgZSA9IHNraXB3aGl0ZShlKTsKIAogICAgIGlmIChsZW4gPT0gNSAmJiBTVFJOQ01QKGVhcC0+YXJnLCAic3RhcnQiLCA1KSA9PSAwICYmICplICE9IE5VTCkKZGlmZiAtLWdpdCBhL3NyYy9leF9kb2NtZC5jIGIvc3JjL2V4X2RvY21kLmMKaW5kZXggODMyM2NhOC4uMjdjNDRmZiAxMDA2NDQKLS0tIGEvc3JjL2V4X2RvY21kLmMKKysrIGIvc3JjL2V4X2RvY21kLmMKQEAgLTIxNDIsNyArMjE0Miw3IEBACiAjaWZkZWYgRkVBVF9VU1JfQ01EUwogICAgIGlmICghVVNFUl9DTURJRFgoZWEuY21kaWR4KSkKICNlbmRpZgotCWVhLmFyZ3QgPSBjbWRuYW1lc1soaW50KWVhLmNtZGlkeF0uY21kX2FyZ3Q7CisJZWEuYXJndCA9IChsb25nKWNtZG5hbWVzWyhpbnQpZWEuY21kaWR4XS5jbWRfYXJndDsKIAogICAgIGlmICghZWEuc2tpcCkKICAgICB7CkBAIC0yODk4LDcgKzI4OTgsNyBAQAogCQkJZWFwLT5jbWRpZHggPSBDTURfVVNFUjsKIAkJICAgIGVsc2UKIAkJCWVhcC0+Y21kaWR4ID0gQ01EX1VTRVJfQlVGOwotCQkgICAgZWFwLT5hcmd0ID0gdWMtPnVjX2FyZ3Q7CisJCSAgICBlYXAtPmFyZ3QgPSAobG9uZyl1Yy0+dWNfYXJndDsKIAkJICAgIGVhcC0+dXNlcmlkeCA9IGo7CiAKICMgaWZkZWYgRkVBVF9DTURMX0NPTVBMCkBAIC0zMTY0LDcgKzMxNjQsNyBAQAogI2lmZGVmIEZFQVRfVVNSX0NNRFMKICAgICBpZiAoIVVTRVJfQ01ESURYKGVhLmNtZGlkeCkpCiAjZW5kaWYKLQllYS5hcmd0ID0gY21kbmFtZXNbKGludCllYS5jbWRpZHhdLmNtZF9hcmd0OworCWVhLmFyZ3QgPSAobG9uZyljbWRuYW1lc1soaW50KWVhLmNtZGlkeF0uY21kX2FyZ3Q7CiAKICAgICBhcmcgPSBza2lwd2hpdGUocCk7CiAKQEAgLTUxNDUsNyArNTE0NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGdhcC0+Z2FfbGVuOyArK2kpCiAJewogCSAgICBjbWQgPSBVU0VSX0NNRF9HQShnYXAsIGkpOwotCSAgICBhID0gY21kLT51Y19hcmd0OworCSAgICBhID0gKGxvbmcpY21kLT51Y19hcmd0OwogCiAJICAgIC8qIFNraXAgY29tbWFuZHMgd2hpY2ggZG9uJ3QgbWF0Y2ggdGhlIHJlcXVlc3RlZCBwcmVmaXggKi8KIAkgICAgaWYgKFNUUk5DTVAobmFtZSwgY21kLT51Y19uYW1lLCBuYW1lX2xlbikgIT0gMCkKQEAgLTcyOTUsNyArNzI5NSw3IEBACiAJICAgIHJlZ21hdGNoLnJtX2ljID0gcF9pYzsKIAkgICAgcCA9IG1sX2dldF9jdXJsaW5lKCk7CiAJICAgIGlmICh2aW1fcmVnZXhlYygmcmVnbWF0Y2gsIHAsIChjb2xucl9UKTApKQotCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IHJlZ21hdGNoLnN0YXJ0cFswXSAtIHA7CisJCWN1cndpbi0+d19jdXJzb3IuY29sID0gKGNvbG5yX1QpKHJlZ21hdGNoLnN0YXJ0cFswXSAtIHApOwogCSAgICBlbHNlCiAJCUVNU0coXyhlX25vbWF0Y2gpKTsKIAkgICAgdmltX2ZyZWUocmVnbWF0Y2gucmVncHJvZyk7CmRpZmYgLS1naXQgYS9zcmMvZXhfZXZhbC5jIGIvc3JjL2V4X2V2YWwuYwppbmRleCBlYWE1ZGVjLi4xZGE3ZjFiIDEwMDY0NAotLS0gYS9zcmMvZXhfZXZhbC5jCisrKyBiL3NyYy9leF9ldmFsLmMKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCW1lc2cgPSBleGNwLT5tZXNzYWdlcy0+dGhyb3dfbXNnOwogCWlmIChjbWRuYW1lICE9IE5VTEwgJiYgKmNtZG5hbWUgIT0gTlVMKQogCXsKLQkgICAgY21kbGVuID0gU1RSTEVOKGNtZG5hbWUpOworCSAgICBjbWRsZW4gPSAoaW50KVNUUkxFTihjbWRuYW1lKTsKIAkgICAgZXhjcC0+dmFsdWUgPSB2aW1fc3RybnNhdmUoKGNoYXJfdSAqKSJWaW0oIiwKIAkJCQkJICAgNCArIGNtZGxlbiArIDIgKyAoaW50KVNUUkxFTihtZXNnKSk7CiAJICAgIGlmIChleGNwLT52YWx1ZSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvc3JjL2V4X2dldGxuLmMgYi9zcmMvZXhfZ2V0bG4uYwppbmRleCAwNDQ0MjllLi4xMGYzMzU1IDEwMDY0NAotLS0gYS9zcmMvZXhfZ2V0bG4uYworKysgYi9zcmMvZXhfZ2V0bG4uYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAKIAkJICAgIGlmIChwICE9IE5VTEwgJiYgcmVhbGxvY19jbWRidWZmKChpbnQpU1RSTEVOKHApICsgMSkgPT0gT0spCiAJCSAgICB7Ci0JCQljY2xpbmUuY21kbGVuID0gU1RSTEVOKHApOworCQkJY2NsaW5lLmNtZGxlbiA9IChpbnQpU1RSTEVOKHApOwogCQkJU1RSQ1BZKGNjbGluZS5jbWRidWZmLCBwKTsKIAkJCXZpbV9mcmVlKHApOwogCkBAIC0yOTE3LDcgKzI5MTcsNyBAQAogCQkgICAgLS13OwogCQl9CiAJICAgIH0KLQkgICAgbGVuID0gKGNjbGluZS5jbWRidWZmICsgY2NsaW5lLmNtZGxlbikgLSB3OworCSAgICBsZW4gPSAoaW50KSgoY2NsaW5lLmNtZGJ1ZmYgKyBjY2xpbmUuY21kbGVuKSAtIHcpOwogCSAgICBpZiAocF9pYyA/IFNUUk5JQ01QKHcsIGFyZywgbGVuKSA9PSAwIDogU1RSTkNNUCh3LCBhcmcsIGxlbikgPT0gMCkKIAkJcCArPSBsZW47CiAJfQpAQCAtNDc5NCw3ICs0Nzk0LDcgQEAKIAkgICAgewogCQlFeHBhbmRFc2NhcGUoJnhwYywgYnVmLCBudW1fcCwgcCwgV0lMRF9TSUxFTlQpOwogCQlmb3IgKGxlbiA9IDAsIGkgPSAwOyBpIDwgbnVtX3A7ICsraSkKLQkJICAgIGxlbiArPSAobG9uZ191KVNUUkxFTihwW2ldKSArIDE7CisJCSAgICBsZW4gKz0gKGludClTVFJMRU4ocFtpXSkgKyAxOwogCiAJCS8qIENvbmNhdGVuYXRlIG5ldyByZXN1bHRzIHRvIHByZXZpb3VzIG9uZXMuICovCiAJCWlmIChnYV9ncm93KCZnYSwgbGVuKSA9PSBPSykKQEAgLTUwNzEsNyArNTA3MSw3IEBACiAJdmltX2ZyZWUoaGlzcHRyLT5oaXNzdHIpOwogCiAJLyogU3RvcmUgdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgTlVMIG9mIHRoZSBzdHJpbmcuICovCi0JbGVuID0gU1RSTEVOKG5ld19lbnRyeSk7CisJbGVuID0gKGludClTVFJMRU4obmV3X2VudHJ5KTsKIAloaXNwdHItPmhpc3N0ciA9IHZpbV9zdHJuc2F2ZShuZXdfZW50cnksIGxlbiArIDIpOwogCWlmIChoaXNwdHItPmhpc3N0ciAhPSBOVUxMKQogCSAgICBoaXNwdHItPmhpc3N0cltsZW4gKyAxXSA9IHNlcDsKZGlmZiAtLWdpdCBhL3NyYy9maWxlaW8uYyBiL3NyYy9maWxlaW8uYwppbmRleCA0NmI1MGY4Li4xYzRjYWI4IDEwMDY0NAotLS0gYS9zcmMvZmlsZWlvLmMKKysrIGIvc3JjL2ZpbGVpby5jCkBAIC0xMTQzLDcgKzExNDMsNyBAQAogCQkgKiBtdWx0aXBsZSBvZiAyCiAJCSAqIHVjcy00IHRvIHV0Zi04OiA0IGJ5dGVzIGJlY29tZSB1cCB0byA2IGJ5dGVzLCBzaXplIG11c3QgYmUKIAkJICogbXVsdGlwbGUgb2YgNCAqLwotCQlyZWFsX3NpemUgPSBzaXplOworCQlyZWFsX3NpemUgPSAoaW50KXNpemU7CiAjIGlmZGVmIFVTRV9JQ09OVgogCQlpZiAoaWNvbnZfZmQgIT0gKGljb252X3QpLTEpCiAJCSAgICBzaXplID0gc2l6ZSAvIElDT05WX01VTFQ7CkBAIC0xMjAwLDcgKzEyMDAsNyBAQAogCQkJCS8qIEZpbGxlZCB1cCB0byAic2l6ZSIsIGFwcGVuZCBwYXJ0aWFsIGxpbmUuCiAJCQkJICogQ2hhbmdlIE5MIHRvIE5VTCB0byByZXZlcnNlIHRoZSBlZmZlY3QgZG9uZQogCQkJCSAqIGJlbG93LiAqLwotCQkJCW4gPSBzaXplIC0gdGxlbjsKKwkJCQluID0gKGludCkoc2l6ZSAtIHRsZW4pOwogCQkJCWZvciAobmkgPSAwOyBuaSA8IG47ICsrbmkpCiAJCQkJewogCQkJCSAgICBpZiAocFtuaV0gPT0gTkwpCkBAIC0xNDg4LDcgKzE0ODgsNyBAQAogCQkJLyogSGFuZGxlIENQX1VURjggaW5wdXQgb3Vyc2VsdmVzIHRvIGJlIGFibGUgdG8gaGFuZGxlCiAJCQkgKiB0cmFpbGluZyBieXRlcyBwcm9wZXJseS4KIAkJCSAqIEdldCBvbmUgVVRGLTggY2hhcmFjdGVyIGZyb20gc3JjLiAqLwotCQkJYnl0ZWxlbiA9IHV0Zl9wdHIybGVuX2xlbihzcmMsIHNpemUpOworCQkJYnl0ZWxlbiA9IChpbnQpdXRmX3B0cjJsZW5fbGVuKHNyYywgc2l6ZSk7CiAJCQlpZiAoYnl0ZWxlbiA+IHNpemUpCiAJCQl7CiAJCQkgICAgLyogT25seSBnb3Qgc29tZSBieXRlcyBvZiBhIGNoYXJhY3Rlci4gIE5vcm1hbGx5CkBAIC0xNTU5LDcgKzE1NTksNyBAQAogCQkJICAgICAqIHRoZSBkYXRhIGRvZXNuJ3QgZml0IGluIHRoaXMgZW5jb2RpbmcuICovCiAJCQkgICAgZHN0bGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShlbmNfY29kZXBhZ2UsIDAsCiAJCQkJICAgIChMUENXU1RSKXVjczJidWYsIHVjczJsZW4sCi0JCQkJICAgIChMUFNUUilkc3QsIChzcmMgLSBkc3QpLAorCQkJCSAgICAoTFBTVFIpZHN0LCAoaW50KShzcmMgLSBkc3QpLAogCQkJCSAgICByZXBsc3RyLCAmYmFkKTsKIAkJCSAgICBpZiAoYmFkKQogCQkJCWZvdW5kX2JhZCA9IFRSVUU7CkBAIC0xNTk5LDcgKzE1OTksNyBAQAogCQl9CiAKIAkJLyogVGhlIG5ldyBzaXplIGlzIGVxdWFsIHRvIGhvdyBtdWNoICJkc3QiIHdhcyBhZHZhbmNlZC4gKi8KLQkJc2l6ZSA9IGRzdCAtIHB0cjsKKwkJc2l6ZSA9IChsb25nKShkc3QgLSBwdHIpOwogCSAgICB9CiAJICAgIGVsc2UKICMgZW5kaWYKQEAgLTE4NDAsNyArMTg0MCw3IEBACiAJCSAqIHJlYWQgaW4gdGhlIHByZXZpb3VzIHJlYWQoKSBjYWxsLiAqLwogCQlmb3IgKHAgPSBwdHIgLSB1dGZfaGVhZF9vZmYoYnVmZmVyLCBwdHIpOyA7ICsrcCkKIAkJewotCQkgICAgaW50CSB0b2RvID0gKHB0ciArIHNpemUpIC0gcDsKKwkJICAgIGludAkgdG9kbyA9IChpbnQpKChwdHIgKyBzaXplKSAtIHApOwogCQkgICAgaW50CSBsOwogCiAJCSAgICBpZiAodG9kbyA8PSAwKQpAQCAtNDUzOCw3ICs0NTM4LDcgQEAKIAogICAgIGlmIChlcnJtc2cgIT0gTlVMTCkKICAgICB7Ci0JaW50IG51bWxlbiA9IGVycm51bSAhPSBOVUxMID8gU1RSTEVOKGVycm51bSkgOiAwOworCWludCBudW1sZW4gPSBlcnJudW0gIT0gTlVMTCA/IChpbnQpU1RSTEVOKGVycm51bSkgOiAwOwogCiAJYXR0ciA9IGhsX2F0dHIoSExGX0UpOwkvKiBzZXQgaGlnaGxpZ2h0IGZvciBlcnJvciBtZXNzYWdlcyAqLwogCW1zZ19hZGRfZm5hbWUoYnVmLApAQCAtNDk1OCw3ICs0OTU4LDcgQEAKIAkJICogVGhlIGJ1ZmZlciBoYXMgYmVlbiBhbGxvY2F0ZWQgdG8gYmUgYmlnIGVub3VnaC4gKi8KIAkJd2hpbGUgKGZyb21sZW4gPiAwKQogCQl7Ci0JCSAgICBuID0gdXRmX3B0cjJsZW5fbGVuKGZyb20sIGZyb21sZW4pOworCQkgICAgbiA9IChpbnQpdXRmX3B0cjJsZW5fbGVuKGZyb20sIChpbnQpZnJvbWxlbik7CiAJCSAgICBpZiAobiA+IChpbnQpZnJvbWxlbikJLyogaW5jb21wbGV0ZSBieXRlIHNlcXVlbmNlICovCiAJCQlicmVhazsKIAkJICAgIHU4YyA9IHV0Zl9wdHIyY2hhcihmcm9tKTsKQEAgLTQ5NzcsNyArNDk3Nyw3IEBACiAJCSAgICByZXR1cm4gRkFJTDsKIAkJfQogCQltY2hfbWVtbW92ZShpcC0+YndfcmVzdCwgZnJvbSwgZnJvbWxlbik7Ci0JCWlwLT5id19yZXN0bGVuID0gZnJvbWxlbjsKKwkJaXAtPmJ3X3Jlc3RsZW4gPSAoaW50KWZyb21sZW47CiAJICAgIH0KIAkgICAgZWxzZQogCSAgICB7CkBAIC00OTg1LDEzICs0OTg1LDEzIEBACiAJCSAqIGJ1ZmZlci4gIFRoZSBidWZmZXIgaGFzIGJlZW4gYWxsb2NhdGVkIHRvIGJlIGJpZyBlbm91Z2guICovCiAJCWlwLT5id19yZXN0bGVuID0gMDsKIAkJbmVlZGVkID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihlbmNfY29kZXBhZ2UsCi0JCQkJICBNQl9FUlJfSU5WQUxJRF9DSEFSUywgKExQQ1NUUilmcm9tLCBmcm9tbGVuLAorCQkJCSAgTUJfRVJSX0lOVkFMSURfQ0hBUlMsIChMUENTVFIpZnJvbSwgKGludClmcm9tbGVuLAogCQkJCQkJCQkgICAgIE5VTEwsIDApOwogCQlpZiAobmVlZGVkID09IDApCiAJCXsKIAkJICAgIC8qIFdoZW4gY29udmVyc2lvbiBmYWlscyB0aGVyZSBtYXkgYmUgYSB0cmFpbGluZyBieXRlLiAqLwogCQkgICAgbmVlZGVkID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihlbmNfY29kZXBhZ2UsCi0JCQkgICAgICBNQl9FUlJfSU5WQUxJRF9DSEFSUywgKExQQ1NUUilmcm9tLCBmcm9tbGVuIC0gMSwKKwkJCSAgICAgIE1CX0VSUl9JTlZBTElEX0NIQVJTLCAoTFBDU1RSKWZyb20sIChpbnQpZnJvbWxlbiAtIDEsCiAJCQkJCQkJCSAgICAgTlVMTCwgMCk7CiAJCSAgICBpZiAobmVlZGVkID09IDApCiAJCSAgICB7CkBAIC01MDA0LDcgKzUwMDQsNyBAQAogCQkgICAgaXAtPmJ3X3Jlc3RsZW4gPSAxOwogCQl9CiAJCW5lZWRlZCA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoZW5jX2NvZGVwYWdlLCBNQl9FUlJfSU5WQUxJRF9DSEFSUywKLQkJCQkgICAgICAgKExQQ1NUUilmcm9tLCBmcm9tbGVuIC0gaXAtPmJ3X3Jlc3RsZW4sCisJCQkJICAgICAgIChMUENTVFIpZnJvbSwgKGludCkoZnJvbWxlbiAtIGlwLT5id19yZXN0bGVuKSwKIAkJCQkJCQkgIChMUFdTVFIpdG8sIG5lZWRlZCk7CiAJCWlmIChuZWVkZWQgPT0gMCkKIAkJewpAQCAtNTAzMyw3ICs1MDMzLDcgQEAKIAkJCXJldHVybiBGQUlMOwogCQkgICAgfQogCQl9Ci0JCWxlbiA9IHRvIC0gYnVmOworCQlsZW4gPSAoaW50KSh0byAtIGJ1Zik7CiAJICAgIH0KIAkgICAgZWxzZQogI2VuZGlmCkBAIC01MDQ0LDcgKzUwNDQsNyBAQAogCQkgKiBmYWlsLiAqLwogCQlsZW4gPSBXaWRlQ2hhclRvTXVsdGlCeXRlKEZJT19HRVRfQ1AoZmxhZ3MpLCAwLAogCQkJKExQQ1dTVFIpaXAtPmJ3X2NvbnZfYnVmLCAoaW50KWZyb21sZW4gLyBzaXplb2YoV0NIQVIpLAotCQkJKExQU1RSKXRvLCBpcC0+YndfY29udl9idWZsZW4gLSBmcm9tbGVuLCAwLCAmYmFkKTsKKwkJCShMUFNUUil0bywgKGludCkoaXAtPmJ3X2NvbnZfYnVmbGVuIC0gZnJvbWxlbiksIDAsICZiYWQpOwogCQlpZiAoYmFkKQogCQl7CiAJCSAgICBpcC0+YndfY29udl9lcnJvciA9IFRSVUU7CkBAIC03ODM1LDcgKzc4MzUsNyBAQAogCSAgICAvKiBub3JtYWxpemUgcGF0IGludG8gc3RhbmRhcmQgIjxidWZmZXI+I04iIGZvcm0gKi8KIAkgICAgc3ByaW50ZigoY2hhciAqKWJ1ZmxvY2FsX3BhdCwgIjxidWZmZXI9JWQ+IiwgYnVmbG9jYWxfbnIpOwogCSAgICBwYXQgPSBidWZsb2NhbF9wYXQ7CQkJLyogY2FuIG1vZGlmeSBwYXQgYW5kIHBhdGxlbiAqLwotCSAgICBwYXRsZW4gPSBTVFJMRU4oYnVmbG9jYWxfcGF0KTsJLyogICBidXQgbm90IGVuZHBhdCAqLworCSAgICBwYXRsZW4gPSAoaW50KVNUUkxFTihidWZsb2NhbF9wYXQpOwkvKiAgIGJ1dCBub3QgZW5kcGF0ICovCiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9mb2xkLmMgYi9zcmMvZm9sZC5jCmluZGV4IDRlMjNkNjMuLjhjZDUxYTkgMTAwNjQ0Ci0tLSBhL3NyYy9mb2xkLmMKKysrIGIvc3JjL2ZvbGQuYwpAQCAtMjAwNiw3ICsyMDA2LDcgQEAKIAogICAgIC8qIElnbm9yZSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSBpbiAnY29tbWVudHN0cmluZycuICovCiAgICAgY21zX3N0YXJ0ID0gc2tpcHdoaXRlKGN1cmJ1Zi0+Yl9wX2Ntcyk7Ci0gICAgY21zX3NsZW4gPSBTVFJMRU4oY21zX3N0YXJ0KTsKKyAgICBjbXNfc2xlbiA9IChpbnQpU1RSTEVOKGNtc19zdGFydCk7CiAgICAgd2hpbGUgKGNtc19zbGVuID4gMCAmJiB2aW1faXN3aGl0ZShjbXNfc3RhcnRbY21zX3NsZW4gLSAxXSkpCiAJLS1jbXNfc2xlbjsKIApAQCAtMjAxNCw4ICsyMDE0LDggQEAKICAgICBjbXNfZW5kID0gKGNoYXJfdSAqKXN0cnN0cigoY2hhciAqKWNtc19zdGFydCwgIiVzIik7CiAgICAgaWYgKGNtc19lbmQgIT0gTlVMTCkKICAgICB7Ci0JY21zX2VsZW4gPSBjbXNfc2xlbiAtIChjbXNfZW5kIC0gY21zX3N0YXJ0KTsKLQljbXNfc2xlbiA9IGNtc19lbmQgLSBjbXNfc3RhcnQ7CisJY21zX2VsZW4gPSBjbXNfc2xlbiAtIChpbnQpKGNtc19lbmQgLSBjbXNfc3RhcnQpOworCWNtc19zbGVuID0gKGludCkoY21zX2VuZCAtIGNtc19zdGFydCk7CiAKIAkvKiBleGNsdWRlIHdoaXRlIHNwYWNlIGJlZm9yZSAiJXMiICovCiAJd2hpbGUgKGNtc19zbGVuID4gMCAmJiB2aW1faXN3aGl0ZShjbXNfc3RhcnRbY21zX3NsZW4gLSAxXSkpCkBAIC0yMDIzLDcgKzIwMjMsNyBAQAogCiAJLyogc2tpcCAiJXMiIGFuZCB3aGl0ZSBzcGFjZSBhZnRlciBpdCAqLwogCXMgPSBza2lwd2hpdGUoY21zX2VuZCArIDIpOwotCWNtc19lbGVuIC09IHMgLSBjbXNfZW5kOworCWNtc19lbGVuIC09IChpbnQpKHMgLSBjbXNfZW5kKTsKIAljbXNfZW5kID0gczsKICAgICB9CiAgICAgcGFyc2VNYXJrZXIoY3Vyd2luKTsKQEAgLTIwNDcsNyArMjA0Nyw3IEBACiAJICAgIGlmIChwID49IHN0ciArIGNtc19zbGVuCiAJCQkgICAmJiBTVFJOQ01QKHAgLSBjbXNfc2xlbiwgY21zX3N0YXJ0LCBjbXNfc2xlbikgPT0gMCkKIAkgICAgewotCQlsZW4gKz0gKHMgLSBwKSArIGNtc19zbGVuOworCQlsZW4gKz0gKGludCkocyAtIHApICsgY21zX3NsZW47CiAJCXMgPSBwIC0gY21zX3NsZW47CiAJICAgIH0KIAl9CmRpZmYgLS1naXQgYS9zcmMvZ2V0Y2hhci5jIGIvc3JjL2dldGNoYXIuYwppbmRleCA0YzM4Y2Q3Li4zZDg1MTY1IDEwMDY0NAotLS0gYS9zcmMvZ2V0Y2hhci5jCisrKyBiL3NyYy9nZXRjaGFyLmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQkJCQkJCQkJVFJVRSk7CiAJaWYgKHAgPT0gTlVMTCkKIAkgICAgcmV0dXJuOyAvKiBubyBzcGFjZSwganVzdCBmb3JnZXQgaXQgKi8KLQlidWYtPmJoX3NwYWNlID0gbGVuIC0gc2xlbjsKKwlidWYtPmJoX3NwYWNlID0gKGludCkobGVuIC0gc2xlbik7CiAJdmltX3N0cm5jcHkocC0+Yl9zdHIsIHMsIChzaXplX3Qpc2xlbik7CiAKIAlwLT5iX25leHQgPSBidWYtPmJoX2N1cnItPmJfbmV4dDsKZGlmZiAtLWdpdCBhL3NyYy9ndWkuYyBiL3NyYy9ndWkuYwppbmRleCA1ZWRlNGMxLi5jMzc3YTM1IDEwMDY0NAotLS0gYS9zcmMvZ3VpLmMKKysrIGIvc3JjL2d1aS5jCkBAIC0yNTY2LDcgKzI1NjYsNyBAQAogICAgIC8qIFB1dCB0aGUgY3Vyc29yIGJhY2sgd2hlcmUgaXQgd2FzICovCiAgICAgZ3VpLnJvdyA9IG9sZF9yb3c7CiAgICAgZ3VpLmNvbCA9IG9sZF9jb2w7Ci0gICAgZ3VpLmhpZ2hsaWdodF9tYXNrID0gb2xkX2hsX21hc2s7CisgICAgZ3VpLmhpZ2hsaWdodF9tYXNrID0gKGludClvbGRfaGxfbWFzazsKIAogICAgIHJldHVybiByZXR2YWw7CiB9CkBAIC00MzQ1LDcgKzQzNDUsNyBAQAogICAgIGlmIChjdXJ3aW4tPndfbGVmdGNvbCA9PSBzY3JvbGxiYXJfdmFsdWUpCiAJcmV0dXJuIEZBTFNFOwogCi0gICAgY3Vyd2luLT53X2xlZnRjb2wgPSBzY3JvbGxiYXJfdmFsdWU7CisgICAgY3Vyd2luLT53X2xlZnRjb2wgPSAoY29sbnJfVClzY3JvbGxiYXJfdmFsdWU7CiAKICAgICAvKiBXaGVuIHRoZSBsaW5lIG9mIHRoZSBjdXJzb3IgaXMgdG9vIHNob3J0LCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlCiAgICAgICogbG9uZ2VzdCB2aXNpYmxlIGxpbmUuICBEbyBhIHNhbml0eSBjaGVjayBvbiAibG9uZ2VzdF9sbnVtIiwganVzdCBpbgpAQCAtNDQyNyw5ICs0NDI3LDkgQEAKIHsKICAgICBsb25nX3UJcmdiID0gZ3VpX21jaF9nZXRfcmdiKHBpeGVsKTsKIAotICAgIHJldHVybiAoICAoKChyZ2IgPj4gMTYpICYgMHhmZikgKiAyOTkpCi0JICAgICsgKCgocmdiID4+IDgpICAmIDB4ZmYpICogNTg3KQotCSAgICArICAoKHJnYgkgICAgJiAweGZmKSAqIDExNCkpIC8gMTAwMDsKKyAgICByZXR1cm4gIChpbnQpKCAgKCgocmdiID4+IDE2KSAmIDB4ZmYpICogMjk5KQorCSAgICAgICAgICAgKyAoKChyZ2IgPj4gOCkgJiAweGZmKSAqIDU4NykKKwkgICAgICAgICAgICsgICgocmdiCSAgJiAweGZmKSAqIDExNCkpIC8gMTAwMDsKIH0KIAogI2lmIGRlZmluZWQoRkVBVF9HVUlfWDExKSB8fCBkZWZpbmVkKFBST1RPKQpAQCAtNDgwOCw3ICs0ODA4LDcgQEAKIAl0ZXh0ID0gdmltX3N0cnNhdmUodGV4dCk7CiAJaWYgKHRleHQgIT0gTlVMTCkKIAl7Ci0JICAgIGludCBsZW4gPSBTVFJMRU4odGV4dCk7CisJICAgIGludCBsZW4gPSAoaW50KVNUUkxFTih0ZXh0KTsKIAkgICAgaW50IGk7CiAKIAkgICAgLyogUmVtb3ZlICJcViIgKi8KZGlmZiAtLWdpdCBhL3NyYy9ndWlfdzMyLmMgYi9zcmMvZ3VpX3czMi5jCmluZGV4IDIxYjc1N2IuLmJlNWE3OGIgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfdzMyLmMKKysrIGIvc3JjL2d1aV93MzIuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiBzdGF0aWMgVk9JRCBDQUxMQkFDSyBCZXZhbFRpbWVyUHJvYyBfX0FSR1MoKEhXTkQgaHduZCwgVUlOVCB1TXNnLCBVSU5UIGlkRXZlbnQsIERXT1JEIGR3VGltZSkpOwogCiBzdGF0aWMgQmFsbG9vbkV2YWwgICpjdXJfYmV2YWwgPSBOVUxMOwotc3RhdGljIFVJTlQJICAgIEJldmFsVGltZXJJZCA9IDA7CitzdGF0aWMgVUlOVF9QVFIJICAgIEJldmFsVGltZXJJZCA9IDA7CiBzdGF0aWMgRFdPUkQJICAgIExhc3RBY3Rpdml0eSA9IDA7CiAKIC8qCkBAIC03NTgsNyArNzU4LDcgQEAKICAgICBjYXNlIFdNX0NIQVI6CiAJLyogRG9uJ3QgdXNlIEhBTkRMRV9NU0coKSBmb3IgV01fQ0hBUiwgaXQgdHJ1bmNhdGVzIHdQYXJhbSB0byBhIHNpbmdsZQogCSAqIGJ5dGUgd2hpbGUgd2Ugd2FudCB0aGUgVVRGLTE2IGNoYXJhY3RlciB2YWx1ZS4gKi8KLQlfT25DaGFyKGh3bmQsIHdQYXJhbSwgKGludCkoc2hvcnQpTE9XT1JEKGxQYXJhbSkpOworCV9PbkNoYXIoaHduZCwgKFVJTlQpd1BhcmFtLCAoaW50KShzaG9ydClMT1dPUkQobFBhcmFtKSk7CiAJcmV0dXJuIDBMOwogCiAgICAgY2FzZSBXTV9TWVNDSEFSOgpAQCAtNzc0LDcgKzc3NCw3IEBACiAJCSkKICNlbmRpZgogCXsKLQkgICAgX09uU3lzQ2hhcihod25kLCB3UGFyYW0sIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pKTsKKwkgICAgX09uU3lzQ2hhcihod25kLCAoVUlOVCl3UGFyYW0sIChpbnQpKHNob3J0KUxPV09SRChsUGFyYW0pKTsKIAkgICAgcmV0dXJuIDBMOwogCX0KICNpZmRlZiBGRUFUX01FTlUKQEAgLTIzNjIsNyArMjM2Miw3IEBACiAJCSAgICBpbmZvdy53SUQgPSBtZW51LT5pZDsKIAkJICAgIGluZm93LmZUeXBlID0gTUZUX1NUUklORzsKIAkJICAgIGluZm93LmR3VHlwZURhdGEgPSB3bjsKLQkJICAgIGluZm93LmNjaCA9IHdjc2xlbih3bik7CisJCSAgICBpbmZvdy5jY2ggPSAoVUlOVCl3Y3NsZW4od24pOwogCQkgICAgaW5mb3cuaFN1Yk1lbnUgPSBtZW51LT5zdWJtZW51X2lkOwogCQkgICAgbiA9IEluc2VydE1lbnVJdGVtVygocGFyZW50ID09IE5VTEwpCiAJCQkJCSAgICA/IHNfbWVudUJhciA6IHBhcmVudC0+c3VibWVudV9pZCwKQEAgLTI5OTAsNyArMjk5MCw3IEBACiAJCWlmIChsYXN0X3doaXRlICE9IE5VTEwpCiAJCXsKIAkJICAgIC8qIGJyZWFrIHRoZSBsaW5lIGp1c3QgYWZ0ZXIgYSBzcGFjZSAqLwotCQkgICAgZ2EuZ2FfbGVuIC09IHBlbmQgLSAobGFzdF93aGl0ZSArIDEpOworCQkgICAgZ2EuZ2FfbGVuIC09IChpbnQpKHBlbmQgLSAobGFzdF93aGl0ZSArIDEpKTsKIAkJICAgIHBlbmQgPSBsYXN0X3doaXRlICsgMTsKIAkJICAgIGxhc3Rfd2hpdGUgPSBOVUxMOwogCQl9CkBAIC0zMzc0LDcgKzMzNzQsNyBAQAogCWlmICh3biAhPSBOVUxMKQogCXsKIAkgICAgd2NzY3B5KGxwV0NTdHIsIHduKTsKLQkgICAgbkNoYXIgPSB3Y3NsZW4od24pICsgMTsKKwkgICAgbkNoYXIgPSAoaW50KXdjc2xlbih3bikgKyAxOwogCSAgICB2aW1fZnJlZSh3bik7CiAJfQogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9ndWlfdzQ4LmMgYi9zcmMvZ3VpX3c0OC5jCmluZGV4IGVmMWUwNzEuLmY0MTdjNzIgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfdzQ4LmMKKysrIGIvc3JjL2d1aV93NDguYwpAQCAtMzYxMiw3ICszNjEyLDcgQEAKIAkgICAgewogCQkvKiBCYWNrc2xhc2hlcyBhcmUgb25seSBzcGVjaWFsIHdoZW4gZm9sbG93ZWQgYnkgYSBkb3VibGUKIAkJICogcXVvdGUuICovCi0JCWkgPSBzdHJzcG4ocCwgIlxcIik7CisJCWkgPSAoaW50KXN0cnNwbihwLCAiXFwiKTsKIAkJaWYgKHBbaV0gPT0gJyInKQogCQl7CiAJCSAgICAvKiBIYWx2ZSB0aGUgbnVtYmVyIG9mIGJhY2tzbGFzaGVzLiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hhcmRjb3B5LmMgYi9zcmMvaGFyZGNvcHkuYwppbmRleCAyYjVjNzBlLi42MjU2N2EzIDEwMDY0NAotLS0gYS9zcmMvaGFyZGNvcHkuYworKysgYi9zcmMvaGFyZGNvcHkuYwpAQCAtOTAxLDcgKzkwMSw3IEBACiAJaWYgKGxpbmVbY29sXSA9PSBUQUIgfHwgdGFiX3NwYWNlcyAhPSAwKQogCXsKIAkgICAgaWYgKHRhYl9zcGFjZXMgPT0gMCkKLQkJdGFiX3NwYWNlcyA9IGN1cmJ1Zi0+Yl9wX3RzIC0gKHByaW50X3BvcyAlIGN1cmJ1Zi0+Yl9wX3RzKTsKKwkJdGFiX3NwYWNlcyA9IChpbnQpKGN1cmJ1Zi0+Yl9wX3RzIC0gKHByaW50X3BvcyAlIGN1cmJ1Zi0+Yl9wX3RzKSk7CiAKIAkgICAgd2hpbGUgKHRhYl9zcGFjZXMgPiAwKQogCSAgICB7CkBAIC05MzYsNyArOTM2LDcgQEAKICAgICB9CiAKICAgICBwcG9zLT5sZWFkX3NwYWNlcyA9IHRhYl9zcGFjZXM7Ci0gICAgcHBvcy0+cHJpbnRfcG9zID0gcHJpbnRfcG9zOworICAgIHBwb3MtPnByaW50X3BvcyA9IChpbnQpcHJpbnRfcG9zOwogCiAgICAgLyoKICAgICAgKiBTdGFydCBuZXh0IGxpbmUgb2YgZmlsZSBpZiB3ZSBjbGlwIGxpbmVzLCBvciBoYXZlIHJlYWNoZWQgZW5kIG9mIHRoZQpAQCAtMTQ3Niw3ICsxNDc2LDcgQEAKIHBydF93cml0ZV9maWxlKGJ1ZmZlcikKICAgICBjaGFyX3UJKmJ1ZmZlcjsKIHsKLSAgICBwcnRfd3JpdGVfZmlsZV9sZW4oYnVmZmVyLCBTVFJMRU4oYnVmZmVyKSk7CisgICAgcHJ0X3dyaXRlX2ZpbGVfbGVuKGJ1ZmZlciwgKGludClTVFJMRU4oYnVmZmVyKSk7CiB9CiAKICAgICBzdGF0aWMgdm9pZApAQCAtMTkzNyw3ICsxOTM3LDcgQEAKICAgICB2aW1fbWVtc2V0KHBydF9yZXNmaWxlLmJ1ZmZlciwgTlVMLCBQUlRfRklMRV9CVUZGRVJfTEVOKTsKIAogICAgIC8qIFBhcnNlIGZpcnN0IGxpbmUgdG8gZW5zdXJlIHZhbGlkIHJlc291cmNlIGZpbGUgKi8KLSAgICBwcnRfcmVzZmlsZS5sZW4gPSBmcmVhZCgoY2hhciAqKXBydF9yZXNmaWxlLmJ1ZmZlciwgc2l6ZW9mKGNoYXJfdSksCisgICAgcHJ0X3Jlc2ZpbGUubGVuID0gKGludClmcmVhZCgoY2hhciAqKXBydF9yZXNmaWxlLmJ1ZmZlciwgc2l6ZW9mKGNoYXJfdSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVF9GSUxFX0JVRkZFUl9MRU4sIGZkX3Jlc291cmNlKTsKICAgICBpZiAoZmVycm9yKGZkX3Jlc291cmNlKSkKICAgICB7CkBAIC0xOTU1LDcgKzE5NTUsNyBAQAogICAgIG9mZnNldCA9IDA7CiAKICAgICBpZiAocHJ0X3Jlc2ZpbGVfc3RybmNtcChvZmZzZXQsIFBSVF9SRVNPVVJDRV9IRUFERVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUkxFTihQUlRfUkVTT1VSQ0VfSEVBREVSKSkgIT0gMCkKKwkJCQkgICAgICAgKGludClTVFJMRU4oUFJUX1JFU09VUkNFX0hFQURFUikpICE9IDApCiAgICAgewogCUVNU0cyKF8oIkU2MTg6IGZpbGUgXCIlc1wiIGlzIG5vdCBhIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIpLAogCQlyZXNvdXJjZS0+ZmlsZW5hbWUpOwpAQCAtMTk2NCw3ICsxOTY0LDcgQEAKICAgICB9CiAKICAgICAvKiBTa2lwIG92ZXIgYW55IHZlcnNpb24gbnVtYmVycyBhbmQgZm9sbG93aW5nIHdzICovCi0gICAgb2Zmc2V0ICs9IFNUUkxFTihQUlRfUkVTT1VSQ0VfSEVBREVSKTsKKyAgICBvZmZzZXQgKz0gKGludClTVFJMRU4oUFJUX1JFU09VUkNFX0hFQURFUik7CiAgICAgb2Zmc2V0ID0gcHJ0X3Jlc2ZpbGVfc2tpcF9ub253cyhvZmZzZXQpOwogICAgIGlmIChvZmZzZXQgPT0gLTEpCiAgICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTE5NzMsMjQgKzE5NzMsMjQgQEAKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCiAgICAgaWYgKHBydF9yZXNmaWxlX3N0cm5jbXAob2Zmc2V0LCBQUlRfUkVTT1VSQ0VfUkVTT1VSQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUkxFTihQUlRfUkVTT1VSQ0VfUkVTT1VSQ0UpKSAhPSAwKQorCQkJCSAgICAgKGludClTVFJMRU4oUFJUX1JFU09VUkNFX1JFU09VUkNFKSkgIT0gMCkKICAgICB7CiAJRU1TRzIoXygiRTYxOTogZmlsZSBcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIFBvc3RTY3JpcHQgcmVzb3VyY2UgZmlsZSIpLAogCQlyZXNvdXJjZS0+ZmlsZW5hbWUpOwogCWZjbG9zZShmZF9yZXNvdXJjZSk7CiAJcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgICBvZmZzZXQgKz0gU1RSTEVOKFBSVF9SRVNPVVJDRV9SRVNPVVJDRSk7CisgICAgb2Zmc2V0ICs9IChpbnQpU1RSTEVOKFBSVF9SRVNPVVJDRV9SRVNPVVJDRSk7CiAKICAgICAvKiBEZWNpZGUgdHlwZSBvZiByZXNvdXJjZSBpbiB0aGUgZmlsZSAqLwogICAgIGlmIChwcnRfcmVzZmlsZV9zdHJuY21wKG9mZnNldCwgUFJUX1JFU09VUkNFX1BST0NTRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUkxFTihQUlRfUkVTT1VSQ0VfUFJPQ1NFVCkpID09IDApCisJCQkJICAgICAgKGludClTVFJMRU4oUFJUX1JFU09VUkNFX1BST0NTRVQpKSA9PSAwKQogCXJlc291cmNlLT50eXBlID0gUFJUX1JFU09VUkNFX1RZUEVfUFJPQ1NFVDsKICAgICBlbHNlIGlmIChwcnRfcmVzZmlsZV9zdHJuY21wKG9mZnNldCwgUFJUX1JFU09VUkNFX0VOQ09ESU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJMRU4oUFJUX1JFU09VUkNFX0VOQ09ESU5HKSkgPT0gMCkKKwkJCQkgICAgIChpbnQpU1RSTEVOKFBSVF9SRVNPVVJDRV9FTkNPRElORykpID09IDApCiAJcmVzb3VyY2UtPnR5cGUgPSBQUlRfUkVTT1VSQ0VfVFlQRV9FTkNPRElORzsKICAgICBlbHNlIGlmIChwcnRfcmVzZmlsZV9zdHJuY21wKG9mZnNldCwgUFJUX1JFU09VUkNFX0NNQVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUkxFTihQUlRfUkVTT1VSQ0VfQ01BUCkpID09IDApCisJCQkJCSAoaW50KVNUUkxFTihQUlRfUkVTT1VSQ0VfQ01BUCkpID09IDApCiAJcmVzb3VyY2UtPnR5cGUgPSBQUlRfUkVTT1VSQ0VfVFlQRV9DTUFQOwogICAgIGVsc2UKICAgICB7CkBAIC0yNDE0LDcgKzI0MTQsNyBAQAogCiAgICAgKnBwX21iZW5jID0gTlVMTDsKICAgICAvKiBMb29rIGZvciByZWNvZ25pc2VkIGVuY29kaW5nICovCi0gICAgZW5jX2xlbiA9IFNUUkxFTihwX2VuY29kaW5nKTsKKyAgICBlbmNfbGVuID0gKGludClTVFJMRU4ocF9lbmNvZGluZyk7CiAgICAgcF9tYmVuYyA9IHBfY21hcC0+ZW5jb2RpbmdzOwogICAgIGZvciAobWJlbmMgPSAwOyBtYmVuYyA8IHBfY21hcC0+bnVtX2VuY29kaW5nczsgbWJlbmMrKykKICAgICB7CkBAIC0yNDQxLDcgKzI0NDEsNyBAQAogICAgIC8qIExvb2sgZm9yIHJlY29nbmlzZWQgY2hhcmFjdGVyIHNldCwgdXNpbmcgZGVmYXVsdCBpZiBvbmUgaXMgbm90IGdpdmVuICovCiAgICAgaWYgKCpwX2NoYXJzZXQgPT0gTlVMKQogICAgICAgICBwX2NoYXJzZXQgPSBwX2NtYXAtPmRlZmNzOwotICAgIGNoYXJfbGVuID0gU1RSTEVOKHBfY2hhcnNldCk7CisgICAgY2hhcl9sZW4gPSAoaW50KVNUUkxFTihwX2NoYXJzZXQpOwogICAgIHBfbWJjaGFyID0gcF9jbWFwLT5jaGFyc2V0czsKICAgICBmb3IgKG1iY2hhciA9IDA7IG1iY2hhciA8IHBfY21hcC0+bnVtX2NoYXJzZXRzOyBtYmNoYXIrKykKICAgICB7CkBAIC0yODMxLDcgKzI4MzEsNyBAQAogCX0KIAlpZiAoYnl0ZXNfcmVhZCA9PSAwKQogCSAgICBicmVhazsKLQlwcnRfd3JpdGVfZmlsZV9yYXdfbGVuKHJlc291cmNlX2J1ZmZlciwgYnl0ZXNfcmVhZCk7CisJcHJ0X3dyaXRlX2ZpbGVfcmF3X2xlbihyZXNvdXJjZV9idWZmZXIsIChpbnQpYnl0ZXNfcmVhZCk7CiAJaWYgKHBydF9maWxlX2Vycm9yKQogCXsKIAkgICAgZmNsb3NlKGZkX3Jlc291cmNlKTsKQEAgLTM2MzQsNyArMzYzNCw3IEBACiBtY2hfcHJpbnRfc2V0X2JnKGJnY29sKQogICAgIGxvbmdfdQliZ2NvbDsKIHsKLSAgICBwcnRfYmdjb2wgPSBiZ2NvbDsKKyAgICBwcnRfYmdjb2wgPSAoaW50KWJnY29sOwogICAgIHBydF9hdHRyaWJ1dGVfY2hhbmdlID0gVFJVRTsKICAgICBwcnRfbmVlZF9iZ2NvbCA9IFRSVUU7CiB9CkBAIC0zNjQ1LDcgKzM2NDUsNyBAQAogewogICAgIGlmIChmZ2NvbCAhPSAobG9uZ191KXBydF9mZ2NvbCkKICAgICB7Ci0JcHJ0X2ZnY29sID0gZmdjb2w7CisJcHJ0X2ZnY29sID0gKGludClmZ2NvbDsKIAlwcnRfYXR0cmlidXRlX2NoYW5nZSA9IFRSVUU7CiAJcHJ0X25lZWRfZmdjb2wgPSBUUlVFOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9oYXNodGFiLmMgYi9zcmMvaGFzaHRhYi5jCmluZGV4IGUzMzA2YjMuLmUwZDNlMWEgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNodGFiLmMKKysrIGIvc3JjL2hhc2h0YWIuYwpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgaGFzaHRhYl9UCSpodDsKICAgICBpbnQJCW9mZjsKIHsKLSAgICBpbnQJCXRvZG87CisgICAgbG9uZwl0b2RvOwogICAgIGhhc2hpdGVtX1QJKmhpOwogCi0gICAgdG9kbyA9IGh0LT5odF91c2VkOworICAgIHRvZG8gPSAobG9uZylodC0+aHRfdXNlZDsKICAgICBmb3IgKGhpID0gaHQtPmh0X2FycmF5OyB0b2RvID4gMDsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgKiAtIHNraXAgb3ZlciBhIHJlbW92ZWQgaXRlbQogICAgICAqIC0gcmV0dXJuIGlmIHRoZSBpdGVtIG1hdGNoZXMKICAgICAgKi8KLSAgICBpZHggPSBoYXNoICYgaHQtPmh0X21hc2s7CisgICAgaWR4ID0gKGludCkoaGFzaCAmIGh0LT5odF9tYXNrKTsKICAgICBoaSA9ICZodC0+aHRfYXJyYXlbaWR4XTsKIAogICAgIGlmIChoaS0+aGlfa2V5ID09IE5VTEwpCkBAIC0xNzYsNyArMTc2LDcgQEAKICNpZmRlZiBIVF9ERUJVRwogCSsraGFzaF9jb3VudF9wZXJ0dXJiOwkgICAgLyogY291bnQgYSAibWlzcyIgZm9yIGhhc2h0YWIgbG9va3VwICovCiAjZW5kaWYKLQlpZHggPSAoaWR4IDw8IDIpICsgaWR4ICsgcGVydHVyYiArIDE7CisJaWR4ID0gKGludCkoKGlkeCA8PCAyKSArIGlkeCArIHBlcnR1cmIgKyAxKTsKIAloaSA9ICZodC0+aHRfYXJyYXlbaWR4ICYgaHQtPmh0X21hc2tdOwogCWlmIChoaS0+aGlfa2V5ID09IE5VTEwpCiAJICAgIHJldHVybiBmcmVlaXRlbSA9PSBOVUxMID8gaGkgOiBmcmVlaXRlbTsKQEAgLTM4Nyw3ICszODcsNyBAQAogICAgIHsKIAkvKiBVc2Ugc3BlY2lmaWVkIHNpemUuICovCiAJaWYgKChsb25nX3UpbWluaXRlbXMgPCBodC0+aHRfdXNlZCkJLyoganVzdCBpbiBjYXNlLi4uICovCi0JICAgIG1pbml0ZW1zID0gaHQtPmh0X3VzZWQ7CisJICAgIG1pbml0ZW1zID0gKGludClodC0+aHRfdXNlZDsKIAltaW5zaXplID0gbWluaXRlbXMgKiAzIC8gMjsJLyogYXJyYXkgaXMgdXAgdG8gMi8zIGZ1bGwgKi8KICAgICB9CiAKQEAgLTQzOSw3ICs0MzksNyBAQAogICAgICAqIGlzIGFsc28gYSBjbGVhbnVwIGFjdGlvbi4KICAgICAgKi8KICAgICBuZXdtYXNrID0gbmV3c2l6ZSAtIDE7Ci0gICAgdG9kbyA9IGh0LT5odF91c2VkOworICAgIHRvZG8gPSAoaW50KWh0LT5odF91c2VkOwogICAgIGZvciAob2xkaXRlbSA9IG9sZGFycmF5OyB0b2RvID4gMDsgKytvbGRpdGVtKQogCWlmICghSEFTSElURU1fRU1QVFkob2xkaXRlbSkpCiAJewpAQCAtNDQ4LDEzICs0NDgsMTMgQEAKIAkgICAgICogdGhlIGFsZ29yaXRobSB0byBmaW5kIGFuIGl0ZW0gaW4gaGFzaF9sb29rdXAoKS4gIEJ1dCB3ZSBvbmx5CiAJICAgICAqIG5lZWQgdG8gc2VhcmNoIGZvciBhIE5VTEwga2V5LCB0aHVzIGl0J3Mgc2ltcGxlci4KIAkgICAgICovCi0JICAgIG5ld2kgPSBvbGRpdGVtLT5oaV9oYXNoICYgbmV3bWFzazsKKwkgICAgbmV3aSA9IChpbnQpKG9sZGl0ZW0tPmhpX2hhc2ggJiBuZXdtYXNrKTsKIAkgICAgbmV3aXRlbSA9ICZuZXdhcnJheVtuZXdpXTsKIAogCSAgICBpZiAobmV3aXRlbS0+aGlfa2V5ICE9IE5VTEwpCiAJCWZvciAocGVydHVyYiA9IG9sZGl0ZW0tPmhpX2hhc2g7IDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkKIAkJewotCQkgICAgbmV3aSA9IChuZXdpIDw8IDIpICsgbmV3aSArIHBlcnR1cmIgKyAxOworCQkgICAgbmV3aSA9IChpbnQpKChuZXdpIDw8IDIpICsgbmV3aSArIHBlcnR1cmIgKyAxKTsKIAkJICAgIG5ld2l0ZW0gPSAmbmV3YXJyYXlbbmV3aSAmIG5ld21hc2tdOwogCQkgICAgaWYgKG5ld2l0ZW0tPmhpX2tleSA9PSBOVUxMKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvaWZfY3Njb3BlLmMgYi9zcmMvaWZfY3Njb3BlLmMKaW5kZXggYWVmNDhkMC4uODFjN2E2YSAxMDA2NDQKLS0tIGEvc3JjL2lmX2NzY29wZS5jCisrKyBiL3NyYy9pZl9jc2NvcGUuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAgICAgLyogaWYgZmlsZW5hbWUgaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgY3Njb3BlIGRhdGFiYXNlIG5hbWUgdG8gaXQgKi8KICAgICBpZiAoKHN0YXRidWYuc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikKICAgICB7Ci0JZm5hbWUyID0gKGNoYXIgKilhbGxvYyhzdHJsZW4oQ1NDT1BFX0RCRklMRSkgKyBzdHJsZW4oZm5hbWUpICsgMik7CisJZm5hbWUyID0gKGNoYXIgKilhbGxvYygodW5zaWduZWQpKHN0cmxlbihDU0NPUEVfREJGSUxFKSArIHN0cmxlbihmbmFtZSkgKyAyKSk7CiAJaWYgKGZuYW1lMiA9PSBOVUxMKQogCSAgICBnb3RvIGFkZF9lcnI7CiAKQEAgLTcwMCw3ICs3MDAsNyBAQAogCXJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICgoY21kID0gKGNoYXIgKilhbGxvYyhzdHJsZW4ocGF0dGVybikgKyAyKSkgPT0gTlVMTCkKKyAgICBpZiAoKGNtZCA9IChjaGFyICopYWxsb2MoKHVuc2lnbmVkKShzdHJsZW4ocGF0dGVybikgKyAyKSkpID09IE5VTEwpCiAJcmV0dXJuIE5VTEw7CiAKICAgICAodm9pZClzcHJpbnRmKGNtZCwgIiVkJXMiLCBzZWFyY2gsIHBhdHRlcm4pOwpAQCAtNzIzLDcgKzcyMyw3IEBACiAgICAgY2hhciAqcHJvZywgKmNtZCwgKnBwYXRoID0gTlVMTDsKICNpZm5kZWYgVU5JWAogICAgIGludCBpbl9zYXZlLCBvdXRfc2F2ZSwgZXJyX3NhdmU7Ci0gICAgaW50IHBoOworICAgIGxvbmcgcGg7CiAjIGlmZGVmIEZFQVRfR1VJCiAgICAgSFdORCBhY3RpdmV3bmQgPSBOVUxMOwogICAgIEhXTkQgY29uc29sZXduZCA9IE5VTEw7CkBAIC03OTIsNyArNzkyLDcgQEAKIAlleHBhbmRfZW52KChjaGFyX3UgKilwX2NzcHJnLCAoY2hhcl91ICopcHJvZywgTUFYUEFUSEwpOwogCiAJLyogYWxsb2Mgc3BhY2UgdG8gaG9sZCB0aGUgY3Njb3BlIGNvbW1hbmQgKi8KLQlsZW4gPSBzdHJsZW4ocHJvZykgKyBzdHJsZW4oY3NpbmZvW2ldLmZuYW1lKSArIDMyOworCWxlbiA9IChpbnQpKHN0cmxlbihwcm9nKSArIHN0cmxlbihjc2luZm9baV0uZm5hbWUpICsgMzIpOwogCWlmIChjc2luZm9baV0ucHBhdGgpCiAJewogCSAgICAvKiBleHBhbmQgdGhlIHByZXBlbmQgcGF0aCBmb3IgZW52IHZhcidzICovCkBAIC04MDcsMTEgKzgwNywxMSBAQAogCSAgICB9CiAJICAgIGV4cGFuZF9lbnYoKGNoYXJfdSAqKWNzaW5mb1tpXS5wcGF0aCwgKGNoYXJfdSAqKXBwYXRoLCBNQVhQQVRITCk7CiAKLQkgICAgbGVuICs9IHN0cmxlbihwcGF0aCk7CisJICAgIGxlbiArPSAoaW50KXN0cmxlbihwcGF0aCk7CiAJfQogCiAJaWYgKGNzaW5mb1tpXS5mbGFncykKLQkgICAgbGVuICs9IHN0cmxlbihjc2luZm9baV0uZmxhZ3MpOworCSAgICBsZW4gKz0gKGludClzdHJsZW4oY3NpbmZvW2ldLmZsYWdzKTsKIAogCWlmICgoY21kID0gKGNoYXIgKilhbGxvYyhsZW4pKSA9PSBOVUxMKQogCXsKQEAgLTg4MSw5ICs4ODEsOSBAQAogCS8qIE1heSBiZSB1c2UgJnNoZWxsLCAmc2hlbGxxdW90ZSBldGMgKi8KICMgaWZkZWYgX19CT1JMQU5EQ19fCiAJLyogQkNDIDUuNSB1c2VzIGEgZGlmZmVyZW50IGZ1bmN0aW9uIG5hbWUgZm9yIHNwYXdubHAgKi8KLQlwaCA9IHNwYXdubHAoUF9OT1dBSVQsIHByb2csIGNtZCwgTlVMTCk7CisJcGggPSAobG9uZylzcGF3bmxwKFBfTk9XQUlULCBwcm9nLCBjbWQsIE5VTEwpOwogIyBlbHNlCi0JcGggPSBfc3Bhd25scChfUF9OT1dBSVQsIHByb2csIGNtZCwgTlVMTCk7CisJcGggPSAobG9uZylfc3Bhd25scChfUF9OT1dBSVQsIHByb2csIGNtZCwgTlVMTCk7CiAjIGVuZGlmCiAJdmltX2ZyZWUocHJvZyk7CiAJdmltX2ZyZWUoY21kKTsKQEAgLTEwMzQsNyArMTAzNCw3IEBACiAJaWYgKCF2ZXJib3NlKQogCSAgICByZXR1cm4gRkFMU0U7CiAKLQlidWYgPSAoY2hhciAqKWFsbG9jKHN0cmxlbihvcHQpICsgc3RybGVuKHBhdCkgKyBzdHJsZW4obmYpKTsKKwlidWYgPSAoY2hhciAqKWFsbG9jKCh1bnNpZ25lZCkoc3RybGVuKG9wdCkgKyBzdHJsZW4ocGF0KSArIHN0cmxlbihuZikpKTsKIAlpZiAoYnVmID09IE5VTEwpCiAJICAgICh2b2lkKUVNU0cobmYpOwogCWVsc2UKQEAgLTEwODYsNyArMTA4Niw3IEBACiAJaWYgKHN0cmNocihDU1FGX0ZMQUdTLCAqcWZwb3MpID09IE5VTEwpCiAJewogCSAgICBjaGFyICpuZiA9IF8oIkU0Njk6IGludmFsaWQgY3Njb3BlcXVpY2tmaXggZmxhZyAlYyBmb3IgJWMiKTsKLQkgICAgY2hhciAqYnVmID0gKGNoYXIgKilhbGxvYyhzdHJsZW4obmYpKTsKKwkgICAgY2hhciAqYnVmID0gKGNoYXIgKilhbGxvYygodW5zaWduZWQpc3RybGVuKG5mKSk7CiAKIAkgICAgLyogc3RybGVuIHdpbGwgYmUgZW5vdWdoIGJlY2F1c2Ugd2UgdXNlIGNoYXJzICovCiAJICAgIGlmIChidWYgIT0gTlVMTCkKQEAgLTEzMzAsMTQgKzEzMzAsMTQgQEAKIAlyZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKChjc2luZm9baV0uZm5hbWUgPSAoY2hhciAqKWFsbG9jKHN0cmxlbihmbmFtZSkrMSkpID09IE5VTEwpCisgICAgaWYgKChjc2luZm9baV0uZm5hbWUgPSAoY2hhciAqKWFsbG9jKCh1bnNpZ25lZClzdHJsZW4oZm5hbWUpKzEpKSA9PSBOVUxMKQogCXJldHVybiAtMTsKIAogICAgICh2b2lkKXN0cmNweShjc2luZm9baV0uZm5hbWUsIChjb25zdCBjaGFyICopZm5hbWUpOwogCiAgICAgaWYgKHBwYXRoICE9IE5VTEwpCiAgICAgewotCWlmICgoY3NpbmZvW2ldLnBwYXRoID0gKGNoYXIgKilhbGxvYyhzdHJsZW4ocHBhdGgpICsgMSkpID09IE5VTEwpCisJaWYgKChjc2luZm9baV0ucHBhdGggPSAoY2hhciAqKWFsbG9jKCh1bnNpZ25lZClzdHJsZW4ocHBhdGgpICsgMSkpID09IE5VTEwpCiAJewogCSAgICB2aW1fZnJlZShjc2luZm9baV0uZm5hbWUpOwogCSAgICBjc2luZm9baV0uZm5hbWUgPSBOVUxMOwpAQCAtMTM0OSw3ICsxMzQ5LDcgQEAKIAogICAgIGlmIChmbGFncyAhPSBOVUxMKQogICAgIHsKLQlpZiAoKGNzaW5mb1tpXS5mbGFncyA9IChjaGFyICopYWxsb2Moc3RybGVuKGZsYWdzKSArIDEpKSA9PSBOVUxMKQorCWlmICgoY3NpbmZvW2ldLmZsYWdzID0gKGNoYXIgKilhbGxvYygodW5zaWduZWQpc3RybGVuKGZsYWdzKSArIDEpKSA9PSBOVUxMKQogCXsKIAkgICAgdmltX2ZyZWUoY3NpbmZvW2ldLmZuYW1lKTsKIAkgICAgdmltX2ZyZWUoY3NpbmZvW2ldLnBwYXRoKTsKQEAgLTE1MjYsNyArMTUyNiw3IEBACiAKICAgICBpZiAoc2VhcmNoICE9IE5VTEwpCiAgICAgewotCWFtdCA9IHN0cmxlbihmbmFtZSkgKyBzdHJsZW4oc2xubykgKyBzdHJsZW4odGFnc3RyKSArIHN0cmxlbihzZWFyY2gpKzY7CisJYW10ID0gKGludCkoc3RybGVuKGZuYW1lKSArIHN0cmxlbihzbG5vKSArIHN0cmxlbih0YWdzdHIpICsgc3RybGVuKHNlYXJjaCkrNik7CiAJaWYgKChidWYgPSAoY2hhciAqKWFsbG9jKGFtdCkpID09IE5VTEwpCiAJICAgIHJldHVybiBOVUxMOwogCkBAIC0xNTM0LDcgKzE1MzQsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotCWFtdCA9IHN0cmxlbihmbmFtZSkgKyBzdHJsZW4oc2xubykgKyBzdHJsZW4odGFnc3RyKSArIDU7CisJYW10ID0gKGludCkoc3RybGVuKGZuYW1lKSArIHN0cmxlbihzbG5vKSArIHN0cmxlbih0YWdzdHIpICsgNSk7CiAJaWYgKChidWYgPSAoY2hhciAqKWFsbG9jKGFtdCkpID09IE5VTEwpCiAJICAgIHJldHVybiBOVUxMOwogCkBAIC0xNzIwLDcgKzE3MjAsNyBAQAogCQkJICAgJnNsbm8sICZzZWFyY2gpKSA9PSBOVUxMKQogCSAgICAgICBjb250aW51ZTsKIAotCSAgIGNvbnRleHQgPSAoY2hhciAqKWFsbG9jKHN0cmxlbihjbnR4KSs1KTsKKwkgICBjb250ZXh0ID0gKGNoYXIgKilhbGxvYygodW5zaWduZWQpc3RybGVuKGNudHgpKzUpOwogCSAgIGlmIChjb250ZXh0PT1OVUxMKQogCSAgICAgICBjb250aW51ZTsKIApAQCAtMTg4NCwxMyArMTg4NCwxMyBAQAogCiAgICAgYXNzZXJ0IChudW1fbWF0Y2hlcyA+IDApOwogCi0gICAgaWYgKCh0YnVmID0gKGNoYXIgKilhbGxvYyhzdHJsZW4obWF0Y2hlc1swXSkgKyAxKSkgPT0gTlVMTCkKKyAgICBpZiAoKHRidWYgPSAoY2hhciAqKWFsbG9jKCh1bnNpZ25lZClzdHJsZW4obWF0Y2hlc1swXSkgKyAxKSkgPT0gTlVMTCkKIAlyZXR1cm47CiAKICAgICBzdHJjcHkodGJ1ZiwgbWF0Y2hlc1swXSk7CiAgICAgcHRhZyA9IHN0cnRvayh0YnVmLCAiXHQiKTsKIAotICAgIG5ld3NpemUgPSBzdHJsZW4oY3N0YWdfbXNnKSArIHN0cmxlbihwdGFnKTsKKyAgICBuZXdzaXplID0gKGludCkoc3RybGVuKGNzdGFnX21zZykgKyBzdHJsZW4ocHRhZykpOwogICAgIGJ1ZiA9IChjaGFyICopYWxsb2MobmV3c2l6ZSk7CiAgICAgaWYgKGJ1ZiAhPSBOVUxMKQogICAgIHsKQEAgLTE5MTQsNyArMTkxNCw3IEBACiAJICogYnkgcGFyc2luZyBtYXRjaGVzW2ldIG9uIHRoZSBmbHkgYW5kIHBsYWNpbmcgc3R1ZmYgaW50byBidWYKIAkgKiBkaXJlY3RseSwgYnV0IHRoYXQncyB0b28gbXVjaCBvZiBhIGhhc3NsZQogCSAqLwotCWlmICgodGJ1ZiA9IChjaGFyICopYWxsb2Moc3RybGVuKG1hdGNoZXNbaWR4XSkgKyAxKSkgPT0gTlVMTCkKKwlpZiAoKHRidWYgPSAoY2hhciAqKWFsbG9jKCh1bnNpZ25lZClzdHJsZW4obWF0Y2hlc1tpZHhdKSArIDEpKSA9PSBOVUxMKQogCSAgICBjb250aW51ZTsKIAkodm9pZClzdHJjcHkodGJ1ZiwgbWF0Y2hlc1tpZHhdKTsKIApAQCAtMTkzNSw3ICsxOTM1LDcgQEAKIAlsbm9bc3RybGVuKGxubyktMl0gPSAnXDAnOyAgLyogaWdub3JlIDsiIGF0IHRoZSBlbmQgKi8KIAogCS8qIGhvcGVmdWxseSAnbnVtJyAobnVtIG9mIG1hdGNoZXMpIHdpbGwgYmUgbGVzcyB0aGFuIDEwXjE2ICovCi0JbmV3c2l6ZSA9IHN0cmxlbihjc2ZtdF9zdHIpICsgMTYgKyBzdHJsZW4obG5vKTsKKwluZXdzaXplID0gKGludCkoc3RybGVuKGNzZm10X3N0cikgKyAxNiArIHN0cmxlbihsbm8pKTsKIAlpZiAoYnVmc2l6ZSA8IG5ld3NpemUpCiAJewogCSAgICBidWYgPSAoY2hhciAqKXZpbV9yZWFsbG9jKGJ1ZiwgbmV3c2l6ZSk7CkBAIC0xOTU3LDcgKzE5NTcsNyBAQAogCSAgICBjb250ZXh0ID0gY250eHRzW2lkeF07CiAJZWxzZQogCSAgICBjb250ZXh0ID0gZ2xvYmFsY250eDsKLQluZXdzaXplID0gc3RybGVuKGNvbnRleHQpICsgc3RybGVuKGNudHhmb3JtYXQpOworCW5ld3NpemUgPSAoaW50KShzdHJsZW4oY29udGV4dCkgKyBzdHJsZW4oY250eGZvcm1hdCkpOwogCiAJaWYgKGJ1ZnNpemUgPCBuZXdzaXplKQogCXsKQEAgLTIwMTgsNyArMjAxOCw3IEBACiAgICAgY2hhcgkqY3NfZW1zZzsKICAgICBpbnQJCW1heGxlbjsKICAgICBzdGF0aWMgY2hhciAqZXByb21wdCA9ICJQcmVzcyB0aGUgUkVUVVJOIGtleSB0byBjb250aW51ZToiOwotICAgIGludAkJZXByb21wdGxlbiA9IHN0cmxlbihlcHJvbXB0KTsKKyAgICBpbnQJCWVwcm9tcHRsZW4gPSAoaW50KXN0cmxlbihlcHJvbXB0KTsKICAgICBpbnQJCW47CiAKICAgICBjc19lbXNnID0gXygiRTYwOTogQ3Njb3BlIGVycm9yOiAlcyIpOwpAQCAtMjIzNiw5ICsyMjM2LDkgQEAKICAgICAgKiBmdWxsbmFtZSBpcyBmcmVlZCBhZnRlciBjc19tYWtlX3ZpbV9zdHlsZV9tYXRjaGVzLCBhZnRlciBpdCdzIGJlZW4KICAgICAgKiBjb3BpZWQgaW50byB0aGUgdGFnIGJ1ZmZlciB1c2VkIGJ5IHZpbQogICAgICAqLwotICAgIGxlbiA9IHN0cmxlbihuYW1lKSArIDI7CisgICAgbGVuID0gKGludCkoc3RybGVuKG5hbWUpICsgMik7CiAgICAgaWYgKGNzaW5mb1tpXS5wcGF0aCAhPSBOVUxMKQotCWxlbiArPSBzdHJsZW4oY3NpbmZvW2ldLnBwYXRoKTsKKwlsZW4gKz0gKGludClzdHJsZW4oY3NpbmZvW2ldLnBwYXRoKTsKIAogICAgIGlmICgoZnVsbG5hbWUgPSAoY2hhciAqKWFsbG9jKGxlbikpID09IE5VTEwpCiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaWZfcnVieS5jIGIvc3JjL2lmX3J1YnkuYwppbmRleCA2YmFmZGViLi43OGNjYzAwIDEwMDY0NAotLS0gYS9zcmMvaWZfcnVieS5jCisrKyBiL3NyYy9pZl9ydWJ5LmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCSAgICBsaW5lID0gcmJfbGFzdGxpbmVfZ2V0KCk7CiAJICAgIGlmICghTklMX1AobGluZSkpIHsKIAkJaWYgKFRZUEUobGluZSkgIT0gVF9TVFJJTkcpIHsKLQkJICAgIEVNU0coIkUyNjU6ICRfIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgU3RyaW5nIik7CisJCSAgICBFTVNHKF8oIkUyNjU6ICRfIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgU3RyaW5nIikpOwogCQkgICAgcmV0dXJuOwogCQl9CiAJCW1sX3JlcGxhY2UoaSwgKGNoYXJfdSAqKSBTVFIyQ1NUUihsaW5lKSwgMSk7CkBAIC00NTIsMjYgKzQ1MiwyNiBAQAogCiAgICAgc3dpdGNoIChzdGF0ZSkgewogICAgIGNhc2UgVEFHX1JFVFVSTjoKLQlFTVNHKCJFMjY3OiB1bmV4cGVjdGVkIHJldHVybiIpOworCUVNU0coXygiRTI2NzogdW5leHBlY3RlZCByZXR1cm4iKSk7CiAJYnJlYWs7CiAgICAgY2FzZSBUQUdfTkVYVDoKLQlFTVNHKCJFMjY4OiB1bmV4cGVjdGVkIG5leHQiKTsKKwlFTVNHKF8oIkUyNjg6IHVuZXhwZWN0ZWQgbmV4dCIpKTsKIAlicmVhazsKICAgICBjYXNlIFRBR19CUkVBSzoKLQlFTVNHKCJFMjY5OiB1bmV4cGVjdGVkIGJyZWFrIik7CisJRU1TRyhfKCJFMjY5OiB1bmV4cGVjdGVkIGJyZWFrIikpOwogCWJyZWFrOwogICAgIGNhc2UgVEFHX1JFRE86Ci0JRU1TRygiRTI3MDogdW5leHBlY3RlZCByZWRvIik7CisJRU1TRyhfKCJFMjcwOiB1bmV4cGVjdGVkIHJlZG8iKSk7CiAJYnJlYWs7CiAgICAgY2FzZSBUQUdfUkVUUlk6Ci0JRU1TRygiRTI3MTogcmV0cnkgb3V0c2lkZSBvZiByZXNjdWUgY2xhdXNlIik7CisJRU1TRyhfKCJFMjcxOiByZXRyeSBvdXRzaWRlIG9mIHJlc2N1ZSBjbGF1c2UiKSk7CiAJYnJlYWs7CiAgICAgY2FzZSBUQUdfUkFJU0U6CiAgICAgY2FzZSBUQUdfRkFUQUw6CiAJZWNsYXNzID0gQ0xBU1NfT0YocnVieV9lcnJpbmZvKTsKIAllaW5mbyA9IHJiX29ial9hc19zdHJpbmcocnVieV9lcnJpbmZvKTsKIAlpZiAoZWNsYXNzID09IHJiX2VSdW50aW1lRXJyb3IgJiYgUlNUUklORyhlaW5mbyktPmxlbiA9PSAwKSB7Ci0JICAgIEVNU0coIkUyNzI6IHVuaGFuZGxlZCBleGNlcHRpb24iKTsKKwkgICAgRU1TRyhfKCJFMjcyOiB1bmhhbmRsZWQgZXhjZXB0aW9uIikpOwogCX0KIAllbHNlIHsKIAkgICAgVkFMVUUgZXBhdGg7CmRpZmYgLS1naXQgYS9zcmMvbWFpbi5jIGIvc3JjL21haW4uYwppbmRleCBmOGI0ZmE5Li41MWNkMmM3IDEwMDY0NAotLS0gYS9zcmMvbWFpbi5jCisrKyBiL3NyYy9tYWluLmMKQEAgLTE4NzIsNyArMTg3Miw3IEBACiAJCXsKIAkJICAgIHNldF9vcHRpb25fdmFsdWUoKGNoYXJfdSAqKSJ2ZXJib3NlZmlsZSIsIDBMLAogCQkJCQkgICAgIChjaGFyX3UgKilhcmd2WzBdICsgYXJndl9pZHgsIDApOwotCQkgICAgYXJndl9pZHggPSBTVFJMRU4oYXJndlswXSk7CisJCSAgICBhcmd2X2lkeCA9IChpbnQpU1RSTEVOKGFyZ3ZbMF0pOwogCQl9CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9zcmMvbWJ5dGUuYyBiL3NyYy9tYnl0ZS5jCmluZGV4IDVkYjVjMDQuLjk4ZDRlMDAgMTAwNjQ0Ci0tLSBhL3NyYy9tYnl0ZS5jCisrKyBiL3NyYy9tYnl0ZS5jCkBAIC0xMTA0LDcgKzExMDQsNyBAQAogCiAgICAgLyogYmluYXJ5IHNlYXJjaCBpbiB0YWJsZSAqLwogICAgIGJvdCA9IDA7Ci0gICAgdG9wID0gc2l6ZSAvIHNpemVvZihzdHJ1Y3QgaW50ZXJ2YWwpIC0gMTsKKyAgICB0b3AgPSAoaW50KShzaXplIC8gc2l6ZW9mKHN0cnVjdCBpbnRlcnZhbCkgLSAxKTsKICAgICB3aGlsZSAodG9wID49IGJvdCkKICAgICB7CiAJbWlkID0gKGJvdCArIHRvcCkgLyAyOwpAQCAtMjI3MSw3ICsyMjcxLDcgQEAKICAgICBpbnQJCWksIGosIGw7CiAgICAgaW50CQljZGlmZjsKICAgICBpbnQJCWluY29tcGxldGUgPSBGQUxTRTsKLSAgICBpbnQJCW4gPSBubjsKKyAgICBpbnQJCW4gPSAoaW50KW5uOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkgKz0gbCkKICAgICB7CkBAIC0yMzY1LDcgKzIzNjUsNyBAQAogCX0KIAlzcHJpbnRmKChjaGFyICopSU9idWZmICsgcmxlbiwgIiUwMnggIiwgbGluZVtpXSk7CiAJLS1jbGVuOwotCXJsZW4gKz0gU1RSTEVOKElPYnVmZiArIHJsZW4pOworCXJsZW4gKz0gKGludClTVFJMRU4oSU9idWZmICsgcmxlbik7CiAJaWYgKHJsZW4gPiBJT1NJWkUgLSAyMCkKIAkgICAgYnJlYWs7CiAgICAgfQpAQCAtMjY0MCwxMiArMjY0MCwxMiBAQAogCQkJCSAgICAgfHwgdXRmX2NoYXIybGVuKHV0Zl9wdHIyY2hhcihwKSkgIT0gbGVuKSkKIAkgICAgewogCQlpZiAodmltY29udi52Y190eXBlID09IENPTlZfTk9ORSkKLQkJICAgIGN1cndpbi0+d19jdXJzb3IuY29sICs9IHAgLSBtbF9nZXRfY3Vyc29yKCk7CisJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCArPSAoY29sbnJfVCkocCAtIG1sX2dldF9jdXJzb3IoKSk7CiAJCWVsc2UKIAkJewogCQkgICAgaW50CSAgICBsOwogCi0JCSAgICBsZW4gPSBwIC0gdG9mcmVlOworCQkgICAgbGVuID0gKGludCkocCAtIHRvZnJlZSk7CiAJCSAgICBmb3IgKHAgPSBtbF9nZXRfY3Vyc29yKCk7ICpwICE9IE5VTCAmJiBsZW4tLSA+IDA7IHAgKz0gbCkKIAkJICAgIHsKIAkJCWwgPSB1dGZfcHRyMmxlbihwKTsKQEAgLTMyNjMsNyArMzI2Myw3IEBACiAJewogCSAgICAvKiBIYW5kbGUgYW4gaW5jb21wbGV0ZSBzZXF1ZW5jZSBhdCB0aGUgZW5kLiAqLwogCSAgICAqdG8gPSBOVUw7Ci0JICAgICp1bmNvbnZsZW5wID0gZnJvbWxlbjsKKwkgICAgKnVuY29udmxlbnAgPSAoaW50KWZyb21sZW47CiAJICAgIGJyZWFrOwogCX0KIApAQCAtMzI4MCwxMiArMzI4MCwxMiBAQAogCSAgICBpZiAoKCptYl9wdHIyY2VsbHMpKChjaGFyX3UgKilmcm9tKSA+IDEpCiAJCSp0bysrID0gJz8nOwogCSAgICBpZiAoZW5jX3V0ZjgpCi0JCWwgPSB1dGZjX3B0cjJsZW5fbGVuKChjaGFyX3UgKilmcm9tLCBmcm9tbGVuKTsKKwkJbCA9IHV0ZmNfcHRyMmxlbl9sZW4oKGNoYXJfdSAqKWZyb20sIChpbnQpZnJvbWxlbik7CiAJICAgIGVsc2UKIAkgICAgewogCQlsID0gKCptYl9wdHIybGVuKSgoY2hhcl91ICopZnJvbSk7CiAJCWlmIChsID4gKGludClmcm9tbGVuKQotCQkgICAgbCA9IGZyb21sZW47CisJCSAgICBsID0gKGludClmcm9tbGVuOwogCSAgICB9CiAJICAgIGZyb20gKz0gbDsKIAkgICAgZnJvbWxlbiAtPSBsOwpkaWZmIC0tZ2l0IGEvc3JjL21lbWxpbmUuYyBiL3NyYy9tZW1saW5lLmMKaW5kZXggNTU0M2U1ZC4uOTI4NGFiYiAxMDA2NDQKLS0tIGEvc3JjL21lbWxpbmUuYworKysgYi9zcmMvbWVtbGluZS5jCkBAIC04MDksNyArODA5LDcgQEAKIHsKICAgICBpbnQJCW47CiAKLSAgICBuID0gU1RSTEVOKGJ1Zi0+Yl9wX2ZlbmMpOworICAgIG4gPSAoaW50KVNUUkxFTihidWYtPmJfcF9mZW5jKTsKICAgICBpZiAoU1RSTEVOKGIwcC0+YjBfZm5hbWUpICsgbiArIDEgPiBCMF9GTkFNRV9TSVpFKQogCWIwcC0+YjBfZmxhZ3MgJj0gfkIwX0hBU19GRU5DOwogICAgIGVsc2UKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAJZm9yIChwID0gYjBwLT5iMF9mbmFtZSArIEIwX0ZOQU1FX1NJWkU7CiAJCQkJICAgICAgIHAgPiBiMHAtPmIwX2ZuYW1lICYmIHBbLTFdICE9IE5VTDsgLS1wKQogCSAgICA7Ci0JYjBfZmVuYyA9IHZpbV9zdHJuc2F2ZShwLCBiMHAtPmIwX2ZuYW1lICsgQjBfRk5BTUVfU0laRSAtIHApOworCWIwX2ZlbmMgPSB2aW1fc3RybnNhdmUocCwgKGludCkoYjBwLT5iMF9mbmFtZSArIEIwX0ZOQU1FX1NJWkUgLSBwKSk7CiAgICAgfQogCiAgICAgbWZfcHV0KG1mcCwgaHAsIEZBTFNFLCBGQUxTRSk7CS8qIHJlbGVhc2UgYmxvY2sgMCAqLwpAQCAtMjYzOCw3ICsyNjM4LDcgQEAKICAgICBpZiAodXNpbmdOZXRiZWFucykKICAgICB7CiAJaWYgKFNUUkxFTihsaW5lKSA+IDApCi0JICAgIG5ldGJlYW5zX2luc2VydGVkKGJ1ZiwgbG51bSsxLCAoY29sbnJfVCkwLCBsaW5lLCBTVFJMRU4obGluZSkpOworCSAgICBuZXRiZWFuc19pbnNlcnRlZChidWYsIGxudW0rMSwgKGNvbG5yX1QpMCwgbGluZSwgKGludClTVFJMRU4obGluZSkpOwogCW5ldGJlYW5zX2luc2VydGVkKGJ1ZiwgbG51bSsxLCAoY29sbnJfVClTVFJMRU4obGluZSksCiAJCQkJCQkJICAgKGNoYXJfdSAqKSJcbiIsIDEpOwogICAgIH0KQEAgLTI2NzYsNyArMjY3Niw3IEBACiAgICAgaWYgKHVzaW5nTmV0YmVhbnMpCiAgICAgewogCW5ldGJlYW5zX3JlbW92ZWQoY3VyYnVmLCBsbnVtLCAwLCAobG9uZylTVFJMRU4obWxfZ2V0KGxudW0pKSk7Ci0JbmV0YmVhbnNfaW5zZXJ0ZWQoY3VyYnVmLCBsbnVtLCAwLCBsaW5lLCBTVFJMRU4obGluZSkpOworCW5ldGJlYW5zX2luc2VydGVkKGN1cmJ1ZiwgbG51bSwgMCwgbGluZSwgKGludClTVFJMRU4obGluZSkpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChjdXJidWYtPmJfbWwubWxfbGluZV9sbnVtICE9IGxudW0pCSAgICAvKiBvdGhlciBsaW5lIGJ1ZmZlcmVkICovCmRpZmYgLS1naXQgYS9zcmMvbWVudS5jIGIvc3JjL21lbnUuYwppbmRleCBiOWM3OTIyLi5iNGYwNmQyIDEwMDY0NAotLS0gYS9zcmMvbWVudS5jCisrKyBiL3NyYy9tZW51LmMKQEAgLTc1OSw3ICs3NTksNyBAQAogCQkJU1RSQ1BZKG1lbnUtPnN0cmluZ3NbaV0gKyAxLCBjYWxsX2RhdGEpOwogCQkJaWYgKGMgPT0gQ3RybF9DKQogCQkJewotCQkJICAgIGludAkgICAgbGVuID0gU1RSTEVOKG1lbnUtPnN0cmluZ3NbaV0pOworCQkJICAgIGludAkgICAgbGVuID0gKGludClTVFJMRU4obWVudS0+c3RyaW5nc1tpXSk7CiAKIAkJCSAgICAvKiBBcHBlbmQgQ1RSTC1cIENUUkwtRyB0byBvYmV5ICdpbnNlcnRtb2RlJy4gKi8KIAkJCSAgICBtZW51LT5zdHJpbmdzW2ldW2xlbl0gPSBDdHJsX0JTTDsKZGlmZiAtLWdpdCBhL3NyYy9tZXNzYWdlLmMgYi9zcmMvbWVzc2FnZS5jCmluZGV4IDBkNTY3NTkuLjY5YjE5NGQgMTAwNjQ0Ci0tLSBhL3NyYy9tZXNzYWdlLmMKKysrIGIvc3JjL21lc3NhZ2UuYwpAQCAtMjEwMiw3ICsyMTAyLDcgQEAKIAkgICAgcCA9IChjaGFyX3UgKilfKCJVbmtub3duIik7CiAJZWxzZQogCXsKLQkgICAgbGVuID0gU1RSTEVOKHApICsgNDA7CisJICAgIGxlbiA9IChpbnQpU1RSTEVOKHApICsgNDA7CiAJICAgIHRvZnJlZSA9IGFsbG9jKGxlbik7CiAJICAgIGlmICh0b2ZyZWUgIT0gTlVMTCkKIAkgICAgewpAQCAtMzUxMSwxMSArMzUxMSwxMSBAQAogCX0KIAllbHNlCiAJewotCSAgICBsZW4gKz0gU1RSTEVOKG1lc3NhZ2UpCi0JCSAgICArIDIJCQkvKiBmb3IgdGhlIE5MJ3MgKi8KLQkJICAgICsgU1RSTEVOKGJ1dHRvbnMpCi0JCSAgICArIDM7CQkvKiBmb3IgdGhlICI6ICIgYW5kIE5VTCAqLwotCSAgICBsZW5ob3RrZXkrKzsJCS8qIGZvciB0aGUgTlVMICovCisJICAgIGxlbiArPSAoaW50KShTVFJMRU4obWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICsgMgkJCS8qIGZvciB0aGUgTkwncyAqLworICAgICAgICAgICAgICAgICAgICAgICAgKyBTVFJMRU4oYnV0dG9ucykKKyAgICAgICAgICAgICAgICAgICAgICAgICsgMyk7CSAgICAgICAgCS8qIGZvciB0aGUgIjogIiBhbmQgTlVMICovCisJICAgIGxlbmhvdGtleSsrOwkJCS8qIGZvciB0aGUgTlVMICovCiAKIAkgICAgLyogSWYgbm8gaG90a2V5IGlzIHNwZWNpZmllZCBmaXJzdCBjaGFyIGlzIHVzZWQuICovCiAJICAgIGlmICghaGFzX2hvdGtleVswXSkKQEAgLTQ0MjksOCArNDQyOSw4IEBACiAJCSAgICAvKiB6ZXJvIHBhZGRpbmcgdG8gc3BlY2lmaWVkIG1pbmltYWwgZmllbGQgd2lkdGg/ICovCiAJCSAgICBpZiAoIWp1c3RpZnlfbGVmdCAmJiB6ZXJvX3BhZGRpbmcpCiAJCSAgICB7Ci0JCQlpbnQgbiA9IG1pbl9maWVsZF93aWR0aCAtIChzdHJfYXJnX2wKLQkJCQkJCSAgICArIG51bWJlcl9vZl96ZXJvc190b19wYWQpOworCQkJaW50IG4gPSAoaW50KShtaW5fZmllbGRfd2lkdGggLSAoc3RyX2FyZ19sCisJCQkJCQkgICAgKyBudW1iZXJfb2ZfemVyb3NfdG9fcGFkKSk7CiAJCQlpZiAobiA+IDApCiAJCQkgICAgbnVtYmVyX29mX3plcm9zX3RvX3BhZCArPSBuOwogCQkgICAgfQpAQCAtNDQ2NCw3ICs0NDY0LDcgQEAKIAkgICAgaWYgKCFqdXN0aWZ5X2xlZnQpCiAJICAgIHsKIAkJLyogbGVmdCBwYWRkaW5nIHdpdGggYmxhbmsgb3IgemVybyAqLwotCQlpbnQgcG4gPSBtaW5fZmllbGRfd2lkdGggLSAoc3RyX2FyZ19sICsgbnVtYmVyX29mX3plcm9zX3RvX3BhZCk7CisJCWludCBwbiA9IChpbnQpKG1pbl9maWVsZF93aWR0aCAtIChzdHJfYXJnX2wgKyBudW1iZXJfb2ZfemVyb3NfdG9fcGFkKSk7CiAKIAkJaWYgKHBuID4gMCkKIAkJewpAQCAtNDQ5MSw3ICs0NDkxLDcgQEAKIAkgICAgewogCQkvKiBpbnNlcnQgZmlyc3QgcGFydCBvZiBudW1lcmljcyAoc2lnbiBvciAnMHgnKSBiZWZvcmUgemVybwogCQkgKiBwYWRkaW5nICovCi0JCWludCB6biA9IHplcm9fcGFkZGluZ19pbnNlcnRpb25faW5kOworCQlpbnQgem4gPSAoaW50KXplcm9fcGFkZGluZ19pbnNlcnRpb25faW5kOwogCiAJCWlmICh6biA+IDApCiAJCXsKQEAgLTQ1MDcsNyArNDUwNyw3IEBACiAKIAkJLyogaW5zZXJ0IHplcm8gcGFkZGluZyBhcyByZXF1ZXN0ZWQgYnkgdGhlIHByZWNpc2lvbiBvciBtaW4KIAkJICogZmllbGQgd2lkdGggKi8KLQkJem4gPSBudW1iZXJfb2ZfemVyb3NfdG9fcGFkOworCQl6biA9IChpbnQpbnVtYmVyX29mX3plcm9zX3RvX3BhZDsKIAkJaWYgKHpuID4gMCkKIAkJewogCQkgICAgaWYgKHN0cl9sIDwgc3RyX20pCkBAIC00NTI0LDcgKzQ1MjQsNyBAQAogCSAgICAvKiBpbnNlcnQgZm9ybWF0dGVkIHN0cmluZwogCSAgICAgKiAob3IgYXMtaXMgY29udmVyc2lvbiBzcGVjaWZpZXIgZm9yIHVua25vd24gY29udmVyc2lvbnMpICovCiAJICAgIHsKLQkJaW50IHNuID0gc3RyX2FyZ19sIC0gemVyb19wYWRkaW5nX2luc2VydGlvbl9pbmQ7CisJCWludCBzbiA9IChpbnQpKHN0cl9hcmdfbCAtIHplcm9fcGFkZGluZ19pbnNlcnRpb25faW5kKTsKIAogCQlpZiAoc24gPiAwKQogCQl7CkBAIC00NTQ0LDcgKzQ1NDQsNyBAQAogCSAgICBpZiAoanVzdGlmeV9sZWZ0KQogCSAgICB7CiAJCS8qIHJpZ2h0IGJsYW5rIHBhZGRpbmcgdG8gdGhlIGZpZWxkIHdpZHRoICovCi0JCWludCBwbiA9IG1pbl9maWVsZF93aWR0aCAtIChzdHJfYXJnX2wgKyBudW1iZXJfb2ZfemVyb3NfdG9fcGFkKTsKKwkJaW50IHBuID0gKGludCkobWluX2ZpZWxkX3dpZHRoIC0gKHN0cl9hcmdfbCArIG51bWJlcl9vZl96ZXJvc190b19wYWQpKTsKIAogCQlpZiAocG4gPiAwKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvbWlzYzEuYyBiL3NyYy9taXNjMS5jCmluZGV4IDZjM2I1YWQuLjdkODZlNDYgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjMS5jCisrKyBiL3NyYy9taXNjMS5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIAkvKiBDb3JyZWN0IHNhdmVkIGN1cnNvciBwb3NpdGlvbiBpZiBpdCdzIGFmdGVyIHRoZSBpbmRlbnQuICovCiAJaWYgKHNhdmVkX2N1cnNvci5sbnVtID09IGN1cndpbi0+d19jdXJzb3IubG51bQogCQkJCSYmIHNhdmVkX2N1cnNvci5jb2wgPj0gKGNvbG5yX1QpKHAgLSBvbGRsaW5lKSkKLQkgICAgc2F2ZWRfY3Vyc29yLmNvbCArPSBpbmRfbGVuIC0gKHAgLSBvbGRsaW5lKTsKKwkgICAgc2F2ZWRfY3Vyc29yLmNvbCArPSBpbmRfbGVuIC0gKGNvbG5yX1QpKHAgLSBvbGRsaW5lKTsKIAlyZXR2YWwgPSBUUlVFOwogICAgIH0KICAgICBlbHNlCkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCQkJCW1iX3B0cl9iYWNrKGxlYWRlciwgcCk7CiAJCQkJb2xkX3NpemUgKz0gcHRyMmNlbGxzKHApOwogCQkJICAgIH0KLQkJCSAgICBsID0gbGVhZF9yZXBsX2xlbiAtIChlbmRwIC0gcCk7CisJCQkgICAgbCA9IGxlYWRfcmVwbF9sZW4gLSAoaW50KShlbmRwIC0gcCk7CiAJCQkgICAgaWYgKGwgIT0gMCkKIAkJCQltY2hfbWVtbW92ZShlbmRwICsgbCwgZW5kcCwKIAkJCQkJKHNpemVfdCkoKGxlYWRlciArIGxlYWRfbGVuKSAtIGVuZHApKTsKQEAgLTM0MTgsNyArMzQxOCw3IEBACiAKIAkvKiBDb252ZXJ0IGZyb20gYWN0aXZlIGNvZGVwYWdlIHRvIFVURi04LiAgT3RoZXIgY29udmVyc2lvbnMgYXJlCiAJICogbm90IGRvbmUsIGJlY2F1c2UgdGhleSB3b3VsZCBmYWlsIGZvciBub24tQVNDSUkgY2hhcmFjdGVycy4gKi8KLQlhY3BfdG9fZW5jKHZhciwgU1RSTEVOKHZhciksICZwcCwgJmxlbik7CisJYWNwX3RvX2VuYyh2YXIsIChpbnQpU1RSTEVOKHZhciksICZwcCwgJmxlbik7CiAJaWYgKHBwICE9IE5VTEwpCiAJewogCSAgICBob21lZGlyID0gcHA7CkBAIC0zNDk3LDcgKzM0OTcsNyBAQAogICAgIGludAkJc3RhcnRzdHJfbGVuID0gMDsKIAogICAgIGlmIChzdGFydHN0ciAhPSBOVUxMKQotCXN0YXJ0c3RyX2xlbiA9IFNUUkxFTihzdGFydHN0cik7CisJc3RhcnRzdHJfbGVuID0gKGludClTVFJMRU4oc3RhcnRzdHIpOwogCiAgICAgc3JjID0gc2tpcHdoaXRlKHNyY3ApOwogICAgIC0tZHN0bGVuOwkJICAgIC8qIGxlYXZlIG9uZSBjaGFyIHNwYWNlIGZvciAiXCwiICovCkBAIC0zNzA1LDcgKzM3MDUsNyBAQAogCSAgICB7CiAJCVNUUkNQWShkc3QsIHZhcik7CiAJCWRzdGxlbiAtPSAoaW50KVNUUkxFTih2YXIpOwotCQljID0gU1RSTEVOKHZhcik7CisJCWMgPSAoaW50KVNUUkxFTih2YXIpOwogCQkvKiBpZiB2YXJbXSBlbmRzIGluIGEgcGF0aCBzZXBhcmF0b3IgYW5kIHRhaWxbXSBzdGFydHMKIAkJICogd2l0aCBpdCwgc2tpcCBhIGNoYXJhY3RlciAqLwogCQlpZiAoKnZhciAhPSBOVUwgJiYgYWZ0ZXJfcGF0aHNlcChkc3QsIGRzdCArIGMpCkBAIC0zNzgwLDcgKzM3ODAsNyBAQAogCiAJICAgIC8qIENvbnZlcnQgZnJvbSBhY3RpdmUgY29kZXBhZ2UgdG8gVVRGLTguICBPdGhlciBjb252ZXJzaW9ucyBhcmUKIAkgICAgICogbm90IGRvbmUsIGJlY2F1c2UgdGhleSB3b3VsZCBmYWlsIGZvciBub24tQVNDSUkgY2hhcmFjdGVycy4gKi8KLQkgICAgYWNwX3RvX2VuYyhwLCBTVFJMRU4ocCksICZwcCwgJmxlbik7CisJICAgIGFjcF90b19lbmMocCwgKGludClTVFJMRU4ocCksICZwcCwgJmxlbik7CiAJICAgIGlmIChwcCAhPSBOVUxMKQogCSAgICB7CiAJCXAgPSBwcDsKQEAgLTM4MjUsNyArMzgyNSw3IEBACiAJCS8qIENvbnZlcnQgZnJvbSBhY3RpdmUgY29kZXBhZ2UgdG8gVVRGLTguICBPdGhlciBjb252ZXJzaW9ucwogCQkgKiBhcmUgbm90IGRvbmUsIGJlY2F1c2UgdGhleSB3b3VsZCBmYWlsIGZvciBub24tQVNDSUkKIAkJICogY2hhcmFjdGVycy4gKi8KLQkJYWNwX3RvX2VuYyhwLCBTVFJMRU4ocCksICZwcCwgJmxlbik7CisJCWFjcF90b19lbmMocCwgKGludClTVFJMRU4ocCksICZwcCwgJmxlbik7CiAJCWlmIChwcCAhPSBOVUxMKQogCQl7CiAJCSAgICBpZiAobXVzdGZyZWUpCkBAIC01MTQ0LDExICs1MTQ0LDExIEBACiAKICAgICBsaW5lID0gbWxfZ2V0X2N1cmxpbmUoKTsKICAgICBwID0gc2tpcHdoaXRlKGxpbmUpOwotICAgIGxlbiA9IHNraXB0b3doaXRlKHApIC0gcDsKKyAgICBsZW4gPSAoaW50KShza2lwdG93aGl0ZShwKSAtIHApOwogICAgIGlmIChsZW4gPT0gNiAmJiBTVFJOQ01QKHAsICJzdGF0aWMiLCA2KSA9PSAwKQogICAgIHsKIAlwID0gc2tpcHdoaXRlKHAgKyA2KTsKLQlsZW4gPSBza2lwdG93aGl0ZShwKSAtIHA7CisgICAgICAgIGxlbiA9IChpbnQpKHNraXB0b3doaXRlKHApIC0gcCk7CiAgICAgfQogICAgIGlmIChsZW4gPT0gNiAmJiBTVFJOQ01QKHAsICJzdHJ1Y3QiLCA2KSA9PSAwKQogCXAgPSBza2lwd2hpdGUocCArIDYpOwpAQCAtNTQ4OSw3ICs1NDg5LDcgQEAKIAkgICAgewogCQkvKiBGb3VuZCAiKTsiIGF0IGVuZCBvZiB0aGUgbGluZSwgbm93IGNoZWNrIHRoZXJlIGlzICJ3aGlsZSIKIAkJICogYmVmb3JlIHRoZSBtYXRjaGluZyAnKCcuICBYWFggKi8KLQkJaSA9IHAgLSBsaW5lOworCQlpID0gKGludCkocCAtIGxpbmUpOwogCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGk7CiAJCXRyeXBvcyA9IGZpbmRfbWF0Y2hfcGFyZW4oaW5kX21heHBhcmVuLCBpbmRfbWF4Y29tbWVudCk7CiAJCWlmICh0cnlwb3MgIT0gTlVMTCkKQEAgLTY0NjgsNyArNjQ2OCw3IEBACiAJCSAqIG91ciBtYXRjaGluZyAnKCcuICovCiAJCWN1cndpbi0+d19jdXJzb3IubG51bSA9IG91cl9wYXJlbl9wb3MubG51bTsKIAkJbGluZSA9IG1sX2dldF9jdXJsaW5lKCk7Ci0JCWxvb2tfY29sID0gbG9vayAtIGxpbmU7CisJCWxvb2tfY29sID0gKGludCkobG9vayAtIGxpbmUpOwogCQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IGxvb2tfY29sICsgMTsKIAkJaWYgKCh0cnlwb3MgPSBmaW5kbWF0Y2hsaW1pdChOVUxMLCAnKScsIDAsIGluZF9tYXhwYXJlbikpCiAJCQkJCQkJCSAgICAgICE9IE5VTEwKZGlmZiAtLWdpdCBhL3NyYy9taXNjMi5jIGIvc3JjL21pc2MyLmMKaW5kZXggMDA0OTc0YS4uZjhhNTgzYiAxMDA2NDQKLS0tIGEvc3JjL21pc2MyLmMKKysrIGIvc3JjL21pc2MyLmMKQEAgLTI0NDcsNyArMjQ0Nyw3IEBACiAgICAgaW50CQltb2RpZmllcnM7CiAgICAgaW50CQliaXQ7CiAgICAgaW50CQlrZXk7Ci0gICAgbG9uZ191CW47CisgICAgdW5zaWduZWQgbG9uZyBuOwogCiAgICAgc3JjID0gKnNyY3A7CiAgICAgaWYgKHNyY1swXSAhPSAnPCcpCmRpZmYgLS1naXQgYS9zcmMvbmV0YmVhbnMuYyBiL3NyYy9uZXRiZWFucy5jCmluZGV4IGRlZDQ5MDEuLjg5MjgzNDIgMTAwNjQ0Ci0tLSBhL3NyYy9uZXRiZWFucy5jCisrKyBiL3NyYy9uZXRiZWFucy5jCkBAIC04Niw3ICs4NiwxMyBAQAogc3RhdGljIGludCAgbmJfZG9fY21kIF9fQVJHUygoaW50LCBjaGFyX3UgKiwgaW50LCBpbnQsIGNoYXJfdSAqKSk7CiBzdGF0aWMgdm9pZCBuYl9zZW5kIF9fQVJHUygoY2hhciAqYnVmLCBjaGFyICpmdW4pKTsKIAotc3RhdGljIGludCBzZCA9IC0xOwkJCS8qIHNvY2tldCBmZCBmb3IgTmV0YmVhbnMgY29ubmVjdGlvbiAqLworI2lmZGVmIFdJTjY0Cit0eXBlZGVmIF9faW50NjQgTkJTT0NLOworI2Vsc2UKK3R5cGVkZWYgaW50IE5CU09DSzsKKyNlbmRpZgorCitzdGF0aWMgTkJTT0NLIHNkID0gLTE7CQkJLyogc29ja2V0IGZkIGZvciBOZXRiZWFucyBjb25uZWN0aW9uICovCiAjaWZkZWYgRkVBVF9HVUlfTU9USUYKIHN0YXRpYyBYdElucHV0SWQgaW5wdXRIYW5kbGVyOwkJLyogQ29va2llIGZvciBpbnB1dCAqLwogI2VuZGlmCkBAIC0zMTUsNyArMzIxLDcgQEAKICNpZmRlZiBJTkVUX1NPQ0tFVFMKICAgICBwb3J0ID0gYXRvaShhZGRyZXNzKTsKIAotICAgIGlmICgoc2QgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA9PSAtMSkKKyAgICBpZiAoKHNkID0gKE5CU09DSylzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA9PSAoTkJTT0NLKS0xKQogICAgIHsKIAlQRVJST1IoInNvY2tldCgpIGluIG5ldGJlYW5zX2Nvbm5lY3QoKSIpOwogCWdvdG8gdGhlZW5kOwpAQCAtMzU3LDcgKzM2Myw3IEBACiAJewogCSAgICBzb2NrX2Nsb3NlKHNkKTsKICNpZmRlZiBJTkVUX1NPQ0tFVFMKLQkgICAgaWYgKChzZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpID09IC0xKQorCSAgICBpZiAoKHNkID0gKE5CU09DSylzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA9PSAoTkJTT0NLKS0xKQogCSAgICB7CiAJCVBFUlJPUigic29ja2V0KCkjMiBpbiBuZXRiZWFuc19jb25uZWN0KCkiKTsKIAkJZ290byB0aGVlbmQ7CkBAIC02MzAsNyArNjM2LDcgQEAKIAkgICAgICogcHJlcGVuZCB0aGUgdGV4dCB0byB0aGF0IGJ1ZmZlciBhbmQgZGVsZXRlIHRoaXMgb25lLiAgKi8KIAkgICAgaWYgKG5vZGUtPm5leHQgPT0gJmhlYWQpCiAJCXJldHVybjsKLQkgICAgcCA9IGFsbG9jKFNUUkxFTihub2RlLT5idWZmZXIpICsgU1RSTEVOKG5vZGUtPm5leHQtPmJ1ZmZlcikgKyAxKTsKKwkgICAgcCA9IGFsbG9jKCh1bnNpZ25lZCkoU1RSTEVOKG5vZGUtPmJ1ZmZlcikgKyBTVFJMRU4obm9kZS0+bmV4dC0+YnVmZmVyKSArIDEpKTsKIAkgICAgaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuOwkgICAgLyogb3V0IG9mIG1lbW9yeSAqLwogCSAgICBTVFJDUFkocCwgbm9kZS0+YnVmZmVyKTsKQEAgLTEwMTAsNyArMTAxNiw3IEBACiAJbmJkZWJ1ZygoIkVWVDogJXMiLCBidWYpKTsKIC8qCW5iX3NlbmQoYnVmLCAibmV0YmVhbnNfZW5kIik7ICAgIGF2b2lkICJ3cml0ZSBmYWlsZWQiIG1lc3NhZ2VzICovCiAJaWYgKHNkID49IDApCi0JICAgIHNvY2tfd3JpdGUoc2QsIGJ1ZiwgU1RSTEVOKGJ1ZikpOyAgLyogaWdub3JlIGVycm9ycyAqLworCSAgICBzb2NrX3dyaXRlKHNkLCBidWYsIChpbnQpU1RSTEVOKGJ1ZikpOyAgLyogaWdub3JlIGVycm9ycyAqLwogICAgIH0KIH0KIApAQCAtMTAzMCw3ICsxMDM2LDcgQEAKIAkgICAgRU1TRzIoIkU2MzA6ICVzKCk6IHdyaXRlIHdoaWxlIG5vdCBjb25uZWN0ZWQiLCBmdW4pOwogCWRpZF9lcnJvciA9IFRSVUU7CiAgICAgfQotICAgIGVsc2UgaWYgKHNvY2tfd3JpdGUoc2QsIGJ1ZiwgU1RSTEVOKGJ1ZikpICE9IChpbnQpU1RSTEVOKGJ1ZikpCisgICAgZWxzZSBpZiAoc29ja193cml0ZShzZCwgYnVmLCAoaW50KVNUUkxFTihidWYpKSAhPSAoaW50KVNUUkxFTihidWYpKQogICAgIHsKIAlpZiAoIWRpZF9lcnJvcikKIAkgICAgRU1TRzIoIkU2MzE6ICVzKCk6IHdyaXRlIGZhaWxlZCIsIGZ1bik7CkBAIC0xMDczLDcgKzEwNzksNyBAQAogCiAgICAgbmJkZWJ1ZygoIlJFUCAlZDogJXNcbiIsIGNtZG5vLCAoY2hhciAqKXJlc3VsdCkpOwogCi0gICAgcmVwbHkgPSBhbGxvYyhTVFJMRU4ocmVzdWx0KSArIDMyKTsKKyAgICByZXBseSA9IGFsbG9jKCh1bnNpZ25lZClTVFJMRU4ocmVzdWx0KSArIDMyKTsKICAgICBzcHJpbnRmKChjaGFyICopcmVwbHksICIlZCAlc1xuIiwgY21kbm8sIChjaGFyICopcmVzdWx0KTsKICAgICBuYl9zZW5kKChjaGFyICopcmVwbHksICJuYl9yZXBseV90ZXh0Iik7CiAKQEAgLTExMDUsNyArMTExMSw3IEBACiAgICAgc3RhdGljIGNoYXJfdSAqCiBuYl9xdW90ZShjaGFyX3UgKnR4dCkKIHsKLSAgICBjaGFyX3UgKmJ1ZiA9IGFsbG9jKDIgKiBTVFJMRU4odHh0KSArIDEpOworICAgIGNoYXJfdSAqYnVmID0gYWxsb2MoKHVuc2lnbmVkKSgyICogU1RSTEVOKHR4dCkgKyAxKSk7CiAgICAgY2hhcl91ICpwID0gdHh0OwogICAgIGNoYXJfdSAqcSA9IGJ1ZjsKIApAQCAtMTE0OSw3ICsxMTU1LDcgQEAKICAgICBpbnQgZG9uZSA9IDA7CiAKICAgICAvKiByZXN1bHQgaXMgbmV2ZXIgbG9uZ2VyIHRoYW4gaW5wdXQgKi8KLSAgICByZXN1bHQgPSAoY2hhciAqKWFsbG9jX2NsZWFyKFNUUkxFTihwKSArIDEpOworICAgIHJlc3VsdCA9IChjaGFyICopYWxsb2NfY2xlYXIoKHVuc2lnbmVkKVNUUkxFTihwKSArIDEpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKIAlyZXR1cm4gTlVMTDsKIApAQCAtMTU0Nyw3ICsxNTUzLDcgQEAKIAogCQkJLyogSW5zZXJ0IGhhbGZ3YXkgYSBsaW5lLiAgRm9yIHNpbXBsaWNpdHkgd2UgYXNzdW1lIHdlCiAJCQkgKiBuZWVkIHRvIGFwcGVuZCB0byB0aGUgbGluZS4gKi8KLQkJCW5ld2xpbmUgPSBhbGxvY19jaGVjayhTVFJMRU4ob2xkbGluZSkgKyBsZW4gKyAxKTsKKwkJCW5ld2xpbmUgPSBhbGxvY19jaGVjaygodW5zaWduZWQpKFNUUkxFTihvbGRsaW5lKSArIGxlbiArIDEpKTsKIAkJCWlmIChuZXdsaW5lICE9IE5VTEwpCiAJCQl7CiAJCQkgICAgU1RSQ1BZKG5ld2xpbmUsIG9sZGxpbmUpOwpAQCAtMTU1OSw3ICsxNTY1LDcgQEAKIAkJICAgIHsKIAkJCS8qIEFwcGVuZCBhIG5ldyBsaW5lLiAgTm90IHRoYXQgd2UgYWx3YXlzIGRvIHRoaXMsCiAJCQkgKiBhbHNvIHdoZW4gdGhlIHRleHQgZG9lc24ndCBlbmQgaW4gYSAiXG4iLiAqLwotCQkJbWxfYXBwZW5kKChsaW5lbnJfVCkobG51bSAtIDEpLCBhcmdzLCBsZW4gKyAxLCBGQUxTRSk7CisJCQltbF9hcHBlbmQoKGxpbmVucl9UKShsbnVtIC0gMSksIGFyZ3MsIChjb2xucl9UKShsZW4gKyAxKSwgRkFMU0UpOwogCQkJKythZGRlZDsKIAkJICAgIH0KIApAQCAtMzI5Miw3ICszMjk4LDcgQEAKIAkgICAgZW9sX3NpemUgPSAxOwogCWZvciAobG51bSA9IDE7IGxudW0gPD0gYnVmcC0+Yl9tbC5tbF9saW5lX2NvdW50OyArK2xudW0pCiAJewotCSAgICBjaGFyX2NvdW50ICs9IFNUUkxFTihtbF9nZXQobG51bSkpICsgZW9sX3NpemU7CisJICAgIGNoYXJfY291bnQgKz0gKGxvbmcpU1RSTEVOKG1sX2dldChsbnVtKSkgKyBlb2xfc2l6ZTsKIAkgICAgLyogQ2hlY2sgZm9yIGEgQ1RSTC1DIGV2ZXJ5IDEwMDAwMCBjaGFyYWN0ZXJzICovCiAJICAgIGlmIChjaGFyX2NvdW50ID4gbGFzdF9jaGVjaykKIAkgICAgewpAQCAtMzM5Myw3ICszMzk5LDcgQEAKICAgICBuYmJ1Zl9UCSpidWY7CiB7CiAgICAgaW50CSAgICBsbnVtID0gYnVmLT5idWZwLT5iX21sLm1sX2xpbmVfY291bnQ7Ci0gICAgbG9uZyAgICBuY2hhcnMgPSBidWYtPmJ1ZnAtPmJfb3JpZ19zaXplOworICAgIGxvbmcgICAgbmNoYXJzID0gKGxvbmcpYnVmLT5idWZwLT5iX29yaWdfc2l6ZTsKICAgICBjaGFyX3UgIGM7CiAKICAgICBtc2dfYWRkX2ZuYW1lKGJ1Zi0+YnVmcCwgYnVmLT5idWZwLT5iX2ZmbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvbm9ybWFsLmMgYi9zcmMvbm9ybWFsLmMKaW5kZXggYmM2OTU1ZC4uMTg5YjIxYyAxMDA2NDQKLS0tIGEvc3JjL25vcm1hbC5jCisrKyBiL3NyYy9ub3JtYWwuYwpAQCAtMzM4OSw3ICszMzg5LDcgQEAKIAkgICAgZWxzZQogIyBlbmRpZgogCQl0aGlzX2NsYXNzID0gbWJfZ2V0X2NsYXNzKHB0ciArIGNvbCk7Ci0JICAgIHdoaWxlIChjb2wgPiAwKQorCSAgICB3aGlsZSAoY29sID4gMCAmJiB0aGlzX2NsYXNzICE9IDApCiAJICAgIHsKIAkJcHJldmNvbCA9IGNvbCAtIDEgLSAoKm1iX2hlYWRfb2ZmKShwdHIsIHB0ciArIGNvbCAtIDEpOwogCQlwcmV2X2NsYXNzID0gbWJfZ2V0X2NsYXNzKHB0ciArIHByZXZjb2wpOwpAQCAtNjk4Niw3ICs2OTg2LDcgQEAKIAkJICAgIGlmIChkaWRfY2hhbmdlKQogCQkgICAgewogCQkJcHRyID0gbWxfZ2V0KHBvcy5sbnVtKTsKLQkJCWNvdW50ID0gU1RSTEVOKHB0cikgLSBwb3MuY29sOworCQkJY291bnQgPSAoaW50KVNUUkxFTihwdHIpIC0gcG9zLmNvbDsKIAkJCW5ldGJlYW5zX3JlbW92ZWQoY3VyYnVmLCBwb3MubG51bSwgcG9zLmNvbCwKIAkJCQkJCQkJIChsb25nKWNvdW50KTsKIAkJCW5ldGJlYW5zX2luc2VydGVkKGN1cmJ1ZiwgcG9zLmxudW0sIHBvcy5jb2wsCmRpZmYgLS1naXQgYS9zcmMvb3BzLmMgYi9zcmMvb3BzLmMKaW5kZXggYTEzY2VlNy4uNTEyMmI4NyAxMDA2NDQKLS0tIGEvc3JjL29wcy5jCisrKyBiL3NyYy9vcHMuYwpAQCAtMjAyMyw3ICsyMDIzLDcgQEAKICNpZmRlZiBGRUFUX01CWVRFCiAJICAgIGlmIChoYXNfbWJ5dGUpCiAJICAgIHsKLQkJbiA9IFNUUkxFTihuZXdwKTsKKwkJbiA9IChpbnQpU1RSTEVOKG5ld3ApOwogCQl3aGlsZSAoLS1udW1fY2hhcnMgPj0gMCkKIAkJICAgIG4gKz0gKCptYl9jaGFyMmJ5dGVzKShjLCBuZXdwICsgbik7CiAJICAgIH0KQEAgLTIyMjUsNyArMjIyNSw3IEBACiAJCXdoaWxlIChwb3MubG51bSA8IG9hcC0+ZW5kLmxudW0pCiAJCXsKIAkJICAgIHB0ciA9IG1sX2dldF9idWYoY3VyYnVmLCBwb3MubG51bSwgRkFMU0UpOwotCQkgICAgY291bnQgPSBTVFJMRU4ocHRyKSAtIHBvcy5jb2w7CisJCSAgICBjb3VudCA9IChpbnQpU1RSTEVOKHB0cikgLSBwb3MuY29sOwogCQkgICAgbmV0YmVhbnNfcmVtb3ZlZChjdXJidWYsIHBvcy5sbnVtLCBwb3MuY29sLCAobG9uZyljb3VudCk7CiAJCSAgICBuZXRiZWFuc19pbnNlcnRlZChjdXJidWYsIHBvcy5sbnVtLCBwb3MuY29sLAogCQkJCQkJICZwdHJbcG9zLmNvbF0sIGNvdW50KTsKQEAgLTI4ODYsNyArMjg4Niw3IEBACiAJCSAgICBlbHNlCiAJCSAgICB7CiAJCQlpZiAoZW5kY29sID09IE1BWENPTCkKLQkJCSAgICBlbmRjb2wgPSBTVFJMRU4ocCk7CisJCQkgICAgZW5kY29sID0gKGNvbG5yX1QpU1RSTEVOKHApOwogCQkJYmQudGV4dGxlbiA9IGVuZGNvbCAtIHN0YXJ0Y29sICsgb2FwLT5pbmNsdXNpdmU7CiAJCSAgICB9CiAJCSAgICBiZC50ZXh0c3RhcnQgPSBwICsgc3RhcnRjb2w7CkBAIC00OTEwLDcgKzQ5MTAsNyBAQAogICAgIGNoYXJfdQlidWYyW05VTUJVRkxFTl07CiAgICAgaW50CQloZXg7CQkvKiAnWCcgb3IgJ3gnOiBoZXg7ICcwJzogb2N0YWwgKi8KICAgICBzdGF0aWMgaW50CWhleHVwcGVyID0gRkFMU0U7CS8qIDB4QUJDICovCi0gICAgbG9uZ191CW47CisgICAgdW5zaWduZWQgbG9uZyBuOwogICAgIGxvbmdfdQlvbGRuOwogICAgIGNoYXJfdQkqcHRyOwogICAgIGludAkJYzsKQEAgLTUzMTcsNyArNTMxNyw3IEBACiAJICAgIC8qIFNraXAgcmVnaXN0ZXIgaWYgdGhlcmUgaXMgbW9yZSB0ZXh0IHRoYW4gdGhlIG1heGltdW0gc2l6ZS4gKi8KIAkgICAgbGVuID0gMDsKIAkgICAgZm9yIChqID0gMDsgaiA8IG51bV9saW5lczsgaisrKQotCQlsZW4gKz0gU1RSTEVOKHlfcmVnc1tpXS55X2FycmF5W2pdKSArIDFMOworCQlsZW4gKz0gKGxvbmcpU1RSTEVOKHlfcmVnc1tpXS55X2FycmF5W2pdKSArIDFMOwogCSAgICBpZiAobGVuID4gKGxvbmcpbWF4X2tieXRlICogMTAyNEwpCiAJCWNvbnRpbnVlOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uYyBiL3NyYy9vcHRpb24uYwppbmRleCA3MGY2ODZhLi5jYjQ1NmJmIDEwMDY0NAotLS0gYS9zcmMvb3B0aW9uLmMKKysrIGIvc3JjL29wdGlvbi5jCkBAIC0yOTA5LDcgKzI5MDksNyBAQAogewogICAgIGNoYXJfdQkqcDsKICAgICBpbnQJCW9wdF9pZHg7Ci0gICAgbG9uZwluOworICAgIGxvbmdfdQluOwogCiAjaWZkZWYgRkVBVF9MQU5HTUFQCiAgICAgbGFuZ21hcF9pbml0KCk7CkBAIC0yOTcwLDcgKzI5NzAsNyBAQAogCSAgICBpZiAocCAhPSBOVUxMICYmICpwICE9IE5VTCkKIAkgICAgewogCQkvKiBGaXJzdCB0aW1lIGNvdW50IHRoZSBOVUwsIG90aGVyd2lzZSBjb3VudCB0aGUgJywnLiAqLwotCQlsZW4gPSBTVFJMRU4ocCkgKyAzOworCQlsZW4gPSAoaW50KVNUUkxFTihwKSArIDM7CiAJCWlmIChnYV9ncm93KCZnYSwgbGVuKSA9PSBPSykKIAkJewogCQkgICAgaWYgKGdhLmdhX2xlbiA+IDApCkBAIC00NjMxLDcgKzQ2MzEsNyBAQAogCWlmIChlcnJtc2cgIT0gTlVMTCkKIAl7CiAJICAgIHZpbV9zdHJuY3B5KElPYnVmZiwgKGNoYXJfdSAqKV8oZXJybXNnKSwgSU9TSVpFIC0gMSk7Ci0JICAgIGkgPSBTVFJMRU4oSU9idWZmKSArIDI7CisJICAgIGkgPSAoaW50KVNUUkxFTihJT2J1ZmYpICsgMjsKIAkgICAgaWYgKGkgKyAoYXJnIC0gc3RhcnRhcmcpIDwgSU9TSVpFKQogCSAgICB7CiAJCS8qIGFwcGVuZCB0aGUgYXJndW1lbnQgd2l0aCB0aGUgZXJyb3IgKi8KQEAgLTUzMzYsNyArNTMzNiw3IEBACiAgICAgY2hhcl91CSpzLCAqcDsKICAgICBpbnQJCWRpZF9jaGFydGFiID0gRkFMU0U7CiAgICAgY2hhcl91CSoqZ3ZhcnA7Ci0gICAgaW50CQlmcmVlX29sZHZhbCA9IChvcHRpb25zW29wdF9pZHhdLmZsYWdzICYgUF9BTExPQ0VEKTsKKyAgICBsb25nX3UJZnJlZV9vbGR2YWwgPSAob3B0aW9uc1tvcHRfaWR4XS5mbGFncyAmIFBfQUxMT0NFRCk7CiAKICAgICAvKiBHZXQgdGhlIGdsb2JhbCBvcHRpb24gdG8gY29tcGFyZSB3aXRoLCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byBjaGVjawogICAgICAqIHR3byB2YWx1ZXMgZm9yIGFsbCBsb2NhbCBvcHRpb25zLiAqLwpAQCAtNjE5MSw3ICs2MTkxLDcgQEAKIAogCWlmICh2YXJwID09ICYoY3VyYnVmLT5iX3Bfc3BmKSkKIAl7Ci0JICAgIGwgPSBTVFJMRU4oY3VyYnVmLT5iX3Bfc3BmKTsKKwkgICAgbCA9IChpbnQpU1RSTEVOKGN1cmJ1Zi0+Yl9wX3NwZik7CiAJICAgIGlmIChsID4gMCAmJiAobCA8IDQgfHwgU1RSQ01QKGN1cmJ1Zi0+Yl9wX3NwZiArIGwgLSA0LAogCQkJCQkJCQkiLmFkZCIpICE9IDApKQogCQllcnJtc2cgPSBlX2ludmFyZzsKQEAgLTgxMjIsNyArODEyMiw3IEBACiB7CiAgICAgaW50CQlvcHRfaWR4OwogICAgIGNoYXJfdQkqdmFycDsKLSAgICBpbnQJCWZsYWdzOworICAgIGxvbmdfdQlmbGFnczsKIAogICAgIG9wdF9pZHggPSBmaW5kb3B0aW9uKG5hbWUpOwogICAgIGlmIChvcHRfaWR4ID09IC0xKQpkaWZmIC0tZ2l0IGEvc3JjL29zX21zd2luLmMgYi9zcmMvb3NfbXN3aW4uYwppbmRleCBkMTk2Yzg2Li42NDJkYzQzIDEwMDY0NAotLS0gYS9zcmMvb3NfbXN3aW4uYworKysgYi9zcmMvb3NfbXN3aW4uYwpAQCAtMTA5NCw3ICsxMDk0LDcgQEAKIAogICAgIGlmIChsZW5wID09IE5VTEwpCiAgICAgewotCWxlbl9sb2MgPSBTVFJMRU4oc3RyKSArIDE7CisJbGVuX2xvYyA9IChpbnQpU1RSTEVOKHN0cikgKyAxOwogCWxlbnAgPSAmbGVuX2xvYzsKICAgICB9CiAKQEAgLTExNTMsNyArMTE1Myw3IEBACiAKICAgICBpZiAobGVucCA9PSBOVUxMKQogICAgIHsKLQlsZW5fbG9jID0gd2NzbGVuKHN0cikgKyAxOworCWxlbl9sb2MgPSAoaW50KXdjc2xlbihzdHIpICsgMTsKIAlsZW5wID0gJmxlbl9sb2M7CiAgICAgfQogCkBAIC0xMjY3LDcgKzEyNjcsNyBAQAogCSAgICB7CiAJCW4gPSBTVFJMRU4ocF9lbmMpICsgMTsKIAkJc3RyID0gcmF3cCArIG47Ci0JCXN0cl9zaXplID0gbWV0YWRhdGEucmF3bGVuIC0gbjsKKwkJc3RyX3NpemUgPSAoaW50KShtZXRhZGF0YS5yYXdsZW4gLSBuKTsKIAkgICAgfQogCSAgICBlbHNlCiAJICAgIHsKQEAgLTEyOTIsNyArMTI5Miw3IEBACiAKIAkgICAgLyogVXNlIHRoZSBsZW5ndGggb2Ygb3VyIG1ldGFkYXRhIGlmIHBvc3NpYmxlLCBidXQgbGltaXQgaXQgdG8gdGhlCiAJICAgICAqIEdsb2JhbFNpemUoKSBmb3Igc2FmZXR5LiAqLwotCSAgICBtYXhsZW4gPSBHbG9iYWxTaXplKGhNZW1XKSAvIHNpemVvZihXQ0hBUik7CisJICAgIG1heGxlbiA9IChpbnQpKEdsb2JhbFNpemUoaE1lbVcpIC8gc2l6ZW9mKFdDSEFSKSk7CiAJICAgIGlmIChtZXRhZGF0YS51Y3NsZW4gPj0gMCkKIAkgICAgewogCQlpZiAobWV0YWRhdGEudWNzbGVuID4gbWF4bGVuKQpAQCAtMTMyMSw3ICsxMzIxLDcgQEAKIAogCSAgICAvKiBUaGUgbGVuZ3RoIGlzIGVpdGhlciB3aGF0IG91ciBtZXRhZGF0YSBzYXlzIG9yIHRoZSBzdHJsZW4oKS4KIAkgICAgICogQnV0IGxpbWl0IGl0IHRvIHRoZSBHbG9iYWxTaXplKCkgZm9yIHNhZmV0eS4gKi8KLQkgICAgbWF4bGVuID0gR2xvYmFsU2l6ZShoTWVtKTsKKwkgICAgbWF4bGVuID0gKGludClHbG9iYWxTaXplKGhNZW0pOwogCSAgICBpZiAobWV0YWRhdGEudHh0bGVuID49IDApCiAJICAgIHsKIAkJaWYgKG1ldGFkYXRhLnR4dGxlbiA+IG1heGxlbikKQEAgLTE0NDQsNyArMTQ0NCw3IEBACiAgICAgewogCUxQU1RSIGxwc3pNZW1SYXc7CiAKLQltZXRhZGF0YS5yYXdsZW4gPSB0eHRsZW4gKyBTVFJMRU4ocF9lbmMpICsgMTsKKwltZXRhZGF0YS5yYXdsZW4gPSAoaW50KSh0eHRsZW4gKyBTVFJMRU4ocF9lbmMpICsgMSk7CiAJaE1lbVJhdyA9IChMUFNUUilHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFIHwgR01FTV9EREVTSEFSRSwKIAkJCQkJCQkgbWV0YWRhdGEucmF3bGVuICsgMSk7CiAJbHBzek1lbVJhdyA9IChMUFNUUilHbG9iYWxMb2NrKGhNZW1SYXcpOwpAQCAtMjM3MCw3ICsyMzcwLDcgQEAKICAgICAgKiBDb0NyZWF0ZUluc3RhbmNlKCksIGl0J3MgcXVpdGUgc2xvdy4gKi8KICAgICBpZiAoZm5hbWUgPT0gTlVMTCkKIAlyZXR1cm4gcmZuYW1lOwotICAgIGxlbiA9IFNUUkxFTihmbmFtZSk7CisgICAgbGVuID0gKGludClTVFJMRU4oZm5hbWUpOwogICAgIGlmIChsZW4gPD0gNCB8fCBTVFJOSUNNUChmbmFtZSArIGxlbiAtIDQsICIubG5rIiwgNCkgIT0gMCkKIAlyZXR1cm4gcmZuYW1lOwogCkBAIC0yNDg0LDcgKzI0ODQsNyBAQAogCiAgICAgZGF0YS5kd0RhdGEgPSBDT1BZREFUQV9FTkNPRElORzsKICNpZmRlZiBGRUFUX01CWVRFCi0gICAgZGF0YS5jYkRhdGEgPSBTVFJMRU4ocF9lbmMpICsgMTsKKyAgICBkYXRhLmNiRGF0YSA9IChEV09SRClTVFJMRU4ocF9lbmMpICsgMTsKICAgICBkYXRhLmxwRGF0YSA9IHBfZW5jOwogI2Vsc2UKICAgICBkYXRhLmNiRGF0YSA9IFNUUkxFTigibGF0aW4xIikgKyAxOwpAQCAtMjYwMCwxMCArMjYwMCwxMCBAQAogCSAgICBlbHNlCiAJCXJlcGx5LmR3RGF0YSA9IENPUFlEQVRBX1JFU1VMVDsKIAkgICAgcmVwbHkubHBEYXRhID0gcmVzOwotCSAgICByZXBseS5jYkRhdGEgPSBTVFJMRU4ocmVzKSArIDE7CisJICAgIHJlcGx5LmNiRGF0YSA9IChEV09SRClTVFJMRU4ocmVzKSArIDE7CiAKIAkgICAgc2VydmVyU2VuZEVuYyhzZW5kZXIpOwotCSAgICByZXR2YWwgPSBTZW5kTWVzc2FnZShzZW5kZXIsIFdNX0NPUFlEQVRBLCAoV1BBUkFNKW1lc3NhZ2Vfd2luZG93LAorCSAgICByZXR2YWwgPSAoaW50KVNlbmRNZXNzYWdlKHNlbmRlciwgV01fQ09QWURBVEEsIChXUEFSQU0pbWVzc2FnZV93aW5kb3csCiAJCQkJCQkJICAgIChMUEFSQU0pKCZyZXBseSkpOwogCSAgICB2aW1fZnJlZShyZXMpOwogCSAgICByZXR1cm4gcmV0dmFsOwpAQCAtMjc3Miw3ICsyNzcyLDcgQEAKICAgICBjaGFyX3UJKnA7CiAKICAgICAvKiBMZWF2ZSBlbm91Z2ggc3BhY2UgZm9yIGEgOS1kaWdpdCBzdWZmaXggdG8gZW5zdXJlIHVuaXF1ZW5lc3MhICovCi0gICAgb2tfbmFtZSA9IGFsbG9jKFNUUkxFTihuYW1lKSArIDEwKTsKKyAgICBva19uYW1lID0gYWxsb2MoKHVuc2lnbmVkKVNUUkxFTihuYW1lKSArIDEwKTsKIAogICAgIFNUUkNQWShva19uYW1lLCBuYW1lKTsKICAgICBwID0gb2tfbmFtZSArIFNUUkxFTihuYW1lKTsKQEAgLTI4NDksNyArMjg0OSw3IEBACiAJcmV0dXJuIC0xOwogCiAgICAgZGF0YS5kd0RhdGEgPSBDT1BZREFUQV9SRVBMWTsKLSAgICBkYXRhLmNiRGF0YSA9IFNUUkxFTihyZXBseSkgKyAxOworICAgIGRhdGEuY2JEYXRhID0gKERXT1JEKVNUUkxFTihyZXBseSkgKyAxOwogICAgIGRhdGEubHBEYXRhID0gcmVwbHk7CiAKICAgICBzZXJ2ZXJTZW5kRW5jKHRhcmdldCk7CkBAIC0yODg1LDcgKzI4ODUsNyBAQAogCSooSFdORCAqKXB0YXJnZXQgPSB0YXJnZXQ7CiAKICAgICBkYXRhLmR3RGF0YSA9IGFzRXhwciA/IENPUFlEQVRBX0VYUFIgOiBDT1BZREFUQV9LRVlTOwotICAgIGRhdGEuY2JEYXRhID0gU1RSTEVOKGNtZCkgKyAxOworICAgIGRhdGEuY2JEYXRhID0gKERXT1JEKVNUUkxFTihjbWQpICsgMTsKICAgICBkYXRhLmxwRGF0YSA9IGNtZDsKIAogICAgIHNlcnZlclNlbmRFbmModGFyZ2V0KTsKZGlmZiAtLWdpdCBhL3NyYy9vc193aW4zMi5jIGIvc3JjL29zX3dpbjMyLmMKaW5kZXggMzk3MzU5Mi4uNjMwZGY1YSAxMDA2NDQKLS0tIGEvc3JjL29zX3dpbjMyLmMKKysrIGIvc3JjL29zX3dpbjMyLmMKQEAgLTI2NTIsNyArMjY1Miw3IEBACiBtY2hfY2FuX2V4ZShjaGFyX3UgKm5hbWUpCiB7CiAgICAgY2hhcl91CWJ1ZltfTUFYX1BBVEhdOwotICAgIGludAkJbGVuID0gU1RSTEVOKG5hbWUpOworICAgIGludAkJbGVuID0gKGludClTVFJMRU4obmFtZSk7CiAgICAgY2hhcl91CSpwOwogCiAgICAgaWYgKGxlbiA+PSBfTUFYX1BBVEgpCS8qIHNhZmV0eSBjaGVjayAqLwpAQCAtMzkxNCw3ICszOTE0LDcgQEAKICAgICB7CiAJLyogb3B0aW1pemF0aW9uOiB1c2Ugb25lIHNpbmdsZSB3cml0ZV9jaGFycyBmb3IgcnVucyBvZiB0ZXh0LAogCSAqIHJhdGhlciB0aGFuIG9uY2UgcGVyIGNoYXJhY3RlciAgSXQgYWluJ3QgY3Vyc2VzLCBidXQgaXQgaGVscHMuICovCi0JRFdPUkQgIHByZWZpeCA9IHN0cmNzcG4ocywgIlxuXHJcYlxhXDAzMyIpOworCURXT1JEICBwcmVmaXggPSAoRFdPUkQpc3RyY3NwbihzLCAiXG5cclxiXGFcMDMzIik7CiAKIAlpZiAocF93ZCkKIAl7CkBAIC00MDY1LDcgKzQwNjUsNyBAQAogCQkgICAgZGVsZXRlX2xpbmVzKGFyZzEpOwogCQl9CiAKLQkJbGVuIC09IHAgLSBzOworCQlsZW4gLT0gKGludCkocCAtIHMpOwogCQlzID0gcCArIDE7CiAJCWJyZWFrOwogCkBAIC00NzE2LDggKzQ3MTYsOCBAQAogCWZvciAoZG9uZSA9IDA7IGRvbmUgPCBsZW47IGRvbmUgKz0gd3JpdHRlbikKIAl7CiAJICAgIC8qIChzaXplX3QpIGNhc3QgZm9yIEJvcmxhbmQgQyA1LjUgKi8KLQkgICAgdG9kbyA9IChzaXplX3QpKGxlbiAtIGRvbmUpID4gc2l6ZW9mKGJ1ZikgPyBzaXplb2YoYnVmKQotCQkJCQkJICAgICAgIDogKHNpemVfdCkobGVuIC0gZG9uZSk7CisJICAgIHRvZG8gPSAoRFdPUkQpKChzaXplX3QpKGxlbiAtIGRvbmUpID4gc2l6ZW9mKGJ1ZikgPyBzaXplb2YoYnVmKQorCQkJCQkJICAgICAgIDogKHNpemVfdCkobGVuIC0gZG9uZSkpOwogCSAgICBpZiAoIUJhY2t1cFJlYWQoc2gsIChMUEJZVEUpYnVmLCB0b2RvLCAmcmVhZGNudCwKIAkJCQkJCSAgICAgICBGQUxTRSwgRkFMU0UsIGNvbnRleHQpCiAJCSAgICB8fCByZWFkY250ICE9IHRvZG8KQEAgLTQ3NjUsNyArNDc2NSw3IEBACiAJCS8qIEdldCB0aGUgaGVhZGVyIHRvIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyZWFtIG5hbWUuICBJZgogCQkgKiB0aGUgInJlYWRjb3VudCIgaXMgemVybyB3ZSBoYXZlIGRvbmUgYWxsIGluZm8gc3RyZWFtcy4gKi8KIAkJWmVyb01lbW9yeSgmc2lkLCBzaXplb2YoV0lOMzJfU1RSRUFNX0lEKSk7Ci0JCWhlYWRlcnNpemUgPSAoY2hhciAqKSZzaWQuY1N0cmVhbU5hbWUgLSAoY2hhciAqKSZzaWQuZHdTdHJlYW1JZDsKKwkJaGVhZGVyc2l6ZSA9IChpbnQpKChjaGFyICopJnNpZC5jU3RyZWFtTmFtZSAtIChjaGFyICopJnNpZC5kd1N0cmVhbUlkKTsKIAkJaWYgKCFCYWNrdXBSZWFkKHNoLCAoTFBCWVRFKSZzaWQsIGhlYWRlcnNpemUsCiAJCQkJCSAgICZyZWFkY291bnQsIEZBTFNFLCBGQUxTRSwgJmNvbnRleHQpCiAJCQl8fCByZWFkY291bnQgPT0gMCkKQEAgLTQ5ODYsNyArNDk4Niw3IEBACiAKIAkJLyogQ29udmVydCBlYWNoIFVuaWNvZGUgYXJndW1lbnQgdG8gdGhlIGN1cnJlbnQgY29kZXBhZ2UuICovCiAJCVdpZGVDaGFyVG9NdWx0aUJ5dGVfYWxsb2MoR2V0QUNQKCksIDAsCi0JCQkJQXJnbGlzdFdbaV0sIHdjc2xlbihBcmdsaXN0V1tpXSkgKyAxLAorCQkJCUFyZ2xpc3RXW2ldLCAoaW50KXdjc2xlbihBcmdsaXN0V1tpXSkgKyAxLAogCQkJCShMUFNUUiAqKSZhcmd2W2ldLCAmbGVuLCAwLCAwKTsKIAkJaWYgKGFyZ3ZbaV0gPT0gTlVMTCkKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL3BvL3poX1RXLlVURi04LnBvIGIvc3JjL3BvL3poX1RXLlVURi04LnBvCmluZGV4IDE5OWJiNzYuLmI0MjYwYjQgMTAwNjQ0Ci0tLSBhL3NyYy9wby96aF9UVy5VVEYtOC5wbworKysgYi9zcmMvcG8vemhfVFcuVVRGLTgucG8KQEAgLTUsOCArNSwxNSBAQAogIwogIyBGSVJTVCBBVVRIT1IgIEZyYW5jaXMgUy5MaW4gPHBpYWlwQGNzaWUubnR1LmVkdS50dz4sIDIwMDAKICMgRklSU1QgUkVMRUFTRSBUaHUgSnVuIDE0IDE0OjI0OjE3IENTVCAyMDAxCisjIE1BSU5UQUlORVI6IERlYmlhbiBWSU0gTWFpbnRhaW5lcnMgPHBrZy12aW0tbWFpbnRhaW5lcnNAbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmc+CiAjCi0jIExhc3QgdXBkYXRlOiAyMDA1LzAxLzI3IDA3OjAzICg2LjMpCisjIExhc3QgdXBkYXRlOiAkTGFzdENoYW5nZWREYXRlOiAyMDA2LTA0LTE2IDIyOjA2OjQwIC0wNDAwIChkb20sIDE2IGFwciAyMDA2KSAkCisjCisjIFhYWCBUaGlzIGZpbGUgaXMgaW4gbmVlZCBvZiBhIG5ldyBtYWludGFpbmVyLCBEZWJpYW4gVklNIE1haW50YWluZXJzIG1haW50YWluCisjICAgICBpdCBvbmx5IGJlY2F1c2UgcGF0Y2hlcyBoYXZlIGJlZW4gc3VibWl0dGVkIGZvciBpdCBieSBEZWJpYW4gdXNlcnMgYW5kIHRoZQorIyAgICAgZm9ybWVyIG1haW50YWluZXIgd2FzIE1JQSAoTWlzc2luZyBJbiBBY3Rpb24pLCB0YWtpbmcgb3ZlciBpdHMKKyMgICAgIG1haW50ZW5hbmNlIHdhcyB0aHVzIHRoZSBvbmx5IHdheSB0byBpbmNsdWRlIHRob3NlIHBhdGNoZXMuCisjICAgICBJZiB5b3UgY2FyZSBhYm91dCB0aGlzIGZpbGUsIGFuZCBoYXZlIHRpbWUgdG8gbWFpbnRhaW4gaXQgcGxlYXNlIGRvIHNvIQogIwogIyBUbyB1cGRhdGUsIHNlYXJjaCBwYXR0ZXJuOgkJL2Z1enp5XHxebXNnc3RyICIiXChcbiJcKVxAIQogIwpAQCAtMzI4OCwxMSArMzI5NSwxMSBAQAogCiAjLCBjLWZvcm1hdAogbXNnaWQgIiVsZCBtb3JlIGxpbmVzIgotbXNnc3RyICLpgoTmnIkgJWxkIOihjCAiCittc2dzdHIgIuWkmuS6hiAlbGQg6KGMICIKIAogIywgYy1mb3JtYXQKIG1zZ2lkICIlbGQgZmV3ZXIgbGluZXMiCi1tc2dzdHIgIuWPquWJqSAlbGQg6KGMICIKK21zZ3N0ciAi5bCR5LqGICVsZCDooYwgIgogCiBtc2dpZCAiIChJbnRlcnJ1cHRlZCkiCiBtc2dzdHIgIiAo5bey5Lit5pa3KSIKZGlmZiAtLWdpdCBhL3NyYy9wb3B1cG1udS5jIGIvc3JjL3BvcHVwbW51LmMKaW5kZXggYTMzMjQ3Ny4uZmM1ZmZmZiAxMDA2NDQKLS0tIGEvc3JjL3BvcHVwbW51LmMKKysrIGIvc3JjL3BvcHVwbW51LmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCQkgICAgaWYgKCpwID09IE5VTCB8fCAqcCA9PSBUQUIgfHwgdG90d2lkdGggKyB3ID4gcHVtX3dpZHRoKQogCQkgICAgewogCQkJLyogRGlzcGxheSB0aGUgdGV4dCB0aGF0IGZpdHMgb3IgY29tZXMgYmVmb3JlIGEgVGFiLiAqLwotCQkJc2NyZWVuX3B1dHNfbGVuKHMsIHAgLSBzLCByb3csIGNvbCwgYXR0cik7CisJCQlzY3JlZW5fcHV0c19sZW4ocywgKGludCkocCAtIHMpLCByb3csIGNvbCwgYXR0cik7CiAJCQljb2wgKz0gd2lkdGg7CiAKIAkJCWlmICgqcCAhPSBUQUIpCkBAIC00NjIsNyArNDYyLDcgQEAKIAkJCWVsc2UKIAkJCXsKIAkJCSAgICAqZSA9IE5VTDsKLQkJCSAgICBtbF9hcHBlbmQobG51bSsrLCBwLCBlIC0gcCArIDEsIEZBTFNFKTsKKwkJCSAgICBtbF9hcHBlbmQobG51bSsrLCBwLCAoaW50KShlIC0gcCArIDEpLCBGQUxTRSk7CiAJCQkgICAgKmUgPSAnXG4nOwogCQkJICAgIHAgPSBlICsgMTsKIAkJCX0KZGlmZiAtLWdpdCBhL3NyYy9wcm90by9vc19tc3dpbi5wcm8gYi9zcmMvcHJvdG8vb3NfbXN3aW4ucHJvCmluZGV4IGFhZWYwNWIuLmY0NmEzZjggMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9vc19tc3dpbi5wcm8KKysrIGIvc3JjL3Byb3RvL29zX21zd2luLnBybwpAQCAtNDYsOCArNDYsOCBAQAogZXh0ZXJuIHZvaWQgbWNoX3ByaW50X3N0YXJ0X2xpbmUgX19BUkdTKChpbnQgbWFyZ2luLCBpbnQgcGFnZV9saW5lKSk7CiBleHRlcm4gaW50IG1jaF9wcmludF90ZXh0X291dCBfX0FSR1MoKGNoYXJfdSAqcCwgaW50IGxlbikpOwogZXh0ZXJuIHZvaWQgbWNoX3ByaW50X3NldF9mb250IF9fQVJHUygoaW50IGlCb2xkLCBpbnQgaUl0YWxpYywgaW50IGlVbmRlcmxpbmUpKTsKLWV4dGVybiB2b2lkIG1jaF9wcmludF9zZXRfYmcgX19BUkdTKCh1bnNpZ25lZCBsb25nIGJnY29sKSk7Ci1leHRlcm4gdm9pZCBtY2hfcHJpbnRfc2V0X2ZnIF9fQVJHUygodW5zaWduZWQgbG9uZyBmZ2NvbCkpOworZXh0ZXJuIHZvaWQgbWNoX3ByaW50X3NldF9iZyBfX0FSR1MoKGxvbmdfdSBiZ2NvbCkpOworZXh0ZXJuIHZvaWQgbWNoX3ByaW50X3NldF9mZyBfX0FSR1MoKGxvbmdfdSBmZ2NvbCkpOwogZXh0ZXJuIGNoYXJfdSAqbWNoX3Jlc29sdmVfc2hvcnRjdXQgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7CiBleHRlcm4gdm9pZCB3aW4zMl9zZXRfZm9yZWdyb3VuZCBfX0FSR1MoKHZvaWQpKTsKIGV4dGVybiB2b2lkIHNlcnZlckluaXRNZXNzYWdpbmcgX19BUkdTKCh2b2lkKSk7CmRpZmYgLS1naXQgYS9zcmMvcXVpY2tmaXguYyBiL3NyYy9xdWlja2ZpeC5jCmluZGV4IGYyMmM4NjAuLjIxYjUyNGMgMTAwNjQ0Ci0tLSBhL3NyYy9xdWlja2ZpeC5jCisrKyBiL3NyYy9xdWlja2ZpeC5jCkBAIC01MTEsOSArNTExLDkgQEAKIAogCQkgICAgcCA9IHZpbV9zdHJjaHIocF9zdHIsICdcbicpOwogCQkgICAgaWYgKHApCi0JCQlsZW4gPSBwIC0gcF9zdHIgKyAxOworCQkJbGVuID0gKGludCkocCAtIHBfc3RyICsgMSk7CiAJCSAgICBlbHNlCi0JCQlsZW4gPSBTVFJMRU4ocF9zdHIpOworCQkJbGVuID0gKGludClTVFJMRU4ocF9zdHIpOwogCiAJCSAgICBpZiAobGVuID4gQ01EQlVGRlNJWkUgLSAyKQogCQkJdmltX3N0cm5jcHkoSU9idWZmLCBwX3N0ciwgQ01EQlVGRlNJWkUgLSAyKTsKQEAgLTUzMSw3ICs1MzEsNyBAQAogCQkgICAgaWYgKCFwX2xpKQkJCS8qIEVuZCBvZiB0aGUgbGlzdCAqLwogCQkJYnJlYWs7CiAKLQkJICAgIGxlbiA9IFNUUkxFTihwX2xpLT5saV90di52dmFsLnZfc3RyaW5nKTsKKwkJICAgIGxlbiA9IChpbnQpU1RSTEVOKHBfbGktPmxpX3R2LnZ2YWwudl9zdHJpbmcpOwogCQkgICAgaWYgKGxlbiA+IENNREJVRkZTSVpFIC0gMikKIAkJCWxlbiA9IENNREJVRkZTSVpFIC0gMjsKIApAQCAtMzY4NCw3ICszNjg0LDcgQEAKIAkJCXsKIAkJCSAgICBpZiAodmltX3JlZ2V4ZWMoJnJlZ21hdGNoLCBJT2J1ZmYsIChjb2xucl9UKTApKQogCQkJICAgIHsKLQkJCQlpbnQJbCA9IFNUUkxFTihJT2J1ZmYpOworCQkJCWludAlsID0gKGludClTVFJMRU4oSU9idWZmKTsKIAogCQkJCS8qIHJlbW92ZSB0cmFpbGluZyBDUiwgTEYsIHNwYWNlcywgZXRjLiAqLwogCQkJCXdoaWxlIChsID4gMCAmJiBJT2J1ZmZbbCAtIDFdIDw9ICcgJykKZGlmZiAtLWdpdCBhL3NyYy9zY3JlZW4uYyBiL3NyYy9zY3JlZW4uYwppbmRleCA4ZDJhNjllLi5jMjkzZGUxIDEwMDY0NAotLS0gYS9zcmMvc2NyZWVuLmMKKysrIGIvc3JjL3NjcmVlbi5jCkBAIC0yODk2LDcgKzI4OTYsNyBAQAogICAgIHsKIAkvKiBGb3IgY2hlY2tpbmcgZmlyc3Qgd29yZCB3aXRoIGEgY2FwaXRhbCBza2lwIHdoaXRlIHNwYWNlLiAqLwogCWlmIChjYXBfY29sID09IDApCi0JICAgIGNhcF9jb2wgPSBza2lwd2hpdGUobGluZSkgLSBsaW5lOworCSAgICBjYXBfY29sID0gKGludCkoc2tpcHdoaXRlKGxpbmUpIC0gbGluZSk7CiAKIAkvKiBUbyBiZSBhYmxlIHRvIHNwZWxsLWNoZWNrIG92ZXIgbGluZSBib3VuZGFyaWVzIGNvcHkgdGhlIGVuZCBvZiB0aGUKIAkgKiBjdXJyZW50IGxpbmUgaW50byBuZXh0bGluZVtdLiAgQWJvdmUgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGxpbmUgd2FzCkBAIC0yOTA5LDcgKzI5MDksNyBAQAogCX0KIAllbHNlCiAJewotCSAgICB2ID0gU1RSTEVOKGxpbmUpOworCSAgICB2ID0gKGxvbmcpU1RSTEVOKGxpbmUpOwogCSAgICBpZiAodiA8IFNQV09SRExFTikKIAkgICAgewogCQkvKiBTaG9ydCBsaW5lLCB1c2UgaXQgY29tcGxldGVseSBhbmQgYXBwZW5kIHRoZSBzdGFydCBvZiB0aGUKQEAgLTMwMDgsMTQgKzMwMDgsMTQgQEAKIAogCSAgICBwb3MgPSB3cC0+d19jdXJzb3I7CiAJICAgIHdwLT53X2N1cnNvci5sbnVtID0gbG51bTsKLQkgICAgd3AtPndfY3Vyc29yLmNvbCA9IHB0ciAtIGxpbmU7CisJICAgIHdwLT53X2N1cnNvci5jb2wgPSAoY29sbnJfVCkocHRyIC0gbGluZSk7CiAJICAgIGxlbiA9IHNwZWxsX21vdmVfdG8od3AsIEZPUldBUkQsIFRSVUUsIFRSVUUsICZzcGVsbF9obGYpOwogCSAgICBpZiAobGVuID09IDAgfHwgKGludCl3cC0+d19jdXJzb3IuY29sID4gcHRyIC0gbGluZSkKIAkgICAgewogCQkvKiBubyBiYWQgd29yZCBmb3VuZCBhdCBsaW5lIHN0YXJ0LCBkb24ndCBjaGVjayB1bnRpbCBlbmQgb2YgYQogCQkgKiB3b3JkICovCiAJCXNwZWxsX2hsZiA9IEhMRl9DT1VOVDsKLQkJd29yZF9lbmQgPSBzcGVsbF90b193b3JkX2VuZChwdHIsIHdwLT53X2J1ZmZlcikgLSBsaW5lICsgMTsKKwkJd29yZF9lbmQgPSAoaW50KShzcGVsbF90b193b3JkX2VuZChwdHIsIHdwLT53X2J1ZmZlcikgLSBsaW5lICsgMSk7CiAJICAgIH0KIAkgICAgZWxzZQogCSAgICB7CkBAIC0zMjIzLDcgKzMyMjMsNyBAQAogCQkJICAgIGlmIChwX2V4dHJhICE9IE5VTEwpCiAJCQkgICAgewogCQkJCWNfZXh0cmEgPSBOVUw7Ci0JCQkJbl9leHRyYSA9IFNUUkxFTihwX2V4dHJhKTsKKwkJCQluX2V4dHJhID0gKGludClTVFJMRU4ocF9leHRyYSk7CiAJCQkgICAgfQogCQkJICAgIGNoYXJfYXR0ciA9IHNpZ25fZ2V0X2F0dHIodGV4dF9zaWduLCBGQUxTRSk7CiAJCQl9CkBAIC0zODY3LDcgKzM4NjcsNyBAQAogCQkJICAgIHAgPSBuZXh0bGluZSArIChwcmV2X3B0ciAtIGxpbmUpIC0gbmV4dGxpbmVjb2w7CiAJCQllbHNlCiAJCQkgICAgcCA9IHByZXZfcHRyOwotCQkJY2FwX2NvbCAtPSAocHJldl9wdHIgLSBsaW5lKTsKKwkJCWNhcF9jb2wgLT0gKGludCkocHJldl9wdHIgLSBsaW5lKTsKIAkJCWxlbiA9IHNwZWxsX2NoZWNrKHdwLCBwLCAmc3BlbGxfaGxmLCAmY2FwX2NvbCwKIAkJCQkJCQkJICAgIG5vY2hhbmdlKTsKIAkJCXdvcmRfZW5kID0gdiArIGxlbjsKQEAgLTM4OTEsNyArMzg5MSw3IEBACiAJCQkgICAgLyogUmVtZW1iZXIgdGhhdCB0aGUgZ29vZCB3b3JkIGNvbnRpbnVlcyBhdCB0aGUKIAkJCSAgICAgKiBzdGFydCBvZiB0aGUgbmV4dCBsaW5lLiAqLwogCQkJICAgIGNoZWNrZWRfbG51bSA9IGxudW0gKyAxOwotCQkJICAgIGNoZWNrZWRfY29sID0gKHAgLSBuZXh0bGluZSkgKyBsZW4gLSBuZXh0bGluZV9pZHg7CisJCQkgICAgY2hlY2tlZF9jb2wgPSAoaW50KSgocCAtIG5leHRsaW5lKSArIGxlbiAtIG5leHRsaW5lX2lkeCk7CiAJCQl9CiAKIAkJCS8qIFR1cm4gaW5kZXggaW50byBhY3R1YWwgYXR0cmlidXRlcy4gKi8KQEAgLTM5MDYsMTIgKzM5MDYsMTIgQEAKIAkJCQkvKiBSZW1lbWJlciB0aGF0IHRoZSB3b3JkIGluIHRoZSBuZXh0IGxpbmUKIAkJCQkgKiBtdXN0IHN0YXJ0IHdpdGggYSBjYXBpdGFsLiAqLwogCQkJCWNhcGNvbF9sbnVtID0gbG51bSArIDE7Ci0JCQkJY2FwX2NvbCA9IChwIC0gbmV4dGxpbmUpICsgY2FwX2NvbAotCQkJCQkJCSAgICAgICAtIG5leHRsaW5lX2lkeDsKKwkJCQljYXBfY29sID0gKGludCkoKHAgLSBuZXh0bGluZSkgKyBjYXBfY29sCisJCQkJCQkJICAgICAgIC0gbmV4dGxpbmVfaWR4KTsKIAkJCSAgICB9CiAJCQkgICAgZWxzZQogCQkJCS8qIENvbXB1dGUgdGhlIGFjdHVhbCBjb2x1bW4uICovCi0JCQkJY2FwX2NvbCArPSAocHJldl9wdHIgLSBsaW5lKTsKKwkJCQljYXBfY29sICs9IChpbnQpKHByZXZfcHRyIC0gbGluZSk7CiAJCQl9CiAJCSAgICB9CiAJCX0KQEAgLTU4NzEsNyArNTg3MSw3IEBACiAJCQkJYnVmLCBzaXplb2YoYnVmKSwKIAkJCQlwLCB1c2Vfc2FuZGJveCwKIAkJCQlmaWxsY2hhciwgbWF4d2lkdGgsIGhsdGFiLCB0YWJ0YWIpOwotICAgIGxlbiA9IFNUUkxFTihidWYpOworICAgIGxlbiA9IChpbnQpU1RSTEVOKGJ1Zik7CiAKICAgICB3aGlsZSAod2lkdGggPCBtYXh3aWR0aCAmJiBsZW4gPCBzaXplb2YoYnVmKSAtIDEpCiAgICAgewpAQCAtODkwNCw3ICs4OTA0LDcgQEAKIAkJaWYgKHdpbmNvdW50ID4gMSkKIAkJewogCQkgICAgdmltX3NucHJpbnRmKChjaGFyICopTmFtZUJ1ZmYsIE1BWFBBVEhMLCAiJWQiLCB3aW5jb3VudCk7Ci0JCSAgICBsZW4gPSBTVFJMRU4oTmFtZUJ1ZmYpOworCQkgICAgbGVuID0gKGludClTVFJMRU4oTmFtZUJ1ZmYpOwogCQkgICAgaWYgKGNvbCArIGxlbiA+PSBDb2x1bW5zIC0gMykKIAkJCWJyZWFrOwogCQkgICAgc2NyZWVuX3B1dHNfbGVuKE5hbWVCdWZmLCBsZW4sIDAsIGNvbCwKQEAgLTg5NDYsNyArODk0Niw3IEBACiAJCWlmIChsZW4gPiBDb2x1bW5zIC0gY29sIC0gMSkKIAkJICAgIGxlbiA9IENvbHVtbnMgLSBjb2wgLSAxOwogCi0JCXNjcmVlbl9wdXRzX2xlbihwLCBTVFJMRU4ocCksIDAsIGNvbCwgYXR0cik7CisJCXNjcmVlbl9wdXRzX2xlbihwLCAoaW50KVNUUkxFTihwKSwgMCwgY29sLCBhdHRyKTsKIAkJY29sICs9IGxlbjsKIAkgICAgfQogCSAgICBzY3JlZW5fcHV0Y2hhcignICcsIDAsIGNvbCsrLCBhdHRyKTsKZGlmZiAtLWdpdCBhL3NyYy9zZWFyY2guYyBiL3NyYy9zZWFyY2guYwppbmRleCBhZGRiOWNkLi4wZTUzNWFiIDEwMDY0NAotLS0gYS9zcmMvc2VhcmNoLmMKKysrIGIvc3JjL3NlYXJjaC5jCkBAIC05MDksNyArOTA5LDcgQEAKICAgICBpZiAocG9zLT5sbnVtID4gYnVmLT5iX21sLm1sX2xpbmVfY291bnQpCiAgICAgewogCXBvcy0+bG51bSA9IGJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50OwotCXBvcy0+Y29sID0gU1RSTEVOKG1sX2dldF9idWYoYnVmLCBwb3MtPmxudW0sIEZBTFNFKSk7CisJcG9zLT5jb2wgPSAoaW50KVNUUkxFTihtbF9nZXRfYnVmKGJ1ZiwgcG9zLT5sbnVtLCBGQUxTRSkpOwogCWlmIChwb3MtPmNvbCA+IDApCiAJICAgIC0tcG9zLT5jb2w7CiAgICAgfQpAQCAtMTA3NSw3ICsxMDc1LDcgQEAKIAkgICAgaWYgKHN0cmNvcHkgIT0gcHMpCiAJICAgIHsKIAkJLyogbWFkZSBhIGNvcHkgb2YgInBhdCIgdG8gY2hhbmdlICJcPyIgdG8gIj8iICovCi0JCXNlYXJjaGNtZGxlbiArPSBTVFJMRU4ocGF0KSAtIFNUUkxFTihzdHJjb3B5KTsKKwkJc2VhcmNoY21kbGVuICs9IChpbnQpKFNUUkxFTihwYXQpIC0gU1RSTEVOKHN0cmNvcHkpKTsKIAkJcGF0ID0gc3RyY29weTsKIAkJc2VhcmNoc3RyID0gc3RyY29weTsKIAkgICAgfQpAQCAtMzY2MCw3ICszNjYwLDcgQEAKICAgICB9CiAKICAgICBwb3MubG51bSA9IGN1cndpbi0+d19jdXJzb3IubG51bTsKLSAgICBwb3MuY29sID0gcCAtIGxpbmU7CisgICAgcG9zLmNvbCA9IChjb2xucl9UKShwIC0gbGluZSk7CiAKICAgICBtYl9wdHJfYWR2KHApOwogICAgIGlmIChlbmRfdGFnKQpAQCAtMzc4MCw3ICszNzgwLDcgQEAKICAgICBwID0gbWxfZ2V0X2N1cnNvcigpOwogICAgIGZvciAoY3AgPSBwOyAqY3AgIT0gTlVMICYmICpjcCAhPSAnPicgJiYgIXZpbV9pc3doaXRlKCpjcCk7IG1iX3B0cl9hZHYoY3ApKQogCTsKLSAgICBsZW4gPSBjcCAtIHA7CisgICAgbGVuID0gKGludCkoY3AgLSBwKTsKICAgICBpZiAobGVuID09IDApCiAgICAgewogCWN1cndpbi0+d19jdXJzb3IgPSBvbGRfcG9zOwpAQCAtNDUyNyw3ICs0NTI3LDcgQEAKIAkgICAgaWYgKGluY19vcHQgIT0gTlVMTCAmJiBzdHJzdHIoKGNoYXIgKilpbmNfb3B0LCAiXFx6cyIpICE9IE5VTEwpCiAJCS8qIFVzZSB0ZXh0IGZyb20gJ1x6cycgdG8gJ1x6ZScgKG9yIGVuZCkgb2YgJ2luY2x1ZGUnLiAqLwogCQluZXdfZm5hbWUgPSBmaW5kX2ZpbGVfbmFtZV9pbl9wYXRoKGluY2xfcmVnbWF0Y2guc3RhcnRwWzBdLAotCQkJICAgICAgaW5jbF9yZWdtYXRjaC5lbmRwWzBdIC0gaW5jbF9yZWdtYXRjaC5zdGFydHBbMF0sCisJCQkgICAgICAoaW50KShpbmNsX3JlZ21hdGNoLmVuZHBbMF0gLSBpbmNsX3JlZ21hdGNoLnN0YXJ0cFswXSksCiAJCQkJIEZOQU1FX0VYUHxGTkFNRV9JTkNMfEZOQU1FX1JFTCwgMUwsIHBfZm5hbWUpOwogCSAgICBlbHNlCiAJCS8qIFVzZSB0ZXh0IGFmdGVyIG1hdGNoIHdpdGggJ2luY2x1ZGUnLiAqLwpAQCAtNDYxMyw3ICs0NjEzLDcgQEAKIAkJCXsKIAkJCSAgICAvKiBOb3RoaW5nIGZvdW5kLCB1c2UgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuICovCiAJCQkgICAgcCA9IGluY2xfcmVnbWF0Y2guZW5kcFswXTsKLQkJCSAgICBpID0gU1RSTEVOKHApOworCQkJICAgIGkgPSAoaW50KVNUUkxFTihwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTUyNzAsNyArNTI3MCw3IEBACiB7CiAgICAgaWYgKHNwYXRzW2lkeF0ucGF0ICE9IE5VTEwpCiAgICAgewotCWZwcmludGYoZnAsICJcbiMgTGFzdCAlc1NlYXJjaCBQYXR0ZXJuOlxufiIsIHMpOworCWZwcmludGYoZnAsIF8oIlxuIyBMYXN0ICVzU2VhcmNoIFBhdHRlcm46XG5+IiksIHMpOwogCS8qIG9mZi5kaXIgaXMgbm90IHN0b3JlZCwgaXQncyByZXNldCB0byBmb3J3YXJkICovCiAJZnByaW50ZihmcCwgIiVjJWMlYyVjJWxkJXMlYyIsCiAJCXNwYXRzW2lkeF0ubWFnaWMgICAgPyAnTScgOiAnbScsCS8qIG1hZ2ljICovCmRpZmYgLS1naXQgYS9zcmMvc3BlbGwuYyBiL3NyYy9zcGVsbC5jCmluZGV4IDgwM2YzMmQuLjNhZTQ0ZDQgMTAwNjQ0Ci0tLSBhL3NyYy9zcGVsbC5jCisrKyBiL3NyYy9zcGVsbC5jCkBAIC01ODcsNyArNTg3LDcgQEAKIH0gd29yZGNvdW50X1Q7CiAKIHN0YXRpYyB3b3JkY291bnRfVCBkdW13YzsKLSNkZWZpbmUgV0NfS0VZX09GRiAgKGR1bXdjLndjX3dvcmQgLSAoY2hhcl91ICopJmR1bXdjKQorI2RlZmluZSBXQ19LRVlfT0ZGICAodW5zaWduZWQpKGR1bXdjLndjX3dvcmQgLSAoY2hhcl91ICopJmR1bXdjKQogI2RlZmluZSBISTJXQyhoaSkgICAgICgod29yZGNvdW50X1QgKikoKGhpKS0+aGlfa2V5IC0gV0NfS0VZX09GRikpCiAjZGVmaW5lIE1BWFdPUkRDT1VOVCAweGZmZmYKIApAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKIAkgICAgbWkubWlfZW5kID0gc2tpcGhleChwdHIgKyAyKTsKIAllbHNlCiAJICAgIG1pLm1pX2VuZCA9IHNraXBkaWdpdHMocHRyKTsKLQlucmxlbiA9IG1pLm1pX2VuZCAtIHB0cjsKKwlucmxlbiA9IChpbnQpKG1pLm1pX2VuZCAtIHB0cik7CiAgICAgfQogCiAgICAgLyogRmluZCB0aGUgbm9ybWFsIGVuZCBvZiB0aGUgd29yZCAodW50aWwgdGhlIG5leHQgbm9uLXdvcmQgY2hhcmFjdGVyKS4gKi8KQEAgLTEwODYsNyArMTA4Niw3IEBACiAKICAgICAodm9pZClzcGVsbF9jYXNlZm9sZChwdHIsIChpbnQpKG1pLm1pX2ZlbmQgLSBwdHIpLCBtaS5taV9md29yZCwKIAkJCQkJCQkgICAgIE1BWFdMRU4gKyAxKTsKLSAgICBtaS5taV9md29yZGxlbiA9IFNUUkxFTihtaS5taV9md29yZCk7CisgICAgbWkubWlfZndvcmRsZW4gPSAoaW50KVNUUkxFTihtaS5taV9md29yZCk7CiAKICAgICAvKiBUaGUgd29yZCBpcyBiYWQgdW5sZXNzIHdlIHJlY29nbml6ZSBpdC4gKi8KICAgICBtaS5taV9yZXN1bHQgPSBTUF9CQUQ7CkBAIC0xMTg3LDcgKzExODcsNyBAQAogCQkgICAgbWJfcHRyX2FkdihmcCk7CiAJCSAgICBpZiAocCA+PSBtaS5taV9lbmQpCiAJCQlicmVhazsKLQkJICAgIG1pLm1pX2NvbXBvZmYgPSBmcCAtIG1pLm1pX2Z3b3JkOworCQkgICAgbWkubWlfY29tcG9mZiA9IChpbnQpKGZwIC0gbWkubWlfZndvcmQpOwogCQkgICAgZmluZF93b3JkKCZtaSwgRklORF9DT01QT1VORCk7CiAJCSAgICBpZiAobWkubWlfcmVzdWx0ICE9IFNQX0JBRCkKIAkJICAgIHsKQEAgLTE0MTYsNyArMTQxNiw3IEBACiAJICAgIHsKIAkJZm9yIChzID0gcHRyOyBzIDwgcHRyICsgd2xlbjsgbWJfcHRyX2FkdihzKSkKIAkJICAgIG1iX3B0cl9hZHYocCk7Ci0JCXdsZW4gPSBwIC0gbWlwLT5taV93b3JkOworCQl3bGVuID0gKGludCkocCAtIG1pcC0+bWlfd29yZCk7CiAJICAgIH0KIAl9CiAjZW5kaWYKQEAgLTE2MTcsNyArMTYxNyw3IEBACiAJCSAgICB7CiAJCQlmb3IgKHMgPSBwdHI7IHMgPCBwdHIgKyB3bGVuOyBtYl9wdHJfYWR2KHMpKQogCQkJICAgIG1iX3B0cl9hZHYocCk7Ci0JCQltaXAtPm1pX2NvbXBvZmYgPSBwIC0gbWlwLT5taV9md29yZDsKKwkJCW1pcC0+bWlfY29tcG9mZiA9IChpbnQpKHAgLSBtaXAtPm1pX2Z3b3JkKTsKIAkJICAgIH0KIAkJfQogI2VuZGlmCkBAIC0xOTgwLDcgKzE5ODAsNyBAQAogICAgICh2b2lkKXNwZWxsX2Nhc2Vmb2xkKHAsIChpbnQpKG1pcC0+bWlfZmVuZCAtIHApLAogCQkJICAgICBtaXAtPm1pX2Z3b3JkICsgbWlwLT5taV9md29yZGxlbiwKIAkJCSAgICAgTUFYV0xFTiAtIG1pcC0+bWlfZndvcmRsZW4pOwotICAgIGZsZW4gPSBTVFJMRU4obWlwLT5taV9md29yZCArIG1pcC0+bWlfZndvcmRsZW4pOworICAgIGZsZW4gPSAoaW50KVNUUkxFTihtaXAtPm1pX2Z3b3JkICsgbWlwLT5taV9md29yZGxlbik7CiAgICAgbWlwLT5taV9md29yZGxlbiArPSBmbGVuOwogICAgIHJldHVybiBmbGVuOwogfQpAQCAtMjA3NCw3ICsyMDc0LDcgQEAKICAgICB7CiAJbGluZSA9IG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBsbnVtLCBGQUxTRSk7CiAKLQlsZW4gPSBTVFJMRU4obGluZSk7CisJbGVuID0gKGludClTVFJMRU4obGluZSk7CiAJaWYgKGJ1ZmxlbiA8IGxlbiArIE1BWFdMRU4gKyAyKQogCXsKIAkgICAgdmltX2ZyZWUoYnVmKTsKQEAgLTIwOTAsNyArMjA5MCwxOSBAQAogCiAJLyogRm9yIGNoZWNraW5nIGZpcnN0IHdvcmQgd2l0aCBhIGNhcGl0YWwgc2tpcCB3aGl0ZSBzcGFjZS4gKi8KIAlpZiAoY2FwY29sID09IDApCi0JICAgIGNhcGNvbCA9IHNraXB3aGl0ZShsaW5lKSAtIGxpbmU7CisJICAgIGNhcGNvbCA9IChpbnQpKHNraXB3aGl0ZShsaW5lKSAtIGxpbmUpOworCWVsc2UgaWYgKGN1cmxpbmUgJiYgd3AgPT0gY3Vyd2luKQorCXsKKwkgICAgaW50CSAgICBjb2wgPSAoaW50KShza2lwd2hpdGUobGluZSkgLSBsaW5lKTsKKworCSAgICAvKiBGb3Igc3BlbGxiYWR3b3JkKCk6IGNoZWNrIGlmIGZpcnN0IHdvcmQgbmVlZHMgYSBjYXBpdGFsLiAqLworCSAgICBpZiAoY2hlY2tfbmVlZF9jYXAobG51bSwgY29sKSkKKwkJY2FwY29sID0gY29sOworCisJICAgIC8qIE5lZWQgdG8gZ2V0IHRoZSBsaW5lIGFnYWluLCBtYXkgaGF2ZSBsb29rZWQgYXQgdGhlIHByZXZpb3VzCisJICAgICAqIG9uZS4gKi8KKwkgICAgbGluZSA9IG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBsbnVtLCBGQUxTRSk7CisJfQogCiAJLyogQ29weSB0aGUgbGluZSBpbnRvICJidWYiIGFuZCBhcHBlbmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGxpbmUgaWYKIAkgKiBwb3NzaWJsZS4gKi8KQEAgLTIxMzQsNyArMjE0Niw3IEBACiAjIGlmZGVmIEZFQVRfU1lOX0hMCiAJCQlpZiAoaGFzX3N5bnRheCkKIAkJCXsKLQkJCSAgICBjb2wgPSBwIC0gYnVmOworCQkJICAgIGNvbCA9IChpbnQpKHAgLSBidWYpOwogCQkJICAgICh2b2lkKXN5bl9nZXRfaWQod3AsIGxudW0sIChjb2xucl9UKWNvbCwKIAkJCQkJCSAgICAgICBGQUxTRSwgJmNhbl9zcGVsbCk7CiAJCQl9CkBAIC0yMTQ1LDcgKzIxNTcsNyBAQAogCQkJaWYgKGNhbl9zcGVsbCkKIAkJCXsKIAkJCSAgICBmb3VuZF9wb3MubG51bSA9IGxudW07Ci0JCQkgICAgZm91bmRfcG9zLmNvbCA9IHAgLSBidWY7CisJCQkgICAgZm91bmRfcG9zLmNvbCA9IChpbnQpKHAgLSBidWYpOwogI2lmZGVmIEZFQVRfVklSVFVBTEVESVQKIAkJCSAgICBmb3VuZF9wb3MuY29sYWRkID0gMDsKICNlbmRpZgpAQCAtMjIzMSwxMSArMjI0MywxMSBAQAogCSAgICAvKiBTa2lwIHRoZSBjaGFyYWN0ZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBsaW5lIHRoYXQgd2VyZQogCSAgICAgKiBpbmNsdWRlZCBpbiBhIG1hdGNoIGNyb3NzaW5nIGxpbmUgYm91bmRhcmllcy4gKi8KIAkgICAgaWYgKGF0dHIgPT0gSExGX0NPVU5UKQotCQlza2lwID0gcCAtIGVuZHA7CisJCXNraXAgPSAoaW50KShwIC0gZW5kcCk7CiAJICAgIGVsc2UKIAkJc2tpcCA9IDA7CiAKLQkgICAgLyogQ2Fwc2NvbCBza2lwcyBvdmVyIHRoZSBpbnNlcnRlZCBzcGFjZS4gKi8KKwkgICAgLyogQ2FwY29sIHNraXBzIG92ZXIgdGhlIGluc2VydGVkIHNwYWNlLiAqLwogCSAgICAtLWNhcGNvbDsKIAogCSAgICAvKiBCdXQgYWZ0ZXIgZW1wdHkgbGluZSBjaGVjayBmaXJzdCB3b3JkIGluIG5leHQgbGluZSAqLwpAQCAtMjI3MSw3ICsyMjgzLDcgQEAKICAgICB7CiAJKmJ1ZiA9ICcgJzsKIAl2aW1fc3RybmNweShidWYgKyAxLCBsaW5lLCBtYXhsZW4gLSAyKTsKLQluID0gcCAtIGxpbmU7CisJbiA9IChpbnQpKHAgLSBsaW5lKTsKIAlpZiAobiA+PSBtYXhsZW4pCiAJICAgIG4gPSBtYXhsZW4gLSAxOwogCXZpbV9tZW1zZXQoYnVmICsgMSwgJyAnLCBuKTsKQEAgLTMxNjEsNyArMzE3Myw3IEBACiAJCWJyZWFrOwogCSAgICAqcCsrID0gYzsKIAl9Ci0Jc21wLT5zbV9sZWFkbGVuID0gcCAtIHNtcC0+c21fbGVhZDsKKwlzbXAtPnNtX2xlYWRsZW4gPSAoaW50KShwIC0gc21wLT5zbV9sZWFkKTsKIAkqcCsrID0gTlVMOwogCiAJLyogUHV0IChhYmMpIGNoYXJzIGluIHNtX29uZW9mLCBpZiBhbnkuICovCkBAIC0zMzIxLDcgKzMzMzMsNyBAQAogICAgIGhpID0gaGFzaF9sb29rdXAoJmxwLT5zbF93b3JkY291bnQsIHAsIGhhc2gpOwogICAgIGlmIChIQVNISVRFTV9FTVBUWShoaSkpCiAgICAgewotCXdjID0gKHdvcmRjb3VudF9UICopYWxsb2Moc2l6ZW9mKHdvcmRjb3VudF9UKSArIFNUUkxFTihwKSk7CisJd2MgPSAod29yZGNvdW50X1QgKilhbGxvYygodW5zaWduZWQpKHNpemVvZih3b3JkY291bnRfVCkgKyBTVFJMRU4ocCkpKTsKIAlpZiAod2MgPT0gTlVMTCkKIAkgICAgcmV0dXJuOwogCVNUUkNQWSh3Yy0+d2Nfd29yZCwgcCk7CkBAIC0zNjMyLDkgKzM2NDQsOSBAQAogCXMgPSBwOwogCXAgPSB2aW1fc3RyY2hyKHAsICcvJyk7CiAJaWYgKHAgPT0gTlVMTCkKLQkgICAgbCA9IFNUUkxFTihzKTsKKwkgICAgbCA9IChpbnQpU1RSTEVOKHMpOwogCWVsc2UKLQkgICAgbCA9IHAgLSBzOworCSAgICBsID0gKGludCkocCAtIHMpOwogCWlmIChsID49IFNZX01BWExFTikKIAkgICAgcmV0dXJuIFNQX0ZPUk1FUlJPUjsKIAlpZiAoZ2FfZ3Jvdygmc2xhbmctPnNsX3N5bF9pdGVtcywgMSkgPT0gRkFJTCkKQEAgLTQxMDEsNyArNDExMyw3IEBACiAJY29weV9vcHRpb25fcGFydCgmc3BscCwgbGFuZywgTUFYV0xFTiwgIiwiKTsKIAogCXJlZ2lvbiA9IE5VTEw7Ci0JbGVuID0gU1RSTEVOKGxhbmcpOworCWxlbiA9IChpbnQpU1RSTEVOKGxhbmcpOwogCiAJLyogSWYgdGhlIG5hbWUgZW5kcyBpbiAiLnNwbCIgdXNlIGl0IGFzIHRoZSBuYW1lIG9mIHRoZSBzcGVsbCBmaWxlLgogCSAqIElmIHRoZXJlIGlzIGEgcmVnaW9uIG5hbWUgbGV0ICJyZWdpb24iIHBvaW50IHRvIGl0IGFuZCByZW1vdmUgaXQKQEAgLTQzOTAsNyArNDQwMiw3IEBACiAJICAgIGVsc2UKIAkgICAgewogCQkvKiBBcHBlbmQgbXVsdGktYnl0ZSBjaGFycyB0byAiYl9zcGVsbF9pc213X21iIi4gKi8KLQkJbiA9IFNUUkxFTihidWYtPmJfc3BlbGxfaXNtd19tYik7CisJCW4gPSAoaW50KVNUUkxFTihidWYtPmJfc3BlbGxfaXNtd19tYik7CiAJCWJwID0gdmltX3N0cm5zYXZlKGJ1Zi0+Yl9zcGVsbF9pc213X21iLCBuICsgbCk7CiAJCWlmIChicCAhPSBOVUxMKQogCQl7CkBAIC01MzEyLDkgKzUzMjQsOSBAQAogCSAgICB7CiAJCS8qIENvbmNhdGVuYXRlIHRoaXMgc3RyaW5nIHRvIHByZXZpb3VzbHkgZGVmaW5lZCBvbmVzLCB1c2luZyBhCiAJCSAqIHNsYXNoIHRvIHNlcGFyYXRlIHRoZW0uICovCi0JCWwgPSBTVFJMRU4oaXRlbXNbMV0pICsgMTsKKwkJbCA9IChpbnQpU1RSTEVOKGl0ZW1zWzFdKSArIDE7CiAJCWlmIChjb21wZmxhZ3MgIT0gTlVMTCkKLQkJICAgIGwgKz0gU1RSTEVOKGNvbXBmbGFncykgKyAxOworCQkgICAgbCArPSAoaW50KVNUUkxFTihjb21wZmxhZ3MpICsgMTsKIAkJcCA9IGdldHJvb20oc3BpbiwgbCwgRkFMU0UpOwogCQlpZiAocCAhPSBOVUxMKQogCQl7CkBAIC02MTAwLDkgKzYxMTIsOSBAQAogICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIG9sZCBhbmQgdGhlIG5ldyBjb21wZmxhZ3MsIGNvbmNhdGVuYXRlZCB3aXRoIGEgLyBpbgogICAgICAqIGJldHdlZW4uICBQcm9jZXNzaW5nIGl0IG1ha2VzIGl0IHNob3J0ZXIsIGJ1dCB3ZSBkb24ndCBrbm93IGJ5IGhvdwogICAgICAqIG11Y2gsIHRodXMgYWxsb2NhdGUgdGhlIG1heGltdW0uICovCi0gICAgbGVuID0gU1RSTEVOKGNvbXBmbGFncykgKyAxOworICAgIGxlbiA9IChpbnQpU1RSTEVOKGNvbXBmbGFncykgKyAxOwogICAgIGlmIChzcGluLT5zaV9jb21wZmxhZ3MgIT0gTlVMTCkKLQlsZW4gKz0gU1RSTEVOKHNwaW4tPnNpX2NvbXBmbGFncykgKyAxOworCWxlbiArPSAoaW50KVNUUkxFTihzcGluLT5zaV9jb21wZmxhZ3MpICsgMTsKICAgICBwID0gZ2V0cm9vbShzcGluLCBsZW4sIEZBTFNFKTsKICAgICBpZiAocCA9PSBOVUxMKQogCXJldHVybjsKQEAgLTYyODUsOSArNjI5Nyw5IEBACiAgICAgaWYgKGdhX2dyb3coZ2FwLCAxKSA9PSBPSykKICAgICB7CiAJZnRwID0gKChmcm9tdG9fVCAqKWdhcC0+Z2FfZGF0YSkgKyBnYXAtPmdhX2xlbjsKLQkodm9pZClzcGVsbF9jYXNlZm9sZChmcm9tLCBTVFJMRU4oZnJvbSksIHdvcmQsIE1BWFdMRU4pOworCSh2b2lkKXNwZWxsX2Nhc2Vmb2xkKGZyb20sIChpbnQpU1RSTEVOKGZyb20pLCB3b3JkLCBNQVhXTEVOKTsKIAlmdHAtPmZ0X2Zyb20gPSBnZXRyb29tX3NhdmUoc3Bpbiwgd29yZCk7Ci0JKHZvaWQpc3BlbGxfY2FzZWZvbGQodG8sIFNUUkxFTih0byksIHdvcmQsIE1BWFdMRU4pOworCSh2b2lkKXNwZWxsX2Nhc2Vmb2xkKHRvLCAoaW50KVNUUkxFTih0byksIHdvcmQsIE1BWFdMRU4pOwogCWZ0cC0+ZnRfdG8gPSBnZXRyb29tX3NhdmUoc3Bpbiwgd29yZCk7CiAJKytnYXAtPmdhX2xlbjsKICAgICB9CkBAIC02MzM4LDcgKzYzNTAsNyBAQAogICAgIC8qIEFsbCB0aGlzIHRyb3VibGUgdG8gZnJlZSB0aGUgImFlX3Byb2ciIGl0ZW1zLi4uICovCiAgICAgZm9yIChodCA9ICZhZmYtPmFmX3ByZWY7IDsgaHQgPSAmYWZmLT5hZl9zdWZmKQogICAgIHsKLQl0b2RvID0gaHQtPmh0X3VzZWQ7CisJdG9kbyA9IChpbnQpaHQtPmh0X3VzZWQ7CiAJZm9yIChoaSA9IGh0LT5odF9hcnJheTsgdG9kbyA+IDA7ICsraGkpCiAJewogCSAgICBpZiAoIUhBU0hJVEVNX0VNUFRZKGhpKSkKQEAgLTY0MjgsNyArNjQ0MCw3IEBACiAKIAkvKiBSZW1vdmUgQ1IsIExGIGFuZCB3aGl0ZSBzcGFjZSBmcm9tIHRoZSBlbmQuICBXaGl0ZSBzcGFjZSBoYWxmd2F5CiAJICogdGhlIHdvcmQgaXMga2VwdCB0byBhbGxvdyBlLmcuLCAiZXQgYWwuIi4gKi8KLQlsID0gU1RSTEVOKGxpbmUpOworCWwgPSAoaW50KVNUUkxFTihsaW5lKTsKIAl3aGlsZSAobCA+IDAgJiYgbGluZVtsIC0gMV0gPD0gJyAnKQogCSAgICAtLWw7CiAJaWYgKGwgPT0gMCkKQEAgLTY3MjcsNyArNjczOSw3IEBACiAgICAgc2l6ZV90CXdvcmRsZW4gPSBTVFJMRU4od29yZCk7CiAgICAgaW50CQl1c2VfY29uZGl0OwogCi0gICAgdG9kbyA9IGh0LT5odF91c2VkOworICAgIHRvZG8gPSAoaW50KWh0LT5odF91c2VkOwogICAgIGZvciAoaGkgPSBodC0+aHRfYXJyYXk7IHRvZG8gPiAwICYmIHJldHZhbCA9PSBPSzsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC02ODAyLDcgKzY4MTQsNyBAQAogCQkJICAgIHsKIAkJCQkvKiBSZW1vdmUgY2hvcCBzdHJpbmcuICovCiAJCQkJcCA9IG5ld3dvcmQgKyBTVFJMRU4obmV3d29yZCk7Ci0JCQkJaSA9IE1CX0NIQVJMRU4oYWUtPmFlX2Nob3ApOworCQkJCWkgPSAoaW50KU1CX0NIQVJMRU4oYWUtPmFlX2Nob3ApOwogCQkJCWZvciAoIDsgaSA+IDA7IC0taSkKIAkJCQkgICAgbWJfcHRyX2JhY2sobmV3d29yZCwgcCk7CiAJCQkJKnAgPSBOVUw7CkBAIC03MDA2LDcgKzcwMTgsNyBAQAogCSAgICBjb250aW51ZTsKIAogCS8qIFJlbW92ZSBDUiwgTEYgYW5kIHdoaXRlIHNwYWNlIGZyb20gdGhlIGVuZC4gKi8KLQlsID0gU1RSTEVOKHJsaW5lKTsKKwlsID0gKGludClTVFJMRU4ocmxpbmUpOwogCXdoaWxlIChsID4gMCAmJiBybGluZVtsIC0gMV0gPD0gJyAnKQogCSAgICAtLWw7CiAJaWYgKGwgPT0gMCkKQEAgLTcwODAsNyArNzA5Miw3IEBACiAJCQkJCQkgICAgICAgZm5hbWUsIGxudW0sIGxpbmUpOwogCQkgICAgZWxzZQogCQkgICAgewotCQkJc3Bpbi0+c2lfcmVnaW9uX2NvdW50ID0gU1RSTEVOKGxpbmUpIC8gMjsKKwkJCXNwaW4tPnNpX3JlZ2lvbl9jb3VudCA9IChpbnQpU1RSTEVOKGxpbmUpIC8gMjsKIAkJCVNUUkNQWShzcGluLT5zaV9yZWdpb25fbmFtZSwgbGluZSk7CiAKIAkJCS8qIEFkanVzdCB0aGUgbWFzayBmb3IgYSB3b3JkIHZhbGlkIGluIGFsbCByZWdpb25zLiAqLwpAQCAtNzIwMCw3ICs3MjEyLDcgQEAKICAgICB9CiAKICAgICBwID0gYmwtPnNiX2RhdGEgKyBibC0+c2JfdXNlZDsKLSAgICBibC0+c2JfdXNlZCArPSBsZW47CisgICAgYmwtPnNiX3VzZWQgKz0gKGludClsZW47CiAKICAgICByZXR1cm4gcDsKIH0KQEAgLTcyNjcsNyArNzI3OSw3IEBACiAgICAgY2hhcl91CSpwZnhsaXN0OwkvKiBsaXN0IG9mIHByZWZpeCBJRHMgb3IgTlVMTCAqLwogICAgIGludAkJbmVlZF9hZmZpeDsJLyogb25seSBzdG9yZSB3b3JkIHdpdGggYWZmaXggSUQgKi8KIHsKLSAgICBpbnQJCWxlbiA9IFNUUkxFTih3b3JkKTsKKyAgICBpbnQJCWxlbiA9IChpbnQpU1RSTEVOKHdvcmQpOwogICAgIGludAkJY3QgPSBjYXB0eXBlKHdvcmQsIHdvcmQgKyBsZW4pOwogICAgIGNoYXJfdQlmb2xkd29yZFtNQVhXTEVOXTsKICAgICBpbnQJCXJlcyA9IE9LOwpAQCAtNzcxNSw3ICs3NzI3LDcgQEAKIAkgICAgbiA9IG5wLT53bl9mbGFncyArIChucC0+d25fcmVnaW9uIDw8IDgpICsgKG5wLT53bl9hZmZpeElEIDw8IDE2KTsKIAllbHNlCiAJICAgIC8qIGJ5dGUgbm9kZTogdXNlIHRoZSBieXRlIHZhbHVlIGFuZCB0aGUgY2hpbGQgcG9pbnRlciAqLwotCSAgICBuID0gbnAtPnduX2J5dGUgKyAoKGxvbmdfdSlucC0+d25fY2hpbGQgPDwgOCk7CisJICAgIG4gPSAodW5zaWduZWQpKG5wLT53bl9ieXRlICsgKChsb25nX3UpbnAtPnduX2NoaWxkIDw8IDgpKTsKIAluciA9IG5yICogMTAxICsgbjsKICAgICB9CiAKQEAgLTc4ODQsNyArNzg5Niw3IEBACiAJcHV0YyhTTl9JTkZPLCBmZCk7CQkJCS8qIDxzZWN0aW9uSUQ+ICovCiAJcHV0YygwLCBmZCk7CQkJCQkvKiA8c2VjdGlvbmZsYWdzPiAqLwogCi0JaSA9IFNUUkxFTihzcGluLT5zaV9pbmZvKTsKKwlpID0gKGludClTVFJMRU4oc3Bpbi0+c2lfaW5mbyk7CiAJcHV0X2J5dGVzKGZkLCAobG9uZ191KWksIDQpOwkJCS8qIDxzZWN0aW9ubGVuPiAqLwogCWZ3cml0ZShzcGluLT5zaV9pbmZvLCAoc2l6ZV90KWksIChzaXplX3QpMSwgZmQpOyAvKiA8aW5mb3RleHQ+ICovCiAgICAgfQpAQCAtNzk1Niw3ICs3OTY4LDcgQEAKIAlwdXRjKFNOX01JRFdPUkQsIGZkKTsJCQkJLyogPHNlY3Rpb25JRD4gKi8KIAlwdXRjKFNORl9SRVFVSVJFRCwgZmQpOwkJCQkvKiA8c2VjdGlvbmZsYWdzPiAqLwogCi0JaSA9IFNUUkxFTihzcGluLT5zaV9taWR3b3JkKTsKKwlpID0gKGludClTVFJMRU4oc3Bpbi0+c2lfbWlkd29yZCk7CiAJcHV0X2J5dGVzKGZkLCAobG9uZ191KWksIDQpOwkJCS8qIDxzZWN0aW9ubGVuPiAqLwogCWZ3cml0ZShzcGluLT5zaV9taWR3b3JkLCAoc2l6ZV90KWksIChzaXplX3QpMSwgZmQpOyAvKiA8bWlkd29yZD4gKi8KICAgICB9CkBAIC04MDE0LDggKzgwMjYsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBnYXAtPmdhX2xlbjsgKytpKQogCXsKIAkgICAgZnRwID0gJigoZnJvbXRvX1QgKilnYXAtPmdhX2RhdGEpW2ldOwotCSAgICBsICs9IDEgKyBTVFJMRU4oZnRwLT5mdF9mcm9tKTsgIC8qIGNvdW50IDwqZnJvbWxlbj4gYW5kIDwqZnJvbT4gKi8KLQkgICAgbCArPSAxICsgU1RSTEVOKGZ0cC0+ZnRfdG8pOyAgICAvKiBjb3VudCA8KnRvbGVuPiBhbmQgPCp0bz4gKi8KKwkgICAgbCArPSAxICsgKGludClTVFJMRU4oZnRwLT5mdF9mcm9tKTsgIC8qIGNvdW50IDwqZnJvbWxlbj4gYW5kIDwqZnJvbT4gKi8KKwkgICAgbCArPSAxICsgKGludClTVFJMRU4oZnRwLT5mdF90byk7ICAgIC8qIGNvdW50IDwqdG9sZW4+IGFuZCA8KnRvPiAqLwogCX0KIAlpZiAocm91bmQgPT0gMikKIAkgICAgKytsOwkvKiBjb3VudCA8c2FsZmxhZ3M+ICovCkBAIC04MDQyLDcgKzgwNTQsNyBAQAogCSAgICBmb3IgKHJyID0gMTsgcnIgPD0gMjsgKytycikKIAkgICAgewogCQlwID0gcnIgPT0gMSA/IGZ0cC0+ZnRfZnJvbSA6IGZ0cC0+ZnRfdG87Ci0JCWwgPSBTVFJMRU4ocCk7CisJCWwgPSAoaW50KVNUUkxFTihwKTsKIAkJcHV0YyhsLCBmZCk7CiAJCWZ3cml0ZShwLCBsLCAoc2l6ZV90KTEsIGZkKTsKIAkgICAgfQpAQCAtODA1NywxNCArODA2OSwxNCBAQAogCXB1dGMoU05fU09GTywgZmQpOwkJCQkvKiA8c2VjdGlvbklEPiAqLwogCXB1dGMoMCwgZmQpOwkJCQkJLyogPHNlY3Rpb25mbGFncz4gKi8KIAotCWwgPSBTVFJMRU4oc3Bpbi0+c2lfc29mb2ZyKTsKKwlsID0gKGludClTVFJMRU4oc3Bpbi0+c2lfc29mb2ZyKTsKIAlwdXRfYnl0ZXMoZmQsIChsb25nX3UpKGwgKyBTVFJMRU4oc3Bpbi0+c2lfc29mb3RvKSArIDQpLCA0KTsKIAkJCQkJCQkvKiA8c2VjdGlvbmxlbj4gKi8KIAogCXB1dF9ieXRlcyhmZCwgKGxvbmdfdSlsLCAyKTsJCQkvKiA8c29mb2Zyb21sZW4+ICovCiAJZndyaXRlKHNwaW4tPnNpX3NvZm9mciwgbCwgKHNpemVfdCkxLCBmZCk7CS8qIDxzb2ZvZnJvbT4gKi8KIAotCWwgPSBTVFJMRU4oc3Bpbi0+c2lfc29mb3RvKTsKKwlsID0gKGludClTVFJMRU4oc3Bpbi0+c2lfc29mb3RvKTsKIAlwdXRfYnl0ZXMoZmQsIChsb25nX3UpbCwgMik7CQkJLyogPHNvZm90b2xlbj4gKi8KIAlmd3JpdGUoc3Bpbi0+c2lfc29mb3RvLCBsLCAoc2l6ZV90KTEsIGZkKTsJLyogPHNvZm90bz4gKi8KICAgICB9CkBAIC04MDg0LDExICs4MDk2LDExIEBACiAJICAgIGludAkJbGVuID0gMDsKIAkgICAgaGFzaGl0ZW1fVAkqaGk7CiAKLQkgICAgdG9kbyA9IHNwaW4tPnNpX2NvbW1vbndvcmRzLmh0X3VzZWQ7CisJICAgIHRvZG8gPSAoaW50KXNwaW4tPnNpX2NvbW1vbndvcmRzLmh0X3VzZWQ7CiAJICAgIGZvciAoaGkgPSBzcGluLT5zaV9jb21tb253b3Jkcy5odF9hcnJheTsgdG9kbyA+IDA7ICsraGkpCiAJCWlmICghSEFTSElURU1fRU1QVFkoaGkpKQogCQl7Ci0JCSAgICBsID0gU1RSTEVOKGhpLT5oaV9rZXkpICsgMTsKKwkJICAgIGwgPSAoaW50KVNUUkxFTihoaS0+aGlfa2V5KSArIDE7CiAJCSAgICBsZW4gKz0gbDsKIAkJICAgIGlmIChyb3VuZCA9PSAyKQkJCS8qIDx3b3JkPiAqLwogCQkJZndyaXRlKGhpLT5oaV9rZXksIChzaXplX3QpbCwgKHNpemVfdCkxLCBmZCk7CkBAIC04MTQ3LDkgKzgxNTksOSBAQAogCXB1dGMoU05fQ09NUE9VTkQsIGZkKTsJCQkJLyogPHNlY3Rpb25JRD4gKi8KIAlwdXRjKDAsIGZkKTsJCQkJCS8qIDxzZWN0aW9uZmxhZ3M+ICovCiAKLQlsID0gU1RSTEVOKHNwaW4tPnNpX2NvbXBmbGFncyk7CisJbCA9IChpbnQpU1RSTEVOKHNwaW4tPnNpX2NvbXBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IHNwaW4tPnNpX2NvbXBwYXQuZ2FfbGVuOyArK2kpCi0JICAgIGwgKz0gU1RSTEVOKCgoY2hhcl91ICoqKShzcGluLT5zaV9jb21wcGF0LmdhX2RhdGEpKVtpXSkgKyAxOworCSAgICBsICs9IChpbnQpU1RSTEVOKCgoY2hhcl91ICoqKShzcGluLT5zaV9jb21wcGF0LmdhX2RhdGEpKVtpXSkgKyAxOwogCXB1dF9ieXRlcyhmZCwgKGxvbmdfdSkobCArIDcpLCA0KTsJCS8qIDxzZWN0aW9ubGVuPiAqLwogCiAJcHV0YyhzcGluLT5zaV9jb21wbWF4LCBmZCk7CQkJLyogPGNvbXBtYXg+ICovCkBAIC04MTYyLDcgKzgxNzQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzcGluLT5zaV9jb21wcGF0LmdhX2xlbjsgKytpKQogCXsKIAkgICAgcCA9ICgoY2hhcl91ICoqKShzcGluLT5zaV9jb21wcGF0LmdhX2RhdGEpKVtpXTsKLQkgICAgcHV0YyhTVFJMRU4ocCksIGZkKTsJCQkvKiA8Y29tcHBhdGxlbj4gKi8KKwkgICAgcHV0YygoaW50KVNUUkxFTihwKSwgZmQpOwkJCS8qIDxjb21wcGF0bGVuPiAqLwogCSAgICBmd3JpdGUocCwgKHNpemVfdClTVFJMRU4ocCksIChzaXplX3QpMSwgZmQpOy8qIDxjb21wcGF0dGV4dD4gKi8KIAl9CiAJCQkJCQkJLyogPGNvbXBmbGFncz4gKi8KQEAgLTgxODgsNyArODIwMCw3IEBACiAJcHV0YyhTTl9TWUxMQUJMRSwgZmQpOwkJCQkvKiA8c2VjdGlvbklEPiAqLwogCXB1dGMoMCwgZmQpOwkJCQkJLyogPHNlY3Rpb25mbGFncz4gKi8KIAotCWwgPSBTVFJMRU4oc3Bpbi0+c2lfc3lsbGFibGUpOworCWwgPSAoaW50KVNUUkxFTihzcGluLT5zaV9zeWxsYWJsZSk7CiAJcHV0X2J5dGVzKGZkLCAobG9uZ191KWwsIDQpOwkJCS8qIDxzZWN0aW9ubGVuPiAqLwogCWZ3cml0ZShzcGluLT5zaV9zeWxsYWJsZSwgKHNpemVfdClsLCAoc2l6ZV90KTEsIGZkKTsgLyogPHN5bGxhYmxlPiAqLwogICAgIH0KQEAgLTg0OTksNyArODUxMSw3IEBACiAgICAgICogTWFrZSB0aGUgZmlsZSBuYW1lIGJ5IGNoYW5naW5nICIuc3BsIiB0byAiLnN1ZyIuCiAgICAgICovCiAgICAgU1RSQ1BZKGZuYW1lLCB3Zm5hbWUpOwotICAgIGxlbiA9IFNUUkxFTihmbmFtZSk7CisgICAgbGVuID0gKGludClTVFJMRU4oZm5hbWUpOwogICAgIGZuYW1lW2xlbiAtIDJdID0gJ3UnOwogICAgIGZuYW1lW2xlbiAtIDFdID0gJ2cnOwogICAgIHN1Z193cml0ZShzcGluLCBmbmFtZSk7CkBAIC04ODc0LDcgKzg4ODYsNyBAQAogICAgIHsKIAkvKiA8c3VnbGluZT46IDxzdWducj4gLi4uIE5VTCAqLwogCWxpbmUgPSBtbF9nZXRfYnVmKHNwaW4tPnNpX3NwZWxsYnVmLCBsbnVtLCBGQUxTRSk7Ci0JbGVuID0gU1RSTEVOKGxpbmUpICsgMTsKKwlsZW4gPSAoaW50KVNUUkxFTihsaW5lKSArIDE7CiAJaWYgKGZ3cml0ZShsaW5lLCAoc2l6ZV90KWxlbiwgKHNpemVfdCkxLCBmZCkgPT0gMCkKIAl7CiAJICAgIEVNU0coXyhlX3dyaXRlKSk7CkBAIC04OTgxLDcgKzg5OTMsNyBAQAogCiAgICAgaWYgKGZjb3VudCA+PSAxKQogICAgIHsKLQlsZW4gPSBTVFJMRU4oZm5hbWVzWzBdKTsKKwlsZW4gPSAoaW50KVNUUkxFTihmbmFtZXNbMF0pOwogCWlmIChmY291bnQgPT0gMSAmJiBsZW4gPiA0ICYmIFNUUkNNUChmbmFtZXNbMF0gKyBsZW4gLSA0LCAiLmFkZCIpID09IDApCiAJewogCSAgICAvKiBGb3IgIjpta3NwZWxsIHBhdGgvZW4ubGF0aW4xLmFkZCIgb3V0cHV0IGZpbGUgaXMKQEAgLTkwNDgsNyArOTA2MCw3IEBACiAKIAkgICAgaWYgKGluY291bnQgPiAxKQogCSAgICB7Ci0JCWxlbiA9IFNUUkxFTihpbm5hbWVzW2ldKTsKKwkJbGVuID0gKGludClTVFJMRU4oaW5uYW1lc1tpXSk7CiAJCWlmIChTVFJMRU4oZ2V0dGFpbChpbm5hbWVzW2ldKSkgPCA1CiAJCQkJCQl8fCBpbm5hbWVzW2ldW2xlbiAtIDNdICE9ICdfJykKIAkJewpAQCAtOTIxNSw3ICs5MjI3LDcgQEAKIGV4X3NwZWxsKGVhcCkKICAgICBleGFyZ19UICplYXA7CiB7Ci0gICAgc3BlbGxfYWRkX3dvcmQoZWFwLT5hcmcsIFNUUkxFTihlYXAtPmFyZyksIGVhcC0+Y21kaWR4ID09IENNRF9zcGVsbHdyb25nLAorICAgIHNwZWxsX2FkZF93b3JkKGVhcC0+YXJnLCAoaW50KVNUUkxFTihlYXAtPmFyZyksIGVhcC0+Y21kaWR4ID09IENNRF9zcGVsbHdyb25nLAogCQkJCSAgIGVhcC0+Zm9yY2VpdCA/IDAgOiAoaW50KWVhcC0+bGluZTIsCiAJCQkJICAgZWFwLT5jbWRpZHggPT0gQ01EX3NwZWxsdW5kbyk7CiB9CkBAIC05NDE5LDE2ICs5NDMxLDE2IEBACiAJCWVsc2UKIAkJewogCQkgICAgLyogQ3JlYXRlIHRoZSAic3BlbGwiIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC4gKi8KLQkJICAgIGwgPSBTVFJMRU4oYnVmKTsKKwkJICAgIGwgPSAoaW50KVNUUkxFTihidWYpOwogCQkgICAgdmltX3NucHJpbnRmKChjaGFyICopYnVmICsgbCwgTUFYUEFUSEwgLSBsLCAiL3NwZWxsIik7CiAJCSAgICBpZiAoIWZpbGV3cml0YWJsZShidWYpICE9IDIpCiAJCQl2aW1fbWtkaXIoYnVmLCAwNzU1KTsKIAotCQkgICAgbCA9IFNUUkxFTihidWYpOworCQkgICAgbCA9IChpbnQpU1RSTEVOKGJ1Zik7CiAJCSAgICB2aW1fc25wcmludGYoKGNoYXIgKilidWYgKyBsLCBNQVhQQVRITCAtIGwsCiAJCQkJICIvJS4qcyIsIChpbnQpKGxlbmQgLSBsc3RhcnQpLCBsc3RhcnQpOwogCQl9Ci0JCWwgPSBTVFJMRU4oYnVmKTsKKwkJbCA9IChpbnQpU1RSTEVOKGJ1Zik7CiAJCWZuYW1lID0gTEFOR1BfRU5UUlkoY3VyYnVmLT5iX2xhbmdwLCAwKS0+bHBfc2xhbmctPnNsX2ZuYW1lOwogCQl2aW1fc25wcmludGYoKGNoYXIgKilidWYgKyBsLCBNQVhQQVRITCAtIGwsICIuJXMuYWRkIiwKIAkJCWZuYW1lICE9IE5VTEwKQEAgLTk4MTIsNyArOTgyNCw3IEBACiAJcCA9ICgoY2hhcl91ICoqKWdhcC0+Z2FfZGF0YSlbaV07CiAJaWYgKHAgIT0gTlVMTCkKIAl7Ci0JICAgIGxlbiA9IFNUUkxFTihwKTsKKwkgICAgbGVuID0gKGludClTVFJMRU4ocCk7CiAJICAgIGlmIChmZCAhPSBOVUxMKQogCSAgICB7CiAJCWZwdXRjKGxlbiwgZmQpOwpAQCAtMTAwMDksNyArMTAwMjEsNyBAQAogCSAgICBiZWVwX2ZsdXNoKCk7CiAJICAgIHJldHVybjsKIAl9Ci0JY3Vyd2luLT53X2N1cnNvci5jb2wgPSBwIC0gbGluZTsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IChjb2xucl9UKShwIC0gbGluZSk7CiAgICAgfQogCiAgICAgLyogR2V0IHRoZSB3b3JkIGFuZCBpdHMgbGVuZ3RoLiAqLwpAQCAtMTAxNTIsMTAgKzEwMTY0LDEwIEBACiAJfQogCiAJLyogUmVwbGFjZSB0aGUgd29yZC4gKi8KLQlwID0gYWxsb2MoU1RSTEVOKGxpbmUpIC0gc3RwLT5zdF9vcmdsZW4gKyBzdHAtPnN0X3dvcmRsZW4gKyAxKTsKKwlwID0gYWxsb2MoKHVuc2lnbmVkKVNUUkxFTihsaW5lKSAtIHN0cC0+c3Rfb3JnbGVuICsgc3RwLT5zdF93b3JkbGVuICsgMSk7CiAJaWYgKHAgIT0gTlVMTCkKIAl7Ci0JICAgIGMgPSBzdWcuc3VfYmFkcHRyIC0gbGluZTsKKwkgICAgYyA9IChpbnQpKHN1Zy5zdV9iYWRwdHIgLSBsaW5lKTsKIAkgICAgbWNoX21lbW1vdmUocCwgbGluZSwgYyk7CiAJICAgIFNUUkNQWShwICsgYywgc3RwLT5zdF93b3JkKTsKIAkgICAgU1RSQ0FUKHAsIHN1Zy5zdV9iYWRwdHIgKyBzdHAtPnN0X29yZ2xlbik7CkBAIC0xMDIxNiw3ICsxMDIyOCw3IEBACiAJCS8qIEFwcGVuZCBhIHNwYWNlIGluIHBsYWNlIG9mIHRoZSBsaW5lIGJyZWFrLiAqLwogCQlsaW5lX2NvcHkgPSBjb25jYXRfc3RyKGxpbmUsIChjaGFyX3UgKikiICIpOwogCQlsaW5lID0gbGluZV9jb3B5OwotCQllbmRjb2wgPSBTVFJMRU4obGluZSk7CisJCWVuZGNvbCA9IChjb2xucl9UKVNUUkxFTihsaW5lKTsKIAkgICAgfQogCX0KICAgICB9CkBAIC0xMDI3MCw5ICsxMDI4Miw5IEBACiAJRU1TRyhfKCJFNzUyOiBObyBwcmV2aW91cyBzcGVsbCByZXBsYWNlbWVudCIpKTsKIAlyZXR1cm47CiAgICAgfQotICAgIGFkZGxlbiA9IFNUUkxFTihyZXBsX3RvKSAtIFNUUkxFTihyZXBsX2Zyb20pOworICAgIGFkZGxlbiA9IChpbnQpKFNUUkxFTihyZXBsX3RvKSAtIFNUUkxFTihyZXBsX2Zyb20pKTsKIAotICAgIGZyb21wYXQgPSBhbGxvYyhTVFJMRU4ocmVwbF9mcm9tKSArIDcpOworICAgIGZyb21wYXQgPSBhbGxvYygodW5zaWduZWQpU1RSTEVOKHJlcGxfZnJvbSkgKyA3KTsKICAgICBpZiAoZnJvbXBhdCA9PSBOVUxMKQogCXJldHVybjsKICAgICBzcHJpbnRmKChjaGFyICopZnJvbXBhdCwgIlxcVlxcPCVzXFw+IiwgcmVwbF9mcm9tKTsKQEAgLTEwMjkzLDcgKzEwMzA1LDcgQEAKIAlpZiAoYWRkbGVuIDw9IDAgfHwgU1RSTkNNUChsaW5lICsgY3Vyd2luLT53X2N1cnNvci5jb2wsCiAJCQkJCSAgICAgICByZXBsX3RvLCBTVFJMRU4ocmVwbF90bykpICE9IDApCiAJewotCSAgICBwID0gYWxsb2MoU1RSTEVOKGxpbmUpICsgYWRkbGVuICsgMSk7CisJICAgIHAgPSBhbGxvYygodW5zaWduZWQpU1RSTEVOKGxpbmUpICsgYWRkbGVuICsgMSk7CiAJICAgIGlmIChwID09IE5VTEwpCiAJCWJyZWFrOwogCSAgICBtY2hfbWVtbW92ZShwLCBsaW5lLCBjdXJ3aW4tPndfY3Vyc29yLmNvbCk7CkBAIC0xMDMwOSw3ICsxMDMyMSw3IEBACiAJICAgIH0KIAkgICAgKytzdWJfbnN1YnM7CiAJfQotCWN1cndpbi0+d19jdXJzb3IuY29sICs9IFNUUkxFTihyZXBsX3RvKTsKKwljdXJ3aW4tPndfY3Vyc29yLmNvbCArPSAoY29sbnJfVClTVFJMRU4ocmVwbF90byk7CiAgICAgfQogCiAgICAgcF93cyA9IHNhdmVfd3M7CkBAIC0xMDM1Miw3ICsxMDM2NCw3IEBACiAJICAgIC8qIFRoZSBzdWdnZXN0ZWQgd29yZCBtYXkgcmVwbGFjZSBvbmx5IHBhcnQgb2YgIndvcmQiLCBhZGQgdGhlIG5vdAogCSAgICAgKiByZXBsYWNlZCBwYXJ0LiAqLwogCSAgICB3Y29weSA9IGFsbG9jKHN0cC0+c3Rfd29yZGxlbgotCQkJCSsgU1RSTEVOKHN1Zy5zdV9iYWRwdHIgKyBzdHAtPnN0X29yZ2xlbikgKyAxKTsKKwkJICAgICAgKyAodW5zaWduZWQpU1RSTEVOKHN1Zy5zdV9iYWRwdHIgKyBzdHAtPnN0X29yZ2xlbikgKyAxKTsKIAkgICAgaWYgKHdjb3B5ID09IE5VTEwpCiAJCWJyZWFrOwogCSAgICBTVFJDUFkod2NvcHksIHN0cC0+c3Rfd29yZCk7CkBAIC0xMTA2MCw5ICsxMTA3Miw5IEBACiAgICAgICogdG8gZmluZCBtYXRjaGVzIChlc3AuIFJFUCBpdGVtcykuICBBcHBlbmQgc29tZSBtb3JlIHRleHQsIGNoYW5naW5nCiAgICAgICogY2hhcnMgYWZ0ZXIgdGhlIGJhZCB3b3JkIG1heSBoZWxwLiAqLwogICAgIFNUUkNQWShmd29yZCwgc3UtPnN1X2ZiYWR3b3JkKTsKLSAgICBuID0gU1RSTEVOKGZ3b3JkKTsKKyAgICBuID0gKGludClTVFJMRU4oZndvcmQpOwogICAgIHAgPSBzdS0+c3VfYmFkcHRyICsgc3UtPnN1X2JhZGxlbjsKLSAgICAodm9pZClzcGVsbF9jYXNlZm9sZChwLCBTVFJMRU4ocCksIGZ3b3JkICsgbiwgTUFYV0xFTiAtIG4pOworICAgICh2b2lkKXNwZWxsX2Nhc2Vmb2xkKHAsIChpbnQpU1RSTEVOKHApLCBmd29yZCArIG4sIE1BWFdMRU4gLSBuKTsKIAogICAgIGZvciAobHBpID0gMDsgbHBpIDwgY3VyYnVmLT5iX2xhbmdwLmdhX2xlbjsgKytscGkpCiAgICAgewpAQCAtMTEyNjYsNyArMTEyNzgsNyBAQAogCQkgICAgdHdvcmRbc3AtPnRzX3R3b3JkbGVuXSA9IE5VTDsKIAkJICAgIG1ha2VfY2FzZV93b3JkKHR3b3JkICsgc3AtPnRzX3NwbGl0b2ZmLAogCQkJCQkgIHByZXdvcmQgKyBzcC0+dHNfcHJld29yZGxlbiwgZmxhZ3MpOwotCQkgICAgc3AtPnRzX3ByZXdvcmRsZW4gPSBTVFJMRU4ocHJld29yZCk7CisJCSAgICBzcC0+dHNfcHJld29yZGxlbiA9IChjaGFyX3UpU1RSTEVOKHByZXdvcmQpOwogCQkgICAgc3AtPnRzX3NwbGl0b2ZmID0gc3AtPnRzX3R3b3JkbGVuOwogCQl9CiAJCWJyZWFrOwpAQCAtMTE2NzQsNyArMTE2ODYsNyBAQAogCQkJLyogQXBwZW5kIGEgc3BhY2UgdG8gcHJld29yZCB3aGVuIHNwbGl0dGluZy4gKi8KIAkJCWlmICghdHJ5X2NvbXBvdW5kICYmICFmd29yZF9lbmRzKQogCQkJICAgIFNUUkNBVChwcmV3b3JkLCAiICIpOwotCQkJc3AtPnRzX3ByZXdvcmRsZW4gPSBTVFJMRU4ocHJld29yZCk7CisJCQlzcC0+dHNfcHJld29yZGxlbiA9IChjaGFyX3UpU1RSTEVOKHByZXdvcmQpOwogCQkJc3AtPnRzX3NwbGl0b2ZmID0gc3AtPnRzX3R3b3JkbGVuOwogCQkJc3AtPnRzX3NwbGl0ZmlkeCA9IHNwLT50c19maWR4OwogCkBAIC0xMjQ4Miw4ICsxMjQ5NCw4IEBACiAKIAkJICAgIC8qIENoYW5nZSB0aGUgImZyb20iIHRvIHRoZSAidG8iIHN0cmluZy4gKi8KIAkJICAgICsrZGVwdGg7Ci0JCSAgICBmbCA9IFNUUkxFTihmdHAtPmZ0X2Zyb20pOwotCQkgICAgdGwgPSBTVFJMRU4oZnRwLT5mdF90byk7CisJCSAgICBmbCA9IChpbnQpU1RSTEVOKGZ0cC0+ZnRfZnJvbSk7CisJCSAgICB0bCA9IChpbnQpU1RSTEVOKGZ0cC0+ZnRfdG8pOwogCQkgICAgaWYgKGZsICE9IHRsKQogCQkgICAgewogCQkJbWNoX21lbW1vdmUocCArIHRsLCBwICsgZmwsIFNUUkxFTihwICsgZmwpICsgMSk7CkBAIC0xMjUxMSw4ICsxMjUyMyw4IEBACiAJICAgIGVsc2UKIAkJZ2FwID0gJmxwLT5scF9yZXBsYW5nLT5zbF9yZXA7CiAJICAgIGZ0cCA9IChmcm9tdG9fVCAqKWdhcC0+Z2FfZGF0YSArIHNwLT50c19jdXJpIC0gMTsKLQkgICAgZmwgPSBTVFJMRU4oZnRwLT5mdF9mcm9tKTsKLQkgICAgdGwgPSBTVFJMRU4oZnRwLT5mdF90byk7CisJICAgIGZsID0gKGludClTVFJMRU4oZnRwLT5mdF9mcm9tKTsKKwkgICAgdGwgPSAoaW50KVNUUkxFTihmdHAtPmZ0X3RvKTsKIAkgICAgcCA9IGZ3b3JkICsgc3AtPnRzX2ZpZHg7CiAJICAgIGlmIChmbCAhPSB0bCkKIAkgICAgewpAQCAtMTMwNTQsNyArMTMwNjYsNyBAQAogCWlmIChzbGFuZy0+c2xfc2FsLmdhX2xlbiA+IDAgJiYgc2xhbmctPnNsX3NieXRzICE9IE5VTEwpCiAJewogCSAgICAvKiBGcmVlIHRoZSBpbmZvIGFib3V0IGhhbmRsZWQgd29yZHMuICovCi0JICAgIHRvZG8gPSBzbGFuZy0+c2xfc291bmRkb25lLmh0X3VzZWQ7CisJICAgIHRvZG8gPSAoaW50KXNsYW5nLT5zbF9zb3VuZGRvbmUuaHRfdXNlZDsKIAkgICAgZm9yIChoaSA9IHNsYW5nLT5zbF9zb3VuZGRvbmUuaHRfYXJyYXk7IHRvZG8gPiAwOyArK2hpKQogCQlpZiAoIUhBU0hJVEVNX0VNUFRZKGhpKSkKIAkJewpAQCAtMTMxMDYsNyArMTMxMTgsNyBAQAogICAgIGhpID0gaGFzaF9sb29rdXAoJnNsYW5nLT5zbF9zb3VuZGRvbmUsIGdvb2R3b3JkLCBoYXNoKTsKICAgICBpZiAoSEFTSElURU1fRU1QVFkoaGkpKQogICAgIHsKLQlzZnQgPSAoc2Z0d29yZF9UICopYWxsb2Moc2l6ZW9mKHNmdHdvcmRfVCkgKyBTVFJMRU4oZ29vZHdvcmQpKTsKKwlzZnQgPSAoc2Z0d29yZF9UICopYWxsb2MoKHVuc2lnbmVkKShzaXplb2Yoc2Z0d29yZF9UKSArIFNUUkxFTihnb29kd29yZCkpKTsKIAlpZiAoc2Z0ICE9IE5VTEwpCiAJewogCSAgICBzZnQtPnNmdF9zY29yZSA9IHNjb3JlOwpAQCAtMTM1MzMsOCArMTM1NDUsOCBAQAogICAgIHBiYWQgPSBzdS0+c3VfYmFkcHRyICsgYmFkbGVuYXJnOwogICAgIGZvciAoOzspCiAgICAgewotCWdvb2RsZW4gPSBwZ29vZCAtIGdvb2R3b3JkOwotCWJhZGxlbiA9IHBiYWQgLSBzdS0+c3VfYmFkcHRyOworCWdvb2RsZW4gPSAoaW50KShwZ29vZCAtIGdvb2R3b3JkKTsKKwliYWRsZW4gPSAoaW50KShwYmFkIC0gc3UtPnN1X2JhZHB0cik7CiAJaWYgKGdvb2RsZW4gPD0gMCB8fCBiYWRsZW4gPD0gMCkKIAkgICAgYnJlYWs7CiAJbWJfcHRyX2JhY2soZ29vZHdvcmQsIHBnb29kKTsKQEAgLTEzODY3LDcgKzEzODc5LDcgQEAKIAkgICAgd29yZCA9IGlud29yZDsKIAllbHNlCiAJewotCSAgICAodm9pZClzcGVsbF9jYXNlZm9sZChpbndvcmQsIFNUUkxFTihpbndvcmQpLCBmd29yZCwgTUFYV0xFTik7CisJICAgICh2b2lkKXNwZWxsX2Nhc2Vmb2xkKGlud29yZCwgKGludClTVFJMRU4oaW53b3JkKSwgZndvcmQsIE1BWFdMRU4pOwogCSAgICB3b3JkID0gZndvcmQ7CiAJfQogCkBAIC0xNDU5MCw4ICsxNDYwMiw4IEBACiAJfQogICAgIH0KIAotICAgIGdvb2RsZW4gPSBTVFJMRU4oZ29vZHNvdW5kKTsKLSAgICBiYWRsZW4gPSBTVFJMRU4oYmFkc291bmQpOworICAgIGdvb2RsZW4gPSAoaW50KVNUUkxFTihnb29kc291bmQpOworICAgIGJhZGxlbiA9IChpbnQpU1RSTEVOKGJhZHNvdW5kKTsKIAogICAgIC8qIFJldHVybiBxdWlja2x5IGlmIHRoZSBsZW5naHRzIGFyZSB0b28gZGlmZmVyZW50IHRvIGJlIGZpeGVkIGJ5IHR3bwogICAgICAqIGNoYW5nZXMuICovCkBAIC0xNDgxMyw4ICsxNDgyNSw4IEBACiAgICAgZWxzZQogI2VuZGlmCiAgICAgewotCWJhZGxlbiA9IFNUUkxFTihiYWR3b3JkKSArIDE7Ci0JZ29vZGxlbiA9IFNUUkxFTihnb29kd29yZCkgKyAxOworCWJhZGxlbiA9IChpbnQpU1RSTEVOKGJhZHdvcmQpICsgMTsKKwlnb29kbGVuID0gKGludClTVFJMRU4oZ29vZHdvcmQpICsgMTsKICAgICB9CiAKICAgICAvKiBXZSB1c2UgImNudCIgYXMgYW4gYXJyYXk6IENOVChiYWR3b3JkX2lkeCwgZ29vZHdvcmRfaWR4KS4gKi8KQEAgLTE1NDUwLDcgKzE1NDYyLDcgQEAKIAkvKiBXaGVuIG1hdGNoaW5nIHdpdGggYSBwYXR0ZXJuIGFuZCB0aGVyZSBhcmUgbm8gcHJlZml4ZXMgb25seSB1c2UKIAkgKiBwYXJ0cyBvZiB0aGUgdHJlZSB0aGF0IG1hdGNoICJwYXQiLiAqLwogCWlmIChwYXQgIT0gTlVMTCAmJiBzbGFuZy0+c2xfcGJ5dHMgPT0gTlVMTCkKLQkgICAgcGF0bGVuID0gU1RSTEVOKHBhdCk7CisJICAgIHBhdGxlbiA9IChpbnQpU1RSTEVOKHBhdCk7CiAJZWxzZQogCSAgICBwYXRsZW4gPSAwOwogCkBAIC0xNTgwNCw3ICsxNTgxNiw3IEBACiAgICAgLyogR28gYmFjayB0byBzdGFydCBvZiB0aGUgd29yZC4gKi8KICAgICB3aGlsZSAocCA+IGxpbmUpCiAgICAgewotCWNvbCA9IHAgLSBsaW5lOworCWNvbCA9IChpbnQpKHAgLSBsaW5lKTsKIAltYl9wdHJfYmFjayhsaW5lLCBwKTsKIAlpZiAoIXNwZWxsX2lzd29yZHAocCwgY3VyYnVmKSkKIAkgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvc3ludGF4LmMgYi9zcmMvc3ludGF4LmMKaW5kZXggZDZjZTY5Yy4uYmFkZWQ2MCAxMDA2NDQKLS0tIGEvc3JjL3N5bnRheC5jCisrKyBiL3NyYy9zeW50YXguYwpAQCAtMjk4Niw3ICsyOTg2LDcgQEAKIAlpZiAocmVzdWx0LT5sbnVtID4gc3luX2J1Zi0+Yl9tbC5tbF9saW5lX2NvdW50KQogCSAgICBsZW4gPSAwOwogCWVsc2UKLQkgICAgbGVuID0gU1RSTEVOKG1sX2dldF9idWYoc3luX2J1ZiwgcmVzdWx0LT5sbnVtLCBGQUxTRSkpOworCSAgICBsZW4gPSAoaW50KVNUUkxFTihtbF9nZXRfYnVmKHN5bl9idWYsIHJlc3VsdC0+bG51bSwgRkFMU0UpKTsKIAlpZiAoY29sID4gbGVuKQogCSAgICByZXN1bHQtPmNvbCA9IGxlbjsKIAllbHNlCkBAIC0zOTUwLDcgKzM5NTAsNyBAQAogICAgICAqIFVuZm9ydHVuYXRlbHksIHRoaXMgbGlzdCBvZiBrZXl3b3JkcyBpcyBub3Qgc29ydGVkIG9uIGFscGhhYmV0IGJ1dCBvbgogICAgICAqIGhhc2ggdmFsdWUuLi4KICAgICAgKi8KLSAgICB0b2RvID0gaHQtPmh0X3VzZWQ7CisgICAgdG9kbyA9IChpbnQpaHQtPmh0X3VzZWQ7CiAgICAgZm9yIChoaSA9IGh0LT5odF9hcnJheTsgdG9kbyA+IDAgJiYgIWdvdF9pbnQ7ICsraGkpCiAgICAgewogCWlmICghSEFTSElURU1fRU1QVFkoaGkpKQpAQCAtNDAzOCw3ICs0MDM4LDcgQEAKICAgICBpbnQJCXRvZG87CiAKICAgICBoYXNoX2xvY2soaHQpOwotICAgIHRvZG8gPSBodC0+aHRfdXNlZDsKKyAgICB0b2RvID0gKGludClodC0+aHRfdXNlZDsKICAgICBmb3IgKGhpID0gaHQtPmh0X2FycmF5OyB0b2RvID4gMDsgKytoaSkKICAgICB7CiAJaWYgKCFIQVNISVRFTV9FTVBUWShoaSkpCkBAIC00MDg3LDcgKzQwODcsNyBAQAogICAgIGtleWVudHJ5X1QJKmtwOwogICAgIGtleWVudHJ5X1QJKmtwX25leHQ7CiAKLSAgICB0b2RvID0gaHQtPmh0X3VzZWQ7CisgICAgdG9kbyA9IChpbnQpaHQtPmh0X3VzZWQ7CiAgICAgZm9yIChoaSA9IGh0LT5odF9hcnJheTsgdG9kbyA+IDA7ICsraGkpCiAgICAgewogCWlmICghSEFTSElURU1fRU1QVFkoaGkpKQpkaWZmIC0tZ2l0IGEvc3JjL3RhZy5jIGIvc3JjL3RhZy5jCmluZGV4IGE5YWM1MzcuLjNmMGEzNWIgMTAwNjQ0Ci0tLSBhL3NyYy90YWcuYworKysgYi9zcmMvdGFnLmMKQEAgLTc5Niw3ICs3OTYsNyBAQAogCQkgICAgcGFyc2VfbWF0Y2gobWF0Y2hlc1tpXSwgJnRhZ3ApOwogCiAJCSAgICAvKiBTYXZlIHRoZSB0YWcgbmFtZSAqLwotCQkgICAgbGVuID0gdGFncC50YWduYW1lX2VuZCAtIHRhZ3AudGFnbmFtZTsKKwkJICAgIGxlbiA9IChpbnQpKHRhZ3AudGFnbmFtZV9lbmQgLSB0YWdwLnRhZ25hbWUpOwogCQkgICAgaWYgKGxlbiA+IDEyOCkKIAkJCWxlbiA9IDEyODsKIAkJICAgIHZpbV9zdHJuY3B5KHRhZ19uYW1lLCB0YWdwLnRhZ25hbWUsIGxlbik7CkBAIC04NzIsNyArODcyLDcgQEAKIAkJCVNUUkNBVChjbWQsICJcXFYiKTsKIAkJCWxlbiArPSAyOwogCi0JCQljbWRfbGVuID0gY21kX2VuZCAtIGNtZF9zdGFydCArIDE7CisJCQljbWRfbGVuID0gKGludCkoY21kX2VuZCAtIGNtZF9zdGFydCArIDEpOwogCQkJaWYgKGNtZF9sZW4gPiAoQ01EQlVGRlNJWkUgLSA1KSkKIAkJCSAgICBjbWRfbGVuID0gQ01EQlVGRlNJWkUgLSA1OwogCQkJU1RSTkNBVChjbWQsIGNtZF9zdGFydCwgY21kX2xlbik7CkBAIC0xNDkwLDcgKzE0OTAsNyBAQAogCSAgICB7CiAJCS8qIFByZWZlciBoZWxwIHRhZ3MgYWNjb3JkaW5nIHRvICdoZWxwbGFuZycuICBQdXQgdGhlCiAJCSAqIHR3by1sZXR0ZXIgbGFuZ3VhZ2UgbmFtZSBpbiBoZWxwX2xhbmdbXS4gKi8KLQkJaSA9IFNUUkxFTih0YWdfZm5hbWUpOworCQlpID0gKGludClTVFJMRU4odGFnX2ZuYW1lKTsKIAkJaWYgKGkgPiAzICYmIHRhZ19mbmFtZVtpIC0gM10gPT0gJy0nKQogCQkgICAgU1RSQ1BZKGhlbHBfbGFuZywgdGFnX2ZuYW1lICsgaSAtIDIpOwogCQllbHNlCkBAIC0xNTA3LDcgKzE1MDcsNyBAQAogCQlpZiAoKGZsYWdzICYgVEFHX0tFRVBfTEFORykKIAkJCSYmIGhlbHBfbGFuZ19maW5kID09IE5VTEwKIAkJCSYmIGN1cmJ1Zi0+Yl9mbmFtZSAhPSBOVUxMCi0JCQkmJiAoaSA9IFNUUkxFTihjdXJidWYtPmJfZm5hbWUpKSA+IDQKKwkJCSYmIChpID0gKGludClTVFJMRU4oY3VyYnVmLT5iX2ZuYW1lKSkgPiA0CiAJCQkmJiBjdXJidWYtPmJfZm5hbWVbaSAtIDFdID09ICd4JwogCQkJJiYgY3VyYnVmLT5iX2ZuYW1lW2kgLSA0XSA9PSAnLicKIAkJCSYmIFNUUk5JQ01QKGN1cmJ1Zi0+Yl9mbmFtZSArIGkgLSAzLCBoZWxwX2xhbmcsIDIpID09IDApCkBAIC0zNzY2LDcgKzM3NjYsNyBAQAogCSAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgKGVuZFstMV0gPT0gJ1xyJyB8fCBlbmRbLTFdID09ICdcbicpKQogCQktLWVuZDsKIAl9Ci0JbGVuID0gZW5kIC0gc3RhcnQ7CisJbGVuID0gKGludCkoZW5kIC0gc3RhcnQpOwogCWlmIChsZW4gPiBzaXplb2YoYnVmKSAtIDEpCiAJICAgIGxlbiA9IHNpemVvZihidWYpIC0gMTsKIAl2aW1fc3RybmNweShidWYsIHN0YXJ0LCBsZW4pOwpAQCAtMzg0MCw3ICszODQwLDcgQEAKIAkJCW4gPSBwOwogCQkJd2hpbGUgKCpwICE9IE5VTCAmJiAqcCA+PSAnICcgJiYgKnAgPCAxMjcgJiYgKnAgIT0gJzonKQogCQkJICAgICsrcDsKLQkJCWxlbiA9IHAgLSBuOworCQkJbGVuID0gKGludCkocCAtIG4pOwogCQkJaWYgKCpwID09ICc6JyAmJiBsZW4gPiAwKQogCQkJewogCQkJICAgIHMgPSArK3A7CmRpZmYgLS1naXQgYS9zcmMvdW5kby5jIGIvc3JjL3VuZG8uYwppbmRleCBhMjg2MWQ1Li5mOWU3MzVhIDEwMDY0NAotLS0gYS9zcmMvdW5kby5jCisrKyBiL3NyYy91bmRvLmMKQEAgLTEzOTMsNyArMTM5Myw3IEBACiAgICAgfQogICAgIGVsc2UKICNlbmRpZgotCXZpbV9zbnByaW50ZigoY2hhciAqKWJ1ZiwgYnVmbGVuLCAiJWxkIHNlY29uZHMgYWdvIiwKKwl2aW1fc25wcmludGYoKGNoYXIgKilidWYsIGJ1ZmxlbiwgXygiJWxkIHNlY29uZHMgYWdvIiksCiAJCQkJCQkgICAgIChsb25nKSh0aW1lKE5VTEwpIC0gdHQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3ZlcnNpb24uaCBiL3NyYy92ZXJzaW9uLmgKaW5kZXggN2Y2ZTk2ZS4uZjYzMWI4ZiAxMDA2NDQKLS0tIGEvc3JjL3ZlcnNpb24uaAorKysgYi9zcmMvdmVyc2lvbi5oCkBAIC0zNSw2ICszNSw2IEBACiAgKi8KICNkZWZpbmUgVklNX1ZFUlNJT05fTk9ET1QJInZpbTcwZSIKICNkZWZpbmUgVklNX1ZFUlNJT05fU0hPUlQJIjcuMGUiCi0jZGVmaW5lIFZJTV9WRVJTSU9OX01FRElVTQkiNy4wZSBCRVRBIgotI2RlZmluZSBWSU1fVkVSU0lPTl9MT05HCSJWSU0gLSBWaSBJTXByb3ZlZCA3LjBlIEJFVEEgKDIwMDYgQXByIDE2KSIKLSNkZWZpbmUgVklNX1ZFUlNJT05fTE9OR19EQVRFCSJWSU0gLSBWaSBJTXByb3ZlZCA3LjBlIEJFVEEgKDIwMDYgQXByIDE2LCBjb21waWxlZCAiCisjZGVmaW5lIFZJTV9WRVJTSU9OX01FRElVTQkiNy4wZTAxIEJFVEEiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkcJIlZJTSAtIFZpIElNcHJvdmVkIDcuMGUwMSBCRVRBICgyMDA2IEFwciAxNykiCisjZGVmaW5lIFZJTV9WRVJTSU9OX0xPTkdfREFURQkiVklNIC0gVmkgSU1wcm92ZWQgNy4wZTAxIEJFVEEgKDIwMDYgQXByIDE3LCBjb21waWxlZCAiCg==