ZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy1maWxlc3lzdGVtcy9zbWJuZXRmcy9zbWJuZXRmcy9jb25maWd1cmUucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtZmlsZXN5c3RlbXMvc21ibmV0ZnMvc21ibmV0ZnMvY29uZmlndXJlLnBhdGNoCmluZGV4IDU1Mjc1NjYuLmYyMmIzODkgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy1maWxlc3lzdGVtcy9zbWJuZXRmcy9zbWJuZXRmcy9jb25maWd1cmUucGF0Y2gKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1maWxlc3lzdGVtcy9yZWNpcGVzLWZpbGVzeXN0ZW1zL3NtYm5ldGZzL3NtYm5ldGZzL2NvbmZpZ3VyZS5wYXRjaApAQCAtMSw5ICsxLDcgQEAKLUluZGV4OiBnaXQvY29uZmlndXJlLmluCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDYtMTggMTY6MDY6MTYuMDQwNzIxMzQ5ICswMDAwCi0rKysgZ2l0L2NvbmZpZ3VyZS5hYwkyMDE0LTA3LTE4IDA3OjQ5OjE3LjA4NTU1MjI1NiArMDAwMAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKIEBAIC0xLDUgKzEsNSBAQAotIEFDX0lOSVQoW1NNQk5ldEZTXSxbMC42LjFdKQorIEFDX0lOSVQoW1NNQk5ldEZTXSxbMC42LjJdKQogLUFNX0lOSVRfQVVUT01BS0UKICtBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKICBBQ19DT05GSUdfSEVBREVSUyhbc3JjL2NvbmZpZy5oXSkKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy1maWxlc3lzdGVtcy9zbWJuZXRmcy9zbWJuZXRmc19naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtZmlsZXN5c3RlbXMvc21ibmV0ZnMvc21ibmV0ZnNfZ2l0LmJiCmluZGV4IGRkYjJjYzguLmQ5NDYwM2IgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy1maWxlc3lzdGVtcy9zbWJuZXRmcy9zbWJuZXRmc19naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1maWxlc3lzdGVtcy9yZWNpcGVzLWZpbGVzeXN0ZW1zL3NtYm5ldGZzL3NtYm5ldGZzX2dpdC5iYgpAQCAtMTEsMTUgKzExLDE0IEBACiBERVBFTkRTID0gImZ1c2Ugc2FtYmEiCiBERVBFTkRTX2FwcGVuZF9saWJjLW11c2wgPSAiIGxpYmV4ZWNpbmZvIgogCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZmVhdHVyZXNfY2hlY2sKKwogIyBzYW1iYSBkZXBlbmRzIG9uIGxpYnBhbQotaW5oZXJpdCBmZWF0dXJlc19jaGVjawogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInBhbSIKIAotaW5oZXJpdCBhdXRvdG9vbHMgZ2l0cGtndiBwa2djb25maWcKK1BWID0gIjAuNi4xK2dpdCR7U1JDUFZ9IgogCi1QS0dWID0gIiR7R0lUUEtHVlRBR30iCi0KLVNSQ1JFViA9ICJiYzZiOTRiMDE1ZmRhZjdjNGRhYjU2Y2NiOTk2ZWVjZWE4YmM0MzczIgorU1JDUkVWID0gImExMTdlZWM4ZGU3ZWQ3MjQ5ODcxZGE3M2RjYzM1MDI4M2NlNzIwNjkiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vc21ibmV0ZnMuZ2l0LnNvdXJjZWZvcmdlLm5ldC9naXRyb290L3NtYm5ldGZzL3NtYm5ldGZzO2JyYW5jaD1tYXN0ZXIgXAogICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy1zdXBwb3J0L2Z1c2UvZnVzZTNfMy44LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtc3VwcG9ydC9mdXNlL2Z1c2UzXzMuOS4wLmJiCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy1zdXBwb3J0L2Z1c2UvZnVzZTNfMy44LjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy1zdXBwb3J0L2Z1c2UvZnVzZTNfMy45LjAuYmIKaW5kZXggYjViYmUwNC4uMTlhMzQ5OSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1maWxlc3lzdGVtcy9yZWNpcGVzLXN1cHBvcnQvZnVzZS9mdXNlM18zLjguMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtc3VwcG9ydC9mdXNlL2Z1c2UzXzMuOS4wLmJiCkBAIC0xMyw4ICsxMyw4IEBACiAKIFNSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2xpYmZ1c2UvbGliZnVzZS9yZWxlYXNlcy9kb3dubG9hZC9mdXNlLSR7UFZ9L2Z1c2UtJHtQVn0udGFyLnh6IFwKICIKLVNSQ19VUklbbWQ1c3VtXSA9ICJmMTg0MDA0Y2QzNzI0ZjU3OWNkNjAyZmE1MjMyNjgxYiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI0YTQ2NGY2ZGY3ODJhMWRjYTFmN2U4NWJmNjRmZjZlY2U5NTQ3YjM4OTU1N2FhZTQxNjAzNzFjYjFjODk4ZDYxIgorU1JDX1VSSVttZDVzdW1dID0gIjVkYzJiZTIxYzBkMDZjN2VhY2UzNDA5OTZlOGEzN2UyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZjYjcwNzlhMWJiNGU1MTAzNzdiNDI3ZDFjNWMzN2MzNDkyODFkNDk4ZTI0OWFlMGMyMzc5YjRjZjUwMDU5YzIiCiAKIFMgPSAiJHtXT1JLRElSfS9mdXNlLSR7UFZ9IgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMvdWZzLXRvb2wvdWZzLXRvb2xfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1maWxlc3lzdGVtcy9yZWNpcGVzLXV0aWxzL3Vmcy10b29sL3Vmcy10b29sX2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA4YWMzYy4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMvdWZzLXRvb2wvdWZzLXRvb2xfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotU1VNTUFSWSA9ICJUb29sIHRvIGFjY2VzcyBVRlMgKFVuaXZlcnNhbCBGbGFzaCBTdG9yYWdlKSBkZXZpY2VzIgotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgotCi1QViA9ICIxLjMrZ2l0JHtTUkNQVn0iCi0KLUJSQU5DSCA/PSAiZGV2IgotCi1TUkNSRVYgPSAiOGIwMGUzMzAwM2I1N2Q3MDcxOTQzZjYzODYzZmNmOGNjNDhkNWJlOSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3dlc3Rlcm5kaWdpdGFsY29ycG9yYXRpb24vdWZzLXRvb2wuZ2l0O3Byb3RvY29sPWdpdDticmFuY2g9JHtCUkFOQ0h9IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1FWFRSQV9PRU1BS0UgPSAiQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9IENDPSIke0NDfSIgQ0ZMQUdTPSIke0NGTEFHU30iIgotCi1kb19jb25maWd1cmUoKSB7Ci0Jc2VkIC1pIC1lICJzfC1zdGF0aWMkfHxnIiAke1N9L01ha2VmaWxlCi19Ci1kb19pbnN0YWxsKCkgewotCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KLQlpbnN0YWxsIC1jIC1tIDc1NSAke1N9L3Vmcy10b29sICR7RH0ke2JpbmRpcn0vCi19CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMvdWZzLXV0aWxzL3Vmcy11dGlscy8wMDAxLVJlcGxhY2UtdV9pbnRYWF90LXdpdGgta2VybmVsLXR5cGVkZWZzLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1maWxlc3lzdGVtcy9yZWNpcGVzLXV0aWxzL3Vmcy11dGlscy91ZnMtdXRpbHMvMDAwMS1SZXBsYWNlLXVfaW50WFhfdC13aXRoLWtlcm5lbC10eXBlZGVmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlhM2NmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1maWxlc3lzdGVtcy9yZWNpcGVzLXV0aWxzL3Vmcy11dGlscy91ZnMtdXRpbHMvMDAwMS1SZXBsYWNlLXVfaW50WFhfdC13aXRoLWtlcm5lbC10eXBlZGVmcy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDZjZjZmNWI5YzM5ZGZkMGQ0NmYyMDY5YzNiYWVhYjkyYWU5ODAzNjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNSBEZWMgMjAxOSAwMDo1ODoxMyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBSZXBsYWNlIHVfaW50WFhfdCB3aXRoIGtlcm5lbCB0eXBlZGVmcworCit1X2ludFhYX3QgcmVxdWlyZXMgaW5jbHVkaW5nIHN5cy90eXBlcy5oIHdoaWNoIG1pZ2h0IG5vdCB3b3JrIGluIGtlcm5lbAorY29kZSwgaWYgdGhpcyBoZWFkZXIgaXMgdXNlZCBpbiBhIGtlcm5lbCBtb2R1bGUKKworRml4ZXMKK3wgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHVmcy5jOjE2OgorfCBJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi91ZnMuaDo5OgorfCAuL3Njc2lfYnNnX3V0aWwuaDoxMzE6MjogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICd1X2ludDE2X3QnOyBkaWQgeW91IG1lYW4gJ3VpbnQxNl90Jz8KK3wgICAgICAgICB1X2ludDE2X3QgcmVzdWx0OworfCAgICAgICAgIF5+fn5+fn5+fgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3dlc3Rlcm5kaWdpdGFsY29ycG9yYXRpb24vdWZzLXV0aWxzL3B1bGwvMjNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzY3NpX2JzZ191dGlsLmggfCAxOCArKysrKysrKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2NzaV9ic2dfdXRpbC5oIGIvc2NzaV9ic2dfdXRpbC5oCitpbmRleCAzZjhhNDgyLi40OTdjM2FlIDEwMDY0NAorLS0tIGEvc2NzaV9ic2dfdXRpbC5oCisrKysgYi9zY3NpX2JzZ191dGlsLmgKK0BAIC0xMjEsMTUgKzEyMSwxNSBAQCBzdHJ1Y3QgdWZzX2JzZ19yZXBseSB7CisgI2VuZGlmIC8qIFNDU0lfQlNHX1VGU19ILiovCisgCisgc3RydWN0IHJwbWJfZnJhbWUgeworLQl1X2ludDhfdCAgc3R1ZmZbMTk2XTsKKy0JdV9pbnQ4X3QgIGtleV9tYWNbMzJdOworLQl1X2ludDhfdCAgZGF0YVsyNTZdOworLQl1X2ludDhfdCAgbm9uY2VbMTZdOworLQl1X2ludDMyX3Qgd3JpdGVfY291bnRlcjsKKy0JdV9pbnQxNl90IGFkZHI7CistCXVfaW50MTZfdCBibG9ja19jb3VudDsKKy0JdV9pbnQxNl90IHJlc3VsdDsKKy0JdV9pbnQxNl90IHJlcV9yZXNwOworKwlfX3U4ICBzdHVmZlsxOTZdOworKwlfX3U4ICBrZXlfbWFjWzMyXTsKKysJX191OCAgZGF0YVsyNTZdOworKwlfX3U4ICBub25jZVsxNl07CisrCV9fdTMyIHdyaXRlX2NvdW50ZXI7CisrCV9fdTE2IGFkZHI7CisrCV9fdTE2IGJsb2NrX2NvdW50OworKwlfX3UxNiByZXN1bHQ7CisrCV9fdTE2IHJlcV9yZXNwOworIH07CisgCisgI2RlZmluZSBCU0dfUkVQTFlfU1ogKHNpemVvZihzdHJ1Y3QgdWZzX2JzZ19yZXBseSkpCistLSAKKzIuMjQuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMvdWZzLXV0aWxzL3Vmcy11dGlsc19naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMvdWZzLXV0aWxzL3Vmcy11dGlsc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkZDA4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy11dGlscy91ZnMtdXRpbHMvdWZzLXV0aWxzX2dpdC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlRvb2wgdG8gYWNjZXNzIFVGUyAoVW5pdmVyc2FsIEZsYXNoIFN0b3JhZ2UpIGRldmljZXMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1BWID0gIjEuNitnaXQke1NSQ1BWfSIKKworQlJBTkNIID89ICJkZXYiCisKK1NSQ1JFViA9ICJhM2NmOTNiNjZmNDYwNmE0NjM1NGNmODg0ZDI0YWE5NjY2NjFmODQ4IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vd2VzdGVybmRpZ2l0YWxjb3Jwb3JhdGlvbi91ZnMtdXRpbHMuZ2l0O3Byb3RvY29sPWdpdDticmFuY2g9JHtCUkFOQ0h9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtUmVwbGFjZS11X2ludFhYX3Qtd2l0aC1rZXJuZWwtdHlwZWRlZnMucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRU1BS0UgPSAiQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9IENDPSIke0NDfSIgQ0ZMQUdTPSIke0NGTEFHU30iIgorCitDRkxBR1NfYXBwZW5kX21pcHNhcmNobjY0ID0gIiAtRF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyAtRF9HTlVfU09VUkNFIgorCitkb19jb25maWd1cmUoKSB7CisJc2VkIC1pIC1lICJzfC1zdGF0aWMkfHxnIiAke1N9L01ha2VmaWxlCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtRCAtbSA3NTUgJHtTfS91ZnMtdXRpbHMgJHtEfSR7YmluZGlyfS91ZnMtdXRpbHMKK30KKworUFJPVklERVMgKz0gInVmcy10b29sIgorCitSUFJPVklERVNfJHtQTn0gKz0gInVmcy10b29sIgorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMveGZzcHJvZ3MvZmlsZXMvMDAwMS1idWlsZC1DaGVjay1mb3Itc3luY19maWxlX3JhbmdlLWxpYmMtZnVuY3Rpb24ucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMveGZzcHJvZ3MvZmlsZXMvMDAwMS1idWlsZC1DaGVjay1mb3Itc3luY19maWxlX3JhbmdlLWxpYmMtZnVuY3Rpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MDcxYWUuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1maWxlc3lzdGVtcy9yZWNpcGVzLXV0aWxzL3hmc3Byb2dzL2ZpbGVzLzAwMDEtYnVpbGQtQ2hlY2stZm9yLXN5bmNfZmlsZV9yYW5nZS1saWJjLWZ1bmN0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotRnJvbSAxYTRjOWViYmI4NzMxZjJlMzYzMWQ3N2I3ZWVhZjNjMzczMTQxZDg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMzEgSmFuIDIwMTggMjE6Mjg6NTMgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IENoZWNrIGZvciBzeW5jX2ZpbGVfcmFuZ2UgbGliYyBmdW5jdGlvbgotCi1nbGliYyAyLjI3IG5vdyBoYXMgc3luY19maWxlX3JhbmdlKCkKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBpbmNsdWRlL2J1aWxkZGVmcy5pbiB8IDEgKwotIGlvL01ha2VmaWxlICAgICAgICAgIHwgNSArKysrLQotIGlvL2lvLmggICAgICAgICAgICAgIHwgMiArLQotIGlvL3N5bmNfZmlsZV9yYW5nZS5jIHwgMyArKysKLSA0IGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2luY2x1ZGUvYnVpbGRkZWZzLmluIGIvaW5jbHVkZS9idWlsZGRlZnMuaW4KLWluZGV4IGQzOGRjN2UuLjcwNmVjYTYgMTAwNjQ0Ci0tLS0gYS9pbmNsdWRlL2J1aWxkZGVmcy5pbgotKysrIGIvaW5jbHVkZS9idWlsZGRlZnMuaW4KLUBAIC05NCw2ICs5NCw3IEBAIEhBVkVfRklFTUFQID0gQGhhdmVfZmllbWFwQAotIEhBVkVfUFJFQURWID0gQGhhdmVfcHJlYWR2QAotIEhBVkVfUFdSSVRFVjIgPSBAaGF2ZV9wd3JpdGV2MkAKLSBIQVZFX0NPUFlfRklMRV9SQU5HRSA9IEBoYXZlX2NvcHlfZmlsZV9yYW5nZUAKLStIQVZFX05SX0NPUFlfRklMRV9SQU5HRSA9IEBoYXZlX25yX2NvcHlfZmlsZV9yYW5nZUAKLSBIQVZFX1NZTkNfRklMRV9SQU5HRSA9IEBoYXZlX3N5bmNfZmlsZV9yYW5nZUAKLSBIQVZFX1NZTkNGUyA9IEBoYXZlX3N5bmNmc0AKLSBIQVZFX1JFQURESVIgPSBAaGF2ZV9yZWFkZGlyQAotZGlmZiAtLWdpdCBhL2lvL01ha2VmaWxlIGIvaW8vTWFrZWZpbGUKLWluZGV4IDQ4NGUyYjUuLjI3NTFkY2IgMTAwNjQ0Ci0tLS0gYS9pby9NYWtlZmlsZQotKysrIGIvaW8vTWFrZWZpbGUKLUBAIC01MywxMCArNTMsMTMgQEAgZWxzZQotIExTUkNGSUxFUyArPSBmaWVtYXAuYwotIGVuZGlmCi0gCi0taWZlcSAoJChIQVZFX0NPUFlfRklMRV9SQU5HRSkseWVzKQotK2lmZXEgKCQoSEFWRV9OUl9DT1BZX0ZJTEVfUkFOR0UpLHllcykKLSBDRklMRVMgKz0gY29weV9maWxlX3JhbmdlLmMKLStMQ0ZMQUdTICs9IC1ESEFWRV9OUl9DT1BZX0ZJTEVfUkFOR0UKLStpZmVxICgkKEhBVkVfQ09QWV9GSUxFX1JBTkdFKSx5ZXMpCi0gTENGTEFHUyArPSAtREhBVkVfQ09QWV9GSUxFX1JBTkdFCi0gZW5kaWYKLStlbmRpZgotIAotIGlmZXEgKCQoSEFWRV9TWU5DX0ZJTEVfUkFOR0UpLHllcykKLSBDRklMRVMgKz0gc3luY19maWxlX3JhbmdlLmMKLWRpZmYgLS1naXQgYS9pby9pby5oIGIvaW8vaW8uaAotaW5kZXggNjQ2OTE3OS4uNjc4YjNkNyAxMDA2NDQKLS0tLSBhL2lvL2lvLmgKLSsrKyBiL2lvL2lvLmgKLUBAIC0xNDYsNyArMTQ2LDcgQEAgZXh0ZXJuIHZvaWQJCWZpZW1hcF9pbml0KHZvaWQpOwotICNkZWZpbmUgZmllbWFwX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCi0gI2VuZGlmCi0gCi0tI2lmZGVmIEhBVkVfQ09QWV9GSUxFX1JBTkdFCi0rI2lmIGRlZmluZWQoSEFWRV9OUl9DT1BZX0ZJTEVfUkFOR0UpICYmICFkZWZpbmVkKEhBVkVfQ09QWV9GSUxFX1JBTkdFKQotIGV4dGVybiB2b2lkCQljb3B5X3JhbmdlX2luaXQodm9pZCk7Ci0gI2Vsc2UKLSAjZGVmaW5lIGNvcHlfcmFuZ2VfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKLWRpZmYgLS1naXQgYS9pby9zeW5jX2ZpbGVfcmFuZ2UuYyBiL2lvL3N5bmNfZmlsZV9yYW5nZS5jCi1pbmRleCAzMGJiYzkzLi42YzQ5ZDczIDEwMDY0NAotLS0tIGEvaW8vc3luY19maWxlX3JhbmdlLmMKLSsrKyBiL2lvL3N5bmNfZmlsZV9yYW5nZS5jCi1AQCAtNCw2ICs0LDcgQEAKLSAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAqLwotIAotKyNpZm5kZWYgSEFWRV9DT1BZX0ZJTEVfUkFOR0UKLSAjaW5jbHVkZSAiY29tbWFuZC5oIgotICNpbmNsdWRlICJpbnB1dC5oIgotICNpbmNsdWRlICJpbml0LmgiCi1AQCAtOTIsMyArOTMsNSBAQCBzeW5jX3JhbmdlX2luaXQodm9pZCkKLSAKLSAJYWRkX2NvbW1hbmQoJnN5bmNfcmFuZ2VfY21kKTsKLSB9Ci0rCi0rI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMveGZzcHJvZ3MveGZzcHJvZ3NfNS4yLjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWZpbGVzeXN0ZW1zL3JlY2lwZXMtdXRpbHMveGZzcHJvZ3MveGZzcHJvZ3NfNS4yLjEuYmIKaW5kZXggNWFiMWQwMi4uMzRiMzM4NiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1maWxlc3lzdGVtcy9yZWNpcGVzLXV0aWxzL3hmc3Byb2dzL3hmc3Byb2dzXzUuMi4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZmlsZXN5c3RlbXMvcmVjaXBlcy11dGlscy94ZnNwcm9ncy94ZnNwcm9nc181LjIuMS5iYgpAQCAtOCw3ICs4LDYgQEAKIERFUEVORFMgPSAidXRpbC1saW51eCB1dGlsLWxpbnV4LW5hdGl2ZSIKIFNSQ19VUkkgPSAiaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvZnMveGZzL3hmc3Byb2dzLyR7QlB9LnRhci54eiBcCiAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfZmxhZ3NfZnJvbV9idWlsZF9mbGFncy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLUNoZWNrLWZvci1zeW5jX2ZpbGVfcmFuZ2UtbGliYy1mdW5jdGlvbi5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNoZWNrLWZvci1NQVBfU1lOQy1pbi1zeXMtbW1hbi5oLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDItaW5jbHVkZS1pbmNsdWRlLXhmcy1saW51eC5oLWFmdGVyLXN5cy1tbWFuLmgucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1zdXBwb3J0LXVzcm1lcmdlLnBhdGNoIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1hcHBzL3BpbnBvaW50L3BpbnBvaW50X2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1hcHBzL3BpbnBvaW50L3BpbnBvaW50X2dpdC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIyNjg4Zi4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtYXBwcy9waW5wb2ludC9waW5wb2ludF9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1TVU1NQVJZID0gIkEgc2ltcGxlIHByZXNlbnRhdGlvbiB0b29sIGZvciBoYWNrZXJzIgotREVTQ1JJUFRJT04gPSAiUGlucG9pbnQgaXMgYSBzaW1wbGUgcHJlc2VudGF0aW9uIHRvb2wgdGhhdCBob3BlcyB0byBhdm9pZCBhdWRpZW5jZSBkZWF0aCBcCi0gICAgICAgICAgICAgICBieSBidWxsZXQgcG9pbnQgYW5kIGluc3RlYWQgZW5jb3VyYWdlIHByZXNlbnRhdGlvbnMgY29udGFpbmluZyBiZWF1dGlmdWwgXAotICAgICAgICAgICAgICAgaW1hZ2VzIGFuZCBzbWFsbCBhbW91bnRzIG9mIGNvbmNpc2UgdGV4dCBpbiBzbGlkZXMuIgotU0VDVElPTiA9ICJ4MTEvbXVsdGltZWRpYSIKLUxJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9waW5wb2ludC5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTc7bWQ1PTIwMWQ0MzgyODM2MDdkYTM5M2ZhZTZhY2EwODU0NTRjIgotCi1ERVBFTkRTID0gImdsaWItMi4wIGdkay1waXhidWYgY29nbC0xLjAgY2x1dHRlci0xLjAgY2x1dHRlci1nc3QtMy4wIGxpYnJzdmciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIGZlYXR1cmVzX2NoZWNrCi0KLSMgY29nbCByZXF1aXJlcyBvcGVuZ2wKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJvcGVuZ2wiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmdub21lLm9yZy9waW5wb2ludCIKLQotU1JDUkVWID0gIjgwYTA1NmM1N2U4MTlkMGI3NTAzNTQyNDYzODgxM2IwNjcwODMwZTEiCi1QViA9ICIwLjEuNCtnaXRyJHtTUkNQVn0iCi0KLVMgPSAiJHtXT1JLRElSfS9naXQiCi0KLVJSRUNPTU1FTkRTXyR7UE59ID0gImdkay1waXhidWYtbG9hZGVyLWpwZWcgZ2RrLXBpeGJ1Zi1sb2FkZXItcG5nIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2V2aW5jZS9ldmluY2VfMy4zNC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2V2aW5jZS9ldmluY2VfMy4zNC4yLmJiCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9ldmluY2UvZXZpbmNlXzMuMzQuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2V2aW5jZS9ldmluY2VfMy4zNC4yLmJiCmluZGV4IGUzMDE2MmMuLjhmNjY5YzkgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9ldmluY2UvZXZpbmNlXzMuMzQuMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZXZpbmNlL2V2aW5jZV8zLjM0LjIuYmIKQEAgLTE4LDggKzE4LDggQEAKIAogaW5oZXJpdCBnbm9tZWJhc2UgaXRzdG9vbCBnbm9tZS1oZWxwIHBrZ2NvbmZpZyBnc2V0dGluZ3MgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBnZXR0ZXh0IGZlYXR1cmVzX2NoZWNrCiAKLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjc3YjM4YjYyNTAwOGY1OTQwZTliZDRiM2QzOGU4Y2Y4IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiODVlNDA3Y2RlMzk2MTQ3YjI0OTEyMGQ4MTZjNzcxNWZiNmRmMTkxY2E1NjFjZjY1ZmYzNTU0YTVkNjc2MjZkZiIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjllOWU4MmZhOGY2MDQ1YWQ3ODE3MTU3ZDkzMzVkMTg1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiM2NjMDk1NWYxMTIwNGUzYTJkYjFjN2FiOTliODY2NjkyNzQ5NTkyMjU3NDg1Yjg3MzA0MTM0YWQ2OWRhMDYxNyIKIFNSQ19VUkkgKz0gIiBcCiAgICAgZmlsZTovLzAwMDEtQWRkLWZvcm1hdC1hdHRyaWJ1dGUtdG8tX3N5bmN0ZXhfbWFsbG9jLnBhdGNoIFwKICAgICBmaWxlOi8vMDAwMi1hZGQtYS1mb3JtYXR0aW5nLWF0dHJpYnV0ZS1jaGVjay5wYXRjaCBcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZXZvbHV0aW9uLWRhdGEtc2VydmVyL2V2b2x1dGlvbi1kYXRhLXNlcnZlci5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZXZvbHV0aW9uLWRhdGEtc2VydmVyL2V2b2x1dGlvbi1kYXRhLXNlcnZlci5pbmMKaW5kZXggMDg5M2Y4ZS4uMWVhZTNkZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2V2b2x1dGlvbi1kYXRhLXNlcnZlci9ldm9sdXRpb24tZGF0YS1zZXJ2ZXIuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9ldm9sdXRpb24tZGF0YS1zZXJ2ZXIvZXZvbHV0aW9uLWRhdGEtc2VydmVyLmluYwpAQCAtOSw3ICs5LDcgQEAKIAogaW5oZXJpdCBnbm9tZWJhc2UgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCiAKLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImQxNzAxODc1YmJhYzgwZDZkNjJlOWFjZmM2YzQzYmVhIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNmZmNTZiYTA0Y2I2MzllNjI3ZmU5ZDZlMGFkYTEwNmExMGNhZGQ2OGEwZDUzYjhlYzcyYjRlMjg1ZGY1M2FiZSIKLVBWID0gIjMuMzQuMSIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjY4N2Q2ZDcyNDJkNjBhOGEzYTMzMjJlZWU2YTQ1ZGNhIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZDJkZmFjNWNhNzZlMDVlODcyZmJiMDZhNTdjYWUwZGFjZTY0ODE4YzRkY2UxZTkwNmIwMzk2ODg4MjcwYzNhOSIKK1BWID0gIjMuMzQuMyIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2ZpbGUtcm9sbGVyL2ZpbGUtcm9sbGVyXzMuMzIuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9maWxlLXJvbGxlci9maWxlLXJvbGxlcl8zLjMyLjMuYmIKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2ZpbGUtcm9sbGVyL2ZpbGUtcm9sbGVyXzMuMzIuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2ZpbGUtcm9sbGVyL2ZpbGUtcm9sbGVyXzMuMzIuMy5iYgppbmRleCA3ZGNmM2U5Li4zYWI5NjY4IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZmlsZS1yb2xsZXIvZmlsZS1yb2xsZXJfMy4zMi4yLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9maWxlLXJvbGxlci9maWxlLXJvbGxlcl8zLjMyLjMuYmIKQEAgLTcsMTUgKzcsMTQgQEAKIERFUEVORFMgPSAiIFwKICAgICBnbGliLTIuMC1uYXRpdmUgXAogICAgIGd0ayszIFwKLSAgICBuYXV0aWx1cyBcCiAgICAgbGliYXJjaGl2ZSBcCiAgICAgbGlibm90aWZ5IFwKICIKIAogaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGl0c3Rvb2wgZ25vbWUtaGVscCBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgogCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlNzk3MTViYjI0MDBkZjgzYzBmNjdjYzBjY2UyYjY1NSIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImM2MGE3OWUwYmFmNzRjYjFjMDlhMWM4ZjVmZmUwZDZlMzExMjI3Y2ExNGVjYzViMTE1NmJlYjM3MTUzNDFhNzEiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1ZTA5OGJiMjU0ZDM0ZjQ4YTliNTc2MWI0NjhmNDI0MCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImJlMTExZmI4NzdkYzFlYjQ4N2VjNWQ2ZTJiNzJiYTVkZWZlMWFiODAzM2E2YTZiOWI5MDQ0YTJhNzc4N2UyMmEiCiAKIFBBQ0tBR0VDT05GSUdbbmF1dGlsdXNdID0gIi1EbmF1dGlsdXMtYWN0aW9ucz10cnVlLC1EbmF1dGlsdXMtYWN0aW9ucz1mYWxzZSxuYXV0aWx1cyIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dkbS9nZG0vMDAwMS1FbnN1cmUtcGFtLWZpbGUtaW5zdGFsbGF0aW9uLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dkbS9nZG0vMDAwMS1FbnN1cmUtcGFtLWZpbGUtaW5zdGFsbGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNjJkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ2RtL2dkbS8wMDAxLUVuc3VyZS1wYW0tZmlsZS1pbnN0YWxsYXRpb24ucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRnJvbSBmN2JiYTUzYWRmOGEyNmY5MDA0NDJhMDViYjk4MzI2NzQ3YzM5MmI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMyBEZWMgMjAxOSAwMDoyNDoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBFbnN1cmUgcGFtLWZpbGUgaW5zdGFsbGF0aW9uCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0FsbCB0aGUgZGV0ZWN0aW9uIG1hZ2ljIGRvZXMgbm90IHdvcmsgZm9yIHVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Utc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnbWFpbC5jb20+CistLS0KKyBkYXRhL01ha2VmaWxlLmFtIHwgMTIgKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RhdGEvTWFrZWZpbGUuYW0gYi9kYXRhL01ha2VmaWxlLmFtCitpbmRleCBiZGE5MTYwLi5kYmMzZWEzIDEwMDY0NAorLS0tIGEvZGF0YS9NYWtlZmlsZS5hbQorKysrIGIvZGF0YS9NYWtlZmlsZS5hbQorQEAgLTI5NiwyMiArMjk2LDEyIEBAIGVuZGlmCisgCQljaG93biByb290OnJvb3QgJChERVNURElSKSQobG9nZGlyKSB8fCA6IDsgXAorIAlmaQorIAorLQlzeXN0ZW09YHVuYW1lYDsgXAorLQlpZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS9zZWN1cml0eS9wYW1fYXBwbC5oOyB0aGVuIFwKKy0JICBpZiB0ZXN0ICchJyAtZCAkKERFU1RESVIpJChQQU1fUFJFRklYKS9wYW0uZDsgdGhlbiBcCisgCQkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKFBBTV9QUkVGSVgpL3BhbS5kOyBcCisgCQljaG1vZCA3NTUgJChERVNURElSKSQoUEFNX1BSRUZJWCkvcGFtLmQ7IFwKKy0JICAgZmk7IFwKKy0JICAgaWYgdGVzdCAkJHN5c3RlbSA9IExpbnV4OyB0aGVuIFwKKyAJICAgICBmb3IgcGFtZmlsZSBpbiAkKHBhbV9maWxlcyk7IGRvIFwKKyAJICAgICAgIGJuPSQkKGJhc2VuYW1lICQkcGFtZmlsZSAucGFtKTsgXAorIAkgICAgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJHBhbWZpbGUgJChERVNURElSKSQoUEFNX1BSRUZJWCkvcGFtLmQvJCRibjsgXAorLQkgICAgIGRvbmU7IFwKKy0JICAgZmk7IFwKKy0JICAgaWYgdGVzdCAkJHN5c3RlbSA9IFN1bk9TOyB0aGVuIFwKKy0JCWVjaG8gIlBsZWFzZSBhZGQgUEFNIGF1dGhlbnRpY2F0aW9uIGZvciBnZG0sIGdkbS1hdXRvbG9naW4gYW5kIGdkbS13ZWxjb21lIGluICQoUEFNX1BSRUZJWCkvcGFtLmNvbmYhIjsgXAorLQkgICBmaTsgXAorLQlmaQorKwkgICAgIGRvbmU7CisgCisgCWlmIHRlc3QgJyEnIC1kICQoREVTVERJUikkKHhhdXRoZGlyKTsgdGhlbiBcCisgCQkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHhhdXRoZGlyKTsgXAorLS0gCisyLjIxLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dkbS9nZG1fMy4zNC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dkbS9nZG1fMy4zNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2JmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ2RtL2dkbV8zLjM0LjEuYmIKQEAgLTAsMCArMSw1NiBAQAorU1VNTUFSWSA9ICJHTk9NRSBEaXNwbGF5IE1hbmFnZXIiCitMSUNFTlNFPSJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitERVBFTkRTID0gIiBcCisgICAgZGNvbmYtbmF0aXZlIFwKKyAgICBndGsrMyBcCisgICAgYWNjb3VudHNzZXJ2aWNlIFwKKyAgICBsaWJjYW5iZXJyYSBcCisgICAgbGlicGFtIFwKKyIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSBzeXN0ZW1kIHBhbSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdvYmplY3QtaW50cm9zcGVjdGlvbiBnZXR0ZXh0IHN5c3RlbWQgdXNlcmFkZCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZmVhdHVyZXNfY2hlY2sKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNjVkMWZkNGJiODVlOGIxMzNkMWNiZmZiODBlY2Y2MmUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlODVkZjY1N2FhOGQ5MzYxYWY0ZmIxMjIwMTRkOGYxMjNhOTNiZmU0NWE3NjYyZmJhMmIzNzNkODM5ZGJkOGQzIgorU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtRW5zdXJlLXBhbS1maWxlLWluc3RhbGxhdGlvbi5wYXRjaCIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS13aXRob3V0LXBseW1vdXRoIFwKKyAgICAtLXdpdGgtZGVmYXVsdC1wYW0tY29uZmlnPW9wZW5lbWJlZGRlZCBcCisgICAgLS13aXRoLXBhbS1tb2QtZGlyPSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5IFwKKyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gLXJmICR7RH0vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9nZG0gLS11c2VyLWdyb3VwIGdkbSIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiR7QlBOfS5zZXJ2aWNlIgorCisjIFNvbWUgZ25vbWUgY29tcG9uZW50cyAtIGFzIGdub21lLXBhbmVsIGFuZCBnbm9tZS1zaGVsbCAoISEpIC0gcmVxdWlyZSBnZG0KKyMgY29tcG9uZW50cy4gVG8gYWxsb3cgZ25vbWUtaW1hZ2VzIHVzaW5nIGRpZmZlcmVudCBkaXNwbGF5LW1hbmFnZXIsIHNwbGl0IHRoZW0KKyMgb3V0IGludG8gYSBzZXBlcmF0ZSBwYWNrYWdlLgorUEFDS0FHRV9CRUZPUkVfUE4gPSAiJHtQTn0tYmFzZSIKK0ZJTEVTXyR7UE59LWJhc2UgPSAiIFwKKyAgICAke2RhdGFkaXJ9L2dsaWItMi4wIFwKKyAgICAke2RhdGFkaXJ9L2dub21lLXNlc3Npb24gXAorICAgICR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKKyAgICAke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMCBcCisiCisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9nZG0vY3VzdG9tLmNvbmYiCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2Rjb25mIFwKKyAgICAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fZ2RtLnNvIFwKKyAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAke3N5c3RlbWRfdW5pdGRpcn0gXAorIgorCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tYmFzZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dlZGl0L2dlZGl0XzMuMzQuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nZWRpdC9nZWRpdF8zLjM0LjEuYmIKc2ltaWxhcml0eSBpbmRleCA4NCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dlZGl0L2dlZGl0XzMuMzQuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dlZGl0L2dlZGl0XzMuMzQuMS5iYgppbmRleCBlOWNkZDhhLi4yMDgwNmJkIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ2VkaXQvZ2VkaXRfMy4zNC4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nZWRpdC9nZWRpdF8zLjM0LjEuYmIKQEAgLTIzLDggKzIzLDggQEAKIAogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKIAotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZWM2NjMyZmE3M2Q5ZWE2YzgxN2U3NGE5OGQxNmVhYjYiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIzZTk1ZTUxZDNjY2I0OTVhOWFjOTVhYTNlZDdmZThmZTM3Y2NkZTdjNjc4ZjM3ZmEzY2VhNjg0YmM3MWQ1MDdlIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNGJjYTFkMGExM2RiMTg2Y2Q4NDYxOWI0YmZmNDIyMzgiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlYmY5ZWY0ZTE5ODMxNjk5ZDI2YmI5M2NlMDI5ZWRmZWQ2NTQxNmQ3YzExMTQ3ODM1ZmMzNzBkNzM0MjhkNWM2IgogCiBHVEtET0NfTUVTT05fT1BUSU9OID0gImRvY3VtZW50YXRpb24iCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nanMvZ2pzLzAwMDEtRGlzYWJsZS10ZXN0cy1vbi1ob3N0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dqcy9nanMvMDAwMS1EaXNhYmxlLXRlc3RzLW9uLWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1MzIxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nanMvZ2pzLzAwMDEtRGlzYWJsZS10ZXN0cy1vbi1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gOTUzNzlkZTIxMzI3ODZmODU1ZThjYWVjMWZkNTg2OTIyNTc3NGQwMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE4IE1heSAyMDE5IDAxOjE0OjA3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIERpc2FibGUgdGVzdHMgb24gaG9zdAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLXNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNCArLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBmYTRlMTM2Li4wNTZlOTZlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMzUsOSArMzM1LDcgQEAgQVNfSUYoW3Rlc3QgIngkd2l0aF9kYnVzX3Rlc3RzIiAhPSAieG5vIl0sIFsKKyBdKQorIEFNX0NPTkRJVElPTkFMKFtEQlVTX1RFU1RTXSwgW3Rlc3QgIngkd2l0aF9kYnVzX3Rlc3RzIiAhPSAieG5vIl0pCisgCistQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzdWl0YWJsZSBVVEYtOCBsb2NhbGUgdG8gcnVuIHRoZSB0ZXN0cyBpbl0pCistVEVTVFNfTE9DQUxFPSQoJHNyY2Rpci9idWlsZC9jaG9vc2UtdGVzdHMtbG9jYWxlLnNoKQorLUFDX01TR19SRVNVTFQoWyRURVNUU19MT0NBTEVdKQorK1RFU1RTX0xPQ0FMRT1DCisgQUNfU1VCU1QoW1RFU1RTX0xPQ0FMRV0pCisgCisgQUNfU1VCU1QoW2dqc2pzZGlyXSwgW1wke2RhdGFkaXJ9L2dqcy0xLjBdKQorLS0gCisyLjIwLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dqcy9nanNfMS41OC40LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dqcy9nanNfMS41OC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViN2QzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ2pzL2dqc18xLjU4LjQuYmIKQEAgLTAsMCArMSwzNyBAQAorU1VNTUFSWSA9ICJKYXZhc2NyaXB0IGJpbmRpbmdzIGZvciBHTk9NRSIKK0xJQ0VOU0UgPSAiTUlUICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiIFwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9YmViMjljZjE3ZmFiZTczNmYwNjM5YjA5ZWU2ZTc2ZmEgXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyIKKworR05PTUVCQVNFQlVJTERDTEFTUyA9ICJhdXRvdG9vbHMiCisKK0RFUEVORFMgPSAibW96anMgZ3RrKzMiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBnb2JqZWN0LWludHJvc3BlY3Rpb24gdmFsYSBnZXR0ZXh0IGZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzODVmNGJhYTI2Njk5MWEwOGQzZTQyNWJjNjllZTk2MiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjI2MWEzZjY2NmM3NzFkNzc0NDk2NWZlNzFiODA0ZmMyYzNhM2Q0NmE4ZTNlOGQ0ZjdlZDVlZjk3OTY3ZWJkNWYiCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1EaXNhYmxlLXRlc3RzLW9uLWhvc3QucGF0Y2giCisKKyMgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGlzIG1hbmRhdG9yeSBhbmQgY2Fubm90IGJlIGNvbmZpZ3VyZWQKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJnb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YSIKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVF9hcHBlbmQgPSAiIC0tZW5hYmxlLWludHJvc3BlY3Rpb24gLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0td2l0aG91dC1kYnVzLXRlc3RzIFwKKyAgICAtLWRpc2FibGUtaW5zdGFsbGVkLXRlc3RzIFwKKyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBtYWtlIGNvbmZpZ3VyZSBmaW5kIGdvYmplY3QtaW50cm9zcGVjdGlvbiB0ZXN0IGNvZGUuIEFsdGhvdWdoIHdlIHNldAorICAgICMgLS1kaXNhYmxlLWluc3RhbGxlZC10ZXN0cyBnanMgYnVpbGRzIHRoZW0KKyAgICBzZWQgLWkgJ3N8OiRHSV9EQVRBRElSfDoke1NUQUdJTkdfRElSX05BVElWRX0kR0lfREFUQURJUnxnJyAke1N9L2NvbmZpZ3VyZS5hYworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9nanMtMS4wL2xzYW4iCisKK1BBQ0tBR0VTID0rICIke1BOfS12YWxncmluZCIKK0ZJTEVTXyR7UE59LXZhbGdyaW5kID0gIiR7ZGF0YWRpcn0vZ2pzLTEuMC92YWxncmluZCIKK1JTRVBFTkRTXyR7UE59LXZhbGdyaW5kICs9ICJ2YWxncmluZCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1hdXRvYXIvZ25vbWUtYXV0b2FyXzAuMi4zLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWF1dG9hci9nbm9tZS1hdXRvYXJfMC4yLjQuYmIKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWF1dG9hci9nbm9tZS1hdXRvYXJfMC4yLjMuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1hdXRvYXIvZ25vbWUtYXV0b2FyXzAuMi40LmJiCmluZGV4IDE2YTkyMTMuLmFmZWRhM2UgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1hdXRvYXIvZ25vbWUtYXV0b2FyXzAuMi4zLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1hdXRvYXIvZ25vbWUtYXV0b2FyXzAuMi40LmJiCkBAIC0zLDE1ICszLDE0IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKIAogREVQRU5EUyA9ICIgXAotICAgIGdub21lLWNvbW1vbi1uYXRpdmUgXAogICAgIGd0ayszIFwKICAgICBsaWJhcmNoaXZlIFwKICIKIAogaW5oZXJpdCBnbm9tZWJhc2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MgdmFsYQogCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzOWIxM2ZiMmZjNzc1MmZhM2I4MDYxNjI0NGRjNGVmOCIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjVkZTlkYjBkYjAyOGNkNmNhYjdjMmZlYzQ2YmE5MDk2NTQ3NGVjZjljZDY4Y2ZkNjgxYTY0ODhjZjFmYjI0MGEiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzNmFiMjYzZjQ3N2VlZWUzYzk1YzkzODE3NjZlYjNjMiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjBhMzRjMzc3Zjg4NDFhYmJmNGMyOWJjODQ4YjMwMWZiZDhlNGUyMGMwM2Q3MzE4Yzc3N2M1ODQzMjAzMzY1N2EiCiAKIGRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKICAgICBleHBvcnQgR0lSX0VYVFJBX0xJQlNfUEFUSD0iJHtCfS9nbm9tZS1hdXRvYXIvLmxpYnMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtYmFja2dyb3VuZHMvZ25vbWUtYmFja2dyb3VuZHNfMy4zNC4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWJhY2tncm91bmRzL2dub21lLWJhY2tncm91bmRzXzMuMzQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzUwYTdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWJhY2tncm91bmRzL2dub21lLWJhY2tncm91bmRzXzMuMzQuMC5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkdOT01FIHdhbGxwYXBlcnMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzU4NTk5ODk1NDVlMzc5NjhhOTliNjMxZWY0MjcyMmUiCisKK1NFQ1RJT04gPSAieDExL2dub21lIgorCitHTk9NRUJBU0VCVUlMRENMQVNTID0gIm1lc29uIgorCitpbmhlcml0IGdub21lYmFzZSBhbGxhcmNoIGdldHRleHQgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGFsbGFyY2gKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZjM1MDgwNGRmMTZjZGM5ZWY1MzA2MDg3MTU3Y2YzMWIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJjMmI3ZmI2ZGI5OGMwNWUyMDUwNTNkYWFhN2Y1OGM3ZjA2ZmY5MWI0NWM0MDA2MDUyYWYxN2M1NzhhZTdiNDdmIgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2JhY2tncm91bmRzIFwKKyAgICAke2RhdGFkaXJ9L2dub21lLWJhY2tncm91bmQtcHJvcGVydGllcyBcCisiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtY2FsY3VsYXRvci9nbm9tZS1jYWxjdWxhdG9yXzMuMzQuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1jYWxjdWxhdG9yL2dub21lLWNhbGN1bGF0b3JfMy4zNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOWUzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtY2FsY3VsYXRvci9nbm9tZS1jYWxjdWxhdG9yXzMuMzQuMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkdOT01FIGNhbGN1bGF0b3IiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NFQ1RJT04gPSAieDExL2dub21lIgorCitERVBFTkRTID0gIiBcCisgICAgeWVscC10b29scy1uYXRpdmUgXAorICAgIGd0ayszIFwKKyAgICBsaWJzb3VwLTIuNCBcCisgICAgbGliZ2VlIFwKKyAgICBsaWJtcGMgXAorICAgIGd0a3NvdXJjZXZpZXc0IFwKKyIKKworR0lSX01FU09OX09QVElPTiA9ICdkaXNhYmxlLWludHJvc3BlY3Rpb24nCitHSVJfTUVTT05fRU5BQkxFX0ZMQUcgPSAnZmFsc2UnCitHSVJfTUVTT05fRElTQUJMRV9GTEFHID0gJ3RydWUnCisKK0dOT01FQkFTRUJVSUxEQ0xBU1MgPSAibWVzb24iCisKK2luaGVyaXQgZ25vbWViYXNlIGdvYmplY3QtaW50cm9zcGVjdGlvbiBnbm9tZS1oZWxwIHZhbGEgZ3RrLWljb24tY2FjaGUgZ2V0dGV4dCBmZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiOTE1N2I5M2EzZjQxZmRhZDgwZGYyNmMwNjJiOTVjN2IiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI0ZDUzNDhjMmZiZjAxZDA0MGEyY2I1ZTg0ZGU4MTJjNTAzOTExZTFlYTQ5OGE4M2U3ZWVmZmY1MmM0NDE3MDUxIgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2RidXMtMSBcCisgICAgJHtkYXRhZGlyfS9tZXRhaW5mbyBcCisgICAgJHtkYXRhZGlyfS9nbm9tZS1zaGVsbCBcCisiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtY29udHJvbC1jZW50ZXIvZ25vbWUtY29udHJvbC1jZW50ZXIvMDAwMS1BZGQtbWVzb24tb3B0aW9uLXRvLXBhc3Mtc3lzcm9vdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1jb250cm9sLWNlbnRlci9nbm9tZS1jb250cm9sLWNlbnRlci8wMDAxLUFkZC1tZXNvbi1vcHRpb24tdG8tcGFzcy1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmODJhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtY29udHJvbC1jZW50ZXIvZ25vbWUtY29udHJvbC1jZW50ZXIvMDAwMS1BZGQtbWVzb24tb3B0aW9uLXRvLXBhc3Mtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGJhOGFlYmUxMjU5YWUzZjdmNWE0ODI3ZTVhNDdiYjk1YzU2OGIyMTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcmVhcz0yME09QzM9QkNsbGVyPz0gPHNjaG5pdHplbHRvbnlAZ21haWwuY29tPgorRGF0ZTogVHVlLCAyMSBNYXkgMjAxOSAxNjowNzo0NiArMDIwMAorU3ViamVjdDogW1BBVENIXSBBZGQgbWVzb24gb3B0aW9uIHRvIHBhc3Mgc3lzcm9vdAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitXZSBuZWVkIHRvIHBhc3MgdGhpcyB0byBtZXNvbiB0byBoZWxwIGl0IGZpbmRpbmcgZ2Rlc2t0b3AtZW51bXMuaDoKKworfCBwYW5lbHMvYmFja2dyb3VuZC9tZXNvbi5idWlsZDozODowOiBFUlJPUjogRmlsZSAvdXNyL2luY2x1ZGUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nZGVza3RvcC1lbnVtcy5oIGRvZXMgbm90IGV4aXN0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ21haWwuY29tPgorLS0tCisgbWVzb25fb3B0aW9ucy50eHQgICAgICAgICAgICAgfCAxICsKKyBwYW5lbHMvYmFja2dyb3VuZC9tZXNvbi5idWlsZCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbWVzb25fb3B0aW9ucy50eHQgYi9tZXNvbl9vcHRpb25zLnR4dAoraW5kZXggYTM0NzE2OC4uMmNkODEyMSAxMDA2NDQKKy0tLSBhL21lc29uX29wdGlvbnMudHh0CisrKysgYi9tZXNvbl9vcHRpb25zLnR4dAorQEAgLTEsMyArMSw0IEBACisrb3B0aW9uKCdvZV9zeXNyb290JywgdHlwZTogJ3N0cmluZycsIHZhbHVlOiAnJywgZGVzY3JpcHRpb246ICdEaXJlY3RvcnkgZm9yIE9FLXN5c3Jvb3QnKQorIG9wdGlvbignY2hlZXNlJywgdHlwZTogJ2Jvb2xlYW4nLCB2YWx1ZTogdHJ1ZSwgZGVzY3JpcHRpb246ICdidWlsZCB3aXRoIGNoZWVzZSB3ZWJjYW0gc3VwcG9ydCcpCisgb3B0aW9uKCdkb2N1bWVudGF0aW9uJywgdHlwZTogJ2Jvb2xlYW4nLCB2YWx1ZTogZmFsc2UsIGRlc2NyaXB0aW9uOiAnYnVpbGQgZG9jdW1lbnRhdGlvbicpCisgb3B0aW9uKCdnbm9tZV9zZXNzaW9uX2xpYmV4ZWNkaXInLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6ICcnLCBkZXNjcmlwdGlvbjogJ0RpcmVjdG9yeSBmb3IgZ25vbWUtc2Vzc2lvblwncyBsaWJleGVjZGlyJykKK2RpZmYgLS1naXQgYS9wYW5lbHMvYmFja2dyb3VuZC9tZXNvbi5idWlsZCBiL3BhbmVscy9iYWNrZ3JvdW5kL21lc29uLmJ1aWxkCitpbmRleCBiYjM0YjY5Li5mMjI3MjJlIDEwMDY0NAorLS0tIGEvcGFuZWxzL2JhY2tncm91bmQvbWVzb24uYnVpbGQKKysrKyBiL3BhbmVscy9iYWNrZ3JvdW5kL21lc29uLmJ1aWxkCitAQCAtMzYsNyArMzYsNyBAQCBjb21tb25fc291cmNlcyA9IFtdCisgCisgZW51bXMgPSAnZ2Rlc2t0b3AtZW51bXMtdHlwZXMnCisgZW51bXNfaGVhZGVyID0gZmlsZXMoCistICBnc2V0dGluZ3NfZGVza3RvcF9kZXAuZ2V0X3BrZ2NvbmZpZ192YXJpYWJsZSgncHJlZml4JykgKyAnL2luY2x1ZGUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nZGVza3RvcC1lbnVtcy5oJywKKysgIGdldF9vcHRpb24oJ29lX3N5c3Jvb3QnKSArIGdzZXR0aW5nc19kZXNrdG9wX2RlcC5nZXRfcGtnY29uZmlnX3ZhcmlhYmxlKCdwcmVmaXgnKSArICcvaW5jbHVkZS9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzL2dkZXNrdG9wLWVudW1zLmgnLAorICAgJ2NjLWJhY2tncm91bmQtaXRlbS5oJworICkKKyAKKy0tIAorMi4yMC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1jb250cm9sLWNlbnRlci9nbm9tZS1jb250cm9sLWNlbnRlcl8zLjM0LjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtY29udHJvbC1jZW50ZXIvZ25vbWUtY29udHJvbC1jZW50ZXJfMy4zNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNmU5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtY29udHJvbC1jZW50ZXIvZ25vbWUtY29udHJvbC1jZW50ZXJfMy4zNC4yLmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiR05PTUUgU2V0dGluZ3MiCitERVNDUklQVElPTiA9ICJHTk9NRSBTZXR0aW5ncyBpcyBHTk9NRSdzIG1haW4gaW50ZXJmYWNlIGZvciBjb25maWd1cmF0aW9uIG9mIHZhcmlvdXMgYXNwZWN0cyBvZiB5b3VyIGRlc2t0b3AiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzU4NTk5ODk1NDVlMzc5NjhhOTliNjMxZWY0MjcyMmUiCisKK0dOT01FQkFTRUJVSUxEQ0xBU1MgPSAibWVzb24iCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBnZXR0ZXh0IHZhbGEgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGJhc2gtY29tcGxldGlvbiBmZWF0dXJlc19jaGVjaworCitERVBFTkRTID0gIiBcCisgICAgZ2RrLXBpeGJ1Zi1uYXRpdmUgXAorICAgIGNvbG9yZC1ndGsgXAorICAgIHVkaXNrczIgXAorICAgIHVwb3dlciBcCisgICAgcG9sa2l0IFwKKyAgICBwdWxzZWF1ZGlvIFwKKyAgICBhY2NvdW50c3NlcnZpY2UgXAorICAgIHNhbWJhIFwKKyAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyAgICBnbm9tZS1zZXR0aW5ncy1kYWVtb24gXAorICAgIGdub21lLWRlc2t0b3AzIFwKKyAgICBnbm9tZS1vbmxpbmUtYWNjb3VudHMgXAorICAgIG5ldHdvcmstbWFuYWdlci1hcHBsZXQgXAorICAgIGdub21lLWJsdWV0b290aCBcCisgICAgZ3JpbG8gXAorICAgIGxpYmd0b3AgXAorICAgIGdzb3VuZCBcCisgICAgbGlicHdxdWFsaXR5IFwKKyIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTICs9ICJwb2xraXQgcHVsc2VhdWRpbyBzeXN0ZW1kIHgxMSIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYTk2MGE3ZDNlOWYxYzRmMzQxYmFlNDJkYTdmYmYyM2EiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJhODVmZmFmNTg4NWE4YzcwYzAxOTAxM2Q3Mzc5MmJmNGNjNzVmNjQzZTk3ZjZlOGI1MmY3ZmJiYTlmN2E5MTE0IgorU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtQWRkLW1lc29uLW9wdGlvbi10by1wYXNzLXN5c3Jvb3QucGF0Y2giCisKK1BBQ0tBR0VDT05GSUcgPz89ICJpYnVzICR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCBkKX0iCitQQUNLQUdFQ09ORklHW2lidXNdID0gIi1EaWJ1cz10cnVlLCAtRGlidXM9ZmFsc2UsIGlidXMiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi1Ed2F5bGFuZD10cnVlLCAtRHdheWxhbmQ9ZmFsc2UsIHdheWxhbmQiCisKKyMgT25jZSB3ZSBoYXZlIChsaWIpY2hlZXNlIHdlIGNhbiBtYWtlIGNoZWVzZSBhIFBBQ0tBR0VDT05GSUcKK0VYVFJBX09FTUVTT04gPSAiIFwKKyAgICAtRG9lX3N5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSBcCisgICAgLURjaGVlc2U9ZmFsc2UgXAorIgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2RidXMtMSBcCisgICAgJHtkYXRhZGlyfS9nbm9tZS1zaGVsbCBcCisgICAgJHtkYXRhZGlyfS9tZXRhaW5mbyBcCisiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9nZXR0ZXh0IgorCitSREVQRU5EU18ke1BOfSArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AvMDAwMS1tZXNvbi5idWlsZC1EaXNhYmxlLWxpYnNlY2NvbXAtZm9yLWFsbC1hcmNocy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AvMDAwMS1tZXNvbi5idWlsZC1EaXNhYmxlLWxpYnNlY2NvbXAtZm9yLWFsbC1hcmNocy5wYXRjaAppbmRleCBlOTNkNWI2Li40YjM4OTRmIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wLzAwMDEtbWVzb24uYnVpbGQtRGlzYWJsZS1saWJzZWNjb21wLWZvci1hbGwtYXJjaHMucGF0Y2gKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcC8wMDAxLW1lc29uLmJ1aWxkLURpc2FibGUtbGlic2VjY29tcC1mb3ItYWxsLWFyY2hzLnBhdGNoCkBAIC0xOCwxNCArMTgsMTQgQEAKICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDYgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCi1pbmRleCA4MzQwN2I0Li44MGVhYjg0IDEwMDY0NAoraW5kZXggMmU3MTYwZC4uZjgzNjc3ZCAxMDA2NDQKIC0tLSBhL21lc29uLmJ1aWxkCiArKysgYi9tZXNvbi5idWlsZAotQEAgLTUzLDEyICs1Myw3IEBAIHVkZXZfZGVwID0gZGVwZW5kZW5jeSgnbGlidWRldicsIHJlcXVpcmVkOiBnZXRfb3B0aW9uKCd1ZGV2JykpCitAQCAtNTgsMTIgKzU4LDcgQEAgdWRldl9kZXAgPSBkZXBlbmRlbmN5KCdsaWJ1ZGV2JywgcmVxdWlyZWQ6IGdldF9vcHRpb24oJ3VkZXYnKSkKICBob3N0X29zID0gaG9zdF9tYWNoaW5lLnN5c3RlbSgpCiAgaG9zdF9jcHUgPSBob3N0X21hY2hpbmUuY3B1KCkKICBzdXBwb3J0ZWRfb3MgPSBbJ2xpbnV4J10KLS11bnN1cHBvcnRlZF9jcHVzID0gWydhbHBoYScsICdpYTY0JywgJ202OGsnLCAnc2g0JywgJ3NwYXJjJywgJ3NwYXJjNjQnXQorLXVuc3VwcG9ydGVkX2NwdXMgPSBbJ2FscGhhJywgJ2lhNjQnLCAnbTY4aycsICdyaXNjdjY0JywgJ3NoNCcsICdzcGFyYycsICdzcGFyYzY0J10KIC1pZiBzdXBwb3J0ZWRfb3MuY29udGFpbnMoaG9zdF9vcykgYW5kIG5vdCB1bnN1cHBvcnRlZF9jcHVzLmNvbnRhaW5zKGhvc3RfY3B1KQogLSAgc2VjY29tcF9kZXAgPSBkZXBlbmRlbmN5KCdsaWJzZWNjb21wJykKIC1lbHNlCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjM0LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjM0LjMuYmIKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4zNC4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjM0LjMuYmIKaW5kZXggYTJmNzM1OS4uY2RkMTFhYSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4zNC4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMzQuMy5iYgpAQCAtMTQsOCArMTQsOCBAQAogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gImdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhIgogVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUX2FwcGVuZCA9ICIgaW50cm9zcGVjdGlvbiIKIAotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMzU3YjRlNjM5NjA4MzBjMTM5OWQzMzQxZDA1NzQ2ZWEiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJjMWRiZWI1NjY2ZGFkMjcxNjZjNzY5ZTQ4ZTJhYjQxZGQ1ZWQ3NDcxOGVhMzVlYjU3Yzg0ODg3OTA2NjJkYzVhIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiY2RjZDMwMDZmNTVkOGM4ODEzMzE1YmVmNmY0ZjZiNzEiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJhY2MyZWZjODQ3NTc0ZmQyMWQ4ZjIwMDY3OWYxMTFjMmIxZWI1YWUyYzA0MWUwMDM0ZTdjMTg0NTBhN2Q5YzZkIgogCiBTUkNfVVJJICs9ICIgXAogICAgIGZpbGU6Ly9nbm9tZS1kZXNrdG9wLXRodW1ibmFpbC1kb24tdC1hc3N1bWUtdGltZV90LWlzLWxvbmcucGF0Y2ggXApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWZsYXNoYmFjay9nbm9tZS1mbGFzaGJhY2tfMy4zNC4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWZsYXNoYmFjay9nbm9tZS1mbGFzaGJhY2tfMy4zNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTg2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtZmxhc2hiYWNrL2dub21lLWZsYXNoYmFja18zLjM0LjIuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJHTk9NRSBGbGFzaGJhY2sgKEdOT01FIDIpIHNlc3Npb24iCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBndGstaWNvbi1jYWNoZSBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBmZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIHBvbGtpdCBzeXN0ZW1kIHBhbSIKKworREVQRU5EUyArPSAiIFwKKyAgICB1cG93ZXIgXAorICAgIGlidXMgXAorICAgIGxpYnhrYmZpbGUgXAorICAgIHBvbGtpdCBcCisgICAgbWV0YWNpdHkgXAorICAgIGdub21lLWRlc2t0b3AzIFwKKyAgICBnbm9tZS1ibHVldG9vdGggXAorIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyNTFiNTFiYWQzMjJjNDFkMzRkMDZmZGI4ZjE3OTlkNCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjNiZTY1Mzg4Y2QyYzhmMzk3NDFiY2MwNWRhODdlZjQwMDM1MTgzYTlhMzk1MDJkNjc2OTYyNDJjMmFlYjQ2OWMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgbm8gb2UtbGF5ZXIgaGFzIGNvbXBpeiAtPiByZW1vdmUgZGVhZCBzZXNzaW9uCisgICAgcm0gLWYgJHtEfSR7ZGF0YWRpcn0veHNlc3Npb25zL2dub21lLWZsYXNoYmFjay1jb21waXouZGVza3RvcAorfQorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L3hzZXNzaW9ucyBcCisgICAgJHtkYXRhZGlyfS9kZXNrdG9wLWRpcmVjdG9yaWVzIFwKKyAgICAke2RhdGFkaXJ9L2dub21lLXNlc3Npb24gXAorICAgICR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9IFwKKyIKKworUkRFUEVORFNfJHtQTn0gKz0gIm1ldGFjaXR5IGdub21lLXBhbmVsIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWZvbnQtdmlld2VyL2dub21lLWZvbnQtdmlld2VyXzMuMzQuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1mb250LXZpZXdlci9nbm9tZS1mb250LXZpZXdlcl8zLjM0LjAuYmIKaW5kZXggNWJlOGQ1MC4uZDhmN2UzMCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWZvbnQtdmlld2VyL2dub21lLWZvbnQtdmlld2VyXzMuMzQuMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtZm9udC12aWV3ZXIvZ25vbWUtZm9udC12aWV3ZXJfMy4zNC4wLmJiCkBAIC0xLDQgKzEsNCBAQAotU1VNTUFSWSA9ICJHTk9NRSBibHVldG9vdGggbWFuYWdlciIKK1NVTU1BUlkgPSAiR05PTUUgZm9udCB2aWV3ZXIiCiBMSUNFTlNFID0gIkdQTHYyIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1rZXlyaW5nL2dub21lLWtleXJpbmcvMDAwMS1TZXQtcGF0aHMtdG8tc3NoLWFnZW50LWFuZC1zc2gtYWRkLWJ5LWNvbmZpZ3VyZS1vcHRpLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWtleXJpbmcvZ25vbWUta2V5cmluZy8wMDAxLVNldC1wYXRocy10by1zc2gtYWdlbnQtYW5kLXNzaC1hZGQtYnktY29uZmlndXJlLW9wdGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlZWNmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1rZXlyaW5nL2dub21lLWtleXJpbmcvMDAwMS1TZXQtcGF0aHMtdG8tc3NoLWFnZW50LWFuZC1zc2gtYWRkLWJ5LWNvbmZpZ3VyZS1vcHRpLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gZTY0NjRlMDFiYzFjZGY1NDk2YmUyOTQyZDFiYWM0MWFhNjA5ZjQ3ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDIzIE1heSAyMDE5IDIzOjQ0OjA2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFNldCBwYXRocyB0byBzc2gtYWdlbnQgYW5kIHNzaC1hZGQgYnkgY29uZmlndXJlIG9wdGlvbnMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworV2UgaGF2ZSBubyBleGVjdXRhYmxlcyBpbiBvdXIgc3lzcm9vdCBzbyBjb25maWd1cmF0aW9uIHdvbid0IGZpbmQgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDExICsrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNGI4MzY2NC4uZWRhMGM5NiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzUxLDggKzM1MSwxNSBAQCBpZiB0ZXN0ICIkZW5hYmxlX3NzaF9hZ2VudCIgPSAibm8iOyB0aGVuCisgCVNTSF9BR0VOVD1mYWxzZQorIAlTU0hfQUREPWZhbHNlCisgZWxzZQorLQlBQ19QQVRIX1BST0coW1NTSF9BR0VOVF0sIFtzc2gtYWdlbnRdLCBbbm9dKQorLQlBQ19QQVRIX1BST0coW1NTSF9BRERdLCBbc3NoLWFkZF0sIFtub10pCisrICAgIEFDX0FSR19XSVRIKFtzc2gtYWdlbnQtcGF0aF0sCisrICAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLXNzaC1hZ2VudC1wYXRoPVBBVEhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoIHRvIHNzaC1hZ2VudF0pXSwKKysgICAgICAgICAgICAgICAgIFtTU0hfQUdFTlQ9JHdpdGhfc3NoX2FnZW50X3BhdGhdLCBbU1NIX0FHRU5UPW5vXSkKKysgICAgQUNfQVJHX1dJVEgoW3NzaC1hZGQtcGF0aF0sCisrICAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLXNzaC1hZGQtcGF0aD1QQVRIXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGF0aCB0byBzc2gtYWRkXSldLAorKyAgICAgICAgICAgICAgICAgW1NTSF9BREQ9JHdpdGhfc3NoX2FkZF9wYXRoXSwgW1NTSF9BREQ9bm9dKQorKworIAlpZiB0ZXN0ICIkU1NIX0FHRU5UIiA9ICJubyIgLW8gIiRTU0hfQUREIiA9ICJubyI7IHRoZW4KKyAJCUFDX01TR19FUlJPUihbdGhlIHNzaC1hZ2VudCBhbmQgc3NoLWFkZCBjb21tYW5kcyB3ZXJlIG5vdCBmb3VuZF0pCisgCWVsc2UKKy0tIAorMi4yMC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1rZXlyaW5nL2dub21lLWtleXJpbmdfMy4yOC4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWtleXJpbmcvZ25vbWUta2V5cmluZ18zLjI4LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NGMyMTguLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWtleXJpbmcvZ25vbWUta2V5cmluZ18zLjI4LjIuYmIKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1TVU1NQVJZID0gIlBhc3N3b3JkIGFuZCBrZXlyaW5nIG1hbmFnaW5nIGRhZW1vbiIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotU0VDVElPTiA9ICJ4MTEvZ25vbWUiCi0KLUxJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiIFwKLSAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAotICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAotIgotCi1pbmhlcml0IGZlYXR1cmVzX2NoZWNrIGdub21lYmFzZSByZW1vdmUtbGlidG9vbCBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgotCi1ERVBFTkRTID0gIiBcCi0gICAgaW50bHRvb2wtbmF0aXZlIFwKLSAgICBnbGliLTIuMC1uYXRpdmUgXAotICAgIGd0ayszIFwKLSAgICBnY3IgXAotICAgIGxpYmdjcnlwdCBcCi0gICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSBcCi0iCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjI4NDU4MGY5NTRmNzYyY2FmNjJhZWQyYWU3MzU4MTc3IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiODExNzFiN2QwNzIxMWIyMTZiNGM5YmI3OWJmMmRlYjNkZWNhMThmZThkNTZkNDZkZGExYzQ1NDliNGEyNjQ2YSIKLVNSQ19VUkkgKz0gImZpbGU6Ly9tdXNsLnBhdGNoIgotCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1SREVQRU5EU18ke1BOfSA9ICJsaWJnbm9tZS1rZXlyaW5nIGdsaWItMi4wLXV0aWxzIgotCi1FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvYyBcCi0gICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9TU0hfQUdFTlQ9JHtiaW5kaXJ9L3NzaC1hZ2VudCBcCi0gICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9TU0hfQUREPSR7YmluZGlyfS9zc2gtYWRkIgotCi1QQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBkKX0iCi1QQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtIC0td2l0aC1wYW0tZGlyPSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LCAtLWRpc2FibGUtcGFtIgotUEFDS0FHRUNPTkZJR1tzc2gtYWdlbnRdID0gIi0tZW5hYmxlLXNzaC1hZ2VudCwtLWRpc2FibGUtc3NoLWFnZW50LCxvcGVuc3NoLW1pc2MiCi0KLUZJTEVTXyR7UE59ICs9ICIgXAotICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKLSAgICAke2RhdGFkaXJ9L3AxMS1raXQgXAotICAgICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyoke1NPTElCU0RFVn0gXAotICAgICR7bGliZGlyfS9wa2NzMTEvZ25vbWUta2V5cmluZy1wa2NzMTEuc28gXAotIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWtleXJpbmcvZ25vbWUta2V5cmluZ18zLjM0LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUta2V5cmluZy9nbm9tZS1rZXlyaW5nXzMuMzQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMyNTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWtleXJpbmcvZ25vbWUta2V5cmluZ18zLjM0LjAuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJQYXNzd29yZCBhbmQga2V5cmluZyBtYW5hZ2luZyBkYWVtb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gIiBcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyIKKworREVQRU5EUyA9ICIgXAorICAgIGdsaWItMi4wLW5hdGl2ZSBcCisgICAgZ3RrKzMgXAorICAgIGdjciBcCisgICAgbGliZ2NyeXB0IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IFwKKyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGZlYXR1cmVzX2NoZWNrIHJlbW92ZS1saWJ0b29sIGdldHRleHQgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjdjOGZkODVlNDZlZDRiYTFhZGQwMjg4YjJlYWQ5YWVjIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZTljZGE5NTQyYTNlMzdjNjE2MzYxNDVlN2U5ZTI1MTNjNTY5MDkyZWE4MDIwNzUyYTgzNGUxZjQwYWQ0MTk0MyIKK1NSQ19VUkkgKz0gIiBcCisgICAgZmlsZTovLzAwMDEtU2V0LXBhdGhzLXRvLXNzaC1hZ2VudC1hbmQtc3NoLWFkZC1ieS1jb25maWd1cmUtb3B0aS5wYXRjaCBcCisgICAgZmlsZTovL211c2wucGF0Y2ggXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAic3NoLWFnZW50IgorUEFDS0FHRUNPTkZJR1tzc2gtYWdlbnRdID0gIi0tZW5hYmxlLXNzaC1hZ2VudCAtLXdpdGgtc3NoLWFnZW50LXBhdGg9JHtiaW5kaXJ9L3NzaC1hZ2VudCAtLXdpdGgtc3NoLWFkZC1wYXRoPSR7YmluZGlyfS9zc2gtYWRkLC0tZGlzYWJsZS1zc2gtYWdlbnQsLG9wZW5zc2gtbWlzYyIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS1kaXNhYmxlLWRvYyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtIC0td2l0aC1wYW0tZGlyPSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5JywgJy0tZGlzYWJsZS1wYW0nLCBkKX0gXAorIgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcyBcCisgICAgJHtkYXRhZGlyfS9wMTEta2l0IFwKKyAgICAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qJHtTT0xJQlNERVZ9IFwKKyAgICAke2xpYmRpcn0vcGtjczExL2dub21lLWtleXJpbmctcGtjczExLnNvIFwKKyIKKworIyBmaXggfCBnbm9tZS1rZXlyaW5nLWRhZW1vbjogaW5zdWZmaWNpZW50IHByb2Nlc3MgY2FwYWJpbGl0aWVzLCB1bnNlY3VyZSBtZW1vcnkgbWlnaHQgZ2V0IHVzZWQKKyMgVGhpcyBkb2VzIG5vdCBtYWtlIGl0IHRocm91Z2ggcHNldWRvIHNvIHBlcmZvcm0gb24tdGFyZ2V0IC0gc2lnaAorcGtnX3Bvc3RpbnN0X29udGFyZ2V0XyR7UE59ICgpIHsKKyAgICBzZXRjYXAgY2FwX2lwY19sb2NrK2VwIGB3aGljaCBnbm9tZS1rZXlyaW5nLWRhZW1vbmAKK30KK1JERVBFTkRTXyR7UE59ICs9ICJsaWJjYXAtYmluIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLWtleXJpbmcvbGliZ25vbWUta2V5cmluZ18zLjEyLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUta2V5cmluZy9saWJnbm9tZS1rZXlyaW5nXzMuMTIuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE2OWUyZS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUta2V5cmluZy9saWJnbm9tZS1rZXlyaW5nXzMuMTIuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLVNVTU1BUlkgPSAiQ29tcGF0aWJpbGl0eSBsaWJyYXJ5IGZvciBhY2Nlc3Npbmcgc2VjcmV0cyIKLUhPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKLUJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgotCi1MSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICIgXAotICAgIGZpbGU6Ly9DT1BZSU5HO21kNT0wOTE0YjlkM2ViYWJhNDFlZjJlM2UwYWUxNmYyOTZjZiBcCi0gICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCi0iCi1TRUNUSU9OID0gIngxMS9nbm9tZS9saWJzIgotCi1pbmhlcml0IGdub21lYmFzZSBndGstZG9jIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi1ERVBFTkRTID0gImRidXMgbGliZ2NyeXB0IGdsaWItMi4wIGdsaWItMi4wLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUiCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjY2OTZlNGYyZTlhZWQ0NjI1Y2RjM2FmMzBiZDhjMjM4IgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYzRjMTc4ZmJiMDVmNzJhY2M0ODRkMjJkZGIwNTY4Zjc1MzJjNDA5YjBhMTNlMDY1MTNmZjU0YjkxZTk0Nzc4MyIKLQotCi0jIEZhaWxzIHRvIGJ1aWxkIHdpdGggdGh1bWItMSAocWVtdWFybSkKLSN8IHtzdGFuZGFyZCBpbnB1dH06IEFzc2VtYmxlciBtZXNzYWdlczoKLSN8IHtzdGFuZGFyZCBpbnB1dH06ODIzOiBFcnJvcjogc2hpZnRzIGluIENNUC9NT1YgaW5zdHJ1Y3Rpb25zIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB1bmlmaWVkIHN5bnRheCAtLSBgbW92IHIxMixyMTIscm9yIzMnCi0jfCB7c3RhbmRhcmQgaW5wdXR9OjgyMzogRXJyb3I6IHNoaWZ0cyBpbiBDTVAvTU9WIGluc3RydWN0aW9ucyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gdW5pZmllZCBzeW50YXggLS0gYG1vdiByMTIscjEyLHJvciMxMycKLSN8IHtzdGFuZGFyZCBpbnB1dH06ODI0OiBFcnJvcjogc2hpZnRzIGluIENNUC9NT1YgaW5zdHJ1Y3Rpb25zIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB1bmlmaWVkIHN5bnRheCAtLSBgbW92IHIxMixyMTIscm9yIzI5JwotI3wge3N0YW5kYXJkIGlucHV0fTo4MjQ6IEVycm9yOiBzaGlmdHMgaW4gQ01QL01PViBpbnN0cnVjdGlvbnMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHVuaWZpZWQgc3ludGF4IC0tIGBtb3YgcjEyLHIxMixyb3IjMTknCi0jfCB7c3RhbmRhcmQgaW5wdXR9OjgyNTogRXJyb3I6IGxvIHJlZ2lzdGVyIHJlcXVpcmVkIC0tIGBvcnIgcjEwLHIxMCxyMTAnCi1BUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKLUFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtb25saW5lLWFjY291bnRzL2dub21lLW9ubGluZS1hY2NvdW50c18zLjM0LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtb25saW5lLWFjY291bnRzL2dub21lLW9ubGluZS1hY2NvdW50c18zLjM0LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkNzFlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1vbmxpbmUtYWNjb3VudHMvZ25vbWUtb25saW5lLWFjY291bnRzXzMuMzQuMS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkdOT01FIE9ubGluZSBBY2NvdW50cyAtIFNpbmdsZSBzaWduLW9uIGZyYW1ld29yayBmb3IgR05PTUUiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zNGM4OGIxMjRkYjVmYjI3NjJjMTY3NmJlN2RhZGQzNiIKKworR05PTUVCQVNFQlVJTERDTEFTUyA9ICJhdXRvdG9vbHMiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3NldHRpbmdzIGd0ay1kb2MgdmFsYSBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBmZWF0dXJlc19jaGVjaworCisjIGZvciB3ZWJraXRndGsKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImFhOTRkMWRkMDdjYTUzNzI5YTAzNmI1ZGYxYzc4YzA1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNDgzMmNhOGU0OGQzYTQ5N2ZjNjc2ZTdiNmYxNDYwMDlhYjQyMDY5OTUzNjI5NzdiOTgwNWFhMzlmMTY0NzgzYSIKKworIyBiYWNrZW5kIGlzIHJlcXVpcmVkIGZvciBnbm9tZS1jb250cm9sLWNlbnRlcgorUEFDS0FHRUNPTkZJRyA9ICJiYWNrZW5kIG90aGVyIgorCitQQUNLQUdFQ09ORklHW2JhY2tlbmRdID0gIi0tZW5hYmxlLWJhY2tlbmQsLS1kaXNhYmxlLWJhY2tlbmQsZ3RrKzMgd2Via2l0Z3RrIGxpYnNvdXAtMi40IGpzb24tZ2xpYiBsaWJzZWNyZXQgcmVzdCBsaWJ4bWwyIgorUEFDS0FHRUNPTkZJR1trcmI1XSA9ICItLWVuYWJsZS1rZXJiZXJvcywgLS1kaXNhYmxlLWtlcmJlcm9zICwga3JiNSBnY3IiCisKKyMgbm8gZXh0cmEgZGVwZW5kZW5jaWVzIQorUEFDS0FHRUNPTkZJR1tvdGhlcl0gPSAiIFwKKyAgICAtLWVuYWJsZS1mYWNlYm9vayAgLS1lbmFibGUtZm91cnNxdWFyZSAgLS1lbmFibGUtZXhjaGFuZ2UgIC0tZW5hYmxlLWZsaWNrciAgLS1lbmFibGUtZ29vZ2xlICAtLWVuYWJsZS1pbWFwLXNtdHAgIC0tZW5hYmxlLW93bmNsb3VkICAtLWVuYWJsZS13aW5kb3dzLWxpdmUsXAorICAgIC0tZGlzYWJsZS1mYWNlYm9vayAtLWRpc2FibGUtZm91cnNxdWFyZSAtLWRpc2FibGUtZXhjaGFuZ2UgLS1kaXNhYmxlLWZsaWNrciAtLWRpc2FibGUtZ29vZ2xlIC0tZGlzYWJsZS1pbWFwLXNtdHAgLS1kaXNhYmxlLW93bmNsb3VkIC0tZGlzYWJsZS13aW5kb3dzLWxpdmUsIFwKKyIKKworRklMRVNfJHtQTn0gKz0gIiBcCisgICAgJHtkYXRhZGlyfS9kYnVzLTEgXAorICAgICR7bGliZGlyfS9nb2EtMS4wL3dlYi1leHRlbnNpb25zLyouc28gXAorIgorCisjIGxvb2tlZCBpbnRvIHBrZy1jb25maWcgZmlsZTogaXQgaXMgbm90IGEgYnVnIC0gdGhleSBtZWFuIGl0CitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9nb2EtMS4wL2luY2x1ZGUiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtcGFuZWwvZ25vbWUtcGFuZWwvMDAwMS1Eby1ub3QtdHJ5LXRvLWZpbmQtWk9ORUlORk8taXQtdHJpZXMtdG8tcnVuLWNvbXBpbGVkLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXBhbmVsL2dub21lLXBhbmVsLzAwMDEtRG8tbm90LXRyeS10by1maW5kLVpPTkVJTkZPLWl0LXRyaWVzLXRvLXJ1bi1jb21waWxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWI0ZGFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXBhbmVsL2dub21lLXBhbmVsLzAwMDEtRG8tbm90LXRyeS10by1maW5kLVpPTkVJTkZPLWl0LXRyaWVzLXRvLXJ1bi1jb21waWxlZC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGQ0YjJmMDkyMmRmZGQ2MDQwZTVlOWY2MmEyNTY1NDUyY2Y4NTVjNDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcmVhcz0yME09QzM9QkNsbGVyPz0gPHNjaG5pdHplbHRvbnlAZ21haWwuY29tPgorRGF0ZTogTW9uLCAyMSBPY3QgMjAxOSAyMjoxMDo1NiArMDIwMAorU3ViamVjdDogW1BBVENIXSBEbyBub3QgdHJ5IHRvIGZpbmQgWk9ORUlORk8gLSBpdCB0cmllcyB0byBydW4gY29tcGlsZWQgY29kZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitNaXNzaW5nIGNvbmZpZ3V0YXRpb24gZG9lcyBub3QgY2F1c2UgaXNzdWVzOiBUaGUgZmFsbGJhY2sgaW4gbW9kdWxlcy9jbG9jay9zeXN0ZW0tdGltZXpvbmUuYworbWF0Y2hlcyBvdXIgZGVmYXVsdC4KKworSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCA1IC0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGM3NWE5ZmEuLjBjOWQ5NDUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI0OSwxMSArMjQ5LDYgQEAgZG5sIHllbHAtdG9vbHMgc3R1ZmYKKyAKKyBZRUxQX0hFTFBfSU5JVAorIAorLWRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLWRubCBGaW5kIHpvbmVpbmZvIGRpcmVjdG9yeQorLWRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLQorLUFYX1pPTkVJTkZPCisgCisgZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgZG5sIFByb2Nlc3MgLmluIGZpbGVzCistLSAKKzIuMjEuMAorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtcGFuZWwvZ25vbWUtcGFuZWxfMy4zNC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXBhbmVsL2dub21lLXBhbmVsXzMuMzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVmZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXBhbmVsL2dub21lLXBhbmVsXzMuMzQuMS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkdOT01FIGZsYXNoYmFjayBwYW5lbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGl0c3Rvb2wgZ25vbWUtaGVscCBndGstaWNvbi1jYWNoZSBndGstZG9jIGdldHRleHQgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuIGZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEgcG9sa2l0IHN5c3RlbWQgcGFtIgorCitERVBFTkRTICs9ICIgXAorICAgIHllbHAtdG9vbHMtbmF0aXZlIFwKKyAgICBsaWJ3bmNrMyBcCisgICAgcG9sa2l0IFwKKyAgICBkY29uZiBcCisgICAgbGliZ3dlYXRoZXIgXAorICAgIGdub21lLW1lbnVzMyBcCisgICAgZ25vbWUtZGVza3RvcDMgXAorICAgIGdkbSBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImNmZDVkM2ZkNTQ4YTJhZmRkOGJkM2JiZGY5NjQ2YmJkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiYTZiYzAyNTUyNTJlZWI0Yjk2NGJjYmU1NWZkNzkwOGI2OWY5MTRjMDYyYzVlYzhkZmY1YWMwMjYyZDI5YjkwZCIKK1NSQ19VUkkgKz0gIiBcCisgICAgZmlsZTovLzAwMDEtRG8tbm90LXRyeS10by1maW5kLVpPTkVJTkZPLWl0LXRyaWVzLXRvLXJ1bi1jb21waWxlZC5wYXRjaCBcCisiCisKK1BBQ0tBR0VDT05GSUdbZWRzXSA9ICItLWVuYWJsZS1lZHMsLS1kaXNhYmxlLWVkcyxldm9sdXRpb24tZGF0YS1zZXJ2ZXIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJnZG0tYmFzZSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1zZXNzaW9uL2dub21lLXNlc3Npb25fMy4zNC4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXNlc3Npb24vZ25vbWUtc2Vzc2lvbl8zLjM0LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViZjQ4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1zZXNzaW9uL2dub21lLXNlc3Npb25fMy4zNC4yLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiR05PTUUgc2Vzc2lvbiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICIgXAorICAgIGdsaWItMi4wLW5hdGl2ZSBcCisgICAgbGlieHNsdC1uYXRpdmUgXAorICAgIHhtbHRvLW5hdGl2ZSBcCisgICAgeHRyYW5zIFwKKyAgICBsaWJpY2UgXAorICAgIGxpYnNtIFwKKyAgICB2aXJ0dWFsL2xpYngxMSBcCisgICAgZ3RrKzMgXAorICAgIGdub21lLWRlc2t0b3AzIFwKKyAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyAgICBqc29uLWdsaWIgXAorIgorCitHTk9NRUJBU0VCVUlMRENMQVNTID0gIm1lc29uIgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IGdzZXR0aW5ncyB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSBwb2xraXQgc3lzdGVtZCBwYW0gZ29iamVjdC1pbnRyb3NwZWN0aW9uLWRhdGEiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjM4ZGNkYjg0NGEwMzQ5Y2MyZmIxMDk5ODA5NTU0M2U0IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOGJiNzczODE2NTBhMDNhZTRiZTcyNjA3NTEzNjNiZDI3ZGE5M2YwOWJhYzFkZGJjODg1ZjRjZTQ0ZWJhZjhlMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJ2NvbnNvbGVraXQnLGQpfSIKKworUEFDS0FHRUNPTkZJR1tjb25zb2xla2l0XSA9ICItRGNvbnNvbGVraXQ9dHJ1ZSwgLURjb25zb2xla2l0PWZhbHNlLCBjb25zb2xla2l0IgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItRHN5c3RlbWQ9dHJ1ZSAtRHN5c3RlbWRfam91cm5hbD10cnVlLCAtRHN5c3RlbWQ9ZmFsc2UgLURzeXN0ZW1kX2pvdXJuYWw9ZmFsc2UsIHN5c3RlbWQiCisKK0ZJTEVTXyR7UE59ICs9ICIgXAorICAgICR7ZGF0YWRpcn0veHNlc3Npb25zIFwKKyAgICAke2RhdGFkaXJ9L3dheWxhbmQtc2Vzc2lvbnMgXAorICAgICR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9IFwKKyIKKworUkRFUEVORFNfJHtQTn0gKz0gImdub21lLXNoZWxsIGdub21lLXNldHRpbmdzLWRhZW1vbiBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXNldHRpbmdzLWRhZW1vbi9nbm9tZS1zZXR0aW5ncy1kYWVtb25fMy4zNC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXNldHRpbmdzLWRhZW1vbi9nbm9tZS1zZXR0aW5ncy1kYWVtb25fMy4zNC4yLmJiCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1zZXR0aW5ncy1kYWVtb24vZ25vbWUtc2V0dGluZ3MtZGFlbW9uXzMuMzQuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXNldHRpbmdzLWRhZW1vbi9nbm9tZS1zZXR0aW5ncy1kYWVtb25fMy4zNC4yLmJiCmluZGV4IDY1ZjY2OTMuLjBiNjg2NWQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1zZXR0aW5ncy1kYWVtb24vZ25vbWUtc2V0dGluZ3MtZGFlbW9uXzMuMzQuMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtc2V0dGluZ3MtZGFlbW9uL2dub21lLXNldHRpbmdzLWRhZW1vbl8zLjM0LjIuYmIKQEAgLTI4LDggKzI4LDggQEAKIFJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEgcG9sa2l0IHB1bHNlYXVkaW8gc3lzdGVtZCBnb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YSIKIFVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVF9hcHBlbmQgPSAiIGludHJvc3BlY3Rpb24iCiAKLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImNkZDBkMGM4NjY0MDU2ZGViNzhhYTQwYzg4ZWMyNGQxIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOTk4MWEyMGJhYmY4ZGE3NzQ0YjdmYmUxNzViOWUzNjA3OGJmMDhmM2JmNjVmZTVhZWRlYjgyY2ZlMjdhYzExZiIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjQ5MzMzMmZhMGYzNjY0NTE4ODQ2OGZlZDQxYzAwNjBiIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOWZiYWU2N2UyMTdlNTNiOTllNGY5ZTdkMzkyYzkxZmZiZTMxMjUzOTQxYzliMTM2ZWYwOWMyZDlkYjdhZDdlZCIKIAogIyBhbGxvdyBjcm9zcyBidWlsZCBtaXhlZCB3aXRoIGJ1aWxkIG9mIG5hdGl2ZSB0b29scwogZG9fd3JpdGVfY29uZmlnX2FwcGVuZCgpIHsKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1zaGVsbC9nbm9tZS1zaGVsbC1leHRlbnNpb25zXzMuMzQuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1zaGVsbC9nbm9tZS1zaGVsbC1leHRlbnNpb25zXzMuMzQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmU1MDcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXNoZWxsL2dub21lLXNoZWxsLWV4dGVuc2lvbnNfMy4zNC4yLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiR05PTUUgU2hlbGwgRXh0ZW5zaW9ucyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00Y2IzYTM5MmNiZjgxYTllNjg1ZWMxM2I4OGM0YzEwMSIKKworR05PTUVCQVNFQlVJTERDTEFTUyA9ICJtZXNvbiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBnc2V0dGluZ3MgZmVhdHVyZXNfY2hlY2sgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEgcG9sa2l0IHN5c3RlbWQgcGFtIGdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJkM2E2OWNkZTBjM2UzZGMwYjBjMjQzYWYwMjZjNGI3YSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImExZTE2ZTc1YTA2ZWE1MTE0MzVhNmY3NDc4ZGU5MmFmZjIxZDAyZDRlMWQ1OWVjOGNlN2ZiNjM5NjgxOWI0YjgiCisKK0RFUEVORFMgKz0gIiBcCisgICAgc2Fzc2MtbmF0aXZlIFwKKyIKKworRVhUUkFfT0VNRVNPTiArPSAiIFwKKyAgICAtRGV4dGVuc2lvbl9zZXQ9YWxsIFwKKyAgICAtRGNsYXNzaWNfbW9kZT10cnVlIFwKKyIKKworUkRFUEVORFNfJHtQTn0gKz0gImdub21lLXNoZWxsIgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2dub21lLXNoZWxsIFwKKyAgICAke2RhdGFkaXJ9L2dub21lLXNlc3Npb24gXAorICAgICR7ZGF0YWRpcn0veHNlc3Npb25zIFwKKyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1zaGVsbC9nbm9tZS1zaGVsbF8zLjM0LjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtc2hlbGwvZ25vbWUtc2hlbGxfMy4zNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2M2ZiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtc2hlbGwvZ25vbWUtc2hlbGxfMy4zNC4zLmJiCkBAIC0wLDAgKzEsNjQgQEAKK1NVTU1BUlkgPSAiR05PTUUgU2hlbGwgaXMgdGhlIGdyYXBoaWNhbCBzaGVsbCBvZiB0aGUgR05PTUUgZGVza3RvcCBlbnZpcm9ubWVudCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworR05PTUVCQVNFQlVJTERDTEFTUyA9ICJtZXNvbiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdldHRleHQgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBiYXNoLWNvbXBsZXRpb24KKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSBwb2xraXQgc3lzdGVtZCBwYW0iCisKK0RFUEVORFMgPSAiIFwKKyAgICBsaWJ4bWwyLW5hdGl2ZSBcCisgICAgc2Fzc2MtbmF0aXZlIFwKKyAgICBndGsrMyBcCisgICAgbXV0dGVyIFwKKyAgICBldm9sdXRpb24tZGF0YS1zZXJ2ZXIgXAorICAgIGdjciBcCisgICAgZ2pzIFwKKyAgICBnbm9tZS1hdXRvYXIgXAorICAgIHBvbGtpdCBcCisgICAgbGliY3JvY28gXAorICAgIHN0YXJ0dXAtbm90aWZpY2F0aW9uIFwKKyAgICBpYnVzIFwKKyAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyIKKworR1RLRE9DX01FU09OX09QVElPTiA9ICJndGtfZG9jIgorCisjIGdvYmplY3QtaW50cm9zcGVjdGlvbiBpcyBtYW5kYXRvcnkgYW5kIGNhbm5vdCBiZSBjb25maWd1cmVkCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgKz0gImdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhIgorVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUX2FwcGVuZCA9ICIgaW50cm9zcGVjdGlvbiIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYTBmN2Q3OGY1NzYxNjA3Njg5MGYwZTNiN2YxMjE5NmEiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIyNDc0YmVmMzg2YzVhNDdkN2JlMjg1YWEyMmUyNDEyNWM0NmJhNWY4NjBhMjVhMWEzNmE5MGRlNGU0NTZiZDhhIgorCitQQUNLQUdFQ09ORklHID8/PSAiYmx1ZXRvb3RoIG5tICR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBkKX0iCitQQUNLQUdFQ09ORklHW2JsdWV0b290aF0gPSAiLCxnbm9tZS1ibHVldG9vdGgiCitQQUNLQUdFQ09ORklHW25tXSA9ICItRG5ldHdvcmttYW5hZ2VyPXRydWUsIC1EbmV0d29ya21hbmFnZXI9ZmFsc2UsIG5ldHdvcmttYW5hZ2VyIgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItRHN5c3RlbWQ9dHJ1ZSwgLURzeXN0ZW1kPWZhbHNlLCBzeXN0ZW1kIgorCitFWFRSQV9PRU1FU09OID0gIiBcCisgICAgLURtYW49ZmFsc2UgXAorIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjIGZpeCBzaGViYW5ncworICAgIGZvciB0b29sIGluIGBmaW5kICR7RH0ke2JpbmRpcn0gLW5hbWUgJyotdG9vbCdgOyBkbworICAgICAgICBzZWQgLWkgJ3M6IyEke1BZVEhPTn06IyEke2JpbmRpcn0vJHtQWVRIT05fUE59OicgJHRvb2wKKyAgICBkb25lCit9CisKK0ZJTEVTXyR7UE59ICs9ICIgXAorICAgICR7ZGF0YWRpcn0vZGJ1cy0xIFwKKyAgICAke2RhdGFkaXJ9L2dub21lLWNvbnRyb2wtY2VudGVyIFwKKyAgICAke2RhdGFkaXJ9L3hkZy1kZXNrdG9wLXBvcnRhbCBcCisgICAgJHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0gXAorIgorCitSREVQRU5EU18ke1BOfSArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyBnZG0tYmFzZSBsaWJyc3ZnLWd0ayIKKworUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzIgorRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9LyotdG9vbCIKK1JERVBFTkRTXyR7UE59LXRvb2xzID0gInB5dGhvbjMtY29yZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXN5c3RlbS1tb25pdG9yL2dub21lLXN5c3RlbS1tb25pdG9yXzMuMzIuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS1zeXN0ZW0tbW9uaXRvci9nbm9tZS1zeXN0ZW0tbW9uaXRvcl8zLjMyLjEuYmIKaW5kZXggYTM1ODNkMS4uZjMwZWRlZSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXN5c3RlbS1tb25pdG9yL2dub21lLXN5c3RlbS1tb25pdG9yXzMuMzIuMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtc3lzdGVtLW1vbml0b3IvZ25vbWUtc3lzdGVtLW1vbml0b3JfMy4zMi4xLmJiCkBAIC0xNCw3ICsxNCw3IEBACiAKIEdOT01FQkFTRUJVSUxEQ0xBU1MgPSAibWVzb24iCiAKLWluaGVyaXQgZ25vbWViYXNlIGdub21lLWhlbHAgaXRzdG9vbCBndGstaWNvbi1jYWNoZSBmZWF0dXJlc19jaGVjayBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgoraW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdub21lLWhlbHAgaXRzdG9vbCBndGstaWNvbi1jYWNoZSBmZWF0dXJlc19jaGVjayBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgogCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIHBvbGtpdCIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXR3ZWFrcy9nbm9tZS10d2Vha3MvMDAwMS1NYWtlLXB5dGhvbi1wYXRoLWNvbmZpZ3VyYWJsZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS10d2Vha3MvZ25vbWUtdHdlYWtzLzAwMDEtTWFrZS1weXRob24tcGF0aC1jb25maWd1cmFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyOWY4NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nbm9tZS10d2Vha3MvZ25vbWUtdHdlYWtzLzAwMDEtTWFrZS1weXRob24tcGF0aC1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSBkYjk0OTgzYzkzZjM4YmQ4NDk0YjQ3ZDlmYTFiM2U1MzY4ZGM5YWJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTEgRGVjIDIwMTkgMDE6MzQ6MDEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZSBweXRob24gcGF0aCBjb25maWd1cmFibGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ21haWwuY29tPgorLS0tCisgbWVzb24uYnVpbGQgICAgICAgfCAyICstCisgbWVzb25fb3B0aW9ucy50eHQgfCAyICsrCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWVzb25fb3B0aW9ucy50eHQKKworZGlmZiAtLWdpdCBhL21lc29uLmJ1aWxkIGIvbWVzb24uYnVpbGQKK2luZGV4IGI3ZGE1MTguLmQ1OGZiNWIgMTAwNjQ0CistLS0gYS9tZXNvbi5idWlsZAorKysrIGIvbWVzb24uYnVpbGQKK0BAIC0xMyw3ICsxMyw3IEBAIGJpbmRpciA9IGpvaW5fcGF0aHMocHJlZml4LCBnZXRfb3B0aW9uKCdiaW5kaXInKSkKKyBkYXRhZGlyID0gam9pbl9wYXRocyhwcmVmaXgsIGdldF9vcHRpb24oJ2RhdGFkaXInKSkKKyBsaWJleGVjZGlyID0gam9pbl9wYXRocyhwcmVmaXgsIGdldF9vcHRpb24oJ2xpYmV4ZWNkaXInKSkKKyBsb2NhbGVkaXIgPSBqb2luX3BhdGhzKHByZWZpeCwgZ2V0X29wdGlvbignbG9jYWxlZGlyJykpCistcHl0aG9uZGlyID0gam9pbl9wYXRocyhwcmVmaXgsIHB5dGhvbjMuc3lzY29uZmlnX3BhdGgoJ3B1cmVsaWInKSkKKytweXRob25kaXIgPSBnZXRfb3B0aW9uKCdweXRob25fc2l0ZV9kaXInKQorIAorIHBrZ2RhdGFkaXIgPSBqb2luX3BhdGhzKGRhdGFkaXIsIG1lc29uLnByb2plY3RfbmFtZSgpKQorIAorZGlmZiAtLWdpdCBhL21lc29uX29wdGlvbnMudHh0IGIvbWVzb25fb3B0aW9ucy50eHQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMzQ1NWNhCistLS0gL2Rldi9udWxsCisrKysgYi9tZXNvbl9vcHRpb25zLnR4dAorQEAgLTAsMCArMSwyIEBACisrb3B0aW9uKCdweXRob25fc2l0ZV9kaXInLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6ICcnKQorKworLS0gCisyLjIxLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXR3ZWFrcy9nbm9tZS10d2Vha3NfMy4zNC4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dub21lLXR3ZWFrcy9nbm9tZS10d2Vha3NfMy4zNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNGM4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ25vbWUtdHdlYWtzL2dub21lLXR3ZWFrc18zLjM0LjAuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJHTk9NRSB0d2Vha3M6IEFkdmFuY2VkIG9wdGlvbnMgZm9yIEdOT01FIDMgc2Vzc2lvbiIKK0xJQ0VOU0UgPSAiR1BMdjMgJiBDQzAtMS4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICIgXAorICAgIGZpbGU6Ly9MSUNFTlNFUy9DQzAtMS4wO21kNT02NWQzNjE2ODUyZGJmN2IxYTZkNGI1M2IwMDYyNjAzMiBcCisgICAgZmlsZTovL0xJQ0VOU0VTL0dQTC0zLjA7bWQ1PTllZWY5MTE0OGE5YjE0ZWM3ZjlkZjMzM2RhZWJjNzQ2IFwKKyIKKworREVQRU5EUyA9ICJsaWJoYW5keSIKKworR05PTUVCQVNFQlVJTERDTEFTUyA9ICJtZXNvbiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWljb24tY2FjaGUgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGZlYXR1cmVzX2NoZWNrIHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbgorCisjIHNhbWUgYXMgZ25vbWUtc2hlbGwKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEgcG9sa2l0IHN5c3RlbWQgcGFtIgorCisjIGdvYmplY3QtaW50cm9zcGVjdGlvbiBpcyBtYW5kYXRvcnkgYW5kIGNhbm5vdCBiZSBjb25maWd1cmVkCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgKz0gImdvYmplY3QtaW50cm9zcGVjdGlvbi1kYXRhIgorVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUX2FwcGVuZCA9ICIgaW50cm9zcGVjdGlvbiIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYTYyNWQ4YjE2N2M1NTQ5YzY4ZTFjNmFjN2E4N2QzNjkiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwMDMzMjZmYWI0NmU2ZmFhZDk0ODU5MjRiY2E1MDNmMGM1ODNlM2I0NTUzZDZmNjczNDA2ZWRhMzk2MjA1MjUwIgorU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtTWFrZS1weXRob24tcGF0aC1jb25maWd1cmFibGUucGF0Y2giCisKK0VYVFJBX09FTUVTT04gPSAiLURweXRob25fc2l0ZV9kaXI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKK0ZJTEVTXyR7UE59ICs9ICIgXAorICAgICR7ZGF0YWRpcn0vbWV0YWluZm8gXAorICAgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyIKKworUkRFUEVORFNfJHtQTn0gKz0gImdub21lLXNoZWxsIHB5dGhvbjMtY29yZSBweXRob24zLWxvZ2dpbmcgbGliaGFuZHkiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ3JpbG8vZ3JpbG9fMC4zLjEwLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dyaWxvL2dyaWxvXzAuMy4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ZkNjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2dyaWxvL2dyaWxvXzAuMy4xMC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkdyaWxvIGlzIGEgZnJhbWV3b3JrIGZvcnNlYXJjaGluZyBtZWRpYSBjb250ZW50IGZyb20gdmFyaW91cyBzb3VyY2VzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgorCitERVBFTkRTID0gIiBcCisgICAgbGlieG1sMiBcCisgICAgZ2xpYi0yLjAgXAorIgorCitHTk9NRUJBU0VCVUlMRENMQVNTID0gIm1lc29uIgorCitpbmhlcml0IGdub21lYmFzZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYyBnZXR0ZXh0IHZhbGEKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZjAyYmY1ODVkMWE0OGRjNjViZThiOTBhZTNiMDgzMzAiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI3ZTQ0YjJlNzRjMzFlZDI0ZWI5N2U0MzI2NWE5ZTQxZWZmZTg2NjAyODdiMDIyOTUxMTE4MDVjN2JkYTdmMWU4IgorCitHSVJfTUVTT05fT1BUSU9OID0gImVuYWJsZS1pbnRyb3NwZWN0aW9uIgorR1RLRE9DX01FU09OX09QVElPTiA9ICJlbmFibGUtZ3RrLWRvYyIKKworIyBOb3RlOiByZW1vdmluZyAnbmV0JyBmcm9tIFBBQ0tBR0VDT05GSUcgY2F1c2VzCisjIHwgYmluZGluZ3MvdmFsYS9tZXNvbi5idWlsZDoxNTowOiBFUlJPUjogVW5rbm93biB2YXJpYWJsZSAiZ3JsbmV0X2dpciIuCitQQUNLQUdFQ09ORklHID8/PSAibmV0IgorCitQQUNLQUdFQ09ORklHW25ldF0gPSAiLURlbmFibGUtZ3JsLW5ldD10cnVlLCAtRGVuYWJsZS1ncmwtbmV0PWZhbHNlLCBsaWJzb3VwLTIuNCIKK1BBQ0tBR0VDT05GSUdbdGVzdC11aV0gPSAiLURlbmFibGUtdGVzdC11aT10cnVlLCAtRGVuYWJsZS10ZXN0LXVpPWZhbHNlLCBndGsrMyBsaWJvYXV0aCIKKworIyBPbmNlIHdlIGhhdmUgYSByZWNpcGUgZm9yICd0b3RlbS1wbHBhcnNlcicgdGhpcyBjYW4gdHVybiBpbnRvIGEgUEFDS0FHRUNPTkZJRworRVhUUkFfT0VNRVNPTiA9ICItRGVuYWJsZS1ncmwtcGxzPWZhbHNlIgorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ3NvdW5kL2dzb3VuZF8xLjAuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9nc291bmQvZ3NvdW5kXzEuMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NDc4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ3NvdW5kL2dzb3VuZF8xLjAuMi5iYgpAQCAtMCwwICsxLDEzIEBACitTVU1NQVJZID0gIlNtYWxsIGdvYmplY3QgbGlicmFyeSBmb3IgcGxheWluZyBzeXN0ZW0gc291bmRzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ0N2I4MzdhZTU3ZjA4YjcwNjA1OTNhYzYyNTYxNjNmIgorCitERVBFTkRTID0gIiBcCisgICAgZ2xpYi0yLjAgXAorICAgIGxpYmNhbmJlcnJhIFwKKyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBnb2JqZWN0LWludHJvc3BlY3Rpb24gdmFsYQorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJjMjZmZDIxYzIxYjllZjY1MzNhMjAyYTczZmFiMjFkYiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImJiYThmZjMwZWVhODE1MDM3ZTUzYmVlNzI3YmJkNWYwYjZhMmU3NGQ0NTJhNzcxMWI4MTlhN2M0NDRlNzhlNTMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ3Zmcy9ndmZzXzEuNDEuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9ndmZzL2d2ZnNfMS40Mi4yLmJiCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9ndmZzL2d2ZnNfMS40MS4yLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ3Zmcy9ndmZzXzEuNDIuMi5iYgppbmRleCAyN2UzZjkyLi5mMDQyNDZmIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ3Zmcy9ndmZzXzEuNDEuMi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvZ3Zmcy9ndmZzXzEuNDIuMi5iYgpAQCAtMywxNSArMywxNyBAQAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDVkZjM4ZGQ3N2MzNWVjODQzMWYyMTI0MTBhMzMyOWUiCiAKIEdOT01FQkFTRUJVSUxEQ0xBU1MgPSAibWVzb24iCi1pbmhlcml0IGdub21lYmFzZSBiYXNoLWNvbXBsZXRpb24gZ2V0dGV4dCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBiYXNoLWNvbXBsZXRpb24gZ2V0dGV4dCB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4gZmVhdHVyZXNfY2hlY2sgdXNlcmFkZAogCi1ERVBFTkRTICs9ICJsaWJzZWNyZXQgZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGdjb25mIGxpYmd1ZGV2IHNoYWRvdy1uYXRpdmUiCitERVBFTkRTICs9ICJsaWJzZWNyZXQgZ2xpYi0yLjAgZ2xpYi0yLjAtbmF0aXZlIGxpYmd1ZGV2IHNoYWRvdy1uYXRpdmUgXAorICAgICAgICAgICAgZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyBkYnVzIgogCiBTUkNfVVJJID0gImh0dHBzOi8vZG93bmxvYWQuZ25vbWUub3JnL3NvdXJjZXMvJHtCUE59LyR7QGdub21lX3ZlcmRpcigiJHtQVn0iKX0vJHtCUE59LSR7UFZ9LnRhci54ejtuYW1lPWFyY2hpdmUiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI4ZGVhMmY2YTNmMzI3YTgxNGEzNDc3NThkNDM1MGU0YiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImI1N2FmOTc1NzNiZDI5NWFhNTAwMzdlZWQyOWM2YmE3YTM2MTg4MjMwYzUxNWUwMDdjMzAxODg1NWE1Y2Y5NDkiCiAKLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjlhOWE5N2E2M2JiOWU4NzI1OGQ0ODA4NmE2YmRhY2FhIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZjMxMWI3YzVmODU1ZWJlMjU5OTYwYzAwYzdkMDNjODEyZTA0MDkyOGVjYjBlYzA5M2I1MGE0ZjE2YjNiY2YyNiIKLQorIyBkZXBlbmRzIG9uIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMtPmdjci0+Z3RrKzMtPiB4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCiAKIEVYVFJBX09FTUVTT04gPSAiIFwKICAgICAtRGJsdXJheT1mYWxzZSBcCkBAIC02NSw2ICs2Nyw5IEBACiAjIGxpYmNkaW8tcGFyYW5vaWEgcmVjaXBlIGRvZXNuJ3QgZXhpc3QgeWV0CiBQQUNLQUdFQ09ORklHW2NkZGFdID0gIi1EY2RkYT10cnVlLCAtRGNkZGE9ZmFsc2UsIGxpYmNkaW8tcGFyYW5vaWEiCiAKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0tbm8tY3JlYXRlLWhvbWUgLS11c2VyLWdyb3VwIC0taG9tZS1kaXIgJHtzeXNjb25mZGlyfS8ke0JQTn0tMSBwb2xraXRkIgorCiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BvbGtpdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCiAgICAgICAgICMgRml4IHVwIHBlcm1pc3Npb25zIG9uIHBvbGtpdCBydWxlcy5kIHRvIHdvcmsgd2l0aCBycG00IGNvbnN0cmFpbnRzCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ2RhdGEvbGliZ2RhdGFfMC4xNy4xMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9saWJnZGF0YS9saWJnZGF0YV8wLjE3LjExLmJiCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9saWJnZGF0YS9saWJnZGF0YV8wLjE3LjEwLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ2RhdGEvbGliZ2RhdGFfMC4xNy4xMS5iYgppbmRleCA3YmVkZDg3Li4xOTdhMDVkIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ2RhdGEvbGliZ2RhdGFfMC4xNy4xMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ2RhdGEvbGliZ2RhdGFfMC4xNy4xMS5iYgpAQCAtMTIsNyArMTIsMTAgQEAKIEdUS0RPQ19NRVNPTl9PUFRJT04gPSAiZ3RrX2RvYyIKIEdOT01FQkFTRUJVSUxEQ0xBU1MgPSAibWVzb24iCiAKLWluaGVyaXQgZ25vbWViYXNlIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1kb2MgdmFsYSBnb2JqZWN0LWludHJvc3BlY3Rpb24gbWFucGFnZXMKK2luaGVyaXQgZ25vbWViYXNlIHBrZ2NvbmZpZyBnZXR0ZXh0IGd0ay1kb2MgdmFsYSBnb2JqZWN0LWludHJvc3BlY3Rpb24gbWFucGFnZXMgZmVhdHVyZXNfY2hlY2sKKworIyBnY3IKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCiAKIGRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKICAgICBleHBvcnQgR0lSX0VYVFJBX0xJQlNfUEFUSD0iJHtCfS9nZGF0YS8ubGlicyIKQEAgLTI2LDUgKzI5LDUgQEAKIAogRVhUUkFfT0VNRVNPTiA9ICItRGFsd2F5c19idWlsZF90ZXN0cz1mYWxzZSIKIAotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDg1OGQ0MTFhZDM5NGMyNzU2NDNiMTQ5OTNkZmVlZDQiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJjMWQzZDFmMzAzZjZhMDQxNmEwZGFjMzU1YTE5NTI3NmMzMTE1N2E3NGJiMWQwNDA3NzJkNDZkMWNiMTViMDEyIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiN2I5OGU5MDU5MjU1ZDhhMmZiMTQ3YzRlNzI3MjMwYTgiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI2Yjk5MTcxMjJlNGRlZjZlNmY3OGJjYjY2MGU0OWUxNDY1NDA4MzJlMjk2YWJjYjVjZGU5OTgyOWEwNGVhOTg2IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2xpYmdub21lL2xpYmdub21la2JkXzMuMjYuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9saWJnbm9tZS9saWJnbm9tZWtiZF8zLjI2LjEuYmIKaW5kZXggZDNiM2JkZS4uMmEyZGI5YyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2xpYmdub21lL2xpYmdub21la2JkXzMuMjYuMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ25vbWUvbGliZ25vbWVrYmRfMy4yNi4xLmJiCkBAIC00LDE0ICs0LDExIEBACiAKIFNFQ1RJT04gPSAieDExL2dub21lL2xpYnMiCiAKLURFUEVORFMgPSAiZ2NvbmYgZ2xpYi0yLjAgbGlieGtsYXZpZXIgZ3RrKzMgaW50bHRvb2wtbmF0aXZlIgorREVQRU5EUyA9ICJnbGliLTIuMCBndGsrMyBsaWJ4a2xhdmllciIKIAotaW5oZXJpdCBmZWF0dXJlc19jaGVjayBnbm9tZWJhc2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGdldHRleHQKK2luaGVyaXQgZmVhdHVyZXNfY2hlY2sgZ25vbWViYXNlIGdvYmplY3QtaW50cm9zcGVjdGlvbiBnc2V0dGluZ3MgZ2V0dGV4dAogCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogCiBTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI5ODA0MDAyMjQ4NDQwNmU3ZWJlMjVmODJjZWY5MzM0NCIKIFNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImY3Y2EwMjYzMTU3NmU5Yjg4YWVlMWIxYmFlMzdhYzE0ODhiODBlZTc5NzVmMjBhOTdmMjllNzYxYTcxNzI2NzkiCi0KLUVYVFJBX09FQ09ORl9yZW1vdmUgPSAiLS1kaXNhYmxlLXNjaGVtYXMtaW5zdGFsbCIKLQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2xpYmdzZi9maWxlcy8wMDAxLWNvbmZpZ3VyZS5hYy1kcm9wLWEtY29weS1wYXN0ZS1vZi1pbnRyb3NwZWN0aW9uLm00LW0ucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ3NmL2xpYmdzZi8wMDAxLWNvbmZpZ3VyZS5hYy1kcm9wLWEtY29weS1wYXN0ZS1vZi1pbnRyb3NwZWN0aW9uLm00LW0ucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9saWJnc2YvZmlsZXMvMDAwMS1jb25maWd1cmUuYWMtZHJvcC1hLWNvcHktcGFzdGUtb2YtaW50cm9zcGVjdGlvbi5tNC1tLnBhdGNoCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ3NmL2xpYmdzZi8wMDAxLWNvbmZpZ3VyZS5hYy1kcm9wLWEtY29weS1wYXN0ZS1vZi1pbnRyb3NwZWN0aW9uLm00LW0ucGF0Y2gKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9saWJnc2YvbGliZ3NmXzEuMTQuNDUuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ3NmL2xpYmdzZl8xLjE0LjQ1LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzM2Y2ViLi4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9saWJnc2YvbGliZ3NmXzEuMTQuNDUuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1TVU1NQVJZID0gIkdOT01FIFN0cnVjdHVyZWQgRmlsZSBMaWJyYXJ5IgotTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGM3MzcxYjUwODE2Yzk2ZTE0NWZhMGY4YWRlOGUyNGQgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTYxNDY0Y2ZlMzQyNzk4ZWVjZWQ4MmVmZTlhZTU1ZjYzIgotCi1TRUNUSU9OID0gImxpYnMiCi0KLURFUEVORFM9ICJsaWJ4bWwyIGJ6aXAyIGdsaWItMi4wIHpsaWIgaW50bHRvb2wtbmF0aXZlIGdub21lLWNvbW1vbi1uYXRpdmUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uCi0KLVNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1kcm9wLWEtY29weS1wYXN0ZS1vZi1pbnRyb3NwZWN0aW9uLm00LW0ucGF0Y2giCi0KLVNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImU0NWNjOGFhOWM0OTUxNmQ1NDBiN2Q3MzA3Zjc1NWYxIgotU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNWNiYzJjMGYxZGM0NGQyMDJmYTBjNmUzYTUxZTlmMTdiMGMyZGViODcxMWJhNjUwNDMyYmZkZTMxODBiNjlmYSIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gIiIKLVBBQ0tBR0VDT05GSUdbZ2RrLXBpeGJ1Zl0gPSAiLS13aXRoLWdkay1waXhidWYsLS13aXRob3V0LWdkay1waXhidWYsZ2RrLXBpeGJ1ZiIKLQotRVhUUkFfT0VDT05GID0gIlwKLSAgICAtLWRpc2FibGUtZ3RrLWRvYyBcCi0gICAgLS13aXRoLWJ6MiBcCi0iCi0KLVJERVBFTkRTXyR7UE59ID0gImdjb25mIgotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS90aHVtYm5haWxlcnMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbGliZ3NmL2xpYmdzZl8xLjE0LjQ2LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2xpYmdzZi9saWJnc2ZfMS4xNC40Ni5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDkzMjBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL2xpYmdzZi9saWJnc2ZfMS4xNC40Ni5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkdOT01FIFN0cnVjdHVyZWQgRmlsZSBMaWJyYXJ5IgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGM3MzcxYjUwODE2Yzk2ZTE0NWZhMGY4YWRlOGUyNGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTYxNDY0Y2ZlMzQyNzk4ZWVjZWQ4MmVmZTlhZTU1ZjYzIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFM9ICJsaWJ4bWwyIGJ6aXAyIGdsaWItMi4wIHpsaWIgZ25vbWUtY29tbW9uLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGdldHRleHQgZ3RrLWRvYworCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1YmM2ZDFkNjM5NGYwZWQ1YTU4ZThmMmU1ZTRlYWQ3ZiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImVhMzY5NTliMTQyMWZjOGU3MmNhYTIyMmYzMGVjMzIzNGQwZWQ5NTk5MGUyYmYyODk0M2E4NWYzM2VhZGFkMmQiCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtZHJvcC1hLWNvcHktcGFzdGUtb2YtaW50cm9zcGVjdGlvbi5tNC1tLnBhdGNoIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tnZGstcGl4YnVmXSA9ICItLXdpdGgtZ2RrLXBpeGJ1ZiwtLXdpdGhvdXQtZ2RrLXBpeGJ1ZixnZGstcGl4YnVmIgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0td2l0aC1iejIgXAorIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS90aHVtYm5haWxlcnMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbWV0YWNpdHkvbWV0YWNpdHlfMy4zMi4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL21ldGFjaXR5L21ldGFjaXR5XzMuMzIuMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYxNWM1Ny4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbWV0YWNpdHkvbWV0YWNpdHlfMy4zMi4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotU0VDVElPTiA9ICJ4MTEvd20iCi1TVU1NQVJZID0gIk1ldGFjaXR5IGlzIHRoZSBib3Jpbmcgd2luZG93IG1hbmFnZXIgZm9yIHRoZSBhZHVsdCBpbiB5b3UiCi1MSUNFTlNFID0gIkdQTHYyKyIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0Y2NlNTM1NjBiOGU2MTlmZmE3YzgzMGZiODc2MWFhIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9pbmNsdWRlL21haW4uaDtlbmRsaW5lPTI0O21kNT03MjE0OGVkZTA3YTZkYWRkMDFkZTZhODgyZDIwYTlhZCIKLQotUEUgPSAiMSIKLQotREVQRU5EUyA9ICJnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIHN0YXJ0dXAtbm90aWZpY2F0aW9uIFwKLSAgICAgICAgICAgZ25vbWUtZG9jLXV0aWxzIGdkay1waXhidWYtbmF0aXZlIFwKLSAgICAgICAgICAgZ3RrKzMgZ2xpYi0yLjAgbGliY2FuYmVycmEgbGliZ3RvcCBpbnRsdG9vbC1uYXRpdmUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgZ25vbWViYXNlIGZlYXR1cmVzX2NoZWNrCi0jIGRlcGVuZHMgb24gc3RhcnR1cC1ub3RpZmljYXRpb24gd2hpY2ggZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL0dOT01FL21ldGFjaXR5LmdpdDticmFuY2g9bWFzdGVyIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtZHJvcC16ZW5pdHktZGV0ZWN0aW9uLnBhdGNoIFwKLSIKLQotUyA9ICIke1dPUktESVJ9L2dpdCIKLVNSQ1JFViA9ICJiZjFiZmJhZGY0N2VmZjk3NzAzZGYxN2U5NWIxNTE2OGUyMDM0MjIyIgotCi1FWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS14aW5lcmFtYSIKLQotUEFDS0FHRUNPTkZJRyA/PSAiIgotCi0jIGVuYWJsZSBhcyBuZWNjZXNzYXJ5IHVudGlsIG5ldyB3YXJuaW5ncyBhcmUgZGVhbHQgd2l0aAotUEFDS0FHRUNPTkZJR1t3ZXJyb3JdID0gIi0tZW5hYmxlLVdlcnJvciwtLWRpc2FibGUtV2Vycm9yLCwiCi0KLWRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgewotICAgIGNkICR7U30KLSAgICBhY2xvY2FsIC0taW5zdGFsbCB8fCBleGl0IDEKLSAgICBhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWZvcmNlIC0taW5zdGFsbCAtV25vLXBvcnRhYmlsaXR5IHx8IGV4aXQgMQotICAgIGNkIC0KLQotfQotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS90aGVtZXMgJHtkYXRhZGlyfS9nbm9tZS1jb250cm9sLWNlbnRlciAke2RhdGFkaXJ9L2dub21lIgotUkRFUEVORFNfJHtQTn0gKz0gImdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMiCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9tZXRhY2l0eS9tZXRhY2l0eV8zLjM0LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbWV0YWNpdHkvbWV0YWNpdHlfMy4zNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YzhiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbWV0YWNpdHkvbWV0YWNpdHlfMy4zNC4xLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NFQ1RJT04gPSAieDExL3dtIgorU1VNTUFSWSA9ICJNZXRhY2l0eSBpcyB0aGUgYm9yaW5nIHdpbmRvdyBtYW5hZ2VyIGZvciB0aGUgYWR1bHQgaW4geW91IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNGNjZTUzNTYwYjhlNjE5ZmZhN2M4MzBmYjg3NjFhYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaW5jbHVkZS9tYWluLmg7ZW5kbGluZT0yNDttZDU9NzIxNDhlZGUwN2E2ZGFkZDAxZGU2YTg4MmQyMGE5YWQiCisKK1BFID0gIjEiCisKK0RFUEVORFMgPSAiIFwKKyAgICBnZGstcGl4YnVmLW5hdGl2ZSBcCisgICAgZ3RrKzMgXAorICAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgXAorICAgIHN0YXJ0dXAtbm90aWZpY2F0aW9uIFwKKyAgICBsaWJjYW5iZXJyYSBcCisgICAgbGliZ3RvcCBcCisiCisKKworIyBkZXBlbmRzIG9uIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHdoaWNoIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncyBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBmZWF0dXJlc19jaGVjaworCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJjMGMxMDIwNGU0ZDZkMDI0Y2I0MTMwNDJjMWRlMzE2YiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjMxYzdkMTA0NWMzOTBhZmIzYmY0MDU3MzViMGIyNmM0NTkxOTdjYmY0M2FmMzdjNDY5ZWI4OTE4Y2UzYTQ1M2QiCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1kcm9wLXplbml0eS1kZXRlY3Rpb24ucGF0Y2giCisKK1BBQ0tBR0VDT05GSUdbeGluZXJhbWFdID0gIi0tZW5hYmxlLXhpbmVyYW1hLC0tZGlzYWJsZS14aW5lcmFtYSxsaWJ4aW5lcmFtYSIKKyMgZW5hYmxlIGFzIG5lY2Nlc3NhcnkgdW50aWwgbmV3IHdhcm5pbmdzIGFyZSBkZWFsdCB3aXRoCitQQUNLQUdFQ09ORklHW3dlcnJvcl0gPSAiLS1lbmFibGUtV2Vycm9yLC0tZGlzYWJsZS1XZXJyb3IsLCIKKworRklMRVNfJHtQTn0gKz0gIiBcCisgICAgJHtkYXRhZGlyfS90aGVtZXMgXAorICAgICR7ZGF0YWRpcn0vZ25vbWUtY29udHJvbC1jZW50ZXIgXAorICAgICR7ZGF0YWRpcn0vZ25vbWVcCisiCisKK1JERVBFTkRTXyR7UE59ICs9ICJnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL211dHRlci9tdXR0ZXIvMDAwMS1jb2dsLUZpeC1HTEVTMi1mYWxsYmFjay5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9tdXR0ZXIvbXV0dGVyLzAwMDEtY29nbC1GaXgtR0xFUzItZmFsbGJhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5MjAwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9tdXR0ZXIvbXV0dGVyLzAwMDEtY29nbC1GaXgtR0xFUzItZmFsbGJhY2sucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBmNGY3ZTMxMzAzZDc4YjJhOGEwODgxYjYxMzExYjhkNzUwMzAxYjhmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWRhbSBKYWNrc29uIDxhamF4QHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDI5IE9jdCAyMDE5IDExOjUzOjI3IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvZ2w6IEZpeCBHTEVTMiBmYWxsYmFjaworCitTYXkgeW91J3JlIHVzaW5nIGludGVsIGdlbjMsIHlvdSBwb29yIHNvdWwuIFlvdXIgYmlnLUdMIG1heGVzIG91dCBhdCAxLjUKK3VubGVzcyB5b3UgdXNlIGRpcnR5IHRyaWNrcywgYnV0IHlvdSBkbyBoYXZlIEdMRVMyLiBXZSB0cnkgdG8gZmFsbCBiYWNrCit0byBHTEVTIGluIHRoaXMgY2FzZSwgYnV0IHdlIG9ubHkgZXZlciBzYXkgZWdsQmluZEFQSShFR0xfT1BFTkdMX0FQSSkuCitTbyB3aGVuIHdlIGdvIHRvIGRvIENyZWF0ZUNvbnRleHQsIGV2ZW4gdGhvdWdoIHdlIHRoaW5rIHdlJ3ZlIHJlcXVlc3RlZAorR0xFUyAyLjAsIHRoZSBkcml2ZXIgd2lsbCBjb21wYXJlIHRoYXQgIjIuMCIgYWdhaW5zdCB0aGUgbWF4aW11bSBiaWctR0wKK3ZlcnNpb24sIGFuZCB0aGluZ3Mgd2lsbCBmYWlsLgorCitGaXggdGhpcyBieSBiaW5kaW5nIEVHTF9PUEVOR0xfRVNfQVBJIGJlZm9yZSB0cnlpbmcgYSBHTEVTIGNvbnRleHQuCisKK2h0dHBzOi8vZ2l0bGFiLmdub21lLm9yZy9HTk9NRS9tdXR0ZXIvaXNzdWVzLzYzNQorCitVcHN0cmVhbS1TdGF0dXM6IEFwcGxpZWQKKy0tLQorIGNvZ2wvY29nbC93aW5zeXMvY29nbC13aW5zeXMtZWdsLmMgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29nbC9jb2dsL3dpbnN5cy9jb2dsLXdpbnN5cy1lZ2wuYyBiL2NvZ2wvY29nbC93aW5zeXMvY29nbC13aW5zeXMtZWdsLmMKK2luZGV4IDk5ZGNiOGJmMy4uZjJiNDM5YTY3IDEwMDY0NAorLS0tIGEvY29nbC9jb2dsL3dpbnN5cy9jb2dsLXdpbnN5cy1lZ2wuYworKysrIGIvY29nbC9jb2dsL3dpbnN5cy9jb2dsLXdpbnN5cy1lZ2wuYworQEAgLTMyOSw2ICszMjksOCBAQCB0cnlfY3JlYXRlX2NvbnRleHQgKENvZ2xEaXNwbGF5ICpkaXNwbGF5LAorICAgaWYgKHJlbmRlcmVyLT5kcml2ZXIgPT0gQ09HTF9EUklWRVJfR0wgfHwKKyAgICAgICByZW5kZXJlci0+ZHJpdmVyID09IENPR0xfRFJJVkVSX0dMMykKKyAgICAgZWdsQmluZEFQSSAoRUdMX09QRU5HTF9BUEkpOworKyAgZWxzZSBpZiAocmVuZGVyZXItPmRyaXZlciA9PSBDT0dMX0RSSVZFUl9HTEVTMikKKysgICAgZWdsQmluZEFQSSAoRUdMX09QRU5HTF9FU19BUEkpOworIAorICAgZWdsX2F0dHJpYnV0ZXNfZnJvbV9mcmFtZWJ1ZmZlcl9jb25maWcgKGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpc3BsYXktPm9uc2NyZWVuX3RlbXBsYXRlLT5jb25maWcsCistLSAKKzIuMjEuMAorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbXV0dGVyL211dHRlcl8zLjM0LjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbXV0dGVyL211dHRlcl8zLjM0LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmYTI2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9tdXR0ZXIvbXV0dGVyXzMuMzQuMy5iYgpAQCAtMCwwICsxLDk2IEBACitTVU1NQVJZID0gIldpbmRvdyBhbmQgY29tcG9zaXRpbmcgbWFuYWdlciBiYXNlZCBvbiBDbHV0dGVyIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitERVBFTkRTID0gIiBcCisgICAgeHNlcnZlci14b3JnLWN2dC1uYXRpdmUgXAorICAgIHZpcnR1YWwvbGlieDExIFwKKyAgICBndGsrMyBcCisgICAgZ2RrLXBpeGJ1ZiBcCisgICAgY2Fpcm8gXAorICAgIHBhbmdvIFwKKyAgICBnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIFwKKyAgICBqc29uLWdsaWIgXAorICAgIGdub21lLWRlc2t0b3AzIFwKKyAgICBnbm9tZS1zZXR0aW5ncy1kYWVtb24gXAorICAgIGxpYnh0c3QgXAorICAgIGxpYnhrYmZpbGUgXAorICAgIHhpbmVyYW1hIFwKKyIKKworR05PTUVCQVNFQlVJTERDTEFTUyA9ICJtZXNvbiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdvYmplY3QtaW50cm9zcGVjdGlvbiBnZXR0ZXh0IHVwc3RyZWFtLXZlcnNpb24taXMtZXZlbiBmZWF0dXJlc19jaGVjaworCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJjM2VlNDZhZTdiODRkOWQwZThkZDNmOWUwNGE2MWFiMSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImNkZjU3ZGRkMGJjMzVkYjk1MmI3MzJiNzdjNzk2NzYwZTY1ZDFjZTJmN2RmMzEyNzNlNWM4ZDQ3NTllZDRhODkiCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1jb2dsLUZpeC1HTEVTMi1mYWxsYmFjay5wYXRjaCIKKworIyB4MTEgaXMgc3RpbGwgbWFuYWRhdG9yeSAtIHNlZSBtZXNvbi5idWlsZAorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworIyBzeXN0ZW1kIGNhbiBiZSByZXBsYWNlZCBieSBsaWJlbG9naW5kIChub3QgYXZhaWxhYmxlIGF0b3cgLSBtYWtlIHN5c3RlbWQKKyMgbWFuZGF0b3J5IGRpc3RybyBmZWF0dXJlKQorTE9HSU5EID89ICJzeXN0ZW1kIgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTICs9ICJzeXN0ZW1kIgorCisjIHByb2ZpbGVyIHJlcXVpcmVzIHN5c3Byb2YgMy4zNCB3aGljaCBpcyBub3Qgd2lsbGluZyB0byBidWlsZCBhdG93CitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICBuYXRpdmUtYmFja2VuZCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wgeDExJywgJ29wZW5nbCBnbHgnLCAnJywgZCl9IFwKKyAgICBzbSBcCisgICAgc3RhcnR1cC1ub3RpZmljYXRpb24gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsIHdheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0gXAorIgorCitFWFRSQV9PRU1FU09OICs9ICIgXAorICAgIC1EeHdheWxhbmRfcGF0aD0ke2JpbmRpcn0vWHdheWxhbmQgXAorIgorCisjIGNvbWJpLWNvbmZpZyAtIHNlZSBtZXNvbl9vcHRpb25zLnR4dCBmb3IgbW9yZSBkZXRhaWxzCitQQUNLQUdFQ09ORklHW25hdGl2ZS1iYWNrZW5kXSA9ICItRG5hdGl2ZV9iYWNrZW5kPXRydWUgLUR1ZGV2PXRydWUsIC1EbmF0aXZlX2JhY2tlbmQ9ZmFsc2UgLUR1ZGV2PWZhbHNlLCBsaWJkcm0gdmlydHVhbC9saWJnYm0gbGliaW5wdXQgJHtMT0dJTkR9IHZpcnR1YWwvZWdsIHZpcnR1YWwvbGliZ2xlczIgdWRldiIKK1BBQ0tBR0VDT05GSUdbb3BlbmdsXSA9ICItRG9wZW5nbD10cnVlLCAtRG9wZW5nbD10cnVlLCB2aXJ0dWFsL2xpYmdsIgorUEFDS0FHRUNPTkZJR1tnbHhdID0gIi1EZ2x4PXRydWUsIC1EZ2x4PWZhbHNlIgorUEFDS0FHRUNPTkZJR1tsaWJ3YWNvbV0gPSAiLURsaWJ3YWNvbT10cnVlLCAtRGxpYndhY29tPWZhbHNlLCBsaWJ3YWNvbSIKK1BBQ0tBR0VDT05GSUdbcmVtb3RlLWRlc2t0b3BdID0gIi1EcmVtb3RlX2Rlc2t0b3A9dHJ1ZSwgLURyZW1vdGVfZGVza3RvcD1mYWxzZSwgcGlwZXdpcmUiCitQQUNLQUdFQ09ORklHW3NtXSA9ICItRHNtPXRydWUsIC1Ec209ZmFsc2UsIGxpYnNtIgorUEFDS0FHRUNPTkZJR1twcm9maWxlcl0gPSAiLURwcm9maWxlcj10cnVlLC1EcHJvZmlsZXI9ZmFsc2Usc3lzcHJvZiIKK1BBQ0tBR0VDT05GSUdbc3RhcnR1cC1ub3RpZmljYXRpb25dID0gIi1Ec3RhcnR1cF9ub3RpZmljYXRpb249dHJ1ZSwgLURzdGFydHVwX25vdGlmaWNhdGlvbj1mYWxzZSwgc3RhcnR1cC1ub3RpZmljYXRpb24sIHN0YXJ0dXAtbm90aWZpY2F0aW9uIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItRHdheWxhbmQ9dHJ1ZSwtRHdheWxhbmQ9ZmFsc2Usd2F5bGFuZCB3YXlsYW5kLW5hdGl2ZSwgeHNlcnZlci14b3JnLXh3YXlsYW5kIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kLWVnbHN0cmVhbV0gPSAiLUR3YXlsYW5kX2VnbHN0cmVhbT10cnVlLC1Ed2F5bGFuZF9lZ2xzdHJlYW09ZmFsc2UiCisKKyMgeWVzIHRoZXkgY2hhbmdlZCBmcm9tIG11dHRlci00IC0+IG11dHRlci01IHJlY2VudGx5IHNvIGJlIHBlcnBhcmVkCitNVVRURVJfQVBJX05BTUUgPSAibXV0dGVyLTUiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgQWRkIGdpciBsaW5rcyBpbiBzdGFuZGFyZCBwYXRocy4gVGhhdCBtYWtlcyBkZXBlbmRlbnRzIGxpZmUgbXVjaCBlYXNpZXIKKyAgICAjIHRvIGZpbmQgdGhlbQorICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZ2lyLTEuMAorICAgIGZvciBnaXJfZnVsbCBpbiBgZmluZCAke0R9JHtsaWJkaXJ9LyR7TVVUVEVSX0FQSV9OQU1FfSAtbmFtZSAnKi5naXInYDsgZG8KKyAgICAgICAgZ2lyPWBiYXNlbmFtZSAiJGdpcl9mdWxsImAKKyAgICAgICAgbG4gLXNyICIke0R9JHtsaWJkaXJ9LyR7TVVUVEVSX0FQSV9OQU1FfS8kZ2lyIiAiJHtEfSR7ZGF0YWRpcn0vZ2lyLTEuMC8kZ2lyIgorICAgIGRvbmUKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXRlc3RzIgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2dub21lLWNvbnRyb2wtY2VudGVyIFwKKyAgICAke2xpYmRpcn0vJHtNVVRURVJfQVBJX05BTUV9L2xpYioke1NPTElCU30gXAorICAgICR7bGliZGlyfS8ke01VVFRFUl9BUElfTkFNRX0vKi50eXBlbGliIFwKKyAgICAke2xpYmRpcn0vJHtNVVRURVJfQVBJX05BTUV9L3BsdWdpbnMgXAorIgorCitGSUxFU18ke1BOfS10ZXN0cyArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2luc3RhbGxlZC10ZXN0cyBcCisgICAgJHtkYXRhZGlyfS8ke01VVFRFUl9BUElfTkFNRX0vdGVzdHMgXAorICAgICR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLyR7TVVUVEVSX0FQSV9OQU1FfSBcCisiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKyAgICAke2xpYmRpcn0vJHtNVVRURVJfQVBJX05BTUV9LyouZ2lyIFwKKyAgICAke2xpYmRpcn0vJHtNVVRURVJfQVBJX05BTUV9L2xpYiouc28gXAorIgorCitSREVQRU5EU18ke1BOfSArPSAiemVuaXR5IgorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbmF1dGlsdXMvbmF1dGlsdXNfMy4zNC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL25hdXRpbHVzL25hdXRpbHVzXzMuMzQuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbmF1dGlsdXMvbmF1dGlsdXNfMy4zNC4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvbmF1dGlsdXMvbmF1dGlsdXNfMy4zNC4yLmJiCmluZGV4IDc4OWExMWQuLmJhY2M5NjcgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS9uYXV0aWx1cy9uYXV0aWx1c18zLjM0LjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL25hdXRpbHVzL25hdXRpbHVzXzMuMzQuMi5iYgpAQCAtMTcsOCArMTcsOCBAQAogCiBpbmhlcml0IGdub21lYmFzZSBnc2V0dGluZ3MgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MgZ2V0dGV4dCBmZWF0dXJlc19jaGVjayB1cHN0cmVhbS12ZXJzaW9uLWlzLWV2ZW4KIAotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMTllNGYxZDg5ZmI5ZDBmZjEzNWQ1YjE5NzRjZTQzYjUiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIzN2NlMmMxNmE2MTBjNTg5ZGNjNzY2MGY5MDkyNDQ2NDY1NTY4ZTM4ZTI5YmNlNmVkOGMyNGYyZThlMDA3N2YzIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiODg1NzMwNjE1NDQwNDBjMGZmOTYwZjkzNGFhODM3MTkiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJiYjA2ZTIyNmI5NjVmNDc5YTBiODY2OGMxOWM4ZTE3NjJiOWQ4ZjAzOWFmNjgxNzk2MWNjN2E4ZjA5ZTZmOGE3IgogCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogCkBAIC0zMCwzICszMCw3IEBACiAgICAgJHtkYXRhZGlyfS9tZXRhaW5mbyBcCiAgICAgJHtkYXRhZGlyfS9nbm9tZS1zaGVsbCBcCiAiCisKKyMgbWFuZGF0b3J5IC0gbm90IGNoZWNrZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb246CisjIHwgKG9yZy5nbm9tZS5OYXV0aWx1czo4NjMpOiBHTGliLUdJTy1FUlJPUiAqKjogMjE6MDM6NTIuMzI2OiBTZXR0aW5ncyBzY2hlbWEgJ29yZy5mcmVlZGVza3RvcC5UcmFja2VyLk1pbmVyLkZpbGVzJyBpcyBub3QgaW5zdGFsbGVkCitSREVQRU5EU18ke1BOfSArPSAidHJhY2tlci1taW5lcnMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUvcmVzdC9yZXN0XzAuOC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3Jlc3QvcmVzdF8wLjguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2I4NzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3Jlc3QvcmVzdF8wLjguMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gImxpYnJhcnkgdG8gYWNjZXNzIHdlYiBzZXJ2aWNlcyB0aGF0IGNsYWltIHRvIGJlICJSRVNUZnVsIiIKK0hPTVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9Qcm9qZWN0cy9MaWJyZXN0IgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitHTk9NRUJBU0VCVUlMRENMQVNTID0gImF1dG90b29scyIKKworREVQRU5EUyA9ICIgXAorICAgIGxpYnhtbDItbmF0aXZlIFwKKyAgICBnbGliLTIuMC1uYXRpdmUgXAorICAgIGdsaWItMi4wIFwKKyAgICBsaWJzb3VwLTIuNCBcCisiCisKK2luaGVyaXQgZ25vbWViYXNlIGdvYmplY3QtaW50cm9zcGVjdGlvbiBndGstZG9jIHZhbGEKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZWNlNDU0NzI5OGE4MTEwNWYzMDczNjlkNzNjMjFiOWQiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwNTEzYWFkMzhlNWQzY2VkZDRhZTNjNTUxNjM0ZTNiZTFiOWJhYWE3OTc3NWU1M2IyZGJhOTQ1NmYxNWIwMWM5IgorCisjICogZ25vbWUgZW52aXJvbm1lbnQgcmVxdWlyZXMgbGlic291cCBidWlsZCB3aXRoIGluIGdub21lIFBBQ0tBR0VDT05GSUcKKyMgKiBsaWJzb3VwLWdub21lIHN1cHBvcnQgd2FzIHJlbW92ZWQgdXBzdHJlYW0gdGhyZWUgeWVhcnMgYWdvIFsxXQorIyBbMV0gaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYnJlc3QvY29tbWl0LzhmOTA0YThlMmJiMzhhN2JmNzIyNDVjZGYyZjFlY2FkMTdlOWE3MjAKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtZ25vbWUiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgcmVzdCBleHBlY3RzIGludHJvc3BlY3Rpb24ubTQgYXQgY3VzdG9tIGxvY2F0aW9uIChzZWUgYWNsb2NhbC5tNCkuCisgICAgY3AgLWYgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7ZGF0YWRpcn0vYWNsb2NhbC9pbnRyb3NwZWN0aW9uLm00ICR7U30vYnVpbGQKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIGV4cG9ydCBHSVJfRVhUUkFfTElCU19QQVRIPSIke0J9L3Jlc3QvLmxpYnMiCit9CisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS90cmFja2VyL3RyYWNrZXItbWluZXJzLzAwMDEtbWVzb24uYnVpbGQtSnVzdC13YXJuLWlmLXdlLWJ1aWxkLXdpdGhvdXQtbGlic2VjY29tcC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS90cmFja2VyL3RyYWNrZXItbWluZXJzLzAwMDEtbWVzb24uYnVpbGQtSnVzdC13YXJuLWlmLXdlLWJ1aWxkLXdpdGhvdXQtbGlic2VjY29tcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWViNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3RyYWNrZXIvdHJhY2tlci1taW5lcnMvMDAwMS1tZXNvbi5idWlsZC1KdXN0LXdhcm4taWYtd2UtYnVpbGQtd2l0aG91dC1saWJzZWNjb21wLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNTRlYTJjYWJmODVhZDFiZDU2OTVjZGJkMTkzNTExNWM5NDk1ZTgwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDEgRGVjIDIwMTkgMTc6MDY6NTkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbWVzb24uYnVpbGQ6IEp1c3Qgd2FybiBpZiB3ZSBidWlsZCB3aXRob3V0IGxpYnNlY2NvbXAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworbGlic2VjY29tcCBsaXZlcyBpbiBtZXRhLXNlY3VyaXR5IGN1cnJlbnRseSBhbmQgd2UgY2Fubm90IG1ha2UgaXQgYSBtYW5kYXRvcnkKK2RlcGVuZGVuY3kuIE9uY2Ugc29tZWJvZHkgbW92ZXMgbGlic2VjY29tcCB0byBtZXRhLW9lIGFuZCBhZGp1c3RzIGFsbCB0aGUKK3RhcmdldCBzcGVjaWZpYyBrbm9icyB0aGlzIHBhdGNoIGNhbiBnby4gRm9yIGRpc2N1c3Npb24gc2VlIFsxXS4KKworWzFdIGh0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtZGV2ZWwvMjAxOS1Ob3ZlbWJlci8yMDMyMzQuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ21haWwuY29tPgorLS0tCisgbWVzb24uYnVpbGQgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCitpbmRleCA3MWE5ZGY0Li4xZWFhMWEwIDEwMDY0NAorLS0tIGEvbWVzb24uYnVpbGQKKysrKyBiL21lc29uLmJ1aWxkCitAQCAtMjc5LDcgKzI3OSw3IEBAIGNwdV9zdXBwb3J0c19zZWNjb21wID0gbm90IHVuc3VwcG9ydGVkX2NwdXMuY29udGFpbnMoaG9zdF9jcHUpCisgc2VjY29tcF9yZXF1aXJlZCA9IHN5c3RlbV9zdXBwb3J0c19zZWNjb21wIGFuZCBjcHVfc3VwcG9ydHNfc2VjY29tcAorIAorIGlmIG5vdCBsaWJzZWNjb21wLmZvdW5kKCkgYW5kIHNlY2NvbXBfcmVxdWlyZWQKKy0gIGVycm9yKCdMaWJzZWNjb21wIGlzIG1hbmRhdG9yeSBmb3Igc2FuZGJveGVkIG1ldGFkYXRhIGV4dHJhY3Rpb24nKQorKyAgd2FybmluZygnQnVpbGRpbmcgd2l0aG91dCBMaWJzZWNjb21wIG1pZ2h0IGNhdXNlIHNlY3VyaXR5IGlzc3VlcyEnKQorIGVuZGlmCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy0tIAorMi4yMS4wCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS90cmFja2VyL3RyYWNrZXItbWluZXJzXzIuMy4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3RyYWNrZXIvdHJhY2tlci1taW5lcnNfMi4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiYmNhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS90cmFja2VyL3RyYWNrZXItbWluZXJzXzIuMy4xLmJiCkBAIC0wLDAgKzEsNjggQEAKK1NVTU1BUlkgPSAiVHJhY2tlciBtaW5lcnMgYW5kIG1ldGFkYXRhIGV4dHJhY3RvcnMiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gIiBcCisgICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT1lZTMxMDEyYmY5MGU3YjhjMTA4YzY5ZjE5N2YzZTNhNCBcCisgICAgZmlsZTovL0NPUFlJTkcuTEdQTDttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorIgorCitERVBFTkRTID0gIiBcCisgICAgaW50bHRvb2wtbmF0aXZlIFwKKyAgICB0cmFja2VyIFwKKyAgICB6bGliIFwKKyIKKworR05PTUVCQVNFQlVJTERDTEFTUyA9ICJtZXNvbiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdvYmplY3QtaW50cm9zcGVjdGlvbiB2YWxhIGd0ay1kb2MgbWFucGFnZXMgYmFzaC1jb21wbGV0aW9uIGZlYXR1cmVzX2NoZWNrCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjAzMjFkOGY0YWQyN2UzZmNjZGJjODM4NGU1YjNjYjgzIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiN2IxZGUwNmE3YTc5ZWExYzc4MTNjOGEyMWY4Y2QxYzU1ZjJiOTVmNzk5Y2Y5ZjQ3ZjAyMDRmM2JlOGE1OTBlMCIKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLW1lc29uLmJ1aWxkLUp1c3Qtd2Fybi1pZi13ZS1idWlsZC13aXRob3V0LWxpYnNlY2NvbXAucGF0Y2giCisKKyMgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGlzIG1hbmRhdG9yeSBhbmQgY2Fubm90IGJlIGNvbmZpZ3VyZWQKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJnb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YSIKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVF9hcHBlbmQgPSAiIGludHJvc3BlY3Rpb24iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgIGZmbXBlZyBcCisgICAgZmxhYyBcCisgICAgZ2V4aXYyIFwKKyAgICBnc3RyZWFtZXIgXAorICAgIGljdSBcCisgICAgbGliZXhpZiBcCisgICAgbGliZ3NmIFwKKyAgICBqcGVnIFwKKyAgICBwbmcgXAorICAgIHRpZmYgXAorICAgIHhtbCBcCisgICAgcGRmIFwKKyIKKworUEFDS0FHRUNPTkZJR1tmZm1wZWddICAgICA9ICIsLGZmbXBlZyIKK1BBQ0tBR0VDT05GSUdbZmxhY10gICAgICAgPSAiLURmbGFjPWVuYWJsZWQsLURmbGFjPWRpc2FibGVkLGZsYWMiCitQQUNLQUdFQ09ORklHW2dleGl2Ml0gICAgID0gIiwsZ2V4aXYyIgorUEFDS0FHRUNPTkZJR1tnc3RyZWFtZXJdICA9ICIsLGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIgorUEFDS0FHRUNPTkZJR1tndXBucF0gICAgICA9ICIsLGd1cG5wLWRsbmEiCitQQUNLQUdFQ09ORklHW2ljdV0gICAgICAgID0gIiwsaWN1IgorUEFDS0FHRUNPTkZJR1tsaWJleGlmXSAgICA9ICItRGV4aWY9ZW5hYmxlZCwtRGV4aWY9ZGlzYWJsZWQsbGliZXhpZiIKK1BBQ0tBR0VDT05GSUdbbGliZ3NmXSAgICAgPSAiLURnc2Y9ZW5hYmxlZCwtRGdzZj1kaXNhYmxlZCxsaWJnc2YiCitQQUNLQUdFQ09ORklHW2pwZWddICAgICAgID0gIi1EanBlZz1lbmFibGVkLC1EanBlZz1kaXNhYmxlZCxqcGVnIgorUEFDS0FHRUNPTkZJR1twbmddICAgICAgICA9ICItRHBuZz1lbmFibGVkLC1EcG5nPWRpc2FibGVkLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbdGlmZl0gICAgICAgPSAiLUR0aWZmPWVuYWJsZWQsLUR0aWZmPWRpc2FibGVkLHRpZmYiCitQQUNLQUdFQ09ORklHW3htbF0gICAgICAgID0gIi1EeG1sPWVuYWJsZWQsLUR4bWw9ZGlzYWJsZWQsbGlieG1sMiIKK1BBQ0tBR0VDT05GSUdbdm9yYmlzXSAgICAgPSAiLUR2b3JiaXM9ZW5hYmxlZCwtRHZvcmJpcz1kaXNhYmxlZCxsaWJ2b3JiaXMiCitQQUNLQUdFQ09ORklHW3BkZl0gICAgICAgID0gIi1EcGRmPWVuYWJsZWQsLURwZGY9ZGlzYWJsZWQscG9wcGxlciIKK1BBQ0tBR0VDT05GSUdbdXBvd2VyXSAgICAgPSAiLCx1cG93ZXIiCisKKyMgRm9yIHNlY3VyaXR5IHJlYXNvbnMgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gc2V0IGFkZCBtZXRhLXNlY3VyaXR5IGluCisjIHlvdXIgbGF5ZXJzIGFuZCAnbGlic2VjY29tcCcgdG8gUEFDS0FHRUNPTkZJRyIuCitQQUNLQUdFQ09ORklHW2xpYnNlY2NvbXBdID0gIiwsbGlic2VjY29tcCIKKyMgbm90IHlldCBpbiBtZXRhLWdub21lCitQQUNLQUdFQ09ORklHW3Jzc10gICAgICAgID0gIi1EbWluZXJfcnNzPXRydWUsLURtaW5lcl9yc3M9ZmFsc2UsbGliZ3JzcyIKKworRklMRVNfJHtQTn0gKz0gIiBcCisgICAgJHtkYXRhZGlyfS9kYnVzLTEgXAorICAgICR7ZGF0YWRpcn0vdHJhY2tlciBcCisgICAgJHtsaWJkaXJ9L3RyYWNrZXItbWluZXJzLTIuMCBcCisgICAgJHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3llbHAveWVscC14c2xfMy4zNC4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3llbHAveWVscC14c2xfMy4zNC4yLmJiCnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS95ZWxwL3llbHAteHNsXzMuMzQuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3llbHAveWVscC14c2xfMy4zNC4yLmJiCmluZGV4IDIwMDUyY2YuLjM4OTQ3ZDEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS95ZWxwL3llbHAteHNsXzMuMzQuMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtZ25vbWUveWVscC95ZWxwLXhzbF8zLjM0LjIuYmIKQEAgLTEwLDggKzEwLDggQEAKIAogREVQRU5EUyArPSAibGlieG1sMiIKIAotU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZjhjNGU3NzdhZWU4YjA1NTI1MWMzMzNlZjQ4YTBjZDAiCi1TUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlODA2M2FlZTY3ZDFkZjYzNGYzZDA2MmYxYzI4MTMwYjJkYWJiM2MwYzY2Mzk2YjFhZjkwMzg4ZjM0ZTE0ZWUyIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYjljMWM1M2E5MTE0YjQyMDU0Nzg5ZjIxMmFiMzdmNTkiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwYzNmZTYxNDYxMTNkZjI2ZmIxMjk1OTAxYjFjN2JhZWQ5ZjBmZTY3YTg3ZjQzNDVlMTE1NDNhZWZlN2NiN2FkIgogCiBSREVQRU5EU18ke1BOfV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBsaWJ4bWwyIGl0c3Rvb2wiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1nbm9tZS95ZWxwL3llbHBfMy4zNC4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3llbHAveWVscF8zLjM0LjAuYmIKaW5kZXggZjYzMTE5Ni4uMzQ4NzI3ZSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3llbHAveWVscF8zLjM0LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLWdub21lL3llbHAveWVscF8zLjM0LjAuYmIKQEAgLTQsNyArNCwxMCBAQAogICAgIGZpbGU6Ly9DT1BZSU5HO21kNT02ZTFiOWNiNzg3ZTc2ZDdlNjk0Njg4N2E2NWNhYTc1NCBcCiAiCiAKLWluaGVyaXQgZ25vbWViYXNlIGl0c3Rvb2wgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnc2V0dGluZ3MgZ2V0dGV4dCBndGstZG9jCitpbmhlcml0IGdub21lYmFzZSBpdHN0b29sIGF1dG90b29scy1icm9rZW5zZXAgZ3NldHRpbmdzIGdldHRleHQgZ3RrLWRvYyBmZWF0dXJlc19jaGVjaworCisjIGZvciB3ZWJraXRndGsKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCiAKIFNSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjc3NmUyOWJkMTY0MjRjODcxMmNiZjM0MGNmZTY0MjliIgogU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZTNkNjUyN2M1OTYzZDczMjA2ODkxYjMyZjFmMjMzNjMxNjRiZTU3ZGUyNDg1NTU1MTNiZDBiZTc3YTdiZDA0NSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L2FjY291bnRzc2VydmljZS9hY2NvdW50c3NlcnZpY2UvMDAwMS1tdXNsLUhhY2stdG8tZml4LWJ1aWxkLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLXN1cHBvcnQvYWNjb3VudHNzZXJ2aWNlL2FjY291bnRzc2VydmljZS8wMDAxLW11c2wtSGFjay10by1maXgtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzMTBmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L2FjY291bnRzc2VydmljZS9hY2NvdW50c3NlcnZpY2UvMDAwMS1tdXNsLUhhY2stdG8tZml4LWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gMmExYzcxMDM4MzljMjBkZjVjYTljZTJmYTg2MzUzNWQ4MDJmOGYzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDggRGVjIDIwMTkgMjM6NDI6MDAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbXVzbDogSGFjayB0byBmaXggY29uZmlndXJlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIG1lc29uLmJ1aWxkIHwgMTAgKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCitpbmRleCA0NDY1YTI2Li43MjZjOWZlIDEwMDY0NAorLS0tIGEvbWVzb24uYnVpbGQKKysrKyBiL21lc29uLmJ1aWxkCitAQCAtODIsOCArODIsMTQgQEAgaWYgY2MuaGFzX2hlYWRlcl9zeW1ib2woJ3V0bXB4LmgnLCAnV1RNUFhfRklMRU5BTUUnLCBwcmVmaXg6ICcjZGVmaW5lIF9HTlVfU09VUkMKKyBlbGlmIGNjLmhhc19oZWFkZXJfc3ltYm9sKCdwYXRocy5oJywgJ19QQVRIX1dUTVBYJykKKyAgIGNvbmZpZ19oLnNldCgnUEFUSF9XVE1QJywgJ19QQVRIX1dUTVBYJykKKyBlbHNlCistICBhc3NlcnQocnVuX2NvbW1hbmQoJ3Rlc3QnLCAnLWUnLCAnL3Zhci9sb2cvdXR4LmxvZycpLnJldHVybmNvZGUoKSA9PSAwLCAnRG8gbm90IGtub3cgd2hpY2ggZmlsZW5hbWUgdG8gd2F0Y2ggZm9yIHd0bXAgY2hhbmdlcycpCistICBjb25maWdfaC5zZXRfcXVvdGVkKCdQQVRIX1dUTVAnLCAnL3Zhci9sb2cvdXR4LmxvZycpCisrICAjIG11c2w6IFRoaXMgaXMganVzdCBhIGJ1aWxkIGZpeCBoYWNrLgorKyAgIyBBcyB1c3VhbCB0aGV5IGtub3cgYmV0dGVyLCBjb25zaWRlciBhbGwgb3RoZXIgcHJvamVjdHMgY3JhcCBhbmQgb2ZmZXIgemVybworKyAgIyBhbHRlcm5hdGl2ZXM6IFNvIHd0bXAgaXMgYSBkZWFkIHN0dWIgb25seSBbMV0gKD0gL2Rldi9udWxsL3d0bXAgLSB0YWtlbgorKyAgIyBmcm9tIG11c2wgc291cmNlcykuCisrICAjIE1heWJlIGEgaGVybyBjb21lcyBhbG9uZyBhbmQgYWRkcyB1dG1wcyBbMl0gdG8gbWFrZSBhY2NvdW50c3NlcnZpY2UgdXNlZnVsIGZvciBtdXNsCisrICAjIFsxXSBodHRwczovL3dpa2kubXVzbC1saWJjLm9yZy9mYXEuaHRtbCNROi1XaHktaXMtdGhlLXV0bXAvd3RtcC1mdW5jdGlvbmFsaXR5LW9ubHktaW1wbGVtZW50ZWQtYXMtc3R1YnM/CisrICAjIFsyXSBodHRwczovL2dpdGh1Yi5jb20vc2thcm5ldC91dG1wcworKyAgY29uZmlnX2guc2V0X3F1b3RlZCgnUEFUSF9XVE1QJywgJy9kZXYvbnVsbC93dG1wJykKKyBlbmRpZgorIAorICMgY29tcGlsZXIgZmxhZ3MKKy0tIAorMi4yMS4wCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L2FjY291bnRzc2VydmljZS9hY2NvdW50c3NlcnZpY2UvMDAwMi1tdXNsLWFkZC1taXNzaW5nLWZnZXRzcGVudF9yLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLXN1cHBvcnQvYWNjb3VudHNzZXJ2aWNlL2FjY291bnRzc2VydmljZS8wMDAyLW11c2wtYWRkLW1pc3NpbmctZmdldHNwZW50X3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxNjE4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L2FjY291bnRzc2VydmljZS9hY2NvdW50c3NlcnZpY2UvMDAwMi1tdXNsLWFkZC1taXNzaW5nLWZnZXRzcGVudF9yLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gODIwMjQ5ZWE4ZTM4YzU2OGU2YTM2ZmJkOWM4NTI3MThjNzY2NWI1NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDkgRGVjIDIwMTkgMDA6MTI6MDggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbXVzbDogYWRkIG1pc3NpbmcgZmdldHNwZW50X3IKKworU3RvbGVuIGZyb20gdm9pZC1saW51eAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wtc3BlY2lmaWNdCistLS0KKyBzcmMvZGFlbW9uLmMgfCAyMCArKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZGFlbW9uLmMgYi9zcmMvZGFlbW9uLmMKK2luZGV4IGM1MmJkYTMuLmE3Njc2ZmUgMTAwNjQ0CistLS0gYS9zcmMvZGFlbW9uLmMKKysrKyBiL3NyYy9kYWVtb24uYworQEAgLTE2NCw2ICsxNjQsMjYgQEAgcmVtb3ZlX2NhY2hlX2ZpbGVzIChjb25zdCBnY2hhciAqdXNlcl9uYW1lKQorICAgICAgICAgZ19yZW1vdmUgKGljb25fZmlsZW5hbWUpOworIH0KKyAKKysvKiBNdXNsIGxpYmMgZG9lcyBub3Qgc3VwcG9ydCBmZ2V0c3BlbnRfcigpLCB3cml0ZSBvd24KKysgKiB3cmFwcGVyCisrICovCisrc3RhdGljIGludCBmZ2V0c3BlbnRfcihGSUxFICpmcCwgc3RydWN0IHNwd2QgKnNwYnVmLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIHN0cnVjdCBzcHdkICoqc3BidWZwKSB7CisrICAgICAgIHN0cnVjdCBzcHdkICpzaGFkb3dfZW50cnkgPSBmZ2V0c3BlbnQoZnApOworKyAgICAgICBpZighc2hhZG93X2VudHJ5KQorKyAgICAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgc2l6ZV90IG5hbXBsZW4gPSBzdHJsZW4oc2hhZG93X2VudHJ5LT5zcF9uYW1wKTsKKysgICAgICAgc2l6ZV90IHB3ZHBsZW4gPSBzdHJsZW4oc2hhZG93X2VudHJ5LT5zcF9wd2RwKTsKKysKKysgICAgICAgaWYobmFtcGxlbiArIHB3ZHBsZW4gKyAyID4gYnVmbGVuKQorKyAgICAgICAgICAgICAgIHJldHVybiAtMTsKKysKKysgICAgICAgKnNwYnVmcCA9IG1lbWNweShzcGJ1Ziwgc2hhZG93X2VudHJ5LCBzaXplb2Yoc3RydWN0IHNwd2QpKTsKKysgICAgICAgc3BidWYtPnNwX25hbXAgPSBzdHJuY3B5KGJ1Ziwgc2hhZG93X2VudHJ5LT5zcF9uYW1wLCBuYW1wbGVuICsgMSk7CisrICAgICAgIHNwYnVmLT5zcF9wd2RwID0gc3RybmNweShidWYgKyBuYW1wbGVuICsgMSwgc2hhZG93X2VudHJ5LT5zcF9wd2RwLCBwd2RwbGVuICsgMSk7CisrCisrICAgICAgIHJldHVybiAwOworK30KKysKKyBzdGF0aWMgc3RydWN0IHBhc3N3ZCAqCisgZW50cnlfZ2VuZXJhdG9yX2ZnZXRwd2VudCAoRGFlbW9uICAgICAgICpkYWVtb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hhc2hUYWJsZSAgICp1c2VycywKKy0tIAorMi4yMS4wCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L2FjY291bnRzc2VydmljZS9hY2NvdW50c3NlcnZpY2VfMC42LjU1LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLXN1cHBvcnQvYWNjb3VudHNzZXJ2aWNlL2FjY291bnRzc2VydmljZV8wLjYuNTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjNDg5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L2FjY291bnRzc2VydmljZS9hY2NvdW50c3NlcnZpY2VfMC42LjU1LmJiCkBAIC0wLDAgKzEsMzMgQEAKK0RFU0NSSVBUSU9OID0gIkQtQnVzIGludGVyZmFjZXMgZm9yIHF1ZXJ5aW5nIGFuZCBtYW5pcHVsYXRpbmcgdXNlciBhY2NvdW50IGluZm9ybWF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvQWNjb3VudHNTZXJ2aWNlLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworREVQRU5EUyA9ICIgXAorICAgIGRidXMgXAorICAgIHBvbGtpdCBcCisiCisKK2luaGVyaXQgbWVzb24gZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MgZmVhdHVyZXNfY2hlY2sgc3lzdGVtZAorCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAicG9sa2l0IgorCitTUkNfVVJJID0gImh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci54eiIKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgXAorICAgIGZpbGU6Ly8wMDAxLW11c2wtSGFjay10by1maXgtYnVpbGQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLW11c2wtYWRkLW1pc3NpbmctZmdldHNwZW50X3IucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjZlNGM2ZmJkNDkwMjYwY2ZlMTdkZTJlNzZmNWQ4MDNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmMmIyNDE5YTdlMDZiZDljYjMzNWZmZTM5MWM3NDA5YjQ5YTBmMDEzMGI4OTBiZDU0NjkyYTM5ODY2OTljOWIiCisKK0dUS0RPQ19NRVNPTl9PUFRJT04gPSAiZ3RrX2RvYyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBkKX0iCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi1Ec3lzdGVtZD10cnVlLCAtRHN5c3RlbWQ9ZmFsc2UgLURzeXN0ZW1kc3lzdGVtdW5pdGRpcj0nbm8nLCBzeXN0ZW1kIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYWNjb3VudHMtZGFlbW9uLnNlcnZpY2UiCisKK0ZJTEVTXyR7UE59ICs9ICIgXAorICAgICR7ZGF0YWRpcn0vZGJ1cy0xIFwKKyAgICAke2RhdGFkaXJ9L3BvbGtpdC0xIFwKKyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L2NvbG9yZC1ndGsvY29sb3JkLWd0a18wLjIuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L2NvbG9yZC1ndGsvY29sb3JkLWd0a18wLjIuMC5iYgppbmRleCA4ZjZjZDA0Li43ODQ1NTA5IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtc3VwcG9ydC9jb2xvcmQtZ3RrL2NvbG9yZC1ndGtfMC4yLjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLXN1cHBvcnQvY29sb3JkLWd0ay9jb2xvcmQtZ3RrXzAuMi4wLmJiCkBAIC0xOCw0ICsxOCw4IEBACiAKICMgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGlzIG1hbmRhdG9yeSBhbmQgY2Fubm90IGJlIGNvbmZpZ3VyZWQKIFJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJnb2JqZWN0LWludHJvc3BlY3Rpb24tZGF0YSIKKworIyBjb2xvcmQKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyArPSAicG9sa2l0IgorCiBVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1RfYXBwZW5kID0gIiBpbnRyb3NwZWN0aW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLXN1cHBvcnQvbGliaGFuZHkvbGliaGFuZHlfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLXN1cHBvcnQvbGliaGFuZHkvbGliaGFuZHlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNjE1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLWdub21lL3JlY2lwZXMtc3VwcG9ydC9saWJoYW5keS9saWJoYW5keV9naXQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZnVsbCBvZiBHVEsrIHdpZGdldHMgZm9yIG1vYmlsZSBwaG9uZXMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vc291cmNlLnB1cmkuc20vTGlicmVtNS8ke0JQTn0uZ2l0O3Byb3RvY29sPWh0dHBzIgorU1JDUkVWID0gImVmN2M0YmY3NWFlMjM5NDk1MTQxYWRhODNkMmZiYWYwMzQzMTU1NjMiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorUFYgPSAiMC4wLjEyIgorCitHSVJfTUVTT05fRU5BQkxFX0ZMQUcgPSAnZW5hYmxlZCcKK0dJUl9NRVNPTl9ESVNBQkxFX0ZMQUcgPSAnZGlzYWJsZWQnCitHVEtET0NfTUVTT05fT1BUSU9OID0gJ2d0a19kb2MnCisKK2luaGVyaXQgbWVzb24gZ29iamVjdC1pbnRyb3NwZWN0aW9uIHZhbGEgZ2V0dGV4dCBndGstZG9jIGZlYXR1cmVzX2NoZWNrCisKK0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMgPSAiJHtHVEszRElTVFJPRkVBVFVSRVN9IgorCitERVBFTkRTICs9ICJndGsrMyIKKworUEFDS0FHRVMgPSsgIiR7UE59LWV4YW1wbGVzIgorRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtiaW5kaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLXN1cHBvcnQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtZ25vbWUtYXBwcy5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWdub21lLWFwcHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyZTllOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWdub21lLWFwcHMuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJHTk9NRSBhcHBsaWNhdGlvbnMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9NSVQ7bWQ1PTA4MzVhZGU2OThlMGJjZjg1MDZlY2RhMmY3YjRmMzAyIgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBmZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSA9ICIgXAorICAgIGV2b2x1dGlvbi1kYXRhLXNlcnZlciBcCisgICAgZXZpbmNlIFwKKyAgICBmaWxlLXJvbGxlciBcCisgICAgZ2VkaXQgXAorICAgIGdub21lLWNhbGN1bGF0b3IgXAorICAgIGdub21lLWZvbnQtdmlld2VyIFwKKyAgICBnbm9tZS10ZXJtaW5hbCBcCisgICAgbGlid25jazMgXAorICAgIG5hdXRpbHVzIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BvbGtpdCcsICdnbm9tZS1zeXN0ZW0tbW9uaXRvcicsICcnLCBkKX0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1nbm9tZS9yZWNpcGVzLXN1cHBvcnQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtZ25vbWUtZGVza3RvcC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWdub21lLWRlc2t0b3AuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzMzNmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtZ25vbWUvcmVjaXBlcy1zdXBwb3J0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWdub21lLWRlc2t0b3AuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJCYXNpYyBHTk9NRSBkZXNrdG9wIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSBwb2xraXQgc3lzdGVtZCBwYW0gZ29iamVjdC1pbnRyb3NwZWN0aW9uLWRhdGEiCisKK1JERVBFTkRTXyR7UE59ID0gIiBcCisgICAgYWR3YWl0YS1pY29uLXRoZW1lIFwKKyAgICBhZHdhaXRhLWljb24tdGhlbWUtY3Vyc29ycyBcCisgICAgZXZvbHV0aW9uLWRhdGEtc2VydmVyIFwKKyAgICBnbm9tZS1iYWNrZ3JvdW5kcyBcCisgICAgZ25vbWUtYmx1ZXRvb3RoIFwKKyAgICBnbm9tZS1jb250cm9sLWNlbnRlciBcCisgICAgZ25vbWUtZGVza3RvcDMgXAorICAgIGdub21lLWZsYXNoYmFjayBcCisgICAgZ25vbWUta2V5cmluZyBcCisgICAgZ25vbWUtbWVudXMzIFwKKyAgICBnbm9tZS1zZXNzaW9uIFwKKyAgICBnbm9tZS1zZXR0aW5ncy1kYWVtb24gXAorICAgIGdub21lLXNoZWxsIFwKKyAgICBnbm9tZS1zaGVsbC1leHRlbnNpb25zIFwKKyAgICBnbm9tZS10d2Vha3MgXAorICAgIGdtaW1lIFwKKyAgICBndmZzIGd2ZnNkLWZ0cCBndmZzZC1zZnRwIGd2ZnNkLXRyYXNoIFwKKyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtaW5pdHJhbWZzL3JlY2lwZXMtZGV2dG9vbHMva2xpYmMva2xpYmMuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1pbml0cmFtZnMvcmVjaXBlcy1kZXZ0b29scy9rbGliYy9rbGliYy5pbmMKaW5kZXggZTFhZmU3Zi4uMjg5Mjg4ZCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1pbml0cmFtZnMvcmVjaXBlcy1kZXZ0b29scy9rbGliYy9rbGliYy5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1pbml0cmFtZnMvcmVjaXBlcy1kZXZ0b29scy9rbGliYy9rbGliYy5pbmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogT1BURkxBR1MgPSAiJHtUVU5FX0NDQVJHU30gLU9zIgogT1BURkxBR1NfYXBwZW5kX3Rvb2xjaGFpbi1jbGFuZyA9ICIgLWZuby1idWlsdGluLWJjbXAiCitPUFRGTEFHU19hcHBlbmRfdG9vbGNoYWluLWNsYW5nX21pcHNhcmNoID0gIiAtbm8taW50ZWdyYXRlZC1hcyIKIAogUEFSQUxMRUxfTUFLRSA9ICIiCiBFWFRSQV9PRU1BS0UgPSAiJ0tMSUJDQVJDSD0ke0tMSUJDX0FSQ0h9JyBcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcnlnZWwvcnlnZWxfMC4zNy4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3J5Z2VsL3J5Z2VsXzAuMzcuMC5iYgppbmRleCAwYWRjNzIxLi42ZWUwMmZjIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcnlnZWwvcnlnZWxfMC4zNy4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yeWdlbC9yeWdlbF8wLjM3LjAuYmIKQEAgLTM3LDEwICszNywxMiBAQAogICAgICAgICMgUmVtb3ZlIC5sYSBmaWxlcyBmb3IgbG9hZGFibGUgbW9kdWxlcwogICAgICAgIHJtIC1mICR7RH0vJHtsaWJkaXJ9L3J5Z2VsLSR7TElCVn0vZW5naW5lcy8qLmxhCiAgICAgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnlnZWwtJHtMSUJWfS9wbHVnaW5zLyoubGEKLSAgICAgICBpZiBbIC1lICR7RH0ke2xpYmRpcn0vc3lzdGVtZC91c2VyL3J5Z2VsLnNlcnZpY2UgXTsgdGhlbgorICAgICAgIGlmIFsgLWUgJHtEfSR7bm9uYXJjaF9saWJkaXJ9L3N5c3RlbWQvdXNlci9yeWdlbC5zZXJ2aWNlIF07IHRoZW4KICAgICAgICAgICAgICAgIG1rZGlyIC1wICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0gICAgICAgICAgICAgICBtdiAke0R9JHtsaWJkaXJ9L3N5c3RlbWQvdXNlci9yeWdlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCi0gICAgICAgICAgICAgICBybWRpciAke0R9JHtsaWJkaXJ9L3N5c3RlbWQvdXNlciAke0R9JHtsaWJkaXJ9L3N5c3RlbWQKKyAgICAgICAgICAgICAgIG12ICR7RH0ke25vbmFyY2hfbGliZGlyfS9zeXN0ZW1kL3VzZXIvcnlnZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICAgICAgICAgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bm9uYXJjaF9saWJkaXJ9L3N5c3RlbWQvdXNlciBcCisgICAgICAgICAgICAgICAke0R9JHtub25hcmNoX2xpYmRpcn0vc3lzdGVtZCBcCisgICAgICAgICAgICAgICAke0R9JHtub25hcmNoX2xpYmRpcn0KICAgICAgICBmaQogfQogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1kdmIvdHZoZWFkZW5kL3R2aGVhZGVuZC8wMDAxLWFsbG9jYXRlLXNwYWNlLWZvci1idWYtb24taGVhcC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLWR2Yi90dmhlYWRlbmQvdHZoZWFkZW5kLzAwMDEtYWxsb2NhdGUtc3BhY2UtZm9yLWJ1Zi1vbi1oZWFwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZDc2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1kdmIvdHZoZWFkZW5kL3R2aGVhZGVuZC8wMDAxLWFsbG9jYXRlLXNwYWNlLWZvci1idWYtb24taGVhcC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGQ0YTQwNWY4N2ZjMjE1YzE0ZTYxMGEyNWI1YTZiMTQwNjBjMWVmMTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNSBEZWMgMjAxOSAxMzo1Mzo1MiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBhbGxvY2F0ZSBzcGFjZSBmb3IgYnVmIG9uIGhlYXAKKworQXZvaWRzCit8IHNyYy9lcGdncmFiL21vZHVsZS94bWx0di5jOjIwNDo0NzogZXJyb3I6ICclcycgZGlyZWN0aXZlIG91dHB1dCBtYXkgYmUgdHJ1bmNhdGVkIHdyaXRpbmcgYmV0d2VlbiAyIGFuZCAyMTQ3NDgzNjQ1IGJ5dGVzIGludG8gYSByZWdpb24gb2Ygc2l6ZSAxMTUgWy1XZXJyb3I9Zm9ybWF0LXRydW5jYXRpb249XQorfCAgIDIwNCB8ICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKS0xLCAiZGRwcm9naWQ6Ly8lcy8lcyIsIG1vZC0+aWQsIHMpOworfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL3R2aGVhZGVuZC90dmhlYWRlbmQvcHVsbC8xMzI0XQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9lcGdncmFiL21vZHVsZS94bWx0di5jIHwgNiArKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VwZ2dyYWIvbW9kdWxlL3htbHR2LmMgYi9zcmMvZXBnZ3JhYi9tb2R1bGUveG1sdHYuYworaW5kZXggMzRhYjA1YmRiLi5iMWE5NTY2MTQgMTAwNjQ0CistLS0gYS9zcmMvZXBnZ3JhYi9tb2R1bGUveG1sdHYuYworKysrIGIvc3JjL2VwZ2dyYWIvbW9kdWxlL3htbHR2LmMKK0BAIC0xOTcsMTEgKzE5NywxMiBAQCBzdGF0aWMgdm9pZCBwYXJzZV94bWx0dl9kZF9wcm9naWQKKyAgIChlcGdncmFiX21vZHVsZV90ICptb2QsIGNvbnN0IGNoYXIgKnMsIGNoYXIgKip1cmksIGNoYXIgKipzdXJpLAorICAgIGVwZ19lcGlzb2RlX251bV90ICplcG51bSkKKyB7CistICBjaGFyIGJ1ZlsxMjhdOworICAgaWYgKHN0cmxlbihzKSA8IDIpIHJldHVybjsKKyAKKysgIGNoYXIqIGJ1ZiA9IChjaGFyICopbWFsbG9jKHN0cmxlbihzKSArIHN0cmxlbihtb2QtPmlkKSArIDEzKTsKKysgIGJ1ZltzdHJsZW4ocykgKyBzdHJsZW4obW9kLT5pZCkgKyAxMl0gPSAnXDAnOworICAgLyogUmF3IFVSSSAqLworLSAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKS0xLCAiZGRwcm9naWQ6Ly8lcy8lcyIsIG1vZC0+aWQsIHMpOworKyAgc25wcmludGYoYnVmLCBzdHJsZW4ocykgKyBzdHJsZW4obW9kLT5pZCkgKyAxMiwgImRkcHJvZ2lkOi8vJXMvJXMiLCBtb2QtPmlkLCBzKTsKKyAKKyAgIC8qIFNIIC0gc2VyaWVzIHdpdGhvdXQgZXBpc29kZSBpZCBzbyBpZ25vcmUgKi8KKyAgIGlmIChzdHJuY21wKCJTSCIsIHMsIDIpKQorQEAgLTIxOSw2ICsyMjAsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV94bWx0dl9kZF9wcm9naWQKKyAgICAgICBpZiAoYnVmW2UrMV0pIHNzY2FuZigmYnVmW2UrMV0sICIlaHUiLCAmKGVwbnVtLT5lX251bSkpOworICAgICB9CisgICB9CisrICBmcmVlKGJ1Zik7CisgfQorIAorIC8qKgorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtZHZiL3R2aGVhZGVuZC90dmhlYWRlbmRfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtZHZiL3R2aGVhZGVuZC90dmhlYWRlbmRfZ2l0LmJiCmluZGV4IGE4MThhOTYuLjIwZmFlZjAgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLWR2Yi90dmhlYWRlbmQvdHZoZWFkZW5kX2dpdC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1kdmIvdHZoZWFkZW5kL3R2aGVhZGVuZF9naXQuYmIKQEAgLTEwLDYgKzEwLDcgQEAKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3R2aGVhZGVuZC90dmhlYWRlbmQuZ2l0IFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtYWRqdXN0LWZvci02NGJpdC10aW1lX3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hbGxvY2F0ZS1zcGFjZS1mb3ItYnVmLW9uLWhlYXAucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFNSQ1JFViA9ICJmZGE4OWU4NWUwYjZhZTc5NmQ4YTA5ZTE3OGQzOTM3YWE3ODY5MjcwIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9kY2EvZGNhZGVjLzAwMDEtZGVmaW5lLUJBU0VMSUItbWFrZS12YXJpYWJsZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZGNhL2RjYWRlYy8wMDAxLWRlZmluZS1CQVNFTElCLW1ha2UtdmFyaWFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjZTgwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZGNhL2RjYWRlYy8wMDAxLWRlZmluZS1CQVNFTElCLW1ha2UtdmFyaWFibGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAxOGNjNjk0NjBkMmEwYzc1Njg4MGJkNTRmZGEzNmFmYjAxNzNlYTAyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgRGVjIDIwMTkgMTk6NDc6MzYgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZGVmaW5lIEJBU0VMSUIgbWFrZSB2YXJpYWJsZQorCitUaGlzIGhlbHBzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxpYmRpciBmcm9tIGVudmlyb25tZW50CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vZm9vODYvZGNhZGVjL3B1bGwvNjFdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGE1MDM2OTguLjhmMzIzYmUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC03LDggKzcsOSBAQCBBUElfUEFUQ0ggPSAwCisgQ0ZMQUdTIDo9IC1zdGQ9Z251OTkgLURfRklMRV9PRkZTRVRfQklUUz02NCAtV2FsbCAtV2V4dHJhIC1PMyAtZmZhc3QtbWF0aCAtZyAtTU1EICQoQ0ZMQUdTKQorIAorIFBSRUZJWCA/PSAvdXNyL2xvY2FsCisrQkFTRUxJQiA/PSBsaWIKKyBCSU5ESVIgPz0gJChQUkVGSVgpL2JpbgorLUxJQkRJUiA/PSAkKFBSRUZJWCkvbGliCisrTElCRElSID89ICQoUFJFRklYKS8kKEJBU0VMSUIpCisgSU5DTFVERURJUiA/PSAkKFBSRUZJWCkvaW5jbHVkZQorIAorIFNSQ19ESVIgOj0gJChyZWFscGF0aCAkKGRpciAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkKKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZGNhL2RjYWRlY18wLjIuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZGNhL2RjYWRlY18wLjIuMC5iYgppbmRleCA0NWI1M2MxLi4xYTUxYWJjIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2RjYS9kY2FkZWNfMC4yLjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9kY2EvZGNhZGVjXzAuMi4wLmJiCkBAIC00LDE0ICs0LDE2IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxHUEx2Mi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKIAogU1JDUkVWID0gImI5M2RlZWQxYTIzMWRkNmRkN2UzOWI5ZmU3ZDJhYmUwNWFhMDAxNTgiCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZm9vODYvZGNhZGVjLmdpdDtwcm90b2NvbD1odHRwIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Zvbzg2L2RjYWRlYy5naXQ7cHJvdG9jb2w9aHR0cHMgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1kZWZpbmUtQkFTRUxJQi1tYWtlLXZhcmlhYmxlLnBhdGNoIFwKKyAgICAgICAgICAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKIGluaGVyaXQgbGliX3BhY2thZ2UKIAotRVhUUkFfT0VNQUtFID0gIkNPTkZJR19TSEFSRUQ9MSIKK0VYVFJBX09FTUFLRSA9ICJDT05GSUdfU0hBUkVEPTEgUFJFRklYPSR7cHJlZml4fSBCQVNFTElCPSR7YmFzZWxpYn0iCiAKIGRvX2luc3RhbGwoKSB7Ci0Jb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9IiR7RH0iIFBSRUZJWD0iJHtwcmVmaXh9IgorCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSIke0R9IgogfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9kdmItYXBwcy9kdmItYXBwc18xLjEuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZHZiLWFwcHMvZHZiLWFwcHNfMS4xLjEuYmIKaW5kZXggM2Y0OTExOC4uZjM1NGVmMyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9kdmItYXBwcy9kdmItYXBwc18xLjEuMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2R2Yi1hcHBzL2R2Yi1hcHBzXzEuMS4xLmJiCkBAIC0xMSw2ICsxMSw3IEBACiAgICAgICAgICAgZmlsZTovLzAwMDQtTWFrZWZpbGUtcmVtb3ZlLXRlc3QucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly8wMDA1LWxpYnVjc2ktb3B0aW1pemF0aW9uLXJlbW92YWwucGF0Y2ggXAogICAgICAgICAgIGZpbGU6Ly8wMDA2LUNBX1NFVF9QSUQucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly8wMDAxLWR2YmRhdGUtUmVtb3ZlLU9ic29sZXRlZC1zdGltZS1BUEktY2FsbHMucGF0Y2ggXAogICAgICAgICAgICIKIAogUyA9ICIke1dPUktESVJ9LyR7QlBOfSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZHZiLWFwcHMvZmlsZXMvMDAwMS1kdmJkYXRlLVJlbW92ZS1PYnNvbGV0ZWQtc3RpbWUtQVBJLWNhbGxzLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9kdmItYXBwcy9maWxlcy8wMDAxLWR2YmRhdGUtUmVtb3ZlLU9ic29sZXRlZC1zdGltZS1BUEktY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzNWI1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZHZiLWFwcHMvZmlsZXMvMDAwMS1kdmJkYXRlLVJlbW92ZS1PYnNvbGV0ZWQtc3RpbWUtQVBJLWNhbGxzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZDY4MTdkYmFmNDA3ZjY1ZGQ0YWYxMmM1MTczNjE1M2ZhZThiMjE3ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDIxIERlYyAyMDE5IDA4OjM2OjExIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGR2YmRhdGU6IFJlbW92ZSBPYnNvbGV0ZWQgc3RpbWUgQVBJIGNhbGxzCisKK3N0aW1lKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBnbGliYyAyLjMxKyBpdHMgcmVjb21tZW5kZWQgdG8KK3JlcGxhY2VkIHdpdGggY2xvY2tfc2V0dGltZSgpCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyB1dGlsL2R2YmRhdGUvZHZiZGF0ZS5jIHwgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3V0aWwvZHZiZGF0ZS9kdmJkYXRlLmMgYi91dGlsL2R2YmRhdGUvZHZiZGF0ZS5jCitpbmRleCBmMGRmNDM3Li40OTJlZDc5IDEwMDY0NAorLS0tIGEvdXRpbC9kdmJkYXRlL2R2YmRhdGUuYworKysrIGIvdXRpbC9kdmJkYXRlL2R2YmRhdGUuYworQEAgLTMwOSw3ICszMDksMTAgQEAgaW50IGF0c2Nfc2Nhbl9kYXRlKHRpbWVfdCAqcnhfdGltZSwgdW5zaWduZWQgaW50IHRvKQorICAqLworIGludCBzZXRfdGltZSh0aW1lX3QgKiBuZXdfdGltZSkKKyB7CistCWlmIChzdGltZShuZXdfdGltZSkpIHsKKysJc3RydWN0IHRpbWVzcGVjIHRzOworKwl0cy50dl9zZWMgPSAmbmV3X3RpbWU7CisrCXRzLnR2X25zZWMgPSAwOworKwlpZiAoY2xvY2tfc2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKSkgeworIAkJcGVycm9yKCJVbmFibGUgdG8gc2V0IHRpbWUiKTsKKyAJCXJldHVybiAtMTsKKyAJfQorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9mbHVpZHN5bnRoL2ZsdWlkc3ludGguaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9mbHVpZHN5bnRoL2ZsdWlkc3ludGguaW5jCmluZGV4IDc2NGVkMzcuLjljZTY1MDYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZmx1aWRzeW50aC9mbHVpZHN5bnRoLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZsdWlkc3ludGgvZmx1aWRzeW50aC5pbmMKQEAgLTQsOSArNCw5IEBACiBMSUNFTlNFID0gIkxHUEwtMi4xIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZmMxNzhiY2Q0MjUwOTA5MzlhOGI2MzRkMWQ2YTk1OTQiCiAKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9GbHVpZFN5bnRoL2ZsdWlkc3ludGguZ2l0O2JyYW5jaD0yLjAueCIKLVNSQ1JFViA9ICJjMmY0NjgzYmY1N2Y2MTQ1MWQxNGQyMTlmZGIyNWNmOWYyOWNiN2ZlIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL0ZsdWlkU3ludGgvZmx1aWRzeW50aC5naXQiCitTUkNSRVYgPSAiMzdjOWFlMmJmNDMxYTc2NDAzMmYwMjNiM2IyYzBjMGI4NmI3YzI3MiIKIFMgPSAiJHtXT1JLRElSfS9naXQiCi1QViA9ICIyLjAuOSIKK1BWID0gIjIuMS4wIgogCiBpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXItMS4wL2dzdC1zaGFya18wLjIuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3Qtc2hhcmtfZ2l0LmJiCnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3Qtc2hhcmtfMC4yLjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3Qtc2hhcmtfZ2l0LmJiCmluZGV4IDU0MDlmMzIuLmQwNDdjYWUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3Qtc2hhcmtfMC4yLjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXItMS4wL2dzdC1zaGFya19naXQuYmIKQEAgLTEwLDEyICsxMCwxNCBAQAogCiBTUkNCUkFOQ0ggPz0gIm1hc3RlciIKIAotU1JDUkVWX2Jhc2UgPSAiYTYwYjM5OTZmZTMzNzZkNDIzMzRmYzg5MDE0ZTlkNmY2YWY2Mjg5OSIKLVNSQ1JFVl9jb21tb24gPSAiYjY0ZjAzZjYwOTAyNDU2MjQ2MDhiZWI1ZDJmZmYzMzVlMjNhMDFjMCIKK1BWID0gIjAuNi4xIgorCitTUkNSRVZfYmFzZSA9ICJjNDFhMDVjYzllMjMxMGMyZjczZWRhNGI0ZjBiNDQ3N2JmNDQ3OWM1IgorU1JDUkVWX2NvbW1vbiA9ICI4OGU1MTJjYTcxOTdhNDVjNDExNGY3ZmE5OTMxMDhmMjMyNDViZjUwIgogCiBTUkNfVVJJID0gIiBcCiAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9SaWRnZVJ1bi9nc3Qtc2hhcmsuZ2l0O3Byb3RvY29sPWh0dHBzO2JyYW5jaD0ke1NSQ0JSQU5DSH07bmFtZT1iYXNlIFwKLSAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvZ3N0cmVhbWVyL2NvbW1vbi5naXQ7cHJvdG9jb2w9aHR0cHM7ZGVzdHN1ZmZpeD1naXQvY29tbW9uO25hbWU9Y29tbW9uOyBcCisgICAgZ2l0Oi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvY29tbW9uLmdpdDtwcm90b2NvbD1odHRwcztkZXN0c3VmZml4PWdpdC9jb21tb247bmFtZT1jb21tb247IFwKICAgICAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci0xLjAvZ3N0ZC8wMDAxLUxvb2stZm9yLWd0ay1kb2MubWFrZS1pbi1idWlsZGRpci5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3RkLzAwMDEtTG9vay1mb3ItZ3RrLWRvYy5tYWtlLWluLWJ1aWxkZGlyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTI4NjE2Li4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3RkLzAwMDEtTG9vay1mb3ItZ3RrLWRvYy5tYWtlLWluLWJ1aWxkZGlyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotRnJvbSBhODRlOWE2ZTFkY2E2ODVlZGEwNzJkNThiNTg1NTZiNWIzNWNiNGM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMTAgU2VwIDIwMTggMjE6MTY6NTAgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gTG9vayBmb3IgZ3RrLWRvYy5tYWtlIGluIGJ1aWxkZGlyCi0KLXRoaXMgaXMgZXZpZGVudCB3aGVuIFMgIT0gQiBiZWNhdXNlIGd0a2RvY2l6ZQotZ2VuZXJhdGVzIHRoaXMgZmlsZSBhbmQgaXRzIGFjdHVhbGx5IGJ1aWx0IGludG8KLWJ1aWxkIGFyZWEKLQotVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9SaWRnZVJ1bi9nc3RkLTEueC9wdWxsLzM5XQotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gZG9jcy9yZWZlcmVuY2UvZ3N0ZC9NYWtlZmlsZS5hbSB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2RvY3MvcmVmZXJlbmNlL2dzdGQvTWFrZWZpbGUuYW0gYi9kb2NzL3JlZmVyZW5jZS9nc3RkL01ha2VmaWxlLmFtCi1pbmRleCBmODYwZmExLi42Mjg3MGRhIDEwMDY0NAotLS0tIGEvZG9jcy9yZWZlcmVuY2UvZ3N0ZC9NYWtlZmlsZS5hbQotKysrIGIvZG9jcy9yZWZlcmVuY2UvZ3N0ZC9NYWtlZmlsZS5hbQotQEAgLTY2LDcgKzY2LDcgQEAgR1RLRE9DX0xJQlM9JCh0b3BfYnVpbGRkaXIpL2dzdGQvbGliZ3N0ZC1jb3JlLmxhCi0gCi0gCi0gIyBUaGlzIGluY2x1ZGVzIHRoZSBzdGFuZGFyZCBndGstZG9jIG1ha2UgcnVsZXMsIGNvcGllZCBieSBndGtkb2NpemUuCi0taW5jbHVkZSAkKHRvcF9zcmNkaXIpL2RvY3MvZ3RrLWRvYy5tYWtlCi0raW5jbHVkZSAkKHRvcF9idWlsZGRpcikvZG9jcy9ndGstZG9jLm1ha2UKLSAKLSAjIENvbW1lbnQgdGhpcyBvdXQgaWYgeW91IHdhbnQgJ21ha2UgY2hlY2snIHRvIHRlc3QgeW91IGRvYyBzdGF0dXMKLSAjIGFuZCBydW4gc29tZSBzYW5pdHkgY2hlY2tzCi0tLSAKLTIuMTguMAotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci0xLjAvZ3N0ZC8wMDAxLWdzdGQteW9jdG8tY29tcGF0aWJpbGl0eS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3RkLzAwMDEtZ3N0ZC15b2N0by1jb21wYXRpYmlsaXR5LnBhdGNoCmluZGV4IGZmY2M2ZWEuLmMxYzg4OTkgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3RkLzAwMDEtZ3N0ZC15b2N0by1jb21wYXRpYmlsaXR5LnBhdGNoCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3RkLzAwMDEtZ3N0ZC15b2N0by1jb21wYXRpYmlsaXR5LnBhdGNoCkBAIC03LDE5ICs3LDE0IEBACiAgZ3N0ZC9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICB8IDIgKy0KICAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIAotZGlmZiAtLWdpdCBhL2dzdGQvTWFrZWZpbGUuYW0gYi9nc3RkL01ha2VmaWxlLmFtCi1pbmRleCAxM2M1NTFkLi4xMWZlMjAyIDEwMDY0NAogLS0tIGEvZ3N0ZC9NYWtlZmlsZS5hbQogKysrIGIvZ3N0ZC9NYWtlZmlsZS5hbQotQEAgLTQ5LDcgKzQ5LDcgQEAgYmluX1BST0dSQU1TID0gZ3N0ZAorQEAgLTc0LDcgKzc0LDcgQEAgZ3N0ZF9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpCQkJCQlcCisgCSAgICAgIC1ER1NURF9MT0dfU1RBVEVfRElSPVwiJChnc3RkbG9nc3RhdGVkaXIpXCIJXAorIAkgICAgICAtREdTVERfUlVOX1NUQVRFX0RJUj1cIiQoZ3N0ZHJ1bnN0YXRlZGlyKVwiCiAgCi0gZ3N0ZF9TT1VSQ0VTID0gZ3N0ZC5jCi0gZ3N0ZF9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR0lPX0NGTEFHUykgJChHSlNPTl9DRkxBR1MpCi0tZ3N0ZF9MREZMQUdTID0gJChHU1RfTElCUykgJChHSU9fTElCUykgJChHSlNPTl9MSUJTKSAtV2wsLXJwYXRoIC1XbCwkKGxpYmRpcikKLStnc3RkX0xERkxBR1MgPSAkKEdTVF9MSUJTKSAkKEdJT19MSUJTKSAkKEdKU09OX0xJQlMpCistZ3N0ZF9MREZMQUdTID0gJChHU1RfTElCUykgJChHSU9fTElCUykgJChHSU9fVU5JWF9MSUJTKSAkKEdKU09OX0xJQlMpICQoTElCRF9MSUJTKSAtV2wsLXJwYXRoIC1XbCwkKGxpYmRpcikKKytnc3RkX0xERkxBR1MgPSAkKEdTVF9MSUJTKSAkKEdJT19MSUJTKSAkKEdJT19VTklYX0xJQlMpICQoR0pTT05fTElCUykgJChMSUJEX0xJQlMpCiAgZ3N0ZF9MREFERCA9IGxpYmdzdGQtY29yZS5sYQogIAogIGdzdGRpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9nc3RkCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3RkX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyLTEuMC9nc3RkX2dpdC5iYgppbmRleCA4MjhjYWE4Li4xODM0YTgzIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci0xLjAvZ3N0ZF9naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXItMS4wL2dzdGRfZ2l0LmJiCkBAIC01LDIxICs1LDI5IEBACiBMSUNFTlNFID0gIkdQTHYyKyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgogCi1ERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBnc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIganNvbi1nbGliIGxpYmRhZW1vbiIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIGdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciBqc29uLWdsaWIgbGliZGFlbW9uIGphbnNzb24iCiAKIFNSQ0JSQU5DSCA/PSAibWFzdGVyIgotU1JDUkVWID0gIjM1MjZkMGZmZGJjY2MzNzVkYjdkNWZlMzNhNzJjNjhiMTM0NjU3YzIiCitTUkNSRVYgPSAiYTY2MjFhNTc3OGIyMzQ2NTFhYTJhZGJiZTMwNGQ5MDZhM2ZhNjRkMSIKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0QGdpdGh1Yi5jb20vUmlkZ2VSdW4vZ3N0ZC0xLnguZ2l0O3Byb3RvY29sPWh0dHBzO2JyYW5jaD0ke1NSQ0JSQU5DSH0gXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1nc3RkLXlvY3RvLWNvbXBhdGliaWxpdHkucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1Mb29rLWZvci1ndGstZG9jLm1ha2UtaW4tYnVpbGRkaXIucGF0Y2ggXAogICAgICAgICAgICAiCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiAjIFJlbW92ZSB0aGUgK3JlYWxseSB3aGVuIHVwc3RyZWFtIHZlcnNpb24gaXMgPiAxLjAKLVBWID0gIjEuMCtyZWFsbHkwLjYuMyIKK1BWID0gIjEuMCtyZWFsbHkwLjguMCIKIAogaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWRvYwogCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLQlzZWQgLWkgLWUgInN8aW5jbHVkZSBcJCh0b3BfYnVpbGRkaXIpL2RvY3MvZ3RrLWRvYy5tYWtlfHxnIiAke1N9L2RvY3MvcmVmZXJlbmNlL2dzdGQvTWFrZWZpbGUuYW0KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICAgICBybSAtZnIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuICR7RH0vcnVuICR7RH0ke2JpbmRpcn0vZ3N0LWNsaWVudCAke0R9JHtiaW5kaXJ9L2dzdGQtY2xpZW50CisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisgICAgICAgICAgICAgICAgZWNobyAiZCAvcnVuLyR7QlBOfSAtIC0gLSAtIiBcCisgICAgICAgICAgICAgICAgPiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLyR7QlBOfS5jb25mCisgICAgICAgICAgICAgICAgZWNobyAiZCAvJHtsb2NhbHN0YXRlZGlyfS9sb2cvJHtCUE59IDA3NTUgcm9vdCByb290IC0iIFwKKyAgICAgICAgICAgICAgICA+PiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLyR7QlBOfS5jb25mCisgICAgICAgIGZpCisgICAgICAgIGxuIC1zZiBnc3QtY2xpZW50LTEuMCAke0R9JHtiaW5kaXJ9L2dzdC1jbGllbnQKKyAgICAgICAgbG4gLXNmIGdzdC1jbGllbnQtMS4wICR7RH0ke2JpbmRpcn0vZ3N0ZC1jbGllbnQKIH0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvanVjZS9uYXRpdmVzZGstcHJvanVjZXJfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9qdWNlL25hdGl2ZXNkay1wcm9qdWNlcl9naXQuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MzZiYWUuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9qdWNlL25hdGl2ZXNkay1wcm9qdWNlcl9naXQuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWluaGVyaXQgbmF0aXZlc2RrCi1pbmNsdWRlIHByb2p1Y2VyLmluYwotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2p1Y2UvcHJvanVjZXItbmF0aXZlX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvanVjZS9wcm9qdWNlci1uYXRpdmVfZ2l0LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjU0ZmI5Li4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvanVjZS9wcm9qdWNlci1uYXRpdmVfZ2l0LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1pbmhlcml0IG5hdGl2ZQotaW5jbHVkZSBwcm9qdWNlci5pbmMKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9qdWNlL3Byb2p1Y2VyLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvanVjZS9wcm9qdWNlci5pbmMKaW5kZXggNjNlZDllOS4uZmM4YmFhNCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9qdWNlL3Byb2p1Y2VyLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2p1Y2UvcHJvanVjZXIuaW5jCkBAIC00LDIzICs0LDM4IEBACiBTRUNUSU9OID0gInV0aWxzIgogSE9NRVBBR0UgPSAiaHR0cDovL2p1Y2UuY29tLyIKIExJQ0VOU0UgPSAiR1BMdjMiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUubWQ7bWQ1PTY1YzUwYjRmZjM1MjJiOTk0MzZkYTEwMDUzNmNjZDFjIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5tZDttZDU9YTIwZjkxNjIyYTQ3ZDRlNGFmOTM0MGQ1ZDNmMWEyZDgiCiAKLWluaGVyaXQgcGtnY29uZmlnCitpbmhlcml0IHBrZ2NvbmZpZyBmZWF0dXJlc19jaGVjawogCi1ERVBFTkRTID0gImxpYngxMSBsaWJ4ZXh0IGxpYnhpbmVyYW1hIGxpYnhyYW5kciBsaWJ4Y3Vyc29yIGZyZWV0eXBlIGFsc2EtbGliIGN1cmwiCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogCi1TUkNSRVYgPSAiNGY0MWYyOGI0N2QwMWI5Mzk1NTkxMjNkMTQ1YjRlNTg2MDUyOGJiNyIKK0RFUEVORFMgPSAibGlieDExIGxpYnhleHQgbGlieGluZXJhbWEgbGlieHJhbmRyIGxpYnhjdXJzb3IgZnJlZXR5cGUgYWxzYS1saWIgY3VybCBiemlwMiBsaWJwbmcgaGFyZmJ1enogZ2xpYi0yLjAgbGlicGNyZSIKK0RFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgbGliZXhlY2luZm8iCisKK1NSQ1JFViA9ICI3MjRhZTI3YzcxZWY4MDliODM2ZGYwNjcxM2NmOWU1MGJjMTQxNjJiIgogQlJBTkNIID0gIm1hc3RlciIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9XZUFyZVJPTEkvSlVDRS5naXQ7cHJvdG9jb2w9aHR0cHM7YnJhbmNoPSR7QlJBTkNIfSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9XZUFyZVJPTEkvSlVDRS5naXQ7cHJvdG9jb2w9aHR0cHM7YnJhbmNoPSR7QlJBTkNIfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtd2Via2l0LWNvbXBvbmVudC5wYXRjaCBcCisiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCi1QViA9ICI1LjAuMSIKK1BWID0gIjUuNC41IgogCiBKVUNFX1BST0pVQ0VSX0JVSUxEX1BBVEggPSAiJHtCfS9leHRyYXMvUHJvanVjZXIvQnVpbGRzIgogSlVDRV9QUk9KVUNFUl9NQUtFRklMRV9QQVRIID0gIiR7SlVDRV9QUk9KVUNFUl9CVUlMRF9QQVRIfS9MaW51eE1ha2VmaWxlIgogSlVDRV9QUk9KVUNFUiA9ICIke0pVQ0VfUFJPSlVDRVJfTUFLRUZJTEVfUEFUSH0vYnVpbGQvUHJvanVjZXIiCiAKKyMgZXhwb3J0IGR1bW15IFRBUkdFVF9BUkNIIHRoYXQgZG9lc24ndCBkbyBtdWNoLAorIyBidXQgZGlzYWJsZXMgIi1tYXJjaD1uYXRpdmUiIG9wdGltaXphdGlvbiB3aGljaCBkb2VzCisjIG5vdCB3b3JrIG9uIGNyb3NzIGJ1aWxkcworRVhUUkFfT0VNQUtFID0gIlY9MSBKVUNFX0FSQ0hfTEFCRUw9JHtUQVJHRVRfQVJDSH0gVEFSR0VUX0FSQ0g9Jy1nJyIKKworTERGTEFHU19hcHBlbmRfbWlwc2FyY2hvMzIgPSAiIC1sYXRvbWljIgorTERGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWxhdG9taWMiCitMREZMQUdTX2FwcGVuZF9yaXNjdjY0ID0gIiAtbGF0b21pYyIKK0xERkxBR1NfYXBwZW5kX2FybXY1ID0gIiAtbGF0b21pYyIKKwogZG9fY29uZmlndXJlKCkgewogICBjZCAke0pVQ0VfUFJPSlVDRVJfTUFLRUZJTEVfUEFUSH0KICAgQ09ORklHPVJlbGVhc2Ugb2VfcnVubWFrZSBjbGVhbgpAQCAtMzUsMyArNTAsNSBAQAogICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KICAgaW5zdGFsbCAtbSAwNzU1ICR7SlVDRV9QUk9KVUNFUn0gJHtEfSR7YmluZGlyfQogfQorIyBlcnJvcjogJ19OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRScgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCitDT01QQVRJQkxFX0hPU1RfbGliYy1tdXNsID0gIm51bGwiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2p1Y2UvcHJvanVjZXIvMDAwMS1EaXNhYmxlLXdlYmtpdC1jb21wb25lbnQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2p1Y2UvcHJvanVjZXIvMDAwMS1EaXNhYmxlLXdlYmtpdC1jb21wb25lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyODQzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvanVjZS9wcm9qdWNlci8wMDAxLURpc2FibGUtd2Via2l0LWNvbXBvbmVudC5wYXRjaApAQCAtMCwwICsxLDgzIEBACitGcm9tIGRmNzE5MGY0MzBmMzBlZTUyMmY1NmY5NzE0ZDQyZWU3OTZmMGQ1ZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIERlYyAyMDE5IDIyOjE4OjQxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIERpc2FibGUgd2Via2l0IGNvbXBvbmVudAorCitJdCBhc2tzIGZvciBlbmFibGUgSlVDRVJfRU5BQkxFX0dQTF9NT0RFCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBleHRyYXMvUHJvanVjZXIvQnVpbGRzL0xpbnV4TWFrZWZpbGUvTWFrZWZpbGUgfCAxMCArKysrKy0tLS0tCisgZXh0cmFzL1Byb2p1Y2VyL0p1Y2VMaWJyYXJ5Q29kZS9BcHBDb25maWcuaCAgIHwgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0cmFzL1Byb2p1Y2VyL0J1aWxkcy9MaW51eE1ha2VmaWxlL01ha2VmaWxlIGIvZXh0cmFzL1Byb2p1Y2VyL0J1aWxkcy9MaW51eE1ha2VmaWxlL01ha2VmaWxlCitpbmRleCAyNWI0OTA0NjAuLjg5NjBmNWJjNiAxMDA2NDQKKy0tLSBhL2V4dHJhcy9Qcm9qdWNlci9CdWlsZHMvTGludXhNYWtlZmlsZS9NYWtlZmlsZQorKysrIGIvZXh0cmFzL1Byb2p1Y2VyL0J1aWxkcy9MaW51eE1ha2VmaWxlL01ha2VmaWxlCitAQCAtMzUsMTMgKzM1LDEzIEBAIGlmZXEgKCQoQ09ORklHKSxEZWJ1ZykKKyAgICAgVEFSR0VUX0FSQ0ggOj0gLW1hcmNoPW5hdGl2ZQorICAgZW5kaWYKKyAKKy0gIEpVQ0VfQ1BQRkxBR1MgOj0gJChERVBGTEFHUykgLURMSU5VWD0xIC1EREVCVUc9MSAtRF9ERUJVRz0xIC1ESlVDRVJfTElOVVhfTUFLRV82RDUzQzhCND0xIC1ESlVDRV9BUFBfVkVSU0lPTj01LjQuNSAtREpVQ0VfQVBQX1ZFUlNJT05fSEVYPTB4NTA0MDUgJChzaGVsbCBwa2ctY29uZmlnIC0tY2ZsYWdzIHgxMSB4aW5lcmFtYSB4ZXh0IGZyZWV0eXBlMiB3ZWJraXQyZ3RrLTQuMCBndGsrLXgxMS0zLjApIC1wdGhyZWFkIC1JLi4vLi4vSnVjZUxpYnJhcnlDb2RlIC1JLi4vLi4vLi4vLi4vbW9kdWxlcyAkKENQUEZMQUdTKQorKyAgSlVDRV9DUFBGTEFHUyA6PSAkKERFUEZMQUdTKSAtRExJTlVYPTEgLURERUJVRz0xIC1EX0RFQlVHPTEgLURKVUNFUl9MSU5VWF9NQUtFXzZENTNDOEI0PTEgLURKVUNFX0FQUF9WRVJTSU9OPTUuNC41IC1ESlVDRV9BUFBfVkVSU0lPTl9IRVg9MHg1MDQwNSAkKHNoZWxsIHBrZy1jb25maWcgLS1jZmxhZ3MgeDExIHhpbmVyYW1hIHhleHQgZnJlZXR5cGUyKSAtcHRocmVhZCAtSS4uLy4uL0p1Y2VMaWJyYXJ5Q29kZSAtSS4uLy4uLy4uLy4uL21vZHVsZXMgJChDUFBGTEFHUykKKyAgIEpVQ0VfQ1BQRkxBR1NfQVBQIDo9IC1ESnVjZVBsdWdpbl9CdWlsZF9WU1Q9MCAtREp1Y2VQbHVnaW5fQnVpbGRfVlNUMz0wIC1ESnVjZVBsdWdpbl9CdWlsZF9BVT0wIC1ESnVjZVBsdWdpbl9CdWlsZF9BVXYzPTAgLURKdWNlUGx1Z2luX0J1aWxkX1JUQVM9MCAtREp1Y2VQbHVnaW5fQnVpbGRfQUFYPTAgLURKdWNlUGx1Z2luX0J1aWxkX1N0YW5kYWxvbmU9MCAtREp1Y2VQbHVnaW5fQnVpbGRfVW5pdHk9MAorICAgSlVDRV9UQVJHRVRfQVBQIDo9IFByb2p1Y2VyCisgCisgICBKVUNFX0NGTEFHUyArPSAkKEpVQ0VfQ1BQRkxBR1MpICQoVEFSR0VUX0FSQ0gpIC1nIC1nZ2RiIC1PMCAkKENGTEFHUykKKyAgIEpVQ0VfQ1hYRkxBR1MgKz0gJChKVUNFX0NGTEFHUykgLXN0ZD1jKysxMSAkKENYWEZMQUdTKQorLSAgSlVDRV9MREZMQUdTICs9ICQoVEFSR0VUX0FSQ0gpIC1MJChKVUNFX0JJTkRJUikgLUwkKEpVQ0VfTElCRElSKSAkKHNoZWxsIHBrZy1jb25maWcgLS1saWJzIHgxMSB4aW5lcmFtYSB4ZXh0IGZyZWV0eXBlMiB3ZWJraXQyZ3RrLTQuMCBndGsrLXgxMS0zLjApIC1scnQgLWxkbCAtbHB0aHJlYWQgJChMREZMQUdTKQorKyAgSlVDRV9MREZMQUdTICs9ICQoVEFSR0VUX0FSQ0gpIC1MJChKVUNFX0JJTkRJUikgLUwkKEpVQ0VfTElCRElSKSAkKHNoZWxsIHBrZy1jb25maWcgLS1saWJzIHgxMSB4aW5lcmFtYSB4ZXh0IGZyZWV0eXBlMikgLWxydCAtbGRsIC1scHRocmVhZCAkKExERkxBR1MpCisgCisgICBDTEVBTkNNRCA9IHJtIC1yZiAkKEpVQ0VfT1VURElSKS8kKFRBUkdFVCkgJChKVUNFX09CSkRJUikKKyBlbmRpZgorQEAgLTU2LDEzICs1NiwxMyBAQCBpZmVxICgkKENPTkZJRyksUmVsZWFzZSkKKyAgICAgVEFSR0VUX0FSQ0ggOj0gLW1hcmNoPW5hdGl2ZQorICAgZW5kaWYKKyAKKy0gIEpVQ0VfQ1BQRkxBR1MgOj0gJChERVBGTEFHUykgLURMSU5VWD0xIC1ETkRFQlVHPTEgLURKVUNFUl9MSU5VWF9NQUtFXzZENTNDOEI0PTEgLURKVUNFX0FQUF9WRVJTSU9OPTUuNC41IC1ESlVDRV9BUFBfVkVSU0lPTl9IRVg9MHg1MDQwNSAkKHNoZWxsIHBrZy1jb25maWcgLS1jZmxhZ3MgeDExIHhpbmVyYW1hIHhleHQgZnJlZXR5cGUyIHdlYmtpdDJndGstNC4wIGd0aysteDExLTMuMCkgLXB0aHJlYWQgLUkuLi8uLi9KdWNlTGlicmFyeUNvZGUgLUkuLi8uLi8uLi8uLi9tb2R1bGVzICQoQ1BQRkxBR1MpCisrICBKVUNFX0NQUEZMQUdTIDo9ICQoREVQRkxBR1MpIC1ETElOVVg9MSAtRE5ERUJVRz0xIC1ESlVDRVJfTElOVVhfTUFLRV82RDUzQzhCND0xIC1ESlVDRV9BUFBfVkVSU0lPTj01LjQuNSAtREpVQ0VfQVBQX1ZFUlNJT05fSEVYPTB4NTA0MDUgJChzaGVsbCBwa2ctY29uZmlnIC0tY2ZsYWdzIHgxMSB4aW5lcmFtYSB4ZXh0IGZyZWV0eXBlMikgLXB0aHJlYWQgLUkuLi8uLi9KdWNlTGlicmFyeUNvZGUgLUkuLi8uLi8uLi8uLi9tb2R1bGVzICQoQ1BQRkxBR1MpCisgICBKVUNFX0NQUEZMQUdTX0FQUCA6PSAtREp1Y2VQbHVnaW5fQnVpbGRfVlNUPTAgLURKdWNlUGx1Z2luX0J1aWxkX1ZTVDM9MCAtREp1Y2VQbHVnaW5fQnVpbGRfQVU9MCAtREp1Y2VQbHVnaW5fQnVpbGRfQVV2Mz0wIC1ESnVjZVBsdWdpbl9CdWlsZF9SVEFTPTAgLURKdWNlUGx1Z2luX0J1aWxkX0FBWD0wIC1ESnVjZVBsdWdpbl9CdWlsZF9TdGFuZGFsb25lPTAgLURKdWNlUGx1Z2luX0J1aWxkX1VuaXR5PTAKKyAgIEpVQ0VfVEFSR0VUX0FQUCA6PSBQcm9qdWNlcgorIAorICAgSlVDRV9DRkxBR1MgKz0gJChKVUNFX0NQUEZMQUdTKSAkKFRBUkdFVF9BUkNIKSAtTzMgJChDRkxBR1MpCisgICBKVUNFX0NYWEZMQUdTICs9ICQoSlVDRV9DRkxBR1MpIC1zdGQ9YysrMTEgJChDWFhGTEFHUykKKy0gIEpVQ0VfTERGTEFHUyArPSAkKFRBUkdFVF9BUkNIKSAtTCQoSlVDRV9CSU5ESVIpIC1MJChKVUNFX0xJQkRJUikgJChzaGVsbCBwa2ctY29uZmlnIC0tbGlicyB4MTEgeGluZXJhbWEgeGV4dCBmcmVldHlwZTIgd2Via2l0Mmd0ay00LjAgZ3RrKy14MTEtMy4wKSAtZnZpc2liaWxpdHk9aGlkZGVuIC1scnQgLWxkbCAtbHB0aHJlYWQgJChMREZMQUdTKQorKyAgSlVDRV9MREZMQUdTICs9ICQoVEFSR0VUX0FSQ0gpIC1MJChKVUNFX0JJTkRJUikgLUwkKEpVQ0VfTElCRElSKSAkKHNoZWxsIHBrZy1jb25maWcgLS1saWJzIHgxMSB4aW5lcmFtYSB4ZXh0IGZyZWV0eXBlMikgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbHJ0IC1sZGwgLWxwdGhyZWFkICQoTERGTEFHUykKKyAKKyAgIENMRUFOQ01EID0gcm0gLXJmICQoSlVDRV9PVVRESVIpLyQoVEFSR0VUKSAkKEpVQ0VfT0JKRElSKQorIGVuZGlmCitAQCAtMTM2LDcgKzEzNiw3IEBAIGFsbCA6ICQoSlVDRV9PVVRESVIpLyQoSlVDRV9UQVJHRVRfQVBQKQorIAorICQoSlVDRV9PVVRESVIpLyQoSlVDRV9UQVJHRVRfQVBQKSA6ICQoT0JKRUNUU19BUFApICQoUkVTT1VSQ0VTKQorIAlAY29tbWFuZCAtdiBwa2ctY29uZmlnID4vZGV2L251bGwgMj4mMSB8fCB7IGVjaG8gPiYyICJwa2ctY29uZmlnIG5vdCBpbnN0YWxsZWQuIFBsZWFzZSwgaW5zdGFsbCBpdC4iOyBleGl0IDE7IH0KKy0JQHBrZy1jb25maWcgLS1wcmludC1lcnJvcnMgeDExIHhpbmVyYW1hIHhleHQgZnJlZXR5cGUyIHdlYmtpdDJndGstNC4wIGd0aysteDExLTMuMAorKwlAcGtnLWNvbmZpZyAtLXByaW50LWVycm9ycyB4MTEgeGluZXJhbWEgeGV4dCBmcmVldHlwZTIKKyAJQGVjaG8gTGlua2luZyAiUHJvanVjZXIgLSBBcHAiCisgCS0kKFZfQVQpbWtkaXIgLXAgJChKVUNFX0JJTkRJUikKKyAJLSQoVl9BVClta2RpciAtcCAkKEpVQ0VfTElCRElSKQorZGlmZiAtLWdpdCBhL2V4dHJhcy9Qcm9qdWNlci9KdWNlTGlicmFyeUNvZGUvQXBwQ29uZmlnLmggYi9leHRyYXMvUHJvanVjZXIvSnVjZUxpYnJhcnlDb2RlL0FwcENvbmZpZy5oCitpbmRleCBkZmZkNWFmNzUuLjUzMzAyYmQyNCAxMDA2NDQKKy0tLSBhL2V4dHJhcy9Qcm9qdWNlci9KdWNlTGlicmFyeUNvZGUvQXBwQ29uZmlnLmgKKysrKyBiL2V4dHJhcy9Qcm9qdWNlci9KdWNlTGlicmFyeUNvZGUvQXBwQ29uZmlnLmgKK0BAIC0zMiw3ICszMiw3IEBACisgLy8gQkVHSU4gU0VDVElPTiBBDQorIA0KKyAjaWZuZGVmIEpVQ0VSX0VOQUJMRV9HUExfTU9ERQ0KKy0gI2RlZmluZSBKVUNFUl9FTkFCTEVfR1BMX01PREUgMA0KKysgI2RlZmluZSBKVUNFUl9FTkFCTEVfR1BMX01PREUgMQ0KKyAjZW5kaWYNCisgDQorIC8vIEVORCBTRUNUSU9OIEENCitAQCAtMTgwLDcgKzE4MCw3IEBACisgLy8ganVjZV9ndWlfZXh0cmEgZmxhZ3M6DQorIA0KKyAjaWZuZGVmICAgIEpVQ0VfV0VCX0JST1dTRVINCistIC8vI2RlZmluZSBKVUNFX1dFQl9CUk9XU0VSIDENCisrICNkZWZpbmUgSlVDRV9XRUJfQlJPV1NFUiAwDQorICNlbmRpZg0KKyANCisgI2lmbmRlZiAgICBKVUNFX0VOQUJMRV9MSVZFX0NPTlNUQU5UX0VESVRPUg0KKy0tIAorMi4yNC4wCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvanVjZS9wcm9qdWNlcl9naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2p1Y2UvcHJvanVjZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDhmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2p1Y2UvcHJvanVjZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMiBAQAoraW5jbHVkZSBwcm9qdWNlci5pbmMKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbGliY2FtZXJhL2ZpbGVzLzAwMDEtbWVzb24taW1wb3J0LXB5dGhvbjMtdG8tdXNlLWFsc28tZnJvbS1zeXNyb290LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJjYW1lcmEvZmlsZXMvMDAwMS1tZXNvbi1pbXBvcnQtcHl0aG9uMy10by11c2UtYWxzby1mcm9tLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1NmE2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbGliY2FtZXJhL2ZpbGVzLzAwMDEtbWVzb24taW1wb3J0LXB5dGhvbjMtdG8tdXNlLWFsc28tZnJvbS1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gZWE0N2U1MzkxMTIxM2Q3MWU5OTdlYjM0ODQ4YWU3MjczNWJhY2M4MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1hZGhhdmFuazI3IDxtYWRoYXZhbi5rcmlzaG5hbkBsaW5hcm8ub3JnPgorRGF0ZTogVGh1LCA5IEphbiAyMDIwIDA3OjQyOjE4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1lc29uOiBpbXBvcnQgcHl0aG9uMyB0byB1c2UgYWxzbyBmcm9tIHN5c3Jvb3QKKworaW1wb3J0aW5nIHB5dGhvbiBtb2R1bGUgY2FuIHByb3ZpZGUgdGhlIGV4YWN0IHBhdGgKK3doaWNoIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgYnVpbGQgYXMgd2VsbCBhcyBmcm9tCithbnkgYnVpbGQgc3lzdGVtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogbWFkaGF2YW5rMjcgPG1hZGhhdmFuLmtyaXNobmFuQGxpbmFyby5vcmc+CistLS0KKyBpbmNsdWRlL2xpYmNhbWVyYS9tZXNvbi5idWlsZCB8IDQgKysrLQorIHNyYy9saWJjYW1lcmEvbWVzb24uYnVpbGQgICAgIHwgNCArKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2xpYmNhbWVyYS9tZXNvbi5idWlsZCBiL2luY2x1ZGUvbGliY2FtZXJhL21lc29uLmJ1aWxkCitpbmRleCA5OWFiZjA2Li44MzUyNWUyIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJjYW1lcmEvbWVzb24uYnVpbGQKKysrKyBiL2luY2x1ZGUvbGliY2FtZXJhL21lc29uLmJ1aWxkCitAQCAtMjEsMTMgKzIxLDE1IEBAIGluY2x1ZGVfZGlyID0gam9pbl9wYXRocyhsaWJjYW1lcmFfaW5jbHVkZV9kaXIsICdsaWJjYW1lcmEnKQorIGluc3RhbGxfaGVhZGVycyhsaWJjYW1lcmFfYXBpLAorICAgICAgICAgICAgICAgICBzdWJkaXIgOiBpbmNsdWRlX2RpcikKKyAKKytweXRob25fbW9kID0gaW1wb3J0KCdweXRob24zJykuZmluZF9weXRob24oKQorKworIGdlbl9jb250cm9scyA9IGZpbGVzKCcuLi8uLi9zcmMvbGliY2FtZXJhL2dlbi1jb250cm9scy5weScpCisgCisgY29udHJvbF9pZHNfaCA9IGN1c3RvbV90YXJnZXQoJ2NvbnRyb2xfaWRzX2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IDogZmlsZXMoJy4uLy4uL3NyYy9saWJjYW1lcmEvY29udHJvbF9pZHMueWFtbCcsICdjb250cm9sX2lkcy5oLmluJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IDogJ2NvbnRyb2xfaWRzLmgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZF9maWxlcyA6IGdlbl9jb250cm9scywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIDogW2dlbl9jb250cm9scywgJy1vJywgJ0BPVVRQVVRAJywgJ0BJTlBVVEAnXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIDogW3B5dGhvbl9tb2QsIGdlbl9jb250cm9scywgJy1vJywgJ0BPVVRQVVRAJywgJ0BJTlBVVEAnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX2RpciA6IGpvaW5fcGF0aHMoJ2luY2x1ZGUnLCBpbmNsdWRlX2RpcikpCisgCitkaWZmIC0tZ2l0IGEvc3JjL2xpYmNhbWVyYS9tZXNvbi5idWlsZCBiL3NyYy9saWJjYW1lcmEvbWVzb24uYnVpbGQKK2luZGV4IGM0Zjk2NWIuLjI0MzkzNWIgMTAwNjQ0CistLS0gYS9zcmMvbGliY2FtZXJhL21lc29uLmJ1aWxkCisrKysgYi9zcmMvbGliY2FtZXJhL21lc29uLmJ1aWxkCitAQCAtNjUsMTMgKzY1LDE1IEBAIGlmIGxpYnVkZXYuZm91bmQoKQorICAgICBdKQorIGVuZGlmCisgCisrcHl0aG9uX21vZCA9IGltcG9ydCgncHl0aG9uMycpLmZpbmRfcHl0aG9uKCkKKysKKyBnZW5fY29udHJvbHMgPSBmaWxlcygnZ2VuLWNvbnRyb2xzLnB5JykKKyAKKyBjb250cm9sX2lkc19jcHAgPSBjdXN0b21fdGFyZ2V0KCdjb250cm9sX2lkc19jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgOiBmaWxlcygnY29udHJvbF9pZHMueWFtbCcsICdjb250cm9sX2lkcy5jcHAuaW4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA6ICdjb250cm9sX2lkcy5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX2ZpbGVzIDogZ2VuX2NvbnRyb2xzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA6IFtnZW5fY29udHJvbHMsICctbycsICdAT1VUUFVUQCcsICdASU5QVVRAJ10pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIDogW3B5dGhvbl9tb2QsIGdlbl9jb250cm9scywgJy1vJywgJ0BPVVRQVVRAJywgJ0BJTlBVVEAnXSkKKyAKKyBsaWJjYW1lcmFfc291cmNlcyArPSBjb250cm9sX2lkc19jcHAKKyBsaWJjYW1lcmFfc291cmNlcyArPSBjb250cm9sX2lkc19oCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbGliY2FtZXJhL2xpYmNhbWVyYS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbGliY2FtZXJhL2xpYmNhbWVyYS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTViZjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJjYW1lcmEvbGliY2FtZXJhLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiTGludXggbGliY2FtZXJhIGZyYW1ld29yayIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJHUEwtMi4wICYgTEdQTC0yLjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9saWNlbnNlcy9nbnUtZ3BsLTIuMC50eHQ7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICBmaWxlOi8vbGljZW5zZXMvZ251LWxncGwtMi4xLnR4dDttZDU9NGI1NGExZmQ1NWE0NDg4NjVhMGIzMmQ0MTU5ODc1OWQgXAorIgorCitTUkNfVVJJID0gIiBcCisgICAgICAgIGdpdDovL2xpbnV4dHYub3JnL2xpYmNhbWVyYS5naXQ7cHJvdG9jb2w9Z2l0IFwKKyAgICAgICAgZmlsZTovLzAwMDEtbWVzb24taW1wb3J0LXB5dGhvbjMtdG8tdXNlLWFsc28tZnJvbS1zeXNyb290LnBhdGNoIFwKKyIKKworU1JDUkVWID0gIjUzZWFiOTk2ODA5ZTgyNmJjOTE0ZTRjMzRjNzhmZTc0ZDg2ZjhkYzQiCisKK1BWID0gIjIwMTkxMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyA9ICJweXRob24zLXB5eWFtbC1uYXRpdmUgdWRldiIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncXQnLCAncXRiYXNlIHF0YmFzZS1uYXRpdmUnLCAnJywgZCl9IgorCitSREVQRU5EU18ke1BOfSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQgcXQnLCAncXR3YXlsYW5kJywgJycsIGQpfSIKKworaW5oZXJpdCBtZXNvbiBwa2djb25maWcgcHl0aG9uM25hdGl2ZQorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vcGtnY29uZmlnIgorRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vbGliY2FtZXJhLnNvIgorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmRjMTM5NC9saWJkYzEzOTRfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJkYzEzOTQvbGliZGMxMzk0XzIuMi42LmJiCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbGliZGMxMzk0L2xpYmRjMTM5NF9naXQuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbGliZGMxMzk0L2xpYmRjMTM5NF8yLjIuNi5iYgppbmRleCAzYjNhYzgzLi5jOWFkZTRhIDEwMDc1NQotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmRjMTM5NC9saWJkYzEzOTRfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbGliZGMxMzk0L2xpYmRjMTM5NF8yLjIuNi5iYgpAQCAtMTEsMTYgKzExLDExIEBACiAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCB4MTEnLCAnbGliZ2x1JywgJycsIGQpfSBcCiAiCiAKLVBWID0gIjIuMi41K2dpdHIke1NSQ1BWfSIKLQotU1JDUkVWID0gIjVlNzhmNTE5MzZmZDA5ZGIwYzBmNzQyYzdkMmMwZTViZGJiZWVkNTYiCi0KLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmNvZGUuc2YubmV0L3AvbGliZGMxMzk0L2NvZGU7YnJhbmNoPW1hc3Rlcjtwcm90b2NvbD1naXQgXAorU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsX2V4YW1wbGVzLnBhdGNoIFwKICAgICAgICAgICAiCi0KLVMgPSAiJHtXT1JLRElSfS9naXQvJHtCUE59IgotCi1pbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCitTUkNfVVJJW21kNXN1bV0gPSAiOWZhZDY3YmJmZjA4ZmUyODE4ZDVlYzgxODAyZWM4OWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmI5MDVmYzlhYTRlZWM2YmRjZjZhMmFlNWY1YmEwMjEyMzI3MzlmNWJlMDQ3ZGVjOGZlOGRkNjA0OWMxMGZlZCIKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwogCiBFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1kb3h5Z2VuLWRvYyAtLWRpc2FibGUtZXhhbXBsZXMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL211c2ljcGQvbXBkLzAwMDEtU3RyaW5nQnVmZmVyLUluY2x1ZGUtY3N0ZGRlZi1mb3Itc2l6ZV90LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9tdXNpY3BkL21wZC8wMDAxLVN0cmluZ0J1ZmZlci1JbmNsdWRlLWNzdGRkZWYtZm9yLXNpemVfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDg2OWFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9tdXNpY3BkL21wZC8wMDAxLVN0cmluZ0J1ZmZlci1JbmNsdWRlLWNzdGRkZWYtZm9yLXNpemVfdC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGMxNDg3NzA3MWYxNGIyMTg4MzVmN2ZiMDM0ZGVhMTFiZDFiYTU2ZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNSBEZWMgMjAxOSAwOTo0MDoxNiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBTdHJpbmdCdWZmZXI6IEluY2x1ZGUgY3N0ZGRlZiBmb3Igc2l6ZV90CisKK0ZpeGVzCithLmNwcDozOjE6IGVycm9yOiAnc2l6ZV90JyBkb2VzIG5vdCBuYW1lIGEgdHlwZQorICAgIDMgfCBzaXplX3QgczsKKyAgICAgIHwgXn5+fn5+CithLmNwcDoyOjE6IG5vdGU6ICdzaXplX3QnIGlzIGRlZmluZWQgaW4gaGVhZGVyICc8Y3N0ZGRlZj4nOyBkaWQgeW91IGZvcmdldCB0byAnI2luY2x1ZGUgPGNzdGRkZWY+Jz8KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9NdXNpY1BsYXllckRhZW1vbi9NUEQvcHVsbC82OTddCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3V0aWwvU3RyaW5nQnVmZmVyLmh4eCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9zcmMvdXRpbC9TdHJpbmdCdWZmZXIuaHh4CisrKysgYi9zcmMvdXRpbC9TdHJpbmdCdWZmZXIuaHh4CitAQCAtMzEsNiArMzEsNyBAQAorICNkZWZpbmUgU1RSSU5HX0JVRkZFUl9IUFAKKyAKKyAjaW5jbHVkZSA8YXJyYXk+CisrI2luY2x1ZGUgPGNzdGRkZWY+CisgCisgLyoqCisgICogQSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHJpbmcgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9tdXNpY3BkL21wZC8wMDAyLUluY2x1ZGUtc3RkZXhjZXB0LWZvci1ydW50aW1lX2Vycm9yLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9tdXNpY3BkL21wZC8wMDAyLUluY2x1ZGUtc3RkZXhjZXB0LWZvci1ydW50aW1lX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMTE4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL211c2ljcGQvbXBkLzAwMDItSW5jbHVkZS1zdGRleGNlcHQtZm9yLXJ1bnRpbWVfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwNmY3OGNlZDQ1ZjY2MjJhMmUwMmNkMDllNmEyYzBjMjJhOThiODllIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjUgRGVjIDIwMTkgMDk6NDE6NTUgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIEluY2x1ZGUgPHN0ZGV4Y2VwdD4gZm9yIHJ1bnRpbWVfZXJyb3IKKworRml4ZXMKKworLi4vZ2l0L3NyYy9Mb2NhdGVVcmkuY3h4OjY1OjE0OiBlcnJvcjogJ3J1bnRpbWVfZXJyb3InIGlzIG5vdCBhIG1lbWJlciBvZiAnc3RkJworICAgNjUgfCAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiVW5zdXBwb3J0ZWQgVVJJIHNjaGVtZSIpOworICAgICAgfCAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+fgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBGaXhlZCBkaWZmZXJlbnRseSB1cHN0cmVhbSBdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL0xvY2F0ZVVyaS5jeHggICAgICB8IDEgKworIHNyYy9wY20vUGNtQ29udmVydC5jeHggfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCistLS0gYS9zcmMvTG9jYXRlVXJpLmN4eAorKysrIGIvc3JjL0xvY2F0ZVVyaS5jeHgKK0BAIC0xNyw2ICsxNyw3IEBACisgICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAgKi8KKyAKKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorICNpbmNsdWRlICJjb25maWcuaCIKKyAjaW5jbHVkZSAiTG9jYXRlVXJpLmh4eCIKKyAjaW5jbHVkZSAiY2xpZW50L0NsaWVudC5oeHgiCistLS0gYS9zcmMvcGNtL1BjbUNvbnZlcnQuY3h4CisrKysgYi9zcmMvcGNtL1BjbUNvbnZlcnQuY3h4CitAQCAtMTcsNiArMTcsNyBAQAorICAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgICovCisgCisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2luY2x1ZGUgIlBjbUNvbnZlcnQuaHh4IgorICNpbmNsdWRlICJDb25maWd1cmVkUmVzYW1wbGVyLmh4eCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbXVzaWNwZC9tcGRfMC4yMC4yMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbXVzaWNwZC9tcGRfMC4yMC4yMi5iYgppbmRleCA2YzZhZDQyLi4xMzNlZTZlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL211c2ljcGQvbXBkXzAuMjAuMjIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9tdXNpY3BkL21wZF8wLjIwLjIyLmJiCkBAIC0xOSw2ICsxOSw4IEBACiBTUkNfVVJJID0gIiBcCiAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9NdXNpY1BsYXllckRhZW1vbi9NUEQ7YnJhbmNoPXYwLjIwLnggXAogICAgIGZpbGU6Ly9tcGQuY29uZi5pbiBcCisgICAgZmlsZTovLzAwMDEtU3RyaW5nQnVmZmVyLUluY2x1ZGUtY3N0ZGRlZi1mb3Itc2l6ZV90LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1JbmNsdWRlLXN0ZGV4Y2VwdC1mb3ItcnVudGltZV9lcnJvci5wYXRjaCBcCiAiCiBTUkNSRVYgPSAiOTI3NGJjMTViYzQxYmJlNDkwZmRlODQ3Zjg0MjI0NjhjYzIwMzc1ZCIKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL215Y3JvZnQvbXljcm9mdF8xOS44LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL215Y3JvZnQvbXljcm9mdF8xOS44LjEuYmIKaW5kZXggM2M3YmQ4OS4uNjJkMWFkNyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS9teWNyb2Z0L215Y3JvZnRfMTkuOC4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvbXljcm9mdC9teWNyb2Z0XzE5LjguMS5iYgpAQCAtNzksNyArNzksNyBAQAogIyBNeWNyb2Z0IHVzZXMgQWxzYSwgUHVsc2VBdWRpbyBhbmQgRmxhYwogUkRFUEVORFNfJHtQTn0gKz0gImFsc2EtdXRpbHMgYWxzYS1wbHVnaW5zIGFsc2EtdG9vbHMiCiBSREVQRU5EU18ke1BOfSArPSAicHVsc2VhdWRpbyBwdWxzZWF1ZGlvLW1pc2MgcHVsc2VhdWRpby1zZXJ2ZXIiCi1SREVQRU5EU18ke1BOfSArPSAiZmxhYyIKK1JERVBFTkRTXyR7UE59ICs9ICJmbGFjIG1wZzEyMyIKIAogIyBNeWNyb2Z0IGNhbiBkbyB0aGlzIGl0c2VsZiBvbiB0aGUgdGFyZ2V0LCBidXQgaXQncyBxdWlja2VyIHRvIGRvIGl0IGhlcmUKIFJERVBFTkRTXyR7UE59ICs9ICJtaW1pYyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvdGlueWFsc2EvdGlueWFsc2EuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL3RpbnlhbHNhL3RpbnlhbHNhLmJiCmluZGV4IDhiODZmODIuLjA2MjA5NjggMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvdGlueWFsc2EvdGlueWFsc2EuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS90aW55YWxzYS90aW55YWxzYS5iYgpAQCAtNyw3ICs3LDkgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL05PVElDRTttZDU9ZGJkZWZlNDAwZDg5NGI1MTBhOWRlMTQ4MTMxODFkMGIiCiAKIFNSQ1JFViA9ICI4NDQ5NTI5YzdlNTBmNDMyMDkxNTM5YmE3YjQzOGU3OWIwNDA1OWI1IgotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3RpbnlhbHNhL3RpbnlhbHNhIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3RpbnlhbHNhL3RpbnlhbHNhIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLUNNQUtFX0lOU1RBTExfLXBhdGgtaW5zdGVhZC1vZi1oYXJkY29kaW5nLWJpbi1saS5wYXRjaCBcCisgICAgICAgICAgIgogUFYgPSAiMS4xLjErZ2l0JHtTUkNQVn0iCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL3RpbnlhbHNhL3RpbnlhbHNhLzAwMDEtVXNlLUNNQUtFX0lOU1RBTExfLXBhdGgtaW5zdGVhZC1vZi1oYXJkY29kaW5nLWJpbi1saS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvdGlueWFsc2EvdGlueWFsc2EvMDAwMS1Vc2UtQ01BS0VfSU5TVEFMTF8tcGF0aC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmctYmluLWxpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOWMzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL3RpbnlhbHNhL3RpbnlhbHNhLzAwMDEtVXNlLUNNQUtFX0lOU1RBTExfLXBhdGgtaW5zdGVhZC1vZi1oYXJkY29kaW5nLWJpbi1saS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGZlNGYzYzJhMzdhODEyMDFmNDYzZmY5NjIzNjRmMDE0ZjUwYzk4OTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxNiBEZWMgMjAxOSAyMjo1ODo0MSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBVc2UgQ01BS0VfSU5TVEFMTF88cGF0aD4gaW5zdGVhZCBvZiBoYXJkY29kaW5nIGJpbi9saWIvCisgaW5zdGFsbCBwYXRocworCitIZWxwcyBmaXggYnVpbGQvcGFja2FnaW5nIGlzc3VlcyBvbiBtYWNoaW5lcyB3aGVyZSBkZWZhdWx0IGxpYmRpciBpcyBub3QKK2xpYiBidXQgc2F5IGxpYjY0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vdGlueWFsc2EvdGlueWFsc2EvcHVsbC8xNDNdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgQ01ha2VMaXN0cy50eHQgfCAxNCArKysrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAoraW5kZXggY2IzMWM1OC4uMWNjNGE4NSAxMDA2NDQKKy0tLSBhL0NNYWtlTGlzdHMudHh0CisrKysgYi9DTWFrZUxpc3RzLnR4dAorQEAgLTQxLDEyICs0MSwyMCBAQCBhZGRfdXRpbCgidGlueW1peCIgInV0aWxzL3RpbnltaXguYyIpCisgaW5zdGFsbChGSUxFUyAke0hEUlN9CisgICAgIERFU1RJTkFUSU9OICJpbmNsdWRlL3RpbnlhbHNhIikKKyAKKytpZihOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0xJQkRJUikKKysgICAgc2V0KENNQUtFX0lOU1RBTExfTElCRElSIGxpYikKKytlbmRpZigpCisrCisraWYoTk9UIERFRklORUQgQ01BS0VfSU5TVEFMTF9CSU5ESVIpCisrCXNldChDTUFLRV9JTlNUQUxMX0JJTkRJUiBiaW4pCisrZW5kaWYoKQorKworIGluc3RhbGwoVEFSR0VUUyAidGlueWFsc2EiCisgICAgICAgICAgICAgICAgICJ0aW55cGxheSIKKyAgICAgICAgICAgICAgICAgInRpbnljYXAiCisgICAgICAgICAgICAgICAgICJ0aW55bWl4IgorICAgICAgICAgICAgICAgICAidGlueXBjbWluZm8iCistICAgIFJVTlRJTUUgREVTVElOQVRJT04gImJpbiIKKy0gICAgQVJDSElWRSBERVNUSU5BVElPTiAibGliIgorLSAgICBMSUJSQVJZIERFU1RJTkFUSU9OICJsaWIiKQorKyAgICBSVU5USU1FIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9CisrICAgIEFSQ0hJVkUgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0KKysgICAgTElCUkFSWSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfSkKKyAKKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvdm9yYmlzLXRvb2xzL3ZvcmJpcy10b29scy9nZXR0ZXh0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS92b3JiaXMtdG9vbHMvdm9yYmlzLXRvb2xzL2dldHRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxY2U3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvdm9yYmlzLXRvb2xzL3ZvcmJpcy10b29scy9nZXR0ZXh0LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0ZpeCBidWlsZCB3aXRoIGdldHRleHQgMC4yMC54CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMiw4ICsyLDggQEAKKyAKKyBBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBkaXN0LXppcAorIAorLVNVQkRJUlMgPSBwbyBpbnRsIGluY2x1ZGUgc2hhcmUgZGViaWFuIHdpbjMyIEBPUFRfU1VCRElSU0AKKy1ESVNUX1NVQkRJUlMgPSBwbyBpbnRsIGluY2x1ZGUgc2hhcmUgZGViaWFuIHdpbjMyIG9nZzEyMyBvZ2dlbmMgb2dnZGVjIG9nZ2luZm8gXAorK1NVQkRJUlMgPSBwbyBpbmNsdWRlIHNoYXJlIGRlYmlhbiB3aW4zMiBAT1BUX1NVQkRJUlNACisrRElTVF9TVUJESVJTID0gcG8gaW5jbHVkZSBzaGFyZSBkZWJpYW4gd2luMzIgb2dnMTIzIG9nZ2VuYyBvZ2dkZWMgb2dnaW5mbyBcCisgCXZjdXQgdm9yYmlzY29tbWVudCBtNAorIAorIEVYVFJBX0RJU1QgPSBjb25maWcucnBhdGggUkVBRE1FIEFVVEhPUlMgQ09QWUlORyBDSEFOR0VTIHZvcmJpcy10b29scy5zcGVjIGNvbmZpZy5oIG1raW5zdGFsbGRpcnMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzEsNyArMzEsNyBAQCBDRkxBR1M9IiRjZmxhZ3Nfc2F2ZSIKKyBBQ19QUk9HX0xJQlRPT0wKKyAKKyBBTExfTElOR1VBUz0iYmUgY3MgZGEgZW5fR0IgZW8gZXMgZnIgaHIgaHUgbmwgcGwgcm8gcnUgc2sgc3YgdWsgdmkiCistQU1fR05VX0dFVFRFWFQKKytBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKQorIAorIGRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRubCBTeXN0ZW0gY2hlY2tzCitAQCAtMzgzLDcgKzM4Myw2IEBAIEFDX09VVFBVVChbCisgTWFrZWZpbGUKKyBtNC9NYWtlZmlsZQorIHBvL01ha2VmaWxlLmluCistaW50bC9NYWtlZmlsZQorIGluY2x1ZGUvTWFrZWZpbGUKKyBzaGFyZS9NYWtlZmlsZQorIHdpbjMyL01ha2VmaWxlCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL3ZvcmJpcy10b29scy92b3JiaXMtdG9vbHNfMS40LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW11bHRpbWVkaWEvcmVjaXBlcy1tdWx0aW1lZGlhL3ZvcmJpcy10b29scy92b3JiaXMtdG9vbHNfMS40LjAuYmIKaW5kZXggOGU5OTE0Yi4uODllNjY1MiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1tdWx0aW1lZGlhL3JlY2lwZXMtbXVsdGltZWRpYS92b3JiaXMtdG9vbHMvdm9yYmlzLXRvb2xzXzEuNC4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbXVsdGltZWRpYS9yZWNpcGVzLW11bHRpbWVkaWEvdm9yYmlzLXRvb2xzL3ZvcmJpcy10b29sc18xLjQuMC5iYgpAQCAtMTMsNiArMTMsNyBAQAogU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL3ZvcmJpcy8ke0JQfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1vZ2dlbmMtRml4LWxhcmdlLWFsbG9jYS1vbi1iYWQtQUlGRi1pbnB1dC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDA0LUZpeC1mb3JtYXQtZXJyb3ItYmxvY2tpbmctY29tcGlsYXRpb24td2l0aC1oYXJkZW5pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2V0dGV4dC5wYXRjaCBcCiAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNTY3ZTBmYjhkMzIxYjJjZDcxMjRmODIwOGI4YjkwZTYiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZW1hbi9ibHVlbWFuXzIuMS4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWVtYW4vYmx1ZW1hbl8yLjEuMS5iYgppbmRleCA5NmM4YmIyLi4wZWE3ZjZkIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZW1hbi9ibHVlbWFuXzIuMS4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlbWFuL2JsdWVtYW5fMi4xLjEuYmIKQEAgLTE1LDYgKzE1LDcgQEAKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJmMWVhYjIzMzRlNWExNTg3ZGVmYTgwOTAwOTAxMDQ4ZDE0YzJlOGZmYThjMGNmZjcyNDBiYzk5MzdhNjFkYmMzIgogCiBFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWRpc2FibGUtYXBwaW5kaWNhdG9yIFwKICAgICAtLWRpc2FibGUtcnVudGltZS1kZXBzLWNoZWNrIFwKICAgICAtLWRpc2FibGUtc2NoZW1hcy1jb21waWxlIFwKICIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jYW5uZWxsb25pL2Nhbm5lbGxvbmkvMDAwMS1Vc2UtR05VSW5zdGFsbERpcnMtaW5zdGVhZC1vZi1oYXJkLWNvZGluZy1wYXRocy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jYW5uZWxsb25pL2Nhbm5lbGxvbmkvMDAwMS1Vc2UtR05VSW5zdGFsbERpcnMtaW5zdGVhZC1vZi1oYXJkLWNvZGluZy1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzhmMGIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nhbm5lbGxvbmkvY2FubmVsbG9uaS8wMDAxLVVzZS1HTlVJbnN0YWxsRGlycy1pbnN0ZWFkLW9mLWhhcmQtY29kaW5nLXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gYzc0ZjA0ZGJhYjRkNTg2Mjg3MzQ3YjFkNTUxN2YzNmUyZjBjM2Q4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IERlYyAyMDE5IDE1OjUyOjM0IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSBHTlVJbnN0YWxsRGlycyBpbnN0ZWFkIG9mIGhhcmQtY29kaW5nIHBhdGhzCisKK0J1bXAgbWluaW11bSBjbWFrZSB2ZXJzaW9uIHRvIGJlID49IDMuMQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL21ndWVudG5lci9jYW5uZWxsb25pL3B1bGwvMjJdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgQ01ha2VMaXN0cy50eHQgfCA4ICsrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKK2luZGV4IDUxYjM1NGYuLjk1OGUwZWIgMTAwNjQ0CistLS0gYS9DTWFrZUxpc3RzLnR4dAorKysrIGIvQ01ha2VMaXN0cy50eHQKK0BAIC0xLDQgKzEsNCBAQAorLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYpCisrY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMSkKKyBwcm9qZWN0KGNhbm5lbGxvbmkpCisgCisgbGlzdChBUFBFTkQgQ01BS0VfTU9EVUxFX1BBVEggIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jbWFrZS9tb2R1bGVzIikKK0BAIC02MCw2ICs2MCw4IEBAIHNldF90YXJnZXRfcHJvcGVydGllcyAoIGNhbm5lbGxvbmktY29tbW9uCisgICBTT1ZFUlNJT04gMAorICkKKyAKKytpbmNsdWRlKEdOVUluc3RhbGxEaXJzKQorKworIGlmKFNDVFBfU1VQUE9SVCkKKyAgICAgYWRkX2xpYnJhcnkoc2N0cHRocmVhZCBTVEFUSUMgc2N0cHRocmVhZC5jcHApCisgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhzY3RwdGhyZWFkIGFkZHNvdXJjZXMgc2N0cCkKK0BAIC02OCw1ICs3MCw1IEBAIGVuZGlmKFNDVFBfU1VQUE9SVCkKKyBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoYWRkc291cmNlcyBQUk9QRVJUSUVTIExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0pCisgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNhbm5lbGxvbmkgYWRkc291cmNlcyBjYW5uZWxsb25pLWNvbW1vbiBwdGhyZWFkKQorIAorLWluc3RhbGwoVEFSR0VUUyBjYW5uZWxsb25pIERFU1RJTkFUSU9OIGJpbikKKy1pbnN0YWxsKFRBUkdFVFMgY2FubmVsbG9uaS1jb21tb24gREVTVElOQVRJT04gbGliKQorK2luc3RhbGwoVEFSR0VUUyBjYW5uZWxsb25pIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9KQorK2luc3RhbGwoVEFSR0VUUyBjYW5uZWxsb25pLWNvbW1vbiBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfSkKKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jYW5uZWxsb25pL2Nhbm5lbGxvbmkvMDAwMi1pbmNsdWRlLW1pc3Npbmctc3RkZXhjZXB0LWZvci1ydW50aW1lX2Vycm9yLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nhbm5lbGxvbmkvY2FubmVsbG9uaS8wMDAyLWluY2x1ZGUtbWlzc2luZy1zdGRleGNlcHQtZm9yLXJ1bnRpbWVfZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmMjhkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jYW5uZWxsb25pL2Nhbm5lbGxvbmkvMDAwMi1pbmNsdWRlLW1pc3Npbmctc3RkZXhjZXB0LWZvci1ydW50aW1lX2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMTc4ODc2Mjg2M2NkMWY2NTc2OTc1NzVmNmU3M2EyMmU2NjFjY2I0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDE5IDEwOjMyOjU0IC0wODAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBpbmNsdWRlIG1pc3NpbmcgPHN0ZGV4Y2VwdD4gZm9yIHJ1bnRpbWVfZXJyb3IKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRml4ZXMKK2Vycm9yOiDigJhydW50aW1lX2Vycm9y4oCZIGlzIG5vdCBhIG1lbWJlciBvZiDigJhzdGTigJkKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9tZ3VlbnRuZXIvY2FubmVsbG9uaS9wdWxsLzIyXQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHBhcnNlci5jcHAgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3BhcnNlci5jcHAgYi9wYXJzZXIuY3BwCitpbmRleCA0YWZiOWUwLi41YmNkYmRlIDEwMDY0NAorLS0tIGEvcGFyc2VyLmNwcAorKysrIGIvcGFyc2VyLmNwcAorQEAgLTIsNiArMiw3IEBACisgCisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorIAorIHZvaWQgcGFyc2VGcmFtZXModWludDE2X3QgbGVuLCBjb25zdCB1aW50OF90KiBidWZmZXIsIHN0ZDo6ZnVuY3Rpb248Y2FuZmRfZnJhbWUqKCk+IGZyYW1lQWxsb2NhdG9yLAorICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGNhbmZkX2ZyYW1lKiwgYm9vbCk+IGZyYW1lUmVjZWl2ZXIpCistLSAKKzIuMjQuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvY2FubmVsbG9uaS9jYW5uZWxsb25pX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jYW5uZWxsb25pL2Nhbm5lbGxvbmlfZ2l0LmJiCmluZGV4IGRmNzVlNjMuLmQ0YTYyYmQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jYW5uZWxsb25pL2Nhbm5lbGxvbmlfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jYW5uZWxsb25pL2Nhbm5lbGxvbmlfZ2l0LmJiCkBAIC0yLDggKzIsMTEgQEAKIEhPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9tZ3VlbnRuZXIvY2FubmVsbG9uaSIKIExJQ0VOU0UgPSAiR1BMdjIiCiAKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9tZ3VlbnRuZXIvY2FubmVsbG9uaS5naXQ7cHJvdG9jb2w9aHR0cHMiCi1TUkNSRVYgPSAiNDQwODBiYjAyMWQxYTE0M2U2OTA2ZjJlYzQ2MTA1MTNjNGUxY2VjZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9tZ3VlbnRuZXIvY2FubmVsbG9uaS5naXQ7cHJvdG9jb2w9aHR0cHMgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtR05VSW5zdGFsbERpcnMtaW5zdGVhZC1vZi1oYXJkLWNvZGluZy1wYXRocy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWluY2x1ZGUtbWlzc2luZy1zdGRleGNlcHQtZm9yLXJ1bnRpbWVfZXJyb3IucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ1JFViA9ICI4MmFhNDliNDE3Yjk2ZmU0NmJiM2YwMTdhZTFiZmVhOTI4ZjIwZjlhIgogCiBQViA9ICIyMDE2MDQxNCske1NSQ1BWfSIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2NpdmV0d2ViL2NpdmV0d2ViX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jaXZldHdlYi9jaXZldHdlYl9naXQuYmIKaW5kZXggYzhmZTI0Yy4uNzEzNjhjMSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2NpdmV0d2ViL2NpdmV0d2ViX2dpdC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvY2l2ZXR3ZWIvY2l2ZXR3ZWJfZ2l0LmJiCkBAIC00LDcgKzQsNyBAQAogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLm1kO21kNT02ZjI4ZmRjYmEwZGRhNzM1ZWVkNjJiYWM2YTM5NzU2MiIKIAotU1JDUkVWID0gImNlOGY2ZDM4YTYwZWIxNmM5OTZhZmVlMWU1MzQwZjc2ZWY0ZDA5MjMiCitTUkNSRVYgPSAiNjQyM2ZhZWE0ODAwZjZjZDQwNTU3NTBhN2FmMmRhODVjZGJlNGU5NiIKIFBWID0gIjEuMTErZ2l0JHtTUkNQVn0iCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vY2l2ZXR3ZWIvY2l2ZXR3ZWIuZ2l0IFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtVW5pdHRlc3QtTGluay1saWJydC1hbmQtbGlibS11c2luZy1sLW9wdGlvbi5wYXRjaCBcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvZmlyZXdhbGxkL2ZpcmV3YWxsZF8wLjcuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9maXJld2FsbGQvZmlyZXdhbGxkXzAuNy4yLmJiCmluZGV4IDdkODBhNjMuLjk3YzdiZDYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9maXJld2FsbGQvZmlyZXdhbGxkXzAuNy4yLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9maXJld2FsbGQvZmlyZXdhbGxkXzAuNy4yLmJiCkBAIC02Niw2ICs2Niw3IEBACiAKIEZJTEVTXyR7UE59ICs9ICJcCiAgICAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vZmlyZXdhbGwgXAorICAgICR7bm9uYXJjaF9saWJkaXJ9L2ZpcmV3YWxsZCBcCiAgICAgJHtkYXRhZGlyfS9kYnVzLTEgXAogICAgICR7ZGF0YWRpcn0vcG9sa2l0LTEgXAogICAgICR7ZGF0YWRpcn0vbWV0YWluZm8gXApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2tlYS9rZWFfMS43LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkva2VhL2tlYV8xLjcuMy5iYgpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkva2VhL2tlYV8xLjcuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2tlYS9rZWFfMS43LjMuYmIKaW5kZXggMTA1YmExMC4uZTIzMGZkMCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2tlYS9rZWFfMS43LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2tlYS9rZWFfMS43LjMuYmIKQEAgLTE0LDggKzE0LDggQEAKICAgICBmaWxlOi8va2VhLWRoY3A2LnNlcnZpY2UgXAogICAgIGZpbGU6Ly9rZWEtZGhjcC1kZG5zLnNlcnZpY2UgXAogIgotU1JDX1VSSVttZDVzdW1dID0gImM2NDA2YWMzZDE2MDE2MTA1NmQyZmMzNjU1N2ViZDg5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE3M2M4ZTg5MzY5MGE2MTFiYzFkMWM2ZmJlNTRhNWMyMGZjZDU0NDI5Mzk5YThkYzNhMGQ3ZDJlYjAxYmY4Y2MiCitTUkNfVVJJW21kNXN1bV0gPSAiZmRhMDNiZjQ2NTgxODAwOWI3MGRmZmMyMjZkYTc3N2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzBmODJjNTQ4Yjg0NGMxMmVkNDZjNGViMzg4MGQ2M2I0NWVjMDRjZWNmY2YyZTRhYjFkN2JhZGE3ZmZmNGYyYSIKIAogaW5oZXJpdCBhdXRvdG9vbHMgc3lzdGVtZAogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGZ0cC9maWxlcy9maXgtZ2NjLTYtY29uZmxpY3RzLXNpZ25iaXQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGZ0cC9maWxlcy9maXgtZ2NjLTYtY29uZmxpY3RzLXNpZ25iaXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MjIzMmIuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xmdHAvZmlsZXMvZml4LWdjYy02LWNvbmZsaWN0cy1zaWduYml0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLS0tIGxmdHAtNC42LjNhL3NyYy9OZXRBY2Nlc3MuY2Mub3JpZwkyMDE2LTA2LTE4IDEwOjI1OjUxLjA2MzM1ODk4MSAtMDQwMAotKysrIGxmdHAtNC42LjNhL3NyYy9OZXRBY2Nlc3MuY2MJMjAxNi0wNi0xOCAxMDoyNjowNC4xNDMzNTkyMDkgLTA0MDAKLUBAIC0yMSw3ICsyMSw3IEBACi0gCi0gI2luY2x1ZGUgPGVycm5vLmg+Ci0gI2luY2x1ZGUgPGFzc2VydC5oPgotLSNpbmNsdWRlIDxtYXRoLmg+Ci0rI2luY2x1ZGUgPGNtYXRoPgotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAKLSAjaW5jbHVkZSAiTmV0QWNjZXNzLmgiCi0tLS0gbGZ0cC00LjYuM2Evc3JjL1NwZWVkb21ldGVyLmNjLm9yaWcJMjAxNi0wNi0xOCAxMDoyNDo1OC44OTUzNTgwNzMgLTA0MDAKLSsrKyBsZnRwLTQuNi4zYS9zcmMvU3BlZWRvbWV0ZXIuY2MJMjAxNi0wNi0xOCAxMDoyNToxMC44NzkzNTgyODEgLTA0MDAKLUBAIC0xOCw3ICsxOCw3IEBACi0gICovCi0gCi0gI2luY2x1ZGUgPGNvbmZpZy5oPgotLSNpbmNsdWRlIDxtYXRoLmg+Ci0rI2luY2x1ZGUgPGNtYXRoPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLSAjaW5jbHVkZSAiU3BlZWRvbWV0ZXIuaCIKLSAjaW5jbHVkZSAibWlzYy5oIgotLS0tIGxmdHAtNC42LjNhL3NyYy9GaWxlQ29weS5jYy5vcmlnCTIwMTYtMDYtMTggMTA6MjQ6MTUuOTM5MzU3MzI1IC0wNDAwCi0rKysgbGZ0cC00LjYuM2Evc3JjL0ZpbGVDb3B5LmNjCTIwMTYtMDYtMTggMTA6MjQ6MjQuNTgzMzU3NDc1IC0wNDAwCi1AQCAtMzYsNyArMzYsNyBAQAotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSAjaW5jbHVkZSA8ZmNudGwuaD4KLS0jaW5jbHVkZSA8bWF0aC5oPgotKyNpbmNsdWRlIDxjbWF0aD4KLSAjaW5jbHVkZSA8c3RkZGVmLmg+Ci0gI2luY2x1ZGUgIkZpbGVDb3B5LmgiCi0gI2luY2x1ZGUgInVybC5oIgotLS0tIGxmdHAtNC42LjNhL3NyYy9SZXNNZ3IuY2Mub3JpZwkyMDE2LTA2LTE4IDEwOjIzOjMxLjM4NzM1NjU0OSAtMDQwMAotKysrIGxmdHAtNC42LjNhL3NyYy9SZXNNZ3IuY2MJMjAxNi0wNi0xOCAxMDoyMzo0MS43NzEzNTY3MjkgLTA0MDAKLUBAIC0yMyw3ICsyMyw3IEBACi0gI2luY2x1ZGUgPGN0eXBlLmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotICNpbmNsdWRlIDxzdGRsaWIuaD4KLS0jaW5jbHVkZSA8bWF0aC5oPgotKyNpbmNsdWRlIDxjbWF0aD4KLSAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0gI2luY2x1ZGUgPGVycm5vLmg+CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGZ0cC9sZnRwXzQuOC40LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xmdHAvbGZ0cF80LjkuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGZ0cC9sZnRwXzQuOC40LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGZ0cC9sZnRwXzQuOS4wLmJiCmluZGV4IGJmNzkzZDkuLmVmMDQ3ZjcgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9sZnRwL2xmdHBfNC44LjQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xmdHAvbGZ0cF80LjkuMC5iYgpAQCAtNiwxMSArNiw5IEBACiBMSUNFTlNFID0gIkdQTHYzIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCiAKLVNSQ19VUkkgPSAiaHR0cDovL2xmdHAueWFyLnJ1L2Z0cC9sZnRwLSR7UFZ9LnRhci5iejIgXAotICAgICAgICAgICBmaWxlOi8vZml4LWdjYy02LWNvbmZsaWN0cy1zaWduYml0LnBhdGNoIFwKLSAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiYTU2YjUwNDdkYmZkYTA1MmRmNGMxZGZkMTk3YWEwOTIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTg1M2VkYmQwNzViMDA4YzMxNTY3OWM3ODgyYjZkY2M2ODIxZWQyMzY1ZDJlZDg0M2E0MTJhY2QzZDQwZGEwZSIKK1NSQ19VUkkgPSAiaHR0cDovL2xmdHAueWFyLnJ1L2Z0cC9sZnRwLSR7UFZ9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiYjA1ODE3YTJjMjY0NjM2MTgyNzE3MzBkMGY2NzdlZGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzA5ZTdlOTFhN2MwMjA2MjU3MTVlODVjMTcyNmIxZTc1MjRkYTIyNTE4NjgzZmJlMDUxYWMxMzExNmRlZGVhYyIKIAogaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vc3F1aXR0by9tb3NxdWl0dG9fMS42LjcuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9zcXVpdHRvL21vc3F1aXR0b18xLjYuOC5iYgpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9zcXVpdHRvL21vc3F1aXR0b18xLjYuNy5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vc3F1aXR0by9tb3NxdWl0dG9fMS42LjguYmIKaW5kZXggMzQwZjY0My4uZWE1MzNkOCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vc3F1aXR0by9tb3NxdWl0dG9fMS42LjcuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vc3F1aXR0by9tb3NxdWl0dG9fMS42LjguYmIKQEAgLTE4LDggKzE4LDggQEAKICAgICAgICAgICAgZmlsZTovL21vc3F1aXR0by5pbml0IFwKICIKIAotU1JDX1VSSVttZDVzdW1dID0gImVjOTA3NGM0ZjMzN2Y2NGVhYTlhNDMyMGM2ZGFiMDIwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImJjZDMxYThmYmJkMDUzZmVlMzI4OTg2ZmFkZDg2NjZkMzA1ODM1N2RlZDU2Yjk3ODJmN2Q0ZjE5OTMxZDE3OGUiCitTUkNfVVJJW21kNXN1bV0gPSAiMjRhMGU1NjdjODQ1YjNlNDFiNzVlMjM3ZDIwMGVkZjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RmMjNjODFjYTM3ZjBlMDcwNTc0ZmU3NDQxNDQwM2NmMjUxODMwMTY0MzNkMDdhZGQ2MTM0MzY2ZmI0NWRmNiIKIAogaW5oZXJpdCBzeXN0ZW1kIHVwZGF0ZS1yYy5kIHVzZXJhZGQKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L25ldHBsYW4vbmV0cGxhbl8wLjk4LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L25ldHBsYW4vbmV0cGxhbl8wLjk4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDc2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmV0cGxhbi9uZXRwbGFuXzAuOTguYmIKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIGFic3RyYWN0aW9uIHJlbmRlcmVyIgorREVTQ1JJUFRJT04gPSAiTmV0cGxhbiBpcyBhIHV0aWxpdHkgZm9yIGVhc2lseSBjb25maWd1cmluZyBuZXR3b3JraW5nIG9uIGEgXAorbGludXggc3lzdGVtLiBZb3Ugc2ltcGx5IGNyZWF0ZSBhIFlBTUwgZGVzY3JpcHRpb24gb2YgdGhlIHJlcXVpcmVkIG5ldHdvcmsgXAoraW50ZXJmYWNlcyBhbmQgd2hhdCBlYWNoIHNob3VsZCBiZSBjb25maWd1cmVkIHRvIGRvLiBGcm9tIHRoaXMgZGVzY3JpcHRpb24gXAorTmV0cGxhbiB3aWxsIGdlbmVyYXRlIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY2hvc2VuIHJlbmRlcmVyIFwKK3Rvb2wuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9uZXRwbGFuLmlvIgorU0VDVElPTiA9ICJuZXQvbWlzYyIKKworTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorU1JDUkVWID0gIjVkMjJlOWQyMmM0YTM3MjRkMjdiODBiMGNkOWI4OThhZThmNTlkMmIiCitQViA9ICIwLjk4K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gIiBcCisgICAgICAgIGdpdDovL2dpdGh1Yi5jb20vQ2Fub25pY2FsTHRkL25ldHBsYW4uZ2l0IFwKKyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBsaWJ5YW1sIgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uMyBweXRob24zLWNvcmUgcHl0aG9uMy1weXlhbWwgcHl0aG9uMy1uZXRpZmFjZXMgcHl0aG9uMy1ub3NlIHB5dGhvbjMtY292ZXJhZ2UgcHl0aG9uMy1weWNvZGVzdHlsZSBweXRob24tcHlmbGFrZXMgdXRpbC1saW51eC1saWJ1dWlkIgorCitpbmhlcml0IHBrZ2NvbmZpZyBzeXN0ZW1kCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitFWFRSQV9PRU1BS0UgPSAiZ2VuZXJhdGUiCitFWFRSQV9PRU1BS0UgPSsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnbmV0cGxhbi1kYnVzIGRidXMvaW8ubmV0cGxhbi5OZXRwbGFuLnNlcnZpY2UnLCcnLGQpfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9ICR7RH0ke2Jhc2VfbGliZGlyfS9uZXRwbGFuICR7RH0ke2RhdGFkaXJ9L25ldHBsYW4vbmV0cGxhbi9jbGkvY29tbWFuZHMgJHtEfSR7c3lzY29uZmRpcn0vbmV0cGxhbgorCWluc3RhbGwgLW0gNzU1ICR7U30vZ2VuZXJhdGUgJHtEfSR7YmFzZV9saWJkaXJ9L25ldHBsYW4vCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9uZXRwbGFuLyoucHkgJHtEfSR7ZGF0YWRpcn0vbmV0cGxhbi9uZXRwbGFuCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9uZXRwbGFuL2NsaS8qLnB5ICR7RH0ke2RhdGFkaXJ9L25ldHBsYW4vbmV0cGxhbi9jbGkKKwlpbnN0YWxsIC1tIDY0NCAke1N9L25ldHBsYW4vY2xpL2NvbW1hbmRzLyoucHkgJHtEfSR7ZGF0YWRpcn0vbmV0cGxhbi9uZXRwbGFuL2NsaS9jb21tYW5kcworCWluc3RhbGwgLW0gNzU1ICR7U30vc3JjL25ldHBsYW4uc2NyaXB0ICR7RH0ke2RhdGFkaXJ9L25ldHBsYW4vCisJbG4gLXNyZiAke0R9JHtkYXRhZGlyfS9uZXRwbGFuL25ldHBsYW4uc2NyaXB0ICR7RH0ke3NiaW5kaXJ9L25ldHBsYW4KKworCWluc3RhbGwgLWQgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLWdlbmVyYXRvcnMKKwlpbnN0YWxsIC1tIDY0NCAke1N9L3NyYy9uZXRwbGFuLXdwYUAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlsbiAtc3JmICR7RH0vJHtiYXNlX2xpYmRpcn0vbmV0cGxhbi9nZW5lcmF0ZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS1nZW5lcmF0b3JzCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS5kICR7RH0ke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMKKwkJaW5zdGFsbCAtbSA3NTUgJHtTfS9uZXRwbGFuLWRidXMgJHtEfSR7YmFzZV9saWJkaXJ9L25ldHBsYW4KKwkJaW5zdGFsbCAtbSA2NDQgJHtTfS9kYnVzL2lvLm5ldHBsYW4uTmV0cGxhbi5jb25mICR7RH0ke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCQlpbnN0YWxsIC1tIDY0NCAke1N9L2RidXMvaW8ubmV0cGxhbi5OZXRwbGFuLnNlcnZpY2UgJHtEfSR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcworCWZpCit9CisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuZXRwbGFuLXdwYUAuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEUgPSAiZGlzYWJsZSIKKworUEFDS0FHRVMgKz0gIiR7UE59LWRidXMiCisKK0ZJTEVTXyR7UE59ID0gIiR7c2JpbmRpcn0gJHtiYXNlX2xpYmRpcn0vbmV0cGxhbi9nZW5lcmF0ZSAke2RhdGFkaXJ9L25ldHBsYW4gJHtzeXNjb25mZGlyfS9uZXRwbGFuICR7c3lzdGVtZF91bml0ZGlyfSIKK0ZJTEVTXyR7UE59LWRidXMgPSAiJHtiYXNlX2xpYmRpcn0vbmV0cGxhbi9uZXRwbGFuLWRidXMgJHtkYXRhZGlyfS9kYnVzLTEiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvc2FtYmEvc2FtYmEvc21iLmNvbmYgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvc2FtYmEvc2FtYmEvc21iLmNvbmYKaW5kZXggYTBiODdjMy4uZDZiZGU0MSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NhbWJhL3NhbWJhL3NtYi5jb25mCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zYW1iYS9zYW1iYS9zbWIuY29uZgpAQCAtMjUsNiArMjUsMTAgQEAKIAogIyMgQnJvd3NpbmcvSWRlbnRpZmljYXRpb24gIyMjCiAKKyMgUHJldmVudCBhbm9ueW1vdXMgY29ubmVjdGlvbnMuIE92ZXJyaWRlbiBpZiB0aGUgdXNlciBzZXRzIGd1ZXN0IG9rID0geWVzIAorIyBvbiBhbnkgc2hhcmUKKyAgIHJlc3RyaWN0IGFub255bW91cyA9IDEKKwogIyBDaGFuZ2UgdGhpcyB0byB0aGUgd29ya2dyb3VwL05ULWRvbWFpbiBuYW1lIHlvdXIgU2FtYmEgc2VydmVyIHdpbGwgcGFydCBvZgogICAgd29ya2dyb3VwID0gV09SS0dST1VQCiAKQEAgLTExNCw3ICsxMTgsNyBAQAogCiAjIFRoaXMgb3B0aW9uIGNvbnRyb2xzIGhvdyB1bnN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgYXJlIG1hcHBlZAogIyB0byBhbm9ueW1vdXMgY29ubmVjdGlvbnMKLSAgIG1hcCB0byBndWVzdCA9IGJhZCB1c2VyCisgICBtYXAgdG8gZ3Vlc3QgPSBuZXZlcgogCiAjIyMjIyMjIyMjIERvbWFpbnMgIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NhbWJhL3NhbWJhXzQuMTAuMTAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvc2FtYmEvc2FtYmFfNC4xMC4xMS5iYgpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvc2FtYmEvc2FtYmFfNC4xMC4xMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NhbWJhL3NhbWJhXzQuMTAuMTEuYmIKaW5kZXggMWFkNWQ1NS4uZmZkYzE1YSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NhbWJhL3NhbWJhXzQuMTAuMTAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NhbWJhL3NhbWJhXzQuMTAuMTEuYmIKQEAgLTM0LDggKzM0LDggQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtc2FtYmEtZml4LW11c2wtbGliLXdpdGhvdXQtaW5uZXRnci5wYXRjaCBcCiAgICAgICAgICAgIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiZGRlMjc0NDdmMzlkMTI0ZWZlMThmNzE5Y2NmOTU2ZGQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzAwYzczNGI1MTYxMGUyZmVhYTBkNjc0NGY5YmVjMGMwZDg5MTdiY2E4Y2M3OGQ1YjYzYTQ1OTFmMzI4NjZhNSIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZWJkMDIxZGU4NDAzMTJkN2UwODk1OWU4YTNkMGJhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDlmNDIzMmUwNGM2ZWFhZDBlM2I4ZTAwY2Q4Mzc2ODNhOTYwZWJiOTVjMWZlMzM0OWU5NjhkMWQxZGZmODk0IgogCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJzYW1iYVwtKD9QPHB2ZXI+NFwuMTAoXC5cZCspKykudGFyLmd6IgogCkBAIC0xOTQsMTEgKzE5NCwxMSBAQAogICAgIAogICAgIGZvciBmIGluIHNhbWJhLWdwdXBkYXRlIHNhbWJhX3VwZ3JhZGVkbnMgc2FtYmFfc3BudXBkYXRlIHNhbWJhX2tjYyBzYW1iYV9kbnN1cGRhdGU7IGRvCiAgICAgICAgIGlmIFsgLWYgIiR7RH0ke3NiaW5kaXJ9LyRmIiBdOyB0aGVuCi0gICAgICAgICAgICBzZWQgLWkgLWUgJ3MsJHtQWVRIT059LC91c3IvYmluL2VudiBweXRob24zLyxnJyAke0R9JHtzYmluZGlyfS8kZgorICAgICAgICAgICAgc2VkIC1pIC1lICdzLCR7UFlUSE9OfSwvdXNyL2Jpbi9lbnYgcHl0aG9uMyxnJyAke0R9JHtzYmluZGlyfS8kZgogICAgICAgICBmaQogICAgIGRvbmUKICAgICBpZiBbIC1mICIke0R9JHtiaW5kaXJ9L3NhbWJhLXRvb2wiIF07IHRoZW4KLSAgICAgICAgc2VkIC1pIC1lICdzLCR7UFlUSE9OfSwvdXNyL2Jpbi9lbnYgcHl0aG9uMy8sZycgJHtEfSR7YmluZGlyfS9zYW1iYS10b29sCisgICAgICAgIHNlZCAtaSAtZSAncywke1BZVEhPTn0sL3Vzci9iaW4vZW52IHB5dGhvbjMsZycgJHtEfSR7YmluZGlyfS9zYW1iYS10b29sCiAgICAgZmkKICAgICAKIH0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS93b2xmc3NsL3dvbGZzc2xfNC4yLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvd29sZnNzbC93b2xmc3NsXzQuMy4wLmJiCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS93b2xmc3NsL3dvbGZzc2xfNC4yLjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWNvbm5lY3Rpdml0eS93b2xmc3NsL3dvbGZzc2xfNC4zLjAuYmIKaW5kZXggNWQ4YmM5Yi4uYTZjOGNkMCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dvbGZzc2wvd29sZnNzbF80LjIuMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1jb25uZWN0aXZpdHkvd29sZnNzbC93b2xmc3NsXzQuMy4wLmJiCkBAIC0xMyw3ICsxMyw3IEBACiBSUFJPVklERVNfJHtQTn0gPSAiY3lhc3NsIgogCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vd29sZlNTTC93b2xmc3NsLmdpdDtwcm90b2NvbD1odHRwcyIKLVNSQ1JFViA9ICJjYjdiNGFmOTg2MWFkNjI3ZmFmZmRjM2QyNGExOTZjMmQxMTkzMGI4IgorU1JDUkVWID0gIjNmMTNiNDlmYTMxOGZiZDMyMTZkN2RhMzZkOTQyZTdjMjc2ZDM0MTMiCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiBpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZGFlbW9ucy9pcHBvb2wvaXBwb29sL3N0cm5jcHktdHJ1bmNhdGlvbi5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWRhZW1vbnMvaXBwb29sL2lwcG9vbC9zdHJuY3B5LXRydW5jYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlMWRhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWRhZW1vbnMvaXBwb29sL2lwcG9vbC9zdHJuY3B5LXRydW5jYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorUmVwbGFjZSBzdHJuY3B5IHdpdGggbWVtY3B5IAorCitzaW5jZSB0aGUgbGVuZ3RoIG9mIGRhdGEgdG8gCitiZSBjb3BpZWQgaGFzIGFscmVhZHkgYmVlbiBkZXRlcm1pbmVkIHdpdGggc3RybGVuKCkuIFJlcGxhY2Ugc3RybmNweSgpCit3aXRoIG1lbWNweSgpIHRvIGFkZHJlc3MgdGhlIHdhcm5pbmcgYW5kIG9wdGltaXplIHRoZSBjb2RlIGEgbGl0dGxlLgorCit8IGlwcG9vbF9jb25maWcuYzoxMTI6Mjogbm90ZTogJ3NucHJpbnRmJyBvdXRwdXQgYmV0d2VlbiA4IGFuZCA1NSBieXRlcyBpbnRvIGEgZGVzdGluYXRpb24gb2Ygc2l6ZSA0OAorfCAgIDExMiB8ICBzbnByaW50Zihwcm9tcHQsIHNpemVvZihwcm9tcHQpLCAiaXBwb29sLSVzIiwgc2VydmVyX25hbWUpOworfCAgICAgICB8ICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLSBhL2NsaS9jbGlfcmVhZGxpbmUuYworKysrIGIvY2xpL2NsaV9yZWFkbGluZS5jCitAQCAtMjU3LDEwICsyNTcsMTUgQEAgc3RhdGljIHZvaWQgY2xpX3JsX2Rpc3BsYXlfd3JhcHBlZF90ZXh0KAorIAlpbnQgcG9zOworIAlpbnQgaW5fd3M7CisgCWludCBpOworKwlpbnQgYnVmc2l6ZSA9IHNpemVvZih0ZXh0X2J1Zikvc2l6ZW9mKHRleHRfYnVmWzBdKTsKKyAKKyAJaWYgKGxlZnRfbWFyZ2luID09IDApIHsKKyAJCWxlZnRfbWFyZ2luID0gMzsKKyAJfQorKwlpZiAobGVmdF9tYXJnaW4gPiBidWZzaXplKSB7CisrCQlsZWZ0X21hcmdpbiA9IGJ1ZnNpemU7CisrCX0KKysKKyAJaWYgKHJpZ2h0X21hcmdpbiA9PSAwKSB7CisgCQlyaWdodF9tYXJnaW4gPSA3ODs7CisgCX0KK0BAIC0yNzEsNyArMjc2LDcgQEAgc3RhdGljIHZvaWQgY2xpX3JsX2Rpc3BsYXlfd3JhcHBlZF90ZXh0KAorIAkvKiBGaXJzdCBjb3B5IHRoZSB0ZXh0IGhlYWRpbmcgdG8gdGhlIGJ1ZmZlciBhbmQgYWRkIGEgIi0iLCBhY2NvdW50aW5nIGZvcgorIAkgKiB0aGUgc3BlY2lmaWVkIGxlZnQgbWFyZ2luLgorIAkgKi8KKy0Jc3RybmNweSgmdGV4dF9idWZbMF0sIHRleHQxLCBsZWZ0X21hcmdpbiAtIDMpOworKwltZW1jcHkoJnRleHRfYnVmWzBdLCB0ZXh0MSwgbGVmdF9tYXJnaW4gLSAzKTsKKyAJZm9yIChwb3MgPSBzdHJsZW4odGV4dDEpOyBwb3MgPCBsZWZ0X21hcmdpbiAtIDM7IHBvcysrKSB7CisgCQl0ZXh0X2J1Zltwb3NdID0gJyAnOworIAl9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1kYWVtb25zL2lwcG9vbC9pcHBvb2xfMS4zLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZGFlbW9ucy9pcHBvb2wvaXBwb29sXzEuMy5iYgppbmRleCA2ZmE0NjkwLi4zNTU0ZTY4IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1kYWVtb25zL2lwcG9vbC9pcHBvb2xfMS4zLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWRhZW1vbnMvaXBwb29sL2lwcG9vbF8xLjMuYmIKQEAgLTI2LDYgKzI2LDcgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDMtY2xpLU1hcmstcmV0dXJuLW9mLXN0cnRvbC1hcy1sb25nLWludC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWxpbmstd2l0aC1saWJ0aXJwYy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAzLW11c2wtZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3RybmNweS10cnVuY2F0aW9uLnBhdGNoIFwKICAgICAgICAgICAgIgogCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00YzU5MjgzYjgyZmMyYjE2NjQ1NWUwZmMyM2M3MWM2ZiIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWRhZW1vbnMvb3BlbnNhZi9vcGVuc2FmXzUuMTkuMDcuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1kYWVtb25zL29wZW5zYWYvb3BlbnNhZl81LjE5LjEwLmJiCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWRhZW1vbnMvb3BlbnNhZi9vcGVuc2FmXzUuMTkuMDcuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWRhZW1vbnMvb3BlbnNhZi9vcGVuc2FmXzUuMTkuMTAuYmIKaW5kZXggZWZhMmJmNS4uYTdlYjRjOCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZGFlbW9ucy9vcGVuc2FmL29wZW5zYWZfNS4xOS4wNy5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1kYWVtb25zL29wZW5zYWYvb3BlbnNhZl81LjE5LjEwLmJiCkBAIC0yNyw4ICsyNyw4IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1jb25maWd1cmUtdGltZS1jaGVjay1mb3ItZ2V0dGlkLUFQSS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNyZWF0ZV9lbXB0eV9saWJyYXJ5LVVzZS1DQy12YXJpYWJsZS1pbnRlYWQtb2YtaGFyZGMucGF0Y2ggXAogICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiZTlhZTlkZTgwM2E5OWI3YWIzMzc1N2E0OTg1ODU0MmYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2FlZDY3MmQwM2FiMWZlM2YyN2QzMzM0MjljN2NhMDMwMjI3MTRlN2M2MzUwNTAwMjA4YjdiZDczNDlmMDNjZSIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YjYxZGYwMWQxYTA5MjEwMWM0YTYyNjY5MmVkYWUxOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZGE5YWY5NmU4ZWU1OGQxMTAzMWQzMDViZjQ4MDRhMDBkZWI2MTA4ZTEyZTQyMjcyMjg4MmEyMDkxYmQzNGJkIgogCiBpbmhlcml0IGF1dG90b29scyB1c2VyYWRkIHN5c3RlbWQgcGtnY29uZmlnCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWRldnRvb2xzL2dycGMvZ3JwY18xLjI0LjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1kZXZ0b29scy9ncnBjL2dycGNfMS4yNC4zLmJiCmluZGV4IDI0MDcyYzAuLjNjZGU2ZjcgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWRldnRvb2xzL2dycGMvZ3JwY18xLjI0LjMuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZGV2dG9vbHMvZ3JwYy9ncnBjXzEuMjQuMy5iYgpAQCAtMzYsNiArMzYsOCBAQAogICAgIC1EZ1JQQ19JTlNUQUxMPU9OIFwKICAgICAtRENNQUtFX0NST1NTQ09NUElMSU5HPU9OIFwKICAgICAtREJVSUxEX1NIQVJFRF9MSUJTPU9OIFwKKyAgICAtRGdSUENfSU5TVEFMTF9MSUJESVI9JHtiYXNlbGlifSBcCisgICAgLURnUlBDX0lOU1RBTExfQ01BS0VESVI9JHtiYXNlbGlifS9jbWFrZS8ke0JQTn0gXAogICAgICIKIAogZG9fY29uZmlndXJlX3ByZXBlbmRfbWlwc2FyY2goKSB7CkBAIC00OCw2ICs1MCw2IEBACiAKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKIAotU1lTUk9PVF9ESVJTX0JMQUNLTElTVF9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiR7bGliZGlyfS9jbWFrZS9ncnBjIgorU1lTUk9PVF9ESVJTX0JMQUNLTElTVF9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiR7YmFzZWxpYn0vY21ha2UvZ3JwYyIKIAogRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0iCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1leHRlbmRlZC9jb3Jvc3luYy9jb3Jvc3luYy8wMDAxLWNvbmZpZ3VyZS5hYy1maXgtcGtnY29uZmlnLWlzc3VlLW9mLXJkbWEucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1leHRlbmRlZC9jb3Jvc3luYy9jb3Jvc3luYy8wMDAxLWNvbmZpZ3VyZS5hYy1maXgtcGtnY29uZmlnLWlzc3VlLW9mLXJkbWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRjNzY0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWV4dGVuZGVkL2Nvcm9zeW5jL2Nvcm9zeW5jLzAwMDEtY29uZmlndXJlLmFjLWZpeC1wa2djb25maWctaXNzdWUtb2YtcmRtYS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogZml4IHBrZ2NvbmZpZyBpc3N1ZSBvZiByZG1hCisKK3BrZ2NvbmZpZyBmaWxlcyBmcm9tIHJkbWEtY29yZShodHRwczovL2dpdGh1Yi5jb20vbGludXgtcmRtYS9yZG1hLWNvcmUpCithcmUgbmFtZWQgc3RhcnQgd2l0aCBsaWIsIHN1Y2ggYXMgbGlicmRtYWNtLnBjIGFuZCBsaWJpYnZlcmJzLnBjLiBXaGVuCityZG1hIHN1cHBvcnQgaXMgZW5hYmxlZCwgaXQgZmFpbHMgdG8gZmluZCByZG1hIHJlbGF0ZWQgbGlicmFyaWVzLiBVcGRhdGUKK2NvbmZpZ3VyZS5hYyB0byB0aGUgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vY29yb3N5bmMvY29yb3N5bmMvcHVsbC81MTVdCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYWM1MTNlOTMuLjI0MGNmZWQ0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00NTksOCArNDU5LDggQEAgaWYgdGVzdCAieCR7ZW5hYmxlX3Rlc3RhZ2VudHN9IiA9IHh5ZXM7IHRoZW4KKyBmaQorIAorIGlmIHRlc3QgIngke2VuYWJsZV9yZG1hfSIgPSB4eWVzOyB0aGVuCistCVBLR19DSEVDS19NT0RVTEVTKFtyZG1hY21dLFtyZG1hY21dKQorLQlQS0dfQ0hFQ0tfTU9EVUxFUyhbaWJ2ZXJic10sW2lidmVyYnNdKQorKwlQS0dfQ0hFQ0tfTU9EVUxFUyhbcmRtYWNtXSxbbGlicmRtYWNtXSkKKysJUEtHX0NIRUNLX01PRFVMRVMoW2lidmVyYnNdLFtsaWJpYnZlcmJzXSkKKyAJQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX1JETUFdLCAxLCBbaGF2ZSByZG1hY21dKQorIAlQQUNLQUdFX0ZFQVRVUkVTPSIkUEFDS0FHRV9GRUFUVVJFUyByZG1hIgorIAlXSVRIX0xJU1Q9IiRXSVRIX0xJU1QgLS13aXRoIHJkbWEiCistLSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1leHRlbmRlZC9jb3Jvc3luYy9jb3Jvc3luY18yLjQuNS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWV4dGVuZGVkL2Nvcm9zeW5jL2Nvcm9zeW5jXzIuNC41LmJiCmluZGV4IDFmNGEzZTEuLmVlZmJjY2EgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWV4dGVuZGVkL2Nvcm9zeW5jL2Nvcm9zeW5jXzIuNC41LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWV4dGVuZGVkL2Nvcm9zeW5jL2Nvcm9zeW5jXzIuNC41LmJiCkBAIC05LDYgKzksNyBAQAogCiBTUkNfVVJJID0gImh0dHA6Ly9idWlsZC5jbHVzdGVybGFicy5vcmcvY29yb3N5bmMvcmVsZWFzZXMvJHtCUH0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL2Nvcm9zeW5jLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtZml4LXBrZ2NvbmZpZy1pc3N1ZS1vZi1yZG1hLnBhdGNoIFwKICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJlMzZhMDU2Yjg5M2MzMTNjNGVjMWZlMGQ3ZTZjZGViZCIKQEAgLTM2LDcgKzM3LDcgQEAKIFBBQ0tBR0VDT05GSUdbZGJ1c10gPSAiLS1lbmFibGUtZGJ1cywtLWRpc2FibGUtZGJ1cyxkYnVzIgogUEFDS0FHRUNPTkZJR1txZGV2aWNlXSA9ICItLWVuYWJsZS1xZGV2aWNlcywtLWRpc2FibGUtcWRldmljZXMiCiBQQUNLQUdFQ09ORklHW3FuZXRkXSA9ICItLWVuYWJsZS1xbmV0ZCwtLWRpc2FibGUtcW5ldGQiCi1QQUNLQUdFQ09ORklHW3JkbWFdID0gIi0tZW5hYmxlLXJkbWEsLS1kaXNhYmxlLXJkbWEsbGlicmRtYWNtIgorUEFDS0FHRUNPTkZJR1tyZG1hXSA9ICItLWVuYWJsZS1yZG1hLC0tZGlzYWJsZS1yZG1hLHJkbWEtY29yZSIKIFBBQ0tBR0VDT05GSUdbc25tcF0gPSAiLS1lbmFibGUtc25tcCwtLWRpc2FibGUtc25tcCxuZXQtc25tcCIKIFBBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS1lbmFibGUtc3lzdGVtZCAtLXdpdGgtc3lzdGVtZGRpcj0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9LC0tZGlzYWJsZS1zeXN0ZW1kIC0td2l0aG91dC1zeXN0ZW1kZGlyLHN5c3RlbWQiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9hcm5vLWlwdGFibGVzLWZpcmV3YWxsL2Fybm8taXB0YWJsZXMtZmlyZXdhbGxfMi4wLjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvYXJuby1pcHRhYmxlcy1maXJld2FsbC9hcm5vLWlwdGFibGVzLWZpcmV3YWxsXzIuMS4wLmJiCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9hcm5vLWlwdGFibGVzLWZpcmV3YWxsL2Fybm8taXB0YWJsZXMtZmlyZXdhbGxfMi4wLjMuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9hcm5vLWlwdGFibGVzLWZpcmV3YWxsL2Fybm8taXB0YWJsZXMtZmlyZXdhbGxfMi4xLjAuYmIKaW5kZXggNjBhYWUyMS4uMTE1MzUzZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL2Fybm8taXB0YWJsZXMtZmlyZXdhbGwvYXJuby1pcHRhYmxlcy1maXJld2FsbF8yLjAuMy5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvYXJuby1pcHRhYmxlcy1maXJld2FsbC9hcm5vLWlwdGFibGVzLWZpcmV3YWxsXzIuMS4wLmJiCkBAIC00LDcgKzQsNyBAQAogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2dwbF9saWNlbnNlLnR4dDttZDU9MTFjN2I2NWM0YTRhY2I5ZDUxNzVmN2U5YmY5OWM0MDMiCiAKLVNSQ1JFViA9ICJmZmNiODZjMzA3NzlkZjU4ZWUwNTdkZmU5YTNiMDc4YWRjY2MxNTEzIgorU1JDUkVWID0gIjM5Mjc2ZDE0YjY1OTY4NGM0YzA2MTI3MjVhYjgzZWE4NDFjNmVmOTkiCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vYXJuby1pcHRhYmxlcy1maXJld2FsbC9haWYiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvbGlibmZ0bmwvbGlibmZ0bmwvMDAwMS1Nb3ZlLWV4cG9ydHMtYmVmb3JlLXN5bWJvbC1kZWZpbml0aW9uLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL2xpYm5mdG5sL2xpYm5mdG5sLzAwMDEtTW92ZS1leHBvcnRzLWJlZm9yZS1zeW1ib2wtZGVmaW5pdGlvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk5ZDBkOS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvbGlibmZ0bmwvbGlibmZ0bmwvMDAwMS1Nb3ZlLWV4cG9ydHMtYmVmb3JlLXN5bWJvbC1kZWZpbml0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICswLDAgQEAKLUZyb20gNmI3NmM3NmU2YjNmOTNjNDIyZDY2NmY0OWVlNjhkZjlkNTQyNjA3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsZXggS2llcm5hbiA8YWxleC5raWVybmFuQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgNyBOb3YgMjAxOCAyMToxOTo1MyArMDAwMAotU3ViamVjdDogW1BBVENIXSBNb3ZlIGV4cG9ydHMgYmVmb3JlIHN5bWJvbCBkZWZpbml0aW9uCi0KLUJhc2VkIG9uIDc5NjYwMjAgKCJzcmM6IEZpeCBleHBvcnRpbmcgc3ltYm9scyB3aXRoIGNsYW5nIiksIHdoZW4KLUVYUE9SVF9TWU1CT0wgaXMgbG9jYXRlZCBhZnRlciBmdW5jdGlvbiBkZWZpbml0aW9uLCBjbGFuZyB3b24ndCBwcm9wZXJseQotZXhwb3J0IHRoZSBmdW5jdGlvbiwgcmVzdWx0aW5nIGluIGEgbGlicmFyeSB3aXRoIG5vIHN5bWJvbHMgd2hlbiBidWlsdCB3aXRoCi1jbGFuZy4KLQotU2lnbmVkLW9mZi1ieTogQWxleCBLaWVybmFuIDxhbGV4LmtpZXJuYW5AZ21haWwuY29tPgotLS0tCi0gc3JjL2Zsb3d0YWJsZS5jIHwgNTQgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9mbG93dGFibGUuYyBiL3NyYy9mbG93dGFibGUuYwotaW5kZXggMWY3YmEzMC4uODBkZTk1MiAxMDA2NDQKLS0tLSBhL3NyYy9mbG93dGFibGUuYwotKysrIGIvc3JjL2Zsb3d0YWJsZS5jCi1AQCAtMzQsMTIgKzM0LDEzIEBAIHN0cnVjdCBuZnRubF9mbG93dGFibGUgewotIAl1aW50MzJfdAkJZmxhZ3M7Ci0gfTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9hbGxvYyk7Ci0gc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqbmZ0bmxfZmxvd3RhYmxlX2FsbG9jKHZvaWQpCi0gewotIAlyZXR1cm4gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlKSk7Ci0gfQotLUVYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX2FsbG9jKTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9mcmVlKTsKLSB2b2lkIG5mdG5sX2Zsb3d0YWJsZV9mcmVlKGNvbnN0IHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMpCi0gewotIAlpbnQgaTsKLUBAIC01NiwxNCArNTcsMTQgQEAgdm9pZCBuZnRubF9mbG93dGFibGVfZnJlZShjb25zdCBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpjKQotIAl9Ci0gCXhmcmVlKGMpOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9mcmVlKTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9pc19zZXQpOwotIGJvb2wgbmZ0bmxfZmxvd3RhYmxlX2lzX3NldChjb25zdCBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpjLCB1aW50MTZfdCBhdHRyKQotIHsKLSAJcmV0dXJuIGMtPmZsYWdzICYgKDEgPDwgYXR0cik7Ci0gfQotLUVYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX2lzX3NldCk7Ci0gCi0rRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfdW5zZXQpOwotIHZvaWQgbmZ0bmxfZmxvd3RhYmxlX3Vuc2V0KHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMsIHVpbnQxNl90IGF0dHIpCi0gewotIAlpbnQgaTsKLUBAIC05NSw3ICs5Niw2IEBAIHZvaWQgbmZ0bmxfZmxvd3RhYmxlX3Vuc2V0KHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMsIHVpbnQxNl90IGF0dHIpCi0gCi0gCWMtPmZsYWdzICY9IH4oMSA8PCBhdHRyKTsKLSB9Ci0tRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfdW5zZXQpOwotIAotIHN0YXRpYyB1aW50MzJfdCBuZnRubF9mbG93dGFibGVfdmFsaWRhdGVbTkZUTkxfRkxPV1RBQkxFX01BWCArIDFdID0gewotIAlbTkZUTkxfRkxPV1RBQkxFX0hPT0tOVU1dCT0gc2l6ZW9mKHVpbnQzMl90KSwKLUBAIC0xMDQsNiArMTA0LDcgQEAgc3RhdGljIHVpbnQzMl90IG5mdG5sX2Zsb3d0YWJsZV92YWxpZGF0ZVtORlROTF9GTE9XVEFCTEVfTUFYICsgMV0gPSB7Ci0gCVtORlROTF9GTE9XVEFCTEVfRkxBR1NdCQk9IHNpemVvZih1aW50MzJfdCksCi0gfTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9zZXRfZGF0YSk7Ci0gaW50IG5mdG5sX2Zsb3d0YWJsZV9zZXRfZGF0YShzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpjLCB1aW50MTZfdCBhdHRyLAotIAkJCSAgICAgY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3QgZGF0YV9sZW4pCi0gewotQEAgLTE2OSwzMiArMTcwLDMyIEBAIGludCBuZnRubF9mbG93dGFibGVfc2V0X2RhdGEoc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywgdWludDE2X3QgYXR0ciwKLSAJYy0+ZmxhZ3MgfD0gKDEgPDwgYXR0cik7Ci0gCXJldHVybiAwOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9zZXRfZGF0YSk7Ci0gCi0rRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfc2V0KTsKLSB2b2lkIG5mdG5sX2Zsb3d0YWJsZV9zZXQoc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywgdWludDE2X3QgYXR0ciwgY29uc3Qgdm9pZCAqZGF0YSkKLSB7Ci0gCW5mdG5sX2Zsb3d0YWJsZV9zZXRfZGF0YShjLCBhdHRyLCBkYXRhLCBuZnRubF9mbG93dGFibGVfdmFsaWRhdGVbYXR0cl0pOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9zZXQpOwotIAotK0VYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX3NldF91MzIpOwotIHZvaWQgbmZ0bmxfZmxvd3RhYmxlX3NldF91MzIoc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywgdWludDE2X3QgYXR0ciwgdWludDMyX3QgZGF0YSkKLSB7Ci0gCW5mdG5sX2Zsb3d0YWJsZV9zZXRfZGF0YShjLCBhdHRyLCAmZGF0YSwgc2l6ZW9mKHVpbnQzMl90KSk7Ci0gfQotLUVYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX3NldF91MzIpOwotIAotK0VYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX3NldF9zMzIpOwotIHZvaWQgbmZ0bmxfZmxvd3RhYmxlX3NldF9zMzIoc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywgdWludDE2X3QgYXR0ciwgaW50MzJfdCBkYXRhKQotIHsKLSAJbmZ0bmxfZmxvd3RhYmxlX3NldF9kYXRhKGMsIGF0dHIsICZkYXRhLCBzaXplb2YoaW50MzJfdCkpOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9zZXRfczMyKTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9zZXRfc3RyKTsKLSBpbnQgbmZ0bmxfZmxvd3RhYmxlX3NldF9zdHIoc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywgdWludDE2X3QgYXR0ciwgY29uc3QgY2hhciAqc3RyKQotIHsKLSAJcmV0dXJuIG5mdG5sX2Zsb3d0YWJsZV9zZXRfZGF0YShjLCBhdHRyLCBzdHIsIHN0cmxlbihzdHIpICsgMSk7Ci0gfQotLUVYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX3NldF9zdHIpOwotIAotK0VYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX2dldF9kYXRhKTsKLSBjb25zdCB2b2lkICpuZnRubF9mbG93dGFibGVfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywKLSAJCQkJICAgICB1aW50MTZfdCBhdHRyLCB1aW50MzJfdCAqZGF0YV9sZW4pCi0gewotQEAgLTIyOCwyMSArMjI5LDIxIEBAIGNvbnN0IHZvaWQgKm5mdG5sX2Zsb3d0YWJsZV9nZXRfZGF0YShjb25zdCBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpjLAotIAl9Ci0gCXJldHVybiBOVUxMOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9nZXRfZGF0YSk7Ci0gCi0rRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfZ2V0KTsKLSBjb25zdCB2b2lkICpuZnRubF9mbG93dGFibGVfZ2V0KGNvbnN0IHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMsIHVpbnQxNl90IGF0dHIpCi0gewotIAl1aW50MzJfdCBkYXRhX2xlbjsKLSAJcmV0dXJuIG5mdG5sX2Zsb3d0YWJsZV9nZXRfZGF0YShjLCBhdHRyLCAmZGF0YV9sZW4pOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9nZXQpOwotIAotK0VYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX2dldF9zdHIpOwotIGNvbnN0IGNoYXIgKm5mdG5sX2Zsb3d0YWJsZV9nZXRfc3RyKGNvbnN0IHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMsIHVpbnQxNl90IGF0dHIpCi0gewotIAlyZXR1cm4gbmZ0bmxfZmxvd3RhYmxlX2dldChjLCBhdHRyKTsKLSB9Ci0tRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfZ2V0X3N0cik7Ci0gCi0rRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfZ2V0X3UzMik7Ci0gdWludDMyX3QgbmZ0bmxfZmxvd3RhYmxlX2dldF91MzIoY29uc3Qgc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywgdWludDE2X3QgYXR0cikKLSB7Ci0gCXVpbnQzMl90IGRhdGFfbGVuID0gMDsKLUBAIC0yNTIsOCArMjUzLDggQEAgdWludDMyX3QgbmZ0bmxfZmxvd3RhYmxlX2dldF91MzIoY29uc3Qgc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywgdWludDE2X3QgYXR0cikKLSAKLSAJcmV0dXJuIHZhbCA/ICp2YWwgOiAwOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9nZXRfdTMyKTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9nZXRfczMyKTsKLSBpbnQzMl90IG5mdG5sX2Zsb3d0YWJsZV9nZXRfczMyKGNvbnN0IHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMsIHVpbnQxNl90IGF0dHIpCi0gewotIAl1aW50MzJfdCBkYXRhX2xlbiA9IDA7Ci1AQCAtMjYzLDggKzI2NCw4IEBAIGludDMyX3QgbmZ0bmxfZmxvd3RhYmxlX2dldF9zMzIoY29uc3Qgc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywgdWludDE2X3QgYXR0cikKLSAKLSAJcmV0dXJuIHZhbCA/ICp2YWwgOiAwOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9nZXRfczMyKTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9ubG1zZ19idWlsZF9wYXlsb2FkKTsKLSB2b2lkIG5mdG5sX2Zsb3d0YWJsZV9ubG1zZ19idWlsZF9wYXlsb2FkKHN0cnVjdCBubG1zZ2hkciAqbmxoLAotIAkJCQkJIGNvbnN0IHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMpCi0gewotQEAgLTMwMCw3ICszMDEsNiBAQCB2b2lkIG5mdG5sX2Zsb3d0YWJsZV9ubG1zZ19idWlsZF9wYXlsb2FkKHN0cnVjdCBubG1zZ2hkciAqbmxoLAotIAlpZiAoYy0+ZmxhZ3MgJiAoMSA8PCBORlROTF9GTE9XVEFCTEVfU0laRSkpCi0gCQltbmxfYXR0cl9wdXRfdTMyKG5saCwgTkZUQV9GTE9XVEFCTEVfU0laRSwgaHRvbmwoYy0+c2l6ZSkpOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9ubG1zZ19idWlsZF9wYXlsb2FkKTsKLSAKLSBzdGF0aWMgaW50IG5mdG5sX2Zsb3d0YWJsZV9wYXJzZV9hdHRyX2NiKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHZvaWQgKmRhdGEpCi0gewotQEAgLTQxNSw2ICs0MTUsNyBAQCBzdGF0aWMgaW50IG5mdG5sX2Zsb3d0YWJsZV9wYXJzZV9ob29rKHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZnRubF9mbG93dGFibAotIAlyZXR1cm4gMDsKLSB9Ci0gCi0rRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfbmxtc2dfcGFyc2UpOwotIGludCBuZnRubF9mbG93dGFibGVfbmxtc2dfcGFyc2UoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMpCi0gewotIAlzdHJ1Y3QgbmxhdHRyICp0YltORlRBX0ZMT1dUQUJMRV9NQVggKyAxXSA9IHt9OwotQEAgLTQ2Myw3ICs0NjQsNiBAQCBpbnQgbmZ0bmxfZmxvd3RhYmxlX25sbXNnX3BhcnNlKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYgotIAotIAlyZXR1cm4gcmV0OwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9ubG1zZ19wYXJzZSk7Ci0gCi0gc3RhdGljIGNvbnN0IGNoYXIgKm5mdG5sX2hvb2tudW0yc3RyKGludCBmYW1pbHksIGludCBob29rbnVtKQotIHsKLUBAIC01MTYsMTQgKzUxNiwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBuZnRubF9zdHIyaG9va251bShpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpob29rKQotIAlyZXR1cm4gLTE7Ci0gfQotIAotK0VYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX3BhcnNlKTsKLSBpbnQgbmZ0bmxfZmxvd3RhYmxlX3BhcnNlKHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMsIGVudW0gbmZ0bmxfcGFyc2VfdHlwZSB0eXBlLAotIAkJCSAgY29uc3QgY2hhciAqZGF0YSwgc3RydWN0IG5mdG5sX3BhcnNlX2VyciAqZXJyKQotIHsKLSAJZXJybm8gPSBFT1BOT1RTVVBQOwotIAlyZXR1cm4gLTE7Ci0gfQotLUVYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX3BhcnNlKTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9wYXJzZV9maWxlKTsKLSBpbnQgbmZ0bmxfZmxvd3RhYmxlX3BhcnNlX2ZpbGUoc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqYywKLSAJCQkgICAgICAgZW51bSBuZnRubF9wYXJzZV90eXBlIHR5cGUsCi0gCQkJICAgICAgIEZJTEUgKmZwLCBzdHJ1Y3QgbmZ0bmxfcGFyc2VfZXJyICplcnIpCi1AQCAtNTMxLDcgKzUzMiw2IEBAIGludCBuZnRubF9mbG93dGFibGVfcGFyc2VfZmlsZShzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpjLAotIAllcnJubyA9IEVPUE5PVFNVUFA7Ci0gCXJldHVybiAtMTsKLSB9Ci0tRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfcGFyc2VfZmlsZSk7Ci0gCi0gc3RhdGljIGludCBuZnRubF9mbG93dGFibGVfc25wcmludGZfZGVmYXVsdChjaGFyICpidWYsIHNpemVfdCBzaXplLAotIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBuZnRubF9mbG93dGFibGUgKmMpCi1AQCAtNTg3LDYgKzU4Nyw3IEBAIHN0YXRpYyBpbnQgbmZ0bmxfZmxvd3RhYmxlX2NtZF9zbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLAotIAlyZXR1cm4gb2Zmc2V0OwotIH0KLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9zbnByaW50Zik7Ci0gaW50IG5mdG5sX2Zsb3d0YWJsZV9zbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpjLAotIAkJCSB1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBmbGFncykKLSB7Ci1AQCAtNTk2LDcgKzU5Nyw2IEBAIGludCBuZnRubF9mbG93dGFibGVfc25wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3Qgc3RydWN0IG5mdG5sX2Zsb3d0YWJsCi0gCXJldHVybiBuZnRubF9mbG93dGFibGVfY21kX3NucHJpbnRmKGJ1Ziwgc2l6ZSwgYywgbmZ0bmxfZmxhZzJjbWQoZmxhZ3MpLAotIAkJCQkJICAgIHR5cGUsIGZsYWdzKTsKLSB9Ci0tRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfc25wcmludGYpOwotIAotIHN0YXRpYyBpbnQgbmZ0bmxfZmxvd3RhYmxlX2RvX3NucHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgKmMsCi0gCQkJCSAgIHVpbnQzMl90IGNtZCwgdWludDMyX3QgdHlwZSwgdWludDMyX3QgZmxhZ3MpCi1AQCAtNjA0LDE4ICs2MDQsMTkgQEAgc3RhdGljIGludCBuZnRubF9mbG93dGFibGVfZG9fc25wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqYywKLSAJcmV0dXJuIG5mdG5sX2Zsb3d0YWJsZV9zbnByaW50ZihidWYsIHNpemUsIGMsIHR5cGUsIGZsYWdzKTsKLSB9Ci0gCi0rRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfZnByaW50Zik7Ci0gaW50IG5mdG5sX2Zsb3d0YWJsZV9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpjLAotIAkJCSAgICB1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBmbGFncykKLSB7Ci0gCXJldHVybiBuZnRubF9mcHJpbnRmKGZwLCBjLCBORlROTF9DTURfVU5TUEVDLCB0eXBlLCBmbGFncywKLSAJCQkgICBuZnRubF9mbG93dGFibGVfZG9fc25wcmludGYpOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9mcHJpbnRmKTsKLSAKLSBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlX2xpc3QgewotIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0gfTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9saXN0X2FsbG9jKTsKLSBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlX2xpc3QgKm5mdG5sX2Zsb3d0YWJsZV9saXN0X2FsbG9jKHZvaWQpCi0gewotIAlzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlX2xpc3QgKmxpc3Q7Ci1AQCAtNjI4LDggKzYyOSw4IEBAIHN0cnVjdCBuZnRubF9mbG93dGFibGVfbGlzdCAqbmZ0bmxfZmxvd3RhYmxlX2xpc3RfYWxsb2Modm9pZCkKLSAKLSAJcmV0dXJuIGxpc3Q7Ci0gfQotLUVYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX2xpc3RfYWxsb2MpOwotIAotK0VYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX2xpc3RfZnJlZSk7Ci0gdm9pZCBuZnRubF9mbG93dGFibGVfbGlzdF9mcmVlKHN0cnVjdCBuZnRubF9mbG93dGFibGVfbGlzdCAqbGlzdCkKLSB7Ci0gCXN0cnVjdCBuZnRubF9mbG93dGFibGUgKnMsICp0bXA7Ci1AQCAtNjQwLDM0ICs2NDEsMzQgQEAgdm9pZCBuZnRubF9mbG93dGFibGVfbGlzdF9mcmVlKHN0cnVjdCBuZnRubF9mbG93dGFibGVfbGlzdCAqbGlzdCkKLSAJfQotIAl4ZnJlZShsaXN0KTsKLSB9Ci0tRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfbGlzdF9mcmVlKTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9saXN0X2lzX2VtcHR5KTsKLSBpbnQgbmZ0bmxfZmxvd3RhYmxlX2xpc3RfaXNfZW1wdHkoY29uc3Qgc3RydWN0IG5mdG5sX2Zsb3d0YWJsZV9saXN0ICpsaXN0KQotIHsKLSAJcmV0dXJuIGxpc3RfZW1wdHkoJmxpc3QtPmxpc3QpOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9saXN0X2lzX2VtcHR5KTsKLSAKLStFWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9saXN0X2FkZCk7Ci0gdm9pZCBuZnRubF9mbG93dGFibGVfbGlzdF9hZGQoc3RydWN0IG5mdG5sX2Zsb3d0YWJsZSAqcywKLSAJCQkgICAgICBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlX2xpc3QgKmxpc3QpCi0gewotIAlsaXN0X2FkZCgmcy0+aGVhZCwgJmxpc3QtPmxpc3QpOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9saXN0X2FkZCk7Ci0gCi0rRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfbGlzdF9hZGRfdGFpbCk7Ci0gdm9pZCBuZnRubF9mbG93dGFibGVfbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpzLAotIAkJCQkgICBzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlX2xpc3QgKmxpc3QpCi0gewotIAlsaXN0X2FkZF90YWlsKCZzLT5oZWFkLCAmbGlzdC0+bGlzdCk7Ci0gfQotLUVYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX2xpc3RfYWRkX3RhaWwpOwotIAotK0VYUE9SVF9TWU1CT0wobmZ0bmxfZmxvd3RhYmxlX2xpc3RfZGVsKTsKLSB2b2lkIG5mdG5sX2Zsb3d0YWJsZV9saXN0X2RlbChzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlICpzKQotIHsKLSAJbGlzdF9kZWwoJnMtPmhlYWQpOwotIH0KLS1FWFBPUlRfU1lNQk9MKG5mdG5sX2Zsb3d0YWJsZV9saXN0X2RlbCk7Ci0gCi0rRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfbGlzdF9mb3JlYWNoKTsKLSBpbnQgbmZ0bmxfZmxvd3RhYmxlX2xpc3RfZm9yZWFjaChzdHJ1Y3QgbmZ0bmxfZmxvd3RhYmxlX2xpc3QgKmZsb3d0YWJsZV9saXN0LAotIAkJCQkgaW50ICgqY2IpKHN0cnVjdCBuZnRubF9mbG93dGFibGUgKnQsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQotIHsKLUBAIC02ODEsNCArNjgyLDMgQEAgaW50IG5mdG5sX2Zsb3d0YWJsZV9saXN0X2ZvcmVhY2goc3RydWN0IG5mdG5sX2Zsb3d0YWJsZV9saXN0ICpmbG93dGFibGVfbGlzdCwKLSAJfQotIAlyZXR1cm4gMDsKLSB9Ci0tRVhQT1JUX1NZTUJPTChuZnRubF9mbG93dGFibGVfbGlzdF9mb3JlYWNoKTsKLS0tIAotMi4xNy4xCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9saWJuZnRubC9saWJuZnRubC8wMDAyLWF2b2lkLW5hbWluZy1sb2NhbC1mdW5jdGlvbi1hcy1vbmUtb2YtcHJpbnRmLWZhbWlseS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9saWJuZnRubC9saWJuZnRubC8wMDAxLWF2b2lkLW5hbWluZy1sb2NhbC1mdW5jdGlvbi1hcy1vbmUtb2YtcHJpbnRmLWZhbWlseS5wYXRjaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvbGlibmZ0bmwvbGlibmZ0bmwvMDAwMi1hdm9pZC1uYW1pbmctbG9jYWwtZnVuY3Rpb24tYXMtb25lLW9mLXByaW50Zi1mYW1pbHkucGF0Y2gKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9saWJuZnRubC9saWJuZnRubC8wMDAxLWF2b2lkLW5hbWluZy1sb2NhbC1mdW5jdGlvbi1hcy1vbmUtb2YtcHJpbnRmLWZhbWlseS5wYXRjaAppbmRleCBlNjQwOTFiLi5mNDllZjJhIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvbGlibmZ0bmwvbGlibmZ0bmwvMDAwMi1hdm9pZC1uYW1pbmctbG9jYWwtZnVuY3Rpb24tYXMtb25lLW9mLXByaW50Zi1mYW1pbHkucGF0Y2gKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL2xpYm5mdG5sL2xpYm5mdG5sLzAwMDEtYXZvaWQtbmFtaW5nLWxvY2FsLWZ1bmN0aW9uLWFzLW9uZS1vZi1wcmludGYtZmFtaWx5LnBhdGNoCkBAIC0xLDYgKzEsNiBAQAotRnJvbSAzNzNlMTNlMjhlMzRiNGQ0MTVmYzA5NmUxYzcxNzVmNGVjZmJmMGRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogWXVhbiBDaGFvIDx5dWFuYy5mbnN0QGNuLmZ1aml0c3UuY29tPgotRGF0ZTogV2VkLCAyMSBBdWcgMjAxOSAxMToxODo1NiArMDkwMAorRnJvbSBlMDNiMDAzNjEwYTE3NmQ2MDhkYTlhMDJlNDMzZTdkZWQ3ZTRiNzVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVG9kZCBDdW5uaW5naGFtIDx0Y3VubmluZ2hhbTA3QGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTEgRGVjIDIwMTkgMTA6MTg6NTYgKzEwMDAKIFN1YmplY3Q6IFtQQVRDSF0gYXZvaWQgbmFtaW5nIGxvY2FsIGZ1bmN0aW9uIGFzIG9uZSBvZiBwcmludGYgZmFtaWx5CiAKIEZpeGVzIGJ1aWxkIGlzc3VlcyB3aXRoIGNsYW5nCkBAIC0xMCw2ICsxMCw3IEBACiBTaWduZWQtb2ZmLWJ5OiBBbGV4IEtpZXJuYW4gPGFsZXgua2llcm5hbkBnbWFpbC5jb20+CiAKIFNpZ25lZC1vZmYtYnk6IFl1YW4gQ2hhbyA8eXVhbmMuZm5zdEBjbi5mdWppdHN1LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFRvZGQgQ3VubmluZ2hhbSA8dGN1bm5pbmdoYW0wN0BnbWFpbC5jb20+CiAtLS0KICBpbmNsdWRlL2V4cHJfb3BzLmggICAgICB8IDIgKy0KICBpbmNsdWRlL29iai5oICAgICAgICAgICB8IDIgKy0KQEAgLTU4LDYgKzU5LDcgQEAKICBzcmMvb2JqL2xpbWl0LmMgICAgICAgICB8IDIgKy0KICBzcmMvb2JqL3F1b3RhLmMgICAgICAgICB8IDIgKy0KICBzcmMvb2JqL3NlY21hcmsuYyAgICAgICB8IDIgKy0KKyBzcmMvb2JqL3N5bnByb3h5LmMgICAgICB8IDIgKy0KICBzcmMvb2JqL3R1bm5lbC5jICAgICAgICB8IDIgKy0KICBzcmMvb2JqZWN0LmMgICAgICAgICAgICB8IDIgKy0KICA0OSBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspLCA1MCBkZWxldGlvbnMoLSkKQEAgLTYxMyw2ICs2MTUsMTcgQEAKICAJCQkJCSBvYmopOwogIAkJU05QUklOVEZfQlVGRkVSX1NJWkUocmV0LCByZW1haW4sIG9mZnNldCk7CiAgCX0KK2RpZmYgLS1naXQgYS9zcmMvb2JqL3N5bnByb3h5LmMgYi9zcmMvb2JqL3N5bnByb3h5LmMKK2luZGV4IDU2ZWJjODUuLjZiNTM4MGYgMTAwNjQ0CistLS0gYS9zcmMvb2JqL3N5bnByb3h5LmMKKysrKyBiL3NyYy9vYmovc3lucHJveHkuYworQEAgLTE1Nyw1ICsxNTcsNSBAQCBzdHJ1Y3Qgb2JqX29wcyBvYmpfb3BzX3N5bnByb3h5ID0geworIAkuZ2V0CQk9IG5mdG5sX29ial9zeW5wcm94eV9nZXQsCisgCS5wYXJzZQkJPSBuZnRubF9vYmpfc3lucHJveHlfcGFyc2UsCisgCS5idWlsZAkJPSBuZnRubF9vYmpfc3lucHJveHlfYnVpbGQsCistCS5zbnByaW50Zgk9IG5mdG5sX29ial9zeW5wcm94eV9zbnByaW50ZiwKKysJLnNucHJpbnRmXwk9IG5mdG5sX29ial9zeW5wcm94eV9zbnByaW50ZiwKKyB9OwogLS0gCiAyLjE3LjEKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL2xpYm5mdG5sL2xpYm5mdG5sXzEuMS40LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL2xpYm5mdG5sL2xpYm5mdG5sXzEuMS41LmJiCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9saWJuZnRubC9saWJuZnRubF8xLjEuNC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL2xpYm5mdG5sL2xpYm5mdG5sXzEuMS41LmJiCmluZGV4IDcwNWI2YTYuLmUxYzI3MjAgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9saWJuZnRubC9saWJuZnRubF8xLjEuNC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvbGlibmZ0bmwvbGlibmZ0bmxfMS4xLjUuYmIKQEAgLTQsMTAgKzQsOSBAQAogU0VDVElPTiA9ICJsaWJzIgogREVQRU5EUyA9ICJsaWJtbmwiCiAKLVNSQ1JFViA9ICI3YzE5ZGMwMWE4OGRiY2Y5YTQ1ZmE3OTFjZDI3YTUxYjU2M2JjZjI5IgorU1JDUkVWID0gImE3MTU5OWRjMGFlMWE4MDhlOTcwZTk2ODUwZWE4M2Q3N2Y0NTI5OTQiCiBTUkNfVVJJID0gImdpdDovL2dpdC5uZXRmaWx0ZXIub3JnL2xpYm5mdG5sIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtTW92ZS1leHBvcnRzLWJlZm9yZS1zeW1ib2wtZGVmaW5pdGlvbi5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLWF2b2lkLW5hbWluZy1sb2NhbC1mdW5jdGlvbi1hcy1vbmUtb2YtcHJpbnRmLWZhbWlseS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWF2b2lkLW5hbWluZy1sb2NhbC1mdW5jdGlvbi1hcy1vbmUtb2YtcHJpbnRmLWZhbWlseS5wYXRjaCBcCiAgICAgICAgICAgICIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9uZnRhYmxlcy9maWxlcy8wMDAxLXVwZGF0ZS1weXRob24zLW5mdGFibGVzLXJlZmVyZW5jZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLWZpbHRlci9uZnRhYmxlcy9maWxlcy8wMDAxLXVwZGF0ZS1weXRob24zLW5mdGFibGVzLXJlZmVyZW5jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjIyNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL25mdGFibGVzL2ZpbGVzLzAwMDEtdXBkYXRlLXB5dGhvbjMtbmZ0YWJsZXMtcmVmZXJlbmNlLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gZGRiZTY1MmJmMGY0ZWQzMDBiYWU5NDk3MjUwMTMwZDY4ZTRjYmY1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFydHVybyBCb3JyZXJvIEdvbnphbGV6IDxhcnR1cm9AbmV0ZmlsdGVyLm9yZz4KK0RhdGU6IFR1ZSwgMTAgRGVjIDIwMTkgMTI6MDA6NDUgKzAxMDAKK1N1YmplY3Q6IHB5OiBsb2FkIHRoZSBTT05BTUUtdmVyc2lvbmVkIHNoYXJlZCBvYmplY3QKKworSW5zdHJ1Y3QgdGhlIHB5dGhvbiBtb2R1bGUgdG8gbG9hZCB0aGUgU09OQU1FIHZlcnNpb25lZCBzaGFyZWQgb2JqZWN0LgorCitOb3JtYWwgZW5kLXVzZXIgc3lzdGVtcyBtYXkgb25seSBoYXZlIGF2YWlsYWJsZSBsaWJuZnRhYmxlcy5zby4xLjAuMCBhbmQgbm90CitsaWJuZnRhYmxlcy5zbyB3aGljaCBpcyB1c3VhbGx5IG9ubHkgcHJlc2VudCBpbiBkZXZlbG9wZXIgc3lzdGVtcy4KKworSW4gRGViaWFuIHN5c3RlbXMsIGZvciBleGFtcGxlOgorCisgJSBkcGtnIC1MIGxpYm5mdGFibGVzMSB8IGdyZXAgc28uMQorIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvbGlibmZ0YWJsZXMuc28uMS4wLjAKKyAvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2xpYm5mdGFibGVzLnNvLjEKKworICUgZHBrZyAtTCBsaWJuZnRhYmxlcy1kZXYgfCBncmVwIHNvCisgL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJuZnRhYmxlcy5zbworCitUaGUgIjEiIGlzIG5vdCBhIG1hZ2ljIG51bWJlciwgaXMgdGhlIFNPTkFNRSBvZiBsaWJuZnRhYmxlcyBpbiB0aGUgY3VycmVudAordmVyc2lvbiwgYXMgc3RhdGVkIGluIE1ha2VfZ2xvYmFsLmFtLgorCitSZXBvcnRlZC1ieTogTWljaGFlbCBCaWVibCA8YmllYmxAZGViaWFuLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEFydHVybyBCb3JyZXJvIEdvbnphbGV6IDxhcnR1cm9AbmV0ZmlsdGVyLm9yZz4KK0Fja2VkLWJ5OiBQaGlsIFN1dHRlciA8cGhpbEBud2wuY2M+CitTaWduZWQtb2ZmLWJ5OiBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4KKy0tLQorIHB5L25mdGFibGVzLnB5IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcHkvbmZ0YWJsZXMucHkgYi9weS9uZnRhYmxlcy5weQoraW5kZXggNDhlYjU0ZmUuLjJhMGExZTg5IDEwMDY0NAorLS0tIGEvcHkvbmZ0YWJsZXMucHkKKysrKyBiL3B5L25mdGFibGVzLnB5CitAQCAtNjQsNyArNjQsNyBAQCBjbGFzcyBOZnRhYmxlczoKKyAKKyAgICAgdmFsaWRhdG9yID0gTm9uZQorIAorLSAgICBkZWYgX19pbml0X18oc2VsZiwgc29maWxlPSJsaWJuZnRhYmxlcy5zbyIpOgorKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29maWxlPSJsaWJuZnRhYmxlcy5zby4xIik6CisgICAgICAgICAiIiJJbnN0YW50aWF0ZSBhIG5ldyBOZnRhYmxlcyBjbGFzcyBvYmplY3QuCisgCisgICAgICAgICBBY2NlcHRzIGEgc2hhcmVkIG9iamVjdCBmaWxlIHRvIG9wZW4sIGJ5IGRlZmF1bHQgc3RhbmRhcmQgc2VhcmNoIHBhdGgKKy0tIAorY2dpdCB2MS4yLjEKKworCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvbmZ0YWJsZXMvbmZ0YWJsZXNfMC45LjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvbmZ0YWJsZXMvbmZ0YWJsZXNfMC45LjIuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZTgwNTAuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL25mdGFibGVzL25mdGFibGVzXzAuOS4yLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotU1VNTUFSWSA9ICJOZXRmaWx0ZXIgVGFibGVzIHVzZXJzcGFjZSB1dGlsbGl0ZXMiCi1TRUNUSU9OID0gIm5ldCIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMWE3OGZkZDg3OWEyNjNhNWUwYjQyZDFmYzU2NWU3OSIKLQotREVQRU5EUyA9ICJsaWJtbmwgbGlibmZ0bmwgcmVhZGxpbmUgZ21wIGJpc29uLW5hdGl2ZSIKLQotVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMvZmlsZXMvIgotCi1TUkNfVVJJID0gImh0dHA6Ly93d3cubmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9uZnRhYmxlcy9maWxlcy8ke0JQfS50YXIuYnoyIgotU1JDX1VSSVttZDVzdW1dID0gImRmZTEzMDcyNGQ3Yzk5OGViMjZiNTY0NDdlOTMyODk5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjYjY2MTgwMTQzZTZiZmM3NzRmNGViMzE2MjA2ZDQwYWMxY2I2ZGYyNjlhOTA4ODI0MDRjYmY3MTY1NTEzZjUiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIG1hbnBhZ2VzIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID89ICJweXRob24iCi1QQUNLQUdFQ09ORklHW21hbl0gPSAiLS1lbmFibGUtLW1hbi1kb2MsIC0tZGlzYWJsZS1tYW4tZG9jIgotUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob24tYmluPSR7UFlUSE9OfSwgLS13aXRoLXB5dGhvbi1iaW49IiIsIHB5dGhvbjMiCi0KLWluaGVyaXQgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uJywgJ3B5dGhvbjNuYXRpdmUnLCAnJywgZCl9Ci0KLUFTTkVFREVEID0gIiIKLQotUlJFQ09NTUVORFNfJHtQTn0gKz0gImtlcm5lbC1tb2R1bGUtbmYtdGFibGVzIgotCi1QQUNLQUdFUyA9KyAiJHtQTn0tcHl0aG9uIgotRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyX25hdGl2ZX0vJHtQWVRIT05fRElSfSIKLVJERVBFTkRTXyR7UE59LXB5dGhvbiA9ICJweXRob24zLWNvcmUgcHl0aG9uMy1qc29uIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL25mdGFibGVzL25mdGFibGVzXzAuOS4zLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtZmlsdGVyL25mdGFibGVzL25mdGFibGVzXzAuOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YTdiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1maWx0ZXIvbmZ0YWJsZXMvbmZ0YWJsZXNfMC45LjMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJOZXRmaWx0ZXIgVGFibGVzIHVzZXJzcGFjZSB1dGlsbGl0ZXMiCitTRUNUSU9OID0gIm5ldCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMWE3OGZkZDg3OWEyNjNhNWUwYjQyZDFmYzU2NWU3OSIKKworREVQRU5EUyA9ICJsaWJtbmwgbGlibmZ0bmwgYmlzb24tbmF0aXZlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbWluaS1nbXAnLCAnJywgJ2dtcCcsIGQpfSIKKworIyBFbnN1cmUgd2UgcmVqZWN0IHRoZSAwLjA5OSB2ZXJzaW9uIGJ5IG1hdGNoaW5nIGF0IGxlYXN0IHR3byBkb3RzCitVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJuZnRhYmxlcy0oP1A8cHZlcj5cZCsoXC5cZCspezIsfSkudGFyLmJ6MiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMvZmlsZXMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVwZGF0ZS1weXRob24zLW5mdGFibGVzLXJlZmVyZW5jZS5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OTEzYjJiNDY4NjQzOTRkNDE5MTZiNzQ2MzhlMDg3NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NTZiOTE1Y2UyYTdhZWFmZjEyM2U0OTAwNmJlN2EwNjkwYTA5NjRlOTZjMDYyNzAzMTgxYTM2ZTJlNWVkYjc4IgorCitpbmhlcml0IGF1dG90b29scyBtYW5wYWdlcyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gInB5dGhvbiByZWFkbGluZSIKK1BBQ0tBR0VDT05GSUdbanNvbl0gPSAiLS13aXRoLWpzb24sIC0td2l0aG91dC1qc29uLCBqYW5zc29uIgorUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtbWFuLWRvYywgLS1kaXNhYmxlLW1hbi1kb2MsIGFzY2lpZG9jLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbbWluaS1nbXBdID0gIi0td2l0aC1taW5pLWdtcCwgLS13aXRob3V0LW1pbmktZ21wIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbiAtLXdpdGgtcHl0aG9uLWJpbj0ke1BZVEhPTn0sIC0td2l0aC1weXRob24tYmluPSIiLCBweXRob24zIgorUEFDS0FHRUNPTkZJR1tyZWFkbGluZV0gPSAiLS13aXRoLWNsaT1yZWFkbGluZSwgLS13aXRob3V0LWNsaSwgcmVhZGxpbmUiCitQQUNLQUdFQ09ORklHW3h0YWJsZXNdID0gIi0td2l0aC14dGFibGVzLCAtLXdpdGhvdXQteHRhYmxlcywgaXB0YWJsZXMiCisKK2luaGVyaXQgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uJywgJ3B5dGhvbjNuYXRpdmUnLCAnJywgZCl9CisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJrZXJuZWwtbW9kdWxlLW5mLXRhYmxlcyIKKworUEFDS0FHRVMgPSsgIiR7UE59LXB5dGhvbiIKK0ZJTEVTXyR7UE59LXB5dGhvbiA9ICIke25vbmFyY2hfbGliZGlyfS8ke1BZVEhPTl9ESVJ9IgorUkRFUEVORFNfJHtQTn0tcHl0aG9uID0gInB5dGhvbjMtY29yZSBweXRob24zLWpzb24iCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1wcm90b2NvbHMvb3BlbmwydHAvb3BlbmwydHAvb3BlbmwydHBkLnNlcnZpY2UgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1wcm90b2NvbHMvb3BlbmwydHAvb3BlbmwydHAvb3BlbmwydHBkLnNlcnZpY2UKaW5kZXggN2IzZmFmNi4uZDAyZDBmZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtcHJvdG9jb2xzL29wZW5sMnRwL29wZW5sMnRwL29wZW5sMnRwZC5zZXJ2aWNlCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXByb3RvY29scy9vcGVubDJ0cC9vcGVubDJ0cC9vcGVubDJ0cGQuc2VydmljZQpAQCAtNSw3ICs1LDcgQEAKIAogW1NlcnZpY2VdCiBUeXBlPWZvcmtpbmcKLVBJREZpbGU9QFNUQVRFRElSQC9ydW4vb3BlbmwydHBkLnBpZAorUElERmlsZT0vcnVuL29wZW5sMnRwZC5waWQKIEVudmlyb25tZW50RmlsZT1AU1lTQ09ORkRJUkAvZGVmYXVsdC9vcGVubDJ0cGQKIEV4ZWNTdGFydFByZT1AQkFTRV9CSU5ESVJAL3NoIC1jICJAQkFTRV9TQklORElSQC9tb2Rwcm9iZSAtc3EgbDJ0cF9wcHAgfHwgQEJBU0VfU0JJTkRJUkAvbW9kcHJvYmUgLXNxIHBwcG9sMnRwIgogRXhlY1N0YXJ0PUBTQklORElSQC9vcGVubDJ0cGQgJE9QRU5MMlRQREFSR1MKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXByb3RvY29scy9vcGVubDJ0cC9vcGVubDJ0cF8xLjguYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1wcm90b2NvbHMvb3BlbmwydHAvb3BlbmwydHBfMS44LmJiCmluZGV4IDkwZThiMTEuLjljMGMyOGUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXByb3RvY29scy9vcGVubDJ0cC9vcGVubDJ0cF8xLjguYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtcHJvdG9jb2xzL29wZW5sMnRwL29wZW5sMnRwXzEuOC5iYgpAQCAtMTgsNyArMTgsNyBAQAogCiBERVBFTkRTID0gInBvcHQgZmxleCByZWFkbGluZSBycGNzdmMtcHJvdG8tbmF0aXZlIGJpc29uLW5hdGl2ZSIKIAotU1JDX1VSSSA9ICJmdHA6Ly9mdHAub3BlbmwydHAub3JnL3JlbGVhc2VzLyR7QlB9LyR7QlB9LnRhci5neiBcCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtQVn0vJHtCUH0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLW1vZGlmeS1DRkxBR1MtdG8tYXZpb2QtYnVpbGQtZXJyb3IucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vb3BlbmwydHAtc2ltcGxpZnktZ2NjLXdhcm5pbmctaGFjay5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1vYmV5LUxERkxBR1MucGF0Y2ggXApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9kbnNtYXNxL2Ruc21hc3EvMDAwMS1kbnNtYXNxLWZpeC1tZW1vcnktbGVhay1pbi1oZWxwZXItYy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvZG5zbWFzcS9kbnNtYXNxLzAwMDEtZG5zbWFzcS1maXgtbWVtb3J5LWxlYWstaW4taGVscGVyLWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkNmY4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvZG5zbWFzcS9kbnNtYXNxLzAwMDEtZG5zbWFzcS1maXgtbWVtb3J5LWxlYWstaW4taGVscGVyLWMucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA2OWJjOTQ3NzljMmYwMzVhOWZmZmRiNTMyN2E1NGMzYWVjYTczZWQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4KK0RhdGU6IFdlZCwgMTQgQXVnIDIwMTkgMjA6NDQ6NTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IG1lbW9yeSBsZWFrIGluIGhlbHBlci5jCisKK1RoYW5rcyB0byBYdSBNaW5namllIDx4dW1pbmdqaWUxOTk1QG91dGxvb2suY29tPiBmb3Igc3BvdHRpbmcgdGhpcy4KKworQ1ZFOiBDVkUtMjAxOS0xNDgzNAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDx6aGl4aW9uZy5jaGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9oZWxwZXIuYyB8ICAgMTIgKysrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9oZWxwZXIuYyBiL3NyYy9oZWxwZXIuYworaW5kZXggMzNiYTEyMC4uYzM5MmVlYyAxMDA2NDQKKy0tLSBhL3NyYy9oZWxwZXIuYworKysrIGIvc3JjL2hlbHBlci5jCitAQCAtODIsNyArODIsOCBAQCBpbnQgY3JlYXRlX2hlbHBlcihpbnQgZXZlbnRfZmQsIGludCBlcnJfZmQsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBsb25nIG1heF9mZCkKKyAgIHBpZF90IHBpZDsKKyAgIGludCBpLCBwaXBlZmRbMl07CisgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNpZ2FjdDsKKy0KKysgIHVuc2lnbmVkIGNoYXIgKmFsbG9jX2J1ZmYgPSBOVUxMOworKyAgCisgICAvKiBjcmVhdGUgdGhlIHBpcGUgdGhyb3VnaCB3aGljaCB0aGUgbWFpbiBwcm9ncmFtIHNlbmRzIHVzIGNvbW1hbmRzLAorICAgICAgdGhlbiBmb3JrIG91ciBwcm9jZXNzLiAqLworICAgaWYgKHBpcGUocGlwZWZkKSA9PSAtMSB8fCAhZml4X2ZkKHBpcGVmZFsxXSkgfHwgKHBpZCA9IGZvcmsoKSkgPT0gLTEpCitAQCAtMTg4LDExICsxODksMTYgQEAgaW50IGNyZWF0ZV9oZWxwZXIoaW50IGV2ZW50X2ZkLCBpbnQgZXJyX2ZkLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbG9uZyBtYXhfZmQpCisgICAgICAgc3RydWN0IHNjcmlwdF9kYXRhIGRhdGE7CisgICAgICAgY2hhciAqcCwgKmFjdGlvbl9zdHIsICpob3N0bmFtZSA9IE5VTEwsICpkb21haW4gPSBOVUxMOworICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5uYW1lYnVmZjsKKy0gICAgICB1bnNpZ25lZCBjaGFyICplbmQsICpleHRyYWRhdGEsICphbGxvY19idWZmID0gTlVMTDsKKysgICAgICB1bnNpZ25lZCBjaGFyICplbmQsICpleHRyYWRhdGE7CisgICAgICAgaW50IGlzNiwgZXJyID0gMDsKKyAgICAgICBpbnQgcGlwZW91dFsyXTsKKyAKKy0gICAgICBmcmVlKGFsbG9jX2J1ZmYpOworKyAgICAgIC8qIEZyZWUgcmFyZWx5LWFsbG9jYXRlZCBtZW1vcnkgZnJvbSBwcmV2aW91cyBpdGVyYXRpb24uICovCisrICAgICAgaWYgKGFsbG9jX2J1ZmYpCisrCXsKKysJICBmcmVlKGFsbG9jX2J1ZmYpOworKwkgIGFsbG9jX2J1ZmYgPSBOVUxMOworKwl9CisgICAgICAgCisgICAgICAgLyogd2UgcmVhZCB6ZXJvIGJ5dGVzIHdoZW4gcGlwZSBjbG9zZWQ6IHRoaXMgaXMgb3VyIHNpZ25hbCB0byBleGl0ICovIAorICAgICAgIGlmICghcmVhZF93cml0ZShwaXBlZmRbMF0sICh1bnNpZ25lZCBjaGFyICopJmRhdGEsIHNpemVvZihkYXRhKSwgMSkpCistLSAKKzEuNy4xMC40CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L2Ruc21hc3EvZG5zbWFzcV8yLjgwLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9kbnNtYXNxL2Ruc21hc3FfMi44MC5iYgppbmRleCA2ZjNkNWRhLi44Mjc1NjUwIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L2Ruc21hc3EvZG5zbWFzcV8yLjgwLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvZG5zbWFzcS9kbnNtYXNxXzIuODAuYmIKQEAgLTUsNSArNSw2IEBACiBTUkNfVVJJICs9ICJcCiAgICAgZmlsZTovL2x1YS5wYXRjaCBcCiAgICAgZmlsZTovLzAwMDEtZG5zbWFzcS1maXgtYnVpbGQtYWdhaW5zdC01LjItaGVhZGVycy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtZG5zbWFzcS1maXgtbWVtb3J5LWxlYWstaW4taGVscGVyLWMucGF0Y2ggXAogIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L2lwdnNhZG0vaXB2c2FkbV8xLjMwLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9pcHZzYWRtL2lwdnNhZG1fMS4zMS5iYgpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L2lwdnNhZG0vaXB2c2FkbV8xLjMwLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L2lwdnNhZG0vaXB2c2FkbV8xLjMxLmJiCmluZGV4IGIzNzVjYTkuLjhmYjExNmYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvaXB2c2FkbS9pcHZzYWRtXzEuMzAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9pcHZzYWRtL2lwdnNhZG1fMS4zMS5iYgpAQCAtMjIsOCArMjIsOCBAQAogICAgICAgICBmaWxlOi8vbWFrZWZpbGUtYWRkLWxkZmxhZ3MucGF0Y2ggXAogIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiOTdmMTFiNmFmMTkyMGZkZTVhOWQ5ZWFjMGQ3ZjllNTAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU1NzNkNzBkZjQ3M2M5ZjYzZmM0YWM0OTZjMDQ0YzY5ZTNhNmRlN2NjYWMxMTk5MjIyMTBjMGI0NGNkN2EwYyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNmQxNzA3YzViYWY2ODRiNThmZDMzNjgyZDY3ODcxZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYTBhNWUyNWI1YTEyMjY0MzVkMmZiNzYzNDE2NTZmODNhNzEwMTgzYWViYjBkMjA0ZGIzOWMwZWMzYmVkZmRiIgogCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9rZXJuZWwvaXB2c2FkbSIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9sa3NjdHAtdG9vbHMvbGtzY3RwLXRvb2xzXzEuMC4xOC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbGtzY3RwLXRvb2xzL2xrc2N0cC10b29sc18xLjAuMTguYmIKaW5kZXggNzBjZWE2Yy4uM2NhYmM0ZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9sa3NjdHAtdG9vbHMvbGtzY3RwLXRvb2xzXzEuMC4xOC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L2xrc2N0cC10b29scy9sa3NjdHAtdG9vbHNfMS4wLjE4LmJiCkBAIC02NSw1ICs2NSw2IEBACiAKIEZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS8qIgogCitSUkVDT01NRU5EU18ke1BOfSArPSAia2VybmVsLW1vZHVsZS1zY3RwIgogUlJFQ09NTUVORFNfJHtQTn0tdXRpbHMgKz0gImtlcm5lbC1tb2R1bGUtc2N0cCIKIFJSRUNPTU1FTkRTXyR7UE59LXB0ZXN0ICs9ICJrZXJuZWwtbW9kdWxlLXNjdHAiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L21lbWNhY2hlZC9tZW1jYWNoZWRfMS41LjEwLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9tZW1jYWNoZWQvbWVtY2FjaGVkXzEuNS4yMC5iYgpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L21lbWNhY2hlZC9tZW1jYWNoZWRfMS41LjEwLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L21lbWNhY2hlZC9tZW1jYWNoZWRfMS41LjIwLmJiCmluZGV4IGQyY2FmYzkuLjM3YTc3YzMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbWVtY2FjaGVkL21lbWNhY2hlZF8xLjUuMTAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9tZW1jYWNoZWQvbWVtY2FjaGVkXzEuNS4yMC5iYgpAQCAtMjIsOCArMjIsOCBAQAogU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1lbWNhY2hlZC5vcmcvZmlsZXMvJHtCUH0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL21lbWNhY2hlZC1hZGQtaHVnZXRsYmZzLWNoZWNrLnBhdGNoIFwKICAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjg0NjI2MTZiNTU0MTgzYTc1ODQ1YjAzYzU2ODM3Y2NhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ5NGMwNjBkYmQ5NmQ1NDZjNzRhYjg1YTNjYzM5ODRkMDA5YjQ0MjM3NjdhYzMzZTA1ZGQyMzQwYzAxZjFjNGIiCitTUkNfVVJJW21kNXN1bV0gPSAiNGI2NDI5NmVhMGVlY2NkZWU5MTY4YzAzNWUwNDg4YWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2ZkN2IwMjNhOWNlZmU3YWU4YTY3MTg0ZjUxZDg0MWRiYmY5Nzk5NGVkMGU4YTU1ZTMxZWUwOTIzMjBlYTFlNCIKIAogIyBzZXQgdGhlIHNhbWUgQ09NUEFUSUJMRV9IT1NUIGFzIGxpYmh1Z2V0bGJmcwogQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NHxwb3dlcnBjfHBvd2VycGM2NHxhcm0pLiotbGludXgnCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L25ldGNhdC9uZXRjYXQvZ2V0dGV4dC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbmV0Y2F0L25ldGNhdC9nZXR0ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZTVmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L25ldGNhdC9uZXRjYXQvZ2V0dGV4dC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitGaXggYnVpbGQgd2l0aCBnZXR0ZXh0IDAuMjAueAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDksNyArNDksNyBAQCBBQ19TVUJTVChhbGxfbGlicmFyaWVzKQorIGRubCBJMThuIHN1cHBvcnQKKyBBTExfTElOR1VBUz0iaXQgc2siCisgQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSwgbmVlZC1uZ2V0dGV4dCkKKy1BTV9JTlRMX1NVQkRJUgorKyNBTV9JTlRMX1NVQkRJUgorIAorIGRubCBmaW5kIHJlc29sdmVyIGZ1bmN0aW9ucyBhbmQgdGhlIHNvY2tldCBsaWJyYXJ5IG9uIHNvbWUgYnJva2VuIE9TCisgQUNfTEJMX0xJQlJBUllfTkVUCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L25ldGNhdC9uZXRjYXRfMC43LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L25ldGNhdC9uZXRjYXRfMC43LjEuYmIKaW5kZXggZDk2MWFmNS4uMTRkNzQzZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9uZXRjYXQvbmV0Y2F0XzAuNy4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbmV0Y2F0L25ldGNhdF8wLjcuMS5iYgpAQCAtOCw2ICs4LDcgQEAKICAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9jb25mX21hY3Jvcy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9uZXRjYXQtbG9jYWxlX2gucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vbWFrZS1uZXRjYXRfZmxhZ19jb3VudF93b3JrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dldHRleHQucGF0Y2ggXAogIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiMGEyOWVmZjE3MzZkZGI1ZWZmZDBiMWVjMWY2ZmUwZWYiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L25ldHBlcmYvbmV0cGVyZl9naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L25ldHBlcmYvbmV0cGVyZl9naXQuYmIKaW5kZXggODkyMWVhNy4uZjFmNjJkZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9uZXRwZXJmL25ldHBlcmZfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbmV0cGVyZi9uZXRwZXJmX2dpdC5iYgpAQCAtMzEsNiArMzEsOCBAQAogCiBQQUNLQUdFQ09ORklHID8/PSAiIgogUEFDS0FHRUNPTkZJR1tzY3RwXSA9ICItLWVuYWJsZS1zY3RwLC0tZGlzYWJsZS1zY3RwLGxrc2N0cC10b29scywiCitQQUNLQUdFQ09ORklHW2ludGVydmFsc10gPSAiLS1lbmFibGUtaW50ZXJ2YWxzLC0tZGlzYWJsZS1pbnRlcnZhbHMsLCIKK1BBQ0tBR0VDT05GSUdbaGlzdG9ncmFtXSA9ICItLWVuYWJsZS1oaXN0b2dyYW0sLS1kaXNhYmxlLWhpc3RvZ3JhbSwsIgogCiAjIGF1dG90b29scy5iYmNsYXNzIGF0dGVuZHMgdG8gaW5jbHVkZSBtNCBmaWxlcyB3aXRoIHBhdGggZGVwdGggPD0gMiBieQogIyAiZmluZCAke1N9IC1tYXhkZXB0aCAyIC1uYW1lIFwqLm00Iiwgc28gbW92ZSBtNCBmaWxlcyBmcm9tIG00L200LgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9uZ2h0dHAyL25naHR0cDJfMS4zOS4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9uZ2h0dHAyL25naHR0cDJfMS40MC4wLmJiCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbmdodHRwMi9uZ2h0dHAyXzEuMzkuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9uZ2h0dHAyL25naHR0cDJfMS40MC4wLmJiCmluZGV4IGMyN2FmZGIuLmYzN2U5YjcgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbmdodHRwMi9uZ2h0dHAyXzEuMzkuMi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L25naHR0cDIvbmdodHRwMl8xLjQwLjAuYmIKQEAgLTExLDggKzExLDggQEAKICAgICBodHRwczovL2dpdGh1Yi5jb20vbmdodHRwMi9uZ2h0dHAyL3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BWfS9uZ2h0dHAyLSR7UFZ9LnRhci54eiBcCiAgICAgZmlsZTovLzAwMDEtZmV0Y2gtb2NzcC1yZXNwb25zZS11c2UtcHl0aG9uMy5wYXRjaCBcCiAiCi1TUkNfVVJJW21kNXN1bV0gPSAiZGU1MmNkNmI1ODdiNzY0ODYzNDY3NDU1MTQ5NzI5OTUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTJkMjE2NDUwYWJkMmJlYWY0ZTIwMGMxNjg5NTc5NjhlODlkNjAyY2E0MTE5MzM4YjlkN2FiMDU5ZmQ0Y2U4YiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZDFhNmI5Njc2MDI1NGU0ZGQxNDJkNzE3NmU4ZmI3YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwOWZjNDNkNDI4ZmYyMzcxMzg3MzNjNzM3YjI5ZmIxYTdlNDlkNDlkZTA2ZDJlZGJlZDNiYzRjZGNlZTY5MDczIgogCiBpbmhlcml0IGNtYWtlIG1hbnBhZ2VzIHB5dGhvbm5hdGl2ZQogUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9udHAvbnRwL250cC5jb25mIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9udHAvbnRwL250cC5jb25mCmluZGV4IDY3NmUxODYuLmI1OTAwMzAgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbnRwL250cC9udHAuY29uZgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L250cC9udHAvbnRwLmNvbmYKQEAgLTE0LDQgKzE0LDggQEAKIHNlcnZlciAxMjcuMTI3LjEuMAogZnVkZ2UgMTI3LjEyNy4xLjAgc3RyYXR1bSAxNAogIyBEZWZpbmluZyBhIGRlZmF1bHQgc2VjdXJpdHkgc2V0dGluZwotcmVzdHJpY3QgZGVmYXVsdAorcmVzdHJpY3QgLTQgZGVmYXVsdCBub3RyYXAgbm9tb2RpZnkgbm9wZWVyIG5vcXVlcnkKK3Jlc3RyaWN0IC02IGRlZmF1bHQgbm90cmFwIG5vbW9kaWZ5IG5vcGVlciBub3F1ZXJ5CisKK3Jlc3RyaWN0IDEyNy4wLjAuMSAgICAjIGFsbG93IGxvY2FsIGhvc3QKK3Jlc3RyaWN0IDo6MSAgICAgICAgICAjIGFsbG93IGxvY2FsIGhvc3QKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbnRwL250cF80LjIuOHAxMy5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvbnRwL250cF80LjIuOHAxMy5iYgppbmRleCA5YjMyN2JhLi5lOTUwZmFiIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L250cC9udHBfNC4yLjhwMTMuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9udHAvbnRwXzQuMi44cDEzLmJiCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICBybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtsaWJleGVjZGlyfQogfQogCi1QQUNLQUdFUyArPSAibnRwZGF0ZSBzbnRwIG50cHEgJHtQTn0tdGlja2FkaiAke1BOfS11dGlscyIKK1BBQ0tBR0VTICs9ICJudHBkYXRlIHNudHAgbnRwZGMgbnRwcSAke1BOfS10aWNrYWRqICR7UE59LXV0aWxzIgogIyBOT1RFOiB5b3UgZG9uJ3QgbmVlZCBudHBkYXRlLCB1c2UgIm50cGQgLXEgLWcgLXgiCiAKICMgbnRwIG9yaWdpbmFsbHkgaW5jbHVkZXMgdGlja2Fkai4gSXQncyBzcGxpdCBvZmYgZm9yIGluY2x1c2lvbiBpbiBzbWFsbCBmaXJtd2FyZSBpbWFnZXMgb24gcGxhdGZvcm1zCkBAIC0xMTcsOCArMTE3LDggQEAKIFJQUk9WSURFU18ke1BOfS11dGlscyA9ICIke1BOfS1iaW4iCiBSUkVQTEFDRVNfJHtQTn0tdXRpbHMgPSAiJHtQTn0tYmluIgogUkNPTkZMSUNUU18ke1BOfS11dGlscyA9ICIke1BOfS1iaW4iCi0jIG50cHEgd2FzIHNwbGl0IG91dCBvZiBudHAtdXRpbHMKLVJERVBFTkRTXyR7UE59LXV0aWxzID0gIm50cHEiCisjIG50cGRjIGFuZCBudHBxIHdlcmUgc3BsaXQgb3V0IG9mIG50cC11dGlscworUkRFUEVORFNfJHtQTn0tdXRpbHMgPSAibnRwZGMgbnRwcSIKIAogU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfSBudHBkYXRlIHNudHAiCiBTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibnRwZC5zZXJ2aWNlIgpAQCAtMTUzLDYgKzE1Myw3IEBACiAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGVmYXVsdC9zbnRwIFwKICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zbnRwLnNlcnZpY2UgXAogICAgICAgICAgICAgICIKK0ZJTEVTX250cGRjID0gIiR7c2JpbmRpcn0vbnRwZGMiCiBGSUxFU19udHBxID0gIiR7c2JpbmRpcn0vbnRwcSIKIAogQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vbnRwLmNvbmYiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3JkbWEtY29yZS9yZG1hLWNvcmUvMDAwMS1SZW1vdmUtbWFuLWZpbGVzLXdoaWNoLWNhbnQtYmUtYnVpbHQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3JkbWEtY29yZS9yZG1hLWNvcmUvMDAwMS1SZW1vdmUtbWFuLWZpbGVzLXdoaWNoLWNhbnQtYmUtYnVpbHQucGF0Y2gKaW5kZXggNGI1OTU2MS4uZjE0MzdhMCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlLzAwMDEtUmVtb3ZlLW1hbi1maWxlcy13aGljaC1jYW50LWJlLWJ1aWx0LnBhdGNoCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcmRtYS1jb3JlL3JkbWEtY29yZS8wMDAxLVJlbW92ZS1tYW4tZmlsZXMtd2hpY2gtY2FudC1iZS1idWlsdC5wYXRjaApAQCAtMTQsMTQgKzE0LDY3IEBACiB8ICAgY21ha2VfaW5zdGFsbC5jbWFrZTo0OCAoaW5jbHVkZSkKIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGxpYmlidW1hZC9tYW4vQ01ha2VMaXN0cy50eHQgICAgICB8ICAxIC0KLSBsaWJpYnZlcmJzL21hbi9DTWFrZUxpc3RzLnR4dCAgICAgfCAxNSAtLS0tLS0tLS0tLS0tLS0KLSBwcm92aWRlcnMvbWx4NS9tYW4vQ01ha2VMaXN0cy50eHQgfCAgMSAtCi0gMyBmaWxlcyBjaGFuZ2VkLCAxNyBkZWxldGlvbnMoLSkKIAorVXBkYXRlIGZvciB2ZXJzaW9uIDI2LjEuIFJlbW92ZSBtb3JlIG1hbiBmaWxlcyB3aGljaCBjYW4gbm8gYmUgYnVpbHQuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgaW5maW5pYmFuZC1kaWFncy9tYW4vQ01ha2VMaXN0cy50eHQgfCAzNCAtLS0tLS0tLS0tLS0tLS0tLS0tCisgbGliaWJ1bWFkL21hbi9DTWFrZUxpc3RzLnR4dCAgICAgICAgfCAgMiAtLQorIGxpYmlidmVyYnMvbWFuL0NNYWtlTGlzdHMudHh0ICAgICAgIHwgNTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWJyZG1hY20vbWFuL0NNYWtlTGlzdHMudHh0ICAgICAgICB8ICAyIC0tCisgcHJvdmlkZXJzL2VmYS9tYW4vQ01ha2VMaXN0cy50eHQgICAgfCAgMiAtLQorIHByb3ZpZGVycy9tbHg0L21hbi9DTWFrZUxpc3RzLnR4dCAgIHwgIDEgLQorIHByb3ZpZGVycy9tbHg1L21hbi9DTWFrZUxpc3RzLnR4dCAgIHwgNjUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDcgZmlsZXMgY2hhbmdlZCwgMTU4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaW5maW5pYmFuZC1kaWFncy9tYW4vQ01ha2VMaXN0cy50eHQgYi9pbmZpbmliYW5kLWRpYWdzL21hbi9DTWFrZUxpc3RzLnR4dAoraW5kZXggMWYxZjkxYzkuLjA5NGEzODlmIDEwMDY0NAorLS0tIGEvaW5maW5pYmFuZC1kaWFncy9tYW4vQ01ha2VMaXN0cy50eHQKKysrKyBiL2luZmluaWJhbmQtZGlhZ3MvbWFuL0NNYWtlTGlzdHMudHh0CitAQCAtNDYsNDAgKzQ2LDYgQEAgcmRtYV9yc3RfY29tbW9uKAorICkKKyAKKyByZG1hX21hbl9wYWdlcygKKy0gIGNoZWNrX2xmdF9iYWxhbmNlLjguaW4ucnN0CistICBkdW1wX2Z0cy44LmluLnJzdAorLSAgaWJhZGRyLjguaW4ucnN0CistICBpYmNhY2hlZWRpdC44LmluLnJzdAorLSAgaWJjY2NvbmZpZy44LmluLnJzdAorLSAgaWJjY3F1ZXJ5LjguaW4ucnN0CistICBpYmZpbmRub2Rlc3VzaW5nLjguaW4ucnN0CistICBpYmhvc3RzLjguaW4ucnN0CistICBpYmlkc3ZlcmlmeS44LmluLnJzdAorLSAgaWJsaW5raW5mby44LmluLnJzdAorLSAgaWJuZXRkaXNjb3Zlci44LmluLnJzdAorLSAgaWJub2Rlcy44LmluLnJzdAorLSAgaWJwaW5nLjguaW4ucnN0CistICBpYnBvcnRzdGF0ZS44LmluLnJzdAorLSAgaWJxdWVyeWVycm9ycy44LmluLnJzdAorLSAgaWJyb3V0ZS44LmluLnJzdAorLSAgaWJyb3V0ZXJzLjguaW4ucnN0CistICBpYnN0YXQuOC5pbi5yc3QKKy0gIGlic3RhdHVzLjguaW4ucnN0CistICBpYnN3aXRjaGVzLjguaW4ucnN0CistICBpYnN5c3N0YXQuOC5pbi5yc3QKKy0gIGlidHJhY2VydC44LmluLnJzdAorLSAgaW5maW5pYmFuZC1kaWFncy44LmluLnJzdAorLSAgcGVyZnF1ZXJ5LjguaW4ucnN0CistICBzYXF1ZXJ5LjguaW4ucnN0CistICBzbWluZm8uOC5pbi5yc3QKKy0gIHNtcGR1bXAuOC5pbi5yc3QKKy0gIHNtcHF1ZXJ5LjguaW4ucnN0CistICB2ZW5kc3RhdC44LmluLnJzdAorLSAgKQorLQorLXJkbWFfYWxpYXNfbWFuX3BhZ2VzKAorLSAgZHVtcF9mdHMuOCBkdW1wX2xmdHMuOAorLSAgZHVtcF9mdHMuOCBkdW1wX21mdHMuOAorICAgKQorIAorIGlmIChFTkFCTEVfSUJESUFHU19DT01QQVQpCiBkaWZmIC0tZ2l0IGEvbGliaWJ1bWFkL21hbi9DTWFrZUxpc3RzLnR4dCBiL2xpYmlidW1hZC9tYW4vQ01ha2VMaXN0cy50eHQKLWluZGV4IDE4NTU4NGEwLi5hYzQ1YTRlOSAxMDA2NDQKK2luZGV4IDE4NTU4NGEwLi44NTdhNGI4YiAxMDA2NDQKIC0tLSBhL2xpYmlidW1hZC9tYW4vQ01ha2VMaXN0cy50eHQKICsrKyBiL2xpYmlidW1hZC9tYW4vQ01ha2VMaXN0cy50eHQKIEBAIC0xNSw3ICsxNSw2IEBAIHJkbWFfbWFuX3BhZ2VzKApAQCAtMzIsMTkgKzg1LDM0IEBACiAgICB1bWFkX29wZW5fcG9ydC4zCiAgICB1bWFkX3BvbGwuMwogICAgdW1hZF9yZWN2LjMKK0BAIC0zOCw1ICszNyw0IEBAIHJkbWFfYWxpYXNfbWFuX3BhZ2VzKAorICAgdW1hZF9jbGFzc19zdHIuMyB1bWFkX21ldGhvZF9zdHIuMworICAgdW1hZF9nZXRfY2EuMyB1bWFkX3JlbGVhc2VfY2EuMworICAgdW1hZF9nZXRfcG9ydC4zIHVtYWRfcmVsZWFzZV9wb3J0LjMKKy0gIHVtYWRfaW5pdC4zIHVtYWRfZG9uZS4zCisgICApCiBkaWZmIC0tZ2l0IGEvbGliaWJ2ZXJicy9tYW4vQ01ha2VMaXN0cy50eHQgYi9saWJpYnZlcmJzL21hbi9DTWFrZUxpc3RzLnR4dAotaW5kZXggODZkZDQ5ZGUuLmI1NDY3NWJlIDEwMDY0NAoraW5kZXggZTFkNWVkZjguLjkyYzY4NjExIDEwMDY0NAogLS0tIGEvbGliaWJ2ZXJicy9tYW4vQ01ha2VMaXN0cy50eHQKICsrKyBiL2xpYmlidmVyYnMvbWFuL0NNYWtlTGlzdHMudHh0Ci1AQCAtNSw3ICs1LDYgQEAgcmRtYV9tYW5fcGFnZXMoCitAQCAtMSwyNCArMSwxOCBAQAorIHJkbWFfbWFuX3BhZ2VzKAorLSAgaWJ2X2FkdmlzZV9tci4zLm1kCisgICBpYnZfYWxsb2NfZG0uMworICAgaWJ2X2FsbG9jX213LjMKKy0gIGlidl9hbGxvY19udWxsX21yLjMubWQKKyAgIGlidl9hbGxvY19wYXJlbnRfZG9tYWluLjMKICAgIGlidl9hbGxvY19wZC4zCiAgICBpYnZfYWxsb2NfdGQuMwogICAgaWJ2X2FzeW5jd2F0Y2guMQorLSAgaWJ2X2F0dGFjaF9jb3VudGVyc19wb2ludF9mbG93LjMubWQKIC0gIGlidl9hdHRhY2hfbWNhc3QuMy5tZAogICAgaWJ2X2JpbmRfbXcuMwogICAgaWJ2X2NyZWF0ZV9haC4zCiAgICBpYnZfY3JlYXRlX2FoX2Zyb21fd2MuMwotQEAgLTE0LDcgKzEzLDYgQEAgcmRtYV9tYW5fcGFnZXMoCisgICBpYnZfY3JlYXRlX2NvbXBfY2hhbm5lbC4zCistICBpYnZfY3JlYXRlX2NvdW50ZXJzLjMubWQKKyAgIGlidl9jcmVhdGVfY3EuMwogICAgaWJ2X2NyZWF0ZV9jcV9leC4zCiAgICBpYnZfbW9kaWZ5X2NxLjMKICAgIGlidl9jcmVhdGVfZmxvdy4zCkBAIC01Miw3ICsxMjAsNyBAQAogICAgaWJ2X2NyZWF0ZV9xcC4zCiAgICBpYnZfY3JlYXRlX3FwX2V4LjMKICAgIGlidl9jcmVhdGVfcndxX2luZF90YWJsZS4zCi1AQCAtMjMsMTUgKzIxLDkgQEAgcmRtYV9tYW5fcGFnZXMoCitAQCAtMjcsMTYgKzIxLDggQEAgcmRtYV9tYW5fcGFnZXMoCiAgICBpYnZfY3JlYXRlX3dxLjMKICAgIGlidl9kZXZpY2VzLjEKICAgIGlidl9kZXZpbmZvLjEKQEAgLTYxLDE0ICsxMjksMTUgQEAKICAgIGlidl9nZXRfYXN5bmNfZXZlbnQuMwogICAgaWJ2X2dldF9jcV9ldmVudC4zCiAtICBpYnZfZ2V0X2RldmljZV9ndWlkLjMubWQKLSAgIGlidl9nZXRfZGV2aWNlX2xpc3QuMworLSAgaWJ2X2dldF9kZXZpY2VfbGlzdC4zLm1kCiAtICBpYnZfZ2V0X2RldmljZV9uYW1lLjMubWQKKy0gIGlidl9nZXRfcGtleV9pbmRleC4zLm1kCiAtICBpYnZfZ2V0X3NycV9udW0uMy5tZAogLSAgaWJ2X2luY19ya2V5LjMubWQKICAgIGlidl9tb2RpZnlfcXAuMwogICAgaWJ2X21vZGlmeV9xcF9yYXRlX2xpbWl0LjMKICAgIGlidl9tb2RpZnlfc3JxLjMKLUBAIC00NiwxOSArMzgsMTIgQEAgcmRtYV9tYW5fcGFnZXMoCitAQCAtNTEsMjQgKzM3LDE1IEBAIHJkbWFfbWFuX3BhZ2VzKAogICAgaWJ2X3Bvc3Rfc3JxX3JlY3YuMwogICAgaWJ2X3F1ZXJ5X2RldmljZS4zCiAgICBpYnZfcXVlcnlfZGV2aWNlX2V4LjMKQEAgLTgxLDYgKzE1MCw3IEBACiAtICBpYnZfcmF0ZV90b19tYnBzLjMubWQKIC0gIGlidl9yYXRlX3RvX211bHQuMy5tZAogICAgaWJ2X3JjX3Bpbmdwb25nLjEKKy0gIGlidl9yZWFkX2NvdW50ZXJzLjMubWQKICAgIGlidl9yZWdfbXIuMwogLSAgaWJ2X3JlcV9ub3RpZnlfY3EuMy5tZAogLSAgaWJ2X3JlcmVnX21yLjMubWQKQEAgLTg4LDE2ICsxNTgsMTc1IEBACiAgICBpYnZfc3JxX3Bpbmdwb25nLjEKICAgIGlidl91Y19waW5ncG9uZy4xCiAgICBpYnZfdWRfcGluZ3BvbmcuMQorLSAgaWJ2X3dyX3Bvc3QuMy5tZAorICAgaWJ2X3hzcnFfcGluZ3BvbmcuMQorICAgKQorIHJkbWFfYWxpYXNfbWFuX3BhZ2VzKAorQEAgLTc5LDQ3ICs1NiwxOCBAQCByZG1hX2FsaWFzX21hbl9wYWdlcygKKyAgIGlidl9hbGxvY19tdy4zIGlidl9kZWFsbG9jX213LjMKKyAgIGlidl9hbGxvY19wZC4zIGlidl9kZWFsbG9jX3BkLjMKKyAgIGlidl9hbGxvY190ZC4zIGlidl9kZWFsbG9jX3RkLjMKKy0gIGlidl9hdHRhY2hfbWNhc3QuMyBpYnZfZGV0YWNoX21jYXN0LjMKKyAgIGlidl9jcmVhdGVfYWguMyBpYnZfZGVzdHJveV9haC4zCisgICBpYnZfY3JlYXRlX2FoX2Zyb21fd2MuMyBpYnZfaW5pdF9haF9mcm9tX3djLjMKKyAgIGlidl9jcmVhdGVfY29tcF9jaGFubmVsLjMgaWJ2X2Rlc3Ryb3lfY29tcF9jaGFubmVsLjMKKy0gIGlidl9jcmVhdGVfY291bnRlcnMuMyBpYnZfZGVzdHJveV9jb3VudGVycy4zCisgICBpYnZfY3JlYXRlX2NxLjMgaWJ2X2Rlc3Ryb3lfY3EuMworICAgaWJ2X2NyZWF0ZV9mbG93LjMgaWJ2X2Rlc3Ryb3lfZmxvdy4zCistICBpYnZfY3JlYXRlX2Zsb3dfYWN0aW9uLjMgaWJ2X2Rlc3Ryb3lfZmxvd19hY3Rpb24uMworLSAgaWJ2X2NyZWF0ZV9mbG93X2FjdGlvbi4zIGlidl9tb2RpZnlfZmxvd19hY3Rpb24uMworICAgaWJ2X2NyZWF0ZV9xcC4zIGlidl9kZXN0cm95X3FwLjMKKyAgIGlidl9jcmVhdGVfcndxX2luZF90YWJsZS4zIGlidl9kZXN0cm95X3J3cV9pbmRfdGFibGUuMworICAgaWJ2X2NyZWF0ZV9zcnEuMyBpYnZfZGVzdHJveV9zcnEuMworICAgaWJ2X2NyZWF0ZV93cS4zIGlidl9kZXN0cm95X3dxLjMKKy0gIGlidl9ldmVudF90eXBlX3N0ci4zIGlidl9ub2RlX3R5cGVfc3RyLjMKKy0gIGlidl9ldmVudF90eXBlX3N0ci4zIGlidl9wb3J0X3N0YXRlX3N0ci4zCisgICBpYnZfZ2V0X2FzeW5jX2V2ZW50LjMgaWJ2X2Fja19hc3luY19ldmVudC4zCisgICBpYnZfZ2V0X2NxX2V2ZW50LjMgaWJ2X2Fja19jcV9ldmVudHMuMworLSAgaWJ2X2dldF9kZXZpY2VfbGlzdC4zIGlidl9mcmVlX2RldmljZV9saXN0LjMKKyAgIGlidl9vcGVuX2RldmljZS4zIGlidl9jbG9zZV9kZXZpY2UuMworICAgaWJ2X29wZW5feHJjZC4zIGlidl9jbG9zZV94cmNkLjMKKy0gIGlidl9yYXRlX3RvX21icHMuMyBtYnBzX3RvX2lidl9yYXRlLjMKKy0gIGlidl9yYXRlX3RvX211bHQuMyBtdWx0X3RvX2lidl9yYXRlLjMKKyAgIGlidl9yZWdfbXIuMyBpYnZfZGVyZWdfbXIuMworLSAgaWJ2X3dyX3Bvc3QuMyBpYnZfd3JfYWJvcnQuMworLSAgaWJ2X3dyX3Bvc3QuMyBpYnZfd3JfY29tcGxldGUuMworLSAgaWJ2X3dyX3Bvc3QuMyBpYnZfd3Jfc3RhcnQuMworLSAgaWJ2X3dyX3Bvc3QuMyBpYnZfd3JfYXRvbWljX2NtcF9zd3AuMworLSAgaWJ2X3dyX3Bvc3QuMyBpYnZfd3JfYXRvbWljX2ZldGNoX2FkZC4zCistICBpYnZfd3JfcG9zdC4zIGlidl93cl9iaW5kX213LjMKKy0gIGlidl93cl9wb3N0LjMgaWJ2X3dyX2xvY2FsX2ludi4zCistICBpYnZfd3JfcG9zdC4zIGlidl93cl9yZG1hX3JlYWQuMworLSAgaWJ2X3dyX3Bvc3QuMyBpYnZfd3JfcmRtYV93cml0ZS4zCistICBpYnZfd3JfcG9zdC4zIGlidl93cl9yZG1hX3dyaXRlX2ltbS4zCistICBpYnZfd3JfcG9zdC4zIGlidl93cl9zZW5kLjMKKy0gIGlidl93cl9wb3N0LjMgaWJ2X3dyX3NlbmRfaW1tLjMKKy0gIGlidl93cl9wb3N0LjMgaWJ2X3dyX3NlbmRfaW52LjMKKy0gIGlidl93cl9wb3N0LjMgaWJ2X3dyX3NlbmRfdHNvLjMKKy0gIGlidl93cl9wb3N0LjMgaWJ2X3dyX3NldF9pbmxpbmVfZGF0YS4zCistICBpYnZfd3JfcG9zdC4zIGlidl93cl9zZXRfaW5saW5lX2RhdGFfbGlzdC4zCistICBpYnZfd3JfcG9zdC4zIGlidl93cl9zZXRfc2dlLjMKKy0gIGlidl93cl9wb3N0LjMgaWJ2X3dyX3NldF9zZ2VfbGlzdC4zCistICBpYnZfd3JfcG9zdC4zIGlidl93cl9zZXRfdWRfYWRkci4zCistICBpYnZfd3JfcG9zdC4zIGlidl93cl9zZXRfeHJjX3NycW4uMworICAgKQorZGlmZiAtLWdpdCBhL2xpYnJkbWFjbS9tYW4vQ01ha2VMaXN0cy50eHQgYi9saWJyZG1hY20vbWFuL0NNYWtlTGlzdHMudHh0CitpbmRleCAyZDFlZmJmZi4uZDAxNmM5MjYgMTAwNjQ0CistLS0gYS9saWJyZG1hY20vbWFuL0NNYWtlTGlzdHMudHh0CisrKysgYi9saWJyZG1hY20vbWFuL0NNYWtlTGlzdHMudHh0CitAQCAtMjAsNyArMjAsNiBAQCByZG1hX21hbl9wYWdlcygKKyAgIHJkbWFfZGVzdHJveV9xcC4zCisgICByZG1hX2Rlc3Ryb3lfc3JxLjMKKyAgIHJkbWFfZGlzY29ubmVjdC4zCistICByZG1hX2VzdGFibGlzaC4zLm1kCisgICByZG1hX2V2ZW50X3N0ci4zCisgICByZG1hX2ZyZWVfZGV2aWNlcy4zCisgICByZG1hX2dldF9jbV9ldmVudC4zCitAQCAtMzMsNyArMzIsNiBAQCByZG1hX21hbl9wYWdlcygKKyAgIHJkbWFfZ2V0X3NlbmRfY29tcC4zCisgICByZG1hX2dldF9zcmNfcG9ydC4zCisgICByZG1hX2dldGFkZHJpbmZvLjMKKy0gIHJkbWFfaW5pdF9xcF9hdHRyLjMubWQKKyAgIHJkbWFfam9pbl9tdWx0aWNhc3QuMworICAgcmRtYV9qb2luX211bHRpY2FzdF9leC4zCisgICByZG1hX2xlYXZlX211bHRpY2FzdC4zCitkaWZmIC0tZ2l0IGEvcHJvdmlkZXJzL2VmYS9tYW4vQ01ha2VMaXN0cy50eHQgYi9wcm92aWRlcnMvZWZhL21hbi9DTWFrZUxpc3RzLnR4dAoraW5kZXggZDZhNGY1N2IuLjM3NmYyOTNkIDEwMDY0NAorLS0tIGEvcHJvdmlkZXJzL2VmYS9tYW4vQ01ha2VMaXN0cy50eHQKKysrKyBiL3Byb3ZpZGVycy9lZmEvbWFuL0NNYWtlTGlzdHMudHh0CitAQCAtMSw0ICsxLDIgQEAKKyByZG1hX21hbl9wYWdlcygKKy0gIGVmYWR2X2NyZWF0ZV9kcml2ZXJfcXAuMy5tZAorLSAgZWZhZHYuNy5tZAorICkKK2RpZmYgLS1naXQgYS9wcm92aWRlcnMvbWx4NC9tYW4vQ01ha2VMaXN0cy50eHQgYi9wcm92aWRlcnMvbWx4NC9tYW4vQ01ha2VMaXN0cy50eHQKK2luZGV4IDNkZjc3Y2FmLi45OWE3NTEwMSAxMDA2NDQKKy0tLSBhL3Byb3ZpZGVycy9tbHg0L21hbi9DTWFrZUxpc3RzLnR4dAorKysrIGIvcHJvdmlkZXJzL21seDQvbWFuL0NNYWtlTGlzdHMudHh0CitAQCAtMSw2ICsxLDUgQEAKKyByZG1hX21hbl9wYWdlcygKKyAgIG1seDRkdl9pbml0X29iai4zCisgICBtbHg0ZHZfcXVlcnlfZGV2aWNlLjMKKy0gIG1seDRkdl9zZXRfY29udGV4dF9hdHRyLjMubWQKKyAgIG1seDRkdi43CisgKQogZGlmZiAtLWdpdCBhL3Byb3ZpZGVycy9tbHg1L21hbi9DTWFrZUxpc3RzLnR4dCBiL3Byb3ZpZGVycy9tbHg1L21hbi9DTWFrZUxpc3RzLnR4dAotaW5kZXggY2RjNzExNWUuLjg3NmI2ZmNmIDEwMDY0NAoraW5kZXggMGJkOWViYTEuLjg3NmI2ZmNmIDEwMDY0NAogLS0tIGEvcHJvdmlkZXJzL21seDUvbWFuL0NNYWtlTGlzdHMudHh0CiArKysgYi9wcm92aWRlcnMvbWx4NS9tYW4vQ01ha2VMaXN0cy50eHQKLUBAIC0xLDUgKzEsNCBAQAorQEAgLTEsNzIgKzEsNyBAQAogIHJkbWFfbWFuX3BhZ2VzKAorLSAgbWx4NWR2X2FsbG9jX2RtLjMubWQKKy0gIG1seDVkdl9jcmVhdGVfY3EuMy5tZAorLSAgbWx4NWR2X2NyZWF0ZV9mbG93LjMubWQKKy0gIG1seDVkdl9jcmVhdGVfZmxvd19hY3Rpb25fbW9kaWZ5X2hlYWRlci4zLm1kCistICBtbHg1ZHZfY3JlYXRlX2Zsb3dfYWN0aW9uX3BhY2tldF9yZWZvcm1hdC4zLm1kCistICBtbHg1ZHZfY3JlYXRlX2Zsb3dfbWF0Y2hlci4zLm1kCistICBtbHg1ZHZfY3JlYXRlX21rZXkuMy5tZAorLSAgbWx4NWR2X2NyZWF0ZV9xcC4zLm1kCistICBtbHg1ZHZfZGV2eF9hbGxvY191YXIuMy5tZAorLSAgbWx4NWR2X2RldnhfY3JlYXRlX2NtZF9jb21wLjMubWQKKy0gIG1seDVkdl9kZXZ4X2NyZWF0ZV9ldmVudF9jaGFubmVsLjMubWQKKy0gIG1seDVkdl9kZXZ4X2dldF9ldmVudC4zLm1kCistICBtbHg1ZHZfZGV2eF9vYmpfY3JlYXRlLjMubWQKKy0gIG1seDVkdl9kZXZ4X3FwX21vZGlmeS4zLm1kCistICBtbHg1ZHZfZGV2eF9xdWVyeV9lcW4uMy5tZAorLSAgbWx4NWR2X2Rldnhfc3Vic2NyaWJlX2RldnhfZXZlbnQuMy5tZAorLSAgbWx4NWR2X2RldnhfdW1lbV9yZWcuMy5tZAorLSAgbWx4NWR2X2RyX2Zsb3cuMy5tZAogLSAgbWx4NWR2X2Zsb3dfYWN0aW9uX2VzcC4zLm1kCiAgICBtbHg1ZHZfZ2V0X2Nsb2NrX2luZm8uMwogICAgbWx4NWR2X2luaXRfb2JqLjMKKy0gIG1seDVkdl9pc19zdXBwb3J0ZWQuMy5tZAorLSAgbWx4NWR2X29wZW5fZGV2aWNlLjMubWQKICAgIG1seDVkdl9xdWVyeV9kZXZpY2UuMworICAgbWx4NWR2X3RzX3RvX25zLjMKKy0gIG1seDVkdl93cl9wb3N0LjMubWQKKyAgIG1seDVkdi43CisgKQorLXJkbWFfYWxpYXNfbWFuX3BhZ2VzKAorLSBtbHg1ZHZfY3JlYXRlX21rZXkuMyBtbHg1ZHZfZGVzdHJveV9ta2V5LjMKKy0gbWx4NWR2X2RldnhfYWxsb2NfdWFyLjMgbWx4NWR2X2RldnhfZnJlZV91YXIuMworLSBtbHg1ZHZfZGV2eF9jcmVhdGVfY21kX2NvbXAuMyBtbHg1ZHZfZGV2eF9kZXN0cm95X2NtZF9jb21wLjMKKy0gbWx4NWR2X2RldnhfY3JlYXRlX2V2ZW50X2NoYW5uZWwuMyBtbHg1ZHZfZGV2eF9kZXN0cm95X2V2ZW50X2NoYW5uZWwuMworLSBtbHg1ZHZfZGV2eF9jcmVhdGVfY21kX2NvbXAuMyBtbHg1ZHZfZGV2eF9nZXRfYXN5bmNfY21kX2NvbXAuMworLSBtbHg1ZHZfZGV2eF9vYmpfY3JlYXRlLjMgbWx4NWR2X2RldnhfZ2VuZXJhbF9jbWQuMworLSBtbHg1ZHZfZGV2eF9vYmpfY3JlYXRlLjMgbWx4NWR2X2Rldnhfb2JqX2Rlc3Ryb3kuMworLSBtbHg1ZHZfZGV2eF9vYmpfY3JlYXRlLjMgbWx4NWR2X2Rldnhfb2JqX3F1ZXJ5LjMKKy0gbWx4NWR2X2Rldnhfb2JqX2NyZWF0ZS4zIG1seDVkdl9kZXZ4X29ial9xdWVyeV9hc3luYy4zCistIG1seDVkdl9kZXZ4X29ial9jcmVhdGUuMyBtbHg1ZHZfZGV2eF9vYmpfbW9kaWZ5LjMKKy0gbWx4NWR2X2RldnhfcXBfbW9kaWZ5LjMgbWx4NWR2X2RldnhfcXBfcXVlcnkuMworLSBtbHg1ZHZfZGV2eF9xcF9tb2RpZnkuMyBtbHg1ZHZfZGV2eF9jcV9tb2RpZnkuMworLSBtbHg1ZHZfZGV2eF9xcF9tb2RpZnkuMyBtbHg1ZHZfZGV2eF9jcV9xdWVyeS4zCistIG1seDVkdl9kZXZ4X3FwX21vZGlmeS4zIG1seDVkdl9kZXZ4X3dxX21vZGlmeS4zCistIG1seDVkdl9kZXZ4X3FwX21vZGlmeS4zIG1seDVkdl9kZXZ4X3dxX3F1ZXJ5LjMKKy0gbWx4NWR2X2RldnhfcXBfbW9kaWZ5LjMgbWx4NWR2X2Rldnhfc3JxX21vZGlmeS4zCistIG1seDVkdl9kZXZ4X3FwX21vZGlmeS4zIG1seDVkdl9kZXZ4X3NycV9xdWVyeS4zCistIG1seDVkdl9kZXZ4X3FwX21vZGlmeS4zIG1seDVkdl9kZXZ4X2luZF90YmxfbW9kaWZ5LjMKKy0gbWx4NWR2X2RldnhfcXBfbW9kaWZ5LjMgbWx4NWR2X2RldnhfaW5kX3RibF9xdWVyeS4zCistIG1seDVkdl9kZXZ4X3N1YnNjcmliZV9kZXZ4X2V2ZW50LjMgbWx4NWR2X2Rldnhfc3Vic2NyaWJlX2RldnhfZXZlbnRfZmQuMworLSBtbHg1ZHZfZGV2eF91bWVtX3JlZy4zIG1seDVkdl9kZXZ4X3VtZW1fZGVyZWcuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl9hY3Rpb25fY3JlYXRlX2Rlc3RfdGFibGUuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl9hY3Rpb25fY3JlYXRlX2Rlc3RfaWJ2X3FwLjMKKy0gbWx4NWR2X2RyX2Zsb3cuMyBtbHg1ZHZfZHJfYWN0aW9uX2NyZWF0ZV9kZXN0X3Zwb3J0LjMKKy0gbWx4NWR2X2RyX2Zsb3cuMyBtbHg1ZHZfZHJfYWN0aW9uX2NyZWF0ZV9mbG93X2NvdW50ZXIuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl9hY3Rpb25fY3JlYXRlX2Ryb3AuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl9hY3Rpb25fY3JlYXRlX21vZGlmeV9oZWFkZXIuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl9hY3Rpb25fY3JlYXRlX3BhY2tldF9yZWZvcm1hdC4zCistIG1seDVkdl9kcl9mbG93LjMgbWx4NWR2X2RyX2FjdGlvbl9jcmVhdGVfdGFnLjMKKy0gbWx4NWR2X2RyX2Zsb3cuMyBtbHg1ZHZfZHJfYWN0aW9uX2Rlc3Ryb3kuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl9kb21haW5fY3JlYXRlLjMKKy0gbWx4NWR2X2RyX2Zsb3cuMyBtbHg1ZHZfZHJfZG9tYWluX2Rlc3Ryb3kuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl9kb21haW5fc3luYy4zCistIG1seDVkdl9kcl9mbG93LjMgbWx4NWR2X2RyX21hdGNoZXJfY3JlYXRlLjMKKy0gbWx4NWR2X2RyX2Zsb3cuMyBtbHg1ZHZfZHJfbWF0Y2hlcl9kZXN0cm95LjMKKy0gbWx4NWR2X2RyX2Zsb3cuMyBtbHg1ZHZfZHJfcnVsZV9jcmVhdGUuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl9ydWxlX2Rlc3Ryb3kuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl90YWJsZV9jcmVhdGUuMworLSBtbHg1ZHZfZHJfZmxvdy4zIG1seDVkdl9kcl90YWJsZV9kZXN0cm95LjMKKy0gbWx4NWR2X3dyX3Bvc3QuMyBtbHg1ZHZfd3Jfc2V0X2RjX2FkZHIuMworLSBtbHg1ZHZfd3JfcG9zdC4zIG1seDVkdl9xcF9leF9mcm9tX2lidl9xcF9leC4zCistKQogLS0gCiAyLjE3LjEKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlLzAwMDEtU19JRlNPQ0staXMtZGVmaW5lZC1pbi1ib3RoLWdsaWJjLW11c2wucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3JkbWEtY29yZS9yZG1hLWNvcmUvMDAwMS1TX0lGU09DSy1pcy1kZWZpbmVkLWluLWJvdGgtZ2xpYmMtbXVzbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA0YzliNy4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3JkbWEtY29yZS9yZG1hLWNvcmUvMDAwMS1TX0lGU09DSy1pcy1kZWZpbmVkLWluLWJvdGgtZ2xpYmMtbXVzbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLUZyb20gZjJkZjFkYjExZjNhOTU4MDc3NDMwMGU3MDNiNmY1M2RiY2RiMjhlZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDggSnVuIDIwMTggMjA6MTc6NTcgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gU19JRlNPQ0sgaXMgZGVmaW5lZCBpbiBib3RoIGdsaWJjL211c2wKLQotRml4ZXMKLQotcHJlbG9hZC5jOjExODM6NDY6IGVycm9yOiAnX19TX0lGU09DSycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pOyBkaWQgeW91IG1lYW4gJ1NfSUZTT0NLJz8KLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBsaWJyZG1hY20vcHJlbG9hZC5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvbGlicmRtYWNtL3ByZWxvYWQuYyBiL2xpYnJkbWFjbS9wcmVsb2FkLmMKLWluZGV4IDBmMmFhMjUwLi5kNDZiZWIxYiAxMDA2NDQKLS0tLSBhL2xpYnJkbWFjbS9wcmVsb2FkLmMKLSsrKyBiL2xpYnJkbWFjbS9wcmVsb2FkLmMKLUBAIC0xMTgwLDcgKzExODAsNyBAQCBpbnQgX19meHN0YXQoaW50IHZlciwgaW50IHNvY2tldCwgc3RydWN0IHN0YXQgKmJ1ZikKLSAJaWYgKGZkX2dldChzb2NrZXQsICZmZCkgPT0gZmRfcnNvY2tldCkgewotIAkJcmV0ID0gcmVhbC5meHN0YXQodmVyLCBzb2NrZXQsIGJ1Zik7Ci0gCQlpZiAoIXJldCkKLS0JCQlidWYtPnN0X21vZGUgPSAoYnVmLT5zdF9tb2RlICYgflNfSUZNVCkgfCBfX1NfSUZTT0NLOwotKwkJCWJ1Zi0+c3RfbW9kZSA9IChidWYtPnN0X21vZGUgJiB+U19JRk1UKSB8IFNfSUZTT0NLOwotIAl9IGVsc2UgewotIAkJcmV0ID0gcmVhbC5meHN0YXQodmVyLCBmZCwgYnVmKTsKLSAJfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlLzAwMDEtaW5jbHVkZS1lbmRpYW4uaC1mb3ItaHRvbGUzMi1hbmQtZnJpZW5kcy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcmRtYS1jb3JlL3JkbWEtY29yZS8wMDAxLWluY2x1ZGUtZW5kaWFuLmgtZm9yLWh0b2xlMzItYW5kLWZyaWVuZHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMzM1MjQuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlLzAwMDEtaW5jbHVkZS1lbmRpYW4uaC1mb3ItaHRvbGUzMi1hbmQtZnJpZW5kcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLUZyb20gNjViOWE0N2MwN2JlNDYxMWI0ZmJiY2FmZmYxOTkzMTg2YmNiMDUzNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDEyIEp1biAyMDE4IDE5OjE1OjUyIC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8yXSBpbmNsdWRlIGVuZGlhbi5oIGZvciBodG9sZTMyIGFuZCBmcmllbmRzCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBwcm92aWRlcnMvaG5zL2huc19yb2NlX3UuaCB8IDEgKwotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQotCi1kaWZmIC0tZ2l0IGEvcHJvdmlkZXJzL2hucy9obnNfcm9jZV91LmggYi9wcm92aWRlcnMvaG5zL2huc19yb2NlX3UuaAotaW5kZXggYmQ2NmM2ZTcuLmIwNzQyNGRiIDEwMDY0NAotLS0tIGEvcHJvdmlkZXJzL2hucy9obnNfcm9jZV91LmgKLSsrKyBiL3Byb3ZpZGVycy9obnMvaG5zX3JvY2VfdS5oCi1AQCAtMzQsNiArMzQsNyBAQAotICNkZWZpbmUgX0hOU19ST0NFX1VfSAotIAotICNpbmNsdWRlIDxzdGRkZWYuaD4KLSsjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0gI2luY2x1ZGUgPHV0aWwvY29tcGlsZXIuaD4KLSAKLSAjaW5jbHVkZSA8aW5maW5pYmFuZC9kcml2ZXIuaD4KLS0tIAotMi4xNy4xCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcmRtYS1jb3JlL3JkbWEtY29yZS8wMDAxLWxpYnJkbWFjbS1Vc2Utc2NoZWRfeWllbGQtaW5zdGVhZC1vZi1wdGhyZWFkX3lpZWxkLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlLzAwMDEtbGlicmRtYWNtLVVzZS1zY2hlZF95aWVsZC1pbnN0ZWFkLW9mLXB0aHJlYWRfeWllbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhYmQzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcmRtYS1jb3JlL3JkbWEtY29yZS8wMDAxLWxpYnJkbWFjbS1Vc2Utc2NoZWRfeWllbGQtaW5zdGVhZC1vZi1wdGhyZWFkX3lpZWxkLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNmFjOTU2MmQ3NTZkNDI1OTI5OTRhZWFhYzdhNWU3YjJiYmNlNWNhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE0IERlYyAyMDE5IDE0OjA3OjU3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYnJkbWFjbTogVXNlIHNjaGVkX3lpZWxkIGluc3RlYWQgb2YgcHRocmVhZF95aWVsZAorCitnbGliYyByZWRpcmVjdHMgcHRocmVhZF95aWVsZCB0byBzY2hlZF95aWVsZCBhZGRpdGlvbmFsbHkgd2UgZ2V0IGl0Cit3b3JraW5nIHdpdGggbXVzbCBvbiBsaW51eAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LXJkbWEvcmRtYS1jb3JlL3B1bGwvNjM1XQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYnJkbWFjbS9yc29ja2V0LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJyZG1hY20vcnNvY2tldC5jIGIvbGlicmRtYWNtL3Jzb2NrZXQuYworaW5kZXggODlhZTIxMzkuLjdmYzViMjY2IDEwMDY0NAorLS0tIGEvbGlicmRtYWNtL3Jzb2NrZXQuYworKysrIGIvbGlicmRtYWNtL3Jzb2NrZXQuYworQEAgLTMwMzgsNyArMzAzOCw3IEBAIHN0YXRpYyBpbnQgcnNfcG9sbF9lbnRlcih2b2lkKQorIAlwdGhyZWFkX211dGV4X2xvY2soJm11dCk7CisgCWlmIChzdXNwZW5kcG9sbCkgeworIAkJcHRocmVhZF9tdXRleF91bmxvY2soJm11dCk7CistCQlwdGhyZWFkX3lpZWxkKCk7CisrCQlzY2hlZF95aWVsZCgpOworIAkJcmV0dXJuIC1FQlVTWTsKKyAJfQorIAorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlLzAwMDItUmVtb3ZlLXVudXNlZC1pbmNsdWRlLWZvci1leGVjaW5mby5oLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlLzAwMDItUmVtb3ZlLXVudXNlZC1pbmNsdWRlLWZvci1leGVjaW5mby5oLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDdmOTY0Li4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcmRtYS1jb3JlL3JkbWEtY29yZS8wMDAyLVJlbW92ZS11bnVzZWQtaW5jbHVkZS1mb3ItZXhlY2luZm8uaC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLUZyb20gM2Q5Y2FlMTVjNjljMGIzMjYwYTAyNGFkNWQ2ODAyYThkODU1MTVhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDEyIEp1biAyMDE4IDE5OjE4OjI0IC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0ggMi8yXSBSZW1vdmUgdW51c2VkIGluY2x1ZGUgZm9yIGV4ZWNpbmZvLmgKLQotRml4ZXMgYnVpbGQgb24gbXVzbAotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gcHJvdmlkZXJzL3FlZHIvcWVscl92ZXJicy5jIHwgMSAtCi0gMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3Byb3ZpZGVycy9xZWRyL3FlbHJfdmVyYnMuYyBiL3Byb3ZpZGVycy9xZWRyL3FlbHJfdmVyYnMuYwotaW5kZXggZTNiMDFmMjguLjJlZTFjODMyIDEwMDY0NAotLS0tIGEvcHJvdmlkZXJzL3FlZHIvcWVscl92ZXJicy5jCi0rKysgYi9wcm92aWRlcnMvcWVkci9xZWxyX3ZlcmJzLmMKLUBAIC01NCw3ICs1NCw2IEBACi0gCi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotLSNpbmNsdWRlIDxleGVjaW5mby5oPgotIAotICNkZWZpbmUgUUVMUl9TUUVfRUxFTUVOVF9TSVpFCShzaXplb2Yoc3RydWN0IHJkbWFfc3Ffc2dlKSkKLSAjZGVmaW5lIFFFTFJfUlFFX0VMRU1FTlRfU0laRQkoc2l6ZW9mKHN0cnVjdCByZG1hX3JxX3NnZSkpCi0tLSAKLTIuMTcuMQotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3JkbWEtY29yZS9yZG1hLWNvcmUvMDAwMi1uZWlnaC5jLURvLW5vdC1pbmNsdWRlLW5ldC1pZl9wYWNrZXQuaC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcmRtYS1jb3JlL3JkbWEtY29yZS8wMDAyLW5laWdoLmMtRG8tbm90LWluY2x1ZGUtbmV0LWlmX3BhY2tldC5oLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODg3ZjIyLi4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcmRtYS1jb3JlL3JkbWEtY29yZS8wMDAyLW5laWdoLmMtRG8tbm90LWluY2x1ZGUtbmV0LWlmX3BhY2tldC5oLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotRnJvbSA4MjQ4NmY3ZTFlZTJhYTA3YTVjMTJjYjM1NzgzNDk5M2FhOGMxZDIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IEZyaSwgOCBKdW4gMjAxOCAyMDoxOToxMyAtMDcwMAotU3ViamVjdDogW1BBVENIXSBuZWlnaC5jOiBEbyBub3QgaW5jbHVkZSBuZXQvaWZfcGFja2V0LmgKLQotVGhpcyBoZWFkZXIgaXMgZ2xpYmMgc3BlY2lmaWMKLQotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBsaWJpYnZlcmJzL25laWdoLmMgfCAxIC0KLSAxIGZpbGUgY2hhbmdlZCwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvbGliaWJ2ZXJicy9uZWlnaC5jIGIvbGliaWJ2ZXJicy9uZWlnaC5jCi1pbmRleCAyMTE3N2RiMC4uY2ZjNTkzYTAgMTAwNjQ0Ci0tLS0gYS9saWJpYnZlcmJzL25laWdoLmMKLSsrKyBiL2xpYmlidmVyYnMvbmVpZ2guYwotQEAgLTIsNyArMiw2IEBACi0gICovCi0gCi0gI2luY2x1ZGUgImNvbmZpZy5oIgotLSNpbmNsdWRlIDxuZXQvaWZfcGFja2V0Lmg+Ci0gI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KLSAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0gI2luY2x1ZGUgPGVuZGlhbi5oPgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlXzE4LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3JkbWEtY29yZS9yZG1hLWNvcmVfMTguMS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkODY0ZC4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3JkbWEtY29yZS9yZG1hLWNvcmVfMTguMS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVNVTU1BUlkgPSAiVXNlcnNwYWNlIHN1cHBvcnQgZm9yIEluZmluaUJhbmQvUkRNQSB2ZXJicyIKLURFU0NSSVBUSU9OID0gIlRoaXMgaXMgdGhlIHVzZXJzcGFjZSBjb21wb25lbnRzIGZvciB0aGUgTGludXggS2VybmVsJ3MgZHJpdmVycyBJbmZpbmliYW5kL1JETUEgc3Vic3lzdGVtLiIKLVNFQ1RJT04gPSAibGlicyIKLQotREVQRU5EUyA9ICJsaWJubCIKLVJERVBFTkRTXyR7UE59ID0gImJhc2ggcGVybCIKLQotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xpbnV4LXJkbWEvcmRtYS1jb3JlLmdpdDticmFuY2g9c3RhYmxlLXYxOCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVNfSUZTT0NLLWlzLWRlZmluZWQtaW4tYm90aC1nbGliYy1tdXNsLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItbmVpZ2guYy1Eby1ub3QtaW5jbHVkZS1uZXQtaWZfcGFja2V0LmgucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1pbmNsdWRlLWVuZGlhbi5oLWZvci1odG9sZTMyLWFuZC1mcmllbmRzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDItUmVtb3ZlLXVudXNlZC1pbmNsdWRlLWZvci1leGVjaW5mby5oLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtUmVtb3ZlLW1hbi1maWxlcy13aGljaC1jYW50LWJlLWJ1aWx0LnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDUkVWID0gIjc4NDRiM2ZiZTUxMjA2MjNkNjNiMjllY2I0M2ViODNhNjExMjk2NTgiCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi0jRGVmYXVsdCBEdWFsIExpY2Vuc2UgaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LXJkbWEvcmRtYS1jb3JlL2Jsb2IvbWFzdGVyL0NPUFlJTkcubWQKLUxJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIHwgR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkJTRF9GQjttZDU9MGVjMThiYWUxYTlkZjkyYzhkNmFlMDFmOTRhMjg5YWUgXAotCQkgICBmaWxlOi8vQ09QWUlORy5HUEwyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKLQotCi1GSUxFU19TT0xJQlNERVYgPSAiIgotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qIgotSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKLQotaW5oZXJpdCBjbWFrZQotCi1PRUNNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSA9ICJCT1RIIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlXzI3LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3JkbWEtY29yZS9yZG1hLWNvcmVfMjcuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjFkNjliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9yZG1hLWNvcmUvcmRtYS1jb3JlXzI3LjAuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2Ugc3VwcG9ydCBmb3IgSW5maW5pQmFuZC9SRE1BIHZlcmJzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBpcyB0aGUgdXNlcnNwYWNlIGNvbXBvbmVudHMgZm9yIHRoZSBMaW51eCBLZXJuZWwncyBkcml2ZXJzIEluZmluaWJhbmQvUkRNQSBzdWJzeXN0ZW0uIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImxpYm5sIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzaCBwZXJsIgorCitCUkFOQ0ggPSAic3RhYmxlLXYke0BkLmdldFZhcignUFYnKS5zcGxpdCgnLicpWzBdfSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9saW51eC1yZG1hL3JkbWEtY29yZS5naXQ7YnJhbmNoPSR7QlJBTkNIfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS1tYW4tZmlsZXMtd2hpY2gtY2FudC1iZS1idWlsdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYnJkbWFjbS1Vc2Utc2NoZWRfeWllbGQtaW5zdGVhZC1vZi1wdGhyZWFkX3lpZWxkLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDUkVWID0gIjg0Y2FmMDM1YWU2MTIzZTIyOTZiNzIwMDZjZDJjZjY5OGM2NWViNDYiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjRGVmYXVsdCBEdWFsIExpY2Vuc2UgaHR0cHM6Ly9naXRodWIuY29tL2xpbnV4LXJkbWEvcmRtYS1jb3JlL2Jsb2IvbWFzdGVyL0NPUFlJTkcubWQKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIHwgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkJTRF9GQjttZDU9MGVjMThiYWUxYTlkZjkyYzhkNmFlMDFmOTRhMjg5YWUgXAorCQkgICBmaWxlOi8vQ09QWUlORy5HUEwyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworRVhUUkFfT0VDTUFLRSA9ICIgXAorICAgIC1EQ01BS0VfSU5TVEFMTF9TWVNURU1EX1NFUlZJQ0VESVI9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfSBcCisgICAgLURDTUFLRV9JTlNUQUxMX1BFUkxESVI9JHtsaWJkaXJ9L3Blcmw1LyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IFwKKyIKKworRklMRVNfU09MSUJTREVWID0gIiIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKiIKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisKK2luaGVyaXQgY21ha2UgY3Bhbi1iYXNlIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiBcCisgICAgc3JwX2RhZW1vbi5zZXJ2aWNlIFwKKyAgICBpd3BtZC5zZXJ2aWNlIFwKKyAgICBpYmFjbS5zb2NrZXQgXAorICAgIHJkbWEtbG9hZC1tb2R1bGVzQC5zZXJ2aWNlIFwKKyAgICBzcnBfZGFlbW9uX3BvcnRALnNlcnZpY2UgXAorICAgIHJkbWEtaHcudGFyZ2V0IFwKKyAgICBpYmFjbS5zZXJ2aWNlIFwKKyIKK1NZU1RFTURfQVVUT19FTkFCTEUgPSAiZGlzYWJsZSIKKworT0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gPSAiQk9USCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcnVsaS9maWxlcy9mbG9hdC1jb252ZXJzaW9uLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9ydWxpL2ZpbGVzL2Zsb2F0LWNvbnZlcnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk5ZjIzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcnVsaS9maWxlcy9mbG9hdC1jb252ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2NsYXJpZnkgdHlwZSBjb252ZXJzaW9uCisKK2ZpeGVzCit8IHJ1bGlfcmFuZC5jOjU0OjQ3OiBlcnJvcjogaW1wbGljaXQgY29udmVyc2lvbiBmcm9tICd1bnNpZ25lZCBpbnQnIHRvICdmbG9hdCcgY2hhbmdlcyB2YWx1ZSBmcm9tIDQyOTQ5NjcyOTUgdG8gNDI5NDk2NzI5NiBbLVdlcnJvciwtV2ltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uXQorfAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0gYS9zcmMvcnVsaV9yYW5kLmMKKysrKyBiL3NyYy9ydWxpX3JhbmQuYworQEAgLTUxLDcgKzUxLDcgQEAgaW50IHJ1bGlfcmFuZF9uZXh0KHJ1bGlfcmFuZF90ICpyYW5kX2N0eAorIAorICAgdSA9IGlzYWFjX3JhbmQoJnJhbmRfY3R4LT5pc2FhY19jdHgpOworIAorLSAgciA9IChpbnQpICgoZmxvYXQpICgxLjAgKyBtYXggLSBtaW4pICogIHUgLyBJU0FBQ19VQjRNQVhWQUwgKyBtaW4pOworKyAgciA9IChpbnQpICgoZmxvYXQpICgxLjAgKyBtYXggLSBtaW4pICogIHUgLyAoZmxvYXQpIChJU0FBQ19VQjRNQVhWQUwgKyBtaW4pKTsKKyAKKyAgIGFzc2VydChtaW4gPD0gcik7CisgICBhc3NlcnQociA8PSBtYXgpOwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9ydWxpL3J1bGlfMC4zNi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvcnVsaS9ydWxpXzAuMzYuYmIKaW5kZXggYjgyYTNkMC4uZjkyMGI1OSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9ydWxpL3J1bGlfMC4zNi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3J1bGkvcnVsaV8wLjM2LmJiCkBAIC0xMiw2ICsxMiw3IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNyYy1ydWxpX2FkZHIuYy1BZGQtbWlzc2luZy1mb3JtYXQtc3RyaW5nLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtcnVsaV9zcnYtTWFyay1wcmV2X2FkZHJfbGlzdF9zaXplLWFzLXVudXNlZC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLU1ha2Utc3BhY2UtZm9yLWZsYWdzLWZyb20tZW52aXJvbm1lbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmxvYXQtY29udmVyc2lvbi5wYXRjaCBcCiAgICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gImU3M2ZiZmRlYWRkZGI2OGE3MDNhNzBjZWE1MjcxNDY4IgpAQCAtMTksNyArMjAsMTAgQEAKIAogQiA9ICIke1N9IgogCi1FWFRSQV9PRU1BS0UgPSAnQ0M9IiR7Q0N9IiBPT1BfQkFTRV9ESVI9IiR7U1RBR0lOR19FWEVDUFJFRklYRElSfSIgSU5TVEFMTF9CQVNFX0RJUj0iJHtEfSR7ZXhlY19wcmVmaXh9IicKK0VYVFJBX09FTUFLRSA9ICdDQz0iJHtDQ30iIE9PUF9CQVNFX0RJUj0iJHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9IiBcCisgICAgICAgICAgICAgICAgSU5TVEFMTF9CQVNFX0RJUj0iJHtEfSR7ZXhlY19wcmVmaXh9IiBcCisgICAgICAgICAgICAgICAgT09QX0xJQl9ESVI9JHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9LyR7YmFzZWxpYn0gXAorICAgICAgICAgICAgICAgIElOU1RBTExfTElCX0RJUj0ke0R9JHtsaWJkaXJ9JwogCiBkb19jb25maWd1cmUoKSB7CiAgICAgdG91Y2ggY29uZmlndXJlLXN0YW1wCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3N0cm9uZ3N3YW4vc3Ryb25nc3dhbl81LjguMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvc3Ryb25nc3dhbi9zdHJvbmdzd2FuXzUuOC4yLmJiCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvc3Ryb25nc3dhbi9zdHJvbmdzd2FuXzUuOC4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3N0cm9uZ3N3YW4vc3Ryb25nc3dhbl81LjguMi5iYgppbmRleCBiNTIxNjMzLi5mMDVkNjk2IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3N0cm9uZ3N3YW4vc3Ryb25nc3dhbl81LjguMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3N0cm9uZ3N3YW4vc3Ryb25nc3dhbl81LjguMi5iYgpAQCAtMTIsOCArMTIsOCBAQAogICAgICAgICAgICBmaWxlOi8vMDAwMS1tZW1vcnkuaC1JbmNsdWRlLXN0ZGludC5oLWZvci11aW50cHRyX3QucGF0Y2ggXAogICAgICAgICAgICAiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI1YTZiOTk4MGNkMWFjNGZhZDNjMjRiNTVlZDk2MGFjOSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkOWFmNzBhY2VhNWMwNTQ5NTJhZDE1ODQ5MTZjMWJmMjMxYjA2NGViNmM4YTk3OTFkY2I2YWU5MGE3Njk5OTBjIgorU1JDX1VSSVttZDVzdW1dID0gImQ5NGVhYzJjYWVkNTFiMGNjNzc2ZTU4ODdiMTBiYWNlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg2OTAwZGRiZTczMzdjOTIzZGFkZjJjODMzOWFlOGVkMmI5MTU4ZTM2OTE3NDU4ODRkMDhhZTUzNDY3NzQzMGUiCiAKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gInN0cm9uZ3N3YW4tKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvc3R1bm5lbC9zdHVubmVsXzUuNTUuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3N0dW5uZWwvc3R1bm5lbF81LjU2LmJiCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvc3R1bm5lbC9zdHVubmVsXzUuNTUuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvc3R1bm5lbC9zdHVubmVsXzUuNTYuYmIKaW5kZXggZGY0NTVkYi4uMzQxMWU1ZCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC9zdHVubmVsL3N0dW5uZWxfNS41NS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3N0dW5uZWwvc3R1bm5lbF81LjU2LmJiCkBAIC02LDcgKzYsNyBAQAogIyBhIGNvbWJpbmVkIHdvcmsgYmFzZWQgb24gc3R1bm5lbC4gVGh1cywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKICMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjb3ZlciB0aGUgd2hvbGUgY29tYmluYXRpb24uCiBMSUNFTlNFID0gIkdQTHYyIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzdhY2IyNDM5OWY1NDBlYTMyM2FjYjAzNjZhZWNkYmUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLm1kO21kNT1kNmQ2MzVkMjkwYmExNzA1ODIxMjU0YTAyNzhmMWVmNyIKIAogREVQRU5EUyA9ICJhdXRvY29uZi1hcmNoaXZlIGxpYm5zbDIgb3BlbnNzbCIKIApAQCAtMTQsOCArMTQsOCBAQAogICAgICAgICAgICBmaWxlOi8vZml4LW9wZW5zc2wtbm8tZGVzLnBhdGNoIFwKICIKIAotU1JDX1VSSVttZDVzdW1dID0gIjdiNDE1OTIwMzRlZGUxMTRlOGM0ZTA1OGZjOGMyMzhiIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwZGU2OWY0MWM1ODM0MjU0OWU3NGM4MjUwMzU1NWE2NDI2OTYxYjI5YWYzZWQ5MmY4NzgxOTI3MjcwNzRjNjIiCitTUkNfVVJJW21kNXN1bV0gPSAiMDFiMGNhOWUwNzFmNTgyZmY4MDNhODVkNWVkNzIxNjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzM4NGJmYjM1NmI5YTg5ZGRmZWU3MGI1Y2E0OTRkMTg3NjA1YmI1MTZiNGZmZjU5N2UxNjdmOTdlMjIzNmIyMiIKIAogaW5oZXJpdCBhdXRvdG9vbHMKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC90aW55cHJveHkvdGlueXByb3h5L3Rpbnlwcm94eS5jb25mIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC90aW55cHJveHkvdGlueXByb3h5L3Rpbnlwcm94eS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTE4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3Rpbnlwcm94eS90aW55cHJveHkvdGlueXByb3h5LmNvbmYKQEAgLTAsMCArMSwzMzAgQEAKKyMjCisjIyB0aW55cHJveHkuY29uZiAtLSB0aW55cHJveHkgZGFlbW9uIGNvbmZpZ3VyYXRpb24gZmlsZQorIyMKKyMjIFRoaXMgZXhhbXBsZSB0aW55cHJveHkuY29uZiBmaWxlIGNvbnRhaW5zIGV4YW1wbGUgc2V0dGluZ3MKKyMjIHdpdGggZXhwbGFuYXRpb25zIGluIGNvbW1lbnRzLiBGb3IgZGVjcmlwdGlvbnMgb2YgYWxsCisjIyBwYXJhbWV0ZXJzLCBzZWUgdGhlIHRpbnByb3h5LmNvbmYoNSkgbWFudWFsIHBhZ2UuCisjIworCisjCisjIFVzZXIvR3JvdXA6IFRoaXMgYWxsb3dzIHlvdSB0byBzZXQgdGhlIHVzZXIgYW5kIGdyb3VwIHRoYXQgd2lsbCBiZQorIyB1c2VkIGZvciB0aW55cHJveHkgYWZ0ZXIgdGhlIGluaXRpYWwgYmluZGluZyB0byB0aGUgcG9ydCBoYXMgYmVlbiBkb25lCisjIGFzIHRoZSByb290IHVzZXIuIEVpdGhlciB0aGUgdXNlciBvciBncm91cCBuYW1lIG9yIHRoZSBVSUQgb3IgR0lECisjIG51bWJlciBtYXkgYmUgdXNlZC4KKyMKK1VzZXIgdGlueXByb3h5CitHcm91cCBub2dyb3VwCisKKyMKKyMgUG9ydDogU3BlY2lmeSB0aGUgcG9ydCB3aGljaCB0aW55cHJveHkgd2lsbCBsaXN0ZW4gb24uICBQbGVhc2Ugbm90ZQorIyB0aGF0IHNob3VsZCB5b3UgY2hvb3NlIHRvIHJ1biBvbiBhIHBvcnQgbG93ZXIgdGhhbiAxMDI0IHlvdSB3aWxsIG5lZWQKKyMgdG8gc3RhcnQgdGlueXByb3h5IHVzaW5nIHJvb3QuCisjCitQb3J0IDg4ODgKKworIworIyBMaXN0ZW46IElmIHlvdSBoYXZlIG11bHRpcGxlIGludGVyZmFjZXMgdGhpcyBhbGxvd3MgeW91IHRvIGJpbmQgdG8KKyMgb25seSBvbmUuIElmIHRoaXMgaXMgY29tbWVudGVkIG91dCwgdGlueXByb3h5IHdpbGwgYmluZCB0byBhbGwKKyMgaW50ZXJmYWNlcyBwcmVzZW50LgorIworI0xpc3RlbiAxOTIuMTY4LjAuMQorCisjCisjIEJpbmQ6IFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIGludGVyZmFjZSB3aWxsIGJlIHVzZWQgZm9yCisjIG91dGdvaW5nIGNvbm5lY3Rpb25zLiAgVGhpcyBpcyB1c2VmdWwgZm9yIG11bHRpLWhvbWUnZCBtYWNoaW5lcyB3aGVyZQorIyB5b3Ugd2FudCBhbGwgdHJhZmZpYyB0byBhcHBlYXIgb3V0Z29pbmcgZnJvbSBvbmUgcGFydGljdWxhciBpbnRlcmZhY2UuCisjCisjQmluZCAxOTIuMTY4LjAuMQorCisjCisjIEJpbmRTYW1lOiBJZiBlbmFibGVkLCB0aW55cHJveHkgd2lsbCBiaW5kIHRoZSBvdXRnb2luZyBjb25uZWN0aW9uIHRvIHRoZQorIyBpcCBhZGRyZXNzIG9mIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uLgorIworI0JpbmRTYW1lIHllcworCisjCisjIFRpbWVvdXQ6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIG9mIGluYWN0aXZpdHkgYSBjb25uZWN0aW9uIGlzCisjIGFsbG93ZWQgdG8gaGF2ZSBiZWZvcmUgaXQgaXMgY2xvc2VkIGJ5IHRpbnlwcm94eS4KKyMKK1RpbWVvdXQgNjAwCisKKyMKKyMgRXJyb3JGaWxlOiBEZWZpbmVzIHRoZSBIVE1MIGZpbGUgdG8gc2VuZCB3aGVuIGEgZ2l2ZW4gSFRUUCBlcnJvcgorIyBvY2N1cnMuICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgbG9jYXRpb24gdG8geW91cgorIyBwYXJ0aWN1bGFyIGluc3RhbGwuICBUaGUgdXN1YWwgbG9jYXRpb25zIHRvIGNoZWNrIGFyZToKKyMgICAvdXNyL2xvY2FsL3NoYXJlL3Rpbnlwcm94eQorIyAgIC91c3Ivc2hhcmUvdGlueXByb3h5CisjICAgL2V0Yy90aW55cHJveHkKKyMKKyNFcnJvckZpbGUgNDA0ICIvdXNyL3NoYXJlL3Rpbnlwcm94eS80MDQuaHRtbCIKKyNFcnJvckZpbGUgNDAwICIvdXNyL3NoYXJlL3Rpbnlwcm94eS80MDAuaHRtbCIKKyNFcnJvckZpbGUgNTAzICIvdXNyL3NoYXJlL3Rpbnlwcm94eS81MDMuaHRtbCIKKyNFcnJvckZpbGUgNDAzICIvdXNyL3NoYXJlL3Rpbnlwcm94eS80MDMuaHRtbCIKKyNFcnJvckZpbGUgNDA4ICIvdXNyL3NoYXJlL3Rpbnlwcm94eS80MDguaHRtbCIKKworIworIyBEZWZhdWx0RXJyb3JGaWxlOiBUaGUgSFRNTCBmaWxlIHRoYXQgZ2V0cyBzZW50IGlmIHRoZXJlIGlzIG5vCisjIEhUTUwgZmlsZSBkZWZpbmVkIHdpdGggYW4gRXJyb3JGaWxlIGtleXdvcmQgZm9yIHRoZSBIVFRQIGVycm9yCisjIHRoYXQgaGFzIG9jY3VyZWQuCisjCitEZWZhdWx0RXJyb3JGaWxlICIvdXNyL3NoYXJlL3Rpbnlwcm94eS9kZWZhdWx0Lmh0bWwiCisKKyMKKyMgU3RhdEhvc3Q6IFRoaXMgY29uZmlndXJlcyB0aGUgaG9zdCBuYW1lIG9yIElQIGFkZHJlc3MgdGhhdCBpcyB0cmVhdGVkCisjIGFzIHRoZSBzdGF0IGhvc3Q6IFdoZW5ldmVyIGEgcmVxdWVzdCBmb3IgdGhpcyBob3N0IGlzIHJlY2VpdmVkLAorIyBUaW55cHJveHkgd2lsbCByZXR1cm4gYW4gaW50ZXJuYWwgc3RhdGlzdGljcyBwYWdlIGluc3RlYWQgb2YKKyMgZm9yd2FyZGluZyB0aGUgcmVxdWVzdCB0byB0aGF0IGhvc3QuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBTdGF0SG9zdCBpcworIyB0aW55cHJveHkuc3RhdHMuCisjCisjU3RhdEhvc3QgInRpbnlwcm94eS5zdGF0cyIKKyMKKworIworIyBTdGF0RmlsZTogVGhlIEhUTUwgZmlsZSB0aGF0IGdldHMgc2VudCB3aGVuIGEgcmVxdWVzdCBpcyBtYWRlCisjIGZvciB0aGUgc3RhdGhvc3QuICBJZiB0aGlzIGZpbGUgZG9lc24ndCBleGlzdCBhIGJhc2ljIHBhZ2UgaXMKKyMgaGFyZGNvZGVkIGluIHRpbnlwcm94eS4KKyMKK1N0YXRGaWxlICIvdXNyL3NoYXJlL3Rpbnlwcm94eS9zdGF0cy5odG1sIgorCisjCisjIExvZ0ZpbGU6IEFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gd2hlcmUgaW5mb3JtYXRpb24gc2hvdWxkCisjIGJlIGxvZ2dlZCB0by4gIElmIHlvdSB3b3VsZCBwcmVmZXIgdG8gbG9nIHRvIHN5c2xvZywgdGhlbiBkaXNhYmxlIHRoaXMKKyMgYW5kIGVuYWJsZSB0aGUgU3lzbG9nIGRpcmVjdGl2ZS4gIFRoZXNlIGRpcmVjdGl2ZXMgYXJlIG11dHVhbGx5CisjIGV4Y2x1c2l2ZS4KKyMKKyNMb2dGaWxlICIvdmFyL2xvZy90aW55cHJveHkvdGlueXByb3h5LmxvZyIKKworIworIyBTeXNsb2c6IFRlbGwgdGlueXByb3h5IHRvIHVzZSBzeXNsb2cgaW5zdGVhZCBvZiBhIGxvZ2ZpbGUuICBUaGlzCisjIG9wdGlvbiBtdXN0IG5vdCBiZSBlbmFibGVkIGlmIHRoZSBMb2dmaWxlIGRpcmVjdGl2ZSBpcyBiZWluZyB1c2VkLgorIyBUaGVzZSB0d28gZGlyZWN0aXZlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorIworI1N5c2xvZyBPbgorCisjCisjIExvZ0xldmVsOiAKKyMKKyMgU2V0IHRoZSBsb2dnaW5nIGxldmVsLiBBbGxvd2VkIHNldHRpbmdzIGFyZToKKyMJQ3JpdGljYWwJKGxlYXN0IHZlcmJvc2UpCisjCUVycm9yCisjCVdhcm5pbmcKKyMJTm90aWNlCisjCUNvbm5lY3QJCSh0byBsb2cgY29ubmVjdGlvbnMgd2l0aG91dCBJbmZvJ3Mgbm9pc2UpCisjCUluZm8JCShtb3N0IHZlcmJvc2UpCisjCisjIFRoZSBMb2dMZXZlbCBsb2dzIGZyb20gdGhlIHNldCBsZXZlbCBhbmQgYWJvdmUuIEZvciBleGFtcGxlLCBpZiB0aGUKKyMgTG9nTGV2ZWwgd2FzIHNldCB0byBXYXJuaW5nLCB0aGVuIGFsbCBsb2cgbWVzc2FnZXMgZnJvbSBXYXJuaW5nIHRvCisjIENyaXRpY2FsIHdvdWxkIGJlIG91dHB1dCwgYnV0IE5vdGljZSBhbmQgYmVsb3cgd291bGQgYmUgc3VwcHJlc3NlZC4KKyMKK0xvZ0xldmVsIEluZm8KKworIworIyBQaWRGaWxlOiBXcml0ZSB0aGUgUElEIG9mIHRoZSBtYWluIHRpbnlwcm94eSB0aHJlYWQgdG8gdGhpcyBmaWxlIHNvIGl0CisjIGNhbiBiZSB1c2VkIGZvciBzaWduYWxsaW5nIHB1cnBvc2VzLgorIworUGlkRmlsZSAiL3Zhci9ydW4vdGlueXByb3h5L3Rpbnlwcm94eS5waWQiCisKKyMKKyMgWFRpbnlwcm94eTogVGVsbCBUaW55cHJveHkgdG8gaW5jbHVkZSB0aGUgWC1UaW55cHJveHkgaGVhZGVyLCB3aGljaAorIyBjb250YWlucyB0aGUgY2xpZW50J3MgSVAgYWRkcmVzcy4KKyMKKyNYVGlueXByb3h5IFllcworCisjCisjIFVwc3RyZWFtOgorIworIyBUdXJucyBvbiB1cHN0cmVhbSBwcm94eSBzdXBwb3J0LgorIworIyBUaGUgdXBzdHJlYW0gcnVsZXMgYWxsb3cgeW91IHRvIHNlbGVjdGl2ZWx5IHJvdXRlIHVwc3RyZWFtIGNvbm5lY3Rpb25zCisjIGJhc2VkIG9uIHRoZSBob3N0L2RvbWFpbiBvZiB0aGUgc2l0ZSBiZWluZyBhY2Nlc3NlZC4KKyMKKyMgRm9yIGV4YW1wbGU6CisjICAjIGNvbm5lY3Rpb24gdG8gdGVzdCBkb21haW4gZ29lcyB0aHJvdWdoIHRlc3Rwcm94eQorIyAgdXBzdHJlYW0gdGVzdHByb3h5OjgwMDggIi50ZXN0LmRvbWFpbi5pbnZhbGlkIgorIyAgdXBzdHJlYW0gdGVzdHByb3h5OjgwMDggIi5vdXJfdGVzdGJlZC5leGFtcGxlLmNvbSIKKyMgIHVwc3RyZWFtIHRlc3Rwcm94eTo4MDA4ICIxOTIuMTY4LjEyOC4wLzI1NS4yNTUuMjU0LjAiCisjCisjICAjIG5vIHVwc3RyZWFtIHByb3h5IGZvciBpbnRlcm5hbCB3ZWJzaXRlcyBhbmQgdW5xdWFsaWZpZWQgaG9zdHMKKyMgIG5vIHVwc3RyZWFtICIuaW50ZXJuYWwuZXhhbXBsZS5jb20iCisjICBubyB1cHN0cmVhbSAid3d3LmV4YW1wbGUuY29tIgorIyAgbm8gdXBzdHJlYW0gIjEwLjAuMC4wLzgiCisjICBubyB1cHN0cmVhbSAiMTkyLjE2OC4wLjAvMjU1LjI1NS4yNTQuMCIKKyMgIG5vIHVwc3RyZWFtICIuIgorIworIyAgIyBjb25uZWN0aW9uIHRvIHRoZXNlIGJveGVzIGdvIHRocm91Z2ggdGhlaXIgRE1aIGZpcmV3YWxscworIyAgdXBzdHJlYW0gY3VzdDFfZmlyZXdhbGw6ODAwOCAidGVzdGJlZF9mb3JfY3VzdDEiCisjICB1cHN0cmVhbSBjdXN0Ml9maXJld2FsbDo4MDA4ICJ0ZXN0YmVkX2Zvcl9jdXN0MiIKKyMKKyMgICMgZGVmYXVsdCB1cHN0cmVhbSBpcyBpbnRlcm5ldCBmaXJld2FsbAorIyAgdXBzdHJlYW0gZmlyZXdhbGwuaW50ZXJuYWwuZXhhbXBsZS5jb206ODAKKyMKKyMgVGhlIExBU1QgbWF0Y2hpbmcgcnVsZSB3aW5zIHRoZSByb3V0ZSBkZWNpc2lvbi4gIEFzIHlvdSBjYW4gc2VlLCB5b3UKKyMgY2FuIHVzZSBhIGhvc3QsIG9yIGEgZG9tYWluOgorIyAgbmFtZSAgICAgbWF0Y2hlcyBob3N0IGV4YWN0bHkKKyMgIC5uYW1lICAgIG1hdGNoZXMgYW55IGhvc3QgaW4gZG9tYWluICJuYW1lIgorIyAgLiAgICAgICAgbWF0Y2hlcyBhbnkgaG9zdCB3aXRoIG5vIGRvbWFpbiAoaW4gJ2VtcHR5JyBkb21haW4pCisjICBJUC9iaXRzICBtYXRjaGVzIG5ldHdvcmsvbWFzaworIyAgSVAvbWFzayAgbWF0Y2hlcyBuZXR3b3JrL21hc2sKKyMKKyNVcHN0cmVhbSBzb21lLnJlbW90ZS5wcm94eTpwb3J0CisKKyMKKyMgTWF4Q2xpZW50czogVGhpcyBpcyB0aGUgYWJzb2x1dGUgaGlnaGVzdCBudW1iZXIgb2YgdGhyZWFkcyB3aGljaCB3aWxsCisjIGJlIGNyZWF0ZWQuIEluIG90aGVyIHdvcmRzLCBvbmx5IE1heENsaWVudHMgbnVtYmVyIG9mIGNsaWVudHMgY2FuIGJlCisjIGNvbm5lY3RlZCBhdCB0aGUgc2FtZSB0aW1lLgorIworTWF4Q2xpZW50cyAxMDAKKworIworIyBNaW5TcGFyZVNlcnZlcnMvTWF4U3BhcmVTZXJ2ZXJzOiBUaGVzZSBzZXR0aW5ncyBzZXQgdGhlIHVwcGVyIGFuZAorIyBsb3dlciBsaW1pdCBmb3IgdGhlIG51bWJlciBvZiBzcGFyZSBzZXJ2ZXJzIHdoaWNoIHNob3VsZCBiZSBhdmFpbGFibGUuCisjCisjIElmIHRoZSBudW1iZXIgb2Ygc3BhcmUgc2VydmVycyBmYWxscyBiZWxvdyBNaW5TcGFyZVNlcnZlcnMgdGhlbiBuZXcKKyMgc2VydmVyIHByb2Nlc3NlcyB3aWxsIGJlIHNwYXduZWQuICBJZiB0aGUgbnVtYmVyIG9mIHNlcnZlcnMgZXhjZWVkcworIyBNYXhTcGFyZVNlcnZlcnMgdGhlbiB0aGUgZXh0cmFzIHdpbGwgYmUga2lsbGVkIG9mZi4KKyMKK01pblNwYXJlU2VydmVycyA1CitNYXhTcGFyZVNlcnZlcnMgMjAKKworIworIyBTdGFydFNlcnZlcnM6IFRoZSBudW1iZXIgb2Ygc2VydmVycyB0byBzdGFydCBpbml0aWFsbHkuCisjCitTdGFydFNlcnZlcnMgMTAKKworIworIyBNYXhSZXF1ZXN0c1BlckNoaWxkOiBUaGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGEgdGhyZWFkIHdpbGwgaGFuZGxlCisjIGJlZm9yZSBpdCBpcyBraWxsZWQuIEluIHByYWN0aXNlIHRoaXMgc2hvdWxkIGJlIHNldCB0byAwLCB3aGljaAorIyBkaXNhYmxlcyB0aHJlYWQgcmVhcGluZy4gSWYgeW91IGRvIG5vdGljZSBwcm9ibGVtcyB3aXRoIG1lbW9yeQorIyBsZWFrYWdlLCB0aGVuIHNldCB0aGlzIHRvIHNvbWV0aGluZyBsaWtlIDEwMDAwLgorIworTWF4UmVxdWVzdHNQZXJDaGlsZCAwCisKKyMKKyMgQWxsb3c6IEN1c3RvbWl6YXRpb24gb2YgYXV0aG9yaXphdGlvbiBjb250cm9scy4gSWYgdGhlcmUgYXJlIGFueQorIyBhY2Nlc3MgY29udHJvbCBrZXl3b3JkcyB0aGVuIHRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byBERU5ZLiBPdGhlcndpc2UsCisjIHRoZSBkZWZhdWx0IGFjdGlvbiBpcyBBTExPVy4KKyMKKyMgVGhlIG9yZGVyIG9mIHRoZSBjb250cm9scyBhcmUgaW1wb3J0YW50LiBBbGwgaW5jb21pbmcgY29ubmVjdGlvbnMgYXJlCisjIHRlc3RlZCBhZ2FpbnN0IHRoZSBjb250cm9scyBiYXNlZCBvbiBvcmRlci4KKyMKK0FsbG93IDEyNy4wLjAuMQorCisjCisjIEFkZEhlYWRlcjogQWRkcyB0aGUgc3BlY2lmaWVkIGhlYWRlcnMgdG8gb3V0Z29pbmcgSFRUUCByZXF1ZXN0cyB0aGF0CisjIFRpbnlwcm94eSBtYWtlcy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgbm90IHdvcmsgZm9yIEhUVFBTCisjIHRyYWZmaWMsIGFzIFRpbnlwcm94eSBoYXMgbm8gY29udHJvbCBvdmVyIHdoYXQgaGVhZGVycyBhcmUgZXhjaGFuZ2VkLgorIworI0FkZEhlYWRlciAiWC1NeS1IZWFkZXIiICJQb3dlcmVkIGJ5IFRpbnlwcm94eSIKKworIworIyBWaWFQcm94eU5hbWU6IFRoZSAiVmlhIiBoZWFkZXIgaXMgcmVxdWlyZWQgYnkgdGhlIEhUVFAgUkZDLCBidXQgdXNpbmcKKyMgdGhlIHJlYWwgaG9zdCBuYW1lIGlzIGEgc2VjdXJpdHkgY29uY2Vybi4gIElmIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlCisjIGlzIGVuYWJsZWQsIHRoZSBzdHJpbmcgc3VwcGxpZWQgd2lsbCBiZSB1c2VkIGFzIHRoZSBob3N0IG5hbWUgaW4gdGhlCisjIFZpYSBoZWFkZXI7IG90aGVyd2lzZSwgdGhlIHNlcnZlcidzIGhvc3QgbmFtZSB3aWxsIGJlIHVzZWQuCisjCitWaWFQcm94eU5hbWUgInRpbnlwcm94eSIKKworIworIyBEaXNhYmxlVmlhSGVhZGVyOiBXaGVuIHRoaXMgaXMgc2V0IHRvIHllcywgVGlueXByb3h5IGRvZXMgTk9UIGFkZAorIyB0aGUgVmlhIGhlYWRlciB0byB0aGUgcmVxdWVzdHMuIFRoaXMgdmlydHVhbGx5IHB1dHMgVGlueXByb3h5IGludG8KKyMgc3RlYWx0aCBtb2RlLiBOb3RlIHRoYXQgUkZDIDI2MTYgcmVxdWlyZXMgcHJveGllcyB0byBzZXQgdGhlIFZpYQorIyBoZWFkZXIsIHNvIGJ5IGVuYWJsaW5nIHRoaXMgb3B0aW9uLCB5b3UgYnJlYWsgY29tcGxpYW5jZS4KKyMgRG9uJ3QgZGlzYWJsZSB0aGUgVmlhIGhlYWRlciB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisjCisjRGlzYWJsZVZpYUhlYWRlciBZZXMKKworIworIyBGaWx0ZXI6IFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsdGVyIGZpbGUuCisjCisjRmlsdGVyICIvZXRjL2ZpbHRlciIKKworIworIyBGaWx0ZXJVUkxzOiBGaWx0ZXIgYmFzZWQgb24gVVJMcyByYXRoZXIgdGhhbiBkb21haW5zLgorIworI0ZpbHRlclVSTHMgT24KKworIworIyBGaWx0ZXJFeHRlbmRlZDogVXNlIFBPU0lYIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgcmF0aGVyIHRoYW4KKyMgYmFzaWMuCisjCisjRmlsdGVyRXh0ZW5kZWQgT24KKworIworIyBGaWx0ZXJDYXNlU2Vuc2l0aXZlOiBVc2UgY2FzZSBzZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9ucy4KKyMKKyNGaWx0ZXJDYXNlU2Vuc2l0aXZlIE9uCisKKyMKKyMgRmlsdGVyRGVmYXVsdERlbnk6IENoYW5nZSB0aGUgZGVmYXVsdCBwb2xpY3kgb2YgdGhlIGZpbHRlcmluZyBzeXN0ZW0uCisjIElmIHRoaXMgZGlyZWN0aXZlIGlzIGNvbW1lbnRlZCBvdXQsIG9yIGlzIHNldCB0byAiTm8iIHRoZW4gdGhlIGRlZmF1bHQKKyMgcG9saWN5IGlzIHRvIGFsbG93IGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90IHNwZWNpZmljYWxseSBkZW5pZWQgYnkgdGhlCisjIGZpbHRlciBmaWxlLgorIworIyBIb3dldmVyLCBieSBzZXR0aW5nIHRoaXMgZGlyZWN0aXZlIHRvICJZZXMiIHRoZSBkZWZhdWx0IHBvbGljeSBiZWNvbWVzCisjIHRvIGRlbnkgZXZlcnl0aGluZyB3aGljaCBpcyBfbm90XyBzcGVjaWZpY2FsbHkgYWxsb3dlZCBieSB0aGUgZmlsdGVyCisjIGZpbGUuCisjCisjRmlsdGVyRGVmYXVsdERlbnkgWWVzCisKKyMKKyMgQW5vbnltb3VzOiBJZiBhbiBBbm9ueW1vdXMga2V5d29yZCBpcyBwcmVzZW50LCB0aGVuIGFub255bW91cyBwcm94eWluZworIyBpcyBlbmFibGVkLiAgVGhlIGhlYWRlcnMgbGlzdGVkIGFyZSBhbGxvd2VkIHRocm91Z2gsIHdoaWxlIGFsbCBvdGhlcnMKKyMgYXJlIGRlbmllZC4gSWYgbm8gQW5vbnltb3VzIGtleXdvcmQgaXMgcHJlc2VudCwgdGhlbiBhbGwgaGVhZGVycyBhcmUKKyMgYWxsb3dlZCB0aHJvdWdoLiAgWW91IG11c3QgaW5jbHVkZSBxdW90ZXMgYXJvdW5kIHRoZSBoZWFkZXJzLgorIworIyBNb3N0IHNpdGVzIHJlcXVpcmUgY29va2llcyB0byBiZSBlbmFibGVkIGZvciB0aGVtIHRvIHdvcmsgY29ycmVjdGx5LCBzbworIyB5b3Ugd2lsbCBuZWVkIHRvIGFsbG93IENvb2tpZXMgdGhyb3VnaCBpZiB5b3UgYWNjZXNzIHRob3NlIHNpdGVzLgorIworI0Fub255bW91cyAiSG9zdCIKKyNBbm9ueW1vdXMgIkF1dGhvcml6YXRpb24iCisjQW5vbnltb3VzICJDb29raWUiCisKKyMKKyMgQ29ubmVjdFBvcnQ6IFRoaXMgaXMgYSBsaXN0IG9mIHBvcnRzIGFsbG93ZWQgYnkgdGlueXByb3h5IHdoZW4gdGhlCisjIENPTk5FQ1QgbWV0aG9kIGlzIHVzZWQuICBUbyBkaXNhYmxlIHRoZSBDT05ORUNUIG1ldGhvZCBhbHRvZ2V0aGVyLCBzZXQKKyMgdGhlIHZhbHVlIHRvIDAuICBJZiBubyBDb25uZWN0UG9ydCBsaW5lIGlzIGZvdW5kLCBhbGwgcG9ydHMgYXJlCisjIGFsbG93ZWQgKHdoaWNoIGlzIG5vdCB2ZXJ5IHNlY3VyZS4pCisjCisjIFRoZSBmb2xsb3dpbmcgdHdvIHBvcnRzIGFyZSB1c2VkIGJ5IFNTTC4KKyMKK0Nvbm5lY3RQb3J0IDQ0MworQ29ubmVjdFBvcnQgNTYzCisKKyMKKyMgQ29uZmlndXJlIG9uZSBvciBtb3JlIFJldmVyc2VQYXRoIGRpcmVjdGl2ZXMgdG8gZW5hYmxlIHJldmVyc2UgcHJveHkKKyMgc3VwcG9ydC4gV2l0aCByZXZlcnNlIHByb3h5aW5nIGl0J3MgcG9zc2libGUgdG8gbWFrZSBhIG51bWJlciBvZgorIyBzaXRlcyBhcHBlYXIgYXMgaWYgdGhleSB3ZXJlIHBhcnQgb2YgYSBzaW5nbGUgc2l0ZS4KKyMKKyMgSWYgeW91IHVuY29tbWVudCB0aGUgZm9sbG93aW5nIHR3byBkaXJlY3RpdmVzIGFuZCBydW4gdGlueXByb3h5CisjIG9uIHlvdXIgb3duIGNvbXB1dGVyIGF0IHBvcnQgODg4OCwgeW91IGNhbiBhY2Nlc3MgR29vZ2xlIHVzaW5nCisjIGh0dHA6Ly9sb2NhbGhvc3Q6ODg4OC9nb29nbGUvIGFuZCBXaXJlZCBOZXdzIHVzaW5nCisjIGh0dHA6Ly9sb2NhbGhvc3Q6ODg4OC93aXJlZC9uZXdzLy4gTmVpdGhlciB3aWxsIGFjdHVhbGx5IHdvcmsKKyMgdW50aWwgeW91IHVuY29tbWVudCBSZXZlcnNlTWFnaWMgYXMgdGhleSB1c2UgYWJzb2x1dGUgbGlua2luZy4KKyMKKyNSZXZlcnNlUGF0aCAiL2dvb2dsZS8iCSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIgorI1JldmVyc2VQYXRoICIvd2lyZWQvIgkiaHR0cDovL3d3dy53aXJlZC5jb20vIgorCisjCisjIFdoZW4gdXNpbmcgdGlueXByb3h5IGFzIGEgcmV2ZXJzZSBwcm94eSwgaXQgaXMgU1RST05HTFkgcmVjb21tZW5kZWQKKyMgdGhhdCB0aGUgbm9ybWFsIHByb3h5IGlzIHR1cm5lZCBvZmYgYnkgdW5jb21tZW50aW5nIHRoZSBuZXh0IGRpcmVjdGl2ZS4KKyMKKyNSZXZlcnNlT25seSBZZXMKKworIworIyBVc2UgYSBjb29raWUgdG8gdHJhY2sgcmV2ZXJzZSBwcm94eSBtYXBwaW5ncy4gSWYgeW91IG5lZWQgdG8gcmV2ZXJzZQorIyBwcm94eSBzaXRlcyB3aGljaCBoYXZlIGFic29sdXRlIGxpbmtzIHlvdSBtdXN0IHVuY29tbWVudCB0aGlzLgorIworI1JldmVyc2VNYWdpYyBZZXMKKworIworIyBUaGUgVVJMIHRoYXQncyB1c2VkIHRvIGFjY2VzcyB0aGlzIHJldmVyc2UgcHJveHkuIFRoZSBVUkwgaXMgdXNlZCB0bworIyByZXdyaXRlIEhUVFAgcmVkaXJlY3RzIHNvIHRoYXQgdGhleSB3b24ndCBlc2NhcGUgdGhlIHByb3h5LiBJZiB5b3UKKyMgaGF2ZSBhIGNoYWluIG9mIHJldmVyc2UgcHJveGllcywgeW91J2xsIG5lZWQgdG8gcHV0IHRoZSBvdXRlcm1vc3QKKyMgVVJMIGhlcmUgKHRoZSBhZGRyZXNzIHdoaWNoIHRoZSBlbmQgdXNlciB0eXBlcyBpbnRvIGhpcy9oZXIgYnJvd3NlcikuCisjCisjIElmIG5vdCBzZXQgdGhlbiBubyByZXdyaXRpbmcgb2NjdXJzLgorIworI1JldmVyc2VCYXNlVVJMICJodHRwOi8vbG9jYWxob3N0Ojg4ODgvIgorCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC90aW55cHJveHkvdGlueXByb3h5L3Rpbnlwcm94eS5zZXJ2aWNlIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC90aW55cHJveHkvdGlueXByb3h5L3Rpbnlwcm94eS5zZXJ2aWNlCmluZGV4IGRmNDI3NDUuLjc4ZGY0MzcgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvdGlueXByb3h5L3Rpbnlwcm94eS90aW55cHJveHkuc2VydmljZQorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3Rpbnlwcm94eS90aW55cHJveHkvdGlueXByb3h5LnNlcnZpY2UKQEAgLTMsMTIgKzMsMTIgQEAKIFJlcXVpcmVzTW91bnRzRm9yPS92YXIKIAogW1NlcnZpY2VdCi1Hcm91cD10aW55cHJveHkKIEV4ZWNTdGFydFByZT0vYmluL21rZGlyIC1wIC92YXIvbG9nL3Rpbnlwcm94eQotRXhlY1N0YXJ0UHJlPS9iaW4vY2hvd24gLVIgbm9ib2R5LnRpbnlwcm94eSAvdmFyL2xvZy90aW55cHJveHkKK0V4ZWNTdGFydFByZT0vYmluL2Nob3duIC1SIHRpbnlwcm94eS5ub2dyb3VwIC92YXIvbG9nL3Rpbnlwcm94eQogRXhlY1N0YXJ0UHJlPS9iaW4vbWtkaXIgLXAgL3Zhci9ydW4vdGlueXByb3h5Ci1FeGVjU3RhcnRQcmU9L2Jpbi9jaG93biAtUiBub2JvZHkudGlueXByb3h5IC92YXIvcnVuL3Rpbnlwcm94eQorRXhlY1N0YXJ0UHJlPS9iaW4vY2hvd24gLVIgdGlueXByb3h5Lm5vZ3JvdXAgL3Zhci9ydW4vdGlueXByb3h5CiBFeGVjU3RhcnQ9L3Vzci9iaW4vdGlueXByb3h5IC1kCitQSURGaWxlPS92YXIvcnVuL3Rpbnlwcm94eS90aW55cHJveHkucGlkCiAKIFtJbnN0YWxsXQogV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvdGlueXByb3h5L3Rpbnlwcm94eV8xLjEwLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3Rpbnlwcm94eS90aW55cHJveHlfMS4xMC4wLmJiCmluZGV4IDE0NGRjZjMuLjdkOTdmNTIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvdGlueXByb3h5L3Rpbnlwcm94eV8xLjEwLjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC90aW55cHJveHkvdGlueXByb3h5XzEuMTAuMC5iYgpAQCAtNCw4ICs0LDEwIEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKIAogU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vJHtCUE59LyR7QlBOfS9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS8ke0JQfS50YXIuZ3ogXAotCQkgICBmaWxlOi8vZGlzYWJsZS1kb2N1bWVudGF0aW9uLnBhdGNoIFwKLQkJICAgZmlsZTovL3Rpbnlwcm94eS5zZXJ2aWNlIgorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1kb2N1bWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Rpbnlwcm94eS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3Rpbnlwcm94eS5jb25mIFwKKyAgICAgICAgICAgIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNDIzMDQ3YzhkYzUzYTE1ZTE5Zjc4ZTIzODE5ODU0OWMiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjAyMDk1NWU2YTBlZjBlZjg5OGFkNWJiMTdhNDQ4YzQ3ZjllNGMwMDNjNDY0YjRhZTdjNGRiYTA2MzI3MjA1NSIKQEAgLTIzLDcgKzI1LDcgQEAKICNVc2VyIHNwZWNpZmljCiBVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgogVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWhvbWUgL2Rldi9udWxsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLS1uby11c2VyLWdyb3VwIC0tZ2lkIG5vZ3JvdXAgdGlueXBveHkiCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tdXNlci1ncm91cCAtLWdpZCBub2dyb3VwIHRpbnlwcm94eSIKIAogU1lTVEVNRF9QQUNLQUdFUyArPSAiJHtCUE59IgogU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInRpbnlwcm94eS5zZXJ2aWNlIgpAQCAtMzQsNCArMzYsNSBAQAogCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9CiAJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rpbnlwcm94eS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfc3lzdGVtX3VuaXRkaXJ9CiAJZmkKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90aW55cHJveHkuY29uZiAke0R9JHtzeXNjb25mZGlyfS90aW55cHJveHkuY29uZgogfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC93aXJlc2hhcmsvd2lyZXNoYXJrXzMuMC42LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC93aXJlc2hhcmsvd2lyZXNoYXJrXzMuMi4wLmJiCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvd2lyZXNoYXJrL3dpcmVzaGFya18zLjAuNi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1uZXR3b3JraW5nL3JlY2lwZXMtc3VwcG9ydC93aXJlc2hhcmsvd2lyZXNoYXJrXzMuMi4wLmJiCmluZGV4IGNjYWEwYzkuLmRmNDZiMzMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtbmV0d29ya2luZy9yZWNpcGVzLXN1cHBvcnQvd2lyZXNoYXJrL3dpcmVzaGFya18zLjAuNi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW5ldHdvcmtpbmcvcmVjaXBlcy1zdXBwb3J0L3dpcmVzaGFyay93aXJlc2hhcmtfMy4yLjAuYmIKQEAgLTEyLDE0ICsxMiwxNCBAQAogCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly8xLmFzLmRsLndpcmVzaGFyay5vcmcvc3JjIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiYzZmOGQxMmEzZWZlMjFjYzc4ODVmN2NiMGM0YmQ5MzgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTg3ZjQwMjJhMGMxNWRkYmYxNzMwYmYxYWNhZmNlOWU3NWE0ZTY1N2NlOWZhNDk0Y2VkYTAzMjRjMGMzZTMzZSIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNTk5MTVhZGJiYWRlZDE1ZGUwNzVhZmU3YjRiMDNiNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0Y2ZkMzNhMTlhNDU0ZmY0MDAyMjQzZTlkMDRkNmFmZDY0MjgwYTEwOWEyMWFlNjUyYTE5MmYyYmUyYjFiNjZjIgogCiBQRSA9ICIxIgogCiBpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZyBweXRob24zbmF0aXZlIHBlcmxuYXRpdmUgdXBzdHJlYW0tdmVyc2lvbi1pcy1ldmVuCiAKLVBBQ0tBR0VDT05GSUcgPz0gImxpYnBjYXAgZ251dGxzIGxpYm5sIGxpYmNhcCBzYmMgJHtAYmIudXRpbHMuY29udGFpbnMoJ0JCRklMRV9DT0xMRUNUSU9OUycsICdxdDUtbGF5ZXInLCAncXQ1JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUcgPz0gImxpYnBjYXAgZ251dGxzIGxpYm5sIGxpYmNhcCBzYmMgJHtAYmIudXRpbHMuY29udGFpbnMoJ0JCRklMRV9DT0xMRUNUSU9OUycsICdxdDUtbGF5ZXInLCAncXQ1IHBsdWdpbnMnLCAnJywgZCl9IgogCiBQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICJsaWJwY2FwIGdudXRscyBzc2wgbGlic3NoIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYmVuY2htYXJrL2lvem9uZTMvaW96b25lM180ODcuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYmVuY2htYXJrL2lvem9uZTMvaW96b25lM180ODguYmIKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9pb3pvbmUzL2lvem9uZTNfNDg3LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYmVuY2htYXJrL2lvem9uZTMvaW96b25lM180ODguYmIKaW5kZXggNDI4NjRiZS4uNTg4NWIxNCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9pb3pvbmUzL2lvem9uZTNfNDg3LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1iZW5jaG1hcmsvaW96b25lMy9pb3pvbmUzXzQ4OC5iYgpAQCAtMTAsOCArMTAsOCBAQAogICAgIGZpbGU6Ly9wYXJhbGxlbGlzbS5wYXRjaCBcCiAgICAgZmlsZTovL2NvcHlyaWdodC50eHQgXAogIgotU1JDX1VSSVttZDVzdW1dID0gIjJkYmUwMzVjYWY5OWM1MzY3NjI1MzUyZTE1OGJiODY2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJjNDg4YTdjY2RkZDYyNGZkNTU3YWYxNmU3MTQ0MmMzNjdiMTMxZDYxNzhlMWI0MDIzYmJkNTMyYmFjZGRhNTkiCitTUkNfVVJJW21kNXN1bV0gPSAiZDYwYTY5ZTQ0Y2RhODQzNmY0Zjk0ZDg2MDk1OGVmYzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTYwMjY1MTYzZDkzZjE1ZjdhZDM1MmY3MjZkNDgzN2M1ZGQ3OTRmZmYzNTdjNzQzZmRiNTZjYmNmNGFiY2EwNCIKIAogVVBTVFJFQU1fQ0hFQ0tfUkVHRVggPSAiaW96b25lM18oP1A8cHZlcj5cZCspLnRhciIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9saWJodWdldGxiZnMvZmlsZXMvMDAwMS1ydW5fdGVzdC5weS1ub3QtdXNlLWhhcmQtY29kZWQtcGF0aC0uLW9iai1odWdlYWRtLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9saWJodWdldGxiZnMvZmlsZXMvMDAwMS1ydW5fdGVzdC5weS1ub3QtdXNlLWhhcmQtY29kZWQtcGF0aC0uLW9iai1odWdlYWRtLnBhdGNoCmluZGV4IDM0YTYyMjAuLjgzOTM0YWIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1iZW5jaG1hcmsvbGliaHVnZXRsYmZzL2ZpbGVzLzAwMDEtcnVuX3Rlc3QucHktbm90LXVzZS1oYXJkLWNvZGVkLXBhdGgtLi1vYmotaHVnZWFkbS5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYmVuY2htYXJrL2xpYmh1Z2V0bGJmcy9maWxlcy8wMDAxLXJ1bl90ZXN0LnB5LW5vdC11c2UtaGFyZC1jb2RlZC1wYXRoLS4tb2JqLWh1Z2VhZG0ucGF0Y2gKQEAgLTEyLDYgKzEyLDkgQEAKIAogVXBkYXRlIGZvciAyLjIyLgogU2lnbmVkLW9mZi1ieTogWmhlbmcgUnVvcWluIDx6aGVuZ3JxLmZuc3RAY24uZnVqaXRzdS5jb20+CisKK1VwZGF0ZSB0byB3b3JrIGZvciBweXRob24zCitTaWduZWQtb2ZmLWJ5OiBDaGFuZ3FpbmcgTGkgPGNoYW5ncWluZy5saUB3aW5kcml2ZXIuY29tPgogLS0tCiAgdGVzdHMvcnVuX3Rlc3RzLnB5IHwgMTIgKysrKysrKysrKystCiAgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKQEAgLTM2LDcgKzM5LDcgQEAKICsgICAgICAgIHJldHVybiBzaXplcwogKyAgICBleGNlcHQgT1NFcnJvcjoKICsgICAgICAgIHJldHVybiBzaXplcwotKyAgICBvdXQgPSBwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKQorKyAgICBvdXQgPSBwLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCkuc3RyaXAoKQogKwogICAgICBpZiByYyAhPSAwIG9yIG91dCA9PSAiIjoKICAgICAgICAgIHJldHVybiBzaXplcwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9waG9yb25peC10ZXN0LXN1aXRlL3Bob3Jvbml4LXRlc3Qtc3VpdGVfOS4wLjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYmVuY2htYXJrL3Bob3Jvbml4LXRlc3Qtc3VpdGUvcGhvcm9uaXgtdGVzdC1zdWl0ZV85LjIuMS5iYgpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYmVuY2htYXJrL3Bob3Jvbml4LXRlc3Qtc3VpdGUvcGhvcm9uaXgtdGVzdC1zdWl0ZV85LjAuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9waG9yb25peC10ZXN0LXN1aXRlL3Bob3Jvbml4LXRlc3Qtc3VpdGVfOS4yLjEuYmIKaW5kZXggODkwNTBlNC4uNTJiMzQxYiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9waG9yb25peC10ZXN0LXN1aXRlL3Bob3Jvbml4LXRlc3Qtc3VpdGVfOS4wLjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9waG9yb25peC10ZXN0LXN1aXRlL3Bob3Jvbml4LXRlc3Qtc3VpdGVfOS4yLjEuYmIKQEAgLTYsOCArNiw4IEBACiBTRUNUSU9OID0gImNvbnNvbGUvdGVzdHMiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5waG9yb25peC10ZXN0LXN1aXRlLmNvbS9yZWxlYXNlcy8ke0JQfS50YXIuZ3oiCi1TUkNfVVJJW21kNXN1bV0gPSAiNTgwMjNjODEzNmEwMjA2OTA5NTUyOTQyNjYwZmUyOGEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTExN2E0MzUwNzc0ZTY3OTg5ZDkwYmYwYjVlODJhODA3MjY1MmY4Y2FhNjBhNjJjM2U1ZjY0YWRjMzE3Y2UxNCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZDgwZWQ5YTU4MzU5MjkxMzg0NzNmNzY0ZmYwZDVkYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NzVlN2NhOTY3MTllMmYzYjQyYTZjMTM0MjEyMTNhMzk4ZjA0ZGEwZjhlNzhmNDY5MWZhOTI2MWZkZWI4NTAxIgogCiBTID0gIiR7V09SS0RJUn0vcGhvcm9uaXgtdGVzdC1zdWl0ZSIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9zcGVlZHRlc3QtY2xpL3NwZWVkdGVzdC1jbGlfMi4xLjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYmVuY2htYXJrL3NwZWVkdGVzdC1jbGkvc3BlZWR0ZXN0LWNsaV8yLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTRmYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJlbmNobWFyay9zcGVlZHRlc3QtY2xpL3NwZWVkdGVzdC1jbGlfMi4xLjIuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJDb21tYW5kIGxpbmUgaW50ZXJmYWNlIGZvciB0ZXN0aW5nIGludGVybmV0IGJhbmR3aWR0aCB1c2luZyBzcGVlZHRlc3QubmV0IgorQVVUSE9SID0gIk1hdHQgTWFydHoiCisKK0xJQ0VOU0U9IkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zYjgzZWY5NjM4N2YxNDY1NWZjODU0ZGRjM2M2YmQ1NyIKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vc2l2ZWwvc3BlZWR0ZXN0LWNsaS5naXQiCitTUkNSRVYgPSAiYzU4YWQzMzY3YmYyN2Y0YjRhNGQ1YjFiY2EyOWViZDU3NDczMWM1ZCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uMyBweXRob24zLXNldHVwdG9vbHMtc2NtIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJzcC9udm1lLWNsaS9udm1lLWNsaV8xLjkuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYnNwL252bWUtY2xpL252bWUtY2xpXzEuOS5iYgppbmRleCA5MmM5MDJiLi5lYThiYzE3IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYnNwL252bWUtY2xpL252bWUtY2xpXzEuOS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtYnNwL252bWUtY2xpL252bWUtY2xpXzEuOS5iYgpAQCAtMjcsNyArMjcsNyBAQAogUEFDS0FHRVMgPSsgIiR7UE59LWRyYWN1dCAke1BOfS16c2gtY29tcGxldGlvbiIKIAogRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0iCi1GSUxFU18ke1BOfS1kcmFjdXQgPSAiJHtsaWJkaXJ9L2RyYWN1dC9kcmFjdXQuY29uZi5kIgorRklMRVNfJHtQTn0tZHJhY3V0ID0gIiR7bm9uYXJjaF9saWJkaXJ9L2RyYWN1dC9kcmFjdXQuY29uZi5kIgogRklMRVNfJHtQTn0tenNoLWNvbXBsZXRpb24gPSAiJHtkYXRhZGlyfS96c2gvc2l0ZS1mdW5jdGlvbnMiCiAKIFJERVBFTkRTXyR7UE59ID0gInV0aWwtbGludXgtdXVpZGdlbiIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ic3AvcndtZW0vcndtZW1fMS4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJzcC9yd21lbS9yd21lbV8xLjIuYmIKaW5kZXggNWQ4MWZkYi4uMDY1MjQzYyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJzcC9yd21lbS9yd21lbV8xLjIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWJzcC9yd21lbS9yd21lbV8xLjIuYmIKQEAgLTE1LDcgKzE1LDcgQEAKIAogUFYgLj0gIitnaXQke1NSQ1BWfSIKIAotU1JDUkVWX3J3bWVtID0gImNjMjk2YzUzNjZhMzVhNGM0MjcxY2ZhM2NjOTgzMWY2ZjM0YmZkOWQiCitTUkNSRVZfcndtZW0gPSAiM2VjM2U0MjEyMTFiNThlNzY2NjUxYzJlM2EzYTIxYWNmMTRhMTkwNiIKIFNSQ1JFVl9pbmloID0gIjRiMTBjNjU0MDUxYTg2NTU2ZGZkYjYzNGM4OTFiNmMzMjI0YzQxMDkiCiAKIFNSQ1JFVl9GT1JNQVQgPSAicndtZW1faW5paCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvZ2F0dGxpYi9maWxlcy8wMDAxLWNtYWtlLVVzZS1HTlVJbnN0YWxsRGlycy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvZ2F0dGxpYi9maWxlcy8wMDAxLWNtYWtlLVVzZS1HTlVJbnN0YWxsRGlycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmUwYTAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9nYXR0bGliL2ZpbGVzLzAwMDEtY21ha2UtVXNlLUdOVUluc3RhbGxEaXJzLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gNjNkYzJkMGM5Mzg0ZDg1NDgyZGM0Y2JiM2MxNzliNGIwYmIxOGQ0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IERlYyAyMDE5IDIyOjMyOjAxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGNtYWtlOiBVc2UgR05VSW5zdGFsbERpcnMKKworSGVscHMgaW5zdGFsbCBjbWFrZWZpbGVzIGluIHJpZ2h0IGxpYmRpcgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2xhYmFwYXJ0L2dhdHRsaWIvcHVsbC8xMzldCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgQ01ha2VMaXN0cy50eHQgICAgICB8ICA1ICsrKy0tCisgZGJ1cy9DTWFrZUxpc3RzLnR4dCB8IDE4ICsrKysrKysrKystLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CitpbmRleCAxMmQ4ZDcxLi5kZWQ3MjM5IDEwMDY0NAorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtMTUyLDcgKzE1Miw4IEBAIGVuZGlmKCkKKyAjCisgIyBMaXN0IG9mIGZpbGUgdG8gaW5zdGFsbAorICMKKy1pbnN0YWxsKEZJTEVTIGluY2x1ZGUvZ2F0dGxpYi5oIERFU1RJTkFUSU9OIGluY2x1ZGUpCistaW5zdGFsbChGSUxFUyAke1BST0pFQ1RfQklOQVJZX0RJUn0vZ2F0dGxpYi5wYyBERVNUSU5BVElPTiBsaWIvcGtnY29uZmlnKQorK2luY2x1ZGUoR05VSW5zdGFsbERpcnMpCisraW5zdGFsbChGSUxFUyBpbmNsdWRlL2dhdHRsaWIuaCBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0pCisraW5zdGFsbChGSUxFUyAke1BST0pFQ1RfQklOQVJZX0RJUn0vZ2F0dGxpYi5wYyBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfS9wa2djb25maWcpCisgCisgaW5jbHVkZShDUGFjaykKK2RpZmYgLS1naXQgYS9kYnVzL0NNYWtlTGlzdHMudHh0IGIvZGJ1cy9DTWFrZUxpc3RzLnR4dAoraW5kZXggZjUwOTZjZS4uY2VmMDMxZiAxMDA2NDQKKy0tLSBhL2RidXMvQ01ha2VMaXN0cy50eHQKKysrKyBiL2RidXMvQ01ha2VMaXN0cy50eHQKK0BAIC0xOSw3ICsxOSw3IEBACisgIyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAjCisgCistY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNikKKytjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4wKQorIAorIGZpbmRfcGFja2FnZShQa2dDb25maWcgUkVRVUlSRUQpCisgCitAQCAtMTE5LDQgKzExOSw2IEBAIGVuZGlmKCkKKyBhZGRfbGlicmFyeShnYXR0bGliIFNIQVJFRCAke2dhdHRsaWJfU1JDU30pCisgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGdhdHRsaWIgJHtnYXR0bGliX0xJQlN9KQorIAorLWluc3RhbGwoVEFSR0VUUyBnYXR0bGliIExJQlJBUlkgREVTVElOQVRJT04gbGliKQorK2luY2x1ZGUoR05VSW5zdGFsbERpcnMpCisrCisraW5zdGFsbChUQVJHRVRTIGdhdHRsaWIgTElCUkFSWSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfSkKKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvZ2F0dGxpYi9nYXR0bGliX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvZ2F0dGxpYi9nYXR0bGliX2dpdC5iYgppbmRleCAwZTZmY2U5Li42YjRkZWNjIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2dhdHRsaWIvZ2F0dGxpYl9naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9nYXR0bGliL2dhdHRsaWJfZ2l0LmJiCkBAIC05LDExICs5LDEzIEBACiAKIFBWID0gIjAuMitnaXQke1NSQ1BWfSIKIAotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xhYmFwYXJ0L2dhdHRsaWIuZ2l0IgotU1JDX1VSSSArPSAiZmlsZTovL2RidXMtYXZvaWQtc3RyYW5nZS1jaGFycy1mcm9tLXRoZS1idWlsZC1kaXIucGF0Y2giCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vbGFiYXBhcnQvZ2F0dGxpYi5naXQgXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy1hdm9pZC1zdHJhbmdlLWNoYXJzLWZyb20tdGhlLWJ1aWxkLWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNtYWtlLVVzZS1HTlVJbnN0YWxsRGlycy5wYXRjaCBcCisgICAgICAgICAgICIKIAogU1JDQlJBTkNIID0gIm1hc3RlciIKLVNSQ1JFViA9ICJjNmEzMzI1MjIyMWRmZjkwNGNmMjc3ZTA4NWUyY2U3MGFjZWQ4Nzg4IgorU1JDUkVWID0gIjVjN2VlNDNiZDcwZWUwOWE3MTcwZGRkNTViOWZkYmRlZjY5ZTkwODAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXdkL2l3ZF8xLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3ZC9pd2RfMS4wLmJiCmluZGV4IGQxMWUwZDQuLmNjMzRjYTIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXdkL2l3ZF8xLjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pd2QvaXdkXzEuMC5iYgpAQCAtMjgsNyArMjgsNyBAQAogICAgIGluc3RhbGwgLW02NDQgJHtTfS9kb2MvKi50eHQgJHtEfSR7ZG9jZGlyfS8ke0JQTn0KIH0KIAotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xICR7bGliZGlyfS9tb2R1bGVzLWxvYWQuZCAke3N5c3RlbWRfdW5pdGRpcn0vbmV0d29yay8iCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kYnVzLTEgJHtub25hcmNoX2xpYmRpcn0vbW9kdWxlcy1sb2FkLmQgJHtzeXN0ZW1kX3VuaXRkaXJ9L25ldHdvcmsvIgogCiBTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiaXdkLnNlcnZpY2UgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnd2lyZWQnLCAnZWFkLnNlcnZpY2UnLCAnJywgZCl9IgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2tyYjUva3JiNV8xLjE3LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9rcmI1L2tyYjVfMS4xNy4xLmJiCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkva3JiNS9rcmI1XzEuMTcuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkva3JiNS9rcmI1XzEuMTcuMS5iYgppbmRleCBlMjdhNGFlLi42MTY0YzgyIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2tyYjUva3JiNV8xLjE3LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkva3JiNS9rcmI1XzEuMTcuMS5iYgpAQCAtMzEsOCArMzEsOCBAQAogICAgICAgICAgICBmaWxlOi8va3JiNS1rZGMuc2VydmljZSBcCiAgICAgICAgICAgIGZpbGU6Ly9rcmI1LWFkbWluLXNlcnZlci5zZXJ2aWNlIFwKICIKLVNSQ19VUklbbWQ1c3VtXSA9ICIzYjcyOWQ4OWViNDQxMTUwZTE0Njc4MGM0MTM4NDgxYiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1YTZlMjI4NGE1M2RlNTcwMmQzZGMyYmUzYjkzMzljOTYzZjliNTM5N2QzZmJiYzUzYmViMjQ5MzgwYTc4MWY1IgorU1JDX1VSSVttZDVzdW1dID0gIjQxN2Q2NTRjNzI1MjZhYzUxNDY2ZTdmZTg0NjA4ODc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM3MDZkN2VjMmVhYTc3M2UwZTMyZDNhODdiZjc0MmViYWVjYWU3ZDA2NGUxOTA0NDNhM2FjZGRmZDhhZmIxODEiCiAKIENWRV9QUk9EVUNUID0gImtlcmJlcm9zIgogQ1ZFX1ZFUlNJT04gPSAiNS0ke1BWfSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibWJpbS9saWJtYmltXzEuMjAuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibWJpbS9saWJtYmltXzEuMjAuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYm1iaW0vbGlibWJpbV8xLjIwLjIuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibWJpbS9saWJtYmltXzEuMjAuNC5iYgppbmRleCAyYzRhNTlmLi5hM2VmODBjIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYm1iaW0vbGlibWJpbV8xLjIwLjIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJtYmltL2xpYm1iaW1fMS4yMC40LmJiCkBAIC0xNCw1ICsxNCw1IEBACiBTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKICAgICAgICAgICAgZmlsZTovL2NsYW5nLnBhdGNoIFwKICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI5ODhhNmE3ZmQ0YTJmNGUwOGMwOTg5OTIxODBlNWIwMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1NTBmYjY5ZTVlNTdmNzY0NmY4ZWI5ZWQ4ZDI0ZTQ0ZWE4NjlhZDg0NmJlOWMxNjI4OTNmMTJlNDM1MjgwNTliIgorU1JDX1VSSVttZDVzdW1dID0gImQzOGQ2MzdlMzNjZGU4YTkxNDg0ZjUzYTlmNmM0ZDQ5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjMjcwOGE0MDliMDlmMWY2ZjE3ODZhOGE5ZTM5YzM2NjE5YWE4ZDZmMjg1ZWE5NDNkYWE3YTQ4ZWEzNmQzZTgiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnFtaS9saWJxbWlfMS4yNC4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJxbWkvbGlicW1pXzEuMjQuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnFtaS9saWJxbWlfMS4yNC4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnFtaS9saWJxbWlfMS4yNC4yLmJiCmluZGV4IDliODllMWQuLjM1YTU4ZDIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicW1pL2xpYnFtaV8xLjI0LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJxbWkvbGlicW1pXzEuMjQuMi5iYgpAQCAtMTQsOCArMTQsOCBAQAogU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCiAgICAgICAgICAgICIKIAotU1JDX1VSSVttZDVzdW1dID0gIjRiMTgxYzBhOGI5MzMyMjZjZTNkY2UwOTU2NWZlOGY4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImFlYjY5ZjkwYzI3MzQ2N2NjZTI0NjE3NmNiYTA5NjdjNjQxM2YxOTk1YTk3Njk5Mjc3MGE1OTdjNGZlMjhjNzkiCitTUkNfVVJJW21kNXN1bV0gPSAiZTQ5YzQxOTExMmQ3MDhiNTMwMWFmN2NjYzJjMDkwZmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGFlNGU0NzZmOTYwZGJjMGQwNGIxYzAzNjg3NzZlYjc4ZWRmZmQ0NDIxZjNlNGMwNzRiYjJiZmI2Mzc1YjI4MiIKIAogUEFDS0FHRUNPTkZJRyA/Pz0gInVkZXYgbWJpbSIKIFBBQ0tBR0VDT05GSUdbdWRldl0gPSAiLC0td2l0aG91dC11ZGV2LGxpYmd1ZGV2IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJ1di9saWJ1dl8xLjMzLjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnV2L2xpYnV2XzEuMzQuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnV2L2xpYnV2XzEuMzMuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJ1di9saWJ1dl8xLjM0LjAuYmIKaW5kZXggNjA0NTY4ZS4uYjg0MmJiZCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJ1di9saWJ1dl8xLjMzLjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJ1di9saWJ1dl8xLjM0LjAuYmIKQEAgLTQsNyArNCw3IEBACiBMSUNFTlNFID0gIk1JVCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWE2ODkwMmE0MzBlMzIyMDAyNjNkMTgyZDQ0OTI0ZDQ3IgogCi1TUkNSRVYgPSAiMDdhZDMyMTM4ZjRkMjI4NWJhMjIyNmI1ZTIwNDYyYjI3YjA5MWE1OSIKK1NSQ1JFViA9ICIxNWFlNzUwMTUxYWM5MzQxZTU5NDVlYjM4Zjg5ODJkNTlmYjk5MjAxIgogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xpYnV2L2xpYnV2O2JyYW5jaD12MS54IgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saXJjL2xpcmMvMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saXJjL2xpcmMvMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzhmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpcmMvbGlyYy8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA1MGE0OGE3YmQ4ZDY1YTE2NWNlMmFhYzRiYTBjMWUwMmJkZWQwNGFhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgTm92IDIwMTkgMTI6MjE6MzEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIG9uIDMyYml0IGFyY2hlcyB3aXRoIDY0Yml0IHRpbWVfdAorCit0aW1lIGVsZW1lbnQgaXMgZGVwcmVjYXRlZCBvbiBuZXcgaW5wdXRfZXZlbnQgc3RydWN0dXJlIGluIGtlcm5lbCdzCitpbnB1dC5oIFsxXQorCitbMV0gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L2NvbW1pdD9pZD0xNTIxOTRmZTljM2YKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHBsdWdpbnMvZGV2aW5wdXQuYyB8IDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3BsdWdpbnMvZGV2aW5wdXQuYyBiL3BsdWdpbnMvZGV2aW5wdXQuYworaW5kZXggZDRkNzMzYS4uZmViNGE2MSAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvZGV2aW5wdXQuYworKysrIGIvcGx1Z2lucy9kZXZpbnB1dC5jCitAQCAtMzQsNiArMzQsMTEgQEAKKyAjaW5jbHVkZSA8bGludXgvdWlucHV0Lmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisrI2lmbmRlZiBpbnB1dF9ldmVudF9zZWMKKysjZGVmaW5lIGlucHV0X2V2ZW50X3NlYyB0aW1lLnR2X3NlYworKyNkZWZpbmUgaW5wdXRfZXZlbnRfdXNlYyB0aW1lLnR2X3VzZWMKKysjZW5kaWYKKysKKyAjaWZuZGVmIEVWX1NZTgorIC8qIHByZXZpb3VzIG5hbWUgKi8KKyAjZGVmaW5lIEVWX1NZTiBFVl9SU1QKK0BAIC00NTksNyArNDY0LDcgQEAgY2hhciogZGV2aW5wdXRfcmVjKHN0cnVjdCBpcl9yZW1vdGUqIHJlbW90ZXMpCisgCQlyZXR1cm4gMDsKKyAJfQorIAorLQlsb2dfdHJhY2UoInRpbWUgJWxkLiUwNmxkICB0eXBlICVkICBjb2RlICVkICB2YWx1ZSAlZCIsIGV2ZW50LnRpbWUudHZfc2VjLCBldmVudC50aW1lLnR2X3VzZWMsIGV2ZW50LnR5cGUsCisrCWxvZ190cmFjZSgidGltZSAlbGQuJTA2bGQgIHR5cGUgJWQgIGNvZGUgJWQgIHZhbHVlICVkIiwgZXZlbnQuaW5wdXRfZXZlbnRfc2VjLCBldmVudC5pbnB1dF9ldmVudF91c2VjLCBldmVudC50eXBlLAorIAkJICBldmVudC5jb2RlLCBldmVudC52YWx1ZSk7CisgCisgCXZhbHVlID0gKHVuc2lnbmVkKWV2ZW50LnZhbHVlOwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saXJjL2xpcmNfMC45LjRkLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saXJjL2xpcmNfMC45LjRkLmJiCmluZGV4IGIxMzE2M2QuLjYwNmNhZWUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlyYy9saXJjXzAuOS40ZC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpcmMvbGlyY18wLjkuNGQuYmIKQEAgLTEzLDYgKzEzLDcgQEAKIAogU1JDX1VSSSA9ICJodHRwOi8vcHJkb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L2xpcmMvbGlyYy0ke1BWfS50YXIuYnoyIFwKICAgICBmaWxlOi8vcG9sbGZkLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIFwKICAgICBmaWxlOi8vbGlyY2Quc2VydmljZSBcCiAgICAgZmlsZTovL2xpcmNkLmluaXQgXAogICAgIGZpbGU6Ly9saXJjZXhlYy5pbml0IFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmFiYml0bXEtYy9yYWJiaXRtcS1jXzAuOS4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yYWJiaXRtcS1jL3JhYmJpdG1xLWNfMC4xMC4wLmJiCnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmFiYml0bXEtYy9yYWJiaXRtcS1jXzAuOS4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L3JhYmJpdG1xLWMvcmFiYml0bXEtY18wLjEwLjAuYmIKaW5kZXggNTA5NmQ2Yy4uMmVmNmIxOCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yYWJiaXRtcS1jL3JhYmJpdG1xLWNfMC45LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yYWJiaXRtcS1jL3JhYmJpdG1xLWNfMC4xMC4wLmJiCkBAIC00LDggKzQsOCBAQAogTElDRU5TRSA9ICJNSVQiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9hbGFueHovcmFiYml0bXEtYy5naXQiCi0jIHYwLjkuMC1tYXN0ZXIKLVNSQ1JFViA9ICI3ZTY5M2EyM2Y3ZmI3MTIwZjg1OTk1ZDNjOTIyODE0NDk1YmUzMGRiIgorIyB2MC4xMC4wLW1hc3RlcgorU1JDUkVWID0gImZmZTkxOGE1ZmNlZjcyMDM4YTg4MDU0ZGNhM2M1Njc2MmIxOTUzZDQiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvdGhyaWZ0L3RocmlmdC8wMDAxLURlZmluZUluc3RhbGxhdGlvblBhdGhzLmNtYWtlLURlZmluZS1saWJkaXItaW4tdGVybXMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L3RocmlmdC90aHJpZnQvMDAwMS1EZWZpbmVJbnN0YWxsYXRpb25QYXRocy5jbWFrZS1EZWZpbmUtbGliZGlyLWluLXRlcm1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWQ3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L3RocmlmdC90aHJpZnQvMDAwMS1EZWZpbmVJbnN0YWxsYXRpb25QYXRocy5jbWFrZS1EZWZpbmUtbGliZGlyLWluLXRlcm1zLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYTA3ZTU2ZTFhMmU3MGE5YjgxZWIwYTY1ZjM0NWNmNDVhN2E5M2E4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IERlYyAyMDE5IDIxOjU2OjIzIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIERlZmluZUluc3RhbGxhdGlvblBhdGhzLmNtYWtlOiBEZWZpbmUgbGliZGlyIGluIHRlcm1zIG9mCisgTElCX1NVRkZJWAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBidWlsZC9jbWFrZS9EZWZpbmVJbnN0YWxsYXRpb25QYXRocy5jbWFrZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvYnVpbGQvY21ha2UvRGVmaW5lSW5zdGFsbGF0aW9uUGF0aHMuY21ha2UKKysrKyBiL2J1aWxkL2NtYWtlL0RlZmluZUluc3RhbGxhdGlvblBhdGhzLmNtYWtlCitAQCAtMjIsMTEgKzIyLDExIEBACisgc2V0KEJJTl9JTlNUQUxMX0RJUiAiYmluIiBDQUNIRSBQQVRIICJUaGUgYmluYXJ5IGluc3RhbGwgZGlyIChkZWZhdWx0OiBiaW4pIikKKyBzZXQoTElCX0lOU1RBTExfRElSICJsaWIke0xJQl9TVUZGSVh9IiBDQUNIRSBQQVRIICJUaGUgbGlicmFyeSBpbnN0YWxsIGRpciAoZGVmYXVsdDogbGliJHtMSUJfU1VGRklYfSkiKQorIHNldChJTkNMVURFX0lOU1RBTExfRElSICJpbmNsdWRlIiBDQUNIRSBQQVRIICJUaGUgbGlicmFyeSBpbnN0YWxsIGRpciAoZGVmYXVsdDogaW5jbHVkZSkiKQorLXNldChDTUFLRV9JTlNUQUxMX0RJUiAibGliL2NtYWtlIiBDQUNIRSBQQVRIICJUaGUgc3ViZGlyZWN0b3J5IHRvIGluc3RhbGwgY21ha2UgY29uZmlnIGZpbGVzIChkZWZhdWx0OiBjbWFrZSkiKQorLXNldChQS0dDT05GSUdfSU5TVEFMTF9ESVIgImxpYi9wa2djb25maWciIENBQ0hFIFBBVEggIlRoZSBzdWJkaXJlY3RvcnkgdG8gaW5zdGFsbCBwa2djb25maWcgY29uZmlnIGZpbGVzIChkZWZhdWx0OiBsaWIvcGtnY29uZmlnKSIpCisrc2V0KENNQUtFX0lOU1RBTExfRElSICJsaWIke0xJQl9TVUZGSVh9L2NtYWtlIiBDQUNIRSBQQVRIICJUaGUgc3ViZGlyZWN0b3J5IHRvIGluc3RhbGwgY21ha2UgY29uZmlnIGZpbGVzIChkZWZhdWx0OiBjbWFrZSkiKQorK3NldChQS0dDT05GSUdfSU5TVEFMTF9ESVIgImxpYiR7TElCX1NVRkZJWH0vcGtnY29uZmlnIiBDQUNIRSBQQVRIICJUaGUgc3ViZGlyZWN0b3J5IHRvIGluc3RhbGwgcGtnY29uZmlnIGNvbmZpZyBmaWxlcyAoZGVmYXVsdDogbGliL3BrZ2NvbmZpZykiKQorIHNldChET0NfSU5TVEFMTF9ESVIgInNoYXJlL2RvYyIgQ0FDSEUgUEFUSCAiVGhlIHN1YmRpcmVjdG9yeSB0byBpbnN0YWxsIGRvY3VtZW50YXRpb24gZmlsZXMgKGRlZmF1bHQ6IHNoYXJlL2RvYykiKQorIHNldChwcmVmaXggIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9IikKKyBzZXQoZXhlY19wcmVmaXggIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2JpbiIpCistc2V0KGxpYmRpciAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGliIikKKytzZXQobGliZGlyICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9saWIke0xJQl9TVUZGSVh9IikKKyBzZXQoaW5jbHVkZWRpciAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vaW5jbHVkZSIpCisgc2V0KGNtYWtlZGlyICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke0NNQUtFX0lOU1RBTExfRElSfSIpCistLS0gYS9idWlsZC9jbWFrZS9EZWZpbmVDTWFrZURlZmF1bHRzLmNtYWtlCisrKysgYi9idWlsZC9jbWFrZS9EZWZpbmVDTWFrZURlZmF1bHRzLmNtYWtlCitAQCAtNDQsOCArNDQsOCBAQCBpbmNsdWRlKEJ1aWxkVHlwZSkKKyAjIHRvcCBvZiB0aGUgYnVpbGQgdHJlZSByYXRoZXIgdGhhbiBpbiBoYXJkLXRvLWZpbmQgbGVhZgorICMgZGlyZWN0b3JpZXMuIFRoaXMgc2ltcGxpZmllcyBtYW51YWwgdGVzdGluZyBhbmQgdGhlIHVzZSBvZiB0aGUgYnVpbGQKKyAjIHRyZWUgcmF0aGVyIHRoYW4gaW5zdGFsbGVkIHRocmlmdCBsaWJyYXJpZXMuCistc2V0KENNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtFX0JJTkFSWV9ESVJ9L2xpYikKKy1zZXQoQ01BS0VfQVJDSElWRV9PVVRQVVRfRElSRUNUT1JZICR7Q01BS0VfQklOQVJZX0RJUn0vbGliKQorK3NldChDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9CSU5BUllfRElSfS9saWIke0xJQl9TVUZGSVh9KQorK3NldChDTUFLRV9BUkNISVZFX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9CSU5BUllfRElSfS9saWIke0xJQl9TVUZGSVh9KQorIHNldChDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4pCisgCisgIwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS90aHJpZnQvdGhyaWZ0XzAuMTIuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvdGhyaWZ0L3RocmlmdF8wLjEzLjAuYmIKc2ltaWxhcml0eSBpbmRleCA4MyUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS90aHJpZnQvdGhyaWZ0XzAuMTIuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS90aHJpZnQvdGhyaWZ0XzAuMTMuMC5iYgppbmRleCAxYzY5OTUxLi45MmJjYjIxIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L3RocmlmdC90aHJpZnRfMC4xMi4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvdGhyaWZ0L3RocmlmdF8wLjEzLjAuYmIKQEAgLTQsMTggKzQsMTkgQEAKIAogTElDRU5TRSA9ICJBcGFjaGUtMi4wIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9Mzk0NDY1ZTEyNWNmZmMwZjEzMzY5NWVkNDNmMTQwNDcgXAotICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTk9USUNFO21kNT00Mjc0OGFlNDY0NmI0NWZiZmE1MTgyODA3MzIxZmI2YyIKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL05PVElDRTttZDU9MjY1OWI0M2RhY2EyMTlmOTlhMmYyNjI2ZWExMjhmNzMiCiAKIERFUEVORFMgPSAidGhyaWZ0LW5hdGl2ZSBib29zdCBmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgb3BlbnNzbCIKIAotU1JDX1VSSSA9ICJodHRwczovL3d3dy1ldS5hcGFjaGUub3JnL2Rpc3QvdGhyaWZ0Ly8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmd6IgotCi1TUkNfVVJJW21kNXN1bV0gPSAiM2RlZWJiYjRkMWNhNzdkZDljOWUwMDlhMWVhMDIxODMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzMzNjA5OTUzMmI3NjVhNjgxNTE3M2Y2MmRmMGVkODk3NTI4YTlkNTUxODM3ZDYyN2MxZjg3ZmFkYWQ5MDQyOCIKK1NSQ19VUkkgPSAiaHR0cHM6Ly93d3ctZXUuYXBhY2hlLm9yZy9kaXN0L3RocmlmdC8vJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURlZmluZUluc3RhbGxhdGlvblBhdGhzLmNtYWtlLURlZmluZS1saWJkaXItaW4tdGVybXMucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOGEyN2QzOTFhMmIwMzIxNGI0NDRjYjEzZDU2NjRmMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YWQzNDhiODgwMzNhZjQ2Y2U0OTE0ODA5N2FmZTM1NGQ1MTNjMWZjYTdjNjA3YjU5YzMzZWJiNjA2NGI1MTc5IgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCiAKLWluaGVyaXQgcGtnY29uZmlnIGNtYWtlIHB5dGhvbm5hdGl2ZQoraW5oZXJpdCBwa2djb25maWcgY21ha2UgcHl0aG9uM25hdGl2ZQogCiBleHBvcnQgU1RBR0lOR19JTkNESVIKIGV4cG9ydCBTVEFHSU5HX0xJQkRJUgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93dmRpYWwvd3ZzdHJlYW1zLzAwMDEtRml4LW5hcnJvd2luZy1jb252ZXJzaW9uLWVycm9yLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93dmRpYWwvd3ZzdHJlYW1zLzAwMDEtRml4LW5hcnJvd2luZy1jb252ZXJzaW9uLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOWFiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L3d2ZGlhbC93dnN0cmVhbXMvMDAwMS1GaXgtbmFycm93aW5nLWNvbnZlcnNpb24tZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBjODZjNTI0Zjk1MWY2ZTk3MzQ3M2JmZWU3NmZkNTM2NjM2OGIyY2JjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjUgRGVjIDIwMTkgMDk6MzI6NDEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IG5hcnJvd2luZyBjb252ZXJzaW9uIGVycm9yCisKK3hwbGMvbW9kdWxlbG9hZGVyLmNjOiBJbiBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uICdzdGF0aWMgTW9kdWxlKiBNb2R1bGU6OmxvYWRNb2R1bGUoY29uc3QgY2hhciopJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cGxjL21vZHVsZWxvYWRlci5jYzo2NzoxNDogZXJyb3I6IG5hcnJvd2luZyBjb252ZXJzaW9uIG9mICctMScgZnJvbSAnaW50JyB0byAndW5zaWduZWQgaW50JyBbLVduYXJyb3dpbmddICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjcgfCAgIGNhc2UgKGludCktMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIF4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgeHBsYy9tb2R1bGVsb2FkZXIuY2MgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS94cGxjL21vZHVsZWxvYWRlci5jYyBiL3hwbGMvbW9kdWxlbG9hZGVyLmNjCitpbmRleCAwMmRkOWE0Li5jNTNmNWQyIDEwMDY0NAorLS0tIGEveHBsYy9tb2R1bGVsb2FkZXIuY2MKKysrKyBiL3hwbGMvbW9kdWxlbG9hZGVyLmNjCitAQCAtNjIsNyArNjIsNyBAQCBNb2R1bGUqIE1vZHVsZTo6bG9hZE1vZHVsZShjb25zdCBjaGFyKiBtb2R1bGVuYW1lKSB7CisgICAgIHJldHVybiBOVUxMOworICAgfQorIAorLSAgc3dpdGNoKG1vZHVsZWluZm8tPnZlcnNpb25fbWFqb3IpIHsKKysgIHN3aXRjaCgoaW50KW1vZHVsZWluZm8tPnZlcnNpb25fbWFqb3IpIHsKKyAjaWZkZWYgVU5TVEFCTEUKKyAgIGNhc2UgLTE6CisgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3ZkaWFsL3d2c3RyZWFtc180LjYuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3ZkaWFsL3d2c3RyZWFtc180LjYuMS5iYgppbmRleCBiMjIwZjljLi4yMGJlY2FmIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L3d2ZGlhbC93dnN0cmVhbXNfNC42LjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93dmRpYWwvd3ZzdHJlYW1zXzQuNi4xLmJiCkBAIC0yMiw2ICsyMiw3IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXd2cnVsZXMubWstVXNlLV9ERUZBVUxUX1NPVVJDRS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWJ1aWxkZml4LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtRm9yd2FyZC1wb3J0LXRvLU9wZW5TU0wtMS4xLngucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtbmFycm93aW5nLWNvbnZlcnNpb24tZXJyb3IucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICIyNzYwZGFjMzFhNDNkNDUyYTE5YTMxNDdiZmRlNTcxYyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvemVyb21xL2NwcHptcV9naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29ubmVjdGl2aXR5L3plcm9tcS9jcHB6bXFfZ2l0LmJiCmluZGV4IGNkZDJmNzguLjM2OTcxMjkgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb25uZWN0aXZpdHkvemVyb21xL2NwcHptcV9naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvbm5lY3Rpdml0eS96ZXJvbXEvY3Bwem1xX2dpdC5iYgpAQCAtNCw4ICs0LDggQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRiMTc0ZWFmN2I1NWEzNGE3Yzg5NTUxMTk3ZjY2ZTk0IgogREVQRU5EUyA9ICJ6ZXJvbXEiCiAKLVNSQ1JFViA9ICJmNWIzNmU1NjM1OThkNDhmY2MwZDgyZTU4OWQzNTk2YWZlZjk0NWFlIgotUFYgPSAiNC40LjEiCitTUkNSRVYgPSAiZTY3ZmEwZTE2ZDc5NjQ4NzYyMjg5NTJmNjA2OTNmNWMwM2VhMGNjMSIKK1BWID0gIjQuNS4wIgogCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vemVyb21xL2NwcHptcS5naXQiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1icm9rZXJfMjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtYnJva2VyXzIxLmJiCmluZGV4IDk4YzUwYzQuLjhiNDEwMWEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1icm9rZXJfMjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWJyb2tlcl8yMS5iYgpAQCAtMjYsNyArMjYsOCBAQAogCiBGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfSIKIEZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdXNlcl91bml0ZGlyfSIKLUZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vc3lzdGVtZC9jYXRhbG9nIgorRklMRVNfJHtQTn0gKz0gIiR7bm9uYXJjaF9saWJkaXJ9L3N5c3RlbWQvY2F0YWxvZyIKIAogRVhUUkFfT0VNRVNPTiArPSAiIC1Ec2VsaW51eD0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NlbGludXgnLCAndHJ1ZScsICdmYWxzZScsIGQpfSIKIEVYVFJBX09FTUVTT04gKz0gIiAtRGF1ZGl0PSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc2VsaW51eCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9IgorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9lbWxvZy9lbWxvZ19naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9lbWxvZy9lbWxvZ19naXQuYmIKaW5kZXggNjNkMTI0Ny4uMjIzMDhkNyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvZW1sb2cvZW1sb2dfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2VtbG9nL2VtbG9nX2dpdC5iYgpAQCAtMTksNCArMTksNCBAQAogICAgaW5zdGFsbCAtRG0gMDc1NSAke1N9L21rZW1sb2cgJHtEfSR7YmluZGlyfS9ta2VtbG9nCiB9CiAKLVJERVBFTkRTXyR7UE59ICs9ICJrZXJuZWwtbW9kdWxlLWVtbG9nIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gImtlcm5lbC1tb2R1bGUtZW1sb2ciCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9lbWxvZy9rZXJuZWwtbW9kdWxlLWVtbG9nX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2VtbG9nL2tlcm5lbC1tb2R1bGUtZW1sb2dfZ2l0LmJiCmluZGV4IDUxZjcyMjYuLmE1NTRhNGMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2VtbG9nL2tlcm5lbC1tb2R1bGUtZW1sb2dfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2VtbG9nL2tlcm5lbC1tb2R1bGUtZW1sb2dfZ2l0LmJiCkBAIC03LDYgKzcsNCBAQAogICAgIEtWRVI9JHtLRVJORUxfVkVSU0lPTn0gXAogIgogCi1kb19jb21waWxlKCkgewotICAgIG9lX3J1bm1ha2UgbW9kdWxlcwotfQorTUFLRV9UQVJHRVRTID0gIm1vZHVsZXMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9nbGZ3L2dsZndfMy4zLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvZ2xmdy9nbGZ3XzMuMy5iYgppbmRleCBlMzg1M2EyLi4wZmNmNzE2IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9nbGZ3L2dsZndfMy4zLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2dsZncvZ2xmd18zLjMuYmIKQEAgLTgsMTUgKzgsMTkgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UubWQ7bWQ1PTk4ZDkzZDFkZGM1MzdmOWI5ZWE2ZGVmNjRlMDQ2YjVmIgogU0VDVElPTiA9ICJsaWIiCiAKLWluaGVyaXQgcGtnY29uZmlnIGNtYWtlCitpbmhlcml0IHBrZ2NvbmZpZyBjbWFrZSBmZWF0dXJlc19jaGVjaworCitQViAuPSAiK2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjc4MWZiYmFkYjBiY2NjNzQ5MDU4MTc3YjEzODVjODJkYTlhY2U4ODAiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZ2xmdy9nbGZ3LmdpdCIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9nbGZ3L2dsZncuZ2l0IgotU1JDUkVWID0gImQyNTI0ODM0M2UyNDgzMzcyODRkZmJlNWVjZDFlZGRiZDM3YWU2NmQiCiAKLUVYVFJBX09FQ01BS0UgKz0gIi1EQlVJTERfU0hBUkVEX0xJQlM9T04iCitFWFRSQV9PRUNNQUtFICs9ICItREJVSUxEX1NIQVJFRF9MSUJTPU9OIC1ER0xGV19CVUlMRF9ET0NTPU9GRiIKKworQ0ZMQUdTICs9ICItZlBJQyIKIAogREVQRU5EUyA9ICJsaWJwbmcgbGliZ2x1IHpsaWIgbGlieHJhbmRyIGxpYnhpbmVyYW1hIGxpYnhpIGxpYnhjdXJzb3IiCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSBvcGVuZ2wiCiAKIENPTVBBVElCTEVfSE9TVF9saWJjLW11c2wgPSAibnVsbCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2xpYm5mYy9saWJuZmNfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbGlibmZjL2xpYm5mY19naXQuYmIKaW5kZXggN2VmZDM0NC4uNjRjNWY1YyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbGlibmZjL2xpYm5mY19naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbGlibmZjL2xpYm5mY19naXQuYmIKQEAgLTgsNyArOCw3IEBACiBpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKLVNSQ1JFViA9ICJjNDJlMjUwMmQ0NjI3ZDNlYTYyZjgzYzMyNjc3YjEwMGJiM2NlYmRjIgorU1JDUkVWID0gIjJkNDU0MzY3M2U5Yjc2YzAyNjc5Y2E4Yjg5MjU5NjU5ZjFhZmQ5MzIiCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vbmZjLXRvb2xzL2xpYm5mYy5naXQgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS11c2JidXMtSW5jbHVkZS1zdGRpbnQuaC1mb3ItdWludFhfdC5wYXRjaCBcCiAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbGlic2lnYysrLTIuMC9saWJzaWdjKystM18zLjAuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2xpYnNpZ2MrKy0yLjAvbGlic2lnYysrLTNfMy4wLjIuYmIKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbGlic2lnYysrLTIuMC9saWJzaWdjKystM18zLjAuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbGlic2lnYysrLTIuMC9saWJzaWdjKystM18zLjAuMi5iYgppbmRleCAzYzAzMzBmLi4yNmJkMDJjIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9saWJzaWdjKystMi4wL2xpYnNpZ2MrKy0zXzMuMC4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL2xpYnNpZ2MrKy0yLjAvbGlic2lnYysrLTNfMy4wLjIuYmIKQEAgLTYsMTIgKzYsMTIgQEAKIERFUEVORFMgPSAibW0tY29tbW9uIgogCiBTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2xpYnNpZ2MrKy8zLjAvbGlic2lnYysrLSR7UFZ9LnRhci54eiIKLVNSQ19VUklbbWQ1c3VtXSA9ICI2ZmZlOTI0ZjFkODYyNGI1NzE2NDY4Y2RlNjdkYzAzZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1MGEwODU1YzFlYjI2ZTYwNDRmZmU4ODhkYmUwNjE5MzhhYjQyNDFmOTZkOGYzNzU0ZWE3ZWFkMzhhYjhlZDA2IgorU1JDX1VSSVttZDVzdW1dID0gIjFmOTNmOGVkNGVhZDM4ZTg3NjE1NzgzNGIyYzU3YzIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRiNzc2NzZkZTFlNzQ3NzRlYzQ1NmJjYzZhYzZmMDRhMjc5MWExMmNjMWZlMDdmODMwNWQ0YzNjODZlMmYzMzkiCiAKIFMgPSAiJHtXT1JLRElSfS9saWJzaWdjKystJHtQVn0iCiAKLWluaGVyaXQgYXV0b3Rvb2xzCitpbmhlcml0IHNldHVwdG9vbHMzIG1lc29uCiAKIEZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3NpZ2MrKy0qLyIKIEZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kZXZoZWxwIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbmRjdGwvbmRjdGxfdjY1LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbmRjdGwvbmRjdGxfdjY3LmJiCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL25kY3RsL25kY3RsX3Y2NS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvbmRjdGwvbmRjdGxfdjY3LmJiCmluZGV4IDY5ZWUxZDQuLmRhMGM2NTYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL25kY3RsL25kY3RsX3Y2NS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9uZGN0bC9uZGN0bF92NjcuYmIKQEAgLTEwLDcgKzEwLDcgQEAKIAogaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZyBiYXNoLWNvbXBsZXRpb24gc3lzdGVtZAogCi1TUkNSRVYgPSAiZWQxN2ZkMTQ2MDhkOGRlMDcyYzhjMDkwZmZjNWZjZjc4YzRmNDhmZiIKK1NSQ1JFViA9ICI2MzdiYjQyNGRjMzE3YTA0NGM3MjJhNjcxMzU1ZWY5ZGYwZTBkMzBmIgogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3BtZW0vbmRjdGwuZ2l0IgogCiBERVBFTkRTID0gImttb2QgdWRldiBqc29uLWMga2V5dXRpbHMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1tZXRhLW9lLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtbWV0YS1vZS5iYgppbmRleCAzMTBkZTUzLi4zMWMzZjRlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1tZXRhLW9lLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLW1ldGEtb2UuYmIKQEAgLTkzLDYgKzkzLDcgQEAKICAgICAiCiBSREVQRU5EU19wYWNrYWdlZ3JvdXAtbWV0YS1vZS1ic3BfcmVtb3ZlX21pcHNhcmNoID0gImVmaXZhciBlZmlib290bWdyIgogUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2UtYnNwX3JlbW92ZV9wb3dlcnBjID0gImVmaXZhciBlZmlib290bWdyIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2UtYnNwX3JlbW92ZV9wb3dlcnBjNjQgPSAiZWZpdmFyIGVmaWJvb3RtZ3IiCiBSREVQRU5EU19wYWNrYWdlZ3JvdXAtbWV0YS1vZS1ic3BfcmVtb3ZlX3Jpc2N2NjQgPSAiZWZpdmFyIGVmaWJvb3RtZ3IiCiBSREVQRU5EU19wYWNrYWdlZ3JvdXAtbWV0YS1vZS1ic3BfcmVtb3ZlX3Jpc2N2MzIgPSAiZWZpdmFyIGVmaWJvb3RtZ3IiCiAKQEAgLTEyMyw4ICsxMjQsOSBAQAogUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2UtZGV2dG9vbHNfcmVtb3ZlX21pcHM2NCA9ICJub2RlanMiCiBSREVQRU5EU19wYWNrYWdlZ3JvdXAtbWV0YS1vZS1kZXZ0b29sc19yZW1vdmVfbWlwczY0ZWwgPSAibm9kZWpzIgogUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2UtZGV2dG9vbHNfcmVtb3ZlX3Bvd2VycGMgPSAiYW5kcm9pZC10b29scyBicmVha3BhZCB1ZnRyYWNlIGxzaHciCi1SREVQRU5EU19wYWNrYWdlZ3JvdXAtbWV0YS1vZS1kZXZ0b29sc19yZW1vdmVfcmlzY3Y2NCA9ICJ1ZnRyYWNlIGxzaHciCi1SREVQRU5EU19wYWNrYWdlZ3JvdXAtbWV0YS1vZS1kZXZ0b29sc19yZW1vdmVfcmlzY3YzMiA9ICJ1ZnRyYWNlIGxzaHciCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtbWV0YS1vZS1kZXZ0b29sc19yZW1vdmVfcG93ZXJwYzY0ID0gImFuZHJvaWQtdG9vbHMgdWZ0cmFjZSBsc2h3IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2UtZGV2dG9vbHNfcmVtb3ZlX3Jpc2N2NjQgPSAibm9kZWpzIHVmdHJhY2UgbHNodyIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1tZXRhLW9lLWRldnRvb2xzX3JlbW92ZV9yaXNjdjMyID0gIm5vZGVqcyB1ZnRyYWNlIGxzaHciCiAKIFJERVBFTkRTX3BhY2thZ2Vncm91cC1tZXRhLW9lLWV4dGVuZGVkID0iXAogICAgIGJ5YWNjIGNmZW5naW5lIGNmZW5naW5lLW1hc3RlcmZpbGVzIGNtcGktYmluZGluZ3MgXApAQCAtMTUzLDYgKzE1NSw3IEBACiAgICAgIgogUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2UtZXh0ZW5kZWRfcmVtb3ZlX21pcHNhcmNoID0gInVwbSBtcmFhIHRpcHRvcCIKIFJERVBFTkRTX3BhY2thZ2Vncm91cC1tZXRhLW9lLWV4dGVuZGVkX3JlbW92ZV9wb3dlcnBjID0gInVwbSBtcmFhIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2UtZXh0ZW5kZWRfcmVtb3ZlX3Bvd2VycGM2NCA9ICJ1cG0gbXJhYSIKIFJERVBFTkRTX3BhY2thZ2Vncm91cC1tZXRhLW9lLWV4dGVuZGVkX3JlbW92ZV9yaXNjdjY0ID0gInVwbSBtcmFhIHRpcHRvcCIKIFJERVBFTkRTX3BhY2thZ2Vncm91cC1tZXRhLW9lLWV4dGVuZGVkX3JlbW92ZV9yaXNjdjMyID0gInVwbSBtcmFhIHRpcHRvcCIKIFJERVBFTkRTX3BhY2thZ2Vncm91cC1tZXRhLW9lLWV4dGVuZGVkX3JlbW92ZV9saWJjLW11c2wgPSAibGNkcHJvYyIKQEAgLTI1OCw2ICsyNjEsOCBAQAogCiBSREVQRU5EU19wYWNrYWdlZ3JvdXAtbWV0YS1vZS1zdXBwb3J0X3JlbW92ZV9hcm0gPSJudW1hY3RsIgogUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2Utc3VwcG9ydF9yZW1vdmVfbWlwc2FyY2ggPSAiZ3BlcmZ0b29scyIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1tZXRhLW9lLXN1cHBvcnRfcmVtb3ZlX3Jpc2N2NjQgPSAidWltIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLW1ldGEtb2Utc3VwcG9ydF9yZW1vdmVfcmlzY3YzMiA9ICJ1aW0iCiAKIFJERVBFTkRTX3BhY2thZ2Vncm91cC1tZXRhLW9lLXN1cHBvcnQtZWdsID0iXAogICAgIGZyZWVyZHAgbGlibmljZSBvcGVuY3YgXApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy0wLjcuNi9ydW4tcHRlc3QgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLTAuNy42L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNmFkZTBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy0wLjcuNi9ydW4tcHRlc3QKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCitzZXQgLWUKK3NldCAtbyBwaXBlZmFpbAorCitTQ1JJUFRQQVRIPSIkKCBjZCAiJChkaXJuYW1lICIkMCIpIiA7IHB3ZCAtUCApIgorCiske1NDUklQVFBBVEh9Ly4uL3Rlc3RzL3NkYnVzLWMrKy11bml0LXRlc3RzIDI+JjEgfCBcCitzZWQgLXIgJ3MvXlxbXHMrT0tccytcXSAoLiopIFwoWzAtOV0rXHNtc1wpJC9PSzogXDEgLycgfCBcCitzZWQgLXIgJ3MvXlxbXHMrRkFJTEVEXHMrXF0gKC4qKSBcKFswLTldK1xzbXNcKSQvRkFJTEVEOiBcMSAvJyB8IFwKK2F3ayAne2lmICgkMSA9PSAiT0s6IiB8fCAkMSA9PSAiRkFJTEVEOiIpIHtwcmludCAkMH19JworCiske1NDUklQVFBBVEh9Ly4uL3Rlc3RzL3NkYnVzLWMrKy1pbnRlZ3JhdGlvbi10ZXN0cyAyPiYxIHwgXAorc2VkIC1yICdzL15cW1xzK09LXHMrXF0gKC4qKSBcKFswLTldK1xzbXNcKSQvT0s6IFwxIC8nIHwgXAorc2VkIC1yICdzL15cW1xzK0ZBSUxFRFxzK1xdICguKikgXChbMC05XStcc21zXCkkL0ZBSUxFRDogXDEgLycgfCBcCithd2sgJ3tpZiAoJDEgPT0gIk9LOiIgfHwgJDEgPT0gIkZBSUxFRDoiKSB7cHJpbnQgJDB9fScgCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDEtZG8tbm90LWRpc2FibGUtYnVmZmVyLWluLXdyaXRpbmctZmlsZXMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDEtZG8tbm90LWRpc2FibGUtYnVmZmVyLWluLXdyaXRpbmctZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY0ZGFmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwMS1kby1ub3QtZGlzYWJsZS1idWZmZXItaW4td3JpdGluZy1maWxlcy5wYXRjaApAQCAtMCwwICsxLDQxMyBAQAorRnJvbSA4NWUzYzMwNDY1NjJlYzI0ZmMyZjA5ZWJmZDA4YmY5ZjE2ODA5MWQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxIE1hciAyMDE5IDE1OjIyOjE1ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvIG5vdCBkaXNhYmxlIGJ1ZmZlciBpbiB3cml0aW5nIGZpbGVzCisKK0RvIG5vdCBkaXNhYmxlIGJ1ZmZlciBpbiB3cml0aW5nIGZpbGVzLCBvdGhlcndpc2Ugd2UgZ2V0CitmYWlsdXJlIGF0IGJvb3QgZm9yIG11c2wgbGlrZSBiZWxvdy4KKworICBbISEhISEhXSBGYWlsZWQgdG8gYWxsb2NhdGUgbWFuYWdlciBvYmplY3QuCisKK0FuZCB0aGVyZSB3aWxsIGJlIG90aGVyIGZhaWx1cmVzLCBjcml0aWNhbCBvciBub3QgY3JpdGljYWwuCitUaGlzIGlzIHNwZWNpZmljIHRvIG11c2wuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbXVzbF0KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorW1JlYmFzZWQgZm9yIHYyNDJdCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWogVmFsZWsgPGFuZHJlai52YWxla0BzaWVtZW5zLmNvbT4KK1tyZWJhc2VkIGZvciBzeXN0ZW1kIDI0M10KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IE11cnJheSA8c2NvdHQubXVycmF5QGtvbnN1bGtvLmNvbT4KKy0tLQorIHNyYy9iYXNpYy9jZ3JvdXAtdXRpbC5jICAgICAgICAgICAgICAgICB8IDE0ICsrKysrKystLS0tLS0tCisgc3JjL2Jhc2ljL3Byb2Nmcy11dGlsLmMgICAgICAgICAgICAgICAgIHwgIDQgKystLQorIHNyYy9iYXNpYy9zbWFjay11dGlsLmMgICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL2Jhc2ljL3V0aWwuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvYmluZm10L2JpbmZtdC5jICAgICAgICAgICAgICAgICAgICAgfCAgNiArKystLS0KKyBzcmMvY29yZS9tYWluLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKy0tCisgc3JjL2NvcmUvc21hY2stc2V0dXAuYyAgICAgICAgICAgICAgICAgIHwgIDggKysrKy0tLS0KKyBzcmMvaGliZXJuYXRlLXJlc3VtZS9oaWJlcm5hdGUtcmVzdW1lLmMgfCAgMiArLQorIHNyYy9saWJzeXN0ZW1kL3NkLWRldmljZS9zZC1kZXZpY2UuYyAgICB8ICAyICstCisgc3JjL2xvZ2luL2xvZ2luZC1kYnVzLmMgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvbnNwYXduL25zcGF3bi1jZ3JvdXAuYyAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrKy0tLQorIHNyYy9zaGFyZWQvc3lzY3RsLXV0aWwuYyAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3NsZWVwL3NsZWVwLmMgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKysrKystLS0tLQorIHNyYy91ZGV2L3VkZXZhZG0tdHJpZ2dlci5jICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3VkZXYvdWRldmQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvdmNvbnNvbGUvdmNvbnNvbGUtc2V0dXAuYyAgICAgICAgICAgfCAgMiArLQorIDE3IGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL2Nncm91cC11dGlsLmMgYi9zcmMvYmFzaWMvY2dyb3VwLXV0aWwuYworaW5kZXggN2I1ODM5Y2NkNi4uMThmNmU4ZmZjOCAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9jZ3JvdXAtdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvY2dyb3VwLXV0aWwuYworQEAgLTg2MCw3ICs4NjAsNyBAQCBpbnQgY2dfYXR0YWNoKGNvbnN0IGNoYXIgKmNvbnRyb2xsZXIsIGNvbnN0IGNoYXIgKnBhdGgsIHBpZF90IHBpZCkgeworIAorICAgICAgICAgeHNwcmludGYoYywgUElEX0ZNVCAiXG4iLCBwaWQpOworIAorLSAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKGZzLCBjLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoZnMsIGMsIDApOworICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAKK0BAIC0xMTQyLDcgKzExNDIsNyBAQCBpbnQgY2dfaW5zdGFsbF9yZWxlYXNlX2FnZW50KGNvbnN0IGNoYXIgKmNvbnRyb2xsZXIsIGNvbnN0IGNoYXIgKmFnZW50KSB7CisgCisgICAgICAgICBzYyA9IHN0cnN0cmlwKGNvbnRlbnRzKTsKKyAgICAgICAgIGlmIChpc2VtcHR5KHNjKSkgeworLSAgICAgICAgICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoZnMsIGFnZW50LCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICAgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZShmcywgYWdlbnQsIDApOworICAgICAgICAgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgICB9IGVsc2UgaWYgKCFwYXRoX2VxdWFsKHNjLCBhZ2VudCkpCitAQCAtMTE2MCw3ICsxMTYwLDcgQEAgaW50IGNnX2luc3RhbGxfcmVsZWFzZV9hZ2VudChjb25zdCBjaGFyICpjb250cm9sbGVyLCBjb25zdCBjaGFyICphZ2VudCkgeworIAorICAgICAgICAgc2MgPSBzdHJzdHJpcChjb250ZW50cyk7CisgICAgICAgICBpZiAoc3RyZXEoc2MsICIwIikpIHsKKy0gICAgICAgICAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKGZzLCAiMSIsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgICAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKGZzLCAiMSIsIDApOworICAgICAgICAgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgCitAQCAtMTE4Nyw3ICsxMTg3LDcgQEAgaW50IGNnX3VuaW5zdGFsbF9yZWxlYXNlX2FnZW50KGNvbnN0IGNoYXIgKmNvbnRyb2xsZXIpIHsKKyAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgCistICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoZnMsICIwIiwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKGZzLCAiMCIsIDApOworICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAKK0BAIC0xMTk3LDcgKzExOTcsNyBAQCBpbnQgY2dfdW5pbnN0YWxsX3JlbGVhc2VfYWdlbnQoY29uc3QgY2hhciAqY29udHJvbGxlcikgeworICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZShmcywgIiIsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZShmcywgIiIsIDApOworICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAKK0BAIC0yMDUzLDcgKzIwNTMsNyBAQCBpbnQgY2dfc2V0X2F0dHJpYnV0ZShjb25zdCBjaGFyICpjb250cm9sbGVyLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICphdHRyaQorICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAKKy0gICAgICAgIHJldHVybiB3cml0ZV9zdHJpbmdfZmlsZShwLCB2YWx1ZSwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgcmV0dXJuIHdyaXRlX3N0cmluZ19maWxlKHAsIHZhbHVlLCAwKTsKKyB9CisgCisgaW50IGNnX2dldF9hdHRyaWJ1dGUoY29uc3QgY2hhciAqY29udHJvbGxlciwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYXR0cmlidXRlLCBjaGFyICoqcmV0KSB7CitAQCAtMjY5Nyw3ICsyNjk3LDcgQEAgaW50IGNnX2VuYWJsZV9ldmVyeXdoZXJlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX2RlYnVnX2Vycm5vKGVycm5vLCAiRmFpbGVkIHRvIG9wZW4gY2dyb3VwLnN1YnRyZWVfY29udHJvbCBmaWxlIG9mICVzOiAlbSIsIHApOworICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICAgICAgICAgICAgICByID0gd3JpdGVfc3RyaW5nX3N0cmVhbShmLCBzLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICAgICAgICAgICAgICAgICAgciA9IHdyaXRlX3N0cmluZ19zdHJlYW0oZiwgcywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dfZGVidWdfZXJybm8ociwgIkZhaWxlZCB0byAlcyBjb250cm9sbGVyICVzIGZvciAlcyAoJXMpOiAlbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBR1NfU0VUKG1hc2ssIGJpdCkgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwgbiwgcCwgZnMpOworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9wcm9jZnMtdXRpbC5jIGIvc3JjL2Jhc2ljL3Byb2Nmcy11dGlsLmMKK2luZGV4IDQyY2U1M2Q1YWEuLjU3NTEyNTMyYTYgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvcHJvY2ZzLXV0aWwuYworKysrIGIvc3JjL2Jhc2ljL3Byb2Nmcy11dGlsLmMKK0BAIC04NiwxMyArODYsMTMgQEAgaW50IHByb2Nmc190YXNrc19zZXRfbGltaXQodWludDY0X3QgbGltaXQpIHsKKyAgICAgICAgICAqIGRlY3JlYXNlIGl0LCBhcyB0aHJlYWRzLW1heCBpcyB0aGUgbXVjaCBtb3JlIHJlbGV2YW50IHN5c2N0bC4gKi8KKyAgICAgICAgIGlmIChsaW1pdCA+IHBpZF9tYXgtMSkgeworICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiUiIFBSSXU2NCwgbGltaXQrMSk7IC8qIEFkZCBvbmUsIHNpbmNlIFBJRCAwIGlzIG5vdCBhIHZhbGlkIFBJRCAqLworLSAgICAgICAgICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9wcm9jL3N5cy9rZXJuZWwvcGlkX21heCIsIGJ1ZmZlciwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9wcm9jL3N5cy9rZXJuZWwvcGlkX21heCIsIGJ1ZmZlciwgMCk7CisgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIHNwcmludGYoYnVmZmVyLCAiJSIgUFJJdTY0LCBsaW1pdCk7CistICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9wcm9jL3N5cy9rZXJuZWwvdGhyZWFkcy1tYXgiLCBidWZmZXIsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3Byb2Mvc3lzL2tlcm5lbC90aHJlYWRzLW1heCIsIGJ1ZmZlciwgMCk7CisgICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgICAgICAgdWludDY0X3QgdGhyZWFkc19tYXg7CisgCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3NtYWNrLXV0aWwuYyBiL3NyYy9iYXNpYy9zbWFjay11dGlsLmMKK2luZGV4IDEyM2QwMGUxM2UuLmU3ZWE3OGYzNDkgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvc21hY2stdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvc21hY2stdXRpbC5jCitAQCAtMTE1LDcgKzExNSw3IEBAIGludCBtYWNfc21hY2tfYXBwbHlfcGlkKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbGFiZWwpIHsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgCisgICAgICAgICBwID0gcHJvY2ZzX2ZpbGVfYWxsb2NhKHBpZCwgImF0dHIvY3VycmVudCIpOworLSAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKHAsIGxhYmVsLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUocCwgbGFiZWwsIDApOworICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gcjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvdXRpbC5jIGIvc3JjL2Jhc2ljL3V0aWwuYworaW5kZXggOTNkNjEwYmM5OC4uOTdkY2E2NGY3MyAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy91dGlsLmMKKysrKyBiL3NyYy9iYXNpYy91dGlsLmMKK0BAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBkaXNhYmxlX2NvcmVkdW1wcyh2b2lkKSB7CisgICAgICAgICBpZiAoZGV0ZWN0X2NvbnRhaW5lcigpID4gMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuOworIAorLSAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKCIvcHJvYy9zeXMva2VybmVsL2NvcmVfcGF0dGVybiIsICJ8L2Jpbi9mYWxzZSIsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3Byb2Mvc3lzL2tlcm5lbC9jb3JlX3BhdHRlcm4iLCAifC9iaW4vZmFsc2UiLCAwKTsKKyAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgbG9nX2RlYnVnX2Vycm5vKHIsICJGYWlsZWQgdG8gdHVybiBvZmYgY29yZWR1bXBzLCBpZ25vcmluZzogJW0iKTsKKyB9CitkaWZmIC0tZ2l0IGEvc3JjL2JpbmZtdC9iaW5mbXQuYyBiL3NyYy9iaW5mbXQvYmluZm10LmMKK2luZGV4IGFhOWQ4MTFmMmUuLjhjN2YyZGFlN2EgMTAwNjQ0CistLS0gYS9zcmMvYmluZm10L2JpbmZtdC5jCisrKysgYi9zcmMvYmluZm10L2JpbmZtdC5jCitAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgaW50IGRlbGV0ZV9ydWxlKGNvbnN0IGNoYXIgKnJ1bGUpIHsKKyAgICAgICAgIGlmICghZm4pCisgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisgCistICAgICAgICByZXR1cm4gd3JpdGVfc3RyaW5nX2ZpbGUoZm4sICItMSIsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHJldHVybiB3cml0ZV9zdHJpbmdfZmlsZShmbiwgIi0xIiwgMCk7CisgfQorIAorIHN0YXRpYyBpbnQgYXBwbHlfcnVsZShjb25zdCBjaGFyICpydWxlKSB7CitAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3J1bGUoY29uc3QgY2hhciAqcnVsZSkgeworIAorICAgICAgICAgKHZvaWQpIGRlbGV0ZV9ydWxlKHJ1bGUpOworIAorLSAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKCIvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXIiLCBydWxlLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlciIsIHJ1bGUsIDApOworICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX2Vycm9yX2Vycm5vKHIsICJGYWlsZWQgdG8gYWRkIGJpbmFyeSBmb3JtYXQ6ICVtIik7CisgCitAQCAtMjEzLDcgKzIxMyw3IEBAIHN0YXRpYyBpbnQgcnVuKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAvKiBGbHVzaCBvdXQgYWxsIHJ1bGVzICovCistICAgICAgICAgICAgICAgICh2b2lkKSB3cml0ZV9zdHJpbmdfZmlsZSgiL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3N0YXR1cyIsICItMSIsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgICAgICAgICAgKHZvaWQpIHdyaXRlX3N0cmluZ19maWxlKCIvcHJvYy9zeXMvZnMvYmluZm10X21pc2Mvc3RhdHVzIiwgIi0xIiwgMCk7CisgCisgICAgICAgICAgICAgICAgIFNUUlZfRk9SRUFDSChmLCBmaWxlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBhcHBseV9maWxlKCpmLCB0cnVlKTsKK2RpZmYgLS1naXQgYS9zcmMvY29yZS9tYWluLmMgYi9zcmMvY29yZS9tYWluLmMKK2luZGV4IGJjY2U3MTc4YTguLjQxOTljZWRhYjkgMTAwNjQ0CistLS0gYS9zcmMvY29yZS9tYWluLmMKKysrKyBiL3NyYy9jb3JlL21haW4uYworQEAgLTEyODUsNyArMTI4NSw3IEBAIHN0YXRpYyBpbnQgYnVtcF91bml4X21heF9kZ3JhbV9xbGVuKHZvaWQpIHsKKyAgICAgICAgIGlmICh2ID49IERFRkFVTFRfVU5JWF9NQVhfREdSQU1fUUxFTikKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgCistICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGVmKCIvcHJvYy9zeXMvbmV0L3VuaXgvbWF4X2RncmFtX3FsZW4iLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUiwgIiVsdSIsIERFRkFVTFRfVU5JWF9NQVhfREdSQU1fUUxFTik7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGVmKCIvcHJvYy9zeXMvbmV0L3VuaXgvbWF4X2RncmFtX3FsZW4iLCAwLCAiJWx1IiwgREVGQVVMVF9VTklYX01BWF9ER1JBTV9RTEVOKTsKKyAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19mdWxsX2Vycm5vKElOX1NFVChyLCAtRVJPRlMsIC1FUEVSTSwgLUVBQ0NFUykgPyBMT0dfREVCVUcgOiBMT0dfV0FSTklORywgciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gYnVtcCBBRl9VTklYIGRhdGFncmFtIHF1ZXVlIGxlbmd0aCwgaWdub3Jpbmc6ICVtIik7CitAQCAtMTUwOSw3ICsxNTA5LDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZV9jb3JlX3BhdHRlcm4oYm9vbCBza2lwX3NldHVwKSB7CisgICAgICAgICBpZiAoZ2V0cGlkX2NhY2hlZCgpICE9IDEpCisgICAgICAgICAgICAgICAgIHJldHVybjsKKyAKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3Byb2Mvc3lzL2tlcm5lbC9jb3JlX3BhdHRlcm4iLCBhcmdfZWFybHlfY29yZV9wYXR0ZXJuLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9wcm9jL3N5cy9rZXJuZWwvY29yZV9wYXR0ZXJuIiwgYXJnX2Vhcmx5X2NvcmVfcGF0dGVybiwgMCk7CisgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgIGxvZ193YXJuaW5nX2Vycm5vKHIsICJGYWlsZWQgdG8gd3JpdGUgJyVzJyB0byAvcHJvYy9zeXMva2VybmVsL2NvcmVfcGF0dGVybiwgaWdub3Jpbmc6ICVtIiwgYXJnX2Vhcmx5X2NvcmVfcGF0dGVybik7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9jb3JlL3NtYWNrLXNldHVwLmMgYi9zcmMvY29yZS9zbWFjay1zZXR1cC5jCitpbmRleCBiOTVlNjIzOWQ0Li5mZGJkYWFhY2NiIDEwMDY0NAorLS0tIGEvc3JjL2NvcmUvc21hY2stc2V0dXAuYworKysrIGIvc3JjL2NvcmUvc21hY2stc2V0dXAuYworQEAgLTMyNSwxNyArMzI1LDE3IEBAIGludCBtYWNfc21hY2tfc2V0dXAoYm9vbCAqbG9hZGVkX3BvbGljeSkgeworICAgICAgICAgfQorIAorICNpZmRlZiBTTUFDS19SVU5fTEFCRUwKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3Byb2Mvc2VsZi9hdHRyL2N1cnJlbnQiLCBTTUFDS19SVU5fTEFCRUwsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3Byb2Mvc2VsZi9hdHRyL2N1cnJlbnQiLCBTTUFDS19SVU5fTEFCRUwsIDApOworICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICBsb2dfd2FybmluZ19lcnJubyhyLCAiRmFpbGVkIHRvIHNldCBTTUFDSyBsYWJlbCBcIiIgU01BQ0tfUlVOX0xBQkVMICJcIiBvbiBzZWxmOiAlbSIpOworLSAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKCIvc3lzL2ZzL3NtYWNrZnMvYW1iaWVudCIsIFNNQUNLX1JVTl9MQUJFTCwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKCIvc3lzL2ZzL3NtYWNrZnMvYW1iaWVudCIsIFNNQUNLX1JVTl9MQUJFTCwgMCk7CisgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgIGxvZ193YXJuaW5nX2Vycm5vKHIsICJGYWlsZWQgdG8gc2V0IFNNQUNLIGFtYmllbnQgbGFiZWwgXCIiIFNNQUNLX1JVTl9MQUJFTCAiXCI6ICVtIik7CisgICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9zeXMvZnMvc21hY2tmcy9uZXRsYWJlbCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAuMC4wLjAvMCAiIFNNQUNLX1JVTl9MQUJFTCwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwLjAuMC4wLzAgIiBTTUFDS19SVU5fTEFCRUwsIDApOworICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICBsb2dfd2FybmluZ19lcnJubyhyLCAiRmFpbGVkIHRvIHNldCBTTUFDSyBuZXRsYWJlbCBydWxlIFwiMC4wLjAuMC8wICIgU01BQ0tfUlVOX0xBQkVMICJcIjogJW0iKTsKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3N5cy9mcy9zbWFja2ZzL25ldGxhYmVsIiwgIjEyNy4wLjAuMSAtQ0lQU08iLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9zeXMvZnMvc21hY2tmcy9uZXRsYWJlbCIsICIxMjcuMC4wLjEgLUNJUFNPIiwgMCk7CisgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgIGxvZ193YXJuaW5nX2Vycm5vKHIsICJGYWlsZWQgdG8gc2V0IFNNQUNLIG5ldGxhYmVsIHJ1bGUgXCIxMjcuMC4wLjEgLUNJUFNPXCI6ICVtIik7CisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2hpYmVybmF0ZS1yZXN1bWUvaGliZXJuYXRlLXJlc3VtZS5jIGIvc3JjL2hpYmVybmF0ZS1yZXN1bWUvaGliZXJuYXRlLXJlc3VtZS5jCitpbmRleCAxN2U3Y2QxYTAwLi44N2E3NjY3NzE2IDEwMDY0NAorLS0tIGEvc3JjL2hpYmVybmF0ZS1yZXN1bWUvaGliZXJuYXRlLXJlc3VtZS5jCisrKysgYi9zcmMvaGliZXJuYXRlLXJlc3VtZS9oaWJlcm5hdGUtcmVzdW1lLmMKK0BAIC00NSw3ICs0NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3N5cy9wb3dlci9yZXN1bWUiLCBtYWpvcl9taW5vciwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKCIvc3lzL3Bvd2VyL3Jlc3VtZSIsIG1ham9yX21pbm9yLCAwKTsKKyAgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgICBsb2dfZXJyb3JfZXJybm8ociwgIkZhaWxlZCB0byB3cml0ZSAnJXMnIHRvIC9zeXMvcG93ZXIvcmVzdW1lOiAlbSIsIG1ham9yX21pbm9yKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKK2RpZmYgLS1naXQgYS9zcmMvbGlic3lzdGVtZC9zZC1kZXZpY2Uvc2QtZGV2aWNlLmMgYi9zcmMvbGlic3lzdGVtZC9zZC1kZXZpY2Uvc2QtZGV2aWNlLmMKK2luZGV4IGM0YTdmMmYzZDMuLmJjYWM3NTgyODQgMTAwNjQ0CistLS0gYS9zcmMvbGlic3lzdGVtZC9zZC1kZXZpY2Uvc2QtZGV2aWNlLmMKKysrKyBiL3NyYy9saWJzeXN0ZW1kL3NkLWRldmljZS9zZC1kZXZpY2UuYworQEAgLTE4NDksNyArMTg0OSw3IEBAIF9wdWJsaWNfIGludCBzZF9kZXZpY2Vfc2V0X3N5c2F0dHJfdmFsdWUoc2RfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKnN5c2F0dHIsCisgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZShwYXRoLCB2YWx1ZSwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIgfCBXUklURV9TVFJJTkdfRklMRV9OT0ZPTExPVyk7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUocGF0aCwgdmFsdWUsIDAgfCBXUklURV9TVFJJTkdfRklMRV9OT0ZPTExPVyk7CisgICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgICAgICAgaWYgKHIgPT0gLUVMT09QKQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworZGlmZiAtLWdpdCBhL3NyYy9sb2dpbi9sb2dpbmQtZGJ1cy5jIGIvc3JjL2xvZ2luL2xvZ2luZC1kYnVzLmMKK2luZGV4IDMwYjlhNjYzMzQuLmNjMWQ1Nzc5MzMgMTAwNjQ0CistLS0gYS9zcmMvbG9naW4vbG9naW5kLWRidXMuYworKysrIGIvc3JjL2xvZ2luL2xvZ2luZC1kYnVzLmMKK0BAIC0xMzI1LDcgKzEzMjUsNyBAQCBzdGF0aWMgaW50IHRyaWdnZXJfZGV2aWNlKE1hbmFnZXIgKm0sIHNkX2RldmljZSAqZCkgeworICAgICAgICAgICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgCistICAgICAgICAgICAgICAgICh2b2lkKSB3cml0ZV9zdHJpbmdfZmlsZSh0LCAiY2hhbmdlIiwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgICAgICAgICAodm9pZCkgd3JpdGVfc3RyaW5nX2ZpbGUodCwgImNoYW5nZSIsIDApOworICAgICAgICAgfQorIAorICAgICAgICAgcmV0dXJuIDA7CitkaWZmIC0tZ2l0IGEvc3JjL25zcGF3bi9uc3Bhd24tY2dyb3VwLmMgYi9zcmMvbnNwYXduL25zcGF3bi1jZ3JvdXAuYworaW5kZXggMDQ2MmI0NjQxMy4uN2M1M2Q0MTQ4MyAxMDA2NDQKKy0tLSBhL3NyYy9uc3Bhd24vbnNwYXduLWNncm91cC5jCisrKysgYi9zcmMvbnNwYXduL25zcGF3bi1jZ3JvdXAuYworQEAgLTEyMyw3ICsxMjMsNyBAQCBpbnQgc3luY19jZ3JvdXAocGlkX3QgcGlkLCBDR3JvdXBVbmlmaWVkIHVuaWZpZWRfcmVxdWVzdGVkLCB1aWRfdCB1aWRfc2hpZnQpIHsKKyAgICAgICAgIGZuID0gc3Ryam9pbmEodHJlZSwgY2dyb3VwLCAiL2Nncm91cC5wcm9jcyIpOworIAorICAgICAgICAgc3ByaW50ZihwaWRfc3RyaW5nLCBQSURfRk1ULCBwaWQpOworLSAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKGZuLCBwaWRfc3RyaW5nLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUnxXUklURV9TVFJJTkdfRklMRV9NS0RJUl8wNzU1KTsKKysgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZShmbiwgcGlkX3N0cmluZywgV1JJVEVfU1RSSU5HX0ZJTEVfTUtESVJfMDc1NSk7CisgICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgICAgICAgbG9nX2Vycm9yX2Vycm5vKHIsICJGYWlsZWQgdG8gbW92ZSBwcm9jZXNzOiAlbSIpOworICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKK2RpZmYgLS1naXQgYS9zcmMvbnNwYXduL25zcGF3bi5jIGIvc3JjL25zcGF3bi9uc3Bhd24uYworaW5kZXggMmFlYzgwNDFmMC4uODQxNTQyZjJmMyAxMDA2NDQKKy0tLSBhL3NyYy9uc3Bhd24vbnNwYXduLmMKKysrKyBiL3NyYy9uc3Bhd24vbnNwYXduLmMKK0BAIC0yMzU3LDcgKzIzNTcsNyBAQCBzdGF0aWMgaW50IHJlc2V0X2F1ZGl0X2xvZ2ludWlkKHZvaWQpIHsKKyAgICAgICAgIGlmIChzdHJlcShwLCAiNDI5NDk2NzI5NSIpKQorICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3Byb2Mvc2VsZi9sb2dpbnVpZCIsICI0Mjk0OTY3Mjk1IiwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKCIvcHJvYy9zZWxmL2xvZ2ludWlkIiwgIjQyOTQ5NjcyOTUiLCAwKTsKKyAgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgICBsb2dfZXJyb3JfZXJybm8ociwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVzZXQgYXVkaXQgbG9naW4gVUlELiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91ciBrZXJuZWwgaXMgdG9vXG4iCitAQCAtMzU2NiwxMyArMzU2NiwxMyBAQCBzdGF0aWMgaW50IHNldHVwX3VpZF9tYXAocGlkX3QgcGlkKSB7CisgCisgICAgICAgICB4c3ByaW50Zih1aWRfbWFwLCAiL3Byb2MvIiBQSURfRk1UICIvdWlkX21hcCIsIHBpZCk7CisgICAgICAgICB4c3ByaW50ZihsaW5lLCBVSURfRk1UICIgIiBVSURfRk1UICIgIiBVSURfRk1UICJcbiIsIDAsIGFyZ191aWRfc2hpZnQsIGFyZ191aWRfcmFuZ2UpOworLSAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKHVpZF9tYXAsIGxpbmUsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSh1aWRfbWFwLCBsaW5lLCAwKTsKKyAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19lcnJvcl9lcnJubyhyLCAiRmFpbGVkIHRvIHdyaXRlIFVJRCBtYXA6ICVtIik7CisgCisgICAgICAgICAvKiBXZSBhbHdheXMgYXNzaWduIHRoZSBzYW1lIFVJRCBhbmQgR0lEIHJhbmdlcyAqLworICAgICAgICAgeHNwcmludGYodWlkX21hcCwgIi9wcm9jLyIgUElEX0ZNVCAiL2dpZF9tYXAiLCBwaWQpOworLSAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKHVpZF9tYXAsIGxpbmUsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSh1aWRfbWFwLCBsaW5lLCAwKTsKKyAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19lcnJvcl9lcnJubyhyLCAiRmFpbGVkIHRvIHdyaXRlIEdJRCBtYXA6ICVtIik7CisgCitkaWZmIC0tZ2l0IGEvc3JjL3NoYXJlZC9zeXNjdGwtdXRpbC5jIGIvc3JjL3NoYXJlZC9zeXNjdGwtdXRpbC5jCitpbmRleCA5M2JkY2YxMWJmLi42OGNkZGI3YTlmIDEwMDY0NAorLS0tIGEvc3JjL3NoYXJlZC9zeXNjdGwtdXRpbC5jCisrKysgYi9zcmMvc2hhcmVkL3N5c2N0bC11dGlsLmMKK0BAIC04OCw3ICs4OCw3IEBAIGludCBzeXNjdGxfd3JpdGVfaXBfcHJvcGVydHkoaW50IGFmLCBjb25zdCBjaGFyICppZm5hbWUsIGNvbnN0IGNoYXIgKnByb3BlcnR5LCBjCisgCisgICAgICAgICBsb2dfZGVidWcoIlNldHRpbmcgJyVzJyB0byAnJXMnIiwgcCwgdmFsdWUpOworIAorLSAgICAgICAgcmV0dXJuIHdyaXRlX3N0cmluZ19maWxlKHAsIHZhbHVlLCBXUklURV9TVFJJTkdfRklMRV9WRVJJRllfT05fRkFJTFVSRSB8IFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHJldHVybiB3cml0ZV9zdHJpbmdfZmlsZShwLCB2YWx1ZSwgV1JJVEVfU1RSSU5HX0ZJTEVfVkVSSUZZX09OX0ZBSUxVUkUgfCAwKTsKKyB9CisgCisgaW50IHN5c2N0bF9yZWFkKGNvbnN0IGNoYXIgKnByb3BlcnR5LCBjaGFyICoqY29udGVudCkgeworZGlmZiAtLWdpdCBhL3NyYy9zbGVlcC9zbGVlcC5jIGIvc3JjL3NsZWVwL3NsZWVwLmMKK2luZGV4IGI5ZmU5NjYzNWQuLmYxNjhkN2Y4OTAgMTAwNjQ0CistLS0gYS9zcmMvc2xlZXAvc2xlZXAuYworKysrIGIvc3JjL3NsZWVwL3NsZWVwLmMKK0BAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyBpbnQgd3JpdGVfaGliZXJuYXRlX2xvY2F0aW9uX2luZm8odm9pZCkgeworIAorICAgICAgICAgLyogaWYgaXQncyBhIHN3YXAgcGFydGl0aW9uLCB3ZSBqdXN0IHdyaXRlIHRoZSBkaXNrIHRvIC9zeXMvcG93ZXIvcmVzdW1lICovCisgICAgICAgICBpZiAoc3RyZXEodHlwZSwgInBhcnRpdGlvbiIpKSB7CistICAgICAgICAgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3N5cy9wb3dlci9yZXN1bWUiLCBkZXZpY2UsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgICAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKCIvc3lzL3Bvd2VyL3Jlc3VtZSIsIGRldmljZSwgMCk7CisgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX2RlYnVnX2Vycm5vKHIsICJGYWlsZWQgdG8gd3JpdGUgcGFydGl0aW9uIGRldmljZSB0byAvc3lzL3Bvd2VyL3Jlc3VtZTogJW0iKTsKKyAKK0BAIC05OCwxNCArOTgsMTQgQEAgc3RhdGljIGludCB3cml0ZV9oaWJlcm5hdGVfbG9jYXRpb25faW5mbyh2b2lkKSB7CisgCisgICAgICAgICBvZmZzZXQgPSBmaWVtYXAtPmZtX2V4dGVudHNbMF0uZmVfcGh5c2ljYWwgLyBwYWdlX3NpemUoKTsKKyAgICAgICAgIHhzcHJpbnRmKG9mZnNldF9zdHIsICIlIiBQUkl1NjQsIG9mZnNldCk7CistICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9zeXMvcG93ZXIvcmVzdW1lX29mZnNldCIsIG9mZnNldF9zdHIsIFdSSVRFX1NUUklOR19GSUxFX0RJU0FCTEVfQlVGRkVSKTsKKysgICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3N5cy9wb3dlci9yZXN1bWVfb2Zmc2V0Iiwgb2Zmc2V0X3N0ciwgMCk7CisgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfZGVidWdfZXJybm8ociwgIkZhaWxlZCB0byB3cml0ZSBvZmZzZXQgJyVzJzogJW0iLCBvZmZzZXRfc3RyKTsKKyAKKyAgICAgICAgIGxvZ19kZWJ1ZygiV3JvdGUgY2FsY3VsYXRlZCByZXN1bWVfb2Zmc2V0IHZhbHVlIHRvIC9zeXMvcG93ZXIvcmVzdW1lX29mZnNldDogJXMiLCBvZmZzZXRfc3RyKTsKKyAKKyAgICAgICAgIHhzcHJpbnRmKGRldmljZV9zdHIsICIlbHgiLCAodW5zaWduZWQgbG9uZylzdGIuc3RfZGV2KTsKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3N5cy9wb3dlci9yZXN1bWUiLCBkZXZpY2Vfc3RyLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9zeXMvcG93ZXIvcmVzdW1lIiwgZGV2aWNlX3N0ciwgMCk7CisgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfZGVidWdfZXJybm8ociwgIkZhaWxlZCB0byB3cml0ZSBkZXZpY2UgJyVzJzogJW0iLCBkZXZpY2Vfc3RyKTsKKyAKK0BAIC0xMjEsNyArMTIxLDcgQEAgc3RhdGljIGludCB3cml0ZV9tb2RlKGNoYXIgKiptb2RlcykgeworICAgICAgICAgU1RSVl9GT1JFQUNIKG1vZGUsIG1vZGVzKSB7CisgICAgICAgICAgICAgICAgIGludCBrOworIAorLSAgICAgICAgICAgICAgICBrID0gd3JpdGVfc3RyaW5nX2ZpbGUoIi9zeXMvcG93ZXIvZGlzayIsICptb2RlLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICAgICAgICAgIGsgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3N5cy9wb3dlci9kaXNrIiwgKm1vZGUsIDApOworICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworIAorQEAgLTE0MCw3ICsxNDAsNyBAQCBzdGF0aWMgaW50IHdyaXRlX3N0YXRlKEZJTEUgKipmLCBjaGFyICoqc3RhdGVzKSB7CisgICAgICAgICBTVFJWX0ZPUkVBQ0goc3RhdGUsIHN0YXRlcykgeworICAgICAgICAgICAgICAgICBpbnQgazsKKyAKKy0gICAgICAgICAgICAgICAgayA9IHdyaXRlX3N0cmluZ19zdHJlYW0oKmYsICpzdGF0ZSwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgICAgICAgICBrID0gd3JpdGVfc3RyaW5nX3N0cmVhbSgqZiwgKnN0YXRlLCAwKTsKKyAgICAgICAgICAgICAgICAgaWYgKGsgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgbG9nX2RlYnVnX2Vycm5vKGssICJGYWlsZWQgdG8gd3JpdGUgJyVzJyB0byAvc3lzL3Bvd2VyL3N0YXRlOiAlbSIsICpzdGF0ZSk7CitkaWZmIC0tZ2l0IGEvc3JjL3VkZXYvdWRldmFkbS10cmlnZ2VyLmMgYi9zcmMvdWRldi91ZGV2YWRtLXRyaWdnZXIuYworaW5kZXggNzdkOTVlNTEzZi4uMjVjZTRhYmZiMSAxMDA2NDQKKy0tLSBhL3NyYy91ZGV2L3VkZXZhZG0tdHJpZ2dlci5jCisrKysgYi9zcmMvdWRldi91ZGV2YWRtLXRyaWdnZXIuYworQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIGludCBleGVjX2xpc3Qoc2RfZGV2aWNlX2VudW1lcmF0b3IgKmUsIGNvbnN0IGNoYXIgKmFjdGlvbiwgU2V0ICpzZXR0bGVfc2UKKyAgICAgICAgICAgICAgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworIAorLSAgICAgICAgICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoZmlsZW5hbWUsIGFjdGlvbiwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoZmlsZW5hbWUsIGFjdGlvbiwgMCk7CisgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19mdWxsX2Vycm5vKHIgPT0gLUVOT0VOVCA/IExPR19ERUJVRyA6IExPR19FUlIsIHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byB3cml0ZSAnJXMnIHRvICclcyc6ICVtIiwgYWN0aW9uLCBmaWxlbmFtZSk7CitkaWZmIC0tZ2l0IGEvc3JjL3VkZXYvdWRldmQuYyBiL3NyYy91ZGV2L3VkZXZkLmMKK2luZGV4IGNiNTEyMzA0MmEuLmVhMzA5YTllN2YgMTAwNjQ0CistLS0gYS9zcmMvdWRldi91ZGV2ZC5jCisrKysgYi9zcmMvdWRldi91ZGV2ZC5jCitAQCAtMTExMyw3ICsxMTEzLDcgQEAgc3RhdGljIGludCBzeW50aGVzaXplX2NoYW5nZV9vbmUoc2RfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnN5c3BhdGgpIHsKKyAKKyAgICAgICAgIGZpbGVuYW1lID0gc3Ryam9pbmEoc3lzcGF0aCwgIi91ZXZlbnQiKTsKKyAgICAgICAgIGxvZ19kZXZpY2VfZGVidWcoZGV2LCAiZGV2aWNlIGlzIGNsb3NlZCwgc3ludGhlc2lzaW5nICdjaGFuZ2UnIG9uICVzIiwgc3lzcGF0aCk7CistICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoZmlsZW5hbWUsICJjaGFuZ2UiLCBXUklURV9TVFJJTkdfRklMRV9ESVNBQkxFX0JVRkZFUik7CisrICAgICAgICByID0gd3JpdGVfc3RyaW5nX2ZpbGUoZmlsZW5hbWUsICJjaGFuZ2UiLCAwKTsKKyAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19kZXZpY2VfZGVidWdfZXJybm8oZGV2LCByLCAiRmFpbGVkIHRvIHdyaXRlICdjaGFuZ2UnIHRvICVzOiAlbSIsIGZpbGVuYW1lKTsKKyAgICAgICAgIHJldHVybiAwOworZGlmZiAtLWdpdCBhL3NyYy92Y29uc29sZS92Y29uc29sZS1zZXR1cC5jIGIvc3JjL3Zjb25zb2xlL3Zjb25zb2xlLXNldHVwLmMKK2luZGV4IDc1ZDA1MmFlNzAuLjVhMTVjOTM5ZDggMTAwNjQ0CistLS0gYS9zcmMvdmNvbnNvbGUvdmNvbnNvbGUtc2V0dXAuYworKysrIGIvc3JjL3Zjb25zb2xlL3Zjb25zb2xlLXNldHVwLmMKK0BAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIGludCB0b2dnbGVfdXRmOF92Yyhjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQsIGJvb2wgdXRmOCkgeworIHN0YXRpYyBpbnQgdG9nZ2xlX3V0Zjhfc3lzZnMoYm9vbCB1dGY4KSB7CisgICAgICAgICBpbnQgcjsKKyAKKy0gICAgICAgIHIgPSB3cml0ZV9zdHJpbmdfZmlsZSgiL3N5cy9tb2R1bGUvdnQvcGFyYW1ldGVycy9kZWZhdWx0X3V0ZjgiLCBvbmVfemVybyh1dGY4KSwgV1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgciA9IHdyaXRlX3N0cmluZ19maWxlKCIvc3lzL21vZHVsZS92dC9wYXJhbWV0ZXJzL2RlZmF1bHRfdXRmOCIsIG9uZV96ZXJvKHV0ZjgpLCAwKTsKKyAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ193YXJuaW5nX2Vycm5vKHIsICJGYWlsZWQgdG8gJXMgc3lzZnMgVVRGLTggZmxhZzogJW0iLCBlbmFibGVfZGlzYWJsZSh1dGY4KSk7CisgCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDItZG9uLXQtdXNlLWdsaWJjLXNwZWNpZmljLXFzb3J0X3IucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDItZG9uLXQtdXNlLWdsaWJjLXNwZWNpZmljLXFzb3J0X3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyMTNhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwMi1kb24tdC11c2UtZ2xpYmMtc3BlY2lmaWMtcXNvcnRfci5wYXRjaApAQCAtMCwwICsxLDE2MyBAQAorRnJvbSAxZWI4NDUzNGRlYTA1ZDQxYWZlZDFkODk4Y2JhMjEyYWQ3ZDMxMGRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyNSBGZWIgMjAxOSAxMzo0MTo0MSArMDgwMAorU3ViamVjdDogW1BBVENIIDAyLzI0XSBkb24ndCB1c2UgZ2xpYmMtc3BlY2lmaWMgcXNvcnRfcgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitbUmViYXNlZCBmb3IgdjI0MV0KK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1tSZWJhc2VkIGZvciB2MjQyXQorU2lnbmVkLW9mZi1ieTogQW5kcmVqIFZhbGVrIDxhbmRyZWoudmFsZWtAc2llbWVucy5jb20+CistLS0KKyBzcmMvYmFzaWMvc29ydC11dGlsLmggICAgICAgICAgICAgIHwgMTQgLS0tLS0tLS0tLS0tLS0KKyBzcmMvbGlic3lzdGVtZC9zZC1od2RiL2h3ZGItdXRpbC5jIHwgMTkgKysrKysrKysrKysrKystLS0tLQorIHNyYy9zaGFyZWQvZm9ybWF0LXRhYmxlLmMgICAgICAgICAgfCAzNiArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3NvcnQtdXRpbC5oIGIvc3JjL2Jhc2ljL3NvcnQtdXRpbC5oCitpbmRleCBlMDI5Zjg2NDZlLi4yN2Q2OGIzNDFjIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3NvcnQtdXRpbC5oCisrKysgYi9zcmMvYmFzaWMvc29ydC11dGlsLmgKK0BAIC01NCwxNyArNTQsMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcXNvcnRfc2FmZSh2b2lkICpiYXNlLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLCBfX2NvbXBhcl9mbgorICAgICAgICAgICAgICAgICBpbnQgKCpfZnVuY18pKGNvbnN0IHR5cGVvZihwWzBdKSosIGNvbnN0IHR5cGVvZihwWzBdKSopID0gZnVuYzsgXAorICAgICAgICAgICAgICAgICBxc29ydF9zYWZlKChwKSwgKG4pLCBzaXplb2YoKHApWzBdKSwgKF9fY29tcGFyX2ZuX3QpIF9mdW5jXyk7IFwKKyAgICAgICAgIH0pCistCistc3RhdGljIGlubGluZSB2b2lkIHFzb3J0X3Jfc2FmZSh2b2lkICpiYXNlLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLCBfX2NvbXBhcl9kX2ZuX3QgY29tcGFyLCB2b2lkICp1c2VyZGF0YSkgeworLSAgICAgICAgaWYgKG5tZW1iIDw9IDEpCistICAgICAgICAgICAgICAgIHJldHVybjsKKy0KKy0gICAgICAgIGFzc2VydChiYXNlKTsKKy0gICAgICAgIHFzb3J0X3IoYmFzZSwgbm1lbWIsIHNpemUsIGNvbXBhciwgdXNlcmRhdGEpOworLX0KKy0KKy0jZGVmaW5lIHR5cGVzYWZlX3Fzb3J0X3IocCwgbiwgZnVuYywgdXNlcmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICBpbnQgKCpfZnVuY18pKGNvbnN0IHR5cGVvZihwWzBdKSosIGNvbnN0IHR5cGVvZihwWzBdKSosIHR5cGVvZih1c2VyZGF0YSkpID0gZnVuYzsgXAorLSAgICAgICAgICAgICAgICBxc29ydF9yX3NhZmUoKHApLCAobiksIHNpemVvZigocClbMF0pLCAoX19jb21wYXJfZF9mbl90KSBfZnVuY18sIHVzZXJkYXRhKTsgXAorLSAgICAgICAgfSkKK2RpZmYgLS1naXQgYS9zcmMvbGlic3lzdGVtZC9zZC1od2RiL2h3ZGItdXRpbC5jIGIvc3JjL2xpYnN5c3RlbWQvc2QtaHdkYi9od2RiLXV0aWwuYworaW5kZXggYzgzNTc1YzdjOC4uNzJmOGYzYTA1MCAxMDA2NDQKKy0tLSBhL3NyYy9saWJzeXN0ZW1kL3NkLWh3ZGIvaHdkYi11dGlsLmMKKysrKyBiL3NyYy9saWJzeXN0ZW1kL3NkLWh3ZGIvaHdkYi11dGlsLmMKK0BAIC0xMjgsOSArMTI4LDEzIEBAIHN0YXRpYyB2b2lkIHRyaWVfZnJlZShzdHJ1Y3QgdHJpZSAqdHJpZSkgeworIAorIERFRklORV9UUklWSUFMX0NMRUFOVVBfRlVOQyhzdHJ1Y3QgdHJpZSosIHRyaWVfZnJlZSk7CisgCistc3RhdGljIGludCB0cmllX3ZhbHVlc19jbXAoY29uc3Qgc3RydWN0IHRyaWVfdmFsdWVfZW50cnkgKmEsIGNvbnN0IHN0cnVjdCB0cmllX3ZhbHVlX2VudHJ5ICpiLCBzdHJ1Y3QgdHJpZSAqdHJpZSkgeworLSAgICAgICAgcmV0dXJuIHN0cmNtcCh0cmllLT5zdHJpbmdzLT5idWYgKyBhLT5rZXlfb2ZmLAorLSAgICAgICAgICAgICAgICAgICAgICB0cmllLT5zdHJpbmdzLT5idWYgKyBiLT5rZXlfb2ZmKTsKKytzdGF0aWMgc3RydWN0IHRyaWUgKnRyaWVfbm9kZV9hZGRfdmFsdWVfdHJpZTsKKytzdGF0aWMgaW50IHRyaWVfdmFsdWVzX2NtcChjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpIHsKKysgICAgICAgIGNvbnN0IHN0cnVjdCB0cmllX3ZhbHVlX2VudHJ5ICphID0gdjE7CisrICAgICAgICBjb25zdCBzdHJ1Y3QgdHJpZV92YWx1ZV9lbnRyeSAqYiA9IHYyOworKworKyAgICAgICAgcmV0dXJuIHN0cmNtcCh0cmllX25vZGVfYWRkX3ZhbHVlX3RyaWUtPnN0cmluZ3MtPmJ1ZiArIGEtPmtleV9vZmYsCisrICAgICAgICAgICAgICAgICAgICAgIHRyaWVfbm9kZV9hZGRfdmFsdWVfdHJpZS0+c3RyaW5ncy0+YnVmICsgYi0+a2V5X29mZik7CisgfQorIAorIHN0YXRpYyBpbnQgdHJpZV9ub2RlX2FkZF92YWx1ZShzdHJ1Y3QgdHJpZSAqdHJpZSwgc3RydWN0IHRyaWVfbm9kZSAqbm9kZSwKK0BAIC0xNTgsNyArMTYyLDEwIEBAIHN0YXRpYyBpbnQgdHJpZV9ub2RlX2FkZF92YWx1ZShzdHJ1Y3QgdHJpZSAqdHJpZSwgc3RydWN0IHRyaWVfbm9kZSAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVfb2ZmID0gdiwKKyAgICAgICAgICAgICAgICAgfTsKKyAKKy0gICAgICAgICAgICAgICAgdmFsID0gdHlwZXNhZmVfYnNlYXJjaF9yKCZzZWFyY2gsIG5vZGUtPnZhbHVlcywgbm9kZS0+dmFsdWVzX2NvdW50LCB0cmllX3ZhbHVlc19jbXAsIHRyaWUpOworKyAgICAgICAgICAgICAgICB0cmllX25vZGVfYWRkX3ZhbHVlX3RyaWUgPSB0cmllOworKyAgICAgICAgICAgICAgICB2YWwgPSBic2VhcmNoKCZzZWFyY2gsIG5vZGUtPnZhbHVlcywgbm9kZS0+dmFsdWVzX2NvdW50LCBzaXplb2Yoc3RydWN0IHRyaWVfdmFsdWVfZW50cnkpLCB0cmllX3ZhbHVlc19jbXApOworKyAgICAgICAgICAgICAgICB0cmllX25vZGVfYWRkX3ZhbHVlX3RyaWUgPSBOVUxMOworKworICAgICAgICAgICAgICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIDIgaWRlbnRpY2FsIHByb3BlcnRpZXMgb24gdGhlIHNhbWUgbWF0Y2gtc3RyaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNpbmNlIHdlIHByb2Nlc3MgZmlsZXMgaW4gb3JkZXIsIHdlIGp1c3QgcmVwbGFjZSB0aGUgcHJldmlvdXMgdmFsdWUuICovCitAQCAtMTg0LDcgKzE5MSw5IEBAIHN0YXRpYyBpbnQgdHJpZV9ub2RlX2FkZF92YWx1ZShzdHJ1Y3QgdHJpZSAqdHJpZSwgc3RydWN0IHRyaWVfbm9kZSAqbm9kZSwKKyAgICAgICAgICAgICAgICAgLmxpbmVfbnVtYmVyID0gbGluZV9udW1iZXIsCisgICAgICAgICB9OworICAgICAgICAgbm9kZS0+dmFsdWVzX2NvdW50Kys7CistICAgICAgICB0eXBlc2FmZV9xc29ydF9yKG5vZGUtPnZhbHVlcywgbm9kZS0+dmFsdWVzX2NvdW50LCB0cmllX3ZhbHVlc19jbXAsIHRyaWUpOworKyAgICAgICAgdHJpZV9ub2RlX2FkZF92YWx1ZV90cmllID0gdHJpZTsKKysgICAgICAgIHFzb3J0KG5vZGUtPnZhbHVlcywgbm9kZS0+dmFsdWVzX2NvdW50LCBzaXplb2Yoc3RydWN0IHRyaWVfdmFsdWVfZW50cnkpLCB0cmllX3ZhbHVlc19jbXApOworKyAgICAgICAgdHJpZV9ub2RlX2FkZF92YWx1ZV90cmllID0gTlVMTDsKKyAgICAgICAgIHJldHVybiAwOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2Zvcm1hdC10YWJsZS5jIGIvc3JjL3NoYXJlZC9mb3JtYXQtdGFibGUuYworaW5kZXggYTVjMGE5OWIwOC4uZDU5NWNiZTM3MiAxMDA2NDQKKy0tLSBhL3NyYy9zaGFyZWQvZm9ybWF0LXRhYmxlLmMKKysrKyBiL3NyYy9zaGFyZWQvZm9ybWF0LXRhYmxlLmMKK0BAIC04NTAsMzEgKzg1MCwzMyBAQCBzdGF0aWMgaW50IGNlbGxfZGF0YV9jb21wYXJlKFRhYmxlRGF0YSAqYSwgc2l6ZV90IGluZGV4X2EsIFRhYmxlRGF0YSAqYiwgc2l6ZV90CisgICAgICAgICByZXR1cm4gQ01QKGluZGV4X2EsIGluZGV4X2IpOworIH0KKyAKKy1zdGF0aWMgaW50IHRhYmxlX2RhdGFfY29tcGFyZShjb25zdCBzaXplX3QgKmEsIGNvbnN0IHNpemVfdCAqYiwgVGFibGUgKnQpIHsKKytzdGF0aWMgVGFibGUgKnVzZXJfdGFibGU7Cisrc3RhdGljIGludCB0YWJsZV9kYXRhX2NvbXBhcmUoY29uc3Qgdm9pZCAqeCwgY29uc3Qgdm9pZCAqeSkgeworKyAgICAgICAgY29uc3Qgc2l6ZV90ICphID0geCwgKmI9eTsKKyAgICAgICAgIHNpemVfdCBpOworICAgICAgICAgaW50IHI7CisgCistICAgICAgICBhc3NlcnQodCk7CistICAgICAgICBhc3NlcnQodC0+c29ydF9tYXApOworKyAgICAgICAgYXNzZXJ0KHVzZXJfdGFibGUpOworKyAgICAgICAgYXNzZXJ0KHVzZXJfdGFibGUtPnNvcnRfbWFwKTsKKyAKKyAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgaGVhZGVyIHN0YXlzIGF0IHRoZSBiZWdpbm5pbmcgKi8KKy0gICAgICAgIGlmICgqYSA8IHQtPm5fY29sdW1ucyAmJiAqYiA8IHQtPm5fY29sdW1ucykKKysgICAgICAgIGlmICgqYSA8IHVzZXJfdGFibGUtPm5fY29sdW1ucyAmJiAqYiA8IHVzZXJfdGFibGUtPm5fY29sdW1ucykKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CistICAgICAgICBpZiAoKmEgPCB0LT5uX2NvbHVtbnMpCisrICAgICAgICBpZiAoKmEgPCB1c2VyX3RhYmxlLT5uX2NvbHVtbnMpCisgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKy0gICAgICAgIGlmICgqYiA8IHQtPm5fY29sdW1ucykKKysgICAgICAgIGlmICgqYiA8IHVzZXJfdGFibGUtPm5fY29sdW1ucykKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgCisgICAgICAgICAvKiBPcmRlciBvdGhlciBsaW5lcyBieSB0aGUgc29ydGluZyBtYXAgKi8KKy0gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0LT5uX3NvcnRfbWFwOyBpKyspIHsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCB1c2VyX3RhYmxlLT5uX3NvcnRfbWFwOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgVGFibGVEYXRhICpkLCAqZGQ7CisgCistICAgICAgICAgICAgICAgIGQgPSB0LT5kYXRhWyphICsgdC0+c29ydF9tYXBbaV1dOworLSAgICAgICAgICAgICAgICBkZCA9IHQtPmRhdGFbKmIgKyB0LT5zb3J0X21hcFtpXV07CisrICAgICAgICAgICAgICAgIGQgPSB1c2VyX3RhYmxlLT5kYXRhWyphICsgdXNlcl90YWJsZS0+c29ydF9tYXBbaV1dOworKyAgICAgICAgICAgICAgICBkZCA9IHVzZXJfdGFibGUtPmRhdGFbKmIgKyB1c2VyX3RhYmxlLT5zb3J0X21hcFtpXV07CisgCisgICAgICAgICAgICAgICAgIHIgPSBjZWxsX2RhdGFfY29tcGFyZShkLCAqYSwgZGQsICpiKTsKKyAgICAgICAgICAgICAgICAgaWYgKHIgIT0gMCkKKy0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC0+cmV2ZXJzZV9tYXAgJiYgdC0+cmV2ZXJzZV9tYXBbdC0+c29ydF9tYXBbaV1dID8gLXIgOiByOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyX3RhYmxlLT5yZXZlcnNlX21hcCAmJiB1c2VyX3RhYmxlLT5yZXZlcnNlX21hcFt1c2VyX3RhYmxlLT5zb3J0X21hcFtpXV0gPyAtciA6IHI7CisgICAgICAgICB9CisgCisgICAgICAgICAvKiBPcmRlciBpZGVudGljYWwgbGluZXMgYnkgdGhlIG9yZGVyIHRoZXJlIHdlcmUgb3JpZ2luYWxseSBhZGRlZCBpbiAqLworQEAgLTExMDcsNyArMTEwOSwxMiBAQCBpbnQgdGFibGVfcHJpbnQoVGFibGUgKnQsIEZJTEUgKmYpIHsKKyAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5fcm93czsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZFtpXSA9IGkgKiB0LT5uX2NvbHVtbnM7CisgCistICAgICAgICAgICAgICAgIHR5cGVzYWZlX3Fzb3J0X3Ioc29ydGVkLCBuX3Jvd3MsIHRhYmxlX2RhdGFfY29tcGFyZSwgdCk7CisrICAgICAgICAgICAgICAgIGlmIChuX3Jvd3MgPD0gMSkKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICAgICAgYXNzZXJ0KHNvcnRlZCk7CisrICAgICAgICAgICAgICAgIHVzZXJfdGFibGUgPSB0OworKyAgICAgICAgICAgICAgICBxc29ydChzb3J0ZWQsIG5fcm93cywgc2l6ZW9mKHNpemVfdCksIHRhYmxlX2RhdGFfY29tcGFyZSk7CisrICAgICAgICAgICAgICAgIHVzZXJfdGFibGUgPSBOVUxMOworICAgICAgICAgfQorIAorICAgICAgICAgaWYgKHQtPmRpc3BsYXlfbWFwKQorQEAgLTE1MzQsNyArMTU0MSwxMiBAQCBpbnQgdGFibGVfdG9fanNvbihUYWJsZSAqdCwgSnNvblZhcmlhbnQgKipyZXQpIHsKKyAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5fcm93czsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZFtpXSA9IGkgKiB0LT5uX2NvbHVtbnM7CisgCistICAgICAgICAgICAgICAgIHR5cGVzYWZlX3Fzb3J0X3Ioc29ydGVkLCBuX3Jvd3MsIHRhYmxlX2RhdGFfY29tcGFyZSwgdCk7CisrICAgICAgICAgICAgICAgIGlmIChuX3Jvd3MgPD0gMSkKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICAgICAgYXNzZXJ0KHNvcnRlZCk7CisrICAgICAgICAgICAgICAgIHVzZXJfdGFibGUgPSB0OworKyAgICAgICAgICAgICAgICBxc29ydChzb3J0ZWQsIG5fcm93cywgc2l6ZW9mKHNpemVfdCksIHRhYmxlX2RhdGFfY29tcGFyZSk7CisrICAgICAgICAgICAgICAgIHVzZXJfdGFibGUgPSBOVUxMOworICAgICAgICAgfQorIAorICAgICAgICAgaWYgKHQtPmRpc3BsYXlfbWFwKQorLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDAyLXNyYy1sb2dpbi1icmlnaHRuZXNzLmMtaW5jbHVkZS1zeXMtd2FpdC5oLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDAyLXNyYy1sb2dpbi1icmlnaHRuZXNzLmMtaW5jbHVkZS1zeXMtd2FpdC5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYWU2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDItc3JjLWxvZ2luLWJyaWdodG5lc3MuYy1pbmNsdWRlLXN5cy13YWl0LmgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorSW5jbHVkZSBzeXMvd2FpdC5oCisKK0ZpeGVzOgorc3JjL2xvZ2luL2xvZ2luZC1icmlnaHRuZXNzLmM6MTU4Ojg1OiBlcnJvcjogJ1dFWElURUQnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKTsgZGlkIHlvdSBtZWFuICdXSUZFWElURUQnPworICAxNTggfCAgICAgICAgIHIgPSBzZF9ldmVudF9hZGRfY2hpbGQody0+bWFuYWdlci0+ZXZlbnQsICZ3LT5jaGlsZF9ldmVudF9zb3VyY2UsIHctPmNoaWxkLCBXRVhJVEVELCBvbl9icmlnaHRuZXNzX3dyaXRlcl9leGl0LCB3KTsKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgTXVycmF5IDxzY290dC5tdXJyYXlAa29uc3Vsa28uY29tPgorLS0tCisgc3JjL2xvZ2luL2xvZ2luZC1icmlnaHRuZXNzLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9sb2dpbi9sb2dpbmQtYnJpZ2h0bmVzcy5jIGIvc3JjL2xvZ2luL2xvZ2luZC1icmlnaHRuZXNzLmMKK2luZGV4IDhkZmE5N2Q3YWUuLmJkZGQ0YTI3MjcgMTAwNjQ0CistLS0gYS9zcmMvbG9naW4vbG9naW5kLWJyaWdodG5lc3MuYworKysrIGIvc3JjL2xvZ2luL2xvZ2luZC1icmlnaHRuZXNzLmMKK0BAIC0xLDUgKzEsNiBAQAorIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSsgKi8KKyAKKysjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSAiYnVzLXV0aWwuaCIKKyAjaW5jbHVkZSAiZGV2aWNlLXV0aWwuaCIKKyAjaW5jbHVkZSAiaGFzaC1mdW5jcy5oIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDAzLW1pc3NpbmdfdHlwZS5oLWFkZC1fX2NvbXBhcmVfZm5fdC1hbmQtY29tcGFyaXNvbl9mbl8ucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDMtbWlzc2luZ190eXBlLmgtYWRkLV9fY29tcGFyZV9mbl90LWFuZC1jb21wYXJpc29uX2ZuXy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTM5ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDAzLW1pc3NpbmdfdHlwZS5oLWFkZC1fX2NvbXBhcmVfZm5fdC1hbmQtY29tcGFyaXNvbl9mbl8ucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSBhOTQyMWQ1NTEwMmZjODRmNzdmN2MyMWEyNDc5ZmNkMDA2NTJiODk2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyNSBGZWIgMjAxOSAxMzo1NToxMiArMDgwMAorU3ViamVjdDogW1BBVENIIDAzLzI0XSBtaXNzaW5nX3R5cGUuaDogYWRkIF9fY29tcGFyZV9mbl90IGFuZCBjb21wYXJpc29uX2ZuX3QKKworTWFrZSBpdCB3b3JrIHdpdGggbXVzbCB3aGVyZSBjb21wYXJpc29uX2ZuX3QgYW5kIF9fY29tcGFyZV9mbl90CitpcyBub3QgcHJvdmlkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbXVzbCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorW1JlYmFzZWQgZm9yIHYyNDJdCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWogVmFsZWsgPGFuZHJlai52YWxla0BzaWVtZW5zLmNvbT4KKy0tLQorIHNyYy9iYXNpYy9taXNzaW5nX3R5cGUuaCB8IDkgKysrKysrKysrCisgc3JjL2Jhc2ljL3NvcnQtdXRpbC5oICAgIHwgMSArCisgc3JjL2pvdXJuYWwvY2F0YWxvZy5jICAgIHwgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvbWlzc2luZ190eXBlLmggYi9zcmMvYmFzaWMvbWlzc2luZ190eXBlLmgKK2luZGV4IGJmOGE2Y2FhMWIuLjIxMzRmZTUwOTUgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvbWlzc2luZ190eXBlLmgKKysrKyBiL3NyYy9iYXNpYy9taXNzaW5nX3R5cGUuaAorQEAgLTEwLDMgKzEwLDEyIEBACisgI2lmICFIQVZFX0NIQVIxNl9UCisgI2RlZmluZSBjaGFyMTZfdCB1aW50MTZfdAorICNlbmRpZgorKworKyNpZm5kZWYgX19HTElCQ19fCisrdHlwZWRlZiBpbnQgKCpjb21wYXJpc29uX2ZuX3QpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fQ09NUEFSX0ZOX1QKKysjZGVmaW5lIF9fQ09NUEFSX0ZOX1QKKyt0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvc29ydC11dGlsLmggYi9zcmMvYmFzaWMvc29ydC11dGlsLmgKK2luZGV4IGUwMjlmODYuLjcyNDdkNDAgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvc29ydC11dGlsLmgKKysrKyBiL3NyYy9iYXNpYy9zb3J0LXV0aWwuaAorQEAgLTQsNiArNCw3IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorIAorICNpbmNsdWRlICJtYWNyby5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgdm9pZCAqeGJzZWFyY2hfcihjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UsIHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9kX2ZuX3QgY29tcGFyLCB2b2lkICphcmcpOworZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2NhdGFsb2cuYyBiL3NyYy9qb3VybmFsL2NhdGFsb2cuYworaW5kZXggN2JlZmZjMWUxYS4uNDgxOGEyZTVjYyAxMDA2NDQKKy0tLSBhL3NyYy9qb3VybmFsL2NhdGFsb2cuYworKysrIGIvc3JjL2pvdXJuYWwvY2F0YWxvZy5jCitAQCAtMjksNiArMjksNyBAQAorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorICNpbmNsdWRlICJzdHJ2LmgiCisgI2luY2x1ZGUgInRtcGZpbGUtdXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgY29uc3QgY2hhciAqIGNvbnN0IGNhdGFsb2dfZmlsZV9kaXJzW10gPSB7CisgICAgICAgICAiL3Vzci9sb2NhbC9saWIvc3lzdGVtZC9jYXRhbG9nLyIsCistLSAKKzIuMTEuMAorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDMtc3JjLWJhc2ljLWNvcHkuYy1pbmNsdWRlLXNpZ25hbC5oLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDAzLXNyYy1iYXNpYy1jb3B5LmMtaW5jbHVkZS1zaWduYWwuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWUwZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDAzLXNyYy1iYXNpYy1jb3B5LmMtaW5jbHVkZS1zaWduYWwuaC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitJbmNsdWRlIHNpZ25hbC5oCisKK0ZpeGVzIHNldmVyYWwgc2lnbmFsIHNldCByZWxhdGVkIGVycm9yczoKK3NyYy9iYXNpYy9jb3B5LmM6OTI6MTk6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAnc2lnZW1wdHlzZXQnIFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQorc3JjL2Jhc2ljL2NvcHkuYzo5MzoxOTogZXJyb3I6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdzaWdhZGRzZXQnIFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQorc3JjL2Jhc2ljL2NvcHkuYzo5MzozNDogZXJyb3I6ICdTSUdJTlQnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorc3JjL2Jhc2ljL2NvcHkuYzo5NToxMzogZXJyb3I6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdzaWd0aW1lZHdhaXQnIFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgTXVycmF5IDxzY290dC5tdXJyYXlAa29uc3Vsa28uY29tPgorLS0tCisgc3JjL2Jhc2ljL2NvcHkuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL2NvcHkuYyBiL3NyYy9iYXNpYy9jb3B5LmMKK2luZGV4IGNhMzExZTAyMWUuLjNjZjdmYzE2OTcgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvY29weS5jCisrKysgYi9zcmMvYmFzaWMvY29weS5jCitAQCAtMTIsNiArMTIsNyBAQAorICNpbmNsdWRlIDxzeXMveGF0dHIuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisgCisgI2luY2x1ZGUgImFsbG9jLXV0aWwuaCIKKyAjaW5jbHVkZSAiYnRyZnMtdXRpbC5oIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDA0LWFkZC1mYWxsYmFjay1wYXJzZV9wcmludGZfZm9ybWF0LWltcGxlbWVudGF0aW9uLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDA0LWFkZC1mYWxsYmFjay1wYXJzZV9wcmludGZfZm9ybWF0LWltcGxlbWVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYWFkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDQtYWRkLWZhbGxiYWNrLXBhcnNlX3ByaW50Zl9mb3JtYXQtaW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MzIgQEAKK0Zyb20gN2JjZjNiMTY2Njk0MDkwNDk3YTBhY2QyYzUyOTllNGUwNGZjYzliNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjUgRmViIDIwMTkgMTQ6MDQ6MjEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8yNF0gYWRkIGZhbGxiYWNrIHBhcnNlX3ByaW50Zl9mb3JtYXQgaW1wbGVtZW50YXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFttdXNsIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBFbWlsIFJlbm5lciBCZXJ0aGluZyA8c3lzdGVtZEBlc21pbC5kaz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitbcmViYXNlZCBmb3Igc3lzdGVtZCAyNDNdCitTaWduZWQtb2ZmLWJ5OiBTY290dCBNdXJyYXkgPHNjb3R0Lm11cnJheUBrb25zdWxrby5jb20+CistLS0KKyBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBzcmMvYmFzaWMvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICA1ICsKKyBzcmMvYmFzaWMvcGFyc2UtcHJpbnRmLWZvcm1hdC5jIHwgMjczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvYmFzaWMvcGFyc2UtcHJpbnRmLWZvcm1hdC5oIHwgIDU3ICsrKysrKysrKworIHNyYy9iYXNpYy9zdGRpby11dGlsLmggICAgICAgICAgfCAgIDIgKy0KKyBzcmMvam91cm5hbC9qb3VybmFsLXNlbmQuYyAgICAgIHwgICAyICstCisgNiBmaWxlcyBjaGFuZ2VkLCAzMzggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFzaWMvcGFyc2UtcHJpbnRmLWZvcm1hdC5oCisKK2RpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCitpbmRleCA3OWI3NjJmYWViLi43ZjhjNjc5NDExIDEwMDY0NAorLS0tIGEvbWVzb24uYnVpbGQKKysrKyBiL21lc29uLmJ1aWxkCitAQCAtNjEzLDYgKzYxMyw3IEBAIGVuZGlmCisgZm9yZWFjaCBoZWFkZXIgOiBbJ2NyeXB0LmgnLAorICAgICAgICAgICAgICAgICAgICdsaW51eC9tZW1mZC5oJywKKyAgICAgICAgICAgICAgICAgICAnbGludXgvdm1fc29ja2V0cy5oJywKKysgICAgICAgICAgICAgICAgICAncHJpbnRmLmgnLAorICAgICAgICAgICAgICAgICAgICdzeXMvYXV4di5oJywKKyAgICAgICAgICAgICAgICAgICAndmFsZ3JpbmQvbWVtY2hlY2suaCcsCisgICAgICAgICAgICAgICAgICAgJ3ZhbGdyaW5kL3ZhbGdyaW5kLmgnLAorZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9tZXNvbi5idWlsZCBiL3NyYy9iYXNpYy9tZXNvbi5idWlsZAoraW5kZXggZDZjYWYyOGYxNC4uMzJjMWFjZjM0OSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9tZXNvbi5idWlsZAorKysrIGIvc3JjL2Jhc2ljL21lc29uLmJ1aWxkCitAQCAtMzEyLDYgKzMxMiwxMSBAQCBmb3JlYWNoIGl0ZW0gOiBbWydhZicsICAgICBhZl9saXN0X3R4dCwgICAgICdhZicsICAgICAgICAgJyddLAorIGVuZGZvcmVhY2gKKyAKKyBiYXNpY19zb3VyY2VzICs9IGdlbmVyYXRlZF9ncGVyZl9oZWFkZXJzCisrCisraWYgY29uZi5nZXQoJ0hBVkVfUFJJTlRGX0gnKSAhPSAxCisrICAgICAgICBiYXNpY19zb3VyY2VzICs9IFtmaWxlcygncGFyc2UtcHJpbnRmLWZvcm1hdC5jJyldCisrZW5kaWYKKysKKyBiYXNpY19nY3J5cHRfc291cmNlcyA9IGZpbGVzKAorICAgICAgICAgJ2djcnlwdC11dGlsLmMnLAorICAgICAgICAgJ2djcnlwdC11dGlsLmgnKQorZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9wYXJzZS1wcmludGYtZm9ybWF0LmMgYi9zcmMvYmFzaWMvcGFyc2UtcHJpbnRmLWZvcm1hdC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMC4uNDk0MzdlNTQ0NQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuYworQEAgLTAsMCArMSwyNzMgQEAKKysvKi0qLSBNb2RlOiBDOyBjLWJhc2ljLW9mZnNldDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLSovCisrCisrLyoqKgorKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc3lzdGVtZC4KKysKKysgIENvcHlyaWdodCAyMDE0IEVtaWwgUmVubmVyIEJlcnRoaW5nIDxzeXN0ZW1kQGVzbWlsLmRrPgorKworKyAgV2l0aCBwYXJ0cyBmcm9tIHRoZSBtdXNsIEMgbGlicmFyeQorKyAgQ29weXJpZ2h0IDIwMDUtMjAxNCBSaWNoIEZlbGtlciwgZXQgYWwuCisrCisrICBzeXN0ZW1kIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgIHN5c3RlbWQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisrICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICBhbG9uZyB3aXRoIHN5c3RlbWQ7IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysqKiovCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAicGFyc2UtcHJpbnRmLWZvcm1hdC5oIgorKworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdW1lX25vbmFyZyhjb25zdCBjaGFyICpmbXQpCisreworKyAgICAgICAgZG8geworKyAgICAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnXDAnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbXQ7CisrICAgICAgICB9IHdoaWxlICgqZm10KysgIT0gJyUnKTsKKysgICAgICAgIHJldHVybiBmbXQ7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdW1lX251bShjb25zdCBjaGFyICpmbXQpCisreworKyAgICAgICAgZm9yICg7KmZtdCA+PSAnMCcgJiYgKmZtdCA8PSAnOSc7IGZtdCsrKQorKyAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovOworKyAgICAgICAgcmV0dXJuIGZtdDsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN1bWVfYXJnbihjb25zdCBjaGFyICpmbXQsIHNpemVfdCAqYXJnKQorK3sKKysgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBmbXQ7CisrICAgICAgICBzaXplX3QgdmFsID0gMDsKKysKKysgICAgICAgIGlmICgqcCA8ICcxJyB8fCAqcCA+ICc5JykKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZtdDsKKysgICAgICAgIGRvIHsKKysgICAgICAgICAgICAgICAgdmFsID0gMTAqdmFsICsgKCpwKysgLSAnMCcpOworKyAgICAgICAgfSB3aGlsZSAoKnAgPj0gJzAnICYmICpwIDw9ICc5Jyk7CisrCisrICAgICAgICBpZiAoKnAgIT0gJyQnKQorKyAgICAgICAgICAgICAgICByZXR1cm4gZm10OworKyAgICAgICAgKmFyZyA9IHZhbDsKKysgICAgICAgIHJldHVybiBwKzE7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdW1lX2ZsYWdzKGNvbnN0IGNoYXIgKmZtdCkKKyt7CisrICAgICAgICB3aGlsZSAoMSkgeworKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCpmbXQpIHsKKysgICAgICAgICAgICAgICAgY2FzZSAnIyc6CisrICAgICAgICAgICAgICAgIGNhc2UgJzAnOgorKyAgICAgICAgICAgICAgICBjYXNlICctJzoKKysgICAgICAgICAgICAgICAgY2FzZSAnICc6CisrICAgICAgICAgICAgICAgIGNhc2UgJysnOgorKyAgICAgICAgICAgICAgICBjYXNlICdcJyc6CisrICAgICAgICAgICAgICAgIGNhc2UgJ0knOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdCsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJldHVybiBmbXQ7CisrICAgICAgICB9CisrfQorKworK2VudW0gc3RhdGUgeworKyAgICAgICAgQkFSRSwKKysgICAgICAgIExQUkUsCisrICAgICAgICBMTFBSRSwKKysgICAgICAgIEhQUkUsCisrICAgICAgICBISFBSRSwKKysgICAgICAgIEJJR0xQUkUsCisrICAgICAgICBaVFBSRSwKKysgICAgICAgIEpQUkUsCisrICAgICAgICBTVE9QCisrfTsKKysKKytlbnVtIHR5cGUgeworKyAgICAgICAgTk9ORSwKKysgICAgICAgIFBUUiwKKysgICAgICAgIElOVCwKKysgICAgICAgIFVJTlQsCisrICAgICAgICBVTExPTkcsCisrICAgICAgICBMT05HLAorKyAgICAgICAgVUxPTkcsCisrICAgICAgICBTSE9SVCwKKysgICAgICAgIFVTSE9SVCwKKysgICAgICAgIENIQVIsCisrICAgICAgICBVQ0hBUiwKKysgICAgICAgIExMT05HLAorKyAgICAgICAgU0laRVQsCisrICAgICAgICBJTUFYLAorKyAgICAgICAgVU1BWCwKKysgICAgICAgIFBESUZGLAorKyAgICAgICAgVUlQVFIsCisrICAgICAgICBEQkwsCisrICAgICAgICBMREJMLAorKyAgICAgICAgTUFYVFlQRQorK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHBhX3R5cGVzW01BWFRZUEVdID0geworKyAgICAgICAgW05PTkVdICAgPSBQQV9JTlQsCisrICAgICAgICBbUFRSXSAgICA9IFBBX1BPSU5URVIsCisrICAgICAgICBbSU5UXSAgICA9IFBBX0lOVCwKKysgICAgICAgIFtVSU5UXSAgID0gUEFfSU5ULAorKyAgICAgICAgW1VMTE9OR10gPSBQQV9JTlQgfCBQQV9GTEFHX0xPTkdfTE9ORywKKysgICAgICAgIFtMT05HXSAgID0gUEFfSU5UIHwgUEFfRkxBR19MT05HLAorKyAgICAgICAgW1VMT05HXSAgPSBQQV9JTlQgfCBQQV9GTEFHX0xPTkcsCisrICAgICAgICBbU0hPUlRdICA9IFBBX0lOVCB8IFBBX0ZMQUdfU0hPUlQsCisrICAgICAgICBbVVNIT1JUXSA9IFBBX0lOVCB8IFBBX0ZMQUdfU0hPUlQsCisrICAgICAgICBbQ0hBUl0gICA9IFBBX0NIQVIsCisrICAgICAgICBbVUNIQVJdICA9IFBBX0NIQVIsCisrICAgICAgICBbTExPTkddICA9IFBBX0lOVCB8IFBBX0ZMQUdfTE9OR19MT05HLAorKyAgICAgICAgW1NJWkVUXSAgPSBQQV9JTlQgfCBQQV9GTEFHX0xPTkcsCisrICAgICAgICBbSU1BWF0gICA9IFBBX0lOVCB8IFBBX0ZMQUdfTE9OR19MT05HLAorKyAgICAgICAgW1VNQVhdICAgPSBQQV9JTlQgfCBQQV9GTEFHX0xPTkdfTE9ORywKKysgICAgICAgIFtQRElGRl0gID0gUEFfSU5UIHwgUEFfRkxBR19MT05HX0xPTkcsCisrICAgICAgICBbVUlQVFJdICA9IFBBX0lOVCB8IFBBX0ZMQUdfTE9ORywKKysgICAgICAgIFtEQkxdICAgID0gUEFfRE9VQkxFLAorKyAgICAgICAgW0xEQkxdICAgPSBQQV9ET1VCTEUgfCBQQV9GTEFHX0xPTkdfRE9VQkxFCisrfTsKKysKKysjZGVmaW5lIFMoeCkgWyh4KS0nQSddCisrI2RlZmluZSBFKHgpIChTVE9QICsgKHgpKQorKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0YXRlc1tdWyd6Jy0nQScrMV0gPSB7CisrICAgICAgICB7IC8qIDA6IGJhcmUgdHlwZXMgKi8KKysgICAgICAgICAgICAgICAgUygnZCcpID0gRShJTlQpLCBTKCdpJykgPSBFKElOVCksCisrICAgICAgICAgICAgICAgIFMoJ28nKSA9IEUoVUlOVCksUygndScpID0gRShVSU5UKSxTKCd4JykgPSBFKFVJTlQpLCBTKCdYJykgPSBFKFVJTlQpLAorKyAgICAgICAgICAgICAgICBTKCdlJykgPSBFKERCTCksIFMoJ2YnKSA9IEUoREJMKSwgUygnZycpID0gRShEQkwpLCAgUygnYScpID0gRShEQkwpLAorKyAgICAgICAgICAgICAgICBTKCdFJykgPSBFKERCTCksIFMoJ0YnKSA9IEUoREJMKSwgUygnRycpID0gRShEQkwpLCAgUygnQScpID0gRShEQkwpLAorKyAgICAgICAgICAgICAgICBTKCdjJykgPSBFKENIQVIpLFMoJ0MnKSA9IEUoSU5UKSwKKysgICAgICAgICAgICAgICAgUygncycpID0gRShQVFIpLCBTKCdTJykgPSBFKFBUUiksIFMoJ3AnKSA9IEUoVUlQVFIpLFMoJ24nKSA9IEUoUFRSKSwKKysgICAgICAgICAgICAgICAgUygnbScpID0gRShOT05FKSwKKysgICAgICAgICAgICAgICAgUygnbCcpID0gTFBSRSwgICBTKCdoJykgPSBIUFJFLCBTKCdMJykgPSBCSUdMUFJFLAorKyAgICAgICAgICAgICAgICBTKCd6JykgPSBaVFBSRSwgIFMoJ2onKSA9IEpQUkUsIFMoJ3QnKSA9IFpUUFJFCisrICAgICAgICB9LCB7IC8qIDE6IGwtcHJlZml4ZWQgKi8KKysgICAgICAgICAgICAgICAgUygnZCcpID0gRShMT05HKSwgUygnaScpID0gRShMT05HKSwKKysgICAgICAgICAgICAgICAgUygnbycpID0gRShVTE9ORyksUygndScpID0gRShVTE9ORyksUygneCcpID0gRShVTE9ORyksUygnWCcpID0gRShVTE9ORyksCisrICAgICAgICAgICAgICAgIFMoJ2UnKSA9IEUoREJMKSwgIFMoJ2YnKSA9IEUoREJMKSwgIFMoJ2cnKSA9IEUoREJMKSwgIFMoJ2EnKSA9IEUoREJMKSwKKysgICAgICAgICAgICAgICAgUygnRScpID0gRShEQkwpLCAgUygnRicpID0gRShEQkwpLCAgUygnRycpID0gRShEQkwpLCAgUygnQScpID0gRShEQkwpLAorKyAgICAgICAgICAgICAgICBTKCdjJykgPSBFKElOVCksICBTKCdzJykgPSBFKFBUUiksICBTKCduJykgPSBFKFBUUiksCisrICAgICAgICAgICAgICAgIFMoJ2wnKSA9IExMUFJFCisrICAgICAgICB9LCB7IC8qIDI6IGxsLXByZWZpeGVkICovCisrICAgICAgICAgICAgICAgIFMoJ2QnKSA9IEUoTExPTkcpLCBTKCdpJykgPSBFKExMT05HKSwKKysgICAgICAgICAgICAgICAgUygnbycpID0gRShVTExPTkcpLFMoJ3UnKSA9IEUoVUxMT05HKSwKKysgICAgICAgICAgICAgICAgUygneCcpID0gRShVTExPTkcpLFMoJ1gnKSA9IEUoVUxMT05HKSwKKysgICAgICAgICAgICAgICAgUygnbicpID0gRShQVFIpCisrICAgICAgICB9LCB7IC8qIDM6IGgtcHJlZml4ZWQgKi8KKysgICAgICAgICAgICAgICAgUygnZCcpID0gRShTSE9SVCksIFMoJ2knKSA9IEUoU0hPUlQpLAorKyAgICAgICAgICAgICAgICBTKCdvJykgPSBFKFVTSE9SVCksUygndScpID0gRShVU0hPUlQpLAorKyAgICAgICAgICAgICAgICBTKCd4JykgPSBFKFVTSE9SVCksUygnWCcpID0gRShVU0hPUlQpLAorKyAgICAgICAgICAgICAgICBTKCduJykgPSBFKFBUUiksCisrICAgICAgICAgICAgICAgIFMoJ2gnKSA9IEhIUFJFCisrICAgICAgICB9LCB7IC8qIDQ6IGhoLXByZWZpeGVkICovCisrICAgICAgICAgICAgICAgIFMoJ2QnKSA9IEUoQ0hBUiksIFMoJ2knKSA9IEUoQ0hBUiksCisrICAgICAgICAgICAgICAgIFMoJ28nKSA9IEUoVUNIQVIpLFMoJ3UnKSA9IEUoVUNIQVIpLAorKyAgICAgICAgICAgICAgICBTKCd4JykgPSBFKFVDSEFSKSxTKCdYJykgPSBFKFVDSEFSKSwKKysgICAgICAgICAgICAgICAgUygnbicpID0gRShQVFIpCisrICAgICAgICB9LCB7IC8qIDU6IEwtcHJlZml4ZWQgKi8KKysgICAgICAgICAgICAgICAgUygnZScpID0gRShMREJMKSxTKCdmJykgPSBFKExEQkwpLFMoJ2cnKSA9IEUoTERCTCksIFMoJ2EnKSA9IEUoTERCTCksCisrICAgICAgICAgICAgICAgIFMoJ0UnKSA9IEUoTERCTCksUygnRicpID0gRShMREJMKSxTKCdHJykgPSBFKExEQkwpLCBTKCdBJykgPSBFKExEQkwpLAorKyAgICAgICAgICAgICAgICBTKCduJykgPSBFKFBUUikKKysgICAgICAgIH0sIHsgLyogNjogei0gb3IgdC1wcmVmaXhlZCAoYXNzdW1lZCB0byBiZSBzYW1lIHNpemUpICovCisrICAgICAgICAgICAgICAgIFMoJ2QnKSA9IEUoUERJRkYpLFMoJ2knKSA9IEUoUERJRkYpLAorKyAgICAgICAgICAgICAgICBTKCdvJykgPSBFKFNJWkVUKSxTKCd1JykgPSBFKFNJWkVUKSwKKysgICAgICAgICAgICAgICAgUygneCcpID0gRShTSVpFVCksUygnWCcpID0gRShTSVpFVCksCisrICAgICAgICAgICAgICAgIFMoJ24nKSA9IEUoUFRSKQorKyAgICAgICAgfSwgeyAvKiA3OiBqLXByZWZpeGVkICovCisrICAgICAgICAgICAgICAgIFMoJ2QnKSA9IEUoSU1BWCksIFMoJ2knKSA9IEUoSU1BWCksCisrICAgICAgICAgICAgICAgIFMoJ28nKSA9IEUoVU1BWCksIFMoJ3UnKSA9IEUoVU1BWCksCisrICAgICAgICAgICAgICAgIFMoJ3gnKSA9IEUoVU1BWCksIFMoJ1gnKSA9IEUoVU1BWCksCisrICAgICAgICAgICAgICAgIFMoJ24nKSA9IEUoUFRSKQorKyAgICAgICAgfQorK307CisrCisrc2l6ZV90IHBhcnNlX3ByaW50Zl9mb3JtYXQoY29uc3QgY2hhciAqZm10LCBzaXplX3QgbiwgaW50ICp0eXBlcykKKyt7CisrICAgICAgICBzaXplX3QgaSA9IDA7CisrICAgICAgICBzaXplX3QgbGFzdCA9IDA7CisrCisrICAgICAgICBtZW1zZXQodHlwZXMsIDAsIG4pOworKworKyAgICAgICAgd2hpbGUgKDEpIHsKKysgICAgICAgICAgICAgICAgc2l6ZV90IGFyZzsKKysgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXRlOworKworKyAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX25vbmFyZyhmbXQpOworKyAgICAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnXDAnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnJScpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBmbXQrKzsKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBhcmcgPSAwOworKyAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX2FyZ24oZm10LCAmYXJnKTsKKysgICAgICAgICAgICAgICAgLyogZmxhZ3MgKi8KKysgICAgICAgICAgICAgICAgZm10ID0gY29uc3VtZV9mbGFncyhmbXQpOworKyAgICAgICAgICAgICAgICAvKiB3aWR0aCAqLworKyAgICAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnKicpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgd2FyZyA9IDA7CisrICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gY29uc3VtZV9hcmduKGZtdCsxLCAmd2FyZyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhcmcgPT0gMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcmcgPSArK2k7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhcmcgPiBsYXN0KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHdhcmc7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhcmcgPD0gbiAmJiB0eXBlc1t3YXJnLTFdID09IE5PTkUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1t3YXJnLTFdID0gSU5UOworKyAgICAgICAgICAgICAgICB9IGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX251bShmbXQpOworKyAgICAgICAgICAgICAgICAvKiBwcmVjaXNpb24gKi8KKysgICAgICAgICAgICAgICAgaWYgKCpmbXQgPT0gJy4nKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZm10Kys7CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpmbXQgPT0gJyonKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFyZyA9IDA7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX2FyZ24oZm10KzEsICZwYXJnKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJnID09IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmcgPSArK2k7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZyA+IGxhc3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBwYXJnOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmcgPD0gbiAmJiB0eXBlc1twYXJnLTFdID09IE5PTkUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW3BhcmctMV0gPSBJTlQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqZm10ID09ICctJykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10Kys7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQgPSBjb25zdW1lX251bShmbXQpOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAvKiBsZW5ndGggbW9kaWZpZXIgYW5kIGNvbnZlcnNpb24gc3BlY2lmaWVyICovCisrICAgICAgICAgICAgICAgIHN0YXRlID0gQkFSRTsKKysgICAgICAgICAgICAgICAgZG8geworKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpmbXQrKzsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICdBJyB8fCBjID4gJ3onKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXNbc3RhdGVdUyhjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICB9IHdoaWxlIChzdGF0ZSA8IFNUT1ApOworKworKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gRShOT05FKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysKKysgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9ICsraTsKKysgICAgICAgICAgICAgICAgaWYgKGFyZyA+IGxhc3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGFyZzsKKysgICAgICAgICAgICAgICAgaWYgKGFyZyA8PSBuKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2FyZy0xXSA9IHN0YXRlIC0gU1RPUDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChsYXN0ID4gbikKKysgICAgICAgICAgICAgICAgbGFzdCA9IG47CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGFzdDsgaSsrKQorKyAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IHBhX3R5cGVzW3R5cGVzW2ldXTsKKysKKysgICAgICAgIHJldHVybiBsYXN0OworK30KK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvcGFyc2UtcHJpbnRmLWZvcm1hdC5oIGIvc3JjL2Jhc2ljL3BhcnNlLXByaW50Zi1mb3JtYXQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAuLjQ3YmU3NTIyZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9iYXNpYy9wYXJzZS1wcmludGYtZm9ybWF0LmgKK0BAIC0wLDAgKzEsNTcgQEAKKysvKi0qLSBNb2RlOiBDOyBjLWJhc2ljLW9mZnNldDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLSovCisrCisrLyoqKgorKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc3lzdGVtZC4KKysKKysgIENvcHlyaWdodCAyMDE0IEVtaWwgUmVubmVyIEJlcnRoaW5nIDxzeXN0ZW1kQGVzbWlsLmRrPgorKworKyAgV2l0aCBwYXJ0cyBmcm9tIHRoZSBHTlUgQyBMaWJyYXJ5CisrICBDb3B5cmlnaHQgMTk5MS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgc3lzdGVtZCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKysgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICBzeXN0ZW1kIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorKyAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgYWxvbmcgd2l0aCBzeXN0ZW1kOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrKioqLworKworKyNwcmFnbWEgb25jZQorKworKyNpbmNsdWRlICJjb25maWcuaCIKKysKKysjaWYgSEFWRV9QUklOVEZfSAorKyNpbmNsdWRlIDxwcmludGYuaD4KKysjZWxzZQorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKytlbnVtIHsJCQkJLyogQyB0eXBlOiAqLworKyAgUEFfSU5ULAkJCS8qIGludCAqLworKyAgUEFfQ0hBUiwJCQkvKiBpbnQsIGNhc3QgdG8gY2hhciAqLworKyAgUEFfV0NIQVIsCQkJLyogd2lkZSBjaGFyICovCisrICBQQV9TVFJJTkcsCQkJLyogY29uc3QgY2hhciAqLCBhICdcMCctdGVybWluYXRlZCBzdHJpbmcgKi8KKysgIFBBX1dTVFJJTkcsCQkJLyogY29uc3Qgd2NoYXJfdCAqLCB3aWRlIGNoYXJhY3RlciBzdHJpbmcgKi8KKysgIFBBX1BPSU5URVIsCQkJLyogdm9pZCAqICovCisrICBQQV9GTE9BVCwJCQkvKiBmbG9hdCAqLworKyAgUEFfRE9VQkxFLAkJCS8qIGRvdWJsZSAqLworKyAgUEFfTEFTVAorK307CisrCisrLyogRmxhZyBiaXRzIHRoYXQgY2FuIGJlIHNldCBpbiBhIHR5cGUgcmV0dXJuZWQgYnkgYHBhcnNlX3ByaW50Zl9mb3JtYXQnLiAgKi8KKysjZGVmaW5lCVBBX0ZMQUdfTUFTSwkJMHhmZjAwCisrI2RlZmluZQlQQV9GTEFHX0xPTkdfTE9ORwkoMSA8PCA4KQorKyNkZWZpbmUJUEFfRkxBR19MT05HX0RPVUJMRQlQQV9GTEFHX0xPTkdfTE9ORworKyNkZWZpbmUJUEFfRkxBR19MT05HCQkoMSA8PCA5KQorKyNkZWZpbmUJUEFfRkxBR19TSE9SVAkJKDEgPDwgMTApCisrI2RlZmluZQlQQV9GTEFHX1BUUgkJKDEgPDwgMTEpCisrCisrc2l6ZV90IHBhcnNlX3ByaW50Zl9mb3JtYXQoY29uc3QgY2hhciAqZm10LCBzaXplX3QgbiwgaW50ICp0eXBlcyk7CisrCisrI2VuZGlmIC8qIEhBVkVfUFJJTlRGX0ggKi8KK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvc3RkaW8tdXRpbC5oIGIvc3JjL2Jhc2ljL3N0ZGlvLXV0aWwuaAoraW5kZXggYzNiOTQ0OGQ0Zi4uMjkzN2FhMTNiMSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9zdGRpby11dGlsLmgKKysrKyBiL3NyYy9iYXNpYy9zdGRpby11dGlsLmgKK0BAIC0xLDEzICsxLDEzIEBACisgLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xKyAqLworICNwcmFnbWEgb25jZQorIAorLSNpbmNsdWRlIDxwcmludGYuaD4KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorICNpbmNsdWRlICJtYWNyby5oIgorICNpbmNsdWRlICJtZW1vcnktdXRpbC5oIgorKyNpbmNsdWRlICJwYXJzZS1wcmludGYtZm9ybWF0LmgiCisgCisgI2RlZmluZSBzbnByaW50Zl9vayhidWYsIGxlbiwgZm10LCAuLi4pIFwKKyAgICAgICAgICgoc2l6ZV90KSBzbnByaW50ZihidWYsIGxlbiwgZm10LCBfX1ZBX0FSR1NfXykgPCAobGVuKSkKK2RpZmYgLS1naXQgYS9zcmMvam91cm5hbC9qb3VybmFsLXNlbmQuYyBiL3NyYy9qb3VybmFsL2pvdXJuYWwtc2VuZC5jCitpbmRleCA1ZWYxMWZhMWE0Li42Mzg0YWI2MjBjIDEwMDY0NAorLS0tIGEvc3JjL2pvdXJuYWwvam91cm5hbC1zZW5kLmMKKysrKyBiL3NyYy9qb3VybmFsL2pvdXJuYWwtc2VuZC5jCitAQCAtMiw3ICsyLDYgQEAKKyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKy0jaW5jbHVkZSA8cHJpbnRmLmg+CisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPHN5cy91bi5oPgorQEAgLTIxLDYgKzIwLDcgQEAKKyAjaW5jbHVkZSAic3RkaW8tdXRpbC5oIgorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorICNpbmNsdWRlICJ0bXBmaWxlLXV0aWwuaCIKKysjaW5jbHVkZSAicGFyc2UtcHJpbnRmLWZvcm1hdC5oIgorIAorICNkZWZpbmUgU05EQlVGX1NJWkUgKDgqMTAyNCoxMDI0KQorIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDA0LXNyYy1zaGFyZWQtY3B1LXNldC11dGlsLmgtYWRkLV9fY3B1X21hc2stZGVmaW5pdGlvbi5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwNC1zcmMtc2hhcmVkLWNwdS1zZXQtdXRpbC5oLWFkZC1fX2NwdV9tYXNrLWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY3NWU4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwNC1zcmMtc2hhcmVkLWNwdS1zZXQtdXRpbC5oLWFkZC1fX2NwdV9tYXNrLWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorSGFuZGxlIF9fY3B1X21hc2sgdXNhZ2UKKworRml4ZXMgZXJyb3JzOgorCitzcmMvdGVzdC90ZXN0LWNwdS1zZXQtdXRpbC5jOjE4OjU0OiBlcnJvcjogJ19fY3B1X21hc2snIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorc3JjL3Rlc3QvdGVzdC1zaXplb2YuYzo3MzoxNDogZXJyb3I6ICdfX2NwdV9tYXNrJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKworX19jcHVfbWFzayBpcyBhbiBpbnRlcm5hbCB0eXBlIG9mIGdsaWJjJ3MgY3B1X3NldCBpbXBsZW1lbnRhdGlvbiwgbm90CitwYXJ0IG9mIHRoZSBQT1NJWCBkZWZpbml0aW9uLCB3aGljaCBpcyBwcm9ibGVtYXRpYyB3aGVuIGJ1aWxkaW5nIHdpdGgKK211c2wsIHdoaWNoIGRvZXMgbm90IGRlZmluZSBhIG1hdGNoaW5nIHR5cGUuICBGcm9tIGluc3BlY3Rpb24gb2YgbXVzbCdzCitzY2hlZC5oLCBob3dldmVyLCBpdCBpcyBjbGVhciB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgd291bGQgYmUKK3Vuc2lnbmVkIGxvbmcsIHdoaWNoIGRvZXMgbWF0Y2ggZ2xpYmMncyBhY3R1YWwgX19DUFVfTUFTS19UWVBFLiAgU28sCithZGQgYSB0eXBlZGVmIHRvIGNwdS1zZXQtdXRpbC5oIGRlZmluaW5nIF9fY3B1X21hc2sgYXBwcm9wcmlhdGVseS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFttdXNsIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBNdXJyYXkgPHNjb3R0Lm11cnJheUBrb25zdWxrby5jb20+CistLS0KKyBzcmMvc2hhcmVkL2NwdS1zZXQtdXRpbC5oIHwgMiArKworIHNyYy90ZXN0L3Rlc3Qtc2l6ZW9mLmMgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zaGFyZWQvY3B1LXNldC11dGlsLmggYi9zcmMvc2hhcmVkL2NwdS1zZXQtdXRpbC5oCitpbmRleCAyNzgxMmRmZDU5Li5mNjk4ZjlkZjgzIDEwMDY0NAorLS0tIGEvc3JjL3NoYXJlZC9jcHUtc2V0LXV0aWwuaAorKysrIGIvc3JjL3NoYXJlZC9jcHUtc2V0LXV0aWwuaAorQEAgLTYsNiArNiw4IEBACisgI2luY2x1ZGUgIm1hY3JvLmgiCisgI2luY2x1ZGUgIm1pc3Npbmdfc3lzY2FsbC5oIgorIAorK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2NwdV9tYXNrOworKworIC8qIFRoaXMgd3JhcHMgdGhlIGxpYmMgaW50ZXJmYWNlIHdpdGggYSB2YXJpYWJsZSB0byBrZWVwIHRoZSBhbGxvY2F0ZWQgc2l6ZS4gKi8KKyB0eXBlZGVmIHN0cnVjdCBDUFVTZXQgeworICAgICAgICAgY3B1X3NldF90ICpzZXQ7CitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvdGVzdC1zaXplb2YuYyBiL3NyYy90ZXN0L3Rlc3Qtc2l6ZW9mLmMKK2luZGV4IGE3MTBkYjUzNzAuLmQxNjAxYWQ5MjkgMTAwNjQ0CistLS0gYS9zcmMvdGVzdC90ZXN0LXNpemVvZi5jCisrKysgYi9zcmMvdGVzdC90ZXN0LXNpemVvZi5jCitAQCAtMSw2ICsxLDUgQEAKKyAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjErICovCisgCistI2luY2x1ZGUgPHNjaGVkLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorQEAgLTgsNiArNyw3IEBACisgI2luY2x1ZGUgPGZsb2F0Lmg+CisgCisgI2luY2x1ZGUgInRpbWUtdXRpbC5oIgorKyNpbmNsdWRlICJjcHUtc2V0LXV0aWwuaCIKKyAKKyAvKiBQcmludCBpbmZvcm1hdGlvbiBhYm91dCB2YXJpb3VzIHR5cGVzLiBVc2VmdWwgd2hlbiBkaWFnbm9zaW5nCisgICogZ2NjIGRpYWdub3N0aWNzIG9uIGFuIHVuZmFtaWxpYXIgYXJjaGl0ZWN0dXJlLiAqLwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDA1LXNyYy1iYXNpYy1taXNzaW5nLmgtY2hlY2stZm9yLW1pc3Npbmctc3RybmR1cGEucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMDUtc3JjLWJhc2ljLW1pc3NpbmcuaC1jaGVjay1mb3ItbWlzc2luZy1zdHJuZHVwYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZjM2I3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDA1LXNyYy1iYXNpYy1taXNzaW5nLmgtY2hlY2stZm9yLW1pc3Npbmctc3RybmR1cGEucGF0Y2gKQEAgLTAsMCArMSw0NDIgQEAKK0Zyb20gMzk5ZmQzZWRhMzA0NTYzNmE3MGRhNDM4YTBmZDE0MDZjYzMzMmVkMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjUgRmViIDIwMTkgMTQ6MTg6MjEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8yNF0gc3JjL2Jhc2ljL21pc3NpbmcuaDogY2hlY2sgZm9yIG1pc3Npbmcgc3RybmR1cGEKKworaW5jbHVkZSBtaXNzaW5nLmggIGZvciBkZWZpbml0aW9uIG9mIHN0cm5kdXBhCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbXVzbCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1tSZWJhc2VkIGZvciB2MjQyXQorU2lnbmVkLW9mZi1ieTogQW5kcmVqIFZhbGVrIDxhbmRyZWoudmFsZWtAc2llbWVucy5jb20+CitbcmViYXNlZCBmb3Igc3lzdGVtZCAyNDNdCitTaWduZWQtb2ZmLWJ5OiBTY290dCBNdXJyYXkgPHNjb3R0Lm11cnJheUBrb25zdWxrby5jb20+CistLS0KKyBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgc3JjL2JhY2tsaWdodC9iYWNrbGlnaHQuYyAgICAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9iYXNpYy9lbnYtdXRpbC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvYmFzaWMvbWlzc2luZ19zdGRsaWIuaCAgICAgICAgICAgICAgICAgfCAxMiArKysrKysrKysrKysKKyBzcmMvYmFzaWMvbWtkaXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgc3JjL2Jhc2ljL3BhcnNlLXV0aWwuYyAgICAgICAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9iYXNpYy9wcm9jLWNtZGxpbmUuYyAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvYmFzaWMvcHJvY2ZzLXV0aWwuYyAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgc3JjL2Jhc2ljL3RpbWUtdXRpbC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9jb3JlL2RidXMtY2dyb3VwLmMgICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvY29yZS9kYnVzLXV0aWwuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgc3JjL2NvcmUva21vZC1zZXR1cC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9jb3JlL3NlcnZpY2UuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvam91cm5hbC9qb3VybmFsY3RsLmMgICAgICAgICAgICAgICAgICAgfCAgMSArCisgc3JjL2xpYnN5c3RlbWQvc2QtYnVzL2J1cy1tZXNzYWdlLmMgICAgICAgIHwgIDEgKworIHNyYy9saWJzeXN0ZW1kL3NkLWJ1cy9idXMtb2JqZWN0cy5jICAgICAgICB8ICAxICsKKyBzcmMvbGlic3lzdGVtZC9zZC1idXMvdGVzdC1idXMtYmVuY2htYXJrLmMgfCAgMSArCisgc3JjL2xvY2FsZS9rZXltYXAtdXRpbC5jICAgICAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9sb2dpbi9wYW1fc3lzdGVtZC5jICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvbmV0d29yay9nZW5lcmF0b3IvbmV0d29yay1nZW5lcmF0b3IuYyAgfCAgMSArCisgc3JjL25zcGF3bi9uc3Bhd24tc2V0dGluZ3MuYyAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9zaGFyZWQvZG5zLWRvbWFpbi5jICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvc2hhcmVkL2pvdXJuYWwtaW1wb3J0ZXIuYyAgICAgICAgICAgICAgfCAgMSArCisgc3JjL3NoYXJlZC9sb2dzLXNob3cuYyAgICAgICAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9zaGFyZWQvcGFnZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvc2hhcmVkL3BhdGgtbG9va3VwLmMgICAgICAgICAgICAgICAgICAgfCAgMSArCisgc3JjL3NoYXJlZC91aWQtcmFuZ2UuYyAgICAgICAgICAgICAgICAgICAgIHwgIDEgKworIHNyYy9zb2NrZXQtcHJveHkvc29ja2V0LXByb3h5ZC5jICAgICAgICAgICB8ICAxICsKKyBzcmMvdGVzdC90ZXN0LWhleGRlY29jdC5jICAgICAgICAgICAgICAgICAgfCAgMSArCisgc3JjL3VkZXYvdWRldi1idWlsdGluLXBhdGhfaWQuYyAgICAgICAgICAgIHwgIDEgKworIHNyYy91ZGV2L3VkZXYtZXZlbnQuYyAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKKyBzcmMvdWRldi91ZGV2LXJ1bGVzLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgMzIgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAoraW5kZXggN2Y4YzY3OTQxMS4uODFjMDYxYjc2OCAxMDA2NDQKKy0tLSBhL21lc29uLmJ1aWxkCisrKysgYi9tZXNvbi5idWlsZAorQEAgLTUwNiw2ICs1MDYsNyBAQCBmb3JlYWNoIGlkZW50IDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4nJyddLAorICAgICAgICAgWydnZXRfbWVtcG9saWN5JywgICAgICcnJyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+JycnXSwKKysgICAgICAgIFsnc3RybmR1cGEnICwgICAgICAgICAnJycjaW5jbHVkZSA8c3RyaW5nLmg+JycnXSwKKyBdCisgCisgICAgICAgICBoYXZlID0gY2MuaGFzX2Z1bmN0aW9uKGlkZW50WzBdLCBwcmVmaXggOiBpZGVudFsxXSwgYXJncyA6ICctRF9HTlVfU09VUkNFJykKK2RpZmYgLS1naXQgYS9zcmMvYmFja2xpZ2h0L2JhY2tsaWdodC5jIGIvc3JjL2JhY2tsaWdodC9iYWNrbGlnaHQuYworaW5kZXggZGZkNjgwNTM5OC4uYzJiMmFjZTZlYyAxMDA2NDQKKy0tLSBhL3NyYy9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKKysrKyBiL3NyYy9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKK0BAIC0xNyw2ICsxNyw3IEBACisgI2luY2x1ZGUgInN0cmluZy11dGlsLmgiCisgI2luY2x1ZGUgInN0cnYuaCIKKyAjaW5jbHVkZSAidXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgc3RhdGljIGludCBmaW5kX3BjaV9vcl9wbGF0Zm9ybV9wYXJlbnQoc2RfZGV2aWNlICpkZXZpY2UsIHNkX2RldmljZSAqKnJldCkgeworICAgICAgICAgY29uc3QgY2hhciAqc3Vic3lzdGVtLCAqc3lzbmFtZSwgKnZhbHVlOworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9lbnYtdXRpbC5jIGIvc3JjL2Jhc2ljL2Vudi11dGlsLmMKK2luZGV4IGE2NTAzY2YyYjYuLmNlZWY5YTYyYzggMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvZW52LXV0aWwuYworKysrIGIvc3JjL2Jhc2ljL2Vudi11dGlsLmMKK0BAIC0xNiw2ICsxNiw3IEBACisgI2luY2x1ZGUgInN0cmluZy11dGlsLmgiCisgI2luY2x1ZGUgInN0cnYuaCIKKyAjaW5jbHVkZSAidXRmOC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgI2RlZmluZSBWQUxJRF9DSEFSU19FTlZfTkFNRSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgRElHSVRTIExFVFRFUlMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvbWlzc2luZ19zdGRsaWIuaCBiL3NyYy9iYXNpYy9taXNzaW5nX3N0ZGxpYi5oCitpbmRleCAxODhhOGQ0NDA2Li4xZTE2ZWMyODdhIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL21pc3Npbmdfc3RkbGliLmgKKysrKyBiL3NyYy9iYXNpYy9taXNzaW5nX3N0ZGxpYi5oCitAQCAtMTEsMyArMTEsMTUgQEAKKyAjICAgIGVycm9yICJuZWl0aGVyIHNlY3VyZV9nZXRlbnYgbm9yIF9fc2VjdXJlX2dldGVudiBhcmUgYXZhaWxhYmxlIgorICMgIGVuZGlmCisgI2VuZGlmCisrCisrLyogc3RyaW5nLmggKi8KKysjaWYgISBIQVZFX1NUUk5EVVBBCisrI2RlZmluZSBzdHJuZHVwYShzLCBuKSBcCisrICAoeyBcCisrICAgIGNvbnN0IGNoYXIgKl9fb2xkID0gKHMpOyBcCisrICAgIHNpemVfdCBfX2xlbiA9IHN0cm5sZW4oX19vbGQsIChuKSk7IFwKKysgICAgY2hhciAqX19uZXcgPSAoY2hhciAqKWFsbG9jYShfX2xlbiArIDEpOyBcCisrICAgIF9fbmV3W19fbGVuXSA9ICdcMCc7IFwKKysgICAgKGNoYXIgKiltZW1jcHkoX19uZXcsIF9fb2xkLCBfX2xlbik7IFwKKysgIH0pCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL21rZGlyLmMgYi9zcmMvYmFzaWMvbWtkaXIuYworaW5kZXggNmI4MmVhYjY0MC4uNTFjNmI3ODYxNSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9ta2Rpci5jCisrKysgYi9zcmMvYmFzaWMvbWtkaXIuYworQEAgLTE0LDYgKzE0LDcgQEAKKyAjaW5jbHVkZSAic3RhdC11dGlsLmgiCisgI2luY2x1ZGUgInN0ZGlvLXV0aWwuaCIKKyAjaW5jbHVkZSAidXNlci11dGlsLmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyBpbnQgbWtkaXJfc2FmZV9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSwgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIE1rZGlyRmxhZ3MgZmxhZ3MsIG1rZGlyX2Z1bmNfdCBfbWtkaXIpIHsKKyAgICAgICAgIHN0cnVjdCBzdGF0IHN0OworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9wYXJzZS11dGlsLmMgYi9zcmMvYmFzaWMvcGFyc2UtdXRpbC5jCitpbmRleCAxMTVhMTQ5NGEyLi4wN2EzNGJmZDUzIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3BhcnNlLXV0aWwuYworKysrIGIvc3JjL2Jhc2ljL3BhcnNlLXV0aWwuYworQEAgLTIwLDYgKzIwLDcgQEAKKyAjaW5jbHVkZSAicHJvY2Vzcy11dGlsLmgiCisgI2luY2x1ZGUgInN0YXQtdXRpbC5oIgorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgaW50IHBhcnNlX2Jvb2xlYW4oY29uc3QgY2hhciAqdikgeworICAgICAgICAgaWYgKCF2KQorZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9wcm9jLWNtZGxpbmUuYyBiL3NyYy9iYXNpYy9wcm9jLWNtZGxpbmUuYworaW5kZXggMDkxNjljZjk2My4uZjQxMWJhODk3ZiAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9wcm9jLWNtZGxpbmUuYworKysrIGIvc3JjL2Jhc2ljL3Byb2MtY21kbGluZS5jCitAQCAtMTUsNiArMTUsNyBAQAorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorICNpbmNsdWRlICJ1dGlsLmgiCisgI2luY2x1ZGUgInZpcnQuaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIGludCBwcm9jX2NtZGxpbmUoY2hhciAqKnJldCkgeworICAgICAgICAgY29uc3QgY2hhciAqZTsKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvcHJvY2ZzLXV0aWwuYyBiL3NyYy9iYXNpYy9wcm9jZnMtdXRpbC5jCitpbmRleCA3YWFmOTViZmNlLi40MmNlNTNkNWFhIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3Byb2Nmcy11dGlsLmMKKysrKyBiL3NyYy9iYXNpYy9wcm9jZnMtdXRpbC5jCitAQCAtMTEsNiArMTEsNyBAQAorICNpbmNsdWRlICJwcm9jZnMtdXRpbC5oIgorICNpbmNsdWRlICJzdGRpby11dGlsLmgiCisgI2luY2x1ZGUgInN0cmluZy11dGlsLmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyBpbnQgcHJvY2ZzX3Rhc2tzX2dldF9saW1pdCh1aW50NjRfdCAqcmV0KSB7CisgICAgICAgICBfY2xlYW51cF9mcmVlXyBjaGFyICp2YWx1ZSA9IE5VTEw7CitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3RpbWUtdXRpbC5jIGIvc3JjL2Jhc2ljL3RpbWUtdXRpbC5jCitpbmRleCAzMDE4ZTgxYWNiLi40ZTJiM2I2NmMxIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3RpbWUtdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvdGltZS11dGlsLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgInN0cmluZy11dGlsLmgiCisgI2luY2x1ZGUgInN0cnYuaCIKKyAjaW5jbHVkZSAidGltZS11dGlsLmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyBzdGF0aWMgY2xvY2tpZF90IG1hcF9jbG9ja19pZChjbG9ja2lkX3QgYykgeworIAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlL2RidXMtY2dyb3VwLmMgYi9zcmMvY29yZS9kYnVzLWNncm91cC5jCitpbmRleCAyZjIzMTNjNTk5Li5jOTkzN2Y5ZDYyIDEwMDY0NAorLS0tIGEvc3JjL2NvcmUvZGJ1cy1jZ3JvdXAuYworKysrIGIvc3JjL2NvcmUvZGJ1cy1jZ3JvdXAuYworQEAgLTE1LDYgKzE1LDcgQEAKKyAjaW5jbHVkZSAiZmlsZWlvLmgiCisgI2luY2x1ZGUgImxpbWl0cy11dGlsLmgiCisgI2luY2x1ZGUgInBhdGgtdXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgc3RhdGljIEJVU19ERUZJTkVfUFJPUEVSVFlfR0VUX0VOVU0ocHJvcGVydHlfZ2V0X2Nncm91cF9kZXZpY2VfcG9saWN5LCBjZ3JvdXBfZGV2aWNlX3BvbGljeSwgQ0dyb3VwRGV2aWNlUG9saWN5KTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvY29yZS9kYnVzLXV0aWwuYyBiL3NyYy9jb3JlL2RidXMtdXRpbC5jCitpbmRleCA3ODYyYmVhYWNiLi4xOWY2OTY4Y2ZlIDEwMDY0NAorLS0tIGEvc3JjL2NvcmUvZGJ1cy11dGlsLmMKKysrKyBiL3NyYy9jb3JlL2RidXMtdXRpbC5jCitAQCAtNyw2ICs3LDcgQEAKKyAjaW5jbHVkZSAidW5pdC1wcmludGYuaCIKKyAjaW5jbHVkZSAidXNlci11dGlsLmgiCisgI2luY2x1ZGUgInVuaXQuaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIGludCBidXNfcHJvcGVydHlfZ2V0X3RyaWdnZXJlZF91bml0KAorICAgICAgICAgICAgICAgICBzZF9idXMgKmJ1cywKK2RpZmYgLS1naXQgYS9zcmMvY29yZS9rbW9kLXNldHVwLmMgYi9zcmMvY29yZS9rbW9kLXNldHVwLmMKK2luZGV4IGE5MWNmZWJjNjcuLmE0NTk2MTAxM2YgMTAwNjQ0CistLS0gYS9zcmMvY29yZS9rbW9kLXNldHVwLmMKKysrKyBiL3NyYy9jb3JlL2ttb2Qtc2V0dXAuYworQEAgLTExLDYgKzExLDcgQEAKKyAjaW5jbHVkZSAia21vZC1zZXR1cC5oIgorICNpbmNsdWRlICJtYWNyby5oIgorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgI2lmIEhBVkVfS01PRAorICNpbmNsdWRlIDxsaWJrbW9kLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvc2VydmljZS5jIGIvc3JjL2NvcmUvc2VydmljZS5jCitpbmRleCA3M2IzYzljMzE2Li5lZjc0ZjAwYTA4IDEwMDY0NAorLS0tIGEvc3JjL2NvcmUvc2VydmljZS5jCisrKysgYi9zcmMvY29yZS9zZXJ2aWNlLmMKK0BAIC00Myw2ICs0Myw3IEBACisgI2luY2x1ZGUgInVuaXQuaCIKKyAjaW5jbHVkZSAidXRmOC5oIgorICNpbmNsdWRlICJ1dGlsLmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyBzdGF0aWMgY29uc3QgVW5pdEFjdGl2ZVN0YXRlIHN0YXRlX3RyYW5zbGF0aW9uX3RhYmxlW19TRVJWSUNFX1NUQVRFX01BWF0gPSB7CisgICAgICAgICBbU0VSVklDRV9ERUFEXSA9IFVOSVRfSU5BQ1RJVkUsCitkaWZmIC0tZ2l0IGEvc3JjL2pvdXJuYWwvam91cm5hbGN0bC5jIGIvc3JjL2pvdXJuYWwvam91cm5hbGN0bC5jCitpbmRleCA2ZDZiYjFjZjYzLi42NjY2MzQ5YTM1IDEwMDY0NAorLS0tIGEvc3JjL2pvdXJuYWwvam91cm5hbGN0bC5jCisrKysgYi9zcmMvam91cm5hbC9qb3VybmFsY3RsLmMKK0BAIC03MCw2ICs3MCw3IEBACisgI2luY2x1ZGUgInVuaXQtbmFtZS5oIgorICNpbmNsdWRlICJ1c2VyLXV0aWwuaCIKKyAjaW5jbHVkZSAidmFybGluay5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgI2RlZmluZSBERUZBVUxUX0ZTU19JTlRFUlZBTF9VU0VDICgxNSpVU0VDX1BFUl9NSU5VVEUpCisgCitkaWZmIC0tZ2l0IGEvc3JjL2xpYnN5c3RlbWQvc2QtYnVzL2J1cy1tZXNzYWdlLmMgYi9zcmMvbGlic3lzdGVtZC9zZC1idXMvYnVzLW1lc3NhZ2UuYworaW5kZXggZWIwMjllNDQ1My4uZjMxZmU5ZDVhOCAxMDA2NDQKKy0tLSBhL3NyYy9saWJzeXN0ZW1kL3NkLWJ1cy9idXMtbWVzc2FnZS5jCisrKysgYi9zcmMvbGlic3lzdGVtZC9zZC1idXMvYnVzLW1lc3NhZ2UuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSAic3Rydi5oIgorICNpbmNsdWRlICJ0aW1lLXV0aWwuaCIKKyAjaW5jbHVkZSAidXRmOC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgc3RhdGljIGludCBtZXNzYWdlX2FwcGVuZF9iYXNpYyhzZF9idXNfbWVzc2FnZSAqbSwgY2hhciB0eXBlLCBjb25zdCB2b2lkICpwLCBjb25zdCB2b2lkICoqc3RvcmVkKTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGlic3lzdGVtZC9zZC1idXMvYnVzLW9iamVjdHMuYyBiL3NyYy9saWJzeXN0ZW1kL3NkLWJ1cy9idXMtb2JqZWN0cy5jCitpbmRleCBhZTY0M2NhY2M3Li4xYjc1MjI3MWE1IDEwMDY0NAorLS0tIGEvc3JjL2xpYnN5c3RlbWQvc2QtYnVzL2J1cy1vYmplY3RzLmMKKysrKyBiL3NyYy9saWJzeXN0ZW1kL3NkLWJ1cy9idXMtb2JqZWN0cy5jCitAQCAtMTMsNiArMTMsNyBAQAorICNpbmNsdWRlICJzZXQuaCIKKyAjaW5jbHVkZSAic3RyaW5nLXV0aWwuaCIKKyAjaW5jbHVkZSAic3Rydi5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgc3RhdGljIGludCBub2RlX3Z0YWJsZV9nZXRfdXNlcmRhdGEoCisgICAgICAgICAgICAgICAgIHNkX2J1cyAqYnVzLAorZGlmZiAtLWdpdCBhL3NyYy9saWJzeXN0ZW1kL3NkLWJ1cy90ZXN0LWJ1cy1iZW5jaG1hcmsuYyBiL3NyYy9saWJzeXN0ZW1kL3NkLWJ1cy90ZXN0LWJ1cy1iZW5jaG1hcmsuYworaW5kZXggOGRlMGE4NTllZS4uNGZkMGEyZTY5MiAxMDA2NDQKKy0tLSBhL3NyYy9saWJzeXN0ZW1kL3NkLWJ1cy90ZXN0LWJ1cy1iZW5jaG1hcmsuYworKysrIGIvc3JjL2xpYnN5c3RlbWQvc2QtYnVzL3Rlc3QtYnVzLWJlbmNobWFyay5jCitAQCAtMTQsNiArMTQsNyBAQAorICNpbmNsdWRlICJtaXNzaW5nX3Jlc291cmNlLmgiCisgI2luY2x1ZGUgInRpbWUtdXRpbC5oIgorICNpbmNsdWRlICJ1dGlsLmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyAjZGVmaW5lIE1BWF9TSVpFICgyKjEwMjQqMTAyNCkKKyAKK2RpZmYgLS1naXQgYS9zcmMvbG9jYWxlL2tleW1hcC11dGlsLmMgYi9zcmMvbG9jYWxlL2tleW1hcC11dGlsLmMKK2luZGV4IGY4YzM2Yzk0ZjUuLjQxZjU2MDZhZWEgMTAwNjQ0CistLS0gYS9zcmMvbG9jYWxlL2tleW1hcC11dGlsLmMKKysrKyBiL3NyYy9sb2NhbGUva2V5bWFwLXV0aWwuYworQEAgLTIyLDYgKzIyLDcgQEAKKyAjaW5jbHVkZSAic3RyaW5nLXV0aWwuaCIKKyAjaW5jbHVkZSAic3Rydi5oIgorICNpbmNsdWRlICJ0bXBmaWxlLXV0aWwuaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIHN0YXRpYyBib29sIHN0YXJ0c3dpdGhfY29tbWEoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqcHJlZml4KSB7CisgICAgICAgICBzID0gc3RhcnRzd2l0aChzLCBwcmVmaXgpOworZGlmZiAtLWdpdCBhL3NyYy9sb2dpbi9wYW1fc3lzdGVtZC5jIGIvc3JjL2xvZ2luL3BhbV9zeXN0ZW1kLmMKK2luZGV4IDNmNzYyY2JiYzMuLjAwNWNmZWE2NTggMTAwNjQ0CistLS0gYS9zcmMvbG9naW4vcGFtX3N5c3RlbWQuYworKysrIGIvc3JjL2xvZ2luL3BhbV9zeXN0ZW1kLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgImhvc3RuYW1lLXV0aWwuaCIKKyAjaW5jbHVkZSAibG9naW4tdXRpbC5oIgorICNpbmNsdWRlICJtYWNyby5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgI2luY2x1ZGUgInBhcnNlLXV0aWwuaCIKKyAjaW5jbHVkZSAicGF0aC11dGlsLmgiCisgI2luY2x1ZGUgInByb2Nlc3MtdXRpbC5oIgorZGlmZiAtLWdpdCBhL3NyYy9uZXR3b3JrL2dlbmVyYXRvci9uZXR3b3JrLWdlbmVyYXRvci5jIGIvc3JjL25ldHdvcmsvZ2VuZXJhdG9yL25ldHdvcmstZ2VuZXJhdG9yLmMKK2luZGV4IDBiNWFmMzM1NjYuLjljODA4Y2QwMTQgMTAwNjQ0CistLS0gYS9zcmMvbmV0d29yay9nZW5lcmF0b3IvbmV0d29yay1nZW5lcmF0b3IuYworKysrIGIvc3JjL25ldHdvcmsvZ2VuZXJhdG9yL25ldHdvcmstZ2VuZXJhdG9yLmMKK0BAIC0xMyw2ICsxMyw3IEBACisgI2luY2x1ZGUgInN0cmluZy10YWJsZS5oIgorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorICNpbmNsdWRlICJzdHJ2LmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyAvKgorICAgIyAubmV0d29yaworZGlmZiAtLWdpdCBhL3NyYy9uc3Bhd24vbnNwYXduLXNldHRpbmdzLmMgYi9zcmMvbnNwYXduL25zcGF3bi1zZXR0aW5ncy5jCitpbmRleCAzYTk5NzM2ODEzLi4yNzlmZWE0ZDg4IDEwMDY0NAorLS0tIGEvc3JjL25zcGF3bi9uc3Bhd24tc2V0dGluZ3MuYworKysrIGIvc3JjL25zcGF3bi9uc3Bhd24tc2V0dGluZ3MuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAjaW5jbHVkZSAic3Rydi5oIgorICNpbmNsdWRlICJ1c2VyLXV0aWwuaCIKKyAjaW5jbHVkZSAidXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgU2V0dGluZ3MgKnNldHRpbmdzX25ldyh2b2lkKSB7CisgICAgICAgICBTZXR0aW5ncyAqczsKK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2Rucy1kb21haW4uYyBiL3NyYy9zaGFyZWQvZG5zLWRvbWFpbi5jCitpbmRleCBmNjJhZDBhMGY1Li5mMWEyN2UxNThkIDEwMDY0NAorLS0tIGEvc3JjL3NoYXJlZC9kbnMtZG9tYWluLmMKKysrKyBiL3NyYy9zaGFyZWQvZG5zLWRvbWFpbi5jCitAQCAtMjQsNiArMjQsNyBAQAorICNpbmNsdWRlICJzdHJpbmctdXRpbC5oIgorICNpbmNsdWRlICJzdHJ2LmgiCisgI2luY2x1ZGUgInV0ZjguaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIGludCBkbnNfbGFiZWxfdW5lc2NhcGUoY29uc3QgY2hhciAqKm5hbWUsIGNoYXIgKmRlc3QsIHNpemVfdCBzeiwgRE5TTGFiZWxGbGFncyBmbGFncykgeworICAgICAgICAgY29uc3QgY2hhciAqbjsKK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2pvdXJuYWwtaW1wb3J0ZXIuYyBiL3NyYy9zaGFyZWQvam91cm5hbC1pbXBvcnRlci5jCitpbmRleCA3YzRmYzcwMjFkLi5hNmZmMjIxNGRmIDEwMDY0NAorLS0tIGEvc3JjL3NoYXJlZC9qb3VybmFsLWltcG9ydGVyLmMKKysrKyBiL3NyYy9zaGFyZWQvam91cm5hbC1pbXBvcnRlci5jCitAQCAtMTQsNiArMTQsNyBAQAorICNpbmNsdWRlICJwYXJzZS11dGlsLmgiCisgI2luY2x1ZGUgInN0cmluZy11dGlsLmgiCisgI2luY2x1ZGUgInVuYWxpZ25lZC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgZW51bSB7CisgICAgICAgICBJTVBPUlRFUl9TVEFURV9MSU5FID0gMCwgICAgLyogd2FpdGluZyB0byByZWFkLCBvciByZWFkaW5nIGxpbmUgKi8KK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2xvZ3Mtc2hvdy5jIGIvc3JjL3NoYXJlZC9sb2dzLXNob3cuYworaW5kZXggYjYxNWM3MGRmZi4uNzViMjZlOWMyMSAxMDA2NDQKKy0tLSBhL3NyYy9zaGFyZWQvbG9ncy1zaG93LmMKKysrKyBiL3NyYy9zaGFyZWQvbG9ncy1zaG93LmMKK0BAIC0zOSw2ICszOSw3IEBACisgI2luY2x1ZGUgInRpbWUtdXRpbC5oIgorICNpbmNsdWRlICJ1dGY4LmgiCisgI2luY2x1ZGUgInV0aWwuaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIC8qIHVwIHRvIHRocmVlIGxpbmVzIChlYWNoIHVwIHRvIDEwMCBjaGFyYWN0ZXJzKSBvciAzMDAgY2hhcmFjdGVycywgd2hpY2hldmVyIGlzIGxlc3MgKi8KKyAjZGVmaW5lIFBSSU5UX0xJTkVfVEhSRVNIT0xEIDMKK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL3BhZ2VyLmMgYi9zcmMvc2hhcmVkL3BhZ2VyLmMKK2luZGV4IDdjMjBiMTAwYjQuLmU0MjA5ZDNhOTUgMTAwNjQ0CistLS0gYS9zcmMvc2hhcmVkL3BhZ2VyLmMKKysrKyBiL3NyYy9zaGFyZWQvcGFnZXIuYworQEAgLTI1LDYgKzI1LDcgQEAKKyAjaW5jbHVkZSAic3Rydi5oIgorICNpbmNsdWRlICJ0ZXJtaW5hbC11dGlsLmgiCisgI2luY2x1ZGUgInV0aWwuaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIHN0YXRpYyBwaWRfdCBwYWdlcl9waWQgPSAwOworIAorZGlmZiAtLWdpdCBhL3NyYy9zaGFyZWQvcGF0aC1sb29rdXAuYyBiL3NyYy9zaGFyZWQvcGF0aC1sb29rdXAuYworaW5kZXggNmJmMGZmMDMxNi4uZjZjODAwOWNkMiAxMDA2NDQKKy0tLSBhL3NyYy9zaGFyZWQvcGF0aC1sb29rdXAuYworKysrIGIvc3JjL3NoYXJlZC9wYXRoLWxvb2t1cC5jCitAQCAtMjAsNiArMjAsNyBAQAorICNpbmNsdWRlICJ0bXBmaWxlLXV0aWwuaCIKKyAjaW5jbHVkZSAidXNlci11dGlsLmgiCisgI2luY2x1ZGUgInV0aWwuaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIGludCB4ZGdfdXNlcl9ydW50aW1lX2RpcihjaGFyICoqcmV0LCBjb25zdCBjaGFyICpzdWZmaXgpIHsKKyAgICAgICAgIGNvbnN0IGNoYXIgKmU7CitkaWZmIC0tZ2l0IGEvc3JjL3NoYXJlZC91aWQtcmFuZ2UuYyBiL3NyYy9zaGFyZWQvdWlkLXJhbmdlLmMKK2luZGV4IDdjYjdkOGE0NzcuLjhiMTJiOTEwODQgMTAwNjQ0CistLS0gYS9zcmMvc2hhcmVkL3VpZC1yYW5nZS5jCisrKysgYi9zcmMvc2hhcmVkL3VpZC1yYW5nZS5jCitAQCAtOSw2ICs5LDcgQEAKKyAjaW5jbHVkZSAic29ydC11dGlsLmgiCisgI2luY2x1ZGUgInVpZC1yYW5nZS5oIgorICNpbmNsdWRlICJ1c2VyLXV0aWwuaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIHN0YXRpYyBib29sIHVpZF9yYW5nZV9pbnRlcnNlY3QoVWlkUmFuZ2UgKnJhbmdlLCB1aWRfdCBzdGFydCwgdWlkX3QgbnIpIHsKKyAgICAgICAgIGFzc2VydChyYW5nZSk7CitkaWZmIC0tZ2l0IGEvc3JjL3NvY2tldC1wcm94eS9zb2NrZXQtcHJveHlkLmMgYi9zcmMvc29ja2V0LXByb3h5L3NvY2tldC1wcm94eWQuYworaW5kZXggYWJiYmM5ZjJkNi4uNjE3OWI1ODUxZSAxMDA2NDQKKy0tLSBhL3NyYy9zb2NrZXQtcHJveHkvc29ja2V0LXByb3h5ZC5jCisrKysgYi9zcmMvc29ja2V0LXByb3h5L3NvY2tldC1wcm94eWQuYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAic29ja2V0LXV0aWwuaCIKKyAjaW5jbHVkZSAic3RyaW5nLXV0aWwuaCIKKyAjaW5jbHVkZSAidXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgI2RlZmluZSBCVUZGRVJfU0laRSAoMjU2ICogMTAyNCkKKyAKK2RpZmYgLS1naXQgYS9zcmMvdGVzdC90ZXN0LWhleGRlY29jdC5jIGIvc3JjL3Rlc3QvdGVzdC1oZXhkZWNvY3QuYworaW5kZXggNTIyMTc0MjliMS4uYTA1ZTc3ODJmNiAxMDA2NDQKKy0tLSBhL3NyYy90ZXN0L3Rlc3QtaGV4ZGVjb2N0LmMKKysrKyBiL3NyYy90ZXN0L3Rlc3QtaGV4ZGVjb2N0LmMKK0BAIC02LDYgKzYsNyBAQAorICNpbmNsdWRlICJoZXhkZWNvY3QuaCIKKyAjaW5jbHVkZSAibWFjcm8uaCIKKyAjaW5jbHVkZSAic3RyaW5nLXV0aWwuaCIKKysjaW5jbHVkZSAibWlzc2luZy5oIgorIAorIHN0YXRpYyB2b2lkIHRlc3RfaGV4Y2hhcih2b2lkKSB7CisgICAgICAgICBhc3NlcnRfc2UoaGV4Y2hhcigweGEpID09ICdhJyk7CitkaWZmIC0tZ2l0IGEvc3JjL3VkZXYvdWRldi1idWlsdGluLXBhdGhfaWQuYyBiL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1wYXRoX2lkLmMKK2luZGV4IGU4ZjFjZTEzNTQuLjg2OTNjYjAyYTQgMTAwNjQ0CistLS0gYS9zcmMvdWRldi91ZGV2LWJ1aWx0aW4tcGF0aF9pZC5jCisrKysgYi9zcmMvdWRldi91ZGV2LWJ1aWx0aW4tcGF0aF9pZC5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlICJzdHJ2LmgiCisgI2luY2x1ZGUgInN5c2V4aXRzLmgiCisgI2luY2x1ZGUgInVkZXYtYnVpbHRpbi5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgX3ByaW50Zl8oMiwzKQorIHN0YXRpYyB2b2lkIHBhdGhfcHJlcGVuZChjaGFyICoqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pIHsKK2RpZmYgLS1naXQgYS9zcmMvdWRldi91ZGV2LWV2ZW50LmMgYi9zcmMvdWRldi91ZGV2LWV2ZW50LmMKK2luZGV4IDhjZmEyY2RmMjMuLmIwNjcwYzc3ZWMgMTAwNjQ0CistLS0gYS9zcmMvdWRldi91ZGV2LWV2ZW50LmMKKysrKyBiL3NyYy91ZGV2L3VkZXYtZXZlbnQuYworQEAgLTM1LDYgKzM1LDcgQEAKKyAjaW5jbHVkZSAidWRldi11dGlsLmgiCisgI2luY2x1ZGUgInVkZXYtd2F0Y2guaCIKKyAjaW5jbHVkZSAidXNlci11dGlsLmgiCisrI2luY2x1ZGUgIm1pc3NpbmcuaCIKKyAKKyB0eXBlZGVmIHN0cnVjdCBTcGF3biB7CisgICAgICAgICBzZF9kZXZpY2UgKmRldmljZTsKK2RpZmYgLS1naXQgYS9zcmMvdWRldi91ZGV2LXJ1bGVzLmMgYi9zcmMvdWRldi91ZGV2LXJ1bGVzLmMKK2luZGV4IDE2NDJmMTA1MzUuLmZlMmFhNzU0NzggMTAwNjQ0CistLS0gYS9zcmMvdWRldi91ZGV2LXJ1bGVzLmMKKysrKyBiL3NyYy91ZGV2L3VkZXYtcnVsZXMuYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAidWRldi1ldmVudC5oIgorICNpbmNsdWRlICJ1ZGV2LXJ1bGVzLmgiCisgI2luY2x1ZGUgInVzZXItdXRpbC5oIgorKyNpbmNsdWRlICJtaXNzaW5nLmgiCisgCisgI2RlZmluZSBSVUxFU19ESVJTIChjb25zdCBjaGFyKiBjb25zdCopIENPTkZfUEFUSFNfU1RSVigidWRldi9ydWxlcy5kIikKKyAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwNi1JbmNsdWRlLW5ldGluZXQtaWZfZXRoZXIuaC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwNi1JbmNsdWRlLW5ldGluZXQtaWZfZXRoZXIuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDczZDcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDA2LUluY2x1ZGUtbmV0aW5ldC1pZl9ldGhlci5oLnBhdGNoCkBAIC0wLDAgKzEsMjI3IEBACitJbmNsdWRlIG5ldGluZXQvaWZfZXRoZXIuaAorCitGaXhlcworL3BhdGgvdG8vc3lzdGVtZC9yZWNpcGUtc3lzcm9vdC91c3IvaW5jbHVkZS9uZXRpbmV0L2lmX2V0aGVyLmg6MTAxOjg6IGVycm9yOiByZWRlZmluaXRpb24gb2YgJ3N0cnVjdCBldGhoZHInCisgc3RydWN0IGV0aGhkciB7CisgICAgICAgIF5+fn5+fgorCithbmQgcmVsYXRlZCBhcnBoZHIsIGFycHJlcSwgYW5kIGFycHJlcV9vbGQgZXJyb3JzCisvcGF0aC90by9zeXN0ZW1kL3JlY2lwZS1zeXNyb290L3Vzci9pbmNsdWRlL25ldC9pZl9hcnAuaDoyMjo4OiBlcnJvcjogcmVkZWZpbml0aW9uIG9mICdzdHJ1Y3QgYXJwaGRyJworIHN0cnVjdCBhcnBoZHIgeworICAgICAgICBefn5+fn4KKworVGhlIGxhdHRlciByZXF1aXJlcyByZW1vdmluZyBzb21lIGluY2x1ZGVzIG9mIG5ldC9pZl9hcnAuaCB0byBhdm9pZAorY29uZmxpY3Rpbmcgd2l0aCBuZXRpbmV0L2lmX2V0aGVyLmguCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbXVzbCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1tyZWJhc2VkIGZvciBzeXN0ZW1kIDI0M10KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IE11cnJheSA8c2NvdHQubXVycmF5QGtvbnN1bGtvLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFttdXNsIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorW3JlYmFzZWQgZm9yIHN5c3RlbWQgMjQzXQorU2lnbmVkLW9mZi1ieTogU2NvdHQgTXVycmF5IDxzY290dC5tdXJyYXlAa29uc3Vsa28uY29tPgorLS0tCisgc3JjL2xpYnN5c3RlbWQtbmV0d29yay9zZC1kaGNwNi1jbGllbnQuYyAgfCAxIC0KKyBzcmMvbGlic3lzdGVtZC9zZC1uZXRsaW5rL25ldGxpbmstdHlwZXMuYyB8IDEgKworIHNyYy9tYWNoaW5lL21hY2hpbmUtZGJ1cy5jICAgICAgICAgICAgICAgIHwgMSArCisgc3JjL25ldHdvcmsvbmV0ZGV2L21hY3NlYy5jICAgICAgICAgICAgICAgfCAxICsKKyBzcmMvbmV0d29yay9uZXRkZXYvbmV0ZGV2LmMgICAgICAgICAgICAgICB8IDEgKworIHNyYy9uZXR3b3JrL25ldHdvcmtkLWJydmxhbi5jICAgICAgICAgICAgIHwgMSArCisgc3JjL25ldHdvcmsvbmV0d29ya2QtZGhjcC1jb21tb24uYyAgICAgICAgfCAxICsKKyBzcmMvbmV0d29yay9uZXR3b3JrZC1kaGNwNC5jICAgICAgICAgICAgICB8IDIgKy0KKyBzcmMvbmV0d29yay9uZXR3b3JrZC1kaGNwNi5jICAgICAgICAgICAgICB8IDIgKy0KKyBzcmMvbmV0d29yay9uZXR3b3JrZC1saW5rLmMgICAgICAgICAgICAgICB8IDIgKy0KKyBzcmMvbmV0d29yay9uZXR3b3JrZC1uZXR3b3JrLmMgICAgICAgICAgICB8IDEgKworIHNyYy9zaGFyZWQvZXRodG9vbC11dGlsLmMgICAgICAgICAgICAgICAgIHwgMSArCisgc3JjL3NoYXJlZC9ldGh0b29sLXV0aWwuaCAgICAgICAgICAgICAgICAgfCAxICsKKyBzcmMvdWRldi9uZXQvbGluay1jb25maWcuYyAgICAgICAgICAgICAgICB8IDEgKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1uZXRfc2V0dXBfbGluay5jICAgIHwgMSArCisgMTUgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9saWJzeXN0ZW1kLW5ldHdvcmsvc2QtZGhjcDYtY2xpZW50LmMgYi9zcmMvbGlic3lzdGVtZC1uZXR3b3JrL3NkLWRoY3A2LWNsaWVudC5jCitpbmRleCBkN2E1MzQ5YzcwLi42OGI0MWRmYjZjIDEwMDY0NAorLS0tIGEvc3JjL2xpYnN5c3RlbWQtbmV0d29yay9zZC1kaGNwNi1jbGllbnQuYworKysrIGIvc3JjL2xpYnN5c3RlbWQtbmV0d29yay9zZC1kaGNwNi1jbGllbnQuYworQEAgLTYsNyArNiw2IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKy0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisgI2luY2x1ZGUgPGxpbnV4L2lmX2luZmluaWJhbmQuaD4KKyAKKyAjaW5jbHVkZSAic2QtZGhjcDYtY2xpZW50LmgiCitkaWZmIC0tZ2l0IGEvc3JjL2xpYnN5c3RlbWQvc2QtbmV0bGluay9uZXRsaW5rLXR5cGVzLmMgYi9zcmMvbGlic3lzdGVtZC9zZC1uZXRsaW5rL25ldGxpbmstdHlwZXMuYworaW5kZXggZGU5YjhiMjFhYi4uZjY0ZjY1MDBmNyAxMDA2NDQKKy0tLSBhL3NyYy9saWJzeXN0ZW1kL3NkLW5ldGxpbmsvbmV0bGluay10eXBlcy5jCisrKysgYi9zcmMvbGlic3lzdGVtZC9zZC1uZXRsaW5rL25ldGxpbmstdHlwZXMuYworQEAgLTMsNiArMyw3IEBACisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorICNpbmNsdWRlIDxsaW51eC9jYW4vdnhjYW4uaD4KKyAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KK2RpZmYgLS1naXQgYS9zcmMvbWFjaGluZS9tYWNoaW5lLWRidXMuYyBiL3NyYy9tYWNoaW5lL21hY2hpbmUtZGJ1cy5jCitpbmRleCAwZDU4YjVlYjhiLi4wMTA5M2MxZjYyIDEwMDY0NAorLS0tIGEvc3JjL21hY2hpbmUvbWFjaGluZS1kYnVzLmMKKysrKyBiL3NyYy9tYWNoaW5lL21hY2hpbmUtZGJ1cy5jCitAQCAtNCw2ICs0LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisgCisgLyogV2hlbiB3ZSBpbmNsdWRlIGxpYmdlbi5oIGJlY2F1c2Ugd2UgbmVlZCBkaXJuYW1lKCkgd2UgaW1tZWRpYXRlbHkKKyAgKiB1bmRlZmluZSBiYXNlbmFtZSgpIHNpbmNlIGxpYmdlbi5oIGRlZmluZXMgaXQgYXMgYSBtYWNybyB0byB0aGUgUE9TSVgKK2RpZmYgLS1naXQgYS9zcmMvbmV0d29yay9uZXRkZXYvbWFjc2VjLmMgYi9zcmMvbmV0d29yay9uZXRkZXYvbWFjc2VjLmMKK2luZGV4IGNmMjgxZTc1YTYuLjI2OWRjNjE4ZmYgMTAwNjQ0CistLS0gYS9zcmMvbmV0d29yay9uZXRkZXYvbWFjc2VjLmMKKysrKyBiL3NyYy9uZXR3b3JrL25ldGRldi9tYWNzZWMuYworQEAgLTEsNSArMSw2IEBACisgLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xKyAqLworIAorKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyAjaW5jbHVkZSA8bGludXgvaWZfbWFjc2VjLmg+CitkaWZmIC0tZ2l0IGEvc3JjL25ldHdvcmsvbmV0ZGV2L25ldGRldi5jIGIvc3JjL25ldHdvcmsvbmV0ZGV2L25ldGRldi5jCitpbmRleCA3NzM1YjQ1NWI3Li5lZDRlZGE0YTQ0IDEwMDY0NAorLS0tIGEvc3JjL25ldHdvcmsvbmV0ZGV2L25ldGRldi5jCisrKysgYi9zcmMvbmV0d29yay9uZXRkZXYvbmV0ZGV2LmMKK0BAIC0xLDUgKzEsNiBAQAorIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSsgKi8KKyAKKysjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorIAorZGlmZiAtLWdpdCBhL3NyYy9uZXR3b3JrL25ldHdvcmtkLWJydmxhbi5jIGIvc3JjL25ldHdvcmsvbmV0d29ya2QtYnJ2bGFuLmMKK2luZGV4IGMzYzVkNTM1YWMuLmViZWE0MDhjODkgMTAwNjQ0CistLS0gYS9zcmMvbmV0d29yay9uZXR3b3JrZC1icnZsYW4uYworKysrIGIvc3JjL25ldHdvcmsvbmV0d29ya2QtYnJ2bGFuLmMKK0BAIC00LDYgKzQsNyBAQAorICoqKi8KKyAKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisgI2luY2x1ZGUgPGxpbnV4L2lmX2JyaWRnZS5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgCitkaWZmIC0tZ2l0IGEvc3JjL25ldHdvcmsvbmV0d29ya2QtZGhjcC1jb21tb24uYyBiL3NyYy9uZXR3b3JrL25ldHdvcmtkLWRoY3AtY29tbW9uLmMKK2luZGV4IDYyNmI5NzU4MzkuLjQyZmU5MmYzMjAgMTAwNjQ0CistLS0gYS9zcmMvbmV0d29yay9uZXR3b3JrZC1kaGNwLWNvbW1vbi5jCisrKysgYi9zcmMvbmV0d29yay9uZXR3b3JrZC1kaGNwLWNvbW1vbi5jCitAQCAtMSw2ICsxLDcgQEAKKyAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjErICovCisgCisgI2luY2x1ZGUgIm5ldHdvcmtkLWRoY3AtY29tbW9uLmgiCisrI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyAjaW5jbHVkZSAibmV0d29ya2QtbmV0d29yay5oIgorICNpbmNsdWRlICJwYXJzZS11dGlsLmgiCisgI2luY2x1ZGUgInN0cmluZy10YWJsZS5oIgorZGlmZiAtLWdpdCBhL3NyYy9uZXR3b3JrL25ldHdvcmtkLWRoY3A0LmMgYi9zcmMvbmV0d29yay9uZXR3b3JrZC1kaGNwNC5jCitpbmRleCA2NjI3NzBiNTBlLi5jNmFiNjJhOTRkIDEwMDY0NAorLS0tIGEvc3JjL25ldHdvcmsvbmV0d29ya2QtZGhjcDQuYworKysrIGIvc3JjL25ldHdvcmsvbmV0d29ya2QtZGhjcDQuYworQEAgLTEsOCArMSw4IEBACisgLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xKyAqLworIAorKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bGludXgvaWYuaD4KKy0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisgCisgI2luY2x1ZGUgImFsbG9jLXV0aWwuaCIKKyAjaW5jbHVkZSAiaG9zdG5hbWUtdXRpbC5oIgorZGlmZiAtLWdpdCBhL3NyYy9uZXR3b3JrL25ldHdvcmtkLWRoY3A2LmMgYi9zcmMvbmV0d29yay9uZXR3b3JrZC1kaGNwNi5jCitpbmRleCA4YWQ3MzZhODJiLi5mNDFiNGQ4MzRlIDEwMDY0NAorLS0tIGEvc3JjL25ldHdvcmsvbmV0d29ya2QtZGhjcDYuYworKysrIGIvc3JjL25ldHdvcmsvbmV0d29ya2QtZGhjcDYuYworQEAgLTMsOSArMyw5IEBACisgICBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqKiovCisgCisrI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxsaW51eC9pZi5oPgorLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyAjaW5jbHVkZSAic2QtcmFkdi5oIgorIAorICNpbmNsdWRlICJzZC1kaGNwNi1jbGllbnQuaCIKK2RpZmYgLS1naXQgYS9zcmMvbmV0d29yay9uZXR3b3JrZC1saW5rLmMgYi9zcmMvbmV0d29yay9uZXR3b3JrZC1saW5rLmMKK2luZGV4IGY1YmI3ODg5MGEuLmYxM2EzNmI3OTEgMTAwNjQ0CistLS0gYS9zcmMvbmV0d29yay9uZXR3b3JrZC1saW5rLmMKKysrKyBiL3NyYy9uZXR3b3JrL25ldHdvcmtkLWxpbmsuYworQEAgLTEsOCArMSw4IEBACisgLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xKyAqLworIAorKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bGludXgvaWYuaD4KKy0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorICNpbmNsdWRlICJhbGxvYy11dGlsLmgiCitkaWZmIC0tZ2l0IGEvc3JjL25ldHdvcmsvbmV0d29ya2QtbmV0d29yay5jIGIvc3JjL25ldHdvcmsvbmV0d29ya2QtbmV0d29yay5jCitpbmRleCAyYjhkMGViMmZiLi4yZjc5ZWYyNWNkIDEwMDY0NAorLS0tIGEvc3JjL25ldHdvcmsvbmV0d29ya2QtbmV0d29yay5jCisrKysgYi9zcmMvbmV0d29yay9uZXR3b3JrZC1uZXR3b3JrLmMKK0BAIC0xLDUgKzEsNiBAQAorIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSsgKi8KKyAKKysjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2V0aHRvb2wtdXRpbC5jIGIvc3JjL3NoYXJlZC9ldGh0b29sLXV0aWwuYworaW5kZXggYjA5NjFkZjcyZS4uNTNmY2JiZDg0YiAxMDA2NDQKKy0tLSBhL3NyYy9zaGFyZWQvZXRodG9vbC11dGlsLmMKKysrKyBiL3NyYy9zaGFyZWQvZXRodG9vbC11dGlsLmMKK0BAIC0xLDUgKzEsNiBAQAorIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSsgKi8KKyAKKysjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2V0aHRvb2wtdXRpbC5oIGIvc3JjL3NoYXJlZC9ldGh0b29sLXV0aWwuaAoraW5kZXggOGIzMmIyNDNmMy4uMjYyYjgxOTk3NiAxMDA2NDQKKy0tLSBhL3NyYy9zaGFyZWQvZXRodG9vbC11dGlsLmgKKysrKyBiL3NyYy9zaGFyZWQvZXRodG9vbC11dGlsLmgKK0BAIC0yLDYgKzIsNyBAQAorICNwcmFnbWEgb25jZQorIAorICNpbmNsdWRlIDxtYWNyby5oPgorKyNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+CisgI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyAKKyAjaW5jbHVkZSAiY29uZi1wYXJzZXIuaCIKK2RpZmYgLS1naXQgYS9zcmMvdWRldi9uZXQvbGluay1jb25maWcuYyBiL3NyYy91ZGV2L25ldC9saW5rLWNvbmZpZy5jCitpbmRleCBkNDRhZjY0ZDVlLi5mZDA1MmYxNTkxIDEwMDY0NAorLS0tIGEvc3JjL3VkZXYvbmV0L2xpbmstY29uZmlnLmMKKysrKyBiL3NyYy91ZGV2L25ldC9saW5rLWNvbmZpZy5jCitAQCAtMSw1ICsxLDYgQEAKKyAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjErICovCisgCisrI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvZXRoZXIuaD4KKyAKK2RpZmYgLS1naXQgYS9zcmMvdWRldi91ZGV2LWJ1aWx0aW4tbmV0X3NldHVwX2xpbmsuYyBiL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1uZXRfc2V0dXBfbGluay5jCitpbmRleCBlZTNjYTlmYTM4Li45YWE0ZTgyODc0IDEwMDY0NAorLS0tIGEvc3JjL3VkZXYvdWRldi1idWlsdGluLW5ldF9zZXR1cF9saW5rLmMKKysrKyBiL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1uZXRfc2V0dXBfbGluay5jCitAQCAtMSw1ICsxLDYgQEAKKyAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjErICovCisgCisrI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyAjaW5jbHVkZSAiZGV2aWNlLXV0aWwuaCIKKyAjaW5jbHVkZSAiYWxsb2MtdXRpbC5oIgorICNpbmNsdWRlICJsaW5rLWNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDA3LWRvbi10LWZhaWwtaWYtR0xPQl9CUkFDRS1hbmQtR0xPQl9BTFRESVJGVU5DLWlzLW5vdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwNy1kb24tdC1mYWlsLWlmLUdMT0JfQlJBQ0UtYW5kLUdMT0JfQUxURElSRlVOQy1pcy1ub3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmN2Y1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwNy1kb24tdC1mYWlsLWlmLUdMT0JfQlJBQ0UtYW5kLUdMT0JfQUxURElSRlVOQy1pcy1ub3QucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK0Zyb20gZjhhMjM5YjE4MjE1OGNhMGE1MzdiYTA1M2NiMGU2YmFkOWMzYTJmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjUgRmViIDIwMTkgMTQ6NTY6MjEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8yNF0gZG9uJ3QgZmFpbCBpZiBHTE9CX0JSQUNFIGFuZCBHTE9CX0FMVERJUkZVTkMgaXMgbm90IAorIGRlZmluZWQKKworSWYgdGhlIHN0YW5kYXJkIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIGJyYWNlCitleHBhbnNpb24gdXNlcnMganVzdCB3b24ndCBnZXQgaXQuCisKK0RvbnQgdXNlIEdOVSBHTE9CIGV4dGVudGlvbnMgb24gbm9uLWdsaWJjIHN5c3RlbXMKKworQ29uZGl0aW9uYWxpemUgdXNlIG9mIEdMT0JfQUxURElSRlVOQworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitbcmViYXNlZCBmb3Igc3lzdGVtZCAyNDNdCitTaWduZWQtb2ZmLWJ5OiBTY290dCBNdXJyYXkgPHNjb3R0Lm11cnJheUBrb25zdWxrby5jb20+CistLS0KKyBzcmMvYmFzaWMvZ2xvYi11dGlsLmMgICAgIHwgMTIgKysrKysrKysrKysrCisgc3JjL3Rlc3QvdGVzdC1nbG9iLXV0aWwuYyB8IDE2ICsrKysrKysrKysrKysrKysKKyBzcmMvdG1wZmlsZXMvdG1wZmlsZXMuYyAgIHwgMTAgKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL2dsb2ItdXRpbC5jIGIvc3JjL2Jhc2ljL2dsb2ItdXRpbC5jCitpbmRleCBiMzM1YWY4ZDk3Li4yY2RmYzExZjE2IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL2dsb2ItdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvZ2xvYi11dGlsLmMKK0BAIC0xNCw2ICsxNCwxMiBAQAorICNpbmNsdWRlICJwYXRoLXV0aWwuaCIKKyAjaW5jbHVkZSAic3Rydi5oIgorIAorKy8qIERvbid0IGZhaWwgaWYgdGhlIHN0YW5kYXJkIGxpYnJhcnkKKysgKiBkb2Vzbid0IHByb3ZpZGUgYnJhY2UgZXhwYW5zaW9uICovCisrI2lmbmRlZiBHTE9CX0JSQUNFCisrI2RlZmluZSBHTE9CX0JSQUNFIDAKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZCBjbG9zZWRpcl93cmFwcGVyKHZvaWQqIHYpIHsKKyAgICAgICAgICh2b2lkKSBjbG9zZWRpcih2KTsKKyB9CitAQCAtMjEsNiArMjcsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZWRpcl93cmFwcGVyKHZvaWQqIHYpIHsKKyBpbnQgc2FmZV9nbG9iKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywgZ2xvYl90ICpwZ2xvYikgeworICAgICAgICAgaW50IGs7CisgCisrI2lmZGVmIEdMT0JfQUxURElSRlVOQworICAgICAgICAgLyogV2Ugd2FudCB0byBzZXQgR0xPQl9BTFRESVJGVU5DIG91cnNlbHZlcywgZG9uJ3QgYWxsb3cgaXQgdG8gYmUgc2V0LiAqLworICAgICAgICAgYXNzZXJ0KCEoZmxhZ3MgJiBHTE9CX0FMVERJUkZVTkMpKTsKKyAKK0BAIC0zNCw5ICs0MSwxNCBAQCBpbnQgc2FmZV9nbG9iKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywgZ2xvYl90ICpwZ2xvYikgeworICAgICAgICAgICAgICAgICBwZ2xvYi0+Z2xfbHN0YXQgPSBsc3RhdDsKKyAgICAgICAgIGlmICghcGdsb2ItPmdsX3N0YXQpCisgICAgICAgICAgICAgICAgIHBnbG9iLT5nbF9zdGF0ID0gc3RhdDsKKysjZW5kaWYKKyAKKyAgICAgICAgIGVycm5vID0gMDsKKysjaWZkZWYgR0xPQl9BTFRESVJGVU5DCisgICAgICAgICBrID0gZ2xvYihwYXRoLCBmbGFncyB8IEdMT0JfQUxURElSRlVOQywgTlVMTCwgcGdsb2IpOworKyNlbHNlCisrICAgICAgICBrID0gZ2xvYihwYXRoLCBmbGFncywgTlVMTCwgcGdsb2IpOworKyNlbmRpZgorICAgICAgICAgaWYgKGsgPT0gR0xPQl9OT01BVENIKQorICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKKyAgICAgICAgIGlmIChrID09IEdMT0JfTk9TUEFDRSkKK2RpZmYgLS1naXQgYS9zcmMvdGVzdC90ZXN0LWdsb2ItdXRpbC5jIGIvc3JjL3Rlc3QvdGVzdC1nbG9iLXV0aWwuYworaW5kZXggYjRmNDE0NDVmZS4uZjBkNDc0ZWQxNCAxMDA2NDQKKy0tLSBhL3NyYy90ZXN0L3Rlc3QtZ2xvYi11dGlsLmMKKysrKyBiL3NyYy90ZXN0L3Rlc3QtZ2xvYi11dGlsLmMKK0BAIC0xMyw2ICsxMywxMiBAQAorICNpbmNsdWRlICJybS1yZi5oIgorICNpbmNsdWRlICJ0bXBmaWxlLXV0aWwuaCIKKyAKKysvKiBEb24ndCBmYWlsIGlmIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CisrICogZG9lc24ndCBwcm92aWRlIGJyYWNlIGV4cGFuc2lvbiAqLworKyNpZm5kZWYgR0xPQl9CUkFDRQorKyNkZWZpbmUgR0xPQl9CUkFDRSAwCisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQgdGVzdF9nbG9iX2V4aXN0cyh2b2lkKSB7CisgICAgICAgICBjaGFyIG5hbWVbXSA9ICIvdG1wL3Rlc3QtZ2xvYl9leGlzdHMuWFhYWFhYIjsKKyAgICAgICAgIGludCBmZCA9IC0xOworQEAgLTQwLDExICs0NiwxMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2Jfbm9fZG90KHZvaWQpIHsKKyAgICAgICAgIGNvbnN0IGNoYXIgKmZuOworIAorICAgICAgICAgX2NsZWFudXBfZ2xvYmZyZWVfIGdsb2JfdCBnID0geworKyNpZmRlZiBHTE9CX0FMVERJUkZVTkMKKyAgICAgICAgICAgICAgICAgLmdsX2Nsb3NlZGlyID0gY2xvc2VkaXJfd3JhcHBlciwKKyAgICAgICAgICAgICAgICAgLmdsX3JlYWRkaXIgPSAoc3RydWN0IGRpcmVudCAqKCopKHZvaWQgKikpIHJlYWRkaXJfbm9fZG90LAorICAgICAgICAgICAgICAgICAuZ2xfb3BlbmRpciA9ICh2b2lkICooKikoY29uc3QgY2hhciAqKSkgb3BlbmRpciwKKyAgICAgICAgICAgICAgICAgLmdsX2xzdGF0ID0gbHN0YXQsCisgICAgICAgICAgICAgICAgIC5nbF9zdGF0ID0gc3RhdCwKKysjZW5kaWYKKyAgICAgICAgIH07CisgCisgICAgICAgICBpbnQgcjsKK0BAIC01MiwxMSArNjAsMTkgQEAgc3RhdGljIHZvaWQgdGVzdF9nbG9iX25vX2RvdCh2b2lkKSB7CisgICAgICAgICBhc3NlcnRfc2UobWtkdGVtcCh0ZW1wbGF0ZSkpOworIAorICAgICAgICAgZm4gPSBzdHJqb2luYSh0ZW1wbGF0ZSwgIi8qIik7CisrI2lmZGVmIEdMT0JfQUxURElSRlVOQworICAgICAgICAgciA9IGdsb2IoZm4sIEdMT0JfTk9TT1JUfEdMT0JfQlJBQ0V8R0xPQl9BTFRESVJGVU5DLCBOVUxMLCAmZyk7CisrI2Vsc2UKKysgICAgICAgIHIgPSBnbG9iKGZuLCBHTE9CX05PU09SVHxHTE9CX0JSQUNFLCBOVUxMLCAmZyk7CisrI2VuZGlmCisgICAgICAgICBhc3NlcnRfc2UociA9PSBHTE9CX05PTUFUQ0gpOworIAorICAgICAgICAgZm4gPSBzdHJqb2luYSh0ZW1wbGF0ZSwgIi8uKiIpOworKyNpZmRlZiBHTE9CX0FMVERJUkZVTkMKKyAgICAgICAgIHIgPSBnbG9iKGZuLCBHTE9CX05PU09SVHxHTE9CX0JSQUNFfEdMT0JfQUxURElSRlVOQywgTlVMTCwgJmcpOworKyNlbHNlCisrICAgICAgICByID0gZ2xvYihmbiwgR0xPQl9OT1NPUlR8R0xPQl9CUkFDRSwgTlVMTCwgJmcpOworKyNlbmRpZgorICAgICAgICAgYXNzZXJ0X3NlKHIgPT0gR0xPQl9OT01BVENIKTsKKyAKKyAgICAgICAgICh2b2lkKSBybV9yZih0ZW1wbGF0ZSwgUkVNT1ZFX1JPT1R8UkVNT1ZFX1BIWVNJQ0FMKTsKK2RpZmYgLS1naXQgYS9zcmMvdG1wZmlsZXMvdG1wZmlsZXMuYyBiL3NyYy90bXBmaWxlcy90bXBmaWxlcy5jCitpbmRleCAzYzMwNjEyYWYxLi4xNGJjNDI4MDg1IDEwMDY0NAorLS0tIGEvc3JjL3RtcGZpbGVzL3RtcGZpbGVzLmMKKysrKyBiL3NyYy90bXBmaWxlcy90bXBmaWxlcy5jCitAQCAtNjMsNiArNjMsMTIgQEAKKyAjaW5jbHVkZSAidW1hc2stdXRpbC5oIgorICNpbmNsdWRlICJ1c2VyLXV0aWwuaCIKKyAKKysvKiBEb24ndCBmYWlsIGlmIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CisrICogZG9lc24ndCBwcm92aWRlIGJyYWNlIGV4cGFuc2lvbiAqLworKyNpZm5kZWYgR0xPQl9CUkFDRQorKyNkZWZpbmUgR0xPQl9CUkFDRSAwCisrI2VuZGlmCisrCisgLyogVGhpcyByZWFkcyBhbGwgZmlsZXMgbGlzdGVkIGluIC9ldGMvdG1wZmlsZXMuZC8/Ki5jb25mIGFuZCBjcmVhdGVzCisgICogdGhlbSBpbiB0aGUgZmlsZSBzeXN0ZW0uIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBjcmVhdGUKKyAgKiBwcm9wZXJseSBvd25lZCBkaXJlY3RvcmllcyBiZW5lYXRoIC90bXAsIC92YXIvdG1wLCAvcnVuLCB3aGljaCBhcmUKK0BAIC0xODUzLDcgKzE4NTksOSBAQCBmaW5pc2g6CisgCisgc3RhdGljIGludCBnbG9iX2l0ZW0oSXRlbSAqaSwgYWN0aW9uX3QgYWN0aW9uKSB7CisgICAgICAgICBfY2xlYW51cF9nbG9iZnJlZV8gZ2xvYl90IGcgPSB7CisrI2lmZGVmIEdMT0JfQUxURElSRlVOQworICAgICAgICAgICAgICAgICAuZ2xfb3BlbmRpciA9ICh2b2lkICooKikoY29uc3QgY2hhciAqKSkgb3BlbmRpcl9ub21vZCwKKysjZW5kaWYKKyAgICAgICAgIH07CisgICAgICAgICBpbnQgciA9IDAsIGs7CisgICAgICAgICBjaGFyICoqZm47CitAQCAtMTg3Myw3ICsxODgxLDkgQEAgc3RhdGljIGludCBnbG9iX2l0ZW0oSXRlbSAqaSwgYWN0aW9uX3QgYWN0aW9uKSB7CisgCisgc3RhdGljIGludCBnbG9iX2l0ZW1fcmVjdXJzaXZlbHkoSXRlbSAqaSwgZmRhY3Rpb25fdCBhY3Rpb24pIHsKKyAgICAgICAgIF9jbGVhbnVwX2dsb2JmcmVlXyBnbG9iX3QgZyA9IHsKKysjaWZkZWYgR0xPQl9BTFRESVJGVU5DCisgICAgICAgICAgICAgICAgIC5nbF9vcGVuZGlyID0gKHZvaWQgKigqKShjb25zdCBjaGFyICopKSBvcGVuZGlyX25vbW9kLAorKyNlbmRpZgorICAgICAgICAgfTsKKyAgICAgICAgIGludCByID0gMCwgazsKKyAgICAgICAgIGNoYXIgKipmbjsKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwOC1hZGQtbWlzc2luZy1GVFdfLW1hY3Jvcy1mb3ItbXVzbC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAwOC1hZGQtbWlzc2luZy1GVFdfLW1hY3Jvcy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWYyMzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDA4LWFkZC1taXNzaW5nLUZUV18tbWFjcm9zLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gNmNkMTdjNzUzZDJjMGE5MGZjNzkxZjY5YmJjNjk0Y2JjODU1NmE0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjUgRmViIDIwMTkgMTU6MDA6MDYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8yNF0gYWRkIG1pc3NpbmcgRlRXXyBtYWNyb3MgZm9yIG11c2wKKworVGhpcyBpcyB0byBhdm9pZCBidWlsZCBmYWlsdXJlcyBsaWtlIGJlbG93IGZvciBtdXNsLgorCisgIGxvY2FsZS11dGlsLmM6Mjk2OjI0OiBlcnJvcjogJ0ZUV19TVE9QJyB1bmRlY2xhcmVkCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbXVzbCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2Jhc2ljL21pc3NpbmdfdHlwZS5oIHwgMjAgKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL21pc3NpbmdfdHlwZS5oIGIvc3JjL2Jhc2ljL21pc3NpbmdfdHlwZS5oCitpbmRleCBjNDg3ZTY1Li4yMzYwMmViIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL21pc3NpbmdfdHlwZS5oCisrKysgYi9zcmMvYmFzaWMvbWlzc2luZ190eXBlLmgKK0BAIC0xOSwzICsxOSwyMyBAQCB0eXBlZGVmIGludCAoKmNvbXBhcmlzb25fZm5fdCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworICNkZWZpbmUgX19DT01QQVJfRk5fVAorIHR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworICNlbmRpZgorKworKyNpZm5kZWYgRlRXX0FDVElPTlJFVFZBTAorKyNkZWZpbmUgRlRXX0FDVElPTlJFVFZBTCAxNgorKyNlbmRpZgorKworKyNpZm5kZWYgRlRXX0NPTlRJTlVFCisrI2RlZmluZSBGVFdfQ09OVElOVUUgMAorKyNlbmRpZgorKworKyNpZm5kZWYgRlRXX1NUT1AKKysjZGVmaW5lIEZUV19TVE9QIDEKKysjZW5kaWYKKysKKysjaWZuZGVmIEZUV19TS0lQX1NVQlRSRUUKKysjZGVmaW5lIEZUV19TS0lQX1NVQlRSRUUgMgorKyNlbmRpZgorKworKyNpZm5kZWYgRlRXX1NLSVBfU0lCTElOR1MKKysjZGVmaW5lIEZUV19TS0lQX1NJQkxJTkdTIDMKKysjZW5kaWYKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDEwLWZpeC1taXNzaW5nLW9mLV9fcmVnaXN0ZXJfYXRmb3JrLWZvci1ub24tZ2xpYmMtYnVpbGQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMTAtZml4LW1pc3Npbmctb2YtX19yZWdpc3Rlcl9hdGZvcmstZm9yLW5vbi1nbGliYy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmFjZDAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDEwLWZpeC1taXNzaW5nLW9mLV9fcmVnaXN0ZXJfYXRmb3JrLWZvci1ub24tZ2xpYmMtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBmMWY0YjRmOTY4NGZlZDE4NWJmYThiOWVkNDA5Y2RmMjQxNjU3ZTk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyNSBGZWIgMjAxOSAxNTowMzo0NyArMDgwMAorU3ViamVjdDogW1BBVENIIDEwLzI0XSBmaXggbWlzc2luZyBvZiBfX3JlZ2lzdGVyX2F0Zm9yayBmb3Igbm9uLWdsaWJjIGJ1aWxkcworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9iYXNpYy9wcm9jZXNzLXV0aWwuYyB8IDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9wcm9jZXNzLXV0aWwuYyBiL3NyYy9iYXNpYy9wcm9jZXNzLXV0aWwuYworaW5kZXggNzhjZTQzYi4uYWVjMmRhZiAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9wcm9jZXNzLXV0aWwuYworKysrIGIvc3JjL2Jhc2ljL3Byb2Nlc3MtdXRpbC5jCitAQCAtMjIsNiArMjIsOSBAQAorICNpZiBIQVZFX1ZBTEdSSU5EX1ZBTEdSSU5EX0gKKyAjaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KKyAjZW5kaWYKKysjaWZuZGVmIF9fR0xJQkNfXworKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisrI2VuZGlmCisgCisgI2luY2x1ZGUgImFsbG9jLXV0aWwuaCIKKyAjaW5jbHVkZSAiYXJjaGl0ZWN0dXJlLmgiCitAQCAtMTE2MCwxMSArMTE2MywxNSBAQCB2b2lkIHJlc2V0X2NhY2hlZF9waWQodm9pZCkgeworICAgICAgICAgY2FjaGVkX3BpZCA9IENBQ0hFRF9QSURfVU5TRVQ7CisgfQorIAorKyNpZmRlZiBfX0dMSUJDX18KKyAvKiBXZSB1c2UgZ2xpYmMgX19yZWdpc3Rlcl9hdGZvcmsoKSArIF9fZHNvX2hhbmRsZSBkaXJlY3RseSBoZXJlLCBhcyB0aGV5IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGdsaWJjCisgICogaGVhZGVycy4gX19yZWdpc3Rlcl9hdGZvcmsoKSBpcyBtb3N0bHkgZXF1aXZhbGVudCB0byBwdGhyZWFkX2F0Zm9yaygpLCBidXQgZG9lc24ndCByZXF1aXJlIHVzIHRvIGxpbmsgYWdhaW5zdAorICAqIGxpYnB0aHJlYWQsIGFzIGl0IGlzIHBhcnQgb2YgZ2xpYmMgYW55d2F5LiAqLworIGV4dGVybiBpbnQgX19yZWdpc3Rlcl9hdGZvcmsodm9pZCAoKnByZXBhcmUpICh2b2lkKSwgdm9pZCAoKnBhcmVudCkgKHZvaWQpLCB2b2lkICgqY2hpbGQpICh2b2lkKSwgdm9pZCAqZHNvX2hhbmRsZSk7CisgZXh0ZXJuIHZvaWQqIF9fZHNvX2hhbmRsZSBfd2Vha187CisrI2Vsc2UKKysjZGVmaW5lIF9fcmVnaXN0ZXJfYXRmb3JrKHByZXBhcmUscGFyZW50LGNoaWxkLGRzbykgcHRocmVhZF9hdGZvcmsocHJlcGFyZSxwYXJlbnQsY2hpbGQpCisrI2VuZGlmCisgCisgcGlkX3QgZ2V0cGlkX2NhY2hlZCh2b2lkKSB7CisgICAgICAgICBzdGF0aWMgYm9vbCBpbnN0YWxsZWQgPSBmYWxzZTsKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDExLVVzZS11aW50bWF4X3QtZm9yLWhhbmRsaW5nLXJsaW1fdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAxMS1Vc2UtdWludG1heF90LWZvci1oYW5kbGluZy1ybGltX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlZGE5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAxMS1Vc2UtdWludG1heF90LWZvci1oYW5kbGluZy1ybGltX3QucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorRnJvbSBlM2Y4NDdiZDAzMzhkMjdhZmYzMzM1YjQyNjYxZDhhNGI2NmI5NjVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyNSBGZWIgMjAxOSAxNToxMjo0MSArMDgwMAorU3ViamVjdDogW1BBVENIIDExLzI0XSBVc2UgdWludG1heF90IGZvciBoYW5kbGluZyBybGltX3QKKworUFJJdXszMiw2NH0gaXMgbm90IHJpZ2h0IGZvcm1hdCB0byByZXByZXNlbnQgcmxpbV90IHR5cGUKK3RoZXJlZm9yZSB1c2UgJWp1IGFuZCB0eXBlY2FzdCB0aGUgcmxpbV90IHZhcmlhYmxlcyB0bwordWludG1heF90LgorCitGaXhlcyBwb3J0YWJsaWxpdHkgZXJyb3JzIGxpa2UKKworZXhlY3V0ZS5jOjM0NDY6MzY6IGVycm9yOiBmb3JtYXQgJyVsdScgZXhwZWN0cyBhcmd1bWVudCBvZiB0eXBlICdsb25nIHVuc2lnbmVkIGludCcsIGJ1dCBhcmd1bWVudCA1IGhhcyB0eXBlICdybGltX3Qge2FrYSBsb25nIGxvbmcgdW5zaWduZWQgaW50fScgWy1XZXJyb3I9Zm9ybWF0PV0KK3wgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIiVzJXM6ICIgUkxJTV9GTVQgIlxuIiwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn4KK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBybGltaXRfdG9fc3RyaW5nKGkpLCBjLT5ybGltaXRbaV0tPnJsaW1fbWF4KTsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtodHRwczovL2dpdGh1Yi5jb20vc3lzdGVtZC9zeXN0ZW1kL3B1bGwvNzE5OV0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1tSZWJhc2VkIGZvciB2MjQxXQorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2Jhc2ljL2Zvcm1hdC11dGlsLmggfCAgOCArLS0tLS0tLQorIHNyYy9iYXNpYy9ybGltaXQtdXRpbC5jIHwgMTAgKysrKystLS0tLQorIHNyYy9jb3JlL2V4ZWN1dGUuYyAgICAgIHwgIDQgKystLQorIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9mb3JtYXQtdXRpbC5oIGIvc3JjL2Jhc2ljL2Zvcm1hdC11dGlsLmgKK2luZGV4IGRlY2U1ZDMuLmRiYjg3YmMgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvZm9ybWF0LXV0aWwuaAorKysrIGIvc3JjL2Jhc2ljL2Zvcm1hdC11dGlsLmgKK0BAIC00MiwxMyArNDIsNyBAQAorICMgIGRlZmluZSBQUklfVElNRVggImxpIgorICNlbmRpZgorIAorLSNpZiBTSVpFT0ZfUkxJTV9UID09IDgKKy0jICBkZWZpbmUgUkxJTV9GTVQgIiUiIFBSSXU2NAorLSNlbGlmIFNJWkVPRl9STElNX1QgPT0gNAorLSMgIGRlZmluZSBSTElNX0ZNVCAiJSIgUFJJdTMyCistI2Vsc2UKKy0jICBlcnJvciBVbmtub3duIHJsaW1fdCBzaXplCistI2VuZGlmCisrI2RlZmluZSBSTElNX0ZNVCAiJWp1IgorIAorICNpZiBTSVpFT0ZfREVWX1QgPT0gOAorICMgIGRlZmluZSBERVZfRk1UICIlIiBQUkl1NjQKK2RpZmYgLS1naXQgYS9zcmMvYmFzaWMvcmxpbWl0LXV0aWwuYyBiL3NyYy9iYXNpYy9ybGltaXQtdXRpbC5jCitpbmRleCA3NGIzYTAyLi5iMDJjMDNjIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3JsaW1pdC11dGlsLmMKKysrKyBiL3NyYy9iYXNpYy9ybGltaXQtdXRpbC5jCitAQCAtMzA3LDEzICszMDcsMTMgQEAgaW50IHJsaW1pdF9mb3JtYXQoY29uc3Qgc3RydWN0IHJsaW1pdCAqcmwsIGNoYXIgKipyZXQpIHsKKyAgICAgICAgIGlmIChybC0+cmxpbV9jdXIgPj0gUkxJTV9JTkZJTklUWSAmJiBybC0+cmxpbV9tYXggPj0gUkxJTV9JTkZJTklUWSkKKyAgICAgICAgICAgICAgICAgcyA9IHN0cmR1cCgiaW5maW5pdHkiKTsKKyAgICAgICAgIGVsc2UgaWYgKHJsLT5ybGltX2N1ciA+PSBSTElNX0lORklOSVRZKQorLSAgICAgICAgICAgICAgICAodm9pZCkgYXNwcmludGYoJnMsICJpbmZpbml0eToiIFJMSU1fRk1ULCBybC0+cmxpbV9tYXgpOworKyAgICAgICAgICAgICAgICAodm9pZCkgYXNwcmludGYoJnMsICJpbmZpbml0eToiIFJMSU1fRk1ULCAodWludG1heF90KXJsLT5ybGltX21heCk7CisgICAgICAgICBlbHNlIGlmIChybC0+cmxpbV9tYXggPj0gUkxJTV9JTkZJTklUWSkKKy0gICAgICAgICAgICAgICAgKHZvaWQpIGFzcHJpbnRmKCZzLCBSTElNX0ZNVCAiOmluZmluaXR5IiwgcmwtPnJsaW1fY3VyKTsKKysgICAgICAgICAgICAgICAgKHZvaWQpIGFzcHJpbnRmKCZzLCBSTElNX0ZNVCAiOmluZmluaXR5IiwgKHVpbnRtYXhfdClybC0+cmxpbV9jdXIpOworICAgICAgICAgZWxzZSBpZiAocmwtPnJsaW1fY3VyID09IHJsLT5ybGltX21heCkKKy0gICAgICAgICAgICAgICAgKHZvaWQpIGFzcHJpbnRmKCZzLCBSTElNX0ZNVCwgcmwtPnJsaW1fY3VyKTsKKysgICAgICAgICAgICAgICAgKHZvaWQpIGFzcHJpbnRmKCZzLCBSTElNX0ZNVCwgKHVpbnRtYXhfdClybC0+cmxpbV9jdXIpOworICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAodm9pZCkgYXNwcmludGYoJnMsIFJMSU1fRk1UICI6IiBSTElNX0ZNVCwgcmwtPnJsaW1fY3VyLCBybC0+cmxpbV9tYXgpOworKyAgICAgICAgICAgICAgICAodm9pZCkgYXNwcmludGYoJnMsIFJMSU1fRk1UICI6IiBSTElNX0ZNVCwgKHVpbnRtYXhfdClybC0+cmxpbV9jdXIsICh1aW50bWF4X3QpcmwtPnJsaW1fbWF4KTsKKyAKKyAgICAgICAgIGlmICghcykKKyAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CitAQCAtNDA0LDcgKzQwNCw3IEBAIGludCBybGltaXRfbm9maWxlX3NhZmUodm9pZCkgeworIAorICAgICAgICAgcmwucmxpbV9jdXIgPSBGRF9TRVRTSVpFOworICAgICAgICAgaWYgKHNldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcmwpIDwgMCkKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19kZWJ1Z19lcnJubyhlcnJubywgIkZhaWxlZCB0byBsb3dlciBSTElNSVRfTk9GSUxFJ3Mgc29mdCBsaW1pdCB0byAiIFJMSU1fRk1UICI6ICVtIiwgcmwucmxpbV9jdXIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gbG9nX2RlYnVnX2Vycm5vKGVycm5vLCAiRmFpbGVkIHRvIGxvd2VyIFJMSU1JVF9OT0ZJTEUncyBzb2Z0IGxpbWl0IHRvICIgUkxJTV9GTVQgIjogJW0iLCAodWludG1heF90KXJsLnJsaW1fY3VyKTsKKyAKKyAgICAgICAgIHJldHVybiAxOworIH0KK2RpZmYgLS1naXQgYS9zcmMvY29yZS9leGVjdXRlLmMgYi9zcmMvY29yZS9leGVjdXRlLmMKK2luZGV4IGE3MDgyMzEuLmUyYjg3NDggMTAwNjQ0CistLS0gYS9zcmMvY29yZS9leGVjdXRlLmMKKysrKyBiL3NyYy9jb3JlL2V4ZWN1dGUuYworQEAgLTQyMjAsOSArNDIyMCw5IEBAIHZvaWQgZXhlY19jb250ZXh0X2R1bXAoY29uc3QgRXhlY0NvbnRleHQgKmMsIEZJTEUqIGYsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworICAgICAgICAgZm9yIChpID0gMDsgaSA8IFJMSU1fTkxJTUlUUzsgaSsrKQorICAgICAgICAgICAgICAgICBpZiAoYy0+cmxpbWl0W2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiJXNMaW1pdCVzOiAiIFJMSU1fRk1UICJcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIHJsaW1pdF90b19zdHJpbmcoaSksIGMtPnJsaW1pdFtpXS0+cmxpbV9tYXgpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBybGltaXRfdG9fc3RyaW5nKGkpLCAodWludG1heF90KWMtPnJsaW1pdFtpXS0+cmxpbV9tYXgpOworICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIiVzTGltaXQlc1NvZnQ6ICIgUkxJTV9GTVQgIlxuIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgcmxpbWl0X3RvX3N0cmluZyhpKSwgYy0+cmxpbWl0W2ldLT5ybGltX2N1cik7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIHJsaW1pdF90b19zdHJpbmcoaSksICh1aW50bWF4X3QpYy0+cmxpbWl0W2ldLT5ybGltX2N1cik7CisgICAgICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgIGlmIChjLT5pb3ByaW9fc2V0KSB7CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAxNC10ZXN0LXNpemVvZi5jLURpc2FibGUtdGVzdHMtZm9yLW1pc3NpbmctdHlwZWRlZnMtaW4tLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDE0LXRlc3Qtc2l6ZW9mLmMtRGlzYWJsZS10ZXN0cy1mb3ItbWlzc2luZy10eXBlZGVmcy1pbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0NTg5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAxNC10ZXN0LXNpemVvZi5jLURpc2FibGUtdGVzdHMtZm9yLW1pc3NpbmctdHlwZWRlZnMtaW4tLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gZDNkNjVkNDAzNjY3MGNiZDUxMjlmZTU1YzA5Y2EzOTEyODZlZjRiMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjggRmViIDIwMTggMjE6MjU6MjIgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8yNF0gdGVzdC1zaXplb2YuYzogRGlzYWJsZSB0ZXN0cyBmb3IgbWlzc2luZyB0eXBlZGVmcyBpbgorIG11c2wKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFttdXNsIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3Rlc3QvdGVzdC1zaXplb2YuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Rlc3Qtc2l6ZW9mLmMgYi9zcmMvdGVzdC90ZXN0LXNpemVvZi5jCitpbmRleCAzNWIwODc2Li5lNzhlN2NhIDEwMDY0NAorLS0tIGEvc3JjL3Rlc3QvdGVzdC1zaXplb2YuYworKysrIGIvc3JjL3Rlc3QvdGVzdC1zaXplb2YuYworQEAgLTQxLDggKzQxLDEwIEBAIGludCBtYWluKHZvaWQpIHsKKyAgICAgICAgIGluZm8odW5zaWduZWQpOworICAgICAgICAgaW5mbyhsb25nIHVuc2lnbmVkKTsKKyAgICAgICAgIGluZm8obG9uZyBsb25nIHVuc2lnbmVkKTsKKysjaWZkZWYgX19HTElCQ19fCisgICAgICAgICBpbmZvKF9fc3lzY2FsbF91bG9uZ190KTsKKyAgICAgICAgIGluZm8oX19zeXNjYWxsX3Nsb25nX3QpOworKyNlbmRpZgorIAorICAgICAgICAgaW5mbyhmbG9hdCk7CisgICAgICAgICBpbmZvKGRvdWJsZSk7CitAQCAtNjAsNyArNjIsOSBAQCBpbnQgbWFpbih2b2lkKSB7CisgICAgICAgICBpbmZvKHNzaXplX3QpOworICAgICAgICAgaW5mbyh0aW1lX3QpOworICAgICAgICAgaW5mbyh1c2VjX3QpOworKyNpZmRlZiBfX0dMSUJDX18KKyAgICAgICAgIGluZm8oX190aW1lX3QpOworKyNlbmRpZgorICAgICAgICAgaW5mbyhwaWRfdCk7CisgICAgICAgICBpbmZvKHVpZF90KTsKKyAgICAgICAgIGluZm8oZ2lkX3QpOworLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMTUtZG9uLXQtcGFzcy1BVF9TWU1MSU5LX05PRk9MTE9XLWZsYWctdG8tZmFjY2Vzc2F0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDE1LWRvbi10LXBhc3MtQVRfU1lNTElOS19OT0ZPTExPVy1mbGFnLXRvLWZhY2Nlc3NhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQwN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDE1LWRvbi10LXBhc3MtQVRfU1lNTElOS19OT0ZPTExPVy1mbGFnLXRvLWZhY2Nlc3NhdC5wYXRjaApAQCAtMCwwICsxLDk5IEBACitGcm9tIDQ4YzYyOGY1MzJmNjAyNWMyZDE2NDZiNjgxOWNkODFlYjc4OWQ3ZmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMCBPY3QgMjAxNyAxNDozMzozMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDE1LzI0XSBkb24ndCBwYXNzIEFUX1NZTUxJTktfTk9GT0xMT1cgZmxhZyB0byBmYWNjZXNzYXQoKQorCitBdm9pZCB1c2luZyBBVF9TWU1MSU5LX05PRk9MTE9XIGZsYWcuIEl0IGRvZXNuJ3Qgc2VlbSBsaWtlIHRoZSByaWdodAordGhpbmcgdG8gZG8gYW5kIGl0J3Mgbm90IHBvcnRhYmxlIChub3Qgc3VwcG9ydGVkIGJ5IG11c2wpLiBTZWU6CisKKyAgaHR0cDovL2xpc3RzLmxhbmRsZXkubmV0L3BpcGVybWFpbC90b3lib3gtbGFuZGxleS5uZXQvMjAxNC1TZXB0ZW1iZXIvMDAzNjEwLmh0bWwKKyAgaHR0cDovL3d3dy5vcGVud2FsbC5jb20vbGlzdHMvbXVzbC8yMDE1LzAyLzA1LzIKKworTm90ZSB0aGF0IGxhY2Nlc3MoKSBpcyBuZXZlciBwYXNzaW5nIEFUX0VBQ0NFU1Mgc28gYSBsb3Qgb2YgdGhlCitkaXNjdXNzaW9uIGluIHRoZSBsaW5rcyBhYm92ZSBkb2Vzbid0IGFwcGx5LiBOb3RlIGFsc28gdGhhdAorKGN1cnJlbnRseSkgYWxsIHN5c3RlbWQgY2FsbGVycyBvZiBsYWNjZXNzKCkgcGFzcyBtb2RlIGFzIEZfT0ssIHNvCitvbmx5IGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgYSBmaWxlLCBub3QgYWNjZXNzIHBlcm1pc3Npb25zLgorVGhlcmVmb3JlLCBpbiB0aGlzIGNhc2UsIHRoZSBvbmx5IGRpc3RpY3Rpb24gYmV0d2VlbiBmYWNjZXNzYXQoKQord2l0aCAoZmxhZyA9PSAwKSBhbmQgKGZsYWcgPT0gQVRfU1lNTElOS19OT0ZPTExPVykgaXMgdGhlIGJlaGF2aW91cgorZm9yIGJyb2tlbiBzeW1saW5rczsgbGFjY2VzcygpIG9uIGEgYnJva2VuIHN5bWxpbmsgd2lsbCBzdWNjZWVkIHdpdGgKKyhmbGFnID09IEFUX1NZTUxJTktfTk9GT0xMT1cpIGFuZCBmYWlsIChmbGFnID09IDApLgorCitUaGUgbGFjY2VzcygpIG1hY3JvcyB3YXMgYWRkZWQgdG8gc3lzdGVtZCBzb21lIHRpbWUgYWdvIGFuZCBpdCdzIG5vdAorY2xlYXIgaWYgb3Igd2h5IGl0IG5lZWRzIHRvIHJldHVybiBzdWNjZXNzIGZvciBicm9rZW4gc3ltbGlua3MuIE1heWJlCitqdXN0IGhpc3RvcmljYWwgYW5kIG5vdCBhY3R1YWxseSBuZWNlc3Nhcnkgb3IgZGVzaXJlZCBiZWhhdmlvdXI/CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbXVzbCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKy0tLQorIHNyYy9iYXNpYy9mcy11dGlsLmggICAgICAgICAgfCAyMiArKysrKysrKysrKysrKysrKysrKystCisgc3JjL3NoYXJlZC9iYXNlLWZpbGVzeXN0ZW0uYyB8ICA2ICsrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9mcy11dGlsLmggYi9zcmMvYmFzaWMvZnMtdXRpbC5oCitpbmRleCA3YWQwMzBiLi5kNGNiMWU5IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL2ZzLXV0aWwuaAorKysrIGIvc3JjL2Jhc2ljL2ZzLXV0aWwuaAorQEAgLTMyLDcgKzMyLDI3IEBAIGludCBmY2htb2Rfb3BhdGgoaW50IGZkLCBtb2RlX3QgbSk7CisgCisgaW50IGZkX3dhcm5fcGVybWlzc2lvbnMoY29uc3QgY2hhciAqcGF0aCwgaW50IGZkKTsKKyAKKy0jZGVmaW5lIGxhY2Nlc3MocGF0aCwgbW9kZSkgZmFjY2Vzc2F0KEFUX0ZEQ1dELCAocGF0aCksIChtb2RlKSwgQVRfU1lNTElOS19OT0ZPTExPVykKKysvKgorKyAgIEF2b2lkIHVzaW5nIEFUX1NZTUxJTktfTk9GT0xMT1cgZmxhZy4gSXQgZG9lc24ndCBzZWVtIGxpa2UgdGhlIHJpZ2h0IHRoaW5nIHRvCisrICAgZG8gYW5kIGl0J3Mgbm90IHBvcnRhYmxlIChub3Qgc3VwcG9ydGVkIGJ5IG11c2wpLiBTZWU6CisrCisrICAgICBodHRwOi8vbGlzdHMubGFuZGxleS5uZXQvcGlwZXJtYWlsL3RveWJveC1sYW5kbGV5Lm5ldC8yMDE0LVNlcHRlbWJlci8wMDM2MTAuaHRtbAorKyAgICAgaHR0cDovL3d3dy5vcGVud2FsbC5jb20vbGlzdHMvbXVzbC8yMDE1LzAyLzA1LzIKKysKKysgICBOb3RlIHRoYXQgbGFjY2VzcygpIGlzIG5ldmVyIHBhc3NpbmcgQVRfRUFDQ0VTUyBzbyBhIGxvdCBvZiB0aGUgZGlzY3Vzc2lvbiBpbgorKyAgIHRoZSBsaW5rcyBhYm92ZSBkb2Vzbid0IGFwcGx5LiBOb3RlIGFsc28gdGhhdCAoY3VycmVudGx5KSBhbGwgc3lzdGVtZCBjYWxsZXJzCisrICAgb2YgbGFjY2VzcygpIHBhc3MgbW9kZSBhcyBGX09LLCBzbyBvbmx5IGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgYSBmaWxlLCBub3QKKysgICBhY2Nlc3MgcGVybWlzc2lvbnMuIFRoZXJlZm9yZSwgaW4gdGhpcyBjYXNlLCB0aGUgb25seSBkaXN0aWN0aW9uIGJldHdlZW4KKysgICBmYWNjZXNzYXQoKSB3aXRoIChmbGFnID09IDApIGFuZCAoZmxhZyA9PSBBVF9TWU1MSU5LX05PRk9MTE9XKSBpcyB0aGUKKysgICBiZWhhdmlvdXIgZm9yIGJyb2tlbiBzeW1saW5rczsgbGFjY2VzcygpIG9uIGEgYnJva2VuIHN5bWxpbmsgd2lsbCBzdWNjZWVkCisrICAgd2l0aCAoZmxhZyA9PSBBVF9TWU1MSU5LX05PRk9MTE9XKSBhbmQgZmFpbCAoZmxhZyA9PSAwKS4KKysKKysgICBUaGUgbGFjY2VzcygpIG1hY3JvcyB3YXMgYWRkZWQgdG8gc3lzdGVtZCBzb21lIHRpbWUgYWdvIGFuZCBpdCdzIG5vdCBjbGVhciBpZgorKyAgIG9yIHdoeSBpdCBuZWVkcyB0byByZXR1cm4gc3VjY2VzcyBmb3IgYnJva2VuIHN5bWxpbmtzLiBNYXliZSBqdXN0IGhpc3RvcmljYWwKKysgICBhbmQgbm90IGFjdHVhbGx5IG5lY2Vzc2FyeSBvciBkZXNpcmVkIGJlaGF2aW91cj8KKysqLworKworKyNkZWZpbmUgbGFjY2VzcyhwYXRoLCBtb2RlKSBmYWNjZXNzYXQoQVRfRkRDV0QsIChwYXRoKSwgKG1vZGUpLCAwKQorIAorIGludCB0b3VjaF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgcGFyZW50cywgdXNlY190IHN0YW1wLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbW9kZV90IG1vZGUpOworIGludCB0b3VjaChjb25zdCBjaGFyICpwYXRoKTsKK2RpZmYgLS1naXQgYS9zcmMvc2hhcmVkL2Jhc2UtZmlsZXN5c3RlbS5jIGIvc3JjL3NoYXJlZC9iYXNlLWZpbGVzeXN0ZW0uYworaW5kZXggODlkN2E3ZC4uMzRiNGFkNSAxMDA2NDQKKy0tLSBhL3NyYy9zaGFyZWQvYmFzZS1maWxlc3lzdGVtLmMKKysrKyBiL3NyYy9zaGFyZWQvYmFzZS1maWxlc3lzdGVtLmMKK0BAIC01Myw3ICs1Myw3IEBAIGludCBiYXNlX2ZpbGVzeXN0ZW1fY3JlYXRlKGNvbnN0IGNoYXIgKnJvb3QsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKSB7CisgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfZXJyb3JfZXJybm8oZXJybm8sICJGYWlsZWQgdG8gb3BlbiByb290IGZpbGUgc3lzdGVtOiAlbSIpOworIAorICAgICAgICAgZm9yIChpID0gMDsgaSA8IEVMRU1FTlRTT0YodGFibGUpOyBpICsrKSB7CistICAgICAgICAgICAgICAgIGlmIChmYWNjZXNzYXQoZmQsIHRhYmxlW2ldLmRpciwgRl9PSywgQVRfU1lNTElOS19OT0ZPTExPVykgPj0gMCkKKysgICAgICAgICAgICAgICAgaWYgKGZhY2Nlc3NhdChmZCwgdGFibGVbaV0uZGlyLCBGX09LLCAwKSA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworIAorICAgICAgICAgICAgICAgICBpZiAodGFibGVbaV0udGFyZ2V0KSB7CitAQCAtNjEsNyArNjEsNyBAQCBpbnQgYmFzZV9maWxlc3lzdGVtX2NyZWF0ZShjb25zdCBjaGFyICpyb290LCB1aWRfdCB1aWQsIGdpZF90IGdpZCkgeworIAorICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrIGlmIG9uZSBvZiB0aGUgdGFyZ2V0cyBleGlzdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxTVFJfRk9SRUFDSChzLCB0YWJsZVtpXS50YXJnZXQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWNjZXNzYXQoZmQsIHMsIEZfT0ssIEFUX1NZTUxJTktfTk9GT0xMT1cpIDwgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWNjZXNzYXQoZmQsIHMsIEZfT0ssIDApIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayBpZiBhIHNwZWNpZmljIGZpbGUgZXhpc3RzIGF0IHRoZSB0YXJnZXQgcGF0aCAqLworQEAgLTcyLDcgKzcyLDcgQEAgaW50IGJhc2VfZmlsZXN5c3RlbV9jcmVhdGUoY29uc3QgY2hhciAqcm9vdCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisgCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWNjZXNzYXQoZmQsIHAsIEZfT0ssIEFUX1NZTUxJTktfTk9GT0xMT1cpIDwgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhY2Nlc3NhdChmZCwgcCwgRl9PSywgMCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMTYtRGVmaW5lLWdsaWJjLWNvbXBhdGlibGUtYmFzZW5hbWUtZm9yLW5vbi1nbGliYy1zeXN0ZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAxNi1EZWZpbmUtZ2xpYmMtY29tcGF0aWJsZS1iYXNlbmFtZS1mb3Itbm9uLWdsaWJjLXN5c3RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NTY1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMTYtRGVmaW5lLWdsaWJjLWNvbXBhdGlibGUtYmFzZW5hbWUtZm9yLW5vbi1nbGliYy1zeXN0ZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIGFmNzZjOTczZTQxOTI5MzYwYTZlMDIxZjJmZjlhN2ZjMWQ3OTk0ZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAyNyBNYXkgMjAxOCAwODozNjo0NCAtMDcwMAorU3ViamVjdDogW1BBVENIIDE2LzI0XSBEZWZpbmUgZ2xpYmMgY29tcGF0aWJsZSBiYXNlbmFtZSgpIGZvciBub24tZ2xpYmMKKyBzeXN0ZW1zCisKK0ZpeGVzIGJ1aWxkcyB3aXRoIG11c2wsIGV2ZW4gdGhvdWdoIHN5c3RlbWQgaXMgYWRhbWFudCBhYm91dAordXNpbmcgbm9uLXBvc2l4IGJhc2VuYW1lIGltcGxlbWVudGF0aW9uLCB3ZSBoYXZlIGEgd2F5IG91dAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvbWFjaGluZS9tYWNoaW5lLWRidXMuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9tYWNoaW5lL21hY2hpbmUtZGJ1cy5jIGIvc3JjL21hY2hpbmUvbWFjaGluZS1kYnVzLmMKK2luZGV4IDdhNTU4ZGYuLmVjYTdkNGIgMTAwNjQ0CistLS0gYS9zcmMvbWFjaGluZS9tYWNoaW5lLWRidXMuYworKysrIGIvc3JjL21hY2hpbmUvbWFjaGluZS1kYnVzLmMKK0BAIC0xMSw2ICsxMSwxMCBAQAorICNpbmNsdWRlIDxsaWJnZW4uaD4KKyAjdW5kZWYgYmFzZW5hbWUKKyAKKysjaWYgIWRlZmluZWQoX19HTElCQ19fKQorKyNkZWZpbmUgYmFzZW5hbWUoc3JjKSAoc3RycmNocihzcmMsJy8nKSA/IHN0cnJjaHIoc3JjLCcvJykrMSA6IHNyYykKKysjZW5kaWYKKysKKyAjaW5jbHVkZSAiYWxsb2MtdXRpbC5oIgorICNpbmNsdWRlICJidXMtY29tbW9uLWVycm9ycy5oIgorICNpbmNsdWRlICJidXMtaW50ZXJuYWwuaCIKKy0tIAorMi43LjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDE3LURvLW5vdC1kaXNhYmxlLWJ1ZmZlcmluZy13aGVuLXdyaXRpbmctdG8tb29tX3Njb3JlX2EucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMTctRG8tbm90LWRpc2FibGUtYnVmZmVyaW5nLXdoZW4td3JpdGluZy10by1vb21fc2NvcmVfYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGUyNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDE3LURvLW5vdC1kaXNhYmxlLWJ1ZmZlcmluZy13aGVuLXdyaXRpbmctdG8tb29tX3Njb3JlX2EucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBjN2E0ZWZiOGJjY2I1MmUxNzE0YzE1MTkyOWMyM2UxMmJkZTU5YjgyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCA0IEp1bCAyMDE4IDE1OjAwOjQ0ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMjRdIERvIG5vdCBkaXNhYmxlIGJ1ZmZlcmluZyB3aGVuIHdyaXRpbmcgdG8gb29tX3Njb3JlX2FkagorCitPbiBtdXNsLCBkaXNhYmxpbmcgYnVmZmVyaW5nIHdoZW4gd3JpdGluZyB0byBvb21fc2NvcmVfYWRqIHdpbGwKK2NhdXNlIHRoZSBmb2xsb3dpbmcgZXJyb3IuCisKKyAgRmFpbGVkIHRvIGFkanVzdCBPT00gc2V0dGluZzogSW52YWxpZCBhcmd1bWVudAorCitUaGlzIGVycm9yIGFwcGVhcnMgZm9yIHN5c3RlbWQtdWRldmQuc2VydmljZSBhbmQgZGJ1cy5zZXJ2aWNlLgorVGhpcyBpcyBiZWNhdXNlIGtlcm5lbCByZWNlaXZlcyAnLScgaW5zdGVhZCBvZiB0aGUgd2hvbGUgJy05MDAnCitpZiBidWZmZXJpbmcgaXMgZGlzYWJsZWQuCisKK1RoaXMgaXMgbGliYyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYywgYXMgZ2xpYmMgZG9lcyBub3QgaGF2ZSB0aGlzIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1tyZWJhc2VkIGZvciBzeXN0ZW1kIDI0M10KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IE11cnJheSA8c2NvdHQubXVycmF5QGtvbnN1bGtvLmNvbT4KKy0tLQorIHNyYy9iYXNpYy9wcm9jZXNzLXV0aWwuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9wcm9jZXNzLXV0aWwuYyBiL3NyYy9iYXNpYy9wcm9jZXNzLXV0aWwuYworaW5kZXggYjFjMDhmY2FkZS4uMGE3YTFmN2Q4OSAxMDA2NDQKKy0tLSBhL3NyYy9iYXNpYy9wcm9jZXNzLXV0aWwuYworKysrIGIvc3JjL2Jhc2ljL3Byb2Nlc3MtdXRpbC5jCitAQCAtMTQ3NCw3ICsxNDc0LDcgQEAgaW50IHNldF9vb21fc2NvcmVfYWRqdXN0KGludCB2YWx1ZSkgeworICAgICAgICAgc3ByaW50Zih0LCAiJWkiLCB2YWx1ZSk7CisgCisgICAgICAgICByZXR1cm4gd3JpdGVfc3RyaW5nX2ZpbGUoIi9wcm9jL3NlbGYvb29tX3Njb3JlX2FkaiIsIHQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfU1RSSU5HX0ZJTEVfVkVSSUZZX09OX0ZBSUxVUkV8V1JJVEVfU1RSSU5HX0ZJTEVfRElTQUJMRV9CVUZGRVIpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX1NUUklOR19GSUxFX1ZFUklGWV9PTl9GQUlMVVJFKTsKKyB9CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlvcHJpb19jbGFzc190YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDE4LWRpc3Rpbmd1aXNoLVhTSS1jb21wbGlhbnQtc3RyZXJyb3Jfci1mcm9tLUdOVS1zcGVjaWYucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMTgtZGlzdGluZ3Vpc2gtWFNJLWNvbXBsaWFudC1zdHJlcnJvcl9yLWZyb20tR05VLXNwZWNpZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTAxNzcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDE4LWRpc3Rpbmd1aXNoLVhTSS1jb21wbGlhbnQtc3RyZXJyb3Jfci1mcm9tLUdOVS1zcGVjaWYucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBmZmZiMjgxMDYxMWI0YTI2ZjVjNmMwOTU4MDkzYjViM2I3ZDRjZDk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxMCBKdWwgMjAxOCAxNTo0MDoxNyArMDgwMAorU3ViamVjdDogW1BBVENIIDE4LzI0XSBkaXN0aW5ndWlzaCBYU0ktY29tcGxpYW50IHN0cmVycm9yX3IgZnJvbSBHTlUtc3BlY2lmaQorIHN0cmVycm9yX3IKKworWFNJLWNvbXBsaWFudCBzdHJlcnJvcl9yIGFuZCBHTlUtc3BlY2lmaSBzdHJlcnJvcl9yIGFyZSBkaWZmZXJlbnQuCisKKyAgICAgICBpbnQgc3RyZXJyb3JfcihpbnQgZXJybnVtLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworICAgICAgICAgICAgICAgICAgIC8qIFhTSS1jb21wbGlhbnQgKi8KKworICAgICAgIGNoYXIgKnN0cmVycm9yX3IoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAvKiBHTlUtc3BlY2lmaWMgKi8KKworV2UgbmVlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0uIE90aGVyd2lzZSwgd2UnbGwgZ2V0IGFuIGludCB2YWx1ZQorYXNzaWduZWQgdG8gKGNoYXIgKikgdmFyaWFibGUsIHJlc3VsdGluZyBpbiBzZWdtZW50IGZhdWx0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9qb3VybmFsL2pvdXJuYWwtc2VuZC5jICAgICAgICB8IDUgKysrKysKKyBzcmMvbGlic3lzdGVtZC9zZC1idXMvYnVzLWVycm9yLmMgfCA1ICsrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvam91cm5hbC9qb3VybmFsLXNlbmQuYyBiL3NyYy9qb3VybmFsL2pvdXJuYWwtc2VuZC5jCitpbmRleCAzZmVhOTEyLi40ZjFlNTkyIDEwMDY0NAorLS0tIGEvc3JjL2pvdXJuYWwvam91cm5hbC1zZW5kLmMKKysrKyBiL3NyYy9qb3VybmFsL2pvdXJuYWwtc2VuZC5jCitAQCAtMzM3LDcgKzMzNywxMiBAQCBzdGF0aWMgaW50IGZpbGxfaW92ZWNfcGVycm9yX2FuZF9zZW5kKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGludCBza2lwLCBzdHJ1Y3QgaW92ZQorICAgICAgICAgICAgICAgICBjaGFyKiBqOworIAorICAgICAgICAgICAgICAgICBlcnJubyA9IDA7CisrI2lmbmRlZiBfX0dMSUJDX18KKysgICAgICAgICAgICAgICAgc3RyZXJyb3Jfcihfc2F2ZWRfZXJybm9fLCBidWZmZXIgKyA4ICsgaywgbiAtIDggLSBrKTsKKysgICAgICAgICAgICAgICAgaiA9IGJ1ZmZlciArIDggKyBrOworKyNlbHNlCisgICAgICAgICAgICAgICAgIGogPSBzdHJlcnJvcl9yKF9zYXZlZF9lcnJub18sIGJ1ZmZlciArIDggKyBrLCBuIC0gOCAtIGspOworKyNlbmRpZgorICAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZXJyb3JbU1RSTEVOKCJFUlJOTz0iKSArIERFQ0lNQUxfU1RSX01BWChpbnQpICsgMV07CisgCitkaWZmIC0tZ2l0IGEvc3JjL2xpYnN5c3RlbWQvc2QtYnVzL2J1cy1lcnJvci5jIGIvc3JjL2xpYnN5c3RlbWQvc2QtYnVzL2J1cy1lcnJvci5jCitpbmRleCBkYzk1MjM3Li5iZGRhMzBmIDEwMDY0NAorLS0tIGEvc3JjL2xpYnN5c3RlbWQvc2QtYnVzL2J1cy1lcnJvci5jCisrKysgYi9zcmMvbGlic3lzdGVtZC9zZC1idXMvYnVzLWVycm9yLmMKK0BAIC0zNzksNyArMzc5LDEyIEBAIHN0YXRpYyB2b2lkIGJ1c19lcnJvcl9zdHJlcnJvcihzZF9idXNfZXJyb3IgKmUsIGludCBlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAKKyAgICAgICAgICAgICAgICAgZXJybm8gPSAwOworKyNpZm5kZWYgX19HTElCQ19fCisrICAgICAgICAgICAgICAgIHN0cmVycm9yX3IoZXJyb3IsIG0sIGspOworKyAgICAgICAgICAgICAgICB4ID0gbTsKKysjZWxzZQorICAgICAgICAgICAgICAgICB4ID0gc3RyZXJyb3JfcihlcnJvciwgbSwgayk7CisrI2VuZGlmCisgICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFUkFOR0UgfHwgc3RybGVuKHgpID49IGsgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBrICo9IDI7CistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAxOS1IaWRlLV9fc3RhcnRfQlVTX0VSUk9SX01BUC1hbmQtX19zdG9wX0JVU19FUlJPUl9NQVAucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMTktSGlkZS1fX3N0YXJ0X0JVU19FUlJPUl9NQVAtYW5kLV9fc3RvcF9CVVNfRVJST1JfTUFQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Y2M2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMTktSGlkZS1fX3N0YXJ0X0JVU19FUlJPUl9NQVAtYW5kLV9fc3RvcF9CVVNfRVJST1JfTUFQLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gOTY5YWI5ZTY4MjQ5ZmQzODNmNGI1MTNiMWM5MzA2YmRhYzRhZTliMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjUgRmViIDIwMTkgMTU6MTg6MDAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8yNF0gSGlkZSBfX3N0YXJ0X0JVU19FUlJPUl9NQVAgYW5kIF9fc3RvcF9CVVNfRVJST1JfTUFQCisKK2ZvciBjdXJyZW50bHkgdW5rbm93biByZWFzb25zIHRoZXkgZ2V0IGV4cG9ydGVkIHRvIHRoZSBzaGFyZWQgbGlicmllcworZXZlbiB3aXRob3V0IGJlaW5nIGxpc3RlZCBpbiB0aGUgc3ltIGZpbGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitbUmViYXNlZCBmb3IgdjI0MV0KK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9saWJzeXN0ZW1kL3NkLWJ1cy9idXMtZXJyb3IuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGlic3lzdGVtZC9zZC1idXMvYnVzLWVycm9yLmMgYi9zcmMvbGlic3lzdGVtZC9zZC1idXMvYnVzLWVycm9yLmMKK2luZGV4IGJkZGEzMGYuLmUyMTg1M2MgMTAwNjQ0CistLS0gYS9zcmMvbGlic3lzdGVtZC9zZC1idXMvYnVzLWVycm9yLmMKKysrKyBiL3NyYy9saWJzeXN0ZW1kL3NkLWJ1cy9idXMtZXJyb3IuYworQEAgLTU0LDggKzU0LDggQEAgQlVTX0VSUk9SX01BUF9FTEZfUkVHSVNURVIgY29uc3Qgc2RfYnVzX2Vycm9yX21hcCBidXNfc3RhbmRhcmRfZXJyb3JzW10gPSB7CisgfTsKKyAKKyAvKiBHQ0MgbWFwcyB0aGlzIG1hZ2ljYWxseSB0byB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIEJVU19FUlJPUl9NQVAgc2VjdGlvbiAqLworLWV4dGVybiBjb25zdCBzZF9idXNfZXJyb3JfbWFwIF9fc3RhcnRfU1lTVEVNRF9CVVNfRVJST1JfTUFQW107CistZXh0ZXJuIGNvbnN0IHNkX2J1c19lcnJvcl9tYXAgX19zdG9wX1NZU1RFTURfQlVTX0VSUk9SX01BUFtdOworK2V4dGVybiBjb25zdCBzZF9idXNfZXJyb3JfbWFwIF9fc3RhcnRfU1lTVEVNRF9CVVNfRVJST1JfTUFQW10gX2hpZGRlbl87CisrZXh0ZXJuIGNvbnN0IHNkX2J1c19lcnJvcl9tYXAgX19zdG9wX1NZU1RFTURfQlVTX0VSUk9SX01BUFtdIF9oaWRkZW5fOworIAorIC8qIEFkZGl0aW9uYWwgbWFwcyByZWdpc3RlcmVkIHdpdGggc2RfYnVzX2Vycm9yX2FkZF9tYXAoKSBhcmUgaW4gdGhpcworICAqIE5VTEwgdGVybWluYXRlZCBhcnJheSAqLworLS0gCisyLjcuNAorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzLzAwMjAtbWlzc2luZ190eXBlLmgtYWRkLV9fY29tcGFyX2RfZm5fdC1kZWZpbml0aW9uLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDIwLW1pc3NpbmdfdHlwZS5oLWFkZC1fX2NvbXBhcl9kX2ZuX3QtZGVmaW5pdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTNkNTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDIwLW1pc3NpbmdfdHlwZS5oLWFkZC1fX2NvbXBhcl9kX2ZuX3QtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDc1YzA2ZTNlMmE0NzYwYjM2ZmZmZDk1Y2RmNTUzNWI4YWQ3M2M0ODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDI1IEZlYiAyMDE5IDE1OjI3OjU0ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvMjRdIG1pc3NpbmdfdHlwZS5oOiBhZGQgX19jb21wYXJfZF9mbl90IGRlZmluaXRpb24KKworRml4IHRoZSBmb2xsb3dpbmcgY29tcGlsZSBmYWlsdXJlOgorc3JjL2Jhc2ljL3V0aWwuaDo3MToxODogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICdfX2NvbXBhcl9kX2ZuX3QnOyBkaWQgeW91IG1lYW4gJ19fY29tcGFyX2ZuX3QnPworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9iYXNpYy9taXNzaW5nX3R5cGUuaCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL21pc3NpbmdfdHlwZS5oIGIvc3JjL2Jhc2ljL21pc3NpbmdfdHlwZS5oCitpbmRleCA3ZDdjMWU0Li44NTkwMmFiIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL21pc3NpbmdfdHlwZS5oCisrKysgYi9zcmMvYmFzaWMvbWlzc2luZ190eXBlLmgKK0BAIC0xMyw2ICsxMyw3IEBACisgCisgI2lmbmRlZiBfX0dMSUJDX18KKyB0eXBlZGVmIGludCAoKmNvbXBhcmlzb25fZm5fdCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworK3R5cGVkZWYgaW50ICgqX19jb21wYXJfZF9mbl90KSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHZvaWQgKik7CisgI2VuZGlmCisgCisgI2lmbmRlZiBfX0NPTVBBUl9GTl9UCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAyMS1hdm9pZC1yZWRlZmluaXRpb24tb2YtcHJjdGxfbW1fbWFwLXN0cnVjdHVyZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAyMS1hdm9pZC1yZWRlZmluaXRpb24tb2YtcHJjdGxfbW1fbWFwLXN0cnVjdHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRkZjgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDIxLWF2b2lkLXJlZGVmaW5pdGlvbi1vZi1wcmN0bF9tbV9tYXAtc3RydWN0dXJlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gM2ZiZjYxZDU0YjgyZmM5YmYyMWQ4MDM5YmZkODlkYzllZmM1YmJjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjUgRmViIDIwMTkgMTU6NDQ6NTQgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8yNF0gYXZvaWQgcmVkZWZpbml0aW9uIG9mIHByY3RsX21tX21hcCBzdHJ1Y3R1cmUKKworRml4IHRoZSBmb2xsb3dpbmcgY29tcGlsZSBmYWlsdXJlOgorZXJyb3I6IHJlZGVmaW5pdGlvbiBvZiAnc3RydWN0IHByY3RsX21tX21hcCcKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFttdXNsIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvYmFzaWMvbWlzc2luZ19wcmN0bC5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy9taXNzaW5nX3ByY3RsLmggYi9zcmMvYmFzaWMvbWlzc2luZ19wcmN0bC5oCitpbmRleCBmODBjZDE3Li40N2U0ODkzIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL21pc3NpbmdfcHJjdGwuaAorKysrIGIvc3JjL2Jhc2ljL21pc3NpbmdfcHJjdGwuaAorQEAgLTEsNyArMSw5IEBACisgLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xKyAqLworICNwcmFnbWEgb25jZQorIAorKyNpZmRlZiBfX0dMSUJDX18KKyAjaW5jbHVkZSA8bGludXgvcHJjdGwuaD4KKysjZW5kaWYKKyAKKyAvKiA1ODMxOTA1N2I3ODQ3NjY3ZjBjOTU4NWI5ZGUwZTg5MzJiMGZkYjA4ICg0LjMpICovCisgI2lmbmRlZiBQUl9DQVBfQU1CSUVOVAorLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My8wMDI0LXRlc3QtanNvbi5jLWRlZmluZS1NX1BJbC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAyNC10ZXN0LWpzb24uYy1kZWZpbmUtTV9QSWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1NjI5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystbGlic3lzdGVtZC0yNDMvMDAyNC10ZXN0LWpzb24uYy1kZWZpbmUtTV9QSWwucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA5MDI0MTJjMjcxZTBjNWQ5Y2I5M2IxMGVjMGZiNWIxMTliMzkzNDc0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyNSBGZWIgMjAxOSAxNjo1MzowNiArMDgwMAorU3ViamVjdDogW1BBVENIIDI0LzI0XSB0ZXN0LWpzb24uYzogZGVmaW5lIE1fUElsCisKK0ZpeCB0aGUgZm9sbG93aW5nIGNvbXBpbGUgZmFpbHVyZToKK3NyYy90ZXN0L3Rlc3QtanNvbi5jOjMwNTo1MDogZXJyb3I6ICdNX1BJbCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pOyBkaWQgeW91IG1lYW4gJ01fUEknPworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW211c2wgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy90ZXN0L3Rlc3QtanNvbi5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvdGVzdC1qc29uLmMgYi9zcmMvdGVzdC90ZXN0LWpzb24uYworaW5kZXggOWI4YTJhOS4uZWZjNzQ2YyAxMDA2NDQKKy0tLSBhL3NyYy90ZXN0L3Rlc3QtanNvbi5jCisrKysgYi9zcmMvdGVzdC90ZXN0LWpzb24uYworQEAgLTExLDYgKzExLDEwIEBACisgI2luY2x1ZGUgInRlc3RzLmgiCisgI2luY2x1ZGUgInV0aWwuaCIKKyAKKysjaWZuZGVmIE1fUElsCisrI2RlZmluZSBNX1BJbCAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjg4NEwKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZCB0ZXN0X3Rva2VuaXplcihjb25zdCBjaGFyICpkYXRhLCAuLi4pIHsKKyAgICAgICAgIHVuc2lnbmVkIGxpbmUgPSAwLCBjb2x1bW4gPSAwOworICAgICAgICAgdm9pZCAqc3RhdGUgPSBOVUxMOworLS0gCisyLjExLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My9zdGF0aWMtbGlic3lzdGVtZC1wa2djb25maWcucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWQtMjQzL3N0YXRpYy1saWJzeXN0ZW1kLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjAxOGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kLTI0My9zdGF0aWMtbGlic3lzdGVtZC1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorSW5kZXg6IGdpdC9zcmMvbGlic3lzdGVtZC9saWJzeXN0ZW1kLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2xpYnN5c3RlbWQvbGlic3lzdGVtZC5wYy5pbgorKysrIGdpdC9zcmMvbGlic3lzdGVtZC9saWJzeXN0ZW1kLnBjLmluCitAQCAtMTYsNSArMTYsNSBAQCBOYW1lOiBzeXN0ZW1kCisgRGVzY3JpcHRpb246IHN5c3RlbWQgTGlicmFyeQorIFVSTDogQFBST0pFQ1RfVVJMQAorIFZlcnNpb246IEBQUk9KRUNUX1ZFUlNJT05ACistTGliczogLUwke2xpYmRpcn0gLWxzeXN0ZW1kCisrTGliczogLUwke2xpYmRpcn0gLWxzeXN0ZW1kIC1scnQgLWxtb3VudCAtbGNhcAorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLWxpYnN5c3RlbWRfMjQzLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kXzI0My5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGU4MWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrKy1saWJzeXN0ZW1kXzI0My5iYgpAQCAtMCwwICsxLDY5IEBACitTVU1NQVJZID0gImxpYnN5c3RlbWQgc3RhdGljIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJsaWJzeXN0ZW1kIHN0YXRpYyBsaWJyYXJ5IGJ1aWx0IHNwZWNpZmljYWxseSBhcyBhbiBpbnRlZ3JhbCBjb21wb25lbnQgb2Ygc2RidXMtYysrIgorCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5MR1BMMi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworaW5oZXJpdCBtZXNvbiBwa2djb25maWcKKworREVQRU5EUyArPSAiZ3BlcmYtbmF0aXZlIGdldHRleHQtbmF0aXZlIHV0aWwtbGludXggbGliY2FwIgorCitTUkNSRVYgPSAiZWZiNTM2ZDBjYmUyZTU4ZjgwZTUwMWQxOTk5OTkyOGM3NWUwOGY2YSIKK1NSQ0JSQU5DSCA9ICJ2MjQzLXN0YWJsZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zeXN0ZW1kL3N5c3RlbWQtc3RhYmxlLmdpdDtwcm90b2NvbD1naXQ7YnJhbmNoPSR7U1JDQlJBTkNIfSIKKworU1JDX1VSSSArPSAiZmlsZTovL3N0YXRpYy1saWJzeXN0ZW1kLXBrZ2NvbmZpZy5wYXRjaCIKKworIyBwYXRjaGVzIG5lZWRlZCBieSBtdXNsCitTUkNfVVJJX2FwcGVuZF9saWJjLW11c2wgPSAiICR7U1JDX1VSSV9NVVNMfSIKK1NSQ19VUklfTVVTTCA9ICJcCisgICAgICAgICAgICAgICBmaWxlOi8vMDAwMi1kb24tdC11c2UtZ2xpYmMtc3BlY2lmaWMtcXNvcnRfci5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vMDAwMy1taXNzaW5nX3R5cGUuaC1hZGQtX19jb21wYXJlX2ZuX3QtYW5kLWNvbXBhcmlzb25fZm5fLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDA0LWFkZC1mYWxsYmFjay1wYXJzZV9wcmludGZfZm9ybWF0LWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDA1LXNyYy1iYXNpYy1taXNzaW5nLmgtY2hlY2stZm9yLW1pc3Npbmctc3RybmR1cGEucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovLzAwMDYtSW5jbHVkZS1uZXRpbmV0LWlmX2V0aGVyLmgucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovLzAwMDctZG9uLXQtZmFpbC1pZi1HTE9CX0JSQUNFLWFuZC1HTE9CX0FMVERJUkZVTkMtaXMtbm90LnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDA4LWFkZC1taXNzaW5nLUZUV18tbWFjcm9zLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDEwLWZpeC1taXNzaW5nLW9mLV9fcmVnaXN0ZXJfYXRmb3JrLWZvci1ub24tZ2xpYmMtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovLzAwMTEtVXNlLXVpbnRtYXhfdC1mb3ItaGFuZGxpbmctcmxpbV90LnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDE0LXRlc3Qtc2l6ZW9mLmMtRGlzYWJsZS10ZXN0cy1mb3ItbWlzc2luZy10eXBlZGVmcy1pbi0ucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovLzAwMTUtZG9uLXQtcGFzcy1BVF9TWU1MSU5LX05PRk9MTE9XLWZsYWctdG8tZmFjY2Vzc2F0LnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDE2LURlZmluZS1nbGliYy1jb21wYXRpYmxlLWJhc2VuYW1lLWZvci1ub24tZ2xpYmMtc3lzdGUucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovLzAwMTctRG8tbm90LWRpc2FibGUtYnVmZmVyaW5nLXdoZW4td3JpdGluZy10by1vb21fc2NvcmVfYS5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vMDAxOC1kaXN0aW5ndWlzaC1YU0ktY29tcGxpYW50LXN0cmVycm9yX3ItZnJvbS1HTlUtc3BlY2lmLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDE5LUhpZGUtX19zdGFydF9CVVNfRVJST1JfTUFQLWFuZC1fX3N0b3BfQlVTX0VSUk9SX01BUC5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vMDAyMC1taXNzaW5nX3R5cGUuaC1hZGQtX19jb21wYXJfZF9mbl90LWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovLzAwMjEtYXZvaWQtcmVkZWZpbml0aW9uLW9mLXByY3RsX21tX21hcC1zdHJ1Y3R1cmUucGF0Y2ggXAorICAgICAgICAgICAgICAgZmlsZTovLzAwMjQtdGVzdC1qc29uLmMtZGVmaW5lLU1fUElsLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRvLW5vdC1kaXNhYmxlLWJ1ZmZlci1pbi13cml0aW5nLWZpbGVzLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXNyYy1sb2dpbi1icmlnaHRuZXNzLmMtaW5jbHVkZS1zeXMtd2FpdC5oLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDAzLXNyYy1iYXNpYy1jb3B5LmMtaW5jbHVkZS1zaWduYWwuaC5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vMDAwNC1zcmMtc2hhcmVkLWNwdS1zZXQtdXRpbC5oLWFkZC1fX2NwdV9tYXNrLWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ3NoYWRvdyBpZG4iCitQQUNLQUdFQ09ORklHX3JlbW92ZV9saWJjLW11c2wgPSAiIGdzaGFkb3cgaWRuIgorUEFDS0FHRUNPTkZJR1tnc2hhZG93XSA9ICItRGdzaGFkb3c9dHJ1ZSwtRGdzaGFkb3c9ZmFsc2UiCitQQUNLQUdFQ09ORklHW2lkbl0gPSAiLURpZG49dHJ1ZSwtRGlkbj1mYWxzZSIKKworRVhUUkFfT0VNRVNPTiArPSAiLURzdGF0aWMtbGlic3lzdGVtZD1waWMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbXBpbGUoKSB7CisgICAgbmluamEgLXYgJHtQQVJBTExFTF9NQUtFfSB2ZXJzaW9uLmgKKyAgICBuaW5qYSAtdiAke1BBUkFMTEVMX01BS0V9IGxpYnN5c3RlbWQuYQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKyAgICBpbnN0YWxsICR7Qn0vbGlic3lzdGVtZC5hICR7RH0ke2xpYmRpcn0KKworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vc3lzdGVtZAorICAgIGluc3RhbGwgJHtTfS9zcmMvc3lzdGVtZC8qLmggJHtEfSR7aW5jbHVkZWRpcn0vc3lzdGVtZAorCisgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworICAgIGluc3RhbGwgJHtCfS9zcmMvbGlic3lzdGVtZC9saWJzeXN0ZW1kLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCit9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLXRvb2xzLW5hdGl2ZV8wLjcuNi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jb3JlL3NkYnVzLWMrKy9zZGJ1cy1jKystdG9vbHMtbmF0aXZlXzAuNy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTJjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrLXRvb2xzLW5hdGl2ZV8wLjcuNi5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gInNkYnVzLWMrKyBuYXRpdmUgdG9vbHMiCitERVNDUklQVElPTiA9ICJOYXRpdmUgaW50ZXJmYWNlIGNvZGUgZ2VuZXJhdG9yIGZvciBkZXZlbG9wbWVudCB3aXRoIHNkYnVzLWMrKyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7U30vQ09QWUlORzttZDU9MTgwM2ZhOWMyYzNjZThjYjA2YjQ4NjFkNzUzMTA3NDIiCisKK2luaGVyaXQgY21ha2UgbmF0aXZlCisKK0RFUEVORFMgKz0gImV4cGF0IgorCitTUkNSRVYgPSAiNTEyMWQ0NmVlZDQyMjMxMjg1YzE4ZDMxN2E5ZjQ4ZTBiMjg0OWQ1ZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9LaXN0bGVyLUdyb3VwL3NkYnVzLWNwcC5naXQ7cHJvdG9jb2w9aHR0cHM7YnJhbmNoPW1hc3RlcjtzdWJwYXRoPXRvb2xzIgorCitTID0gIiR7V09SS0RJUn0vdG9vbHMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtY29yZS9zZGJ1cy1jKysvc2RidXMtYysrXzAuNy42LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrK18wLjcuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzc3NGNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNvcmUvc2RidXMtYysrL3NkYnVzLWMrK18wLjcuNi5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gInNkYnVzLWMrKyIKK0RFU0NSSVBUSU9OID0gIkhpZ2gtbGV2ZWwgQysrIEQtQnVzIGxpYnJhcnkgZGVzaWduZWQgdG8gcHJvdmlkZSBlYXN5LXRvLXVzZSB5ZXQgcG93ZXJmdWwgQVBJIGluIG1vZGVybiBDKysiCisKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4MDNmYTljMmMzY2U4Y2IwNmI0ODYxZDc1MzEwNzQyIgorCitpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZyBzeXN0ZW1kIHB0ZXN0CisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnd2l0aC1leHRlcm5hbC1saWJzeXN0ZW1kJywgJ3dpdGgtYnVpbHRpbi1saWJzeXN0ZW1kJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUFRFU1RfRU5BQkxFRCcsICcxJywgJ3dpdGgtdGVzdHMnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t3aXRoLWJ1aWx0aW4tbGlic3lzdGVtZF0gPSAiLCxzZGJ1cy1jKystbGlic3lzdGVtZCxsaWJjYXAiCitQQUNLQUdFQ09ORklHW3dpdGgtZXh0ZXJuYWwtbGlic3lzdGVtZF0gPSAiLCxzeXN0ZW1kLGxpYnN5c3RlbWQiCitQQUNLQUdFQ09ORklHW3dpdGgtdGVzdHNdID0gIi1EQlVJTERfVEVTVFM9T04gLURURVNUU19JTlNUQUxMX1BBVEg9JHtsaWJkaXJ9LyR7QlBOfS90ZXN0cywtREJVSUxEX1RFU1RTPU9GRiIKKworREVQRU5EUyArPSAiZXhwYXQiCisKK1NSQ1JFViA9ICI1MTIxZDQ2ZWVkNDIyMzEyODVjMThkMzE3YTlmNDhlMGIyODQ5ZDVlIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL0tpc3RsZXItR3JvdXAvc2RidXMtY3BwLmdpdDtwcm90b2NvbD1odHRwczticmFuY2g9bWFzdGVyIgorU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCIKKworRVhUUkFfT0VDTUFLRSA9ICItREJVSUxEX0NPREVfR0VOPU9OIFwKKyAgICAgICAgICAgICAgICAgLURCVUlMRF9ET0M9T04gXAorICAgICAgICAgICAgICAgICAtREJVSUxEX0RPWFlHRU5fRE9DPU9GRiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRklMRVNfJHtQTn1fcmVtb3ZlID0gIiR7c3lzY29uZmRpcn0iCitGSUxFU18ke1BOfS1wdGVzdCArPSAiJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvIgorRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZGlyfS8ke0JQTn0vdGVzdHMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9zZGJ1cy1jKysteG1sMmNwcCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jcnlwdG8vYm90YW4vYm90YW5fMi4xMS4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNyeXB0by9ib3Rhbi9ib3Rhbl8yLjEzLjAuYmIKc2ltaWxhcml0eSBpbmRleCA4MyUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWNyeXB0by9ib3Rhbi9ib3Rhbl8yLjExLjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jcnlwdG8vYm90YW4vYm90YW5fMi4xMy4wLmJiCmluZGV4IGMyZDY0NGIuLjA4NTRiZDYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jcnlwdG8vYm90YW4vYm90YW5fMi4xMS4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1jcnlwdG8vYm90YW4vYm90YW5fMi4xMy4wLmJiCkBAIC0xLDEyICsxLDEyIEBACiBTVU1NQVJZID0gIkNyeXB0byBhbmQgVExTIGZvciBDKysxMSIKIEhPTUVQQUdFID0gImh0dHBzOi8vYm90YW4ucmFuZG9tYml0Lm5ldCIKIExJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGljZW5zZS50eHQ7bWQ1PWY0YzE0NWQ0ZDcwYTMyNDRhMDUzYzlmOTBkNDg0MWZjIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGljZW5zZS50eHQ7bWQ1PWEwMmUwM2M4ZmEyYzVlN2I5YjNmY2MxYjk4MTFmZDNiIgogU0VDVElPTiA9ICJsaWJzIgogCiBTUkNfVVJJID0gImh0dHBzOi8vYm90YW4ucmFuZG9tYml0Lm5ldC9yZWxlYXNlcy9Cb3Rhbi0ke1BWfS50YXIueHoiCi1TUkNfVVJJW21kNXN1bV0gPSAiMmRiYTEzYjBkMjVkMGU5ZDJhNmY5ODY3YzYyYzlmMmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjc4NzRkYTJhZWI4YzAxOGZkNzdkZjQwYjIxMzc4NzliZjkwYjY2ZjU1ODk0OTBjOTkxZTgzZmIzZTgwOTRiZSIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZjkwYzdkNTIzNzc4YmU1ZjIzZjNjZTc5MDQ2YmEzNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNTdhZTQyYTQxZTEwOTFiY2E1OGY0NGY0MWFkZGViZDlhMzkwYjY1MTYwMzk1MmM4ODFlYzg5ZDUwMTg3ZTkwIgogCiBTID0gIiR7V09SS0RJUn0vQm90YW4tJHtQVn0iCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYi1uYXRpdmVfMTAuMy4xOC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYi1uYXRpdmVfMTAuNC4xMS5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9teXNxbC9tYXJpYWRiLW5hdGl2ZV8xMC4zLjE4LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL215c3FsL21hcmlhZGItbmF0aXZlXzEwLjQuMTEuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYi5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL215c3FsL21hcmlhZGIuaW5jCmluZGV4IGVjNWFjMTEuLjIzZGU2OWQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYi5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9teXNxbC9tYXJpYWRiLmluYwpAQCAtNCw3ICs0LDcgQEAKIExJQ0VOU0UgPSAiR1BMdjIiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMWJlY2YwY2ZhMzM2NmUwZjRkODU0ZDFkMjY0ZjMxMSIKIAotU1JDX1VSSSA9ICJodHRwOi8vYXJjaGl2ZS5tYXJpYWRiLm9yZy8ke0JQfS9zb3VyY2UvJHtCUH0udGFyLmd6IFwKK1NSQ19VUkkgPSAiaHR0cHM6Ly9kb3dubG9hZHMubWFyaWFkYi5vcmcvaW50ZXJzdGl0aWFsLyR7QlB9L3NvdXJjZS8ke0JQfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vbXkuY25mIFwKICAgICAgICAgICAgZmlsZTovL215c3FsZC5zZXJ2aWNlIFwKICAgICAgICAgICAgZmlsZTovL2luc3RhbGxfZGIuc2VydmljZSBcCkBAIC0xOCw5ICsxOCwxMSBAQAogICAgICAgICAgICBmaWxlOi8vYzExX2F0b21pY3MucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vY2xhbmdfdmVyc2lvbl9oZWFkZXJfY29uZmxpY3QucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZml4LWFybS1hdG9taWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtYnJlYWthZ2UtZnJvbS1sb2NrX2d1YXJkLWVycm9yLTYxNjEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtbGlicmFyeS1MWjQtbG9va3VwLnBhdGNoIFwKICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiYjM1MjRjMDgyNWMzYTFjMjU1NDk2ZGFlYTM4MzA0YTAiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjk0NTZjYTg1YmY5ZDk2YzZkMjhiNGFkZTJhOWY2Nzg3ZDc5YTYwMmUyN2VmOTQxZjliYTRlMGI1NWRkZGVkYyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkMGRlODgxYWI4ZWFkNDY5MjhjYWZiN2Q1NTg1MzVjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YzA3NjIzMmI5OTQzM2IwOWViM2M2ZDYyZjYwNzE5MmIzNDc0ZDAyMjcwMzY5OWI4ZjZhZWY0ZTc5ZGUzZmI5IgogCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL01hcmlhREIvc2VydmVyL3JlbGVhc2VzIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL215c3FsL21hcmlhZGIvMDAwMS1GaXgtYnVpbGQtYnJlYWthZ2UtZnJvbS1sb2NrX2d1YXJkLWVycm9yLTYxNjEucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL215c3FsL21hcmlhZGIvMDAwMS1GaXgtYnVpbGQtYnJlYWthZ2UtZnJvbS1sb2NrX2d1YXJkLWVycm9yLTYxNjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjNzA2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYi8wMDAxLUZpeC1idWlsZC1icmVha2FnZS1mcm9tLWxvY2tfZ3VhcmQtZXJyb3ItNjE2MS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCBicmVha2FnZSBmcm9tIGxvY2tfZ3VhcmQgZXJyb3IgKCM2MTYxKQorCitTdW1tYXJ5OgorVGhpcyBjaGFuZ2UgZml4ZXMgYSBzb3VyY2UgaXNzdWUgdGhhdCBjYXVzZWQgY29tcGlsZSB0aW1lIGVycm9yIHdoaWNoCiticmVha3MgYnVpbGQgZm9yIG1hbnkgZmJjb2RlIHNlcnZpY2VzIGluIHRoYXQgc2V0dXAuIFRoZSBzaXplKCkgbWVtYmVyCitmdW5jdGlvbiBvZiBjaGFubmVsIGlzIGEgY29uc3QgbWVtYmVyLCBzbyBtZW1iZXIgdmFyaWFibGVzIGFjY2Vzc2VkCit3aXRoaW4gaXQgYXJlIGltcGxpY2l0bHkgY29uc3QgYXMgd2VsbC4gVGhpcyBjYXVzZWQgZXJyb3Igd2hlbiBjbGFuZworZmFpbHMgdG8gcmVzb2x2ZSB0byBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgc3RkOjptdXRleCBiZWNhdXNlIHRoZQorc3VpdGFibGUgY29uc3RydWN0b3IgZ290IHJlamVjdGVkIGR1ZSB0byBsb3NzIG9mIGNvbnN0bmVzcyBmb3IgaXRzCithcmd1bWVudC4gVGhlIGZpeCBpcyB0byBhZGQgbXV0YWJsZSBtb2RpZmllciB0byB0aGUgbG9ja18gbWVtYmVyIG9mCitjaGFubmVsLgorCitQdWxsIFJlcXVlc3QgcmVzb2x2ZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yb2Nrc2RiL3B1bGwvNjE2MQorCitEaWZmZXJlbnRpYWwgUmV2aXNpb246IEQxODk2NzY4NQorCitQdWxsZWQgQnk6IG1heXNhbXlhYmFuZGVoCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZmJzaGlwaXQtc291cmNlLWlkOjY5OGI2YTUxNTNjM2M5MmVlYWNiODQyYzQ2N2FhMjhjYzM1MGQ0MzIgCistLS0gYS9zdG9yYWdlL3JvY2tzZGIvcm9ja3NkYi91dGlsL2NoYW5uZWwuaAorKysrIGIvc3RvcmFnZS9yb2Nrc2RiL3JvY2tzZGIvdXRpbC9jaGFubmVsLmgKK0BAIC02MCw3ICs2MCw3IEBAIGNsYXNzIGNoYW5uZWwgeworIAorICBwcml2YXRlOgorICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY3ZfOworLSAgc3RkOjptdXRleCBsb2NrXzsKKysgIG11dGFibGUgc3RkOjptdXRleCBsb2NrXzsKKyAgIHN0ZDo6cXVldWU8VD4gYnVmZmVyXzsKKyAgIGJvb2wgZW9mXzsKKyB9OwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9teXNxbC9tYXJpYWRiLzAwMDEtRml4LWxpYnJhcnktTFo0LWxvb2t1cC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYi8wMDAxLUZpeC1saWJyYXJ5LUxaNC1sb29rdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0ZGZkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYi8wMDAxLUZpeC1saWJyYXJ5LUxaNC1sb29rdXAucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAxZDc2MTJiMDYzZWIxZmM3YmY5N2JjMjdiMTNlMWRlNTk2NzQ4YWExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU3VtaXQgR2FyZyA8c3VtaXQuZ2FyZ0BsaW5hcm8ub3JnPgorRGF0ZTogV2VkLCA4IEphbiAyMDIwIDA0OjU4OjMwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBsaWJyYXJ5IExaNCBsb29rdXAuCisKK1NpZ25lZC1vZmYtYnk6IFN1bWl0IEdhcmcgPHN1bWl0LmdhcmdAbGluYXJvLm9yZz4KKy0tLQorIGNtYWtlL0ZpbmRMWjQuY21ha2UgfCA5ICsrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jbWFrZS9GaW5kTFo0LmNtYWtlIGIvY21ha2UvRmluZExaNC5jbWFrZQoraW5kZXggZTk3ZGQ2M2UyYjAuLjJmNDY5NGU3MjdjIDEwMDY0NAorLS0tIGEvY21ha2UvRmluZExaNC5jbWFrZQorKysrIGIvY21ha2UvRmluZExaNC5jbWFrZQorQEAgLTEsNSArMSwxMCBAQAorLWZpbmRfcGF0aChMWjRfSU5DTFVERV9ESVIgTkFNRVMgbHo0LmgpCistZmluZF9saWJyYXJ5KExaNF9MSUJSQVJZIE5BTUVTIGx6NCkKKytmaW5kX3BhdGgoTFo0X0lOQ0xVREVfRElSCisrICBOQU1FUwlsejQuaAorKyAgTk9fREVGQVVMVF9QQVRIIE5PX0NNQUtFX0ZJTkRfUk9PVF9QQVRIKQorKworK2ZpbmRfbGlicmFyeShMWjRfTElCUkFSWQorKyAgTkFNRVMgbHo0CisrICBOT19ERUZBVUxUX1BBVEggTk9fQ01BS0VfRklORF9ST09UX1BBVEgpCisgCisgaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKKyBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoCistLSAKKzIuMTcuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL215c3FsL21hcmlhZGIvZml4LWFybS1hdG9taWMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL215c3FsL21hcmlhZGIvZml4LWFybS1hdG9taWMucGF0Y2gKaW5kZXggMzRkMzExNC4uMTg1YjdiNyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9teXNxbC9tYXJpYWRiL2ZpeC1hcm0tYXRvbWljLnBhdGNoCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYi9maXgtYXJtLWF0b21pYy5wYXRjaApAQCAtMTUsMTEgKzE1LDkgQEAKICBzdG9yYWdlL3JvY2tzZGIvYnVpbGRfcm9ja3NkYi5jbWFrZSB8IDMgKysrCiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQogCi1kaWZmIC0tZ2l0IGEvc3RvcmFnZS9yb2Nrc2RiL2J1aWxkX3JvY2tzZGIuY21ha2UgYi9zdG9yYWdlL3JvY2tzZGIvYnVpbGRfcm9ja3NkYi5jbWFrZQotaW5kZXggYzM2Yzc2MS4uMmI1MzlmZiAxMDA2NDQKIC0tLSBhL3N0b3JhZ2Uvcm9ja3NkYi9idWlsZF9yb2Nrc2RiLmNtYWtlCiArKysgYi9zdG9yYWdlL3JvY2tzZGIvYnVpbGRfcm9ja3NkYi5jbWFrZQotQEAgLTQyNCw2ICs0MjQsOSBAQCBsaXN0KEFQUEVORCBTT1VSQ0VTICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9idWlsZF92ZXJzaW9uLmNjKQorQEAgLTQ3MCw2ICs0NzAsOSBAQCBsaXN0KEFQUEVORCBTT1VSQ0VTICR7Q01BS0VfQ1VSUkVOVF9CSU5BCiAgCiAgQUREX0NPTlZFTklFTkNFX0xJQlJBUlkocm9ja3NkYmxpYiAke1NPVVJDRVN9KQogIHRhcmdldF9saW5rX2xpYnJhcmllcyhyb2Nrc2RibGliICR7VEhJUkRQQVJUWV9MSUJTfSAke1NZU1RFTV9MSUJTfSkKQEAgLTI3LDggKzI1LDUgQEAKICsgIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhyb2Nrc2RibGliIGF0b21pYykKICtFTkRJRigpCiAgSUYoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVSIgT1IgQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkNsYW5nIikKLSAgIHNldF90YXJnZXRfcHJvcGVydGllcyhyb2Nrc2RibGliIFBST1BFUlRJRVMgQ09NUElMRV9GTEFHUyAiLWZQSUMgLWZuby1idWlsdGluLW1lbWNtcCAtZnJ0dGkiKQorICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHJvY2tzZGJsaWIgUFJPUEVSVElFUyBDT01QSUxFX0ZMQUdTICItZlBJQyAtZm5vLWJ1aWx0aW4tbWVtY21wIikKICBlbmRpZigpCi0tLSAKLTIuMTcuMQotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL215c3FsL21hcmlhZGJfMTAuMy4xOC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvbXlzcWwvbWFyaWFkYl8xMC40LjExLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL215c3FsL21hcmlhZGJfMTAuMy4xOC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9teXNxbC9tYXJpYWRiXzEwLjQuMTEuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvcG9zdGdyZXNxbC9wb3N0Z3Jlc3FsXzEyLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3Bvc3RncmVzcWwvcG9zdGdyZXNxbF8xMi4xLmJiCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvcG9zdGdyZXNxbC9wb3N0Z3Jlc3FsXzEyLjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvcG9zdGdyZXNxbC9wb3N0Z3Jlc3FsXzEyLjEuYmIKaW5kZXggZDViMWViZC4uNDg2ODUxOSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9wb3N0Z3Jlc3FsL3Bvc3RncmVzcWxfMTIuMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3Bvc3RncmVzcWwvcG9zdGdyZXNxbF8xMi4xLmJiCkBAIC04LDUgKzgsNSBAQAogICAgZmlsZTovLzAwMDEtSW1wcm92ZS1yZXByb2R1Y2liaWxpdHkucGF0Y2ggXAogIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiODc1NDU0MTZlZjAyMWVlZTg2MjFkMzFhOTNmY2M4OTkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2RhMjM5NzIxNWY3NThiNzkzZjc0MWM4NmJlMDU0NjgyNTdiMGU2YmNiMWE2MTEzODgyYWI1ZDBkZjA4NTVjNiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZWUxYmQ0ZWM1ZjQ5MzYzYTNmNDU2ZjA3ZTU5OWI0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMDliZjNhYmJhZjY3NjM5ODBkMGY4YWNiYjk0M2I3NjI5YThiMjAwNzNkZTE4ZDg2N2FlY2RiNzk4ODQ4M2VkIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtQ01ha2UtaGFzLXN0b2NrLUZpbmRaTElCLWluLXVwcGVyLWNhc2UucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3JvY2tzZGIvZmlsZXMvMDAwMS1DTWFrZS1oYXMtc3RvY2stRmluZFpMSUItaW4tdXBwZXItY2FzZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4MmY4YS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3JvY2tzZGIvZmlsZXMvMDAwMS1DTWFrZS1oYXMtc3RvY2stRmluZFpMSUItaW4tdXBwZXItY2FzZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLUZyb20gMzgxNDZhNWQ4MDNhMWZiOWIxMGYwMTFhYTg1Nzg3MmI2ZjIwY2QwMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFRvbmdsaWFuZyBMaWFvIDx4a3N6bHRsQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgMjkgQXByIDIwMTkgMDM6NTE6NTEgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gQ01ha2UgaGFzIHN0b2NrIEZpbmRaTElCIGluIHVwcGVyIGNhc2UuIE1vcmUgZGV0YWlscyBpbgotIGh0dHBzOi8vY21ha2Uub3JnL2NtYWtlL2hlbHAvdjMuMTQvbW9kdWxlL0ZpbmRaTElCLmh0bWwKLQotCi1VcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yb2Nrc2RiL3B1bGwvNTI2MQotCi0tLS0KLSBDTWFrZUxpc3RzLnR4dCB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKLWluZGV4IDQwY2RkMjZiYi4uMzU1Njg2NTY2IDEwMDY0NAotLS0tIGEvQ01ha2VMaXN0cy50eHQKLSsrKyBiL0NNYWtlTGlzdHMudHh0Ci1AQCAtOTIsNyArOTIsNyBAQCBlbHNlKCkKLSAgIGVuZGlmKCkKLQotICAgaWYoV0lUSF9aTElCKQotLSAgICBmaW5kX3BhY2thZ2UoemxpYiBSRVFVSVJFRCkKLSsgICAgZmluZF9wYWNrYWdlKFpMSUIgUkVRVUlSRUQpCi0gICAgIGFkZF9kZWZpbml0aW9ucygtRFpMSUIpCi0gICAgIGlmKFpMSUJfSU5DTFVERV9ESVJTKQotICAgICAgICMgQ01ha2UgMwotLS0KLTIuMTEuMAotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3JvY2tzZGIvZmlsZXMvMDAwMS1EaXNhYmxlLVdzaGFkb3ctYW5kLWRvLW5vdC1tYXJrLWRlZmF1bHQtY29weS1jb25zdHJ1LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtRGlzYWJsZS1Xc2hhZG93LWFuZC1kby1ub3QtbWFyay1kZWZhdWx0LWNvcHktY29uc3RydS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNjYWEzYS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3JvY2tzZGIvZmlsZXMvMDAwMS1EaXNhYmxlLVdzaGFkb3ctYW5kLWRvLW5vdC1tYXJrLWRlZmF1bHQtY29weS1jb25zdHJ1LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotRnJvbSBlZTcyODQzNDEyNGI5YjdkMTdhYmJkMDYwYTYyYWFjNzlhOWI3OWMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLURhdGU6IFR1ZSwgMTIgRmViIDIwMTkgMTQ6MzE6MjQgLTA4MDAKLVN1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSAtV3NoYWRvdyBhbmQgZG8gbm90IG1hcmsgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9ycwotCi1TaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotLS0tCi0gQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCi0gdXRpbGl0aWVzL3BlcnNpc3RlbnRfY2FjaGUvYmxvY2tfY2FjaGVfdGllci5oICAgICAgfCA0ICsrLS0KLSB1dGlsaXRpZXMvcGVyc2lzdGVudF9jYWNoZS9ibG9ja19jYWNoZV90aWVyX2ZpbGUuaCB8IDIgKy0KLSAzIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKLWluZGV4IDk4ZTJlMTk3My4uM2EyNGEwNzViIDEwMDY0NAotLS0tIGEvQ01ha2VMaXN0cy50eHQKLSsrKyBiL0NNYWtlTGlzdHMudHh0Ci1AQCAtMjU0LDcgKzI1NCw3IEBAIGlmKEZBSUxfT05fV0FSTklOR1MpCi0gICBpZihNU1ZDKQotICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gL1dYIikKLSAgIGVsc2UoKSAjIGFzc3VtZSBHQ0MKLS0gICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1XZXJyb3IiKQotKyAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLVdlcnJvciAtV25vLWVycm9yPXNoYWRvdyIpCi0gICBlbmRpZigpCi0gZW5kaWYoKQotIAotZGlmZiAtLWdpdCBhL3V0aWxpdGllcy9wZXJzaXN0ZW50X2NhY2hlL2Jsb2NrX2NhY2hlX3RpZXIuaCBiL3V0aWxpdGllcy9wZXJzaXN0ZW50X2NhY2hlL2Jsb2NrX2NhY2hlX3RpZXIuaAotaW5kZXggMmIyYzBlZjRmLi45NmQwNTQwYTQgMTAwNjQ0Ci0tLS0gYS91dGlsaXRpZXMvcGVyc2lzdGVudF9jYWNoZS9ibG9ja19jYWNoZV90aWVyLmgKLSsrKyBiL3V0aWxpdGllcy9wZXJzaXN0ZW50X2NhY2hlL2Jsb2NrX2NhY2hlX3RpZXIuaAotQEAgLTkxLDkgKzkxLDkgQEAgY2xhc3MgQmxvY2tDYWNoZVRpZXIgOiBwdWJsaWMgUGVyc2lzdGVudENhY2hlVGllciB7Ci0gICAgICAgICA6IGtleV8oc3RkOjptb3ZlKGtleSkpLCBkYXRhXyhkYXRhKSB7fQotICAgICB+SW5zZXJ0T3AoKSB7fQotIAotLSAgICBJbnNlcnRPcCgpID0gZGVsZXRlOwotKyAgICBJbnNlcnRPcCgpID0gZGVmYXVsdDsKLSAgICAgSW5zZXJ0T3AoSW5zZXJ0T3AmJiAvKnJocyovKSA9IGRlZmF1bHQ7Ci0tICAgIEluc2VydE9wJiBvcGVyYXRvcj0oSW5zZXJ0T3AmJiByaHMpID0gZGVmYXVsdDsKLSsgICAgSW5zZXJ0T3AmIG9wZXJhdG9yPShJbnNlcnRPcCYmIHJocykgPSBkZWxldGU7Ci0gCi0gICAgIC8vIHVzZWQgZm9yIGVzdGltYXRpbmcgc2l6ZSBieSBib3VuZGVkIHF1ZXVlCi0gICAgIHNpemVfdCBTaXplKCkgeyByZXR1cm4gZGF0YV8uc2l6ZSgpICsga2V5Xy5zaXplKCk7IH0KLWRpZmYgLS1naXQgYS91dGlsaXRpZXMvcGVyc2lzdGVudF9jYWNoZS9ibG9ja19jYWNoZV90aWVyX2ZpbGUuaCBiL3V0aWxpdGllcy9wZXJzaXN0ZW50X2NhY2hlL2Jsb2NrX2NhY2hlX3RpZXJfZmlsZS5oCi1pbmRleCBlMzhiNmM5YTEuLmQ5Yjg5YTRmNyAxMDA2NDQKLS0tLSBhL3V0aWxpdGllcy9wZXJzaXN0ZW50X2NhY2hlL2Jsb2NrX2NhY2hlX3RpZXJfZmlsZS5oCi0rKysgYi91dGlsaXRpZXMvcGVyc2lzdGVudF9jYWNoZS9ibG9ja19jYWNoZV90aWVyX2ZpbGUuaAotQEAgLTI2Miw3ICsyNjIsNyBAQCBjbGFzcyBUaHJlYWRlZFdyaXRlciA6IHB1YmxpYyBXcml0ZXIgewotICAgICAgICAgOiBmaWxlXyhmaWxlKSwgYnVmXyhidWYpLCBmaWxlX29mZl8oZmlsZV9vZmYpLCBjYWxsYmFja18oY2FsbGJhY2spIHt9Ci0gCi0gICAgIElPKGNvbnN0IElPJikgPSBkZWZhdWx0OwotLSAgICBJTyYgb3BlcmF0b3I9KGNvbnN0IElPJikgPSBkZWZhdWx0OwotKyAgICBJTyYgb3BlcmF0b3I9KGNvbnN0IElPJikgPSBkZWxldGU7Ci0gICAgIHNpemVfdCBTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZW9mKElPKTsgfQotIAotICAgICBXcml0YWJsZUZpbGUqIGZpbGVfID0gbnVsbHB0cjsgICAgICAgICAgIC8vIEZpbGUgdG8gd3JpdGUgdG8KLS0tIAotMi4yMC4xCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvcm9ja3NkYi9maWxlcy8wMDAxLUZpeC1idWlsZC1icmVha2FnZS1mcm9tLWxvY2tfZ3VhcmQtZXJyb3ItNjE2MS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvcm9ja3NkYi9maWxlcy8wMDAxLUZpeC1idWlsZC1icmVha2FnZS1mcm9tLWxvY2tfZ3VhcmQtZXJyb3ItNjE2MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzg3ZDBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLWJyZWFrYWdlLWZyb20tbG9ja19ndWFyZC1lcnJvci02MTYxLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gYjYyNjcwM2RlN2VjZTUwN2YzNjA1MDdlNDlkM2VjYjQ0OGIxMmUwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1heXNhbSBZYWJhbmRlaCA8bXlhYmFuZGVoQGZiLmNvbT4KK0RhdGU6IFRodSwgMTIgRGVjIDIwMTkgMTM6NDg6NTAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIGJyZWFrYWdlIGZyb20gbG9ja19ndWFyZCBlcnJvciAoIzYxNjEpCisKK1N1bW1hcnk6CitUaGlzIGNoYW5nZSBmaXhlcyBhIHNvdXJjZSBpc3N1ZSB0aGF0IGNhdXNlZCBjb21waWxlIHRpbWUgZXJyb3Igd2hpY2ggYnJlYWtzIGJ1aWxkIGZvciBtYW55IGZiY29kZSBzZXJ2aWNlcyBpbiB0aGF0IHNldHVwLiBUaGUgc2l6ZSgpIG1lbWJlciBmdW5jdGlvbiBvZiBjaGFubmVsIGlzIGEgY29uc3QgbWVtYmVyLCBzbyBtZW1iZXIgdmFyaWFibGVzIGFjY2Vzc2VkIHdpdGhpbiBpdCBhcmUgaW1wbGljaXRseSBjb25zdCBhcyB3ZWxsLiBUaGlzIGNhdXNlZCBlcnJvciB3aGVuIGNsYW5nIGZhaWxzIHRvIHJlc29sdmUgdG8gYSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIHN0ZDo6bXV0ZXggYmVjYXVzZSB0aGUgc3VpdGFibGUgY29uc3RydWN0b3IgZ290IHJlamVjdGVkIGR1ZSB0byBsb3NzIG9mIGNvbnN0bmVzcyBmb3IgaXRzIGFyZ3VtZW50LiBUaGUgZml4IGlzIHRvIGFkZCBtdXRhYmxlIG1vZGlmaWVyIHRvIHRoZSBsb2NrXyBtZW1iZXIgb2YgY2hhbm5lbC4KK1B1bGwgUmVxdWVzdCByZXNvbHZlZDogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JvY2tzZGIvcHVsbC82MTYxCisKK0RpZmZlcmVudGlhbCBSZXZpc2lvbjogRDE4OTY3Njg1CisKK1B1bGxlZCBCeTogbWF5c2FteWFiYW5kZWgKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitmYnNoaXBpdC1zb3VyY2UtaWQ6IDY5OGI2YTUxNTNjM2M5MmVlYWNiODQyYzQ2N2FhMjhjYzM1MGQ0MzIKKy0tLQorIHV0aWwvY2hhbm5lbC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC9jaGFubmVsLmggYi91dGlsL2NoYW5uZWwuaAoraW5kZXggMDIyNTQ4MmMwLi5hOGE0NzY4MGEgMTAwNjQ0CistLS0gYS91dGlsL2NoYW5uZWwuaAorKysrIGIvdXRpbC9jaGFubmVsLmgKK0BAIC02MCw3ICs2MCw3IEBAIGNsYXNzIGNoYW5uZWwgeworIAorICBwcml2YXRlOgorICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY3ZfOworLSAgc3RkOjptdXRleCBsb2NrXzsKKysgIG11dGFibGUgc3RkOjptdXRleCBsb2NrXzsKKyAgIHN0ZDo6cXVldWU8VD4gYnVmZmVyXzsKKyAgIGJvb2wgZW9mXzsKKyB9OworLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtZGItd3JpdGVfdGhyZWFkLmNjLUluaXRpYWxpemUtc3RhdGUucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3JvY2tzZGIvZmlsZXMvMDAwMS1kYi13cml0ZV90aHJlYWQuY2MtSW5pdGlhbGl6ZS1zdGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2RkYmNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtZGItd3JpdGVfdGhyZWFkLmNjLUluaXRpYWxpemUtc3RhdGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA0OWRjZDIyZGNmMWFhZTU5OTVjNDJlYWMwZmRhNjg1MTZmYzFjZDQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDE5IEp1biAyMDE5IDE3OjU3OjI0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGRiL3dyaXRlX3RocmVhZC5jYzogSW5pdGlhbGl6ZSBzdGF0ZQorCitGaXhlZCBhbiBlcnJvciB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgLU8yOgorZGIvd3JpdGVfdGhyZWFkLmNjOjE4MzoxNDogZXJyb3I6ICdzdGF0ZScgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRiL3dyaXRlX3RocmVhZC5jYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2RiL3dyaXRlX3RocmVhZC5jYyBiL2RiL3dyaXRlX3RocmVhZC5jYworaW5kZXggODM1OTkyYy4uNmY5OWExMSAxMDA2NDQKKy0tLSBhL2RiL3dyaXRlX3RocmVhZC5jYworKysrIGIvZGIvd3JpdGVfdGhyZWFkLmNjCitAQCAtNTksNyArNTksNyBAQCB1aW50OF90IFdyaXRlVGhyZWFkOjpCbG9ja2luZ0F3YWl0U3RhdGUoV3JpdGVyKiB3LCB1aW50OF90IGdvYWxfbWFzaykgeworIAorIHVpbnQ4X3QgV3JpdGVUaHJlYWQ6OkF3YWl0U3RhdGUoV3JpdGVyKiB3LCB1aW50OF90IGdvYWxfbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0YXRpb25Db250ZXh0KiBjdHgpIHsKKy0gIHVpbnQ4X3Qgc3RhdGU7CisrICB1aW50OF90IHN0YXRlID0gMDsKKyAKKyAgIC8vIDEuIEJ1c3kgbG9vcCB1c2luZyAicGF1c2UiIGZvciAxIG1pY3JvIHNlYworICAgLy8gMi4gRWxzZSBTT01FVElNRVMgYnVzeSBsb29wIHVzaW5nICJ5aWVsZCIgZm9yIDEwMCBtaWNybyBzZWMgKGRlZmF1bHQpCistLSAKKzIuNy40CisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvcm9ja3NkYi9maWxlcy8wMDAxLWZpeC1Jc3N1ZS01MzAzLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtZml4LUlzc3VlLTUzMDMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhOTgzNGQuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtZml4LUlzc3VlLTUzMDMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi1Gcm9tIDUxMmFhZjNkODMzOTczZjYxNDZjNmYxMjM1YjU5MDkwMTg3NjE3NWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBiaW9jb2R6IDxiaW9jb2R6QHByb3Rvbm1haWwuY29tPgotRGF0ZTogRnJpLCA3IEp1biAyMDE5IDA5OjQ5OjM3IC0wNDAwCi1TdWJqZWN0OiBbUEFUQ0hdIGZpeCBJc3N1ZSA1MzAzCi0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcm9ja3NkYi9wdWxsLzU0MjZdCi0KLS0tLQotIGRiL2ludGVybmFsX3N0YXRzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCi0gZGIvdmVyc2lvbl9lZGl0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOCArKysrKysrKwotIHV0aWxpdGllcy9wZXJzaXN0ZW50X2NhY2hlL3BlcnNpc3RlbnRfY2FjaGVfdXRpbC5oIHwgIDIgKy0KLSAzIGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2RiL2ludGVybmFsX3N0YXRzLmggYi9kYi9pbnRlcm5hbF9zdGF0cy5oCi1pbmRleCA2ZmE4NzI3YTQuLjA5NDQ3NjQ0ZCAxMDA2NDQKLS0tLSBhL2RiL2ludGVybmFsX3N0YXRzLmgKLSsrKyBiL2RiL2ludGVybmFsX3N0YXRzLmgKLUBAIC0yMzYsNiArMjM2LDI3IEBAIGNsYXNzIEludGVybmFsU3RhdHMgewotICAgICAgIH0KLSAgICAgfQotCi0rCUNvbXBhY3Rpb25TdGF0cyAmIG9wZXJhdG9yPShjb25zdCBDb21wYWN0aW9uU3RhdHMmIGMpIHsKLSsJICBjb3VudCA9IGMuY291bnQ7Ci0rCSAgbWljcm9zID0gYy5taWNyb3M7Ci0rCSAgY3B1X21pY3JvcyA9IGMuY3B1X21pY3JvczsKLSsJICBieXRlc19yZWFkX25vbl9vdXRwdXRfbGV2ZWxzID0gYy5ieXRlc19yZWFkX25vbl9vdXRwdXRfbGV2ZWxzOwotKwkgIGJ5dGVzX3JlYWRfb3V0cHV0X2xldmVsID0gYy5ieXRlc19yZWFkX291dHB1dF9sZXZlbDsKLSsJICBieXRlc193cml0dGVuID0gYy5ieXRlc193cml0dGVuOwotKwkgIGJ5dGVzX21vdmVkID0gYy5ieXRlc19tb3ZlZDsKLSsJICBudW1faW5wdXRfZmlsZXNfaW5fbm9uX291dHB1dF9sZXZlbHMgPQotKwkgICAgICBjLm51bV9pbnB1dF9maWxlc19pbl9ub25fb3V0cHV0X2xldmVsczsKLSsJICBudW1faW5wdXRfZmlsZXNfaW5fb3V0cHV0X2xldmVsID0gYy5udW1faW5wdXRfZmlsZXNfaW5fb3V0cHV0X2xldmVsOwotKwkgIG51bV9vdXRwdXRfZmlsZXMgPSBjLm51bV9vdXRwdXRfZmlsZXM7Ci0rCSAgbnVtX2lucHV0X3JlY29yZHMgPSBjLm51bV9pbnB1dF9yZWNvcmRzOwotKwkgIG51bV9kcm9wcGVkX3JlY29yZHMgPSBjLm51bV9kcm9wcGVkX3JlY29yZHM7Ci0rCSAgaW50IG51bV9vZl9yZWFzb25zID0gc3RhdGljX2Nhc3Q8aW50PihDb21wYWN0aW9uUmVhc29uOjprTnVtT2ZSZWFzb25zKTsKLSsJICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9vZl9yZWFzb25zOyBpKyspIHsKLSsJICAJY291bnRzW2ldID0gYy5jb3VudHNbaV07Ci0rCSAgfQotKwkgIHJldHVybiAqdGhpczsKLSsJfQotKwotICAgICB2b2lkIENsZWFyKCkgewotICAgICAgIHRoaXMtPm1pY3JvcyA9IDA7Ci0gICAgICAgdGhpcy0+Y3B1X21pY3JvcyA9IDA7Ci1kaWZmIC0tZ2l0IGEvZGIvdmVyc2lvbl9lZGl0LmggYi9kYi92ZXJzaW9uX2VkaXQuaAotaW5kZXggMjI5NTMxNzkyLi41YzUwZWY1NTIgMTAwNjQ0Ci0tLS0gYS9kYi92ZXJzaW9uX2VkaXQuaAotKysrIGIvZGIvdmVyc2lvbl9lZGl0LmgKLUBAIC01Miw2ICs1MiwxNCBAQCBzdHJ1Y3QgRmlsZURlc2NyaXB0b3IgewotICAgICAgICAgc21hbGxlc3Rfc2Vxbm8oX3NtYWxsZXN0X3NlcW5vKSwKLSAgICAgICAgIGxhcmdlc3Rfc2Vxbm8oX2xhcmdlc3Rfc2Vxbm8pIHt9Ci0KLSsgIEZpbGVEZXNjcmlwdG9yKGNvbnN0IEZpbGVEZXNjcmlwdG9yJiBmZCkgewotKyAgICB0YWJsZV9yZWFkZXIgPSBmZC50YWJsZV9yZWFkZXI7Ci0rICAgIHBhY2tlZF9udW1iZXJfYW5kX3BhdGhfaWQgPSBmZC5wYWNrZWRfbnVtYmVyX2FuZF9wYXRoX2lkOwotKyAgICBmaWxlX3NpemUgPSBmZC5maWxlX3NpemU7Ci0rICAgIHNtYWxsZXN0X3NlcW5vID0gZmQuc21hbGxlc3Rfc2Vxbm87Ci0rICAgIGxhcmdlc3Rfc2Vxbm8gPSBmZC5sYXJnZXN0X3NlcW5vOwotKyAgfQotKwotICAgRmlsZURlc2NyaXB0b3ImIG9wZXJhdG9yPShjb25zdCBGaWxlRGVzY3JpcHRvciYgZmQpIHsKLSAgICAgdGFibGVfcmVhZGVyID0gZmQudGFibGVfcmVhZGVyOwotICAgICBwYWNrZWRfbnVtYmVyX2FuZF9wYXRoX2lkID0gZmQucGFja2VkX251bWJlcl9hbmRfcGF0aF9pZDsKLWRpZmYgLS1naXQgYS91dGlsaXRpZXMvcGVyc2lzdGVudF9jYWNoZS9wZXJzaXN0ZW50X2NhY2hlX3V0aWwuaCBiL3V0aWxpdGllcy9wZXJzaXN0ZW50X2NhY2hlL3BlcnNpc3RlbnRfY2FjaGVfdXRpbC5oCi1pbmRleCAyMTRiYjU4NzUuLjI1NGMwMzhmOSAxMDA2NDQKLS0tLSBhL3V0aWxpdGllcy9wZXJzaXN0ZW50X2NhY2hlL3BlcnNpc3RlbnRfY2FjaGVfdXRpbC5oCi0rKysgYi91dGlsaXRpZXMvcGVyc2lzdGVudF9jYWNoZS9wZXJzaXN0ZW50X2NhY2hlX3V0aWwuaAotQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgQm91bmRlZFF1ZXVlIHsKLSAgICAgVCB0ID0gc3RkOjptb3ZlKHFfLmZyb250KCkpOwotICAgICBzaXplXyAtPSB0LlNpemUoKTsKLSAgICAgcV8ucG9wX2Zyb250KCk7Ci0tICAgIHJldHVybiBzdGQ6Om1vdmUodCk7Ci0rICAgIHJldHVybiB0OwotICAgfQotCi0gICBzaXplX3QgU2l6ZSgpIGNvbnN0IHsKLS0tCi0yLjExLjAKLQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtdXRpbGl0aWVzLUZpeC1idWlsZC1mYWlsdXJlLXdpdGgtV2Vycm9yLW1heWJlLXVuaW5pdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvcm9ja3NkYi9maWxlcy8wMDAxLXV0aWxpdGllcy1GaXgtYnVpbGQtZmFpbHVyZS13aXRoLVdlcnJvci1tYXliZS11bmluaXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMDQyOWEuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL2ZpbGVzLzAwMDEtdXRpbGl0aWVzLUZpeC1idWlsZC1mYWlsdXJlLXdpdGgtV2Vycm9yLW1heWJlLXVuaW5pdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUZyb20gODk5NmYwNzVlNjRkYTBlNmZmZWRhNTc2MzJlZjMxZjg3MTBkZWZjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEhlIFpoZSA8emhlLmhlQHdpbmRyaXZlci5jb20+Ci1EYXRlOiBGcmksIDE1IE1hciAyMDE5IDE2OjQ3OjAzICswODAwCi1TdWJqZWN0OiBbUEFUQ0hdIHV0aWxpdGllczogRml4IGJ1aWxkIGZhaWx1cmUgd2l0aCAtV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQKLQotU3VtbWFyeToKLUluaXRpYWxpemUgbWFnaWNfbnVtYmVyIHRvIHplcm8gdG8gYXZvaWQgc3VjaCBmYWlsdXJlLgotdXRpbGl0aWVzL2Jsb2JfZGIvYmxvYl9sb2dfZm9ybWF0LmNjOjkxOjM6IGVycm9yOiAnbWFnaWNfbnVtYmVyJyBtYXkgYmUgdXNlZAotdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCi0gICBpZiAobWFnaWNfbnVtYmVyICE9IGtNYWdpY051bWJlcikgewotICAgXn4KLQotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbZXhwZWN0ZWQgdmVyc2lvbiA1LjE5XQotCi1TaWduZWQtb2ZmLWJ5OiBIZSBaaGUgPHpoZS5oZUB3aW5kcml2ZXIuY29tPgotLS0tCi0gdXRpbGl0aWVzL2Jsb2JfZGIvYmxvYl9sb2dfZm9ybWF0LmNjIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvdXRpbGl0aWVzL2Jsb2JfZGIvYmxvYl9sb2dfZm9ybWF0LmNjIGIvdXRpbGl0aWVzL2Jsb2JfZGIvYmxvYl9sb2dfZm9ybWF0LmNjCi1pbmRleCAyYmY3MDI4Li44NzI2Y2I4IDEwMDY0NAotLS0tIGEvdXRpbGl0aWVzL2Jsb2JfZGIvYmxvYl9sb2dfZm9ybWF0LmNjCi0rKysgYi91dGlsaXRpZXMvYmxvYl9kYi9ibG9iX2xvZ19mb3JtYXQuY2MKLUBAIC04Miw3ICs4Miw3IEBAIFN0YXR1cyBCbG9iTG9nRm9vdGVyOjpEZWNvZGVGcm9tKFNsaWNlIHNyYykgewotICAgdWludDMyX3Qgc3JjX2NyYyA9IDA7Ci0gICBzcmNfY3JjID0gY3JjMzJjOjpWYWx1ZShzcmMuZGF0YSgpLCBCbG9iTG9nRm9vdGVyOjprU2l6ZSAtIHNpemVvZih1aW50MzJfdCkpOwotICAgc3JjX2NyYyA9IGNyYzMyYzo6TWFzayhzcmNfY3JjKTsKLS0gIHVpbnQzMl90IG1hZ2ljX251bWJlcjsKLSsgIHVpbnQzMl90IG1hZ2ljX251bWJlciA9IDA7Ci0gICBpZiAoIUdldEZpeGVkMzIoJnNyYywgJm1hZ2ljX251bWJlcikgfHwgIUdldEZpeGVkNjQoJnNyYywgJmJsb2JfY291bnQpIHx8Ci0gICAgICAgIUdldEZpeGVkNjQoJnNyYywgJmV4cGlyYXRpb25fcmFuZ2UuZmlyc3QpIHx8Ci0gICAgICAgIUdldEZpeGVkNjQoJnNyYywgJmV4cGlyYXRpb25fcmFuZ2Uuc2Vjb25kKSB8fCAhR2V0Rml4ZWQzMigmc3JjLCAmY3JjKSkgewotLS0gCi0yLjcuNAotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3JvY2tzZGIvcm9ja3NkYl9naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGJzL3JvY2tzZGIvcm9ja3NkYl9naXQuYmIKaW5kZXggOWZkNWVlMS4uNzEzZDViYiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRicy9yb2Nrc2RiL3JvY2tzZGJfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kYnMvcm9ja3NkYi9yb2Nrc2RiX2dpdC5iYgpAQCAtNiwxNSArNiwxMyBAQAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAogICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5sZXZlbGRiO21kNT1mYjA0ZmY1N2ExNGYzMDhmMmVlZDRhOWI4N2Q0NTgzNyIKIAotU1JDUkVWID0gIjYyOGE3ZmQ3NGI1NjExNjU3MTA2YzU3ZjcyNGYxNjgyYjExNDY4NGMiCi1TUkNCUkFOQ0ggPSAiNi4wLmZiIgotUFYgPSAiNi4wLjIiCitTUkNSRVYgPSAiNGNmYmQ4N2FmZDA4YTE2ZGYyODQzNmZiOTkwZWY2YjE1NGVlNjExNCIKK1NSQ0JSQU5DSCA9ICI2LjUuZmIiCitQViA9ICI2LjUuMiIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2ZhY2Vib29rLyR7QlBOfS5naXQ7YnJhbmNoPSR7U1JDQlJBTkNIfSBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUNNYWtlLWhhcy1zdG9jay1GaW5kWkxJQi1pbi11cHBlci1jYXNlLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtRGlzYWJsZS1Xc2hhZG93LWFuZC1kby1ub3QtbWFyay1kZWZhdWx0LWNvcHktY29uc3RydS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLXV0aWxpdGllcy1GaXgtYnVpbGQtZmFpbHVyZS13aXRoLVdlcnJvci1tYXliZS11bmluaXQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtSXNzdWUtNTMwMy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1icmVha2FnZS1mcm9tLWxvY2tfZ3VhcmQtZXJyb3ItNjE2MS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRiLXdyaXRlX3RocmVhZC5jYy1Jbml0aWFsaXplLXN0YXRlLnBhdGNoIFwKICAgICAgICAgICAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCkBAIC0yMiw5ICsyMCw5IEBACiBpbmhlcml0IGNtYWtlCiAKIFBBQ0tBR0VDT05GSUcgPz89ICJiemlwMiB6bGliIGx6NCBnZmxhZ3MiCi1QQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItRFdJVEhfQloyPU9OIC1EQlpJUDJfTElCUkFSSUVTOlNUUklORz1iejIsLURXSVRIX0JaMj1PRkYsYnppcDIiCi1QQUNLQUdFQ09ORklHW2x6NF0gPSAiLURXSVRIX0xaND1PTiAtRExaNF9MSUJSQVJJRVM6U1RSSU5HPWx6NCwtRFdJVEhfTFo0PU9GRixsejQiCi1QQUNLQUdFQ09ORklHW3psaWJdID0gIi1EV0lUSF9aTElCPU9OIC1EWkxJQl9MSUJSQVJZOlNUUklORz16LC1EV0lUSF9aTElCPU9GRix6bGliIgorUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLURXSVRIX0JaMj1PTiwtRFdJVEhfQloyPU9GRixiemlwMiIKK1BBQ0tBR0VDT05GSUdbbHo0XSA9ICItRFdJVEhfTFo0PU9OLC1EV0lUSF9MWjQ9T0ZGLGx6NCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLURXSVRIX1pMSUI9T04sLURXSVRIX1pMSUI9T0ZGLHpsaWIiCiBQQUNLQUdFQ09ORklHW3pzdGRdID0gIi1EV0lUSF9aU1REPU9OLC1EV0lUSF9aU1REPU9GRix6c3RkIgogUEFDS0FHRUNPTkZJR1tsaXRlXSA9ICItRFJPQ0tTREJfTElURT1PTiwtRFJPQ0tTREJfTElURT1PRkYiCiBQQUNLQUdFQ09ORklHW2dmbGFnc10gPSAiLURXSVRIX0dGTEFHUz1PTiwtRFdJVEhfR0ZMQUdTPU9GRixnZmxhZ3MiCkBAIC0zNCw2ICszMiw3IEBACiAgICAgLURQT1JUQUJMRT1PTiBcCiAgICAgLURXSVRIX1RFU1RTPU9GRiBcCiAgICAgLURXSVRIX1RPT0xTPU9GRiBcCisgICAgLURGQUlMX09OX1dBUk5JTkdTPU9GRiBcCiAiCiAKIGRvX2luc3RhbGxfYXBwZW5kKCkgewpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkLzAwMDEtRG8tbm90LWFkZC1zdGFjay1wb2ludGVyLXRvLWNsb2JiZXItbGlzdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9icmVha3BhZC9icmVha3BhZC8wMDAxLURvLW5vdC1hZGQtc3RhY2stcG9pbnRlci10by1jbG9iYmVyLWxpc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1ODQ5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9icmVha3BhZC9icmVha3BhZC8wMDAxLURvLW5vdC1hZGQtc3RhY2stcG9pbnRlci10by1jbG9iYmVyLWxpc3QucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorRnJvbSA1YzYzZWI1ZDU2YWJkNGU1MjMyYWRkNDcyNzI0Nzk2NWE4NjNkODUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTUgRGVjIDIwMTkgMTQ6MDI6NDUgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRG8gbm90IGFkZCBzdGFjayBwb2ludGVyIHRvIGNsb2JiZXIgbGlzdAorCitJdCB3YXMgYmVpbmcgaWdub3JlZCB1bnRpbCBub3cgd2hlbiBnY2MgOS4wIGJlY2FtZSBjYXBhYmxlCitvZiBmbGFnZ2luZyB0aGVzZSBzaWxlbnQgaWdub3JlIHZpYSBbMV0uCisKK1dlIHdlcmVuJ3QgYWN0dWFsbHkgY2xvYmJlcmluZyB0aGUgc3RhY2sgcG9pbnRlcnMgaGVyZQorc28gaXQgc2hvdWxkIG5vdCBjYXVzZSBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKK1sxXSBodHRwczovL2djYy5nbnUub3JnL1BSNTI4MTMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpbnV4X3N5c2NhbGxfc3VwcG9ydC5oIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saW51eF9zeXNjYWxsX3N1cHBvcnQuaCBiL2xpbnV4X3N5c2NhbGxfc3VwcG9ydC5oCitpbmRleCA5Mjc2ZjU2Li42ZTczMzA5IDEwMDY0NAorLS0tIGEvbGludXhfc3lzY2FsbF9zdXBwb3J0LmgKKysrKyBiL2xpbnV4X3N5c2NhbGxfc3VwcG9ydC5oCitAQCAtMTk1NSw3ICsxOTU1LDcgQEAgc3RydWN0IGtlcm5lbF9zdGF0ZnMgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExTU19FTlRSWVBPSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wICUlZWJ4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImVzcCIsICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgTFNTX1JFVFVSTih0eXBlLF9fcmVzKQorICAgICAjdW5kZWYgIF9zeXNjYWxsMAorICAgICAjZGVmaW5lIF9zeXNjYWxsMCh0eXBlLG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0yMDEyLDcgKzIwMTIsNyBAQCBzdHJ1Y3Qga2VybmVsX3N0YXRmcyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpIiAoX19OUl8jI25hbWUpLCAicmkiICgobG9uZykoYXJnMSkpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYyIgKChsb25nKShhcmcyKSksICJkIiAoKGxvbmcpKGFyZzMpKSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlMiICgobG9uZykoYXJnNCkpLCAiRCIgKChsb25nKShhcmc1KSkgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJlc3AiLCAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIExTU19SRVRVUk4odHlwZSxfX3Jlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgfQorICAgICAjdW5kZWYgIF9zeXNjYWxsNgorQEAgLTIwMzQsNyArMjAzNCw3IEBAIHN0cnVjdCBrZXJuZWxfc3RhdGZzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImkiIChfX05SXyMjbmFtZSksICAiMCIgKChsb25nKSgmX19zKSksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjIiAoKGxvbmcpKGFyZzIpKSwgImQiICgobG9uZykoYXJnMykpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUyIgKChsb25nKShhcmc0KSksICJEIiAoKGxvbmcpKGFyZzUpKSAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImVzcCIsICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgTFNTX1JFVFVSTih0eXBlLF9fcmVzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB9CisgICAgIExTU19JTkxJTkUgaW50IExTU19OQU1FKGNsb25lKShpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqY2hpbGRfc3RhY2ssCitAQCAtMjEyMCw3ICsyMTIwLDcgQEAgc3RydWN0IGtlcm5lbF9zdGF0ZnMgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiKC1FSU5WQUwpLCAiaSIoX19OUl9jbG9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibSIoZm4pLCAibSIoY2hpbGRfc3RhY2spLCAibSIoZmxhZ3MpLCAibSIoYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtIihwYXJlbnRfdGlkcHRyKSwgIm0iKG5ld3RscyksICJtIihjaGlsZF90aWRwdHIpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiZXNwIiwgIm1lbW9yeSIsICJlY3giLCAiZWR4IiwgImVzaSIsICJlZGkiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiLCAiZWN4IiwgImVkeCIsICJlc2kiLCAiZWRpIik7CisgICAgICAgTFNTX1JFVFVSTihpbnQsIF9fcmVzKTsKKyAgICAgfQorIAorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkLzAwMDEtZGlzYWJsZS1jYWxscy10by1nZXRjb250ZXh0LXdpdGgtbXVzbC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9icmVha3BhZC9icmVha3BhZC8wMDAxLWRpc2FibGUtY2FsbHMtdG8tZ2V0Y29udGV4dC13aXRoLW11c2wucGF0Y2gKaW5kZXggYmM3OTcyNy4uNDY2YWJlNSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkLzAwMDEtZGlzYWJsZS1jYWxscy10by1nZXRjb250ZXh0LXdpdGgtbXVzbC5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvYnJlYWtwYWQvYnJlYWtwYWQvMDAwMS1kaXNhYmxlLWNhbGxzLXRvLWdldGNvbnRleHQtd2l0aC1tdXNsLnBhdGNoCkBAIC04LDExICs4LDkgQEAKICBzcmMvY2xpZW50L2xpbnV4L2hhbmRsZXIvZXhjZXB0aW9uX2hhbmRsZXIuY2MgfCAxNyArKysrKysrKysrKysrKysrKwogIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspCiAKLUluZGV4OiBnaXQvc3JjL2NsaWVudC9saW51eC9oYW5kbGVyL2V4Y2VwdGlvbl9oYW5kbGVyLmNjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvc3JjL2NsaWVudC9saW51eC9oYW5kbGVyL2V4Y2VwdGlvbl9oYW5kbGVyLmNjCi0rKysgZ2l0L3NyYy9jbGllbnQvbGludXgvaGFuZGxlci9leGNlcHRpb25faGFuZGxlci5jYwotQEAgLTQ5NSw3ICs0OTUsMTkgQEAgYm9vbCBFeGNlcHRpb25IYW5kbGVyOjpTaW11bGF0ZVNpZ25hbERlbAorLS0tIGEvc3JjL2NsaWVudC9saW51eC9oYW5kbGVyL2V4Y2VwdGlvbl9oYW5kbGVyLmNjCisrKysgYi9zcmMvY2xpZW50L2xpbnV4L2hhbmRsZXIvZXhjZXB0aW9uX2hhbmRsZXIuY2MKK0BAIC00OTAsNyArNDkwLDE5IEBAIGJvb2wgRXhjZXB0aW9uSGFuZGxlcjo6U2ltdWxhdGVTaWduYWxEZWwKICAgIHNpZ2luZm8uc2lfY29kZSA9IFNJX1VTRVI7CiAgICBzaWdpbmZvLnNpX3BpZCA9IGdldHBpZCgpOwogICAgdWNvbnRleHRfdCBjb250ZXh0OwpAQCAtMzIsNyArMzAsNyBAQAogICAgcmV0dXJuIEhhbmRsZVNpZ25hbChzaWcsICZzaWdpbmZvLCAmY29udGV4dCk7CiAgfQogIAotQEAgLTY4MCw5ICs2OTIsMTQgQEAgYm9vbCBFeGNlcHRpb25IYW5kbGVyOjpXcml0ZU1pbmlkdW1wKCkgeworQEAgLTY3NSw5ICs2ODcsMTQgQEAgYm9vbCBFeGNlcHRpb25IYW5kbGVyOjpXcml0ZU1pbmlkdW1wKCkgewogICAgc3lzX3ByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMSwgMCwgMCwgMCk7CiAgCiAgICBDcmFzaENvbnRleHQgY29udGV4dDsKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9icmVha3BhZC9icmVha3BhZC8wMDAxLWxzcy1NYXRjaC1zeXNjYWxscy10by1tYXRjaC1tdXNsLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkLzAwMDEtbHNzLU1hdGNoLXN5c2NhbGxzLXRvLW1hdGNoLW11c2wucGF0Y2gKaW5kZXggMmI4OTJhZC4uYmRkNzg3YSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkLzAwMDEtbHNzLU1hdGNoLXN5c2NhbGxzLXRvLW1hdGNoLW11c2wucGF0Y2gKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkLzAwMDEtbHNzLU1hdGNoLXN5c2NhbGxzLXRvLW1hdGNoLW11c2wucGF0Y2gKQEAgLTgsMTEgKzgsOSBAQAogIGxpbnV4X3N5c2NhbGxfc3VwcG9ydC5oIHwgMyArKysKICAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCiAKLUluZGV4OiBsc3MvbGludXhfc3lzY2FsbF9zdXBwb3J0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBsc3Mub3JpZy9saW51eF9zeXNjYWxsX3N1cHBvcnQuaAotKysrIGxzcy9saW51eF9zeXNjYWxsX3N1cHBvcnQuaAotQEAgLTc5Myw2ICs3OTMsOSBAQCBzdHJ1Y3Qga2VybmVsX3N0YXRmcyB7CistLS0gYS9saW51eF9zeXNjYWxsX3N1cHBvcnQuaAorKysrIGIvbGludXhfc3lzY2FsbF9zdXBwb3J0LmgKK0BAIC04MTYsNiArODE2LDkgQEAgc3RydWN0IGtlcm5lbF9zdGF0ZnMgewogICNkZWZpbmUgRlVURVhfVFJZTE9DS19QSV9QUklWQVRFICAoRlVURVhfVFJZTE9DS19QSSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKICAjZW5kaWYKICAKQEAgLTIyLDcgKzIwLDcgQEAKICAKICAjaWYgZGVmaW5lZChfX3g4Nl82NF9fKQogICNpZm5kZWYgQVJDSF9TRVRfR1MKLUBAIC05MjQsNiArOTI3LDcgQEAgc3RydWN0IGtlcm5lbF9zdGF0ZnMgeworQEAgLTk0Nyw2ICs5NTAsNyBAQCBzdHJ1Y3Qga2VybmVsX3N0YXRmcyB7CiAgI2lmbmRlZiBfX05SX2ZhbGxvY2F0ZQogICNkZWZpbmUgX19OUl9mYWxsb2NhdGUgICAgICAgICAgMzI0CiAgI2VuZGlmCkBAIC0zMCw3ICsyOCw3IEBACiAgLyogRW5kIG9mIGkzODYgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICNlbGlmIGRlZmluZWQoX19BUk1fQVJDSF8zX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQogICNpZm5kZWYgX19OUl9zZXRyZXN1aWQKLUBAIC0xMjExLDYgKzEyMTUsMTIgQEAgc3RydWN0IGtlcm5lbF9zdGF0ZnMgeworQEAgLTEyMzksNiArMTI0MywxMiBAQCBzdHJ1Y3Qga2VybmVsX3N0YXRmcyB7CiAgI2lmbmRlZiBfX05SX2ZhbGxvY2F0ZQogICNkZWZpbmUgX19OUl9mYWxsb2NhdGUgICAgICAgICAgMjg1CiAgI2VuZGlmCkBAIC00MywzICs0MSwxNiBAQAogIC8qIEVuZCBvZiB4ODYtNjQgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAjZWxpZiBkZWZpbmVkKF9fbWlwc19fKQogICNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyCitAQCAtMTQxOCw2ICsxNDI4LDEyIEBAIHN0cnVjdCBrZXJuZWxfc3RhdGZzIHsKKyAjaWZuZGVmIF9fTlJfaW9wcmlvX2dldAorICNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0ICAgICAgICAgKF9fTlJfTGludXggKyAyNzQpCisgI2VuZGlmCisrCisrI3VuZGVmIF9fTlJfcHJlYWQKKysjZGVmaW5lIF9fTlJfcHJlYWQgX19OUl9wcmVhZDY0CisrI3VuZGVmIF9fTlJfcHdyaXRlCisrI2RlZmluZSBfX05SX3B3cml0ZSBfX05SX3B3cml0ZTY0CisrCisgLyogRW5kIG9mIE1JUFMgKDY0Yml0IEFQSSkgZGVmaW5pdGlvbnMgKi8KKyAjZWxzZQorICNpZm5kZWYgX19OUl9zZXRyZXN1aWQKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9icmVha3BhZC9icmVha3BhZC9kb250LWNsb2JiZXItcnNwLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkL2RvbnQtY2xvYmJlci1yc3AucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZjkwMzUuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkL2RvbnQtY2xvYmJlci1yc3AucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1Gcm9tIGQxZDdiNjE2MjE5ZmQ0NzczNmM4MDRmZjRjMmYzOTNkNzE4NGE3NWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogU3VuLCAyMyBEZWMgMjAxOCAxNjo1ODowNCAtMDgwMAotU3ViamVjdDogW1BBVENIXSBjaHJvbWl1bTogc3RhY2sgcG9pbnRlciBjbG9iYmVyCi0KLURvIG5vdCBhZGQgc3RhY2sgcG9pbnRlciB0byBjbG9iYmVyIGxpc3QKLQotaXQgd2FzIGJlaW5nIGlnbm9yZWQgdW50aWwgZ2NjIDkuMCBiZWNhbWUgY2FwYWJsZQotb2YgZmxhZ2dpbmcgdGhpcyBzaWxlbnQgaWdub3JpbmcgdmlhIFsxXQotCi1bMV0gaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTI4MTM8UGFzdGU+Ci0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tL2MvbGludXgtc3lzY2FsbC1zdXBwb3J0LysvMTM5MDE2MF0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBzcmMvdGhpcmRfcGFydHkvbHNzL2xpbnV4X3N5c2NhbGxfc3VwcG9ydC5oIHwgMTAgKysrKystLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0KLUluZGV4OiBiL3NyYy90aGlyZF9wYXJ0eS9sc3MvbGludXhfc3lzY2FsbF9zdXBwb3J0LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhL3NyYy90aGlyZF9wYXJ0eS9sc3MvbGludXhfc3lzY2FsbF9zdXBwb3J0LmgKLSsrKyBiL3NyYy90aGlyZF9wYXJ0eS9sc3MvbGludXhfc3lzY2FsbF9zdXBwb3J0LmgKLUBAIC0xOTU3LDcgKzE5NTcsNyBAQCBzdHJ1Y3Qga2VybmVsX3N0YXRmcyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTFNTX0VOVFJZUE9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgJSVlYngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiZXNwIiwgIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBMU1NfUkVUVVJOKHR5cGUsX19yZXMpCi0gICAgICN1bmRlZiAgX3N5c2NhbGwwCi0gICAgICNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotQEAgLTE5NjYsNyArMTk2Niw3IEBAIHN0cnVjdCBrZXJuZWxfc3RhdGZzIHsKLSAgICAgICAgIF9fYXNtX18gdm9sYXRpbGUoTFNTX0VOVFJZUE9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1hIiAoX19yZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX19OUl8jI25hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgOiAiZXNwIiwgIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgTFNTX1JFVFVSTih0eXBlLF9fcmVzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICB9Ci0gICAgICN1bmRlZiAgX3N5c2NhbGwxCi1AQCAtMjAxNCw3ICsyMDE0LDcgQEAgc3RydWN0IGtlcm5lbF9zdGF0ZnMgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaSIgKF9fTlJfIyNuYW1lKSwgInJpIiAoKGxvbmcpKGFyZzEpKSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImMiICgobG9uZykoYXJnMikpLCAiZCIgKChsb25nKShhcmczKSksICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTIiAoKGxvbmcpKGFyZzQpKSwgIkQiICgobG9uZykoYXJnNSkpICAgICAgICAgXAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiZXNwIiwgIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBMU1NfUkVUVVJOKHR5cGUsX19yZXMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIH0KLSAgICAgI3VuZGVmICBfc3lzY2FsbDYKLUBAIC0yMDM2LDcgKzIwMzYsNyBAQCBzdHJ1Y3Qga2VybmVsX3N0YXRmcyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpIiAoX19OUl8jI25hbWUpLCAgIjAiICgobG9uZykoJl9fcykpLCAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYyIgKChsb25nKShhcmcyKSksICJkIiAoKGxvbmcpKGFyZzMpKSwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlMiICgobG9uZykoYXJnNCkpLCAiRCIgKChsb25nKShhcmc1KSkgICAgICAgICBcCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJlc3AiLCAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIExTU19SRVRVUk4odHlwZSxfX3Jlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgfQotICAgICBMU1NfSU5MSU5FIGludCBMU1NfTkFNRShjbG9uZSkoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmNoaWxkX3N0YWNrLAotQEAgLTIxMjIsNyArMjEyMiw3IEBAIHN0cnVjdCBrZXJuZWxfc3RhdGZzIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIwIigtRUlOVkFMKSwgImkiKF9fTlJfY2xvbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm0iKGZuKSwgIm0iKGNoaWxkX3N0YWNrKSwgIm0iKGZsYWdzKSwgIm0iKGFyZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibSIocGFyZW50X3RpZHB0ciksICJtIihuZXd0bHMpLCAibSIoY2hpbGRfdGlkcHRyKQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImVzcCIsICJtZW1vcnkiLCAiZWN4IiwgImVkeCIsICJlc2kiLCAiZWRpIik7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImVjeCIsICJlZHgiLCAiZXNpIiwgImVkaSIpOwotICAgICAgIExTU19SRVRVUk4oaW50LCBfX3Jlcyk7Ci0gICAgIH0KLSAKLUBAIC0yNDA3LDcgKzI0MDcsNyBAQCBzdHJ1Y3Qga2VybmVsX3N0YXRmcyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkIihMU1NfU1lTQ0FMTF9BUkcocGFyZW50X3RpZHB0cikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciIoTFNTX1NZU0NBTExfQVJHKG5ld3RscykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiciIoTFNTX1NZU0NBTExfQVJHKGNoaWxkX3RpZHB0cikpCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyc3AiLCAibWVtb3J5IiwgInI4IiwgInIxMCIsICJyMTEiLCAicmN4Iik7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiLCAicjgiLCAicjEwIiwgInIxMSIsICJyY3giKTsKLSAgICAgICB9Ci0gICAgICAgTFNTX1JFVFVSTihpbnQsIF9fcmVzKTsKLSAgICAgfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkL21jb250ZXh0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkL21jb250ZXh0LnBhdGNoCmluZGV4IDQyZTA3M2IuLjUxMzkzOTYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9icmVha3BhZC9icmVha3BhZC9tY29udGV4dC5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvYnJlYWtwYWQvYnJlYWtwYWQvbWNvbnRleHQucGF0Y2gKQEAgLTMsNDggKzMsNiBAQAogVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW25lZWQgdG8gY29uc2lkZXIgQW5kcm9pZF0KIAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLUluZGV4OiBnaXQvc3JjL2NsaWVudC9saW51eC9kdW1wX3dyaXRlcl9jb21tb24vdGhyZWFkX2luZm8uY2MKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBnaXQub3JpZy9zcmMvY2xpZW50L2xpbnV4L2R1bXBfd3JpdGVyX2NvbW1vbi90aHJlYWRfaW5mby5jYwotKysrIGdpdC9zcmMvY2xpZW50L2xpbnV4L2R1bXBfd3JpdGVyX2NvbW1vbi90aHJlYWRfaW5mby5jYwotQEAgLTIyOSw3ICsyMjksNiBAQCB2b2lkIFRocmVhZEluZm86OkZpbGxDUFVDb250ZXh0KFJhd0NvbnRlCi0gfQotIAotICNlbGlmIGRlZmluZWQoX19taXBzX18pCi0tCi0gdWludHB0cl90IFRocmVhZEluZm86OkdldEluc3RydWN0aW9uUG9pbnRlcigpIGNvbnN0IHsKLSAgIHJldHVybiBtY29udGV4dC5wYzsKLSB9Ci1AQCAtMjYzLDggKzI2MiwxMSBAQCB2b2lkIFRocmVhZEluZm86OkZpbGxDUFVDb250ZXh0KFJhd0NvbnRlCi0gICBvdXQtPmNhdXNlID0gMDsgLy8gTm90IHN0b3JlZCBpbiBtY29udGV4dAotIAotICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNRF9GTE9BVElOR1NBVkVBUkVBX01JUFNfRlBSX0NPVU5UOyArK2kpCi0rI2lmZGVmIF9fR0xJQkNfXwotICAgICBvdXQtPmZsb2F0X3NhdmUucmVnc1tpXSA9IG1jb250ZXh0LmZwcmVncy5mcF9yLmZwX2ZyZWdzW2ldLl9mcF9mcmVnczsKLS0KLSsjZWxzZQotKyAgICBvdXQtPmZsb2F0X3NhdmUucmVnc1tpXSA9IG1jb250ZXh0LmZwcmVnc1tpXTsKLSsjZW5kaWYKLSAgIG91dC0+ZmxvYXRfc2F2ZS5mcGNzciA9IG1jb250ZXh0LmZwY19jc3I7Ci0gI2lmIF9NSVBTX1NJTSA9PSBfQUJJTzMyCi0gICBvdXQtPmZsb2F0X3NhdmUuZmlyID0gbWNvbnRleHQuZnBjX2VpcjsKLUluZGV4OiBnaXQvc3JjL2NsaWVudC9saW51eC9kdW1wX3dyaXRlcl9jb21tb24vdWNvbnRleHRfcmVhZGVyLmNjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvc3JjL2NsaWVudC9saW51eC9kdW1wX3dyaXRlcl9jb21tb24vdWNvbnRleHRfcmVhZGVyLmNjCi0rKysgZ2l0L3NyYy9jbGllbnQvbGludXgvZHVtcF93cml0ZXJfY29tbW9uL3Vjb250ZXh0X3JlYWRlci5jYwotQEAgLTI0Nyw4ICsyNDcsMTEgQEAgdm9pZCBVQ29udGV4dFJlYWRlcjo6RmlsbENQVUNvbnRleHQoUmF3QwotICAgb3V0LT5jYXVzZSA9IDA7ICAvLyBOb3QgcmVwb3J0ZWQgaW4gc2lnbmFsIGNvbnRleHQuCi0gCi0gICBmb3IgKGludCBpID0gMDsgaSA8IE1EX0ZMT0FUSU5HU0FWRUFSRUFfTUlQU19GUFJfQ09VTlQ7ICsraSkKLSsjaWZkZWYgX19HTElCQ19fCi0gICAgIG91dC0+ZmxvYXRfc2F2ZS5yZWdzW2ldID0gdWMtPnVjX21jb250ZXh0LmZwcmVncy5mcF9yLmZwX2RyZWdzW2ldOwotLQotKyNlbHNlCi0rICAgIG91dC0+ZmxvYXRfc2F2ZS5yZWdzW2ldID0gdWMtPnVjX21jb250ZXh0LmZwcmVnc1tpXTsKLSsjZW5kaWYKLSAgIG91dC0+ZmxvYXRfc2F2ZS5mcGNzciA9IHVjLT51Y19tY29udGV4dC5mcGNfY3NyOwotICNpZiBfTUlQU19TSU0gPT0gX0FCSU8zMgotICAgb3V0LT5mbG9hdF9zYXZlLmZpciA9IHVjLT51Y19tY29udGV4dC5mcGNfZWlyOyAgLy8gVW51c2VkLgogSW5kZXg6IGdpdC9zcmMvY2xpZW50L2xpbnV4L21pbmlkdW1wX3dyaXRlci9saW51eF9jb3JlX2R1bXBlci5jYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0tIGdpdC5vcmlnL3NyYy9jbGllbnQvbGludXgvbWluaWR1bXBfd3JpdGVyL2xpbnV4X2NvcmVfZHVtcGVyLmNjCkBAIC01OCwyMCArMTYsMyBAQAogICAgICAgICAgZm9yIChpbnQgaSA9IEVGX1IwOyBpIDw9IEVGX1IzMTsgaSsrKQogICAgICAgICAgICBpbmZvLm1jb250ZXh0LmdyZWdzW2kgLSBFRl9SMF0gPSBzdGF0dXMtPnByX3JlZ1tpXTsKICAjZWxzZSAgLy8gX19BTkRST0lEX18KLUluZGV4OiBnaXQvc3JjL3Rvb2xzL2xpbnV4L21kMmNvcmUvbWluaWR1bXAtMi1jb3JlLmNjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gZ2l0Lm9yaWcvc3JjL3Rvb2xzL2xpbnV4L21kMmNvcmUvbWluaWR1bXAtMi1jb3JlLmNjCi0rKysgZ2l0L3NyYy90b29scy9saW51eC9tZDJjb3JlL21pbmlkdW1wLTItY29yZS5jYwotQEAgLTUxNiw4ICs1MTYsMTIgQEAgUGFyc2VUaHJlYWRSZWdpc3RlcnMoQ3Jhc2hlZFByb2Nlc3M6OlRocgotICAgdGhyZWFkLT5tY29udGV4dC5sbzMgPSByYXdyZWdzLT5sb1syXTsKLSAKLSAgIGZvciAoaW50IGkgPSAwOyBpIDwgTURfRkxPQVRJTkdTQVZFQVJFQV9NSVBTX0ZQUl9DT1VOVDsgKytpKSB7Ci0rI2lmZGVmIF9fR0xJQkNfXwotICAgICB0aHJlYWQtPm1jb250ZXh0LmZwcmVncy5mcF9yLmZwX2ZyZWdzW2ldLl9mcF9mcmVncyA9Ci0gICAgICAgICByYXdyZWdzLT5mbG9hdF9zYXZlLnJlZ3NbaV07Ci0rI2Vsc2UKLSsgICAgdGhyZWFkLT5tY29udGV4dC5mcHJlZ3NbaV0gPSByYXdyZWdzLT5mbG9hdF9zYXZlLnJlZ3NbaV07Ci0rI2VuZGlmCi0gICB9Ci0gCi0gICB0aHJlYWQtPm1jb250ZXh0LmZwY19jc3IgPSByYXdyZWdzLT5mbG9hdF9zYXZlLmZwY3NyOwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9icmVha3BhZC9icmVha3BhZF9naXQuYmIKaW5kZXggMDZmM2VlOC4uZmY1YWNiZSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2JyZWFrcGFkL2JyZWFrcGFkX2dpdC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvYnJlYWtwYWQvYnJlYWtwYWRfZ2l0LmJiCkBAIC0xOSwxMSArMTksMTEgQEAKIAogU1JDUkVWX0ZPUk1BVCA9ICJicmVha3BhZF9ndGVzdF9wcm90b2J1Zl9sc3NfZ3lwIgogCi1TUkNSRVZfYnJlYWtwYWQgPSAiNTQ2NzM5M2EzZDFlN2FiOTI5ZmQwMWQ3OTk3MTcwMWJmNGUyYzJjNiIKLSN2MS44LjAKLVNSQ1JFVl9ndGVzdCA9ICJlYzQ0YzZjMTY3NWMyNWI5ODI3YWFjZDA4YzAyNDMzY2NjZGU3NzgwIgorU1JDUkVWX2JyZWFrcGFkID0gIjBjMGUyNGY3MDkyODhhMTI5ZDY2NWVjMjdkNmYwODkxODkzMTgzODUiCisjdjEuMTAuMAorU1JDUkVWX2d0ZXN0ID0gIjVlYzdmMGM0YTExM2UyZjE4YWMyYzZjYzdkZjUxYWQ2YWZjMjQwODEiCiBTUkNSRVZfcHJvdG9idWYgPSAiY2I2ZGQ0ZWY1ZjgyZTQxZTA2MTc5ZGNkNTdkM2IxZDkyNDZhZDZhYyIKLVNSQ1JFVl9sc3MgPSAiYTg5YmY3OTAzZjMxNjllNmJjN2I4ZWZjMTBhNzNhNzU3MWRlMjFjZiIKK1NSQ1JFVl9sc3MgPSAiODA0OGVjZTZjMTZjOTFhY2ZlMGQzNmQxZDNjYzA4OTBhYjZlOTQ1YyIKIFNSQ1JFVl9neXAgPSAiMzI0ZGQxNjZiN2MwYjM5ZDUxMzAyNmZhNTJkNjI4MGFjNmQ1Njc3MCIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2dvb2dsZS9icmVha3BhZDtuYW1lPWJyZWFrcGFkIFwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgICAgZmlsZTovLzAwMDEtZGlzYWJsZS1jYWxscy10by1nZXRjb250ZXh0LXdpdGgtbXVzbC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxzcy1NYXRjaC1zeXNjYWxscy10by1tYXRjaC1tdXNsLnBhdGNoO3BhdGNoZGlyPXNyYy90aGlyZF9wYXJ0eS9sc3MgXAogICAgICAgICAgICBmaWxlOi8vbWlwc19hc21fc2dpZGVmcy5wYXRjaDtwYXRjaGRpcj1zcmMvdGhpcmRfcGFydHkvbHNzIFwKLSAgICAgICAgICAgZmlsZTovL2RvbnQtY2xvYmJlci1yc3AucGF0Y2g7cGF0Y2hkaXI9c3JjL3RoaXJkX3BhcnR5L2xzcztzdHJpcGxldmVsPTQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eby1ub3QtYWRkLXN0YWNrLXBvaW50ZXItdG8tY2xvYmJlci1saXN0LnBhdGNoO3BhdGNoZGlyPXNyYy90aGlyZF9wYXJ0eS9sc3MgXAogIgogUyA9ICIke1dPUktESVJ9L2dpdCIKIApAQCAtMTIxLDMgKzEyMSw1IEBACiAjfCBtYWtlOiAqKiogW3NyYy9jbGllbnQvbGludXgvaGFuZGxlci9leGNlcHRpb25faGFuZGxlci5vXSBFcnJvciAxCiBBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY1ID0gImFybSIKIEFSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorCitUT09MQ0hBSU4gPSAiZ2NjIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2Nsb2MvY2xvY18xLjg0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2Nsb2MvY2xvY18xLjg0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZWNkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvY2xvYy9jbG9jXzEuODQuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJDb3VudCBibGFuayBsaW5lcywgY29tbWVudCBsaW5lcywgYW5kIHBoeXNpY2FsIGxpbmVzIG9mIHNvdXJjZSBjb2RlIFwKK2luIG1hbnkgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiIKK0FVVEhPUiA9ICJBbCBEYW5pYWwiCisKK0xJQ0VOU0U9IkdQTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yYzFjMDBmOWQzZWQ5ZTI0ZmE2OWI5MzJiN2U3YWZmMiIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vQWxEYW5pYWwvY2xvYy9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiYTUyZjM4NDM4MjUzNzdjZmE0ZTRiM2IzMGE1NjdhYjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzNmMGE2YmQyMzE5MTEwNDE4Y2NiM2U1NWE3YTFiNmQwZWRmZDc1MjhiZmQyYWU1ZDUzMDkzOGFiZTkwZjI1NCIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLUQgLW0gMDc1NSAke1N9L2Nsb2MgJHtEfSR7YmluZGlyfS9jbG9jCit9CisKK1JERVBFTkRTXyR7UE59ID0gInBlcmwgcGVybC1tb2R1bGVzIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2NzY29wZS9jc2NvcGVfMTUuOGIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvY3Njb3BlL2NzY29wZV8xNS45LmJiCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9jc2NvcGUvY3Njb3BlXzE1LjhiLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvY3Njb3BlL2NzY29wZV8xNS45LmJiCmluZGV4IDE5OWMzMWUuLjk5ZjNiYTggMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9jc2NvcGUvY3Njb3BlXzE1LjhiLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9jc2NvcGUvY3Njb3BlXzE1LjkuYmIKQEAgLTE4LDcgKzE4LDcgQEAKIAogREVQRU5EUyArPSAibmN1cnNlcyIKIAotU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L2NzY29wZS9jc2NvcGUvJHtQVn0vJHtCUH0udGFyLmd6IgorU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L2NzY29wZS9jc2NvcGUvdiR7UFZ9LyR7QlB9LnRhci5neiIKIAotU1JDX1VSSVttZDVzdW1dID0gIjhmOTQwOWEyMzhlZTMxM2E5NmY5Zjg3ZmUwZjNiMTc2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4ODlkMDkxZjA1YWEwODQ1Mzg0YjFlNDk2NWFhMzFkMmIyMDkxMWZiMmMwMDFiMmNkY2ZmYmNiNzIxMmQzYWYiCitTUkNfVVJJW21kNXN1bV0gPSAiMTZmM2NjZTA3OGI2YzBlNDIyOTlkZWY0MDI4ZWVhNmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzU1MDVhZTA3NWE4NzFhOWNkOGQ5ODAxODU5YjBmZjFjMDk3ODIwNzVkZjI4MWM3MmMyM2U3MjExNWQ5ZjE1OSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9kb3h5Z2VuL2RveHlnZW5fMS44LjE2LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2RveHlnZW4vZG94eWdlbl8xLjguMTcuYmIKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2RveHlnZW4vZG94eWdlbl8xLjguMTYuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9kb3h5Z2VuL2RveHlnZW5fMS44LjE3LmJiCmluZGV4IDRkZjk5NGMuLjdhNGVlZTMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9kb3h5Z2VuL2RveHlnZW5fMS44LjE2LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9kb3h5Z2VuL2RveHlnZW5fMS44LjE3LmJiCkBAIC05LDkgKzksOSBAQAogU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnNyYy50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC1kb24tdC1sb29rLWZvci1JY29udi5wYXRjaCBcCiAiCi1TUkNfVVJJW21kNXN1bV0gPSAiM2VjNWY4YmZkYTM4YTA1ODQ1MTYxZmJiZDVkOGI0MzkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmY5ODFmYjZmNWRiNGFmOWRlYjFkZDBjMGQ5MzI1ZTBmOWJhODA3ZDE3YmQ1NzUwNjM2NTk1Y2YxNmRhM2M4MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3OTk3YTE1YzczYThiZDZkMDAzZWFiYTVjMmVlMmI0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyY2JhOTg4YWYyZDQ5NTU0MWNiYmU1NTQxYjNiZWUwZWUxMTE0NGRjYjIzYTgxZWFkYTE5ZjU1MDFmZDhiNTk5IgogCiBpbmhlcml0IGNtYWtlIHB5dGhvbjNuYXRpdmUKIAotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvZmxhdGJ1ZmZlcnMvZmxhdGJ1ZmZlcnNfMS4xMS4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2ZsYXRidWZmZXJzL2ZsYXRidWZmZXJzXzEuMTEuMC5iYgppbmRleCBiZDZkY2VmLi41Mjk0NDFkIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvZmxhdGJ1ZmZlcnMvZmxhdGJ1ZmZlcnNfMS4xMS4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9mbGF0YnVmZmVycy9mbGF0YnVmZmVyc18xLjExLjAuYmIKQEAgLTE3LDggKzE3LDggQEAKICAgICAgICAgICAiCiAKICMgTWFrZSBzdXJlIEMrKzExIGlzIHVzZWQsIHJlcXVpcmVkIGZvciBleGFtcGxlIGZvciBHQ0MgNC45Ci1DWFhGTEFHUyArPSAiLXN0ZD1jKysxMSIKLUJVSUxEX0NYWEZMQUdTICs9ICItc3RkPWMrKzExIgorQ1hYRkxBR1MgKz0gIi1zdGQ9YysrMTEgLWZQSUMiCitCVUlMRF9DWFhGTEFHUyArPSAiLXN0ZD1jKysxMSAtZlBJQyIKIAogIyBCVUlMRF9UWVBFPVJlbGVhc2UgaXMgcmVxdWlyZWQsIG90aGVyd2lzZSBmbGF0YyBpcyBub3QgaW5zdGFsbGVkCiBFWFRSQV9PRUNNQUtFICs9ICJcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvZ2VhbnkvZ2VhbnktcGx1Z2luc18xLjM2LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2dlYW55L2dlYW55LXBsdWdpbnNfMS4zNi5iYgppbmRleCBjNDNkMjNiLi5hNmEwYjE3IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvZ2VhbnkvZ2VhbnktcGx1Z2luc18xLjM2LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9nZWFueS9nZWFueS1wbHVnaW5zXzEuMzYuYmIKQEAgLTE2LDcgKzE2LDcgQEAKICAgICBnZWFueSBcCiAgICAgbGlieG1sMiBcCiAgICAgbGlic291cC0yLjQgXAotICAgIGVuY2hhbnQgXAorICAgIGVuY2hhbnQyIFwKICAgICBpbnRsdG9vbC1uYXRpdmUgXAogICAgIGxpYmFzc3VhbiBcCiAgICAgZ3BnbWUgXApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2dlYW55L2dlYW55XzEuMzYuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvZ2VhbnkvZ2VhbnlfMS4zNi5iYgppbmRleCAwZDI5YjEzLi4xN2UxNmJmIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvZ2VhbnkvZ2VhbnlfMS4zNi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvZ2VhbnkvZ2VhbnlfMS4zNi5iYgpAQCAtNSw3ICs1LDcgQEAKIAogREVQRU5EUyA9ICJndGsrMyBsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIHB5dGhvbjMtZG9jdXRpbHMtbmF0aXZlIGludGx0b29sLW5hdGl2ZSIKIAotaW5oZXJpdCBmZWF0dXJlc19jaGVjayBhdXRvdG9vbHMgcGtnY29uZmlnIHBlcmxuYXRpdmUgcHl0aG9ubmF0aXZlIGdldHRleHQKK2luaGVyaXQgZmVhdHVyZXNfY2hlY2sgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBwZXJsbmF0aXZlIGdldHRleHQKIAogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2pzb25jcHAvanNvbmNwcF8xLjguNC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9qc29uY3BwL2pzb25jcHBfMS45LjIuYmIKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2pzb25jcHAvanNvbmNwcF8xLjguNC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2pzb25jcHAvanNvbmNwcF8xLjkuMi5iYgppbmRleCA5N2ZjNmM3Li5hODg0MTBmIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvanNvbmNwcC9qc29uY3BwXzEuOC40LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9qc29uY3BwL2pzb25jcHBfMS45LjIuYmIKQEAgLTExLDcgKzExLDcgQEAKIExJQ0VOU0UgPSAiTUlUIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZmEyYTIzZGQxZGM2YzEzOWYzNTEwNTM3OWQ3NmRmMmIiCiAKLVNSQ1JFViA9ICJkZGFiZjUwZjcyY2YzNjliZjY1MmE5NWM0ZDlmZTMxYTE4NjVhNzgxIgorU1JDUkVWID0gImQyZTZhOTcxZjQ1NDRjNTViOGUzYjI1Y2Y5NmRiMjY2OTcxYjc3OGYiCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vb3Blbi1zb3VyY2UtcGFyc2Vycy9qc29uY3BwIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2xkbnMvbGRuc18xLjcuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sZG5zL2xkbnNfMS43LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1MmRkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sZG5zL2xkbnNfMS43LjEuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJMRE5TIGlzIGEgRE5TIGxpYnJhcnkgdGhhdCBmYWNpbGl0YXRlcyBETlMgdG9vbCBwcm9ncmFtbWluZyIKK0hPTUVQQUdFID0gImh0dHBzOi8vbmxuZXRsYWJzLm5sL2xkbnMiCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTM0MzMwZjE1YjJiNGFiYmJhYWE3NjIzZjc5YTZhMDE5IgorCitTUkNfVVJJID0gImh0dHBzOi8vd3d3Lm5sbmV0bGFicy5ubC9kb3dubG9hZHMvbGRucy9sZG5zLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNjYyNjJhNDY5OTVkOTk3MmFiYTQxN2ZkMDkxYWNkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YWM4NGMxNmJkY2E2MGU3MTBlZWE3NTc4MjM1NmYzYWMzYjU1NjgwZDQwZTE1MzBkN2NlYTQ3NGFjMjA4MjI5IgorCitERVBFTkRTID0gIm9wZW5zc2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tkcmlsbF0gPSAiLS13aXRoLWRyaWxsLC0td2l0aG91dC1kcmlsbCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zc2w9JHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9IFwKKyAgICAgICAgICAgICAgICBsaWJ0b29sPSR7VEFSR0VUX1BSRUZJWH1saWJ0b29sIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2xpYnVib3gvbGlidWJveC8wMDAxLWJsb2Jtc2ctZml4LWFycmF5LW91dC1vZi1ib3VuZHMtR0NDLTEwLXdhcm5pbmcucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbGlidWJveC9saWJ1Ym94LzAwMDEtYmxvYm1zZy1maXgtYXJyYXktb3V0LW9mLWJvdW5kcy1HQ0MtMTAtd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjFkZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2xpYnVib3gvbGlidWJveC8wMDAxLWJsb2Jtc2ctZml4LWFycmF5LW91dC1vZi1ib3VuZHMtR0NDLTEwLXdhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBhMTIzMjVhMGNiZjNiZjFkNjZhMGIwZjhkODVlMDgwODNiYWU2MDY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1BldHI9MjA9QzU9QTB0ZXRpYXI/PSA8eW5lenpAdHJ1ZS5jej4KK0RhdGU6IFdlZCwgMjUgRGVjIDIwMTkgMTA6Mjc6NTkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYmxvYm1zZzogZml4IGFycmF5IG91dCBvZiBib3VuZHMgR0NDIDEwIHdhcm5pbmcKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRml4ZXMgZm9sbG93aW5nIHdhcm5pbmcgcmVwb3J0ZWQgYnkgR0NDIDEwLjAuMCAyMDE5MTIwMzoKKworIGJsb2Jtc2cuYzoyMzQ6MjogZXJyb3I6ICdzdHJjcHknIG9mZnNldCA2IGZyb20gdGhlIG9iamVjdCBhdCAnYXR0cicgaXMgb3V0IG9mIHRoZSBib3VuZHMgb2YgcmVmZXJlbmNlZCBzdWJvYmplY3QgJ25hbWUnIHdpdGggdHlwZSAndWludDhfdFswXScge2FrYSAndW5zaWduZWQgY2hhclswXSd9IGF0IG9mZnNldCA2IFstV2Vycm9yPWFycmF5LWJvdW5kc10KKyAgIDIzNCB8ICBzdHJjcHkoKGNoYXIgKikgaGRyLT5uYW1lLCAoY29uc3QgY2hhciAqKW5hbWUpOworICAgICAgIHwgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBibG9ibXNnLmM6MTY6CisgYmxvYm1zZy5oOjQyOjEwOiBub3RlOiBzdWJvYmplY3QgJ25hbWUnIGRlY2xhcmVkIGhlcmUKKyAgICA0MiB8ICB1aW50OF90IG5hbWVbXTsKKyAgICAgICB8ICAgICAgICAgIF5+fn4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0bGFiLmNvbS95bmV6ei9vcGVud3J0LWxpYnVib3gvY29tbWl0LzM3NzViM2FhMjhkZThjMjBkOTZiNmYwMjc4NmEzMjc0MjNiMDc0OGFdCitSZXBvcnRlZC1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFBldHIgxaB0ZXRpYXIgPHluZXp6QHRydWUuY3o+CistLS0KKyBibG9ibXNnLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ibG9ibXNnLmMgYi9ibG9ibXNnLmMKK2luZGV4IGE4NjA0ODMuLmI2Yjc1MzUgMTAwNjQ0CistLS0gYS9ibG9ibXNnLmMKKysrKyBiL2Jsb2Jtc2cuYworQEAgLTE5NSw3ICsxOTUsNyBAQCBibG9ibXNnX25ldyhzdHJ1Y3QgYmxvYl9idWYgKmJ1ZiwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBwYXlsb2FkX2xlbiwgdgorIAlhdHRyLT5pZF9sZW4gfD0gYmUzMl90b19jcHUoQkxPQl9BVFRSX0VYVEVOREVEKTsKKyAJaGRyID0gYmxvYl9kYXRhKGF0dHIpOworIAloZHItPm5hbWVsZW4gPSBjcHVfdG9fYmUxNihuYW1lbGVuKTsKKy0Jc3RyY3B5KChjaGFyICopIGhkci0+bmFtZSwgKGNvbnN0IGNoYXIgKiluYW1lKTsKKysJbWVtY3B5KGhkci0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CisgCXBhZF9lbmQgPSAqZGF0YSA9IGJsb2Jtc2dfZGF0YShhdHRyKTsKKyAJcGFkX3N0YXJ0ID0gKGNoYXIgKikgJmhkci0+bmFtZVtuYW1lbGVuXTsKKyAJaWYgKHBhZF9zdGFydCA8IHBhZF9lbmQpCistLSAKKzIuMjQuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbGlidWJveC9saWJ1Ym94X2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9saWJ1Ym94L2xpYnVib3hfZ2l0LmJiCmluZGV4IGY5ZjRlMDguLjdkYmVmYTEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9saWJ1Ym94L2xpYnVib3hfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9saWJ1Ym94L2xpYnVib3hfZ2l0LmJiCkBAIC0xNiw5ICsxNiwxMCBAQAogICAgIGdpdDovL2dpdC5vcGVud3J0Lm9yZy9wcm9qZWN0L2xpYnVib3guZ2l0IFwKICAgICBmaWxlOi8vMDAwMS12ZXJzaW9uLWxpYnJhcmllcy5wYXRjaCBcCiAgICAgZmlsZTovL2ZpeC1saWJkaXIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWJsb2Jtc2ctZml4LWFycmF5LW91dC1vZi1ib3VuZHMtR0NDLTEwLXdhcm5pbmcucGF0Y2ggXAogIgogCi1TUkNSRVYgPSAiMTU1YmYzOTg5NmYxMjZiMWJhMTIxYjgxNjkyMmE4OGRjMzRjMzFlMyIKK1NSQ1JFViA9ICIwNzQxM2NjZTcyZTE5NTIwYWY1NWRmY2JjNzY1NDg0ZjVhYjQxZGQ5IgogUFYgPSAiMS4wLjErZ2l0JHtTUkNQVn0iCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbG9nNGNwbHVzL2xvZzRjcGx1cy8wMDAxLVJlbW92ZS1sb2c0Y3BsdXMtdmVyc2lvbi1lbnRyeS1mcm9tLUVMRi0uY29tbWVudC1zZWMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbG9nNGNwbHVzL2xvZzRjcGx1cy8wMDAxLVJlbW92ZS1sb2c0Y3BsdXMtdmVyc2lvbi1lbnRyeS1mcm9tLUVMRi0uY29tbWVudC1zZWMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YTgzNWMuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2xvZzRjcGx1cy9sb2c0Y3BsdXMvMDAwMS1SZW1vdmUtbG9nNGNwbHVzLXZlcnNpb24tZW50cnktZnJvbS1FTEYtLmNvbW1lbnQtc2VjLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotRnJvbSBkYTUzMzhlNjhmMTQ2ZWZhZGFiN2MyMjEyOTFiYTRjOTQ5ZDhmMTJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogVmFjbGF2IEhhaXNtYW4gPHZoYWlzbWFuQGdtYWlsLmNvbT4KLURhdGU6IFN1biwgMjEgSnVsIDIwMTkgMjM6MjM6MTYgLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gUmVtb3ZlIGxvZzRjcGx1cyB2ZXJzaW9uIGVudHJ5IGZyb20gRUxGIC5jb21tZW50IHNlY3Rpb24KLQotUmV2ZXJ0cwotaHR0cHM6Ly9naXRodWIuY29tL2xvZzRjcGx1cy9sb2c0Y3BsdXMvY29tbWl0LzljYjBkNGFkZTYxOWRhNGU0MDYyOGM5Yjk1ZmY1MWRlM2RmMjlmMWIKLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9naXRodWIuY29tL2xvZzRjcGx1cy9sb2c0Y3BsdXMvY29tbWl0LzdlNmFkZGM3MGRmZmQyZTMwZTkwMmVmZDE4ZWI4NDVjNWQ1ZGQ3YmJdCi0KLVN1Z2dlc3RlZC1ieTogQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIHNyYy92ZXJzaW9uLmN4eCB8IDEyIC0tLS0tLS0tLS0tLQotIDEgZmlsZSBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3NyYy92ZXJzaW9uLmN4eCBiL3NyYy92ZXJzaW9uLmN4eAotaW5kZXggY2UxODIxMi4uZTAwMmRlOSAxMDA2NDQKLS0tLSBhL3NyYy92ZXJzaW9uLmN4eAotKysrIGIvc3JjL3ZlcnNpb24uY3h4Ci1AQCAtMzQsMTYgKzM0LDQgQEAgbmFtZXNwYWNlIGxvZzRjcGx1cwotIHVuc2lnbmVkIGNvbnN0IHZlcnNpb24gPSBMT0c0Q1BMVVNfVkVSU0lPTjsKLSBjaGFyIGNvbnN0IHZlcnNpb25TdHJbXSA9IExPRzRDUExVU19WRVJTSU9OX1NUUiBMT0c0Q1BMVVNfVkVSU0lPTl9TVFJfU1VGRklYOwotIAotLW5hbWVzcGFjZQotLXsKLS0KLS0jaWYgZGVmaW5lZCAoX19FTEZfXykgJiYgKGRlZmluZWQgKF9fR05VQ19fKSB8fCBkZWZpbmVkIChfX2NsYW5nX18pKQotLWNoYXIgY29uc3QgdmVyc2lvblN0ckNvbW1lbnRbXQotLSAgICBfX2F0dHJpYnV0ZV9fICgoX191c2VkX18sIF9fc2VjdGlvbl9fICgoIi5jb21tZW50IikpKSkKLS0gICAgPSAibG9nNGNwbHVzICIgTE9HNENQTFVTX1ZFUlNJT05fU1RSIExPRzRDUExVU19WRVJTSU9OX1NUUl9TVUZGSVg7Ci0tI2VuZGlmCi0tCi0tCi0tfSAvLyBuYW1lc3BhY2UKLS0KLSB9IC8vIG5hbWVzcGFjZSBsb2c0Y3BsdXMKLS0tIAotMi4yMi4wCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sb2c0Y3BsdXMvbG9nNGNwbHVzXzIuMC40LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2xvZzRjcGx1cy9sb2c0Y3BsdXNfMi4wLjUuYmIKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2xvZzRjcGx1cy9sb2c0Y3BsdXNfMi4wLjQuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sb2c0Y3BsdXMvbG9nNGNwbHVzXzIuMC41LmJiCmluZGV4IDU2NmRlMjguLjk2N2FjNzYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sb2c0Y3BsdXMvbG9nNGNwbHVzXzIuMC40LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sb2c0Y3BsdXMvbG9nNGNwbHVzXzIuMC41LmJiCkBAIC03LDEwICs3LDkgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTQxZThlMDYwYzI2ODIyODg2YjU5MmFiNDc2NWM3NTZiIgogCiBTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0LyR7QlBOfS8ke0JQTn0tc3RhYmxlLyR7UFZ9LyR7QlB9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZS1sb2c0Y3BsdXMtdmVyc2lvbi1lbnRyeS1mcm9tLUVMRi0uY29tbWVudC1zZWMucGF0Y2ggXAogICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICIyYjViN2JjMjk0Njk4YmYzMGEzMTVhMjU5ZWY5ZWVjMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIxOTZlZWRiYzdmMmRkNzkyZGFlNzIxYjExNTljN2FjMTMyMjU1YmIzNjgyMjYzNTNjMjRkNGQ1ZmE3Yzc3OTdhIgorU1JDX1VSSVttZDVzdW1dID0gIjcxZGQ5NTZiZjY4NjE5NTEyNzU1OTY3MWYxNDI2Y2ZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMwNzExNWMyMzIxOTM5MDYzMzc5OGRlZjMwYjdiNTFhMGY3OWZkZWI4NTdlNGI0OTYzMmYxNzc0NmQwY2ViOTciCiAKIFVQU1RSRUFNX0NIRUNLX1VSSSA9ICJodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9sb2c0Y3BsdXMvZmlsZXMvbG9nNGNwbHVzLXN0YWJsZS8iCiBVUFNUUkVBTV9DSEVDS19SRUdFWCA9ICJsb2c0Y3BsdXMtc3RhYmxlLyg/UDxwdmVyPlxkKyhcLlxkKykrKS8iCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRyYWNlL2x0cmFjZS8wMDAxLWVuc3VyZS10aGUtc3RydWN0LXBvaW50ZXJzLWFyZS1udWxsLWluaXRpbGl6ZWQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRyYWNlL2x0cmFjZS8wMDAxLWVuc3VyZS10aGUtc3RydWN0LXBvaW50ZXJzLWFyZS1udWxsLWluaXRpbGl6ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlZjQxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sdHJhY2UvbHRyYWNlLzAwMDEtZW5zdXJlLXRoZS1zdHJ1Y3QtcG9pbnRlcnMtYXJlLW51bGwtaW5pdGlsaXplZC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDY3YThmYTQ3OGE0NDg0YmM0ZGJmYjNhYzc0ZTExYmUxZGQ1YWY1OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxOSAxOTozNTo0OCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBlbnN1cmUgdGhlIHN0cnVjdCBwb2ludGVycyBhcmUgbnVsbCBpbml0aWxpemVkCisKK0RvIG5vdCBkZWxldGUgaWYgcG9pbnRlciBpcyBhbHJlYWR5IG51bGwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBleHByLmMgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4cHIuYyBiL2V4cHIuYworaW5kZXggNDA1OWEzMi4uNWZmZDBhZCAxMDA2NDQKKy0tLSBhL2V4cHIuYworKysrIGIvZXhwci5jCitAQCAtMTg5LDEwICsxODksOCBAQCBpbnQKKyBleHByX2Nsb25lKHN0cnVjdCBleHByX25vZGUgKnJldHAsIGNvbnN0IHN0cnVjdCBleHByX25vZGUgKm5vZGUpCisgeworIAkqcmV0cCA9ICpub2RlOworLQorKwlzdHJ1Y3QgZXhwcl9ub2RlICpubGhzID0gMCwgKm5yaHMgPSAwOworIAlzd2l0Y2ggKG5vZGUtPmtpbmQpIHsKKy0JCXN0cnVjdCBleHByX25vZGUgKm5saHM7CistCQlzdHJ1Y3QgZXhwcl9ub2RlICpucmhzOworIAorIAljYXNlIEVYUFJfT1BfQVJHTk86CisgCWNhc2UgRVhQUl9PUF9TRUxGOgorQEAgLTIzNiw4ICsyMzQsMTAgQEAgZXhwcl9jbG9uZShzdHJ1Y3QgZXhwcl9ub2RlICpyZXRwLCBjb25zdCBzdHJ1Y3QgZXhwcl9ub2RlICpub2RlKQorIAkJaWYgKGV4cHJfYWxsb2NfYW5kX2Nsb25lKCZubGhzLCBub2RlLT5saHMsIG5vZGUtPm93bl9saHMpIDwgMCkgeworIAkJCWlmIChub2RlLT5raW5kID09IEVYUFJfT1BfQ0FMTDIKKyAJCQkgICAgJiYgbm9kZS0+dS5jYWxsLm93bl9yaHMpIHsKKy0JCQkJZXhwcl9kZXN0cm95KG5yaHMpOworLQkJCQlmcmVlKG5yaHMpOworKwkJCQlpZiAobnJocykgeworKwkJCQkJZXhwcl9kZXN0cm95KG5yaHMpOworKwkJCQkJZnJlZShucmhzKTsKKysJCQkJfQorIAkJCQlyZXR1cm4gLTE7CisgCQkJfQorIAkJfQorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x0cmFjZS9sdHJhY2UvMDAwMS1ob29rLURvLW5vdC1hcHBlbmQtaW50LXRvLXN0ZC1zdHJpbmcucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRyYWNlL2x0cmFjZS8wMDAxLWhvb2stRG8tbm90LWFwcGVuZC1pbnQtdG8tc3RkLXN0cmluZy5wYXRjaAppbmRleCA4ZjFjNGI5Li4yODkwMzczIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRyYWNlL2x0cmFjZS8wMDAxLWhvb2stRG8tbm90LWFwcGVuZC1pbnQtdG8tc3RkLXN0cmluZy5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRyYWNlL2x0cmFjZS8wMDAxLWhvb2stRG8tbm90LWFwcGVuZC1pbnQtdG8tc3RkLXN0cmluZy5wYXRjaApAQCAtMjMsNyArMjMsNyBAQAogIAlpZiAoc3lzY29uZmRpciAhPSBOVUxMICYmICpzeXNjb25mZGlyICE9ICdcMCcpIHsKICAJCS8qIE5vICsxLCB3ZSBza2lwIHRoZSBpbml0aWFsIHBlcmlvZC4gICovCiAtCQlzeXNwYXRoID0gbWFsbG9jKHN0cmxlbihzeXNjb25mZGlyKSArIHNpemVvZiBGTik7Ci0rCQlzeXNwYXRoID0gbWFsbG9jKHN0cmxlbihzeXNjb25mZGlyKSArIHNpemVvZiBGTiArIDEpOworKwkJc3lzcGF0aCA9IG1hbGxvYyhzdHJsZW4oc3lzY29uZmRpcikgKyBzaXplb2YgRk4gKyAyKTsKICsJCXN5c3BhdGhbc3RybGVuKHN5c2NvbmZkaXIpICsgc2l6ZW9mIEZOICsgMV0gPSAnXDAnOwogIAkJaWYgKHN5c3BhdGggPT0gTlVMTAogLQkJICAgIHx8IHNwcmludGYoc3lzcGF0aCwgIiVzLyVzIiwgc3lzY29uZmRpciwgRk4gKyAxKSA8IDApCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRyYWNlL2x0cmFjZV9naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRyYWNlL2x0cmFjZV9naXQuYmIKaW5kZXggYmIyMWNiYy4uNmI2NmMyNSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x0cmFjZS9sdHJhY2VfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sdHJhY2UvbHRyYWNlX2dpdC5iYgpAQCAtMjgsNiArMjgsNyBAQAogICAgICAgICAgICBmaWxlOi8vMDAwMS1ob29rLURvLW5vdC1hcHBlbmQtaW50LXRvLXN0ZC1zdHJpbmcucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vaW5jbHVkZV91bmlzdGRfbnIucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1CdWctZml4LWZvci1kYXRhLXR5cGUtbGVuZ3RoLWp1ZGdtZW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZW5zdXJlLXRoZS1zdHJ1Y3QtcG9pbnRlcnMtYXJlLW51bGwtaW5pdGlsaXplZC5wYXRjaCBcCiAgICAgICAgICAgICIKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sdWFqaXQvbHVhaml0XzIuMC41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x1YWppdC9sdWFqaXRfMi4wLjUuYmIKaW5kZXggYzJkMjE4MC4uMDhhMDQ3MCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x1YWppdC9sdWFqaXRfMi4wLjUuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x1YWppdC9sdWFqaXRfMi4wLjUuYmIKQEAgLTkwLDcgKzkwLDkgQEAKICIKIEZJTEVTX2x1YWppdC1jb21tb24gPSAiJHtkYXRhZGlyfS8ke0JQTn0tJHtQVn0iCiAKLSMgQWFyY2g2NC9taXBzNjQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHJlbGVhc2UKKyMgQWFyY2g2NC9taXBzNjQvcHBjL3BwYzY0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyByZWxlYXNlCiBDT01QQVRJQkxFX0hPU1RfYWFyY2g2NCA9ICJudWxsIgogQ09NUEFUSUJMRV9IT1NUX21pcHNhcmNobjMyID0gIm51bGwiCiBDT01QQVRJQkxFX0hPU1RfbWlwc2FyY2huNjQgPSAibnVsbCIKK0NPTVBBVElCTEVfSE9TVF9wb3dlcnBjID0gIm51bGwiCitDT01QQVRJQkxFX0hPU1RfcG93ZXJwYzY0ID0gIm51bGwiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbWVyY3VyaWFsL21lcmN1cmlhbF81LjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbWVyY3VyaWFsL21lcmN1cmlhbF81LjIuYmIKaW5kZXggMGZlYzRkMS4uNmRlZGIwMiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL21lcmN1cmlhbC9tZXJjdXJpYWxfNS4yLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9tZXJjdXJpYWwvbWVyY3VyaWFsXzUuMi5iYgpAQCAtMzAsNiArMzAsOSBAQAogICAgIG9lX3J1bm1ha2UgLWUgaW5zdGFsbC1iaW4gREVTVERJUj0ke0R9IFBSRUZJWD0ke3ByZWZpeH0KICAgICBzZWQgLWkgLWUgJ3M6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjM6JHtVU1JCSU5QQVRIfS9lbnYgcHl0aG9uMzpnJyAke0R9JHtiaW5kaXJ9L2hnCiB9CitQQUNLQUdFUyA9KyAiJHtQTn0tcHl0aG9uIgogCiBGSUxFU18ke1BOfSArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCiAKK0ZJTEVTXyR7UE59LXB5dGhvbiA9ICIke25vbmFyY2hfbGliZGlyfS8ke1BZVEhPTl9ESVJ9IgorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbXNncGFjay9tc2dwYWNrLWNfMy4xLjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbXNncGFjay9tc2dwYWNrLWNfMy4yLjEuYmIKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL21zZ3BhY2svbXNncGFjay1jXzMuMS4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbXNncGFjay9tc2dwYWNrLWNfMy4yLjEuYmIKaW5kZXggOTBmZDQ0ZS4uZDQxMGRjNiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL21zZ3BhY2svbXNncGFjay1jXzMuMS4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9tc2dwYWNrL21zZ3BhY2stY18zLjIuMS5iYgpAQCAtMTEsOCArMTEsOCBAQAogCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vbXNncGFjay9tc2dwYWNrLWMgXAogICAgICAgICAgICAiCi0jIGNwcC0zLjEuMQotU1JDUkVWID0gIjgzYTgyZTNlYjUxMmIxOGQ0MTQ5Y2FiYjdlYjQzYzdlOGJjMDgxYWYiCisjIGNwcC0zLjIuMQorU1JDUkVWID0gIjgwODVhYjg3MjEwOTBhNDQ3Y2Y5OGJiODAyZDE0MDZhZDdhZmU0MjAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9uYW5vcGIvbmFub3BiXzAuNC4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL25hbm9wYi9uYW5vcGJfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkZDUzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9uYW5vcGIvbmFub3BiXzAuNC4wLmJiCkBAIC0wLDAgKzEsMjggQEAKK0RFU0NSSVBUSU9OPSJQcm90b2NvbCBCdWZmZXJzIHdpdGggc21hbGwgY29kZSBzaXplIgorTElDRU5TRT0iWmxpYiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT05ZGI0YjczYTU1YTM5OTQzODQxMTJlZmNkYjM3YzAxZiIKKworREVQRU5EUyA9ICJwcm90b2J1Zi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9uYW5vcGIvbmFub3BiLmdpdCIKK1NSQ1JFViA9ICI3MGYwZGU5ODc3YjFjZTEyYWJjMDIyOWQ1ZGY4NGRiNjM0OWZjYmZjIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGNtYWtlIHB5dGhvbm5hdGl2ZQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1EbSAwNzU1ICR7U30vZ2VuZXJhdG9yL25hbm9wYl9nZW5lcmF0b3IucHkgJHtEfSR7YmluZGlyfS9uYW5vcGJfZ2VuZXJhdG9yLnB5CisgICAgaW5zdGFsbCAtRG0gMDc1NSAke1N9L2dlbmVyYXRvci9wcm90b2MtZ2VuLW5hbm9wYiAke0R9JHtiaW5kaXJ9L3Byb3RvYy1nZW4tbmFub3BiCisgICAgaW5zdGFsbCAtRG0gMDc1NSAke1N9L2dlbmVyYXRvci9wcm90by9fX2luaXRfXy5weSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vcHJvdG8vX19pbml0X18ucHkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vY21ha2UvJHtCUE59IgorCitSREVQRU5EU18ke1BOfSArPSAiXAorICAgJHtQWVRIT05fUE59LXByb3RvYnVmIFwKKyAgIHByb3RvYnVmLWNvbXBpbGVyIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL25sb2htYW5uLWpzb24vbmxvaG1hbm4tanNvbl9naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbmxvaG1hbm4tanNvbi9ubG9obWFubi1qc29uXzMuNy4zLmJiCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9ubG9obWFubi1qc29uL25sb2htYW5uLWpzb25fZ2l0LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbmxvaG1hbm4tanNvbi9ubG9obWFubi1qc29uXzMuNy4zLmJiCmluZGV4IDQzOTllZGEuLjg2ZmU2NzMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9ubG9obWFubi1qc29uL25sb2htYW5uLWpzb25fZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9ubG9obWFubi1qc29uL25sb2htYW5uLWpzb25fMy43LjMuYmIKQEAgLTQsMTEgKzQsOSBAQAogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLk1JVDttZDU9ZjVmN2M3MTUwNGRhMDcwYmNmNGYwOTAyMDVjZTEwODAiCiAKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uLmdpdCIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uLmdpdDtub2JyYW5jaD0xIgogCi1QViA9ICIzLjcuMCtnaXQke1NSQ1BWfSIKLQotU1JDUkVWID0gImVhNjBkNDBmNGE2MGE0N2QzYmU5NTYwZDhmN2JjMzdjMTYzZmU0N2IiCitTUkNSRVYgPSAiZTdiM2I0MGI1YTk1YmM3NGI5YTdmNjYyODMwYTI3YzQ5ZmZjMDFiNCIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL25vZGVqcy9ub2RlanMvMDAwMy1JbnN0YWxsLWJvdGgtYmluYXJpZXMtYW5kLXVzZS1saWJkaXIucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbm9kZWpzL25vZGVqcy8wMDAzLUluc3RhbGwtYm90aC1iaW5hcmllcy1hbmQtdXNlLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWE3MGZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL25vZGVqcy9ub2RlanMvMDAwMy1JbnN0YWxsLWJvdGgtYmluYXJpZXMtYW5kLXVzZS1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSA1YmZlZmZkZjRiNWRlMWM2MGEyZmYwZDFkZGY2NWRiMmJiOWExNTMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRWxsaW90dCBTYWxlcyBkZSBBbmRyYWRlIDxxdWFudHVtLmFuYWx5c3RAZ21haWwuY29tPgorRGF0ZTogVHVlLCAxOSBNYXIgMjAxOSAyMzoyMjo0MCAtMDQwMAorU3ViamVjdDogW1BBVENIIDMvM10gSW5zdGFsbCBib3RoIGJpbmFyaWVzIGFuZCB1c2UgbGliZGlyLgorCitUaGlzIGFsbG93cyB1cyB0byBidWlsZCB3aXRoIGEgc2hhcmVkIGxpYnJhcnkgZm9yIG90aGVyIHVzZXJzIHdoaWxlCitzdGlsbCBwcm92aWRpbmcgdGhlIG5vcm1hbCBleGVjdXRhYmxlLgorCitTaWduZWQtb2ZmLWJ5OiBFbGxpb3R0IFNhbGVzIGRlIEFuZHJhZGUgPHF1YW50dW0uYW5hbHlzdEBnbWFpbC5jb20+CisKK1N0b2xlbiBmcm9tIFsxXQorCitbMV0gaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9ub2RlanMvcmF3L21hc3Rlci9mLzAwMDMtSW5zdGFsbC1ib3RoLWJpbmFyaWVzLWFuZC11c2UtbGliZGlyLnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ21haWwuY29tPgorCistLS0KKyBjb25maWd1cmUucHkgICAgIHwgIDcgKysrKysrKworIHRvb2xzL2luc3RhbGwucHkgfCAzMSArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5weSBiL2NvbmZpZ3VyZS5weQoraW5kZXggY2ZkNDIwNy4uZWIyNmY3ZCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZS5weQorKysrIGIvY29uZmlndXJlLnB5CitAQCAtNTUyLDYgKzU1MiwxMiBAQCBwYXJzZXIuYWRkX29wdGlvbignLS1zaGFyZWQnLAorICAgICBoZWxwPSdjb21waWxlIHNoYXJlZCBsaWJyYXJ5IGZvciBlbWJlZGRpbmcgbm9kZSBpbiBhbm90aGVyIHByb2plY3QuICcgKworICAgICAgICAgICcoVGhpcyBtb2RlIGlzIG5vdCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBmb3IgcmVndWxhciBhcHBsaWNhdGlvbnMpJykKKyAKKytwYXJzZXIuYWRkX29wdGlvbignLS1saWJkaXInLAorKyAgICBhY3Rpb249J3N0b3JlJywKKysgICAgZGVzdD0nbGliZGlyJywKKysgICAgZGVmYXVsdD0nbGliJywKKysgICAgaGVscD0nYSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgaW50bycpCisrCisgcGFyc2VyLmFkZF9vcHRpb24oJy0td2l0aG91dC12OC1wbGF0Zm9ybScsCisgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgIGRlc3Q9J3dpdGhvdXRfdjhfcGxhdGZvcm0nLAorQEAgLTEwOTUsNiArMTEwMSw3IEBAIGRlZiBjb25maWd1cmVfbm9kZShvKToKKyAgIGlmIG9wdGlvbnMuY29kZV9jYWNoZV9wYXRoOgorICAgICBvWyd2YXJpYWJsZXMnXVsnbm9kZV9jb2RlX2NhY2hlX3BhdGgnXSA9IG9wdGlvbnMuY29kZV9jYWNoZV9wYXRoCisgICBvWyd2YXJpYWJsZXMnXVsnbm9kZV9zaGFyZWQnXSA9IGIob3B0aW9ucy5zaGFyZWQpCisrICBvWyd2YXJpYWJsZXMnXVsnbGliZGlyJ10gPSBvcHRpb25zLmxpYmRpcgorICAgbm9kZV9tb2R1bGVfdmVyc2lvbiA9IGdldG1vZHVsZXZlcnNpb24uZ2V0X3ZlcnNpb24oKQorIAorICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorZGlmZiAtLWdpdCBhL3Rvb2xzL2luc3RhbGwucHkgYi90b29scy9pbnN0YWxsLnB5CitpbmRleCAwMjhjMzJlLi5iZjQ0M2M0IDEwMDc1NQorLS0tIGEvdG9vbHMvaW5zdGFsbC5weQorKysrIGIvdG9vbHMvaW5zdGFsbC5weQorQEAgLTExNywyNiArMTE3LDIzIEBAIGRlZiBzdWJkaXJfZmlsZXMocGF0aCwgZGVzdCwgYWN0aW9uKToKKyAKKyBkZWYgZmlsZXMoYWN0aW9uKToKKyAgIGlzX3dpbmRvd3MgPSBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJworLSAgb3V0cHV0X2ZpbGUgPSAnbm9kZScKKyAgIG91dHB1dF9wcmVmaXggPSAnb3V0L1JlbGVhc2UvJworKyAgb3V0cHV0X2xpYnByZWZpeCA9IG91dHB1dF9wcmVmaXgKKyAKKy0gIGlmICdmYWxzZScgPT0gdmFyaWFibGVzLmdldCgnbm9kZV9zaGFyZWQnKToKKy0gICAgaWYgaXNfd2luZG93czoKKy0gICAgICBvdXRwdXRfZmlsZSArPSAnLmV4ZScKKysgIGlmIGlzX3dpbmRvd3M6CisrICAgIG91dHB1dF9iaW4gPSAnbm9kZS5leGUnCisrICAgIG91dHB1dF9saWIgPSAnbm9kZS5kbGwnCisgICBlbHNlOgorLSAgICBpZiBpc193aW5kb3dzOgorLSAgICAgIG91dHB1dF9maWxlICs9ICcuZGxsJworLSAgICBlbHNlOgorLSAgICAgIG91dHB1dF9maWxlID0gJ2xpYicgKyBvdXRwdXRfZmlsZSArICcuJyArIHZhcmlhYmxlcy5nZXQoJ3NobGliX3N1ZmZpeCcpCistICAgICAgIyBHWVAgd2lsbCBvdXRwdXQgdG8gbGliLnRhcmdldCBleGNlcHQgb24gT1MgWCwgdGhpcyBpcyBoYXJkY29kZWQKKy0gICAgICAjIGluIGl0cyBzb3VyY2UgLSBzZWUgdGhlIF9JbnN0YWxsYWJsZVRhcmdldEluc3RhbGxQYXRoIGZ1bmN0aW9uLgorLSAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKy0gICAgICAgIG91dHB1dF9wcmVmaXggKz0gJ2xpYi50YXJnZXQvJworLQorLSAgaWYgJ2ZhbHNlJyA9PSB2YXJpYWJsZXMuZ2V0KCdub2RlX3NoYXJlZCcpOgorLSAgICBhY3Rpb24oW291dHB1dF9wcmVmaXggKyBvdXRwdXRfZmlsZV0sICdiaW4vJyArIG91dHB1dF9maWxlKQorLSAgZWxzZToKKy0gICAgYWN0aW9uKFtvdXRwdXRfcHJlZml4ICsgb3V0cHV0X2ZpbGVdLCAnbGliLycgKyBvdXRwdXRfZmlsZSkKKysgICAgb3V0cHV0X2JpbiA9ICdub2RlJworKyAgICBvdXRwdXRfbGliID0gJ2xpYm5vZGUuJyArIHZhcmlhYmxlcy5nZXQoJ3NobGliX3N1ZmZpeCcpCisrICAgICMgR1lQIHdpbGwgb3V0cHV0IHRvIGxpYi50YXJnZXQgZXhjZXB0IG9uIE9TIFgsIHRoaXMgaXMgaGFyZGNvZGVkCisrICAgICMgaW4gaXRzIHNvdXJjZSAtIHNlZSB0aGUgX0luc3RhbGxhYmxlVGFyZ2V0SW5zdGFsbFBhdGggZnVuY3Rpb24uCisrICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKysgICAgICBvdXRwdXRfbGlicHJlZml4ICs9ICdsaWIudGFyZ2V0LycKKysKKysgIGFjdGlvbihbb3V0cHV0X3ByZWZpeCArIG91dHB1dF9iaW5dLCAnYmluLycgKyBvdXRwdXRfYmluKQorKyAgaWYgJ3RydWUnID09IHZhcmlhYmxlcy5nZXQoJ25vZGVfc2hhcmVkJyk6CisrICAgIGFjdGlvbihbb3V0cHV0X2xpYnByZWZpeCArIG91dHB1dF9saWJdLCB2YXJpYWJsZXMuZ2V0KCdsaWJkaXInKSArICcvJyArIG91dHB1dF9saWIpCisgCisgICBpZiAndHJ1ZScgPT0gdmFyaWFibGVzLmdldCgnbm9kZV91c2VfZHRyYWNlJyk6CisgICAgIGFjdGlvbihbJ291dC9SZWxlYXNlL25vZGUuZCddLCAnbGliL2R0cmFjZS9ub2RlLmQnKQorLS0gCisyLjIzLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL25vZGVqcy9ub2RlanNfMTAuMTcuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9ub2RlanMvbm9kZWpzXzEwLjE3LjAuYmIKaW5kZXggZTM2OTk1Yy4uNzFhNDc2MyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL25vZGVqcy9ub2RlanNfMTAuMTcuMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbm9kZWpzL25vZGVqc18xMC4xNy4wLmJiCkBAIC0xNywxMiArMTcsMTMgQEAKIAogU1JDX1VSSSA9ICJodHRwOi8vbm9kZWpzLm9yZy9kaXN0L3Yke1BWfS9ub2RlLXYke1BWfS50YXIueHogXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLXJ1bm5pbmctZ3lwLWZpbGVzLWZvci1idW5kbGVkLWRlcHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1JbnN0YWxsLWJvdGgtYmluYXJpZXMtYW5kLXVzZS1saWJkaXIucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwNC1NYWtlLWNvbXBhdGliaWxpdHktd2l0aC1nY2MtNC44LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDctdjgtZG9uLXQtb3ZlcnJpZGUtQVJNLUNGTEFHUy5wYXRjaCBcCiAgICAgICAgICAgICIKIFNSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAotICAgICAgICAgICBmaWxlOi8vMDAwNS1MaW5rLWF0b21pYy1saWJyYXJ5LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDItVXNpbmctbmF0aXZlLXRvcnF1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LUxpbmstYXRvbWljLWxpYnJhcnkucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICJkNWE1NmQwYWJmNzY0YTkxZjYyN2YwNjkwY2Q0YjlmMyIKQEAgLTU3LDYgKzU4LDcgQEAKIFBBQ0tBR0VDT05GSUdbaWN1XSA9ICItLXdpdGgtaW50bD1zeXN0ZW0taWN1LC0td2l0aG91dC1pbnRsLGljdSIKIFBBQ0tBR0VDT05GSUdbbGlidXZdID0gIi0tc2hhcmVkLWxpYnV2LCxsaWJ1diIKIFBBQ0tBR0VDT05GSUdbbmdodHRwMl0gPSAiLS1zaGFyZWQtbmdodHRwMiwsbmdodHRwMiIKK1BBQ0tBR0VDT05GSUdbc2hhcmVkXSA9ICItLXNoYXJlZCIKIFBBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1zaGFyZWQtemxpYiwsemxpYiIKIAogIyBXZSBkb24ndCB3YW50IHRvIGNyb3NzLWNvbXBpbGUgZHVyaW5nIHRhcmdldCBjb21waWxlLApAQCAtOTksNiArMTAxLDcgQEAKICAgIC4vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLXdpdGhvdXQtc25hcHNob3QgLS1zaGFyZWQtb3BlbnNzbCBcCiAgICAgICAgICAgICAgICAtLWRlc3QtY3B1PSIke0BtYXBfbm9kZWpzX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJyksIGQpfSIgXAogICAgICAgICAgICAgICAgLS1kZXN0LW9zPWxpbnV4IFwKKyAgICAgICAgICAgICAgIC0tbGliZGlyPSR7RH0ke2xpYmRpcn0gXAogICAgICAgICAgICAgICAgJHtBUkNIRkxBR1N9IFwKICAgICAgICAgICAgICAgICR7UEFDS0FHRUNPTkZJR19DT05GQVJHU30KIH0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9vcGVub2NkL29wZW5vY2RfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL29wZW5vY2Qvb3Blbm9jZF9naXQuYmIKaW5kZXggOWVjNzdmZC4uZTk1ZjFjZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL29wZW5vY2Qvb3Blbm9jZF9naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL29wZW5vY2Qvb3Blbm9jZF9naXQuYmIKQEAgLTUzLDQgKzUzLDUgQEAKICAgIgogCiBQQUNLQUdFQ09ORklHW3N5c2ZzZ3Bpb10gPSAiLS1lbmFibGUtc3lzZnNncGlvLC0tZGlzYWJsZS1zeXNmc2dwaW8iCi1QQUNLQUdFQ09ORklHID8/PSAic3lzZnNncGlvIgorUEFDS0FHRUNPTkZJR1tyZW1vdGUtYml0YmFuZ10gPSAiLS1lbmFibGUtcmVtb3RlLWJpdGJhbmcsLS1kaXNhYmxlLXJlbW90ZS1iaXRiYW5nIgorUEFDS0FHRUNPTkZJRyA/Pz0gInN5c2ZzZ3BpbyByZW1vdGUtYml0YmFuZyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9zcWxpdGUtb3JtL3NxbGl0ZS1vcm1fMS41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3NxbGl0ZS1vcm0vc3FsaXRlLW9ybV8xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyN2U0YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9zcWxpdGUtb3JtL3NxbGl0ZS1vcm1fMS41LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiU1FMaXRlIE9STSBsaWdodCBoZWFkZXIgb25seSBsaWJyYXJ5IGZvciBtb2Rlcm4gQysrIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2ZuYzEyL3NxbGl0ZV9vcm0iCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTNiNWJmNWVlOGJiMTZkOGUxOTM1OWVmZTExYmRjM2YyIgorCitpbmhlcml0IGNtYWtlCisKK0RFUEVORFMgKz0gInNxbGl0ZTMiCisKK1NSQ1JFViA9ICJlOGE5ZTk0MTZmNDIxMzAzZjRiODk3MGNhYWIyNmRhZGY4YmFlOThiIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2ZuYzEyL3NxbGl0ZV9vcm07cHJvdG9jb2w9aHR0cHMiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNNQUtFICs9ICItRFNxbGl0ZU9ybV9CdWlsZFRlc3RzPU9GRiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jbWFrZS8ke0JQTn0iCisKKyMgSGVhZGVyLW9ubHkgbGlicmFyeQorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RrL2NvbmZpZ3VyZS51c2UuZm9udGNvbmZpZy53aXRoLnhmdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90ay9jb25maWd1cmUudXNlLmZvbnRjb25maWcud2l0aC54ZnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzE1N2YuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RrL2NvbmZpZ3VyZS51c2UuZm9udGNvbmZpZy53aXRoLnhmdC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS0tLSBhL2NvbmZpZ3VyZS5pbi5vcmlnCTIwMTQtMDUtMTAgMTQ6MzU6MzkuODU5MTQ3Mzg1ICswMDAwCi0rKysgYi9jb25maWd1cmUuaW4JMjAxNC0wNS0xMCAxNDozNjoyMC4yODI5MjUxODQgKzAwMDAKLUBAIC01NTQsOCArNTU0LDggQEAKLSAJZG5sIG1ha2Ugc3VyZSBwYWNrYWdlIGNvbmZpZ3VyYXRvciAoeGZ0LWNvbmZpZyBvciBwa2ctY29uZmlnCi0gCWRubCBzYXlzIHRoYXQgeGZ0IGlzIHByZXNlbnQuCi0gCSAgICBmb3VuZF94ZnQ9eWVzCi0tCSAgICBYRlRfQ0ZMQUdTPWBwa2ctY29uZmlnIC0tY2ZsYWdzIHhmdCAyPi9kZXYvbnVsbGAgfHwgZm91bmRfeGZ0PSJubyIKLS0JICAgIFhGVF9MSUJTPWBwa2ctY29uZmlnIC0tbGlicyB4ZnQgMj4vZGV2L251bGxgIHx8IGZvdW5kX3hmdD0ibm8iCi0rCSAgICBYRlRfQ0ZMQUdTPWBwa2ctY29uZmlnIC0tY2ZsYWdzIHhmdCBmb250Y29uZmlnIDI+L2Rldi9udWxsYCB8fCBmb3VuZF94ZnQ9Im5vIgotKwkgICAgWEZUX0xJQlM9YHBrZy1jb25maWcgLS1saWJzIHhmdCBmb250Y29uZmlnIDI+L2Rldi9udWxsYCB8fCBmb3VuZF94ZnQ9Im5vIgotIAlBQ19NU0dfUkVTVUxUKFskZm91bmRfeGZ0XSkKLSAJZG5sIG1ha2Ugc3VyZSB0aGF0IGNvbXBpbGluZyBhZ2FpbnN0IFhmdCBoZWFkZXIgZmlsZSBkb2Vzbid0IGJvbWIKLSAJaWYgdGVzdCAiJGZvdW5kX3hmdCIgPSAieWVzIiA7IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90ay9jb25mc2VhcmNoLmRpZmYgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGsvY29uZnNlYXJjaC5kaWZmCmluZGV4IDhjYzA3YmMuLjIyOWFjZjMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90ay9jb25mc2VhcmNoLmRpZmYKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RrL2NvbmZzZWFyY2guZGlmZgpAQCAtMTYsMzEgKzE2LDMxIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLS0gYS91bml4L2NvbmZpZ3VyZS5vcmlnCiArKysgYi91bml4L2NvbmZpZ3VyZQotQEAgLTE0MzIsNiArMTQzMiw3IEBAIGVjaG8gIiRhc19tZTogZXJyb3I6ICR7d2l0aF90Y2xjb25maWd9IGQKK0BAIC0xNDMxLDYgKzE0MzEsNyBAQCBlY2hvICIkYXNfbWU6IGVycm9yOiAke3dpdGhfdGNsY29uZmlnfSBkCiAgCQkJYGxzIC1kIC91c3IvbG9jYWwvbGliIDI+L2Rldi9udWxsYCBcCiAgCQkJYGxzIC1kIC91c3IvY29udHJpYi9saWIgMj4vZGV2L251bGxgIFwKICAJCQlgbHMgLWQgL3Vzci9wa2cvbGliIDI+L2Rldi9udWxsYCBcCiArCQkJYGxzIC1kIC91c3Ivc2hhcmUvdGNsdGsvdGNsOC42IDI+L2Rldi9udWxsYCBcCisgCQkJYGxzIC1kIC91c3IvbGliL3RjbDguNiAyPi9kZXYvbnVsbGAgXAogIAkJCWBscyAtZCAvdXNyL2xpYiAyPi9kZXYvbnVsbGAgXAogIAkJCWBscyAtZCAvdXNyL2xpYjY0IDI+L2Rldi9udWxsYCBcCi0gCQkJYGxzIC1kIC91c3IvbG9jYWwvbGliL3RjbDguNiAyPi9kZXYvbnVsbGAgXAogSW5kZXg6IGEvdW5peC90Y2wubTQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSBhL3VuaXgvdGNsLm00Lm9yaWcKICsrKyBiL3VuaXgvdGNsLm00Ci1AQCAtOTQsNiArOTQsNyBAQCBBQ19ERUZVTihbU0NfUEFUSF9UQ0xDT05GSUddLCBbCitAQCAtOTMsNiArOTMsNyBAQCBBQ19ERUZVTihbU0NfUEFUSF9UQ0xDT05GSUddLCBbCiAgCQkJYGxzIC1kIC91c3IvbG9jYWwvbGliIDI+L2Rldi9udWxsYCBcCiAgCQkJYGxzIC1kIC91c3IvY29udHJpYi9saWIgMj4vZGV2L251bGxgIFwKICAJCQlgbHMgLWQgL3Vzci9wa2cvbGliIDI+L2Rldi9udWxsYCBcCiArCQkJYGxzIC1kIC91c3Ivc2hhcmUvdGNsdGsvdGNsOC42IDI+L2Rldi9udWxsYCBcCisgCQkJYGxzIC1kIC91c3IvbGliL3RjbDguNiAyPi9kZXYvbnVsbGAgXAogIAkJCWBscyAtZCAvdXNyL2xpYiAyPi9kZXYvbnVsbGAgXAogIAkJCWBscyAtZCAvdXNyL2xpYjY0IDI+L2Rldi9udWxsYCBcCi0gCQkJYGxzIC1kIC91c3IvbG9jYWwvbGliL3RjbDguNiAyPi9kZXYvbnVsbGAgXAotQEAgLTIyNyw2ICsyMjgsNyBAQCBBQ19ERUZVTihbU0NfUEFUSF9US0NPTkZJR10sIFsKK0BAIC0yMjYsNiArMjI3LDcgQEAgQUNfREVGVU4oW1NDX1BBVEhfVEtDT05GSUddLCBbCiAgCQkJYGxzIC1kIC91c3IvbG9jYWwvbGliIDI+L2Rldi9udWxsYCBcCiAgCQkJYGxzIC1kIC91c3IvY29udHJpYi9saWIgMj4vZGV2L251bGxgIFwKICAJCQlgbHMgLWQgL3Vzci9wa2cvbGliIDI+L2Rldi9udWxsYCBcCi0rCQkJYGxzIC1kIC91c3Ivc2hhcmUvdGNsdGsvdGs4LjYgMj4vZGV2L251bGxgIFwKKysJCQlgbHMgLWQgL3Vzci9zaGFyZS90Y2x0ay90Y2w4LjYgMj4vZGV2L251bGxgIFwKKyAJCQlgbHMgLWQgL3Vzci9saWIvdGs4LjYgMj4vZGV2L251bGxgIFwKICAJCQlgbHMgLWQgL3Vzci9saWIgMj4vZGV2L251bGxgIFwKICAJCQlgbHMgLWQgL3Vzci9saWI2NCAyPi9kZXYvbnVsbGAgXAotIAkJCWBscyAtZCAvdXNyL2xvY2FsL2xpYi90azguNiAyPi9kZXYvbnVsbGAgXApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RrL2ZpeC14ZnQuZGlmZiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90ay9maXgteGZ0LmRpZmYKaW5kZXggZDFiYjcxMC4uNGFhNWQ2YiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RrL2ZpeC14ZnQuZGlmZgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGsvZml4LXhmdC5kaWZmCkBAIC04LDggKzgsOCBAQAogLQlYRlRfTElCUz1geGZ0LWNvbmZpZyAtLWxpYnMgMj4vZGV2L251bGxgIHx8IGZvdW5kX3hmdD0ibm8iCiAtCWlmIHRlc3QgIiRmb3VuZF94ZnQiID0gIm5vIiA7IHRoZW4KICAJICAgIGZvdW5kX3hmdD15ZXMKLSAJICAgIFhGVF9DRkxBR1M9YHBrZy1jb25maWcgLS1jZmxhZ3MgeGZ0IDI+L2Rldi9udWxsYCB8fCBmb3VuZF94ZnQ9Im5vIgotIAkgICAgWEZUX0xJQlM9YHBrZy1jb25maWcgLS1saWJzIHhmdCAyPi9kZXYvbnVsbGAgfHwgZm91bmRfeGZ0PSJubyIKKyAJICAgIFhGVF9DRkxBR1M9YHBrZy1jb25maWcgLS1jZmxhZ3MgeGZ0IGZvbnRjb25maWcgMj4vZGV2L251bGxgIHx8IGZvdW5kX3hmdD0ibm8iCisgCSAgICBYRlRfTElCUz1gcGtnLWNvbmZpZyAtLWxpYnMgeGZ0IGZvbnRjb25maWcgMj4vZGV2L251bGxgIHx8IGZvdW5kX3hmdD0ibm8iCiAtCWZpCiAgCUFDX01TR19SRVNVTFQoWyRmb3VuZF94ZnRdKQogIAlkbmwgbWFrZSBzdXJlIHRoYXQgY29tcGlsaW5nIGFnYWluc3QgWGZ0IGhlYWRlciBmaWxlIGRvZXNuJ3QgYm9tYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RrL25vbi1saW51eC5kaWZmIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RrL25vbi1saW51eC5kaWZmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDMxZjlmLi4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90ay9ub24tbGludXguZGlmZgorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLVBhdGNoIGJ5IFNlcmdlaSBHb2xvdmFuIChvcmlnaW5hbGx5IGJ5IE1pa2UgTWFya2xleSBhbmQgQ2hyaXMgV2F0ZXJzKSBmaXhlcwotYnVpbGRpbmcgb24gbm9uLWxpbnV4IERlYmlhbiBhcmNoaXRlY3R1cmVzLgotCi0tLS0gdGs4LjUtOC41Ljgub3JpZy91bml4L2NvbmZpZ3VyZQotKysrIHRrOC41LTguNS44L3VuaXgvY29uZmlndXJlCi1AQCAtNDQ0Nyw2ICs0NDQ3LDkgQEAKLSAJCWlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCi0gCQkgICAgdGNsX2N2X3N5c192ZXJzaW9uPUFJWC1gdW5hbWUgLXZgLmB1bmFtZSAtcmAKLSAJCWZpCi0rCQlpZiB0ZXN0ICJgdW5hbWUgLXNgIiA9ICJOZXRCU0QiIC1hIC1mIC9ldGMvZGViaWFuX3ZlcnNpb24gOyB0aGVuCi0rCQkgICAgdGNsX2N2X3N5c192ZXJzaW9uPU5ldEJTRC1EZWJpYW4KLSsJCWZpCi0gCSAgICBmaQotIAlmaQotCi0tLS0gdGs4LjUtOC41Ljgub3JpZy91bml4L3RjbC5tNAotKysrIHRrOC41LTguNS44L3VuaXgvdGNsLm00Ci1AQCAtOTYyLDYgKzk2Miw5IEBACi0gCQlpZiB0ZXN0ICJgdW5hbWUgLXNgIiA9ICJBSVgiIDsgdGhlbgotIAkJICAgIHRjbF9jdl9zeXNfdmVyc2lvbj1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCi0gCQlmaQotKwkJaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiTmV0QlNEIiAtYSAtZiAvZXRjL2RlYmlhbl92ZXJzaW9uIDsgdGhlbgotKwkJICAgIHRjbF9jdl9zeXNfdmVyc2lvbj1OZXRCU0QtRGViaWFuCi0rCQlmaQotIAkgICAgZmkKLSAJZmkKLSAgICAgXSkKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90ay90a2xpYnJhcnkuZGlmZiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90ay90a2xpYnJhcnkuZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUzOGMyYS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGsvdGtsaWJyYXJ5LmRpZmYKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0tLS0gdGs4LjUtOC41Ljgub3JpZy91bml4L2NvbmZpZ3VyZQotKysrIHRrOC41LTguNS44L3VuaXgvY29uZmlndXJlCi1AQCAtMTEwNzAsNyArMTEwNzAsNyBAQAotICAgICBUQ0xfU1RVQl9GTEFHUz0iLURVU0VfVENMX1NUVUJTIgotIGZpCi0gCi0tVEtfTElCUkFSWT0nJChwcmVmaXgpL2xpYi90ayQoVkVSU0lPTiknCi0rdGVzdCAteiAiJFRLX0xJQlJBUlkiICYmIFRLX0xJQlJBUlk9JyQocHJlZml4KS9saWIvdGskKFZFUlNJT04pJwotIFBSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpciknCi0gSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKLSBUS19QS0dfRElSPSd0ayQoVkVSU0lPTiknCi0tLS0gdGs4LjUtOC41Ljgub3JpZy91bml4L2NvbmZpZ3VyZS5pbgotKysrIHRrOC41LTguNS44L3VuaXgvY29uZmlndXJlLmluCi1AQCAtNjA3LDcgKzYwNyw3IEBACi0gICAgIFRDTF9TVFVCX0ZMQUdTPSItRFVTRV9UQ0xfU1RVQlMiCi0gZmkKLSAKLS1US19MSUJSQVJZPSckKHByZWZpeCkvbGliL3RrJChWRVJTSU9OKScKLSt0ZXN0IC16ICIkVEtfTElCUkFSWSIgJiYgVEtfTElCUkFSWT0nJChwcmVmaXgpL2xpYi90ayQoVkVSU0lPTiknCi0gUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKLSBIVE1MX0RJUj0nJChESVNURElSKS9odG1sJwotIFRLX1BLR19ESVI9J3RrJChWRVJTSU9OKScKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90a184LjYuOS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90a184LjYuMTAuYmIKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RrXzguNi45LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGtfOC42LjEwLmJiCmluZGV4IDNkNzc2NzAuLmI1NjRlMTIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90a184LjYuOS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGtfOC42LjEwLmJiCkBAIC0yMCwxNCArMjAsMTEgQEAKIFNSQ19VUkkgPSAiXAogICAgICR7U09VUkNFRk9SR0VfTUlSUk9SfS90Y2wvJHtCUE59JHtQVn0tc3JjLnRhci5neiBcCiAgICAgZmlsZTovL2NvbmZzZWFyY2guZGlmZjtzdHJpcGxldmVsPTIgXAotICAgIGZpbGU6Ly9ub24tbGludXguZGlmZjtzdHJpcGxldmVsPTIgXAotICAgIGZpbGU6Ly90a2xpYnJhcnkuZGlmZjtzdHJpcGxldmVsPTIgXAogICAgIGZpbGU6Ly90a3ByaXZhdGUuZGlmZjtzdHJpcGxldmVsPTIgXAogICAgIGZpbGU6Ly9maXgteGZ0LmRpZmYgXAotICAgIGZpbGU6Ly9jb25maWd1cmUudXNlLmZvbnRjb25maWcud2l0aC54ZnQucGF0Y2ggXAogIgotU1JDX1VSSVttZDVzdW1dID0gImUzY2Y2MjkwOTk5ZWUzMDY1MWQ3NTg2NGVjY2ZlYzYzIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImQzZjkxNjFlOGJhMGYxMDdmZThkNGRmMWY2ZDNhMTRjMzBjYzM1MTJkZmMxMmE3OTVkYWEzNjdhMjc2NjBkYWMiCitTUkNfVVJJW21kNXN1bV0gPSAiNjAyYTQ3YWQ5ZWNhYzdiZjY1NWFkYTcyOWQxNDBhOTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjNkZjQxOGE4NTlkMGE0NjMzNDdmOTVkZWQ1Y2Q4OGEzZGQzYWFhMWNlZWNhZWVlMzYyMTk0YmMzMGYzZTM4NiIKIAogUyA9ICIke1dPUktESVJ9LyR7QlBOfSR7UFZ9L3VuaXgiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnQvYm9pbmMtQU1fQ09ORElUSU9OQUwucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvYm9pbmMvYm9pbmMtY2xpZW50L2JvaW5jLUFNX0NPTkRJVElPTkFMLnBhdGNoCmluZGV4IGFiODA0MmYuLjdjM2IwMzIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnQvYm9pbmMtQU1fQ09ORElUSU9OQUwucGF0Y2gKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2JvaW5jL2JvaW5jLWNsaWVudC9ib2luYy1BTV9DT05ESVRJT05BTC5wYXRjaApAQCAtMSwyMSArMSwyOCBAQAotQWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgZ3RrMisgYW5kIG9iamMrKworRnJvbSA3OTU3NzU2YTNkZDE2NDk4Y2Y3YTc1ZTFmYjY2NzVhMzNiYzdmM2RjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMyBOb3YgMjAxNiAwMToyMDozMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBBZGQgY29uZmlndXJlIGNoZWNrIGZvciBndGsyKyBhbmQgb2JqYysrCiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAotSW5kZXg6IGJvaW5jLWNsaWVudF9yZWxlYXNlLTcuNi03LjYuMzMvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYm9pbmMtY2xpZW50X3JlbGVhc2UtNy42LTcuNi4zMy5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIGJvaW5jLWNsaWVudF9yZWxlYXNlLTcuNi03LjYuMzMvY29uZmlndXJlLmFjCi1AQCAtNjQsNiArNjQsNyBAQCBtNF9pZmRlZihbQUNfUFJPR19PQkpDWFhdLFtBQ19QUk9HX09CSkNYCistLS0KKyBjb25maWd1cmUuYWMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZDgxZDc5NWRlNC4uN2JlZWIzNGFlMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjMsNiArNjMsNyBAQCBtNF9wYXR0ZXJuX2FsbG93KFtBQ19QUk9HX09CSkNYWF0pCisgbTRfaWZkZWYoW0FDX1BST0dfT0JKQ1hYXSxbQUNfUFJPR19PQkpDWFhdLCkKICBkbmwgLS0tLS0tCi0gQUNfUFJPR19GNzcKICBBQ19QUk9HX0NQUAogK0FDX1BST0dfT0JKQ1hYCiAgQUNfUFJPR19NQUtFX1NFVAogIFNBSF9MSU5LUwogIEFDX0xBTkdfUFVTSChDKQotQEAgLTEwODEsNiArMTA4Miw4IEBAIEFNX0NPTkRJVElPTkFMKEVOQUJMRV9CT0lOQ0NSWVBULCBbdGVzdAorQEAgLTEwNjgsNiArMTA2OSw4IEBAIEFNX0NPTkRJVElPTkFMKEVOQUJMRV9CT0lOQ0NSWVBULCBbdGVzdCAieCR7ZW5hYmxlX3NlcnZlcn0iID0geHllcyAgfHwgdGVzdCAieCR7CiAgQU1fQ09ORElUSU9OQUwoSU5TVEFMTF9IRUFERVJTLCBbdGVzdCAiJHtlbmFibGVfaW5zdGFsbF9oZWFkZXJzfSIgPSB5ZXNdKQogIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1VEQV9MSUIsIFt0ZXN0ICIke2VuYWJsZV9jbGllbnR9IiA9IHllcyAtYSAtZiAuL2NvcHJvY3MvQ1VEQS9wb3NpeC8ke2JvaW5jX3BsYXRmb3JtfS9saWJjdWRhcnQuc29dKQogIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2JvaW5jL2JvaW5jLWNsaWVudC9ndGstY29uZmlndXJlLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2JvaW5jL2JvaW5jLWNsaWVudC9ndGstY29uZmlndXJlLnBhdGNoCmluZGV4IDRhZThkNTguLmUwNjBiMWEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnQvZ3RrLWNvbmZpZ3VyZS5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvYm9pbmMvYm9pbmMtY2xpZW50L2d0ay1jb25maWd1cmUucGF0Y2gKQEAgLTEsMTMgKzEsMjAgQEAKLUNoZWNrIGZvciBndGsyKyBvbmx5IHdoZW4gbWFuYWdlciBpcyBlbmFibGVkCitGcm9tIGQ1M2U5NjE3ZmI2NDQ2NzgwNDc4YmIxMzkwN2VmZDExMWYyNDFjZDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAzIE5vdiAyMDE2IDAxOjIwOjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIGZvciBndGsyKyBvbmx5IHdoZW4gbWFuYWdlciBpcyBlbmFibGVkCiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKIAotSW5kZXg6IGJvaW5jLWNsaWVudF9yZWxlYXNlLTcuNi03LjYuMzMvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYm9pbmMtY2xpZW50X3JlbGVhc2UtNy42LTcuNi4zMy5vcmlnL2NvbmZpZ3VyZS5hYwotKysrIGJvaW5jLWNsaWVudF9yZWxlYXNlLTcuNi03LjYuMzMvY29uZmlndXJlLmFjCi1AQCAtMTAzMyw2ICsxMDMzLDExIEBAIGVsc2UKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA3YmVlYjM0YWUyLi4zNTIzNGMyNzYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDE4LDYgKzEwMTgsMTEgQEAgZWxzZQogICAgQU1fQ09ORElUSU9OQUwoW0dVSV9HVEtdLCBmYWxzZSkKICBmaQogIApAQCAtMTksNyArMjYsNyBAQAogIGRubCAtLS0tLS0tLS0tIGxpYk5vdGlmeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGlmIHRlc3QgIiR7ZW5hYmxlX21hbmFnZXJ9IiA9IHllcyA7IHRoZW4KICAgIFBLR19DSEVDS19NT0RVTEVTKExJQk5PVElGWSwgW2xpYm5vdGlmeV0pCi1AQCAtMTA4Miw3ICsxMDg3LDYgQEAgQU1fQ09ORElUSU9OQUwoRU5BQkxFX0JPSU5DQ1JZUFQsIFt0ZXN0CitAQCAtMTA2OSw3ICsxMDc0LDYgQEAgQU1fQ09ORElUSU9OQUwoRU5BQkxFX0JPSU5DQ1JZUFQsIFt0ZXN0ICJ4JHtlbmFibGVfc2VydmVyfSIgPSB4eWVzICB8fCB0ZXN0ICJ4JHsKICBBTV9DT05ESVRJT05BTChJTlNUQUxMX0hFQURFUlMsIFt0ZXN0ICIke2VuYWJsZV9pbnN0YWxsX2hlYWRlcnN9IiA9IHllc10pCiAgQU1fQ09ORElUSU9OQUwoSEFWRV9DVURBX0xJQiwgW3Rlc3QgIiR7ZW5hYmxlX2NsaWVudH0iID0geWVzIC1hIC1mIC4vY29wcm9jcy9DVURBL3Bvc2l4LyR7Ym9pbmNfcGxhdGZvcm19L2xpYmN1ZGFydC5zb10pCiAgCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvYm9pbmMvYm9pbmMtY2xpZW50L29wZW5nbF9tNF9jaGVjay5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnQvb3BlbmdsX200X2NoZWNrLnBhdGNoCmluZGV4IDBiMDU3ZWEuLmFkNDQ5M2YgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnQvb3BlbmdsX200X2NoZWNrLnBhdGNoCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnQvb3BlbmdsX200X2NoZWNrLnBhdGNoCkBAIC0xLDEzICsxLDIyIEBACitGcm9tIDRmMmRkOTI5NjE4ZjE0OTA4NzI0OWYzYzkwY2MwNTZkNTA4MGIxZTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAzIE5vdiAyMDE2IDAxOjIwOjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJvaW5jOiBBZGQgcmVjaXBlIGZvciBib2luYy1jbGllbnQKKwogRG8gbm90IGFkZCBwcmVmaXgvbGliIHRvIGxpYnJhcnkgc2VhcmNoIHBhdGgKIGxldCBzeXNyb290IHRha2UgY2FyZSBvZiB0aGF0CiAKIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbQ3Jvc3MtY29tcGlsZSBzcGVjaWZpY10KIAotSW5kZXg6IGJvaW5jLWNsaWVudF9yZWxlYXNlLTcuNi03LjYuMzMvbTQvYXhfY2hlY2tfZ2wubTQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBib2luYy1jbGllbnRfcmVsZWFzZS03LjYtNy42LjMzLm9yaWcvbTQvYXhfY2hlY2tfZ2wubTQKLSsrKyBib2luYy1jbGllbnRfcmVsZWFzZS03LjYtNy42LjMzL200L2F4X2NoZWNrX2dsLm00CistLS0KKyBtNC9heF9jaGVja19nbC5tNCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL200L2F4X2NoZWNrX2dsLm00IGIvbTQvYXhfY2hlY2tfZ2wubTQKK2luZGV4IGUyNmNlNWI5MzAuLjFlNjBjOTI2NmEgMTAwNjQ0CistLS0gYS9tNC9heF9jaGVja19nbC5tNAorKysrIGIvbTQvYXhfY2hlY2tfZ2wubTQKIEBAIC01OCw3ICs1OCw3IEBAIGVsc2UKICAgICAgZWxzZQogICAgICAgIGF4X3RyeV9saWI9IiR7YXhfbGlifSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnRfNy4xMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnRfNy4xNi5iYgpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvYm9pbmMvYm9pbmMtY2xpZW50XzcuMTIuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9ib2luYy9ib2luYy1jbGllbnRfNy4xNi5iYgppbmRleCBkNDcyZDMyLi4xYjBhZjU1IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvYm9pbmMvYm9pbmMtY2xpZW50XzcuMTIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2JvaW5jL2JvaW5jLWNsaWVudF83LjE2LmJiCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2d0aysgbGlibm90aWZ5IHhjYi11dGlsIGxpYnhzY3Juc2F2ZXInLCAnJywgZCl9IFwKICAgICAgICAgICAgbmV0dGxlIFwKICIKLVNSQ1JFViA9ICJiZDEyMzM4ZGJkMjkwODNkYWE1YTRiMDIyNTkyY2EzMWZmNjhjZDk4IgorU1JDUkVWID0gImE0MzJlMWNjYmY4NjRmOTljN2IyOWExNjQ1ZGUzODA1NjkxNWY5NDQiCiBCUkFOQ0ggPSAiY2xpZW50X3JlbGVhc2UvNy8ke1BWfSIKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9CT0lOQy9ib2luYztwcm90b2NvbD1odHRwczticmFuY2g9JHtCUkFOQ0h9IFwKICAgICAgICAgICAgZmlsZTovL2JvaW5jLUFNX0NPTkRJVElPTkFMLnBhdGNoIFwKQEAgLTc0LDExICs3NCwxNCBAQAogCXNlZCAtaSAtZSAnc3xecnVucGF0aF92YXI9TERfUlVOX1BBVEh8cnVucGF0aF92YXI9RElFX1JQQVRIX0RJRXxnJyAke0J9LyR7VEFSR0VUX1NZU30tbGlidG9vbAogfQogZG9faW5zdGFsbF9hcHBlbmQoKSB7Ci0JaWYgWyAtZSAke0R9JHtsaWJkaXJ9L3N5c3RlbWQvc3lzdGVtL2JvaW5jLWNsaWVudC5zZXJ2aWNlIF07IHRoZW4KLQkJaW5zdGFsbCAtRCAtbSAwNjQ0IFwKLQkJJHtEfSR7bGliZGlyfS9zeXN0ZW1kL3N5c3RlbS9ib2luYy1jbGllbnQuc2VydmljZSBcCisJaWYgWyAtZSAke0R9JHtub25hcmNoX2xpYmRpcn0vc3lzdGVtZC9zeXN0ZW0vYm9pbmMtY2xpZW50LnNlcnZpY2UgXTsgdGhlbgorICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF9zeXN0ZW1fdW5pdGRpcn0KKwkJbXYgXAorCQkke0R9JHtub25hcmNoX2xpYmRpcn0vc3lzdGVtZC9zeXN0ZW0vYm9pbmMtY2xpZW50LnNlcnZpY2UgXAogCQkke0R9JHtzeXN0ZW1kX3N5c3RlbV91bml0ZGlyfS9ib2luYy1jbGllbnQuc2VydmljZQotCQlybSAtcmYgJHtEfSR7bGliZGlyfS9zeXN0ZW1kCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke25vbmFyY2hfbGliZGlyfS9zeXN0ZW1kL3N5c3RlbSBcCisgICAgICAgICAgICAgICAgJHtEfSR7bm9uYXJjaF9saWJkaXJ9L3N5c3RlbWQgXAorICAgICAgICAgICAgICAgICR7RH0ke25vbmFyY2hfbGliZGlyfQogCWZpCiB9CiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9icm90bGkvYnJvdGxpXzEuMC43LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2Jyb3RsaS9icm90bGlfMS4wLjcuYmIKaW5kZXggYjRkNDc3My4uZTRlNDU0YiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2Jyb3RsaS9icm90bGlfMS4wLjcuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2Jyb3RsaS9icm90bGlfMS4wLjcuYmIKQEAgLTEyLDMgKzEyLDkgQEAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKIGluaGVyaXQgY21ha2UgbGliX3BhY2thZ2UKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWZvciBsaWIgaW4gJChscyAke0R9JHtsaWJkaXJ9Lyotc3RhdGljLmEpOyBkbworCQltdiAtdiAiJHtsaWJ9IiAiJChlY2hvICR7bGlifSB8IHNlZCBzLy1zdGF0aWMvLykiCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2NtcGktYmluZGluZ3MvY21waS1iaW5kaW5ncy8wMDAxLUFkZC1QWVRIT05fQUJJLXN1ZmZpeC10by10aGUtcHl0aG9uLWxpYnJhcnktbmFtZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9jbXBpLWJpbmRpbmdzL2NtcGktYmluZGluZ3MvMDAwMS1BZGQtUFlUSE9OX0FCSS1zdWZmaXgtdG8tdGhlLXB5dGhvbi1saWJyYXJ5LW5hbWUucGF0Y2gKaW5kZXggYjJhMTQ5Yi4uZmEwMjlkYSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2NtcGktYmluZGluZ3MvY21waS1iaW5kaW5ncy8wMDAxLUFkZC1QWVRIT05fQUJJLXN1ZmZpeC10by10aGUtcHl0aG9uLWxpYnJhcnktbmFtZS5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvY21waS1iaW5kaW5ncy9jbXBpLWJpbmRpbmdzLzAwMDEtQWRkLVBZVEhPTl9BQkktc3VmZml4LXRvLXRoZS1weXRob24tbGlicmFyeS1uYW1lLnBhdGNoCkBAIC05LDE5ICs5LDE0IEBACiAgc3dpZy9weXRob24vQ01ha2VMaXN0cy50eHQgfCAyICstCiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCiAKLWRpZmYgLS1naXQgYS9zd2lnL3B5dGhvbi9DTWFrZUxpc3RzLnR4dCBiL3N3aWcvcHl0aG9uL0NNYWtlTGlzdHMudHh0Ci1pbmRleCAxMjg3OThiLi4zOTFjZWY3IDEwMDY0NAogLS0tIGEvc3dpZy9weXRob24vQ01ha2VMaXN0cy50eHQKICsrKyBiL3N3aWcvcHl0aG9uL0NNYWtlTGlzdHMudHh0Ci1AQCAtNDksNyArNDksNyBAQCBBRERfREVGSU5JVElPTlMoLURDTVBJX1BMQVRGT1JNX0xJTlVYX0dFTkVSSUNfR05VIC1EQ01QSV9WRVJTSU9OPTIwMCkKK0BAIC00OSw3ICs0OSw3IEBAIEFERF9ERUZJTklUSU9OUygtRENNUElfUExBVEZPUk1fTElOVVhfR0UKICBTRVQoIE5BTUUgcHlDbXBpUHJvdmlkZXIgKQogIEFERF9MSUJSQVJZKCAke05BTUV9IFNIQVJFRCAke1NXSUdfT1VUUFVUfSkKICAjVEFSR0VUX0xJTktfTElCUkFSSUVTKCAke05BTUV9ICR7UFlUSE9OX0xJQlJBUklFU30gKQogLVRBUkdFVF9MSU5LX0xJQlJBUklFUyggJHtOQU1FfSBweXRob24ke1BZVEhPTl9NQUpPUl9WRVJTSU9OfS4ke1BZVEhPTl9NSU5PUl9WRVJTSU9OfSApCi0rVEFSR0VUX0xJTktfTElCUkFSSUVTKCAke05BTUV9IHB5dGhvbiR7UFlUSE9OX01BSk9SX1ZFUlNJT059LiR7UFlUSE9OX01JTk9SX1ZFUlNJT059bSApCisrVEFSR0VUX0xJTktfTElCUkFSSUVTKCAke05BTUV9IHB5dGhvbiR7UFlUSE9OX01BSk9SX1ZFUlNJT059LiR7UFlUSE9OX01JTk9SX1ZFUlNJT059JHtQWVRIT05fQUJJfSApCiAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCAke05BTUV9IHB0aHJlYWQgKQogIFRBUkdFVF9MSU5LX0xJQlJBUklFUyggJHtOQU1FfSBkbCApCiAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCAke05BTUV9IHV0aWwgKQotLS0gCi0yLjguMQotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvY21waS1iaW5kaW5ncy9jbXBpLWJpbmRpbmdzXzEuMC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2NtcGktYmluZGluZ3MvY21waS1iaW5kaW5nc18xLjAuMS5iYgppbmRleCAyNTFjNWQwLi42YzcxZDUzIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvY21waS1iaW5kaW5ncy9jbXBpLWJpbmRpbmdzXzEuMC4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9jbXBpLWJpbmRpbmdzL2NtcGktYmluZGluZ3NfMS4wLjEuYmIKQEAgLTIyLDcgKzIyLDkgQEAKIGluaGVyaXQgY21ha2UgcHl0aG9uM25hdGl2ZQogCiBFWFRSQV9PRUNNQUtFID0gIi1ETElCPScke2Jhc2VsaWJ9JyBcCi0gICAgICAgICAgICAgICAgIC1EUFlUSE9OX0lOQ0xVREVfUEFUSD0ke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iCisgICAgICAgICAgICAgICAgIC1EUFlUSE9OX0lOQ0xVREVfUEFUSD0ke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAorICAgICAgICAgICAgICAgICAtRFBZVEhPTl9BQkk9JHtQWVRIT05fQUJJfSBcCisgICAgICAgICAgICAgICAgICIKIAogIyBXaXRoIE5pbmphIGl0IGZhaWxzIHdpdGg6CiAjIG5pbmphOiBlcnJvcjogYnVpbGQubmluamE6MjgyOiBiYWQgJC1lc2NhcGUgKGxpdGVyYWwgJCBtdXN0IGJlIHdyaXR0ZW4gYXMgJCQpCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZW5zY3JpcHQvZW5zY3JpcHQvMDAwMS1GaXgtYnVpbGRzLXdpdGgtcmVjZW50LWdldHRleHQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZW5zY3JpcHQvZW5zY3JpcHQvMDAwMS1GaXgtYnVpbGRzLXdpdGgtcmVjZW50LWdldHRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmYWZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9lbnNjcmlwdC9lbnNjcmlwdC8wMDAxLUZpeC1idWlsZHMtd2l0aC1yZWNlbnQtZ2V0dGV4dC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGcm9tIDc3MWNkMmExMmRiOGI4YzlhNTU4ZjFhMDQ5NThkZjhlZDYxNGYyZTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRGVjIDIwMTkgMTQ6MDY6NTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkcyB3aXRoIHJlY2VudCBnZXR0ZXh0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGRlZGFiZDYuLjg4MzNhYzkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yMiw3ICsyMiw3IEBACisgIyBhbG9uZyB3aXRoIEVuc2NyaXB0LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICMKKyAKKy1TVUJESVJTID0gaW50bCBjb21wYXQgYWZtIGFmbWxpYiBsaWIgc2NyaXB0cyBzcmMgcG8gc3RhdGVzIGRvY3MgdzMyCisrU1VCRElSUyA9IGNvbXBhdCBhZm0gYWZtbGliIGxpYiBzY3JpcHRzIHNyYyBwbyBzdGF0ZXMgZG9jcyB3MzIKKyAKKyBFWFRSQV9ESVNUID0gUkVBRE1FLkVTQ0FQRVMgUkVBRE1FLkRPUyBhc2NpaS50eHQJCQlcCisgYXNjaWlmaXNlLnR4dCBhc2NpaWRrbm8udHh0IDg4NTkxLnR4dCA4ODU5Mi50eHQgODg1OTMudHh0IDg4NTk0LnR4dAlcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZW5zY3JpcHQvZW5zY3JpcHRfMS42LjYuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZW5zY3JpcHQvZW5zY3JpcHRfMS42LjYuYmIKaW5kZXggMmI2ZDE0ZS4uODI3OTFmNSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2Vuc2NyaXB0L2Vuc2NyaXB0XzEuNi42LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9lbnNjcmlwdC9lbnNjcmlwdF8xLjYuNi5iYgpAQCAtMTIsNyArMTIsOCBAQAogCiBTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5neiBcCiAgICAgICAgICAgIGZpbGU6Ly9lbnNjcmlwdC1hdXRvY29uZi5wYXRjaCBcCi0iCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZHMtd2l0aC1yZWNlbnQtZ2V0dGV4dC5wYXRjaCBcCisgICAgICAgICAgICIKIAogaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZmx1ZW50Yml0L2ZsdWVudGJpdC9idWlsdGluLW5hbi5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9mbHVlbnRiaXQvZmx1ZW50Yml0L2J1aWx0aW4tbmFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZmMzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZmx1ZW50Yml0L2ZsdWVudGJpdC9idWlsdGluLW5hbi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitoZWxwIGNvbXBsaWVyIHRvIHVzZSBpbnRyaW5zaWNzLCBjbGFuZyBpbiBmZXcgY2FzZXMgZS5nLiBhYXJjaDY0IGNhbiBub3QKK2FuZCB0aGVuIHJlcXVpcmVzIGxpbmtpbmcgd2l0aCBsaWJtLCBpdHMgdGhlIG9ubHkgZnVuY3Rpb24gbmVlZGVkIGZyb20gbGlibSB0aGVuCitpdHMgZ29vZCB0byBhdm9pZCBuZWVkaW5nIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKy0tLSBhL2luY2x1ZGUvZmx1ZW50LWJpdC9zdHJlYW1fcHJvY2Vzc29yL2ZsYl9zcF90aW1lc2VyaWVzLmgKKysrKyBiL2luY2x1ZGUvZmx1ZW50LWJpdC9zdHJlYW1fcHJvY2Vzc29yL2ZsYl9zcF90aW1lc2VyaWVzLmgKK0BAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBjYl9mb3JlY2FzdF9jYWxjKHN0cnVjdCB0aW1lc2VyaWVzCisgICAgICAgICByZXN1bHQgPSBiMCArIGIxICogKHZhbC0+ZjY0ICsgKmZvcmVjYXN0LT5sYXRlc3RfeCk7CisgICAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKKy0gICAgICAgIHJlc3VsdCA9IG5hbigiIik7CisrICAgICAgICByZXN1bHQgPSBfX2J1aWx0aW5fbmFuKCIiKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgCitAQCAtMjgzLDcgKzI4Myw3IEBAIHZvaWQgY2JfZm9yZWNhc3Rfcl9jYWxjKHN0cnVjdCB0aW1lc2VyaWUKKyAgICAgICAgICAgICByZXN1bHQgPSAoKHZhbC0+aTY0IC0gYjApIC8gYjEpIC0gKmZvcmVjYXN0LT5sYXRlc3RfeDsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGRlZmF1bHQ6CistICAgICAgICAgICAgcmVzdWx0ID0gbmFuKCIiKTsKKysgICAgICAgICAgICByZXN1bHQgPSBfX2J1aWx0aW5fbmFuKCIiKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9mbHVlbnRiaXQvZmx1ZW50Yml0L2Nyb3NzLWJ1aWxkLWluaXQtc3lzdGVtLWRldGVjdGlvbi5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9mbHVlbnRiaXQvZmx1ZW50Yml0L2Nyb3NzLWJ1aWxkLWluaXQtc3lzdGVtLWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTg1Nzg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2ZsdWVudGJpdC9mbHVlbnRiaXQvY3Jvc3MtYnVpbGQtaW5pdC1zeXN0ZW0tZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0RlZmluZSBDTWFrZSB2YXJpYWJsZXMgdG8gaW5kaWNhdGUgaW5pdCBzeXN0ZW0gZm9yIHRhcmdldAoraW5jYXNlIG9mIGNyb3NzIGNvbXBpbGUsIGRldGVjdGluZyBzeXN0ZW1kIHN1cHBvcnQgYmFzZWQgb24KK2hvc3QgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBub3QgcmlnaHQgdGhpbmcgdG8gZG8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZWVtQGdtYWlsLmNvbT4KKworLS0tIGEvc3JjL0NNYWtlTGlzdHMudHh0CisrKysgYi9zcmMvQ01ha2VMaXN0cy50eHQKK0BAIC0zMTcsNyArMzE3LDcgQEAgaWYoRkxCX0JJTkFSWSkKKyAgIGluc3RhbGwoVEFSR0VUUyBmbHVlbnQtYml0LWJpbiBSVU5USU1FIERFU1RJTkFUSU9OICR7RkxCX0lOU1RBTExfQklORElSfSkKKyAKKyAgICMgRGV0ZWN0IGluaXQgc3lzdGVtLCBpbnN0YWxsIHVwc3RhcnQsIHN5c3RlbWQgb3IgaW5pdC5kIHNjcmlwdAorLSAgaWYoSVNfRElSRUNUT1JZIC9saWIvc3lzdGVtZC9zeXN0ZW0pCisrICBpZihJU19ESVJFQ1RPUlkgL2xpYi9zeXN0ZW1kL3N5c3RlbSBPUiBGTEJfU1lTVEVNRCkKKyAgICAgc2V0KEZMQl9TWVNURU1EX1NDUklQVCAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2luaXQvJHtGTEJfT1VUX05BTUV9LnNlcnZpY2UiKQorICAgICBjb25maWd1cmVfZmlsZSgKKyAgICAgICAiJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2luaXQvc3lzdGVtZC5pbiIKK0BAIC0zMjUsNyArMzI1LDcgQEAgaWYoRkxCX0JJTkFSWSkKKyAgICAgICApCisgICAgIGluc3RhbGwoRklMRVMgJHtGTEJfU1lTVEVNRF9TQ1JJUFR9IERFU1RJTkFUSU9OIC9saWIvc3lzdGVtZC9zeXN0ZW0pCisgICAgIGluc3RhbGwoRElSRUNUT1JZIERFU1RJTkFUSU9OICR7RkxCX0lOU1RBTExfQ09ORkRJUn0pCistICBlbHNlaWYoSVNfRElSRUNUT1JZIC91c3Ivc2hhcmUvdXBzdGFydCkKKysgIGVsc2VpZihJU19ESVJFQ1RPUlkgL3Vzci9zaGFyZS91cHN0YXJ0IE9SIEZMQl9VUFNUQVJUKQorICAgICBzZXQoRkxCX1VQU1RBUlRfU0NSSVBUICIke1BST0pFQ1RfU09VUkNFX0RJUn0vaW5pdC8ke0ZMQl9PVVRfTkFNRX0uY29uZiIpCisgICAgIGNvbmZpZ3VyZV9maWxlKAorICAgICAgICIke1BST0pFQ1RfU09VUkNFX0RJUn0vaW5pdC91cHN0YXJ0LmluIgorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtNzAsNiArNzAsOCBAQCBvcHRpb24oRkxCX1JFQ09SRF9BQ0NFU1NPUiAgICAiRW5hYmxlIHJlCisgb3B0aW9uKEZMQl9TWVNURU1fU1RSUFRJTUUgICAgIlVzZSBzdHJwdGltZSBpbiBzeXN0ZW0gbGliYyIgIFllcykKKyBvcHRpb24oRkxCX1NUQVRJQ19DT05GICAgICAgICAiQnVpbGQgYmluYXJ5IHVzaW5nIHN0YXRpYyBjb25maWd1cmF0aW9uIikKKyBvcHRpb24oRkxCX1NUUkVBTV9QUk9DRVNTT1IgICAiRW5hYmxlIFN0cmVhbSBQcm9jZXNzb3IiICAgICAgWWVzKQorK29wdGlvbihGTEJfU1lTVEVNRCAgICAgICAgICAgICJFbmFibGUgc3lzdGVtZCBpbml0IHN5c3RlbSIgICBObykKKytvcHRpb24oRkxCX1VQU1RBUlQgICAgICAgICAgICAiRW5hYmxlIHVwc3RhcnQgaW5pdCBzeXN0ZW0iICAgTm8pCisgb3B0aW9uKEZMQl9DT1JPX1NUQUNLX1NJWkUgICAgIlNldCBjb3JvdXRpbmUgc3RhY2sgc2l6ZSIpCisgCisgIyBNZXRyaWNzOiBFeHBlcmltZW50YWwgRmVhdHVyZSwgZGlzYWJsZWQgYnkgZGVmYXVsdCBvbiAwLjEyIHNlcmllcwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2ZsdWVudGJpdC9mbHVlbnRiaXQvamVtYWxsb2MucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZmx1ZW50Yml0L2ZsdWVudGJpdC9qZW1hbGxvYy5wYXRjaAppbmRleCBhYmFmOTJjLi42N2IzMzk3IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZmx1ZW50Yml0L2ZsdWVudGJpdC9qZW1hbGxvYy5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZmx1ZW50Yml0L2ZsdWVudGJpdC9qZW1hbGxvYy5wYXRjaApAQCAtMywxNiArMywxNCBAQAogU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZwogCi1JbmRleDogZmx1ZW50LWJpdC0wLjEyLjEvQ01ha2VMaXN0cy50eHQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBmbHVlbnQtYml0LTAuMTIuMS5vcmlnL0NNYWtlTGlzdHMudHh0Ci0rKysgZmx1ZW50LWJpdC0wLjEyLjEvQ01ha2VMaXN0cy50eHQKLUBAIC0zMjUsNyArMzI1LDcgQEAgaWYoRkxCX0pFTUFMTE9DIEFORCAke0NNQUtFX1NZU1RFTV9OQU1FfQorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtNTIzLDcgKzUyMyw3IEBAIGlmKEZMQl9KRU1BTExPQyBBTkQgJHtDTUFLRV9TWVNURU1fTkFNRX0KICAgICMgTGluayB0byBKZW1hbGxvYyBhcyBhbiBleHRlcm5hbCBkZXBlbmRlbmN5CiAgICBFeHRlcm5hbFByb2plY3RfQWRkKGplbWFsbG9jCi0gICAgIFNPVVJDRV9ESVIgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYi9qZW1hbGxvYwotLSAgICBDT05GSUdVUkVfQ09NTUFORCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbGliL2plbWFsbG9jL2NvbmZpZ3VyZSAke0FVVE9DT05GX0hPU1RfT1BUfSAtLXdpdGgtbGctcXVhbnR1bT0zIC0tZW5hYmxlLWNjLXNpbGVuY2UgLS1wcmVmaXg9PElOU1RBTExfRElSPgotKyAgICBDT05GSUdVUkVfQ09NTUFORCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbGliL2plbWFsbG9jL2NvbmZpZ3VyZSAtLXdpdGgtamVtYWxsb2MtcHJlZml4PWplXyAke0FVVE9DT05GX0hPU1RfT1BUfSAtLXdpdGgtbGctcXVhbnR1bT0zIC0tZW5hYmxlLWNjLXNpbGVuY2UgLS1wcmVmaXg9PElOU1RBTExfRElSPgorICAgICBTT1VSQ0VfRElSICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9saWIvamVtYWxsb2MtNS4yLjEKKy0gICAgQ09ORklHVVJFX0NPTU1BTkQgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYi9qZW1hbGxvYy01LjIuMS9jb25maWd1cmUgJHtBVVRPQ09ORl9IT1NUX09QVH0gLS13aXRoLWxnLXF1YW50dW09MyAtLWVuYWJsZS1jYy1zaWxlbmNlIC0tcHJlZml4PTxJTlNUQUxMX0RJUj4KKysgICAgQ09ORklHVVJFX0NPTU1BTkQgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYi9qZW1hbGxvYy01LjIuMS9jb25maWd1cmUgJHtBVVRPQ09ORl9IT1NUX09QVH0gLS13aXRoLWplbWFsbG9jLXByZWZpeD1qZV8gLS13aXRoLWxnLXF1YW50dW09MyAtLWVuYWJsZS1jYy1zaWxlbmNlIC0tcHJlZml4PTxJTlNUQUxMX0RJUj4KICAgICAgQ0ZMQUdTPS1zdGQ9Z251OTlcIC1XYWxsXCAtcGlwZVwgLWczXCAtTzNcIC1mdW5yb2xsLWxvb3BzCi0gICAgIEJVSUxEX0NPTU1BTkQgJHtNQUtFfQorICAgICBCVUlMRF9DT01NQU5EICQoTUFLRSkKICAgICAgSU5TVEFMTF9ESVIgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2ZsdWVudGJpdC9mbHVlbnRiaXRfMC4xMi4xOS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9mbHVlbnRiaXQvZmx1ZW50Yml0XzAuMTIuMTkuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MGFhNzEuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2ZsdWVudGJpdC9mbHVlbnRiaXRfMC4xMi4xOS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLVNVTU1BUlkgPSAiRmFzdCBkYXRhIGNvbGxlY3RvciBmb3IgRW1iZWRkZWQgTGludXgiCi1IT01FUEFHRSA9ICJodHRwOi8vZmx1ZW50Yml0LmlvIgotQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vZmx1ZW50L2ZsdWVudC1iaXQvaXNzdWVzIgotCi1TUkNfVVJJID0gImh0dHA6Ly9mbHVlbnRiaXQuaW8vcmVsZWFzZXMvMC4xMi9mbHVlbnQtYml0LSR7UFZ9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9qZW1hbGxvYy5wYXRjaCBcCi0gICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI3Yzg3MDgzMTJhYzkxMjJmYWFjZjllMmE0NzUxZWIzNCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyM2E4MTA4N2VkZjBlMmM2ZjJkNDk0MTFjNmE4MjMwOGFmYzUyMjRmNjdiYmFhNDU3MjljMDU3YWY2MmU5MjQxIgotCi1TID0gIiR7V09SS0RJUn0vZmx1ZW50LWJpdC0ke1BWfSIKLQotTElDRU5TRSA9ICJBcGFjaGUtMi4wIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MmVlNDExMTJhNDRmZTcwMTRkY2UzM2UyNjQ2OGJhOTMiCi0KLURFUEVORFMgPSAiemxpYiIKLUlOU0FORV9TS0lQXyR7UE59LWRldiArPSAiZGV2LWVsZiIKLQotaW5oZXJpdCBjbWFrZSBzeXN0ZW1kCi0KLUVYVFJBX09FQ01BS0UgPSAiLURHTlVfSE9TVD0ke0hPU1RfU1lTfSAtREZMQl9BTEw9T04gLURGTEJfVEQ9MSIKLQotIyBXaXRoIE5pbmphIGl0IGZhaWxzIHdpdGg6Ci0jIG5pbmphOiBlcnJvcjogYnVpbGQubmluamE6MTM0OiBiYWQgJC1lc2NhcGUgKGxpdGVyYWwgJCBtdXN0IGJlIHdyaXR0ZW4gYXMgJCQpCi1PRUNNQUtFX0dFTkVSQVRPUiA9ICJVbml4IE1ha2VmaWxlcyIKLQotU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInRkLWFnZW50LWJpdC5zZXJ2aWNlIgotCi1UQVJHRVRfQ0NfQVJDSF9hcHBlbmQgPSAiICR7U0VMRUNURURfT1BUSU1JWkFUSU9OfSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9mbHVlbnRiaXQvZmx1ZW50Yml0XzEuMy41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2ZsdWVudGJpdC9mbHVlbnRiaXRfMS4zLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkMTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9mbHVlbnRiaXQvZmx1ZW50Yml0XzEuMy41LmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiRmFzdCBMb2cgcHJvY2Vzc29yIGFuZCBGb3J3YXJkZXIiCitERVNDUklQVElPTiA9ICJGbHVlbnQgQml0IGlzIGEgZGF0YSBjb2xsZWN0b3IsIHByb2Nlc3NvciBhbmQgIFwKK2ZvcndhcmRlciBmb3IgTGludXguIEl0IHN1cHBvcnRzIHNldmVyYWwgaW5wdXQgc291cmNlcyBhbmQgXAorYmFja2VuZHMgKGRlc3RpbmF0aW9ucykgZm9yIHlvdXIgZGF0YS4gXAorIgorCitIT01FUEFHRSA9ICJodHRwOi8vZmx1ZW50Yml0LmlvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vZmx1ZW50L2ZsdWVudC1iaXQvaXNzdWVzIgorCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZWU0MTExMmE0NGZlNzAxNGRjZTMzZTI2NDY4YmE5MyIKK1NFQ1RJT04gPSAibmV0IgorCitTUkNfVVJJID0gImh0dHA6Ly9mbHVlbnRiaXQuaW8vcmVsZWFzZXMvMS4zL2ZsdWVudC1iaXQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2plbWFsbG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb3NzLWJ1aWxkLWluaXQtc3lzdGVtLWRldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsdGluLW5hbi5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjZlYWU2ZGZkMGE4NzRlNWRkMjcwYzM2ZTljNjhmNzQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUwMzdjNzZjODkyNjljOGRjNDAyN2EwOGU0NDJmZWZkMjc1MWIwZjFlMGY5YzM4ZjlhNGIxMmQ3ODFhOWM3ODkiCisKK1MgPSAiJHtXT1JLRElSfS9mbHVlbnQtYml0LSR7UFZ9IgorREVQRU5EUyA9ICJ6bGliIGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZnRzICIKKworSU5TQU5FX1NLSVBfJHtQTn0tZGV2ICs9ICJkZXYtZWxmIgorCisjIFVzZSBDTWFrZSAnVW5peCBNYWtlZmlsZXMnIGdlbmVyYXRvcgorT0VDTUFLRV9HRU5FUkFUT1IgPz0gIlVuaXggTWFrZWZpbGVzIgorCisjIEZsdWVudCBCaXQgYnVpbGQgb3B0aW9ucworIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBIb3N0IHJlbGF0ZWQgc2V0dXAKK0VYVFJBX09FQ01BS0UgKz0gIi1ER05VX0hPU1Q9JHtIT1NUX1NZU30gLURGTEJfQUxMPU9OIC1ERkxCX1REPTEiCisKKyMgRGlzYWJsZSBMdWFKSVQgYW5kIGZpbHRlcl9sdWEgc3VwcG9ydAorRVhUUkFfT0VDTUFLRSArPSAiLURGTEJfTFVBSklUPU9mZiAtREZMQl9GSUxURVJfTFVBPU9mZiAiCisKKyMgRGlzYWJsZSBMaWJyYXJ5IGFuZCBleGFtcGxlcworRVhUUkFfT0VDTUFLRSArPSAiLURGTEJfU0hBUkVEX0xJQj1PZmYgLURGTEJfRVhBTVBMRVM9T2ZmICIKKworRVhUUkFfT0VDTUFLRSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCctREZMQl9TWVNURU1EPU9uJywnJyxkKX0iCisKKyMgS2Fma2EgT3V0cHV0IHBsdWdpbiAoZGlzYWJsZWQgYnkgZGVmYXVsdCk6IG5vdGUgdGhhdCB3aGVuCisjIGVuYWJsaW5nIEthZmthIG91dHB1dCBwbHVnaW4sIHRoZSBiYWNrZW5kIGxpYnJhcnkgbGlicmRrYWZrYQorIyByZXF1aXJlcyAnb3BlbnNzbCcgYXMgYSBkZXBlbmRlbmN5LgorIworIyBERVBFTkRTICs9ICJvcGVuc3NsICIKKyMgRVhUUkFfT0VDTUFLRSArPSAiLURGTEJfT1VUX0tBRktBPU9uICIKKworaW5oZXJpdCBjbWFrZSBzeXN0ZW1kIGZlYXR1cmVzX2NoZWNrCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ0ZC1hZ2VudC1iaXQuc2VydmljZSIKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZCA9ICIgJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2dudXBsb3QvZ251cGxvdF81LjIuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9nbnVwbG90L2dudXBsb3RfNS4yLjguYmIKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2dudXBsb3QvZ251cGxvdF81LjIuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2dudXBsb3QvZ251cGxvdF81LjIuOC5iYgppbmRleCA4OTg2MjdiLi45MjZkODg1IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvZ251cGxvdC9nbnVwbG90XzUuMi4yLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9nbnVwbG90L2dudXBsb3RfNS4yLjguYmIKQEAgLTIyLDggKzIyLDggQEAKICAgICBmaWxlOi8vMDAwNC1BZGQtY29uZmlndXJlLW9wdGlvbi10by1maW5kLXF0NS1uYXRpdmUtdG9vbHMucGF0Y2ggXAogIgogCi1TUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI2MGFlZGQwODk5ODE2MDU5MzE5OTQ1OWRlYTg0NjdmZSIKLVNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImE0MTZkMjJmMDJiZGYzODczZWY4MmM1ZWI3ZjhlOTQxNDY3OTU4MTFlZjgwOGUxMmIwMzVhZGE4OGVmN2IxYTEiCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyZGY4NzY3YzczOTliZWU1N2E5NjI5NmQ0NmI0ZDVmYiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjYwYTY3NjRjY2Y0MDRhMTY2OGMxNDBmMTFjYzFmNjk5MjkwYWI3MGRhYTExNTFiYjU4ZmVkNjEzOWEyOGFjMzciCiBTUkNfVVJJW3F0cGxvdC5tZDVzdW1dID0gIjBhNDgxODg1YTQ5NjA5MmM3N2ViNDAxNzU0MGI1Y2Y2IgogU1JDX1VSSVtxdHBsb3Quc2hhMjU2c3VtXSA9ICI2ZGYzMTcxODNmZjYyY2M4MmYzZGNmODgyMDdhMjY3Y2Q2NDc4Y2I1MTQ3ZjU1ZDc1MzBjOTRmMWFkNWY0MTMyIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvaGF2ZWdlZC9oYXZlZ2VkXzEuOS42LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2hhdmVnZWQvaGF2ZWdlZF8xLjkuOC5iYgpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvaGF2ZWdlZC9oYXZlZ2VkXzEuOS42LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvaGF2ZWdlZC9oYXZlZ2VkXzEuOS44LmJiCmluZGV4IGU1YjliYzkuLjQwMzk1NmUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9oYXZlZ2VkL2hhdmVnZWRfMS45LjYuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2hhdmVnZWQvaGF2ZWdlZF8xLjkuOC5iYgpAQCAtNSw4ICs1LDggQEAKIExJQ0VOU0UgPSAiR1BMdjMiCiBMSUNfRklMRVNfQ0hLU1VNPSJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCiAKLSMgdjEuOS42Ci1TUkNSRVYgPSAiMTQ3MGE4MmE3Zjc5MTEwYzc5YmVlYTFjYTVmMmQzYjBmZDFhNDY2OCIKKyMgdjEuOS44CitTUkNSRVYgPSAiOGNkMDI2NjQ3MmFmZjU5ODIxNzE4YzQ0MTBlODBmMjg5NzgzMTBmOSIKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9qaXJrYS1oL2hhdmVnZWQuZ2l0IFwKICIKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvaGlyZWRpcy9maWxlcy8wMDAxLU1ha2VmaWxlLXJlbW92ZS1oYXJkY29kaW5nLW9mLUNDLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2hpcmVkaXMvZmlsZXMvMDAwMS1NYWtlZmlsZS1yZW1vdmUtaGFyZGNvZGluZy1vZi1DQy5wYXRjaAppbmRleCBmZWYyYmM3Li4xYWY1ZDI2IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvaGlyZWRpcy9maWxlcy8wMDAxLU1ha2VmaWxlLXJlbW92ZS1oYXJkY29kaW5nLW9mLUNDLnBhdGNoCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9oaXJlZGlzL2ZpbGVzLzAwMDEtTWFrZWZpbGUtcmVtb3ZlLWhhcmRjb2Rpbmctb2YtQ0MucGF0Y2gKQEAgLTExLDIyICsxMSwxOCBAQAogIE1ha2VmaWxlIHwgNSAtLS0tLQogIDEgZmlsZSBjaGFuZ2VkLCA1IGRlbGV0aW9ucygtKQogCi1kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQotaW5kZXggOGIwZjBjMi4uNjZhNDMxNyAxMDA2NDQKIC0tLSBhL01ha2VmaWxlCiArKysgYi9NYWtlZmlsZQotQEAgLTM0LDExICszNCw2IEBAIGRlZmluZSBSRURJU19URVNUX0NPTkZJRworQEAgLTM1LDEyICszNSw2IEBAIGRlZmluZSBSRURJU19URVNUX0NPTkZJRwogIGVuZGVmCiAgZXhwb3J0IFJFRElTX1RFU1RfQ09ORklHCiAgCiAtIyBGYWxsYmFjayB0byBnY2Mgd2hlbiAkQ0MgaXMgbm90IGluICRQQVRILgotLUNDOj0kKHNoZWxsIHNoIC1jICd0eXBlICQoQ0MpID4vZGV2L251bGwgMj4vZGV2L251bGwgJiYgZWNobyAkKENDKSB8fCBlY2hvIGdjYycpCistQ0M6PSQoc2hlbGwgc2ggLWMgJ3R5cGUgJCR7Q0MlJSAqfSA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmIGVjaG8gJChDQykgfHwgZWNobyBnY2MnKQorLUNYWDo9JChzaGVsbCBzaCAtYyAndHlwZSAkJHtDWFglJSAqfSA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmIGVjaG8gJChDWFgpIHx8IGVjaG8gZysrJykKIC1PUFRJTUlaQVRJT04/PS1PMwogLVdBUk5JTkdTPS1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVd3cml0ZS1zdHJpbmdzCi0tREVCVUc/PSAtZyAtZ2dkYgotIFJFQUxfQ0ZMQUdTPSQoT1BUSU1JWkFUSU9OKSAtZlBJQyAkKENGTEFHUykgJChXQVJOSU5HUykgJChERUJVRykgJChBUkNIKQotIFJFQUxfTERGTEFHUz0kKExERkxBR1MpICQoQVJDSCkKKy1ERUJVR19GTEFHUz89IC1nIC1nZ2RiCisgUkVBTF9DRkxBR1M9JChPUFRJTUlaQVRJT04pIC1mUElDICQoQ0ZMQUdTKSAkKFdBUk5JTkdTKSAkKERFQlVHX0ZMQUdTKQorIFJFQUxfTERGTEFHUz0kKExERkxBR1MpCiAgCi0tLSAKLTEuOS4xCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9oaXJlZGlzL2hpcmVkaXNfMC4xMy4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2hpcmVkaXMvaGlyZWRpc18wLjE0LjAuYmIKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2hpcmVkaXMvaGlyZWRpc18wLjEzLjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9oaXJlZGlzL2hpcmVkaXNfMC4xNC4wLmJiCmluZGV4IGZhZTMwZDcuLjI5ZjhkZTggMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9oaXJlZGlzL2hpcmVkaXNfMC4xMy4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9oaXJlZGlzL2hpcmVkaXNfMC4xNC4wLmJiCkBAIC01LDE0ICs1LDE1IEBACiBERVBFTkRTID0gInJlZGlzIgogCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kODRkNjU5YTM1YzY2NmQyMzIzM2U1NDUwM2FhZWE1MSIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9yZWRpcy9oaXJlZGlzO3Byb3RvY29sPWdpdDtyZXY9ZjU4ZGQyNDlkNmVkNDdhN2U4MzU0NjNjM2IwNDcyMjk3MjI4MWRiYiBcCitTUkNSRVYgPSAiNjg1MDMwNjUyY2Q5OGM1NDE0Y2U1NTRmZjViMzU2ZGZlODQzNzg3MCIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9yZWRpcy9oaXJlZGlzO3Byb3RvY29sPWdpdCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLU1ha2VmaWxlLXJlbW92ZS1oYXJkY29kaW5nLW9mLUNDLnBhdGNoIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiBpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCiAKLUVYVFJBX09FTUFLRSA9ICJQUkVGSVg9JHtwcmVmaXh9IgorRVhUUkFfT0VNQUtFID0gIlBSRUZJWD0ke3ByZWZpeH0gTElCUkFSWV9QQVRIPSR7YmFzZWxpYn0iCiAKICMgQnkgZGVmYXVsdCBJTlNUQUxMIHZhcmlhYmxlIGluIE1ha2VmaWxlIGlzIGVxdWFsIHRvICdjcCAtYScsIHdoaWNoIHByZXNlcnZlcwogIyBvd25lcnNoaXAgYW5kIGNhdXNlcyBob3N0LXVzZXItY29udGFtaW5hdGlvbiBRQSBpc3N1ZS4KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9pbmRlbnQvaW5kZW50LzAwMDEtRml4LWJ1aWxkcy13aXRoLXJlY2VudC1nZXR0ZXh0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2luZGVudC9pbmRlbnQvMDAwMS1GaXgtYnVpbGRzLXdpdGgtcmVjZW50LWdldHRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4ZGZiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9pbmRlbnQvaW5kZW50LzAwMDEtRml4LWJ1aWxkcy13aXRoLXJlY2VudC1nZXR0ZXh0LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gMzM0OTgxMmRlMDU5OGNhNzcyMmUwYjdjN2I3ZTVkNDhiZDc5YmVhOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBEZWMgMjAxOSAxNDowMToxOCArMDEwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGRzIHdpdGggcmVjZW50IGdldHRleHQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNTQ4ZmVhNy4uY2YwMWM1ZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEsNyArMSw3IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgQVVUT01BS0VfT1BUSU9OUyA9IG5vLXRleGluZm8udGV4CisgCistU1VCRElSUyA9IGludGwgc3JjIGRvYyBwbyBtYW4KKytTVUJESVJTID0gc3JjIGRvYyBwbyBtYW4KKyAKKyBCVUlMVF9TT1VSQ0VTID0gCisgCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvaW5kZW50L2luZGVudF8yLjIuMTIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvaW5kZW50L2luZGVudF8yLjIuMTIuYmIKaW5kZXggZjI4OTFkZi4uZjhkNjNkNCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2luZGVudC9pbmRlbnRfMi4yLjEyLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9pbmRlbnQvaW5kZW50XzIuMi4xMi5iYgpAQCAtMTQsNyArMTQsOCBAQAogU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtaW5kZW50LmMtY29ycmVjdC10aGUtY2hlY2stZm9yLWxvY2FsZS5oLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtTWFrZWZpbGUuYW0tcmVtb3ZlLXJlZ3Jlc3Npb24tZGlyLnBhdGNoIFwKLSIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkcy13aXRoLXJlY2VudC1nZXR0ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgIgogU1JDX1VSSVttZDVzdW1dID0gIjQ3NjRiNmFjOThmNjY1NGEzNWRhMTE3YjhlNWU4ZTE0IgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3N2Q2OGMwMjExNTE1NDU5Yjg4MTIxMThkNjA2ODEyZTMwMDA5N2NmYWMwYjRlOWZiMzQ3MjY2NDI2M2JiOGIiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9sY2Rwcm9jL2xjZHByb2MvMDAwMS1GaXgtcGFyYWxsZWwtYnVpbGQtZml4LXBvcnQtaW50ZXJuYWwtbWFrZS1kZXBlbmRlbmNpLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xjZHByb2MvbGNkcHJvYy8wMDAxLUZpeC1wYXJhbGxlbC1idWlsZC1maXgtcG9ydC1pbnRlcm5hbC1tYWtlLWRlcGVuZGVuY2kucGF0Y2gKaW5kZXggODUwNWVhMy4uZjZhNzk1NiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xjZHByb2MvbGNkcHJvYy8wMDAxLUZpeC1wYXJhbGxlbC1idWlsZC1maXgtcG9ydC1pbnRlcm5hbC1tYWtlLWRlcGVuZGVuY2kucGF0Y2gKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xjZHByb2MvbGNkcHJvYy8wMDAxLUZpeC1wYXJhbGxlbC1idWlsZC1maXgtcG9ydC1pbnRlcm5hbC1tYWtlLWRlcGVuZGVuY2kucGF0Y2gKQEAgLTEsMTcgKzEsMTcgQEAKLUZyb20gNjdkODA4Yjg3Mzk4MTdjMTIyYmVkOGJhMWE4MzA4ZDAxY2I1YWQwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gYTIwZmVlZTQ5NjNiYzM4OTc1ZmJhZjQ0YmJlODVhMzE4MjVmNTlkYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiBEYXRlOiBTYXQsIDYgQXByIDIwMTkgMTc6Mjg6MjggLTA3MDAKLVN1YmplY3Q6IFtQQVRDSF0gRml4IHBhcmFsbGVsIGJ1aWxkIChmaXggcG9ydC1pbnRlcm5hbCBtYWtlIGRlcGVuZGVuY2llcykgb24KLSBtYW55IGNvcmVzCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBGaXggcGFyYWxsZWwgYnVpbGQgKGZpeCBwb3J0LWludGVybmFsIG1ha2UgZGVwZW5kZW5jaWVzKQorIG9uIG1hbnkgY29yZXMKIAotVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2xjZHByb2MvbGNkcHJvYy9wdWxsLzE0Ml0KIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CiAtLS0KICBzZXJ2ZXIvZHJpdmVycy9NYWtlZmlsZS5hbSB8IDQgKystLQogIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9zZXJ2ZXIvZHJpdmVycy9NYWtlZmlsZS5hbSBiL3NlcnZlci9kcml2ZXJzL01ha2VmaWxlLmFtCi1pbmRleCAwYzIzYTliLi42Nzc3MDQ3IDEwMDY0NAoraW5kZXggZTA4ZjJiMmQuLjRmZDJlM2YxIDEwMDY0NAogLS0tIGEvc2VydmVyL2RyaXZlcnMvTWFrZWZpbGUuYW0KICsrKyBiL3NlcnZlci9kcml2ZXJzL01ha2VmaWxlLmFtCiBAQCAtNDcsMTEgKzQ3LDExIEBAIEN3TG54X0xEQUREID0gICAgICAgIGxpYkxDRC5hIGxpYmJpZ251bS5hCkBAIC0yOSw1ICsyOSw1IEBACiAgaW1vbl9MREFERCA9ICAgICAgICAgbGliTENELmEgbGliYmlnbnVtLmEKICBpbW9ubGNkX0xEQUREID0gICAgICBsaWJMQ0QuYQogLS0gCi0yLjIxLjAKKzIuMjQuMQogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGNkcHJvYy9sY2Rwcm9jLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgtZGVmaW5pdGlvbi5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9sY2Rwcm9jL2xjZHByb2MvMDAwMi1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODY2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGNkcHJvYy9sY2Rwcm9jLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIGQ0NDdhMDVlZTU2MGJhNTg5NGQyZWQ0Y2Q5M2QwNDc1YzJmM2MwOGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxNyBEZWMgMjAxOSAxNzozOTozMiAtMDgwMAorU3ViamVjdDogW1BBVENIIDIvM10gSW5jbHVkZSA8bGltaXRzLmg+IGZvciBQQVRIX01BWCBkZWZpbml0aW9uCisKK211c2wgbGliYyBleHBvc2VzIHRoZSBtaXNzaW5nIGluY2x1ZGUKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9sY2Rwcm9jL2xjZHByb2MvcHVsbC8xNDJdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc2VydmVyL2RyaXZlcnMvaGlkcmF3X2xpYi5jICB8IDEgKworIHNlcnZlci9kcml2ZXJzL2xpbnV4X2lucHV0LmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc2VydmVyL2RyaXZlcnMvaGlkcmF3X2xpYi5jIGIvc2VydmVyL2RyaXZlcnMvaGlkcmF3X2xpYi5jCitpbmRleCA0OWIwM2YyMC4uM2I1MWYyNzkgMTAwNjQ0CistLS0gYS9zZXJ2ZXIvZHJpdmVycy9oaWRyYXdfbGliLmMKKysrKyBiL3NlcnZlci9kcml2ZXJzL2hpZHJhd19saWIuYworQEAgLTgsNiArOCw3IEBACisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KK2RpZmYgLS1naXQgYS9zZXJ2ZXIvZHJpdmVycy9saW51eF9pbnB1dC5jIGIvc2VydmVyL2RyaXZlcnMvbGludXhfaW5wdXQuYworaW5kZXggNWI5MTRkNGMuLjZmY2ZjNTkxIDEwMDY0NAorLS0tIGEvc2VydmVyL2RyaXZlcnMvbGludXhfaW5wdXQuYworKysrIGIvc2VydmVyL2RyaXZlcnMvbGludXhfaW5wdXQuYworQEAgLTUsNiArNSw3IEBACisgCisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xjZHByb2MvbGNkcHJvYy8wMDAzLUZpeC1ub24teDg2LXBsYXRmb3Jtcy1vbi1tdXNsLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xjZHByb2MvbGNkcHJvYy8wMDAzLUZpeC1ub24teDg2LXBsYXRmb3Jtcy1vbi1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOWU5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGNkcHJvYy9sY2Rwcm9jLzAwMDMtRml4LW5vbi14ODYtcGxhdGZvcm1zLW9uLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA3ZmQxNDRmMTAxZmE1YzkzMTZkMzQ2OGVkMjZmNTU2MjlhZmUxMzA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMTcgRGVjIDIwMTkgMTc6NTU6NTQgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIEZpeCBub24geDg2IHBsYXRmb3JtcyBvbiBtdXNsCisKK011c2wgb25seSBzcGVjaWZpZXMgaW4vb3V0YiBmb3IgeDg2L3g4Ni4gVXNlIHRoZSBmYWxsYmFjayBwYXRoIGluIGNhc2UKK211c2wgaXMgdXNlZC4KKworVGhpcyBzaG91bGQgZmFpbCBjb21waWxhdGlvbiBkdXJpbmcgdGhlIGxpbmtpbmcgc3RhZ2UgYnV0IGZvciBzb21lIHJlYXNvbgorZG9lcyBub3QuIFdpbGwgZG8gaWYgLVdlcnJvcj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiBpcyBzcGVjaWZpZWQuCisKK09yaWdpbmFsIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVud3J0L3BhY2thZ2VzL2Jsb2IvbWFzdGVyL3V0aWxzL2xjZHByb2MvcGF0Y2hlcy8xMTAtaW4tb3V0Yi5wYXRjaAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzZXJ2ZXIvZHJpdmVycy9wb3J0LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zZXJ2ZXIvZHJpdmVycy9wb3J0LmggYi9zZXJ2ZXIvZHJpdmVycy9wb3J0LmgKK2luZGV4IGM1ODRjZDRlLi5iZGUyMzViMyAxMDA2NDQKKy0tLSBhL3NlcnZlci9kcml2ZXJzL3BvcnQuaAorKysrIGIvc2VydmVyL2RyaXZlcnMvcG9ydC5oCitAQCAtOTQsNyArOTQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwb3J0X2RlbnlfbXVsdGlwbGUodW5zaWduZWQgc2hvcnQgcG9ydCwgdW5zaWduZWQgc2hvcnQgY291bnQpOworIC8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpbnV4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qICBVc2UgaW9wZXJtLCBpbmIgYW5kIG91dGIgaW4gPHN5cy9pby5oPiAoTGludXgpICovCisgLyogIEFuZCBpb3BsIGZvciBoaWdoZXIgYWRkcmVzc2VzIG9mIFBDSSBMUFQgY2FyZHMgKi8KKy0jaWYgZGVmaW5lZCBIQVZFX0lPUEVSTQorKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykgfHwgKGRlZmluZWQoX194ODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyAKKyAvKiBHbGliYzIgYW5kIEdsaWJjMSAqLworICMgaWZkZWYgSEFWRV9TWVNfSU9fSAorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xjZHByb2MvbGNkcHJvY19naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGNkcHJvYy9sY2Rwcm9jX2dpdC5iYgppbmRleCA3ZGRjNTVmLi4yNzViOTg0IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGNkcHJvYy9sY2Rwcm9jX2dpdC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGNkcHJvYy9sY2Rwcm9jX2dpdC5iYgpAQCAtNywyMiArNywyNSBAQAogREVQRU5EUyA9ICJuY3Vyc2VzIGxpcmMiCiAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL1JFQURNRS5tZDtiZWdpbmxpbmU9MTA3O21kNT01YzkyN2NlMTc0MmQ2ZDVjZGRjNDViN2FkNjIzMGY3NSIKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1JFQURNRS5tZDtiZWdpbmxpbmU9MTA3O21kNT01ZGIzOTJmMDQzMjUzYTJkNjRiMTczNzA2OGNlNmI1OCIKIAotQkFTRVBWID0gIjAuNS45IgotUFYgPSAiJHtCQVNFUFZ9K2dpdCR7U1JDUFZ9IgotU1JDUkVWID0gImUwODU0NmMxM2E0MTU3ZWQ5OGNkNGE4ZTkwODZlN2FjZDY2ZjkzYzAiCitQViA9ICIwLjUuOStnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICIzYTNkNjIyZDliYjc0YzQ0ZmE2N2JjMjA1NzM3NTFhMjA3NTE0MTM0IgogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xjZHByb2MvbGNkcHJvYyBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1wYXJhbGxlbC1idWlsZC1maXgtcG9ydC1pbnRlcm5hbC1tYWtlLWRlcGVuZGVuY2kucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtRml4LW5vbi14ODYtcGxhdGZvcm1zLW9uLW11c2wucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZAogCi1MQ0RfRFJJVkVSUyA/PSAiYWxsLCFpcm1hbiwhc3ZnYSIKLUxDRF9EUklWRVJTX2FwcGVuZF9hYXJjaDY0ID0gIiwhc2VyaWFsVkZEIgotTENEX0RSSVZFUlNfYXBwZW5kX2FybSA9ICIsIXNlcmlhbFZGRCIKK0xDRF9EUklWRVJTID89ICJhbGwsIWlybWFuLCFzdmdhJHtTRVJJQUxWRkR9IgorU0VSSUFMVkZEID89ICIiCitTRVJJQUxWRkRfbGliYy1tdXNsID0gIiwhc2VyaWFsVkZEIgorU0VSSUFMVkZEX2xpYmMtbXVzbF94ODYgPSAiIgorU0VSSUFMVkZEX2xpYmMtbXVzbF94ODYtNjQgPSAiIgogCiBMQ0RfREVGQVVMVF9EUklWRVIgPz0gImN1cnNlcyIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmJsb2NrZGV2L2xpYmJsb2NrZGV2XzIuMjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGliYmxvY2tkZXYvbGliYmxvY2tkZXZfMi4yMy5iYgppbmRleCA3NjE2MTlkLi4zZjRlZWMyIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGliYmxvY2tkZXYvbGliYmxvY2tkZXZfMi4yMy5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGliYmxvY2tkZXYvbGliYmxvY2tkZXZfMi4yMy5iYgpAQCAtMTcsNyArMTcsNyBAQAogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXN0LXBhY2thZ2VzICR7bGliZGlyfS9weXRob24zLjcvc2l0ZS1wYWNrYWdlcyIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vcHl0aG9uMi43L2Rpc3QtcGFja2FnZXMgJHtsaWJkaXJ9L3B5dGhvbjMuKi9zaXRlLXBhY2thZ2VzIgogCiBQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uMyBsdm0gZG0ga21vZCBwYXJ0ZWQgZnMgZXNjcm93IGJ0cmZzIGNyeXB0byBtZHJhaWQga2JkIG1wYXRoIG52ZGltbSIKIFBBQ0tBR0VDT05GSUdbcHl0aG9uM10gPSAiLS13aXRoLXB5dGhvbjMsIC0td2l0aG91dC1weXRob24zLCxweXRob24zIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmNlYy9saWJjZWMvMDAwMS1DaGVja1BsYXRmb3JtU3VwcG9ydC5jbWFrZS1Eby1ub3QtaGFyZGNvZGUtbGliLXBhdGgucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGliY2VjL2xpYmNlYy8wMDAxLUNoZWNrUGxhdGZvcm1TdXBwb3J0LmNtYWtlLURvLW5vdC1oYXJkY29kZS1saWItcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWNiZmNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmNlYy9saWJjZWMvMDAwMS1DaGVja1BsYXRmb3JtU3VwcG9ydC5jbWFrZS1Eby1ub3QtaGFyZGNvZGUtbGliLXBhdGgucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA5NWQ0ZGYzYjcxMzkyNWUyYzQ4OTRhMmU0ZDUwYjA2ZGY4NjFkOWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggRGVjIDIwMTkgMjM6Mzc6NDAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2tQbGF0Zm9ybVN1cHBvcnQuY21ha2U6IERvIG5vdCBoYXJkY29kZSBsaWIgcGF0aAorCitVc2luZyBDTUFLRV9JTlNUQUxMX0xJQkRJUiBlbnN1cmVzIHRoYXQgd2UgY2FuIGJ1aWxkIGZvciBtdWx0aWxpYiBlbnYKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2xpYmNlYy9jbWFrZS9DaGVja1BsYXRmb3JtU3VwcG9ydC5jbWFrZSB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpYmNlYy9jbWFrZS9DaGVja1BsYXRmb3JtU3VwcG9ydC5jbWFrZSBiL3NyYy9saWJjZWMvY21ha2UvQ2hlY2tQbGF0Zm9ybVN1cHBvcnQuY21ha2UKK2luZGV4IDJkNzEwMmYuLjU1ZTc4ZjggMTAwNjQ0CistLS0gYS9zcmMvbGliY2VjL2NtYWtlL0NoZWNrUGxhdGZvcm1TdXBwb3J0LmNtYWtlCisrKysgYi9zcmMvbGliY2VjL2NtYWtlL0NoZWNrUGxhdGZvcm1TdXBwb3J0LmNtYWtlCitAQCAtMjI0LDE2ICsyMjQsMTYgQEAgZWxzZSgpCisgCisgICAgICAgaWYgKCR7UFlUSE9OX01BSk9SX1ZFUlNJT059IEVRVUFMIDIpCisgICAgICAgICBpbnN0YWxsKFRBUkdFVFMgICAgICR7U1dJR19NT0RVTEVfY2VjX1JFQUxfTkFNRX0KKy0gICAgICAgICAgICAgICAgREVTVElOQVRJT04gbGliL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059LyR7UFlUSE9OX1BLR19ESVJ9LyR7UFlUSE9OX0xJQl9JTlNUQUxMX1BBVEh9L2NlYykKKysgICAgICAgICAgICAgICAgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0vJHtQWVRIT05fUEtHX0RJUn0vJHtQWVRIT05fTElCX0lOU1RBTExfUEFUSH0vY2VjKQorICAgICAgICAgaW5zdGFsbChGSUxFUyAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L3NyYy9saWJjZWMvY2VjLnB5CistICAgICAgICAgICAgICAgIERFU1RJTkFUSU9OIGxpYi9weXRob24ke1BZVEhPTl9WRVJTSU9OfS8ke1BZVEhPTl9QS0dfRElSfSkKKysgICAgICAgICAgICAgICAgREVTVElOQVRJT04gbCR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9L3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059LyR7UFlUSE9OX1BLR19ESVJ9KQorICAgICAgICAgaW5zdGFsbChGSUxFUyAke0NNQUtFX1NPVVJDRV9ESVJ9L3NyYy9saWJjZWMvY21ha2UvX19pbml0X18ucHkKKy0gICAgICAgICAgICAgICAgREVTVElOQVRJT04gbGliL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059LyR7UFlUSE9OX1BLR19ESVJ9L2NlYykKKysgICAgICAgICAgICAgICAgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0vJHtQWVRIT05fUEtHX0RJUn0vY2VjKQorICAgICAgIGVsc2UoKQorICAgICAgICAgaW5zdGFsbChUQVJHRVRTICAgICAke1NXSUdfTU9EVUxFX2NlY19SRUFMX05BTUV9CistICAgICAgICAgICAgICAgIERFU1RJTkFUSU9OIGxpYi9weXRob24ke1BZVEhPTl9WRVJTSU9OfS8ke1BZVEhPTl9QS0dfRElSfS8ke1BZVEhPTl9MSUJfSU5TVEFMTF9QQVRIfSkKKysgICAgICAgICAgICAgICAgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0vJHtQWVRIT05fUEtHX0RJUn0vJHtQWVRIT05fTElCX0lOU1RBTExfUEFUSH0pCisgICAgICAgICBpbnN0YWxsKEZJTEVTICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vc3JjL2xpYmNlYy9jZWMucHkKKy0gICAgICAgICAgICAgICAgREVTVElOQVRJT04gbGliL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059LyR7UFlUSE9OX1BLR19ESVJ9KQorKyAgICAgICAgICAgICAgICBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTElCRElSfS9weXRob24ke1BZVEhPTl9WRVJTSU9OfS8ke1BZVEhPTl9QS0dfRElSfSkKKyAgICAgICBlbmRpZigpCisgICAgIGVuZGlmKCkKKyAgIGVuZGlmKCkKKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9saWJjZWMvbGliY2VjX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9saWJjZWMvbGliY2VjX2dpdC5iYgppbmRleCBlYWY2YjliLi44ZDVhODI0IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGliY2VjL2xpYmNlY19naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmNlYy9saWJjZWNfZ2l0LmJiCkBAIC0xMyw3ICsxMyw4IEBACiAKIFNSQ1JFViA9ICIzYmJkNDMyMTYxODUwM2QxNDAwODM4N2E3MmZhYmI2NzQzODc4ODMxIgogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL1B1bHNlLUVpZ2h0L2xpYmNlYy5naXQgXAotIgorICAgICAgICAgICBmaWxlOi8vMDAwMS1DaGVja1BsYXRmb3JtU3VwcG9ydC5jbWFrZS1Eby1ub3QtaGFyZGNvZGUtbGliLXBhdGgucGF0Y2ggXAorICAgICAgICAgICIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmltb2JpbGVkZXZpY2UvbGlicGxpc3RfMi4wLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGliaW1vYmlsZWRldmljZS9saWJwbGlzdF8yLjEuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGliaW1vYmlsZWRldmljZS9saWJwbGlzdF8yLjAuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmltb2JpbGVkZXZpY2UvbGlicGxpc3RfMi4xLjAuYmIKaW5kZXggNDNjMWZkNS4uNDhkZWM0NyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmltb2JpbGVkZXZpY2UvbGlicGxpc3RfMi4wLjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmltb2JpbGVkZXZpY2UvbGlicGxpc3RfMi4xLjAuYmIKQEAgLTgsNyArOCw3IEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUKIAotU1JDUkVWID0gIjYyZWM4MDQ3MzY0MzVmYTM0ZTM3ZTY2ZTIyOGUxN2UyYWFjZWUxZDciCitTUkNSRVYgPSAiM2RmMDJkNGQwZTkwMDg3NzFlODYyMmZkYzEwZGU4MzMzYjNmMGQ4NSIKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9saWJpbW9iaWxlZGV2aWNlL2xpYnBsaXN0O3Byb3RvY29sPWh0dHBzIFwKICAgICAgICAgICAgIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGlibGlnaHRtb2RidXMvbGlibGlnaHRtb2RidXMvMDAwMS1jbWFrZS1Vc2UtR05VSW5zdGFsbERpcnMtaW5zdGVhZC1vZi1oYXJkY29kaW5nLWxpYi1wLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmxpZ2h0bW9kYnVzL2xpYmxpZ2h0bW9kYnVzLzAwMDEtY21ha2UtVXNlLUdOVUluc3RhbGxEaXJzLWluc3RlYWQtb2YtaGFyZGNvZGluZy1saWItcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFiNDEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmxpZ2h0bW9kYnVzL2xpYmxpZ2h0bW9kYnVzLzAwMDEtY21ha2UtVXNlLUdOVUluc3RhbGxEaXJzLWluc3RlYWQtb2YtaGFyZGNvZGluZy1saWItcC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDA2NmM0OTE1OGE3MWVhNzc1OThjOWUxYWUxNmJiYTYzZDZhYzZiYjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBEZWMgMjAxOSAyMzo0MTozNSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjbWFrZTogVXNlIEdOVUluc3RhbGxEaXJzIGluc3RlYWQgb2YgaGFyZGNvZGluZyBsaWIgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL0phY2FqYWNrL2xpYmxpZ2h0bW9kYnVzL3B1bGwvMTJdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgQ01ha2VMaXN0cy50eHQgfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CitpbmRleCBjZTZjYzg4Li5iZWU4M2FhIDEwMDY0NAorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtMjQyLDE0ICsyNDIsMTQgQEAgaWYgKCBERUZJTkVEIEFWUiApCisgCSkKKyBlbmRpZiggKQorIAorLQorK2luY2x1ZGUoR05VSW5zdGFsbERpcnMpCisgI0luc3RhbGxhdGlvbgorIGluc3RhbGwoIAorIAlUQVJHRVRTIGxpZ2h0bW9kYnVzCistCUFSQ0hJVkUgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2xpYi8iCisrCUFSQ0hJVkUgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9LyIKKyApCisgCisgI0luc3RhbGwgaGVhZGVycworIGluc3RhbGwoCisgCURJUkVDVE9SWSAiJHtDTUFLRV9TT1VSQ0VfRElSfS9pbmNsdWRlLyIgREVTVElOQVRJT04gIiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9L2luY2x1ZGUvIiBGSUxFU19NQVRDSElORyBQQVRURVJOICIqLmgiCistKQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrKQorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmxpZ2h0bW9kYnVzL2xpYmxpZ2h0bW9kYnVzXzIuMC4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYmxpZ2h0bW9kYnVzL2xpYmxpZ2h0bW9kYnVzXzIuMC4yLmJiCmluZGV4IDFlMzVmMDguLjdmYzU5OTcgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9saWJsaWdodG1vZGJ1cy9saWJsaWdodG1vZGJ1c18yLjAuMi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGlibGlnaHRtb2RidXMvbGlibGlnaHRtb2RidXNfMi4wLjIuYmIKQEAgLTcsNyArNyw5IEBACiAKIGluaGVyaXQgY21ha2UgcGtnY29uZmlnCiAKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9KYWNhamFjay9saWJsaWdodG1vZGJ1cy5naXQ7cHJvdG9jb2w9aHR0cHMiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vSmFjYWphY2svbGlibGlnaHRtb2RidXMuZ2l0O3Byb3RvY29sPWh0dHBzIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY21ha2UtVXNlLUdOVUluc3RhbGxEaXJzLWluc3RlYWQtb2YtaGFyZGNvZGluZy1saWItcC5wYXRjaCBcCisgICAgICAgICAgIgogU1JDUkVWID0gIjU5ZDJiNDA1Zjk1NzAxZTViMDQzMjY1ODk3ODZkYmI0M2NlNDllODEiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGlicWIvbGlicWJfMS4wLjUuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGlicWIvbGlicWJfMS4wLjUuYmIKaW5kZXggYjIwNTE4Ni4uODI1MDNhMSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYnFiL2xpYnFiXzEuMC41LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9saWJxYi9saWJxYl8xLjAuNS5iYgpAQCAtMjIsOSArMjIsMTMgQEAKICMgV09SS0RJUi9saWJxYi8xLjAuMytnaXRBVVRPSU5DK2MyMzUyODRiNWYtcjAvcmVjaXBlLXN5c3Jvb3QtbmF0aXZlL3Vzci9iaW4vaTU4Ni1vZS1saW51eC8uLi8uLi9saWJleGVjL2k1ODYtb2UtbGludXgvZ2NjL2k1ODYtb2UtbGludXgvOC4xLjAvbGQ6IGVycm9yOiBjb25mdGVzdC5sZDogU0VDVElPTlMgc2VlbiBhZnRlciBvdGhlciBpbnB1dCBmaWxlczsgdHJ5IC1ULy0tc2NyaXB0CiAjIFdPUktESVIvbGlicWIvMS4wLjMrZ2l0QVVUT0lOQytjMjM1Mjg0YjVmLXIwL3JlY2lwZS1zeXNyb290LW5hdGl2ZS91c3IvYmluL2k1ODYtb2UtbGludXgvLi4vLi4vbGliZXhlYy9pNTg2LW9lLWxpbnV4L2djYy9pNTg2LW9lLWxpbnV4LzguMS4wL2xkOiBpbnRlcm5hbCBlcnJvciBpbiB3cml0ZV9zZWN0aW9ucywgYXQgLi4vLi4vZ29sZC9yZWxvYy5jYzo3OTEKICMgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCi1FWFRSQV9PRUNPTkZfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICcgLS1lbmFibGUtbm9zZWN0aW9uLWZhbGxiYWNrJywgJycsIGQpfSIKK05PU0VDVElPTl9GQUxMQkFDSyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnLS1lbmFibGUtbm9zZWN0aW9uLWZhbGxiYWNrJywgJycsIGQpfSIKK05PU0VDVElPTl9GQUxMQkFDS190b29sY2hhaW4tY2xhbmdfbWlwczY0ID0gIi0tZW5hYmxlLW5vc2VjdGlvbi1mYWxsYmFjayIKKworRVhUUkFfT0VDT05GICs9ICIke05PU0VDVElPTl9GQUxMQkFDS30iCiAKIENGTEFHUyArPSAiLXB0aHJlYWQgLURfUkVFTlRSQU5UIgorCiBkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKICAgICAoIGNkICR7U30KICAgICAke1N9L2F1dG9nZW4uc2ggKQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL2xpYnN0YXRncmFiL2xpYnN0YXRncmFiXzAuOTIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGlic3RhdGdyYWIvbGlic3RhdGdyYWJfMC45Mi5iYgppbmRleCA0ZWRlM2M4Li5jNjFkN2M5IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGlic3RhdGdyYWIvbGlic3RhdGdyYWJfMC45Mi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbGlic3RhdGdyYWIvbGlic3RhdGdyYWJfMC45Mi5iYgpAQCAtMTcsNiArMTcsMTEgQEAKICMgUGVybDUgaXMgZm9yIHRlc3RzIG9ubHkKIEVYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtcGVybDUgLS13aXRoLW1udHRhYj0vcHJvYy9tb3VudHMiCiAKKyMgdXNlIHdpdGggY2F1dGlvbiAtIGRlZmF1bHQgcHJvcGVydGllcyBhcmUgY29uZmlndXJlZCB0byB0cmFjZQorUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbG9nNGNwbHVzXSA9ICItLXdpdGgtbG9nNGNwbHVzLC0td2l0aG91dC1sb2c0Y3BsdXMsbG9nNGNwbHVzIgorUEFDS0FHRUNPTkZJR1tsb2dnaW5nXSA9ICItLWVuYWJsZS1sb2dnaW5nLC0tZGlzYWJsZS1sb2dnaW5nLCIKKwogaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCiAKIEZJTEVTX3N0YXRncmFiID0gIiR7YmluZGlyfS9zdGF0Z3JhYiIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9tb3pqcy9tb3pqc182MC41LjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvbW96anMvbW96anNfNjAuNS4yLmJiCmluZGV4IDQxYTc5ZGEuLmY1MmJjY2EgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9tb3pqcy9tb3pqc182MC41LjIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL21vempzL21vempzXzYwLjUuMi5iYgpAQCAtNTYsNyArNTYsNyBAQAogIgogCiAjIFdpdGhvdXQgdGhpcywgSlNfSW5pdCgpIHdpbGwgZmFpbCBmb3IgbWlwczY0LgotRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjQgPSAiIC0td2l0aC1pbnRsLWFwaT1idWlsZCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwc2FyY2ggPSAiIC0td2l0aC1pbnRsLWFwaT1idWlsZCIKIAogRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzYXJjaCA9ICIgLS1kaXNhYmxlLWlvbiIKIEVYVFJBX09FQ09ORl9hcHBlbmRfcmlzY3Y2NCA9ICIgLS1kaXNhYmxlLWlvbiIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9vc3RyZWUvb3N0cmVlLzAwMDEtYnVpbGQtY3JlYXRlLXRlc3RzLWRpcmVjdG9yeS1mb3Itc3BsaXQtYnVpbGRzLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWUvMDAwMS1idWlsZC1jcmVhdGUtdGVzdHMtZGlyZWN0b3J5LWZvci1zcGxpdC1idWlsZHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NGIzZGUuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWUvMDAwMS1idWlsZC1jcmVhdGUtdGVzdHMtZGlyZWN0b3J5LWZvci1zcGxpdC1idWlsZHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1Gcm9tIDExNGZlNTA2N2I1OGEyNDM0YjQ0ODU1ZWVlNDhmODY1MTg2ZmUwZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4IEtpZXJuYW4gPGFsZXgua2llcm5hbkBnbWFpbC5jb20+Ci1EYXRlOiBUdWUsIDUgTm92IDIwMTkgMjI6MjY6MjMgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IGNyZWF0ZSB0ZXN0cyBkaXJlY3RvcnkgZm9yIHNwbGl0IGJ1aWxkcwotCi1XaGVuIGAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZ2AgaXMgaW4gZWZmZWN0IHdpdGggc2VwYXJhdGUgYnVpbGQKLWRpcmVjdG9yeSwgdGhlIHRlc3RzIGRpcmVjdG9yeSBpc24ndCBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZQotZGVwZW5kZW5jeSBnZW5lcmF0aW9uLCB3aGljaCBsZWFkcyB0byBhIGJ1aWxkIHJhY2UgZm9yIHRoZSB0ZXN0cwotZGlyZWN0b3J5IGJlaW5nIGNyZWF0ZWQgYW5kIGZhaWx1cmVzOgotCi0gIE1ha2luZyBhbGwgaW4gLgotICBtYWtlWzJdOiBFbnRlcmluZyBkaXJlY3RvcnkgJ1RPUERJUi9idWlsZC90bXAvd29yay9yaXNjdjY0LXlvZS1saW51eC1tdXNsL29zdHJlZS8yMDE5LjUtcjAvYnVpbGQnCi0gIChlY2hvICdbVGVzdF0nID4gdGVzdHMvdGVzdC1sb2NhbC1wdWxsLWRlcHRoLnNoLnRlc3QudG1wOyBcCi0gIGVjaG8gJ1R5cGU9c2Vzc2lvbicgPj4gdGVzdHMvdGVzdC1sb2NhbC1wdWxsLWRlcHRoLnNoLnRlc3QudG1wOyBcCi0gIGVjaG8gJ0V4ZWM9ZW52IEdfVEVTVF9TUkNESVI9L3Vzci9saWJleGVjL2luc3RhbGxlZC10ZXN0cy9saWJvc3RyZWUgR19URVNUX0JVSUxERElSPS91c3IvbGliZXhlYy9pbnN0YWxsZWQtdGVzdHMvbGlib3N0cmVlIC91c3IvbGliZXhlYy9pbnN0YWxsZWQtdGVzdHMvbGlib3N0cmVlL3Rlc3QtbG9jYWwtcHVsbC1kZXB0aC5zaCcgPj4gdGVzdHMvdGVzdC1sb2NhbC1wdWxsLWRlcHRoLnNoLnRlc3QudG1wOyBcCi0gIG12IHRlc3RzL3Rlc3QtbG9jYWwtcHVsbC1kZXB0aC5zaC50ZXN0LnRtcCB0ZXN0cy90ZXN0LWxvY2FsLXB1bGwtZGVwdGguc2gudGVzdCkKLSAgL2Jpbi9zaDogdGVzdHMvdGVzdC1sb2NhbC1wdWxsLWRlcHRoLnNoLnRlc3QudG1wOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0gIC9iaW4vc2g6IGxpbmUgMTogdGVzdHMvdGVzdC1sb2NhbC1wdWxsLWRlcHRoLnNoLnRlc3QudG1wOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0gIC9iaW4vc2g6IGxpbmUgMjogdGVzdHMvdGVzdC1sb2NhbC1wdWxsLWRlcHRoLnNoLnRlc3QudG1wOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0gIG12OiBjYW5ub3Qgc3RhdCAndGVzdHMvdGVzdC1sb2NhbC1wdWxsLWRlcHRoLnNoLnRlc3QudG1wJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQotICBtYWtlWzJdOiAqKiogW01ha2VmaWxlOjkyODI6IHRlc3RzL3Rlc3QtbG9jYWwtcHVsbC1kZXB0aC5zaC50ZXN0XSBFcnJvciAxCi0KLVNpZ25lZC1vZmYtYnk6IEFsZXggS2llcm5hbiA8YWxleC5raWVybmFuQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogUGVuZGluZwotLS0tCi0gYnVpbGR1dGlsL2dsaWItdGFwLm1rIHwgMSArCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCi0KLWRpZmYgLS1naXQgYS9idWlsZHV0aWwvZ2xpYi10YXAubWsgYi9idWlsZHV0aWwvZ2xpYi10YXAubWsKLWluZGV4IDM0YjhmMjFlYTI2YS4uOWE5NDRhMGFjYzg4IDEwMDY0NAotLS0tIGEvYnVpbGR1dGlsL2dsaWItdGFwLm1rCi0rKysgYi9idWlsZHV0aWwvZ2xpYi10YXAubWsKLUBAIC0xMTYsNiArMTE2LDcgQEAgaW5zdGFsbGVkX3Rlc3RjYXNlcyA9ICQodGVzdF9wcm9ncmFtcykgJChpbnN0YWxsZWRfdGVzdF9wcm9ncmFtcykgXAotIGluc3RhbGxlZF90ZXN0X21ldGFfREFUQSA9ICQoaW5zdGFsbGVkX3Rlc3RjYXNlczo9LnRlc3QpCi0gCi0gJS50ZXN0OiAlJChFWEVFWFQpIE1ha2VmaWxlCi0rCUAkKE1LRElSX1ApICQoZGlyICRAKQotIAkkKEFNX1ZfR0VOKSAoZWNobyAnW1Rlc3RdJyA+ICRALnRtcDsgXAotIAllY2hvICdUeXBlPXNlc3Npb24nID4+ICRALnRtcDsgXAotIAllY2hvICdFeGVjPWVudiBHX1RFU1RfU1JDRElSPSQoaW5zdGFsbGVkX3Rlc3RkaXIpIEdfVEVTVF9CVUlMRERJUj0kKGluc3RhbGxlZF90ZXN0ZGlyKSAkKGluc3RhbGxlZF90ZXN0ZGlyKS8kKG5vdGRpciAkPCknID4+ICRALnRtcDsgXAotLS0gCi0yLjE3LjEKLQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWUvMDAwMS1tYWNyb3MtQWRkLVRFTVBfRkFJTFVSRV9SRVRSWS1mb3ItbXVzbC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9vc3RyZWUvb3N0cmVlLzAwMDEtbWFjcm9zLUFkZC1URU1QX0ZBSUxVUkVfUkVUUlktZm9yLW11c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YzA0NGMuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWUvMDAwMS1tYWNyb3MtQWRkLVRFTVBfRkFJTFVSRV9SRVRSWS1mb3ItbXVzbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLUZyb20gNWE0ZjJkZGIwYTZjNjU2YjQyNWEzY2FhNDFmNWFmNzY2ZWQ1ZjQ0YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEFsZXggS2llcm5hbiA8YWxleC5raWVybmFuQGdtYWlsLmNvbT4KLURhdGU6IE1vbiwgOSBTZXAgMjAxOSAxNDoxOToxOCArMDEwMAotU3ViamVjdDogW1BBVENIXSBtYWNyb3M6IEFkZCBURU1QX0ZBSUxVUkVfUkVUUlkgZm9yIG11c2wKLQotVEVNUF9GQUlMVVJFX1JFVFJZIGlzIGdsaWJjIHNwZWNpZmljLCBhZGQgYSBkZWZpbml0aW9uIGZvciBtdXNsLgotCi1TZWUgaHR0cHM6Ly9naXRodWIuY29tL29zdHJlZWRldi9vc3RyZWUvaXNzdWVzLzczMQotCi1TaWduZWQtb2ZmLWJ5OiBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uQHNpZGVicmFuY2guY29tPgotU2lnbmVkLW9mZi1ieTogQWxleCBLaWVybmFuIDxhbGV4LmtpZXJuYW5AZ21haWwuY29tPgotVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2xpYmdsbngvY29tbWl0LzE1YzA2NDY4ODA0MDE0ZmM0OWY2ZjM0MDEzMjkzMDcwM2Y5MTliMTldCi0tLS0KLSBnbG54LW1hY3Jvcy5oIHwgMTAgKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9saWJnbG54LmdsbngtbWFjcm9zLmggYi9saWJnbG54L2dsbngtbWFjcm9zLmgKLWluZGV4IDZkOGFjYTkzZjhhMy4uNzAwZmM3NWNlZWQwIDEwMDY0NAotLS0tIGEvbGliZ2xueC5nbG54LW1hY3Jvcy5oCi0rKysgYi9saWJnbG54L2dsbngtbWFjcm9zLmgKLUBAIC0zMSw2ICszMSwxNiBAQCBHX0JFR0lOX0RFQ0xTCi0gLyogQWxsIG9mIHRoZXNlIGFyZSBmb3IgQyBvbmx5LiAqLwotICNpZm5kZWYgX19HSV9TQ0FOTkVSX18KLSAKLSsvKiBmaXhlcyBidWlsZHMgYWdhaW5zdCBtdXNsLCB0YWtlbiBmcm9tIGdsaWJjIHVuaXN0ZC5oICovCi0rI2lmbmRlZiBURU1QX0ZBSUxVUkVfUkVUUlkKLSsjZGVmaW5lIFRFTVBfRkFJTFVSRV9SRVRSWShleHByZXNzaW9uKSBcCi0rICAoX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoeyBsb25nIGludCBfX3Jlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgZG8gX19yZXN1bHQgPSAobG9uZyBpbnQpIChleHByZXNzaW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgIHdoaWxlIChfX3Jlc3VsdCA9PSAtMUwgJiYgZXJybm8gPT0gRUlOVFIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICBfX3Jlc3VsdDsgfSkpCi0rI2VuZGlmCi0rCi0gLyogVGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc3lzdGVtZC9zeXN0ZW1kL3NyYy9iYXNpYy9zdHJpbmctdXRpbC5oCi0gICogYXQgcmV2aXNpb24gdjIyOC02NjYtZ2NmNmM4YzQKLSAgKi8KLS0tIAotMi4xNy4xCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9vc3RyZWUvb3N0cmVlLzAwMDEtdGVzdHMtSGFuZGxlLUVQSVBFLWZhaWx1cmVzLXdoZW4taGVhZC10ZXJtaW5hdGVzLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWUvMDAwMS10ZXN0cy1IYW5kbGUtRVBJUEUtZmFpbHVyZXMtd2hlbi1oZWFkLXRlcm1pbmF0ZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYjczM2UuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWUvMDAwMS10ZXN0cy1IYW5kbGUtRVBJUEUtZmFpbHVyZXMtd2hlbi1oZWFkLXRlcm1pbmF0ZXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1Gcm9tIGZiNTE5ZjAzNjE1NjVjYWQwZDM0MDA5NTI2M2ExZTg4NjZlYzRmODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4IEtpZXJuYW4gPGFsZXgua2llcm5hbkBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDMxIE9jdCAyMDE5IDExOjMwOjAwICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMS8zXSB0ZXN0czogSGFuZGxlIEVQSVBFIGZhaWx1cmVzIHdoZW4gaGVhZCB0ZXJtaW5hdGVzCi0KLVdoZW4gdXNpbmcgbXVzbCwgaXQgYXBwZWFycyB0aGF0IHRoZSBkZWZhdWx0IGlzIGxpbmUgYnVmZmVyZWQgb3V0cHV0LCBzbwotd2hlbiBgaGVhZCAtMWAgcmVhZHMgZnJvbSBhIHBpcGUgd2UgaGF2ZSB0byBoYW5kbGUgdGhlIHNvdXJjZSBlbmQgb2YgdGhlCi1waXBlIGdldHRpbmcgRVBJUEUuCi0KLVNpZ25lZC1vZmYtYnk6IEFsZXggS2llcm5hbiA8YWxleC5raWVybmFuQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW3YyMDE5LjZdCi0tLS0KLSB0ZXN0cy9wdWxsLXRlc3Quc2ggICAgICAgICAgICB8IDIgKy0KLSB0ZXN0cy90ZXN0LXB1bGwtbWlycm9ybGlzdC5zaCB8IDQgKystLQotIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvdGVzdHMvcHVsbC10ZXN0LnNoIGIvdGVzdHMvcHVsbC10ZXN0LnNoCi1pbmRleCAwYTk3YTExOTU1ODIuLjJjZmQ4ZTAyZjc5MCAxMDA2NDQKLS0tLSBhL3Rlc3RzL3B1bGwtdGVzdC5zaAotKysrIGIvdGVzdHMvcHVsbC10ZXN0LnNoCi1AQCAtMTc3LDcgKzE3Nyw3IEBAIGlmICEgc2tpcF9vbmVfd2l0aG91dF91c2VyX3hhdHRyczsgdGhlbgotICAgICAke0NNRF9QUkVGSVh9IG9zdHJlZSAtLXJlcG89Y2FjaGVyZXBvIHB1bGwtbG9jYWwgb3N0cmVlLXNydi9nbm9tZXJlcG8gbWFpbgotICAgICByZXY9JChvc3RyZWUgLS1yZXBvPWNhY2hlcmVwbyByZXYtcGFyc2UgbWFpbikKLSAgICAgJHtDTURfUFJFRklYfSBvc3RyZWUgLS1yZXBvPWNhY2hlcmVwbyBscyAtUiAtQyBtYWluID4gbHMudHh0Ci0tICAgIHJlZ2ZpbGVfaGFzaD0kKGdyZXAgLUUgLWUgJ14tMCcgbHMudHh0IHwgaGVhZCAtMSB8IGF3ayAneyBwcmludCAkNSB9JykKLSsgICAgcmVnZmlsZV9oYXNoPSQoKGdyZXAgLUUgLWUgJ14tMCcgbHMudHh0IHx8IHRydWUpIHwgaGVhZCAtMSB8IGF3ayAneyBwcmludCAkNSB9JykKLSAgICAgJHtDTURfUFJFRklYfSBvc3RyZWUgLS1yZXBvPXJlcG8gcmVtb3RlIGFkZCAtLXNldD1ncGctdmVyaWZ5PWZhbHNlIGNvcnJ1cHRyZXBvICQoY2F0IGh0dHBkLWFkZHJlc3MpL29zdHJlZS9jb3JydXB0cmVwbwotICAgICAjIE1ha2UgdGhpcyBhIGxvb3Agc28gaW4gdGhlIGZ1dHVyZSB3ZSBjYW4gYWRkIG1vcmUgb2JqZWN0IHR5cGVzIGxpa2UgY29tbWl0IGV0Yy4KLSAgICAgZm9yIG9iamVjdCBpbiAke3JlZ2ZpbGVfaGFzaH0uZmlsZTsgZG8KLWRpZmYgLS1naXQgYS90ZXN0cy90ZXN0LXB1bGwtbWlycm9ybGlzdC5zaCBiL3Rlc3RzL3Rlc3QtcHVsbC1taXJyb3JsaXN0LnNoCi1pbmRleCA0ZTQ0ODUyZDM5NzEuLjg1ZmY2NmU5OWY4ZSAxMDA3NTUKLS0tLSBhL3Rlc3RzL3Rlc3QtcHVsbC1taXJyb3JsaXN0LnNoCi0rKysgYi90ZXN0cy90ZXN0LXB1bGwtbWlycm9ybGlzdC5zaAotQEAgLTQ3LDEyICs0NywxMiBAQCBzZXR1cF9taXJyb3IgY29udGVudF9taXJyb3IzCi0gCi0gIyBMZXQncyBkZWxldGUgYSBmaWxlIGZyb20gMSBzbyB0aGF0IGl0IGZhbGxzIGJhY2sgb24gMgotIGNkICR7dGVzdF90bXBkaXJ9L2NvbnRlbnRfbWlycm9yMS9vc3RyZWUvZ25vbWVyZXBvCi0tZmlsZXo9JChmaW5kIG9iamVjdHMvIC1uYW1lICcqLmZpbGV6JyB8IGhlYWQgLW4gMSkKLStmaWxlej0kKChmaW5kIG9iamVjdHMvIC1uYW1lICcqLmZpbGV6JyB8fCB0cnVlKSB8IGhlYWQgLW4gMSkKLSBybSAke2ZpbGV6fQotIAotICMgTGV0J3MgZGVsZXRlIGEgZmlsZSBmcm9tIDEgYW5kIDIgc28gdGhhdCBpdCBmYWxscyBiYWNrIG9uIDMKLSBjZCAke3Rlc3RfdG1wZGlyfS9jb250ZW50X21pcnJvcjEvb3N0cmVlL2dub21lcmVwbwotLWZpbGV6PSQoZmluZCBvYmplY3RzLyAtbmFtZSAnKi5maWxleicgfCBoZWFkIC1uIDEpCi0rZmlsZXo9JCgoZmluZCBvYmplY3RzLyAtbmFtZSAnKi5maWxleicgfHwgdHJ1ZSkgfCBoZWFkIC1uIDEpCi0gcm0gJHtmaWxlen0KLSBjZCAke3Rlc3RfdG1wZGlyfS9jb250ZW50X21pcnJvcjIvb3N0cmVlL2dub21lcmVwbwotIHJtICR7ZmlsZXp9Ci0tLSAKLTIuMTcuMQotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvb3N0cmVlL29zdHJlZS8wMDAxLXRlc3RzLWNvcmUtRmFsbGJhY2stdG8tZW5fVVMuVVRGLTgtbG9jYWxlLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWUvMDAwMS10ZXN0cy1jb3JlLUZhbGxiYWNrLXRvLWVuX1VTLlVURi04LWxvY2FsZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhZmIwOS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvb3N0cmVlL29zdHJlZS8wMDAxLXRlc3RzLWNvcmUtRmFsbGJhY2stdG8tZW5fVVMuVVRGLTgtbG9jYWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotRnJvbSA0ZDE3Y2Q5MTdmZTRmYjY3ZDJmOWU0ODgxYjY2OTNhYzcyODlmNDIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleCBLaWVybmFuIDxhbGV4LmtpZXJuYW5AZ21haWwuY29tPgotRGF0ZTogV2VkLCAzMCBPY3QgMjAxOSAwNzo1NTo0MSArMDAwMAotU3ViamVjdDogW1BBVENIIDEvNF0gdGVzdHMvY29yZTogRmFsbGJhY2sgdG8gZW5fVVMuVVRGLTggbG9jYWxlCi0KLUEgbnVtYmVyIG9mIHRlc3RzIGV4cGVjdCBleHBsaWNpdCBsZWZ0L3JpZ2h0IHNpbmdsZSBxdW90ZXMgaW4gdGhlaXIKLW1lc3NhZ2VzLCB3aGljaCB3aWxsIG5ldmVyIGhhcHBlbiBpbiB0aGUgQyBsb2NhbGUuIENoYW5nZSBzbyB3ZSBwaWNrIGEKLWxpa2VseSBVVEYtOCBsb2NhbGUsIG9yIGZhaWwgaWYgd2UgY2FuJ3QgZmluZCBvbmUuCi0KLVNpZ25lZC1vZmYtYnk6IEFsZXggS2llcm5hbiA8YWxleC5raWVybmFuQGdtYWlsLmNvbT4KLVVwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW3YyMDE5LjZdCi0tLS0KLSB0ZXN0cy9saWJ0ZXN0LWNvcmUuc2ggfCAxMiArKysrLS0tLS0tLS0KLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvdGVzdHMvbGlidGVzdC1jb3JlLnNoIGIvdGVzdHMvbGlidGVzdC1jb3JlLnNoCi1pbmRleCBmNmY5NDI4OGZjNjEuLmJjMTkxMzMyYzkxNiAxMDA2NDQKLS0tLSBhL3Rlc3RzL2xpYnRlc3QtY29yZS5zaAotKysrIGIvdGVzdHMvbGlidGVzdC1jb3JlLnNoCi1AQCAtMzUsMTUgKzM1LDExIEBAIGFzc2VydF9ub3RfcmVhY2hlZCAoKSB7Ci0gfQotIAotICMgU29tZSB0ZXN0cyBsb29rIGZvciBzcGVjaWZpYyBFbmdsaXNoIHN0cmluZ3MuIFVzZSBhIFVURi04IHZlcnNpb24KLS0jIG9mIHRoZSBDIChQT1NJWCkgbG9jYWxlIGlmIHdlIGhhdmUgb25lLCBvciBmYWxsIGJhY2sgdG8gUE9TSVgKLSsjIG9mIHRoZSBDIChQT1NJWCkgbG9jYWxlIGlmIHdlIGhhdmUgb25lLCBvciBmYWxsIGJhY2sgdG8gZW5fVVMuVVRGLTgKLSAjIChodHRwczovL3NvdXJjZXdhcmUub3JnL2dsaWJjL3dpa2kvUHJvcG9zYWxzL0MuVVRGLTgpCi0taWYgbG9jYWxlIC1hIHwgZ3JlcCAnXkMuVVRGLTgkJyA+L2Rldi9udWxsOyB0aGVuCi0tICAgIGV4cG9ydCBMQ19BTEw9Qy5VVEYtOAotLWVsaWYgbG9jYWxlIC1hIHwgZ3JlcCAnXkMudXRmOCQnID4vZGV2L251bGw7IHRoZW4KLS0gICAgZXhwb3J0IExDX0FMTD1DLnV0ZjgKLS1lbHNlCi0tICAgIGV4cG9ydCBMQ19BTEw9QwotLWZpCi0rZXhwb3J0IExDX0FMTD0kKGxvY2FsZSAtYSB8IGdyZXAgLUVlICdcLihVVEYtOHx1dGY4KScgfCBncmVwIC1pRWUgJ14oQ3xlbl9VUyknIHwgaGVhZCAtMSB8fCB0cnVlKQotK2lmIFsgLXogIiR7TENfQUxMfSIgXTsgdGhlbiBmYXRhbCAiQ2FuJ3QgZmluZCBzdWl0YWJsZSBVVEYtOCBsb2NhbGUiOyBmaQotKwotICMgQSBHTlUgZXh0ZW5zaW9uLCB1c2VkIHdoZW5ldmVyIExDX0FMTCBpcyBub3QgQwotIHVuc2V0IExBTkdVQUdFCi0gCi0tLSAKLTIuMTcuMQotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvb3N0cmVlL29zdHJlZS8wMDAyLXRlc3RzLWNvcmUtQXNzdW1lLUMuVVRGLTgtaWYtbG9jYWxlLWlzbi10LWZvdW5kLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWUvMDAwMi10ZXN0cy1jb3JlLUFzc3VtZS1DLlVURi04LWlmLWxvY2FsZS1pc24tdC1mb3VuZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiOWM4Zi4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvb3N0cmVlL29zdHJlZS8wMDAyLXRlc3RzLWNvcmUtQXNzdW1lLUMuVVRGLTgtaWYtbG9jYWxlLWlzbi10LWZvdW5kLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotRnJvbSAzZDQ4MDIxZmIwODkyNzIxZmFiODM1OWI0OTQ3MGU1MjFhYWVkNDkzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxleCBLaWVybmFuIDxhbGV4LmtpZXJuYW5AZ21haWwuY29tPgotRGF0ZTogVGh1LCAzMSBPY3QgMjAxOSAxMToyODowNyArMDAwMAotU3ViamVjdDogW1BBVENIIDIvM10gdGVzdHMvY29yZTogQXNzdW1lIEMuVVRGLTggaWYgbG9jYWxlIGlzbid0IGZvdW5kCi0KLVdoZW4gYnVpbGRpbmcgd2l0aCBtdXNsIHRoZXJlJ3Mgbm8gbG9jYWxlIGNvbW1hbmQsIGFsc28gaXRzIGRlZmF1bHQKLWxvY2FsZSBpcyBDLlVURi04LCBzbyBqdXN0IGdldCBDLlVURi04IGlmIHdlIGNhbid0IGZpbmQgbG9jYWxlLgotCi1TaWduZWQtb2ZmLWJ5OiBBbGV4IEtpZXJuYW4gPGFsZXgua2llcm5hbkBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFt2MjAxOS42XQotLS0tCi0gdGVzdHMvbGlidGVzdC1jb3JlLnNoIHwgMTIgKysrKysrKysrLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnRlc3QtY29yZS5zaCBiL3Rlc3RzL2xpYnRlc3QtY29yZS5zaAotaW5kZXggYmMxOTEzMzJjOTE2Li40NmFhZmFiMDNjYzggMTAwNjQ0Ci0tLS0gYS90ZXN0cy9saWJ0ZXN0LWNvcmUuc2gKLSsrKyBiL3Rlc3RzL2xpYnRlc3QtY29yZS5zaAotQEAgLTM3LDkgKzM3LDE1IEBAIGFzc2VydF9ub3RfcmVhY2hlZCAoKSB7Ci0gIyBTb21lIHRlc3RzIGxvb2sgZm9yIHNwZWNpZmljIEVuZ2xpc2ggc3RyaW5ncy4gVXNlIGEgVVRGLTggdmVyc2lvbgotICMgb2YgdGhlIEMgKFBPU0lYKSBsb2NhbGUgaWYgd2UgaGF2ZSBvbmUsIG9yIGZhbGwgYmFjayB0byBlbl9VUy5VVEYtOAotICMgKGh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2xpYmMvd2lraS9Qcm9wb3NhbHMvQy5VVEYtOCkKLS1leHBvcnQgTENfQUxMPSQobG9jYWxlIC1hIHwgZ3JlcCAtRWUgJ1wuKFVURi04fHV0ZjgpJyB8IGdyZXAgLWlFZSAnXihDfGVuX1VTKScgfCBoZWFkIC0xIHx8IHRydWUpCi0taWYgWyAteiAiJHtMQ19BTEx9IiBdOyB0aGVuIGZhdGFsICJDYW4ndCBmaW5kIHN1aXRhYmxlIFVURi04IGxvY2FsZSI7IGZpCi0tCi0rIwotKyMgSWYgd2UgY2FuJ3QgZmluZCB0aGUgbG9jYWxlIGNvbW1hbmQgYXNzdW1lIHdlIGhhdmUgc3VwcG9ydCBmb3IgQy5VVEYtOAotKyMgKGUuZy4gbXVzbCBiYXNlZCBzeXN0ZW1zKQotK2lmIHR5cGUgLXAgbG9jYWxlID4vZGV2L251bGw7IHRoZW4KLSsgICAgZXhwb3J0IExDX0FMTD0kKGxvY2FsZSAtYSB8IGdyZXAgLUVlICdcLihVVEYtOHx1dGY4KScgfCBncmVwIC1pRWUgJ14oQ3xlbl9VUyknIHwgaGVhZCAtMSB8fCB0cnVlKQotKyAgICBpZiBbIC16ICIke0xDX0FMTH0iIF07IHRoZW4gZmF0YWwgIkNhbid0IGZpbmQgc3VpdGFibGUgVVRGLTggbG9jYWxlIjsgZmkKLStlbHNlCi0rICAgIGV4cG9ydCBMQ19BTEw9Qy5VVEYtOAotK2ZpCi0gIyBBIEdOVSBleHRlbnNpb24sIHVzZWQgd2hlbmV2ZXIgTENfQUxMIGlzIG5vdCBDCi0gdW5zZXQgTEFOR1VBR0UKLSAKLS0tIAotMi4xNy4xCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9vc3RyZWUvb3N0cmVlLzAwMDMtdGVzdHMtQXZvaWQtbXVzbC1mYWlsdXJlLXdpdGgtY3AtYS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9vc3RyZWUvb3N0cmVlLzAwMDMtdGVzdHMtQXZvaWQtbXVzbC1mYWlsdXJlLXdpdGgtY3AtYS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM0NjE3Yy4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvb3N0cmVlL29zdHJlZS8wMDAzLXRlc3RzLUF2b2lkLW11c2wtZmFpbHVyZS13aXRoLWNwLWEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1Gcm9tIGFiZjFhNzM5MmIyZmExOTQ1Mjg2YTM5YTM1MTkwZDc0ZmUxNDFlNTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbGV4IEtpZXJuYW4gPGFsZXgua2llcm5hbkBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDMxIE9jdCAyMDE5IDE3OjA5OjM2ICswMDAwCi1TdWJqZWN0OiBbUEFUQ0ggMy8zXSB0ZXN0czogQXZvaWQgbXVzbCBmYWlsdXJlIHdpdGggYGNwIC1hYAotCi1XaGVuIGNvcHlpbmcgdGhlIHRyZWUsIHVzaW5nIG11c2wgYW5kIEdOVSBjb3JldXRpbHMsIHNvbWV0aGluZyBnZXRzIGNvbmZ1c2VkCi13aGVuIHNldHRpbmcgdGhlIG93bmVyc2hpcCBvZiBzeW1saW5rcyBhbmQgdGhlIGNvcHkgZmFpbHMgd2l0aDoKLQotICBjcDogZmFpbGVkIHRvIHByZXNlcnZlIG93bmVyc2hpcCBmb3Igb3NkYXRhLWRldmVsL2JpbjogTm90IHN1cHBvcnRlZAotCi1SZXdvcmsgdXNpbmcgdGFyIHRvIGF2b2lkIHRoZSBwcm9ibGVtLgotCi1TaWduZWQtb2ZmLWJ5OiBBbGV4IEtpZXJuYW4gPGFsZXgua2llcm5hbkBnbWFpbC5jb20+Ci1VcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFt2MjAxOS42XQotLS0tCi0gdGVzdHMvbGlidGVzdC5zaCAgICAgICAgfCA0ICsrKy0KLSB0ZXN0cy90ZXN0LWFkbWluLWdwZy5zaCB8IDQgKysrLQotIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvdGVzdHMvbGlidGVzdC5zaCBiL3Rlc3RzL2xpYnRlc3Quc2gKLWluZGV4IGJhMDAwNzNhMTBhNy4uM2Y1ZmQ5MzFiYzFlIDEwMDc1NQotLS0tIGEvdGVzdHMvbGlidGVzdC5zaAotKysrIGIvdGVzdHMvbGlidGVzdC5zaAotQEAgLTQ0MCw3ICs0NDAsOSBAQCBFT0YKLSAgICAgJHtDTURfUFJFRklYfSBvc3RyZWUgLS1yZXBvPSR7dGVzdF90bXBkaXJ9L3Rlc3Rvcy1yZXBvIGNvbW1pdCAtLWFkZC1tZXRhZGF0YS1zdHJpbmcgdmVyc2lvbj0xLjAuMTAgLWIgdGVzdG9zL2J1aWxkbWFzdGVyL3g4Nl82NC1ydW50aW1lIC1zICJCdWlsZCIKLSAKLSAgICAgY2QgJHt0ZXN0X3RtcGRpcn0KLS0gICAgY3AgLWEgb3NkYXRhIG9zZGF0YS1kZXZlbAotKyAgICBybSAtcmYgb3NkYXRhLWRldmVsCi0rICAgIG1rZGlyIG9zZGF0YS1kZXZlbAotKyAgICB0YXIgLUMgb3NkYXRhIC1jZiAtIC4gfCB0YXIgLUMgb3NkYXRhLWRldmVsIC14ZiAtCi0gICAgIGNkIG9zZGF0YS1kZXZlbAotICAgICBta2RpciAtcCB1c3IvaW5jbHVkZQotICAgICBlY2hvICJhIGRldmVsb3BtZW50IGhlYWRlciIgPiB1c3IvaW5jbHVkZS9mb28uaAotZGlmZiAtLWdpdCBhL3Rlc3RzL3Rlc3QtYWRtaW4tZ3BnLnNoIGIvdGVzdHMvdGVzdC1hZG1pbi1ncGcuc2gKLWluZGV4IDFmNTBjOGE5YTUwOC4uZGM3NzY3NDM3NzZjIDEwMDc1NQotLS0tIGEvdGVzdHMvdGVzdC1hZG1pbi1ncGcuc2gKLSsrKyBiL3Rlc3RzL3Rlc3QtYWRtaW4tZ3BnLnNoCi1AQCAtOTAsNyArOTAsOSBAQCBFT0YKLSAgICAgJHtDTURfUFJFRklYfSBvc3RyZWUgLS1yZXBvPSR7dGVzdF90bXBkaXJ9L3Rlc3Rvcy1yZXBvIGNvbW1pdCAtLWFkZC1tZXRhZGF0YS1zdHJpbmcgdmVyc2lvbj0xLjAuMTAgLWIgdGVzdG9zL2J1aWxkbWFzdGVyL3g4Nl82NC1ydW50aW1lIC1zICJCdWlsZCIgLS1ncGctc2lnbj0ka2V5aWQgLS1ncGctaG9tZWRpcj0ke3Rlc3RfdG1wZGlyfS9ncGdob21lCi0gCi0gICAgIGNkICR7dGVzdF90bXBkaXJ9Ci0tICAgIGNwIC1hIG9zZGF0YSBvc2RhdGEtZGV2ZWwKLSsgICAgcm0gLXJmIG9zZGF0YS1kZXZlbAotKyAgICBta2RpciBvc2RhdGEtZGV2ZWwKLSsgICAgdGFyIC1DIG9zZGF0YSAtY2YgLSAuIHwgdGFyIC1DIG9zZGF0YS1kZXZlbCAteGYgLQotICAgICBjZCBvc2RhdGEtZGV2ZWwKLSAgICAgbWtkaXIgLXAgdXNyL2luY2x1ZGUKLSAgICAgZWNobyAiYSBkZXZlbG9wbWVudCBoZWFkZXIiID4gdXNyL2luY2x1ZGUvZm9vLmgKLS0tIAotMi4xNy4xCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9vc3RyZWUvb3N0cmVlXzIwMTkuNS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9vc3RyZWUvb3N0cmVlXzIwMTkuNi5iYgpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvb3N0cmVlL29zdHJlZV8yMDE5LjUuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9vc3RyZWUvb3N0cmVlXzIwMTkuNi5iYgppbmRleCBiM2IzNGExLi5iY2Y1MTFiIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvb3N0cmVlL29zdHJlZV8yMDE5LjUuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL29zdHJlZS9vc3RyZWVfMjAxOS42LmJiCkBAIC0yNCwyNCArMjQsMjAgQEAKIAogU1JDX1VSSSA9ICIgXAogICAgIGdpdHNtOi8vZ2l0aHViLmNvbS9vc3RyZWVkZXYvb3N0cmVlIFwKLSAgICBmaWxlOi8vMDAwMS1tYWNyb3MtQWRkLVRFTVBfRkFJTFVSRV9SRVRSWS1mb3ItbXVzbC5wYXRjaCBcCiAgICAgZmlsZTovL3J1bi1wdGVzdCBcCi0gICAgZmlsZTovLzAwMDEtdGVzdHMtY29yZS1GYWxsYmFjay10by1lbl9VUy5VVEYtOC1sb2NhbGUucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLXRlc3RzLUhhbmRsZS1FUElQRS1mYWlsdXJlcy13aGVuLWhlYWQtdGVybWluYXRlcy5wYXRjaCBcCi0gICAgZmlsZTovLzAwMDItdGVzdHMtY29yZS1Bc3N1bWUtQy5VVEYtOC1pZi1sb2NhbGUtaXNuLXQtZm91bmQucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAzLXRlc3RzLUF2b2lkLW11c2wtZmFpbHVyZS13aXRoLWNwLWEucGF0Y2ggXAotICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLWNyZWF0ZS10ZXN0cy1kaXJlY3RvcnktZm9yLXNwbGl0LWJ1aWxkcy5wYXRjaCBcCiAiCi1TUkNSRVYgPSAiOTgwY2EwN2IwM2IzYWE3ZTAwMTI3MjlkZDZjODRiMDg3ODc3NWQ5MyIKK1NSQ1JFViA9ICI0MzcwNjIwMmY3ZGUyY2UwYzgyOWE0NmNhYWIzNTBhZTE2NTZmNmFkIgogCiBVUFNUUkVBTV9DSEVDS19HSVRUQUdSRUdFWCA9ICJ2KD9QPHB2ZXI+XGQrXC5cZCspIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCi1pbmhlcml0IGF1dG90b29scyBiYXNoLWNvbXBsZXRpb24gZ29iamVjdC1pbnRyb3NwZWN0aW9uIGd0ay1kb2MgcGtnY29uZmlnIHB0ZXN0LWdub21lIHN5c3RlbWQKK2luaGVyaXQgYXV0b3Rvb2xzIGJhc2gtY29tcGxldGlvbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gZ3RrLWRvYyBtYW5wYWdlcyBwa2djb25maWcgcHRlc3QtZ25vbWUgc3lzdGVtZAogCiAjIFBhY2thZ2UgY29uZmlndXJhdGlvbiAtIG1hdGNoIG9zdHJlZSBkZWZhdWx0cywgYnV0IHdpdGhvdXQgcm9maWxlcy1mdXNlCiAjIG90aGVyd2lzZSB3ZSBpbnRyb2R1Y2UgYSBkZXBlbmRlbmRlbmN5IG9uIG1ldGEtZmlsZXN5c3RlbXMKKyMKKyMgSWYgcnVubmluZyB3aXRoIHB0ZXN0LCBib3RoIHNvdXAgKGZvciB0cml2aWFsLWh0dHBkKSBhbmQgeGF0dHIgYXJlIHJlcXVpcmVkCiBQQUNLQUdFQ09ORklHID8/PSAiIFwKICAgICAke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICdzZWxpbnV4IHNtYWNrJywgZCl9IFwKICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCBsaWJtb3VudCcsICcnLCBkKX0gXApAQCAtNTIsMTYgKzQ4LDE5IEBACiAjIHNvdXAgb3IgY3VybCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9vc3RyZWVkZXYvb3N0cmVlL2lzc3Vlcy8xODk3CiBQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gIiBcCiAgICAgJHtAYmIudXRpbHMuZmlsdGVyKCdESVNUUk9fRkVBVFVSRVMnLCAnc2VsaW51eCBzbWFjaycsIGQpfSBcCisgICAgYnVpbHRpbi1ncnViMi1ta2NvbmZpZyBcCiAgICAgc291cCBcCiAiCiAKIFBBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0td2l0aC1hdmFoaSwgLS13aXRob3V0LWF2YWhpLCBhdmFoaSIKK1BBQ0tBR0VDT05GSUdbYnVpbHRpbi1ncnViMi1ta2NvbmZpZ10gPSAiLS13aXRoLWJ1aWx0aW4tZ3J1YjItbWtjb25maWcsIC0td2l0aG91dC1idWlsdGluLWdydWIyLW1rY29uZmlnIgogUEFDS0FHRUNPTkZJR1tjdXJsXSA9ICItLXdpdGgtY3VybCwgLS13aXRob3V0LWN1cmwsIGN1cmwiCiBQQUNLQUdFQ09ORklHW2RyYWN1dF0gPSAiLS13aXRoLWRyYWN1dCwgLS13aXRob3V0LWRyYWN1dCIKK1BBQ0tBR0VDT05GSUdbZ2pzXSA9ICJhY19jdl9wYXRoX0dKUz0ke2JpbmRpcn0vZ2pzIgogUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1jcnlwdG89Z251dGxzLCAsIGdudXRscyIKIFBBQ0tBR0VDT05GSUdbbGliYXJjaGl2ZV0gPSAiLS13aXRoLWxpYmFyY2hpdmUsIC0td2l0aG91dC1saWJhcmNoaXZlLCBsaWJhcmNoaXZlIgogUEFDS0FHRUNPTkZJR1tsaWJtb3VudF0gPSAiLS13aXRoLWxpYm1vdW50LCAtLXdpdGhvdXQtbGlibW91bnQsIHV0aWwtbGludXgiCi1QQUNLQUdFQ09ORklHW21hbl0gPSAiLS1lbmFibGUtbWFuLCAtLWRpc2FibGUtbWFuLCBsaWJ4c2x0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS1tYW4sIC0tZGlzYWJsZS1tYW4sIGxpYnhzbHQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKIFBBQ0tBR0VDT05GSUdbbWtpbml0Y3Bpb10gPSAiLS13aXRoLW1raW5pdGNwaW8sIC0td2l0aG91dC1ta2luaXRjcGlvIgogUEFDS0FHRUNPTkZJR1tuby1odHRwMl0gPSAiLS1kaXNhYmxlLWh0dHAyLCAtLWVuYWJsZS1odHRwMiIKIFBBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLWNyeXB0bz1vcGVuc3NsLCAsIG9wZW5zc2wiCkBAIC04NCw3ICs4Myw2IEBACiAiCiAKIEVYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiIFwKLSAgICAtLXdpdGgtYnVpbHRpbi1ncnViMi1ta2NvbmZpZyBcCiAgICAgLS1lbmFibGUtd3Jwc2V1ZG8tY29tcGF0IFwKICAgICAtLWRpc2FibGUtb3RtcGZpbGUgXAogIgpAQCAtMTA2LDcgKzEwNCw3IEBACiAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9vc3RyZWUgT1NUUkVFX0dSVUIyX0VYRUM9IiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9vc3RyZWUvb3N0cmVlLWdydWItZ2VuZXJhdG9yIgogfQogCi1QQUNLQUdFUyArPSAiIFwKK1BBQ0tBR0VfQkVGT1JFX1BOID0gIiBcCiAgICAgJHtQTn0tZHJhY3V0IFwKICAgICAke1BOfS1ncnViIFwKICAgICAke1BOfS1ta2luaXRjcGlvIFwKQEAgLTExNCwyMCArMTEyLDExIEBACiAgICAgJHtQTn0tdHJpdmlhbC1odHRwZCBcCiAiCiAKLUZJTEVTXyR7UE59ID0gIiBcCi0gICAgJHtiaW5kaXJ9L29zdHJlZSBcCi0gICAgJHtiaW5kaXJ9L3JvZmlsZXMtZnVzZSBcCi0gICAgJHtkYXRhZGlyfS8ke0JQTn0gXAotICAgICR7ZGF0YWRpcn0vZ2lyLTEuMCBcCi0gICAgJHtsaWJkaXJ9LyR7QlBOfS9vc3RyZWUtcmVtb3VudCBcCi0gICAgJHtsaWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAgXAotICAgICR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKLSAgICAke2xpYmRpcn0vdG1wZmlsZXMuZC9vc3RyZWUtdG1wZmlsZXMuY29uZiBcCi0gICAgJHtzeXNjb25mZGlyfS9vc3RyZWUvcmVtb3Rlcy5kIFwKLSAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLWdlbmVyYXRvcnMvb3N0cmVlLXN5c3RlbS1nZW5lcmF0b3IgXAotICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vb3N0cmVlLWZpbmFsaXplLXN0YWdlZC5wYXRoIFwKLSAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29zdHJlZS1maW5hbGl6ZS1zdGFnZWQuc2VydmljZSBcCi0gICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9vc3RyZWUtcmVtb3VudC5zZXJ2aWNlIFwKK0ZJTEVTXyR7UE59ICs9ICIgXAorICAgICR7bm9uYXJjaF9saWJkaXJ9LyR7QlBOfSBcCisgICAgJHtub25hcmNoX2xpYmRpcn0vdG1wZmlsZXMuZCBcCisgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbSBcCisgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS1nZW5lcmF0b3JzIFwKICIKIEZJTEVTXyR7UE59LWRyYWN1dCA9ICIgXAogICAgICR7c3lzY29uZmRpcn0vZHJhY3V0LmNvbmYuZCBcCkBAIC0xNDIsNyArMTMxLDcgQEAKICAgICAke2xpYmRpcn0vaW5pdGNwaW8gXAogIgogRklMRVNfJHtQTn0tc3dpdGNocm9vdCA9ICIgXAotICAgICR7bGliZGlyfS9vc3RyZWUvb3N0cmVlLXByZXBhcmUtcm9vdCBcCisgICAgJHtub25hcmNoX2xpYmRpcn0vJHtCUE59L29zdHJlZS1wcmVwYXJlLXJvb3QgXAogICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vb3N0cmVlLXByZXBhcmUtcm9vdC5zZXJ2aWNlIFwKICIKIEZJTEVTXyR7UE59LXRyaXZpYWwtaHR0cGQgPSAiIFwKQEAgLTE2OCw4ICsxNTcsMTAgQEAKICAgICBncmVwIFwKICAgICBweXRob24zLWNvcmUgXAogICAgIHB5dGhvbjMtbXVsdGlwcm9jZXNzaW5nIFwKLSAgICBweXRob24zLXB5eWFtbCBcCisgICAgdGFyIFwKICAgICAke1BOfS10cml2aWFsLWh0dHBkIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQkJGSUxFX0NPTExFQ1RJT05TJywgJ21ldGEtcHl0aG9uJywgJ3B5dGhvbjMtcHl5YW1sJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2pzJywgJ2dqcycsICcnLCBkKX0gXAogIgogUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLXV0aWxzIGdsaWJjLWxvY2FsZWRhdGEtZW4tdXMiCiAKQEAgLTE4MCwxMyArMTcxLDMgQEAKIFNZU1RFTURfU0VSVklDRV8ke1BOfS1zd2l0Y2hyb290ID0gIm9zdHJlZS1wcmVwYXJlLXJvb3Quc2VydmljZSIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCi0KLXB5dGhvbiBfX2Fub255bW91cygpIHsKLSAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnVHJ1ZScsICdGYWxzZScsIGQpOgotICAgICAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnNfYW55KCdCQkZJTEVfQ09MTEVDVElPTlMnLCAnbWV0YS1weXRob24nLCAnVHJ1ZScsICdGYWxzZScsIGQpOgotICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFJlY2lwZSgncHRlc3QgcmVxdWlyZXMgbWV0YS1weXRob24gdG8gYmUgcHJlc2VudC4nKQotICAgICAgICBlbGlmIG5vdCBiYi51dGlscy5jb250YWluc19hbnkoJ1BBQ0tBR0VDT05GSUcnLCAnc291cCBjdXJsJywgJ1RydWUnLCAnRmFsc2UnLCBkKToKLSAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBSZWNpcGUoJ3B0ZXN0IHJlcXVpcmVzIHNvdXAgZW5hYmxlZCBpbiBQQUNLQUdFQ09ORklHLicpCi0gICAgICAgIGVsaWYgbm90IG9lLnV0aWxzLmFueV9kaXN0cm9fZmVhdHVyZXMoZCwgInhhdHRyIik6Ci0gICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUmVjaXBlKCdwdGVzdCByZXF1aXJlcyB4YXR0ciBlbmFibGVkIGluIERJU1RST19GRUFUVVJFUy4nKQotfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9wYW0tcGx1Z2luLWxkYXBkYi8wMDAxLWluY2x1ZGUtc3RkZXhjZXB0LWZvci1zdGQtaW52YWxpZF9hcmd1bWVudC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9wYW0vcGFtLXBsdWdpbi1sZGFwZGIvMDAwMS1pbmNsdWRlLXN0ZGV4Y2VwdC1mb3Itc3RkLWludmFsaWRfYXJndW1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5MzQxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9wYW0vcGFtLXBsdWdpbi1sZGFwZGIvMDAwMS1pbmNsdWRlLXN0ZGV4Y2VwdC1mb3Itc3RkLWludmFsaWRfYXJndW1lbnQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorRnJvbSAzZTk3YzkwMDRmNGVjNThjYTM2OTZlZTYyOThmOTFlNmVlYjc2ZTA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTkgMTQ6NDY6MjUgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gaW5jbHVkZSA8c3RkZXhjZXB0PiBmb3Igc3RkOjppbnZhbGlkX2FyZ3VtZW50CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vcm1icmVhay9wYW1fbGRhcGRiL3B1bGwvMTFdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgcGFtX2xkYXBkYi5jcHAgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3BhbV9sZGFwZGIuY3BwIGIvcGFtX2xkYXBkYi5jcHAKK2luZGV4IDliYWYxZTYuLmJlNWQ4NWMgMTAwNjQ0CistLS0gYS9wYW1fbGRhcGRiLmNwcAorKysrIGIvcGFtX2xkYXBkYi5jcHAKK0BAIC0xLDUgKzEsNiBAQAorICNpbmNsdWRlIDxtYXA+CisgI2luY2x1ZGUgPHN0cmluZz4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorICNpbmNsdWRlIDx1dGlsaXR5PgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKyAjaW5jbHVkZSA8cHdkLmg+CistLSAKKzIuMjQuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL3BhbS1wbHVnaW4tbGRhcGRiXzEuMy5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9wYW0vcGFtLXBsdWdpbi1sZGFwZGJfMS4zLmJiCmluZGV4IDY4NjRjYzMuLjYyNmIyMmYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9wYW0vcGFtLXBsdWdpbi1sZGFwZGJfMS4zLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9wYW0vcGFtLXBsdWdpbi1sZGFwZGJfMS4zLmJiCkBAIC0xMSw3ICsxMSw5IEBACiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAicGFtIgogCiBTUkNSRVYgPSAiODRkN2IyNjBmMWFlNjg1N2FlMzZlMDE0YzlhNTk2OGU4YWExY2JlOCIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9ybWJyZWFrL3BhbV9sZGFwZGIiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcm1icmVhay9wYW1fbGRhcGRiIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zdGRleGNlcHQtZm9yLXN0ZC1pbnZhbGlkX2FyZ3VtZW50LnBhdGNoIFwKKyIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JlZGlzL3JlZGlzLzAwMDUtTWFyay1leHRlcm4tZGVmaW5pdGlvbi1vZi1TRFNfTk9JTklULWluLXNkcy5oLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JlZGlzL3JlZGlzLzAwMDUtTWFyay1leHRlcm4tZGVmaW5pdGlvbi1vZi1TRFNfTk9JTklULWluLXNkcy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NzU2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXMvMDAwNS1NYXJrLWV4dGVybi1kZWZpbml0aW9uLW9mLVNEU19OT0lOSVQtaW4tc2RzLmgucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSA3ZjdmNzEwYzg4MjFiNzI1NGJhZWFmOTQ1Y2EzY2EyNjNiOTg0NWUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjEgRGVjIDIwMTkgMTE6MTc6NTAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFyayBleHRlcm4gZGVmaW5pdGlvbiBvZiBTRFNfTk9JTklUIGluIHNkcy5oCisKK1RoaXMgaGVscHMgYXZvaWRpbmcgbXVsdGlwbGUgZGVmaW5pdGlvbiBvZiB0aGlzIHZhcmlhYmxlLCBpdHMgYWxzbworZGVmaW5lZCBnbG9iYWxseSBpbiBzZHMuYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvc2RzLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2RzLmggYi9zcmMvc2RzLmgKK2luZGV4IDFiZGI2MGQuLmFkY2MxMmMgMTAwNjQ0CistLS0gYS9zcmMvc2RzLmgKKysrKyBiL3NyYy9zZHMuaAorQEAgLTM0LDcgKzM0LDcgQEAKKyAjZGVmaW5lIF9fU0RTX0gKKyAKKyAjZGVmaW5lIFNEU19NQVhfUFJFQUxMT0MgKDEwMjQqMTAyNCkKKy1jb25zdCBjaGFyICpTRFNfTk9JTklUOworK2V4dGVybiBjb25zdCBjaGFyICpTRFNfTk9JTklUOworIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXMvRml4ZWQtc3RhY2stdHJhY2UtZ2VuZXJhdGlvbi1vbi1hYXJjaDY0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JlZGlzL3JlZGlzL0ZpeGVkLXN0YWNrLXRyYWNlLWdlbmVyYXRpb24tb24tYWFyY2g2NC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjYTMwNy4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXMvRml4ZWQtc3RhY2stdHJhY2UtZ2VuZXJhdGlvbi1vbi1hYXJjaDY0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotRnJvbSBjOGNhNzFkNDBiYzUxZTI1NTQ1N2NkNDM3NGRkNDVlYzllYmY4YWUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSnVuIEhlIDxqdW4uaGVAYXJtLmNvbT4KLURhdGU6IE1vbiwgMyBKdWwgMjAxNyAwNzoxODozMiArMDAwMAotU3ViamVjdDogW1BBVENIXSBGaXhlZCBzdGFjayB0cmFjZSBnZW5lcmF0aW9uIG9uIGFhcmNoNjQKLQotQ2hhbmdlLUlkOiBJOTgwMTIzOWM5OGNiNzM2MmVkMDdlOGI5ZWMyYmE3ZTQ1NzQ5ZGJhNwotU2lnbmVkLW9mZi1ieTogSnVuIEhlIDxqdW4uaGVAYXJtLmNvbT4KLQotKiBmaXhlcyBhbHNvIHRoaXMgZXJyb3Igd2hlbiBidWlsZGluZyB3aXRoIC1XZXJyb3I9cmV0dXJuLXR5cGU6Ci0gIGRlYnVnLmM6Njk4OjE6IGVycm9yOiBubyByZXR1cm4gc3RhdGVtZW50IGluIGZ1bmN0aW9uIHJldHVybmluZyBub24tdm9pZCBbLVdlcnJvcj1yZXR1cm4tdHlwZV0KLQotVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9naXRodWIuY29tL2FudGlyZXovcmVkaXMvY29tbWl0L2M4Y2E3MWQ0MGJjNTFlMjU1NDU3Y2Q0Mzc0ZGQ0NWVjOWViZjhhZTFdCi0KLVNpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KLS0tLQotIHNyYy9NYWtlZmlsZSB8IDIgKy0KLSBzcmMvZGVidWcuYyAgfCAyICsrCi0gMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZSBiL3NyYy9NYWtlZmlsZQotaW5kZXggMjRlOTYwNTkzZWIuLmExZmY0MjU4YTlkIDEwMDY0NAotLS0tIGEvc3JjL01ha2VmaWxlCi0rKysgYi9zcmMvTWFrZWZpbGUKLUBAIC00MCw3ICs0MCw3IEBACi0gZW5kaWYKLSAKLSAjIFRvIGdldCBBUk0gc3RhY2sgdHJhY2VzIGlmIFJlZGlzIGNyYXNoZXMgd2UgbmVlZCBhIHNwZWNpYWwgQyBmbGFnLgotLWlmbmVxICgsJChmaW5kc3RyaW5nIGFybXYsJCh1bmFtZV9NKSkpCi0raWZuZXEgKCwkKGZpbHRlciBhYXJjaDY0IGFybXYsJCh1bmFtZV9NKSkpCi0gICAgICAgICBDRkxBR1MrPS1mdW53aW5kLXRhYmxlcwotIGVuZGlmCi0gCi1kaWZmIC0tZ2l0IGEvc3JjL2RlYnVnLmMgYi9zcmMvZGVidWcuYwotaW5kZXggYTRjYWE0OWYyODUuLmM5NzZkMGVkOTE5IDEwMDY0NAotLS0tIGEvc3JjL2RlYnVnLmMKLSsrKyBiL3NyYy9kZWJ1Zy5jCi1AQCAtNjkxLDYgKzY5MSw4IEBACi0gICAgIHJldHVybiAodm9pZCopIHVjLT51Y19tY29udGV4dC5zY19pcDsKLSAgICAgI2VsaWYgZGVmaW5lZChfX2FybV9fKSAvKiBMaW51eCBBUk0gKi8KLSAgICAgcmV0dXJuICh2b2lkKikgdWMtPnVjX21jb250ZXh0LmFybV9wYzsKLSsgICAgI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykgLyogTGludXggQUFyY2g2NCAqLwotKyAgICByZXR1cm4gKHZvaWQqKSB1Yy0+dWNfbWNvbnRleHQucGM7Ci0gICAgICNlbmRpZgotICNlbHNlCi0gICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JlZGlzL3JlZGlzL0dOVV9TT1VSQ0UucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXMvR05VX1NPVVJDRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTQwZDgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JlZGlzL3JlZGlzL0dOVV9TT1VSQ0UucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorRGVmaW5lIF9HTlVfU09VUkNFIHRvIGdldCBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSCisKK0ZpeGVzCit8IHptYWxsb2MuYzo4NzozNzogZXJyb3I6ICdQVEhSRUFEX01VVEVYX0RFRkFVTFQnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCit8ICAgIDg3IHwgcHRocmVhZF9tdXRleF90IHVzZWRfbWVtb3J5X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3wgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLSBhL3NyYy96bWFsbG9jLmMKKysrKyBiL3NyYy96bWFsbG9jLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgICovCisgCisrI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXMvcmVtb3ZlLWF0b21pY3MucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXMvcmVtb3ZlLWF0b21pY3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYjJmMmEuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JlZGlzL3JlZGlzL3JlbW92ZS1hdG9taWNzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotRnJvbSBjNDg2NDU1ZTA2OTFmOTkxNTAxOGI5ZDhiMTMzMjAwYTZjNjFhM2M1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogQWxpc3RhaXIgRnJhbmNpcyA8YWxpc3RhaXIuZnJhbmNpc0B3ZGMuY29tPgotRGF0ZTogVGh1LCAyNCBNYXkgMjAxOCAwOTo1ODo0MiAtMDcwMAotU3ViamVjdDogW1BBVENIXSBSZW1vdmUgYXRvbWljcwotCi1CYXNlZCBvbiB0aGlzIHBhdGNoOgotaHR0cHM6Ly9naXRodWIuY29tL3BhdHJpa3gzL2xlZGUtcmVkaXMvYmxvYi9tYXN0ZXIvcmVkaXMvcGF0Y2hlcy8wMTAtcmVkaXMucGF0Y2gKLQotU2lnbmVkLW9mZi1ieTogQWxpc3RhaXIgRnJhbmNpcyA8YWxpc3RhaXIuZnJhbmNpc0B3ZGMuY29tPgotLS0tCi0gZGVwcy9qZW1hbGxvYy9zcmMvcGFnZXMuYyB8IDIyICstLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBzcmMvYXRvbWljdmFyLmggICAgICAgICAgIHwgIDQgKystLQotIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2RlcHMvamVtYWxsb2Mvc3JjL3BhZ2VzLmMgYi9kZXBzL2plbWFsbG9jL3NyYy9wYWdlcy5jCi1pbmRleCA4M2ExNjdmNi4uOGU4MmM3OGQgMTAwNjQ0Ci0tLS0gYS9kZXBzL2plbWFsbG9jL3NyYy9wYWdlcy5jCi0rKysgYi9kZXBzL2plbWFsbG9jL3NyYy9wYWdlcy5jCi1AQCAtMTQ3LDI3ICsxNDcsNyBAQCBwYWdlc19wdXJnZSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKLSB7Ci0gCWJvb2wgdW56ZXJvZWQ7Ci0gCi0tI2lmZGVmIF9XSU4zMgotLQlWaXJ0dWFsQWxsb2MoYWRkciwgc2l6ZSwgTUVNX1JFU0VULCBQQUdFX1JFQURXUklURSk7Ci0tCXVuemVyb2VkID0gdHJ1ZTsKLS0jZWxpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfTUFEVklTRSkKLS0jICBpZmRlZiBKRU1BTExPQ19QVVJHRV9NQURWSVNFX0RPTlRORUVECi0tIyAgICBkZWZpbmUgSkVNQUxMT0NfTUFEVl9QVVJHRSBNQURWX0RPTlRORUVECi0tIyAgICBkZWZpbmUgSkVNQUxMT0NfTUFEVl9aRVJPUyB0cnVlCi0tIyAgZWxpZiBkZWZpbmVkKEpFTUFMTE9DX1BVUkdFX01BRFZJU0VfRlJFRSkKLS0jICAgIGRlZmluZSBKRU1BTExPQ19NQURWX1BVUkdFIE1BRFZfRlJFRQotLSMgICAgZGVmaW5lIEpFTUFMTE9DX01BRFZfWkVST1MgZmFsc2UKLS0jICBlbHNlCi0tIyAgICBlcnJvciAiTm8gbWFkdmlzZSgyKSBmbGFnIGRlZmluZWQgZm9yIHB1cmdpbmcgdW51c2VkIGRpcnR5IHBhZ2VzLiIKLS0jICBlbmRpZgotLQlpbnQgZXJyID0gbWFkdmlzZShhZGRyLCBzaXplLCBKRU1BTExPQ19NQURWX1BVUkdFKTsKLS0JdW56ZXJvZWQgPSAoIUpFTUFMTE9DX01BRFZfWkVST1MgfHwgZXJyICE9IDApOwotLSMgIHVuZGVmIEpFTUFMTE9DX01BRFZfUFVSR0UKLS0jICB1bmRlZiBKRU1BTExPQ19NQURWX1pFUk9TCi0tI2Vsc2UKLS0JLyogTGFzdCByZXNvcnQgbm8tb3AuICovCi0tCXVuemVyb2VkID0gdHJ1ZTsKLS0jZW5kaWYKLSsJdW56ZXJvZWQgPSBmYWxzZTsKLSAJcmV0dXJuICh1bnplcm9lZCk7Ci0gfQotIAotZGlmZiAtLWdpdCBhL3NyYy9hdG9taWN2YXIuaCBiL3NyYy9hdG9taWN2YXIuaAotaW5kZXggODRhNWJiYzUuLmY5YjU2M2MyIDEwMDY0NAotLS0tIGEvc3JjL2F0b21pY3Zhci5oCi0rKysgYi9zcmMvYXRvbWljdmFyLmgKLUBAIC02OCw3ICs2OCw3IEBACi0gICogaXMgcmVwb3J0ZWQuICovCi0gLy8gI2RlZmluZSBfX0FUT01JQ19WQVJfRk9SQ0VfU1lOQ19NQUNST1MKLSAKLS0jaWYgIWRlZmluZWQoX19BVE9NSUNfVkFSX0ZPUkNFX1NZTkNfTUFDUk9TKSAmJiBkZWZpbmVkKF9fQVRPTUlDX1JFTEFYRUQpICYmICFkZWZpbmVkKF9fc3VuKSAmJiAoIWRlZmluZWQoX19jbGFuZ19fKSB8fCAhZGVmaW5lZChfX0FQUExFX18pIHx8IF9fYXBwbGVfYnVpbGRfdmVyc2lvbl9fID4gNDIxMDA1NykKLSsjaWYgZGVmaW5lZChDT05GSUdfRURBQ19BVE9NSUNfU0NSVUIpICYmICAhZGVmaW5lZChfX0FUT01JQ19WQVJfRk9SQ0VfU1lOQ19NQUNST1MpICYmIGRlZmluZWQoX19BVE9NSUNfUkVMQVhFRCkgJiYgIWRlZmluZWQoX19zdW4pICYmICghZGVmaW5lZChfX2NsYW5nX18pIHx8ICFkZWZpbmVkKF9fQVBQTEVfXykgfHwgX19hcHBsZV9idWlsZF92ZXJzaW9uX18gPiA0MjEwMDU3KQotIC8qIEltcGxlbWVudGF0aW9uIHVzaW5nIF9fYXRvbWljIG1hY3Jvcy4gKi8KLSAKLSAjZGVmaW5lIGF0b21pY0luY3IodmFyLGNvdW50KSBfX2F0b21pY19hZGRfZmV0Y2goJnZhciwoY291bnQpLF9fQVRPTUlDX1JFTEFYRUQpCi1AQCAtODIsNyArODIsNyBAQAotICNkZWZpbmUgYXRvbWljU2V0KHZhcix2YWx1ZSkgX19hdG9taWNfc3RvcmVfbigmdmFyLHZhbHVlLF9fQVRPTUlDX1JFTEFYRUQpCi0gI2RlZmluZSBSRURJU19BVE9NSUNfQVBJICJhdG9taWMtYnVpbHRpbiIKLSAKLS0jZWxpZiBkZWZpbmVkKEhBVkVfQVRPTUlDKQotKyNlbGlmIGRlZmluZWQoQ09ORklHX0VEQUNfQVRPTUlDX1NDUlVCKSAmJiBkZWZpbmVkKEhBVkVfQVRPTUlDKQotIC8qIEltcGxlbWVudGF0aW9uIHVzaW5nIF9fc3luYyBtYWNyb3MuICovCi0gCi0gI2RlZmluZSBhdG9taWNJbmNyKHZhcixjb3VudCkgX19zeW5jX2FkZF9hbmRfZmV0Y2goJnZhciwoY291bnQpKQotLS0gCi0yLjE3LjAKLQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JlZGlzL3JlZGlzXzQuMC4xNC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9yZWRpcy9yZWRpc181LjAuNy5iYgpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXNfNC4wLjE0LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXNfNS4wLjcuYmIKaW5kZXggN2RjNmY5Ny4uYjkxNTc1NSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JlZGlzL3JlZGlzXzQuMC4xNC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcmVkaXMvcmVkaXNfNS4wLjcuYmIKQEAgLTcsMjYgKzcsMjcgQEAKIERFUEVORFMgPSAicmVhZGxpbmUgbHVhIG5jdXJzZXMiCiAKIFNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLnJlZGlzLmlvL3JlbGVhc2VzLyR7QlB9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9oaXJlZGlzLXVzZS1kZWZhdWx0LUNDLWlmLWl0LWlzLXNldC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9sdWEtdXBkYXRlLU1ha2VmaWxlLXRvLXVzZS1lbnZpcm9ubWVudC1idWlsZC1zZXR0aW5nLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL29lLXVzZS1saWJjLW1hbGxvYy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly9GaXhlZC1zdGFjay10cmFjZS1nZW5lcmF0aW9uLW9uLWFhcmNoNjQucGF0Y2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtRG8tbm90LXJlc2V0LUZJTkFMX0xJQlMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vcmVkaXMuY29uZiBcCiAgICAgICAgICAgIGZpbGU6Ly9pbml0LXJlZGlzLXNlcnZlciBcCiAgICAgICAgICAgIGZpbGU6Ly9yZWRpcy5zZXJ2aWNlIFwKLSIKKyAgICAgICAgICAgZmlsZTovL2hpcmVkaXMtdXNlLWRlZmF1bHQtQ0MtaWYtaXQtaXMtc2V0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2x1YS11cGRhdGUtTWFrZWZpbGUtdG8tdXNlLWVudmlyb25tZW50LWJ1aWxkLXNldHRpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2UtdXNlLWxpYmMtbWFsbG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc3JjLURvLW5vdC1yZXNldC1GSU5BTF9MSUJTLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtTWFyay1leHRlcm4tZGVmaW5pdGlvbi1vZi1TRFNfTk9JTklULWluLXNkcy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0dOVV9TT1VSQ0UucGF0Y2ggXAorICAgICAgICAgICAiCiAKLVNSQ19VUklfYXBwZW5kX21pcHMgPSAiIGZpbGU6Ly9yZW1vdmUtYXRvbWljcy5wYXRjaCIKLVNSQ19VUklfYXBwZW5kX2FybSA9ICIgZmlsZTovL3JlbW92ZS1hdG9taWNzLnBhdGNoIgotU1JDX1VSSV9hcHBlbmRfcG93ZXJwYyA9ICIgZmlsZTovL3JlbW92ZS1hdG9taWNzLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiOTZhZTIwZmZkNjhiOWRhZWUyNGI3MDJiNzU0ZDg5ZjMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWUxZTE4NDIwYTg2Y2ZiMjg1OTMzMTIzYjA0YTgyZTFlYmRhMjBiZmIwYTI4OTQ3Mjc0NWEwODc1ODdlOTNhNyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MTJlYzQzMDc1YTg4OGJjOGI4YTdkZDhjY2IyZTBmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MWRiNzRlYWJmNjgwMWYwNTdmZDI0YjU5MDIzMmYyZjMzN2Q0MjIyODBmZDE5NDg2ZWNhMDNiZTg3ZDNhODJiIgogCiBpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgdXBkYXRlLXJjLmQgc3lzdGVtZCB1c2VyYWRkCiAKIEZJTkFMX0xJQlNfeDg2X3Rvb2xjaGFpbi1jbGFuZyA9ICItbGF0b21pYyIKK0ZJTkFMX0xJQlNfbWlwcyA9ICItbGF0b21pYyIKK0ZJTkFMX0xJQlNfYXJtID0gIi1sYXRvbWljIgorRklOQUxfTElCU19wb3dlcnBjID0gIi1sYXRvbWljIgorCiBleHBvcnQgRklOQUxfTElCUwogCiBVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JzeXNsb2cvcnN5c2xvZ184LjE5MTAuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9yc3lzbG9nL3JzeXNsb2dfOC4xOTExLjAuYmIKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JzeXNsb2cvcnN5c2xvZ184LjE5MTAuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3JzeXNsb2cvcnN5c2xvZ184LjE5MTEuMC5iYgppbmRleCA4Mjg3ZDJiLi4wMmFjMDNlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvcnN5c2xvZy9yc3lzbG9nXzguMTkxMC4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9yc3lzbG9nL3JzeXNsb2dfOC4xOTExLjAuYmIKQEAgLTI5LDggKzI5LDggQEAKICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN5cy10aW1lLWgucGF0Y2ggXAogIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiNmQ0ZDk0MzU5ZDA4M2Y0NDlmMDg5YjhkYmI5M2M0MjMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDIxOWVlNjkyZjMxYTM5NzQzYWNiNjJhYWY0MTk2YjY0NGNlOTRlZGYzODZkZjQ2MDVmZDZhMTFhNGZlMGM5MyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNTRlMzNmZWI1ODcyMTZmMjk1NTA1MGE4MzAxMTA0YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMWY0Nzc2YjFjNjJhZDcyMjBmNGQ2MjRhODlhOTZiMGMzZDQ3MzgwMDY4OTkzNTZlYWFlZjBmMWY5MWVlMTA0IgogCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL3JzeXNsb2cvcnN5c2xvZy9yZWxlYXNlcyIKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKSIKQEAgLTQwLDYgKzQwLDcgQEAKIEVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWdlbmVyYXRlLW1hbi1wYWdlcyBhcF9jdl9hdG9taWNfYnVpbHRpbnM9eWVzIgogRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1pbWZpbGUtdGVzdHMiCiBFWFRSQV9PRUNPTkZfcmVtb3ZlX21pcHNhcmNoID0gImFwX2N2X2F0b21pY19idWlsdGlucz15ZXMiCitFWFRSQV9PRUNPTkZfcmVtb3ZlX3Bvd2VycGMgPSAiYXBfY3ZfYXRvbWljX2J1aWx0aW5zPXllcyIKIAogIyBmaXJzdCBsaW5lIGlzIGRlZmF1bHQgeWVzIGluIGNvbmZpZ3VyZQogUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCkBAIC0xNjIsMTIgKzE2MywyNiBAQAogCiAjIGZvciByc3lzbG9nLXB0ZXN0CiBWQUxHUklORCA9ICJ2YWxncmluZCIKLVZBTEdSSU5EX21pcHMgPSAiIgotVkFMR1JJTkRfbWlwczY0ID0gIiIKLVZBTEdSSU5EX21pcHM2NG4zMiA9ICIiCi1WQUxHUklORF9hcm0gPSAiIgotVkFMR1JJTkRfYWFyY2g2NCA9ICIiCisKKyMgdmFsZ3JpbmQgc3VwcG9ydHMgYXJtdjcgYW5kIGFib3ZlCitWQUxHUklORF9hcm12NCA9ICcnCitWQUxHUklORF9hcm12NSA9ICcnCitWQUxHUklORF9hcm12NiA9ICcnCisKKyMgWDMyIGlzbid0IHN1cHBvcnRlZCBieSB2YWxncmluZCBhdCB0aGlzIHRpbWUKK1ZBTEdSSU5EX2xpbnV4LWdudXgzMiA9ICcnCitWQUxHUklORF9saW51eC1tdXNseDMyID0gJycKKworIyBEaXNhYmxlIGZvciBzb21lIE1JUFMgdmFyaWFudHMKK1ZBTEdSSU5EX21pcHNhcmNocjYgPSAnJworVkFMR1JJTkRfbGludXgtZ251bjMyID0gJycKKworIyBEaXNhYmxlIGZvciBwb3dlcnBjNjQgd2l0aCBtdXNsCitWQUxHUklORF9saWJjLW11c2xfcG93ZXJwYzY0ID0gJycKKworIyBSSVNDLVYgc3VwcG9ydCBmb3IgdmFsZ3JpbmQgaXMgbm90IHRoZXJlIHlldAogVkFMR1JJTkRfcmlzY3Y2NCA9ICIiCisKIFJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJcCiAgIG1ha2UgZGlmZnV0aWxzIGd6aXAgYmFzaCBnYXdrIGNvcmV1dGlscyBwcm9jcHMgXAogICBsaWJnY2MgcHl0aG9uLWNvcmUgcHl0aG9uLWlvIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9zYW5sb2NrL3NhbmxvY2tfMy44LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2FubG9jay9zYW5sb2NrXzMuOC4wLmJiCmluZGV4IGJmN2VhZjQuLmZmZDQ2ZGEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9zYW5sb2NrL3NhbmxvY2tfMy44LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NhbmxvY2svc2FubG9ja18zLjguMC5iYgpAQCAtOSwxMyArOSwxNiBAQAogU0VDVElPTiA9ICJ1dGlscyIKIAogTElDRU5TRSA9ICJMR1BMdjIrICYgR1BMdjIgJiBHUEx2MisiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUubGljZW5zZTttZDU9NjA0ODdiZjBiZjQyOWQ2YjVhYTcyYjZkMzdhMGViMjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9SRUFETUUubGljZW5zZTttZDU9NjA0ODdiZjBiZjQyOWQ2YjVhYTcyYjZkMzdhMGViMjIiCisKK1BWIC49ICIrZ2l0JHtTUkNQVn0iCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vcGFndXJlLmlvL3NhbmxvY2suZ2l0O3Byb3RvY29sPWh0dHAgXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1zYW5sb2NrLVJlcGxhY2UtY3AtYS13aXRoLWNwLVItbm8tZGVyZWZlcmVuY2UtcHJlc2VyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc2FubG9jay1SZXBsYWNlLWNwLWEtd2l0aC1jcC1SLW5vLWRlcmVmZXJlbmNlLXByZXNlci5wYXRjaDtwYXRjaGRpcj0uLi8gXAogICAgICAgICAgICIKLVNSQ1JFViA9ICI3YWZlMGU2NmY1YzdmMjQ4OTQ4OTZmYWQyMGZmYTZmMzk3MzNkODBmIgotUyA9ICIke1dPUktESVJ9L2dpdCIKK1NSQ1JFViA9ICJjZmYzNDg4MDA3MjJmN2RhZGYwMzBmZmU3NDk0YzJkZjcxNDk5NmUzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3B5dGhvbiIKIAogREVQRU5EUyA9ICJsaWJhaW8gdXRpbC1saW51eCIKIApAQCAtMjQsMTUgKzI3LDEzIEBACiBkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgogCiBkb19jb21waWxlX3ByZXBlbmQgKCkgewotICAgIG9lX3J1bm1ha2UgLUMgd2RtZCBDTURfTERGTEFHUz0iJHtMREZMQUdTfSIgTElCX0xERkxBR1M9IiR7TERGTEFHU30iCi0gICAgb2VfcnVubWFrZSAtQyBzcmMgQ01EX0xERkxBR1M9IiR7TERGTEFHU30iIExJQl9FTlRJUkVfTERGTEFHUz0iJHtMREZMQUdTfSIgTElCX0NMSUVOVF9MREZMQUdTPSIke0xERkxBR1N9IgotICAgIGNkICR7U30vcHl0aG9uCisgICAgb2VfcnVubWFrZSAtQyAke1N9Ly4uL3dkbWQgQ01EX0xERkxBR1M9IiR7TERGTEFHU30iIExJQl9MREZMQUdTPSIke0xERkxBR1N9IgorICAgIG9lX3J1bm1ha2UgLUMgJHtTfS8uLi9zcmMgQ01EX0xERkxBR1M9IiR7TERGTEFHU30iIExJQl9FTlRJUkVfTERGTEFHUz0iJHtMREZMQUdTfSIgTElCX0NMSUVOVF9MREZMQUdTPSIke0xERkxBR1N9IgogfQogCiBkb19pbnN0YWxsX3ByZXBlbmQgKCkgewotICAgIG9lX3J1bm1ha2UgLUMgd2RtZCBERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCi0gICAgb2VfcnVubWFrZSAtQyBzcmMgREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAotICAgIGNkICR7U30vcHl0aG9uCisgICAgb2VfcnVubWFrZSAtQyAke1N9Ly4uL3dkbWQgREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAorICAgIG9lX3J1bm1ha2UgLUMgJHtTfS8uLi9zcmMgREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAogfQogCiBTQU5MT0NLR1JPVVAgPz0gInNhbmxvY2siCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL2xpYnNpZ3Jva18wLjUuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9zaWdyb2svbGlic2lncm9rXzAuNS4yLmJiCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9zaWdyb2svbGlic2lncm9rXzAuNS4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL2xpYnNpZ3Jva18wLjUuMi5iYgppbmRleCA4MTUyY2E3Li4zNWU1OWQ2IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL2xpYnNpZ3Jva18wLjUuMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL2xpYnNpZ3Jva18wLjUuMi5iYgpAQCAtMTAsNiArMTAsOCBAQAogUEFDS0FHRUNPTkZJR1tmdGRpXSA9ICItLXdpdGgtbGliZnRkaSwtLXdpdGhvdXQtbGliZnRkaSxsaWJmdGRpIgogUEFDS0FHRUNPTkZJR1t1c2JdID0gIi0td2l0aC1saWJ1c2IsLS13aXRob3V0LWxpYnVzYixsaWJ1c2IiCiBQQUNLQUdFQ09ORklHW2N4eF0gPSAiLS1lbmFibGUtY3h4LC0tZGlzYWJsZS1jeHgsZ2xpYm1tIGRveHlnZW4tbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tibHVlejVdID0gIi0td2l0aC1saWJibHVleiwtLXdpdGhvdXQtbGliYmx1ZXosYmx1ZXo1IgorUEFDS0FHRUNPTkZJR1toaWRhcGldID0gIi0td2l0aC1saWJoaWRhcGksLS13aXRob3V0LWxpYmhpZGFwaSxoaWRhcGkiCiAKIFBBQ0tBR0VDT05GSUcgPz89ICJzZXJpYWxwb3J0IGZ0ZGkgdXNiIgogCkBAIC0xNyw3ICsxOSw3IEBACiAKIFNSQ19VUkkgPSAiaHR0cDovL3NpZ3Jvay5vcmcvZG93bmxvYWQvc291cmNlL2xpYnNpZ3Jvay9saWJzaWdyb2stJHtQVn0udGFyLmd6IgogCi1TUkNfVVJJW21kNXN1bV0gPSAiYTNkZTllNTJhNjYwZTUxZDI3YTZhY2EwMjVkMjA0YTciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTQwZmRlN2FmOThkMjllOTIyZTlkM2NiZTBhNmMwNTY5ODg5MTUzZmMzMWU0N2I4YjFhZmU0ZDg0NjI5MmI5YyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMjU4ZDQ3MWI2ZDVlYWE1OGRhZjkyN2EwZGMzYmE2NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZDM0MWY5MGI2MjIwZDNlOGNiMjUxZGFjZjcyNmM0MTE2NTI4NTYxMjI0OGYyYzUyZDE1ZGY0NTkwYTFjZTNjIgogCiBGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS8qIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NpZ3Jvay9saWJzaWdyb2tkZWNvZGVfMC41LjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL2xpYnNpZ3Jva2RlY29kZV8wLjUuMy5iYgpzaW1pbGFyaXR5IGluZGV4IDc0JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL2xpYnNpZ3Jva2RlY29kZV8wLjUuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NpZ3Jvay9saWJzaWdyb2tkZWNvZGVfMC41LjMuYmIKaW5kZXggYjhlMWU0Ny4uZjljMWQxYSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NpZ3Jvay9saWJzaWdyb2tkZWNvZGVfMC41LjIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NpZ3Jvay9saWJzaWdyb2tkZWNvZGVfMC41LjMuYmIKQEAgLTEwLDUgKzEwLDUgQEAKIAogU1JDX1VSSSA9ICJodHRwOi8vc2lncm9rLm9yZy9kb3dubG9hZC9zb3VyY2UvbGlic2lncm9rZGVjb2RlL2xpYnNpZ3Jva2RlY29kZS0ke1BWfS50YXIuZ3oiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJiOTAzM2JjN2U2OGJjMTdmZmZmZmQ0ZmRkNzkzZjVhMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlMDhkOWU3OTdjNTRlY2NmMzE0NGRhNjMxYjZlNWYxNDk4YWM1MzFlNTE1MjA0MjhkZjUzN2ExZGE4MjU4M2YwIgorU1JDX1VSSVttZDVzdW1dID0gIjdiYTRlZDRlZjFmMDZhZTk2OTc5NzUxZTA5NmMyODIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1MDgxNGFhNjc0M2NkOGM0ZTg4Yzg0YTBjZGQ4ODg5ZDg4M2MzYmUxMjIyODliZTkwYzYzZDdkNjc4ODNmYzAiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL3NpZ3Jvay1jbGlfMC43LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL3NpZ3Jvay1jbGlfMC43LjEuYmIKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NpZ3Jvay9zaWdyb2stY2xpXzAuNy4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc2lncm9rL3NpZ3Jvay1jbGlfMC43LjEuYmIKaW5kZXggZDMxYmNkMi4uMjI5M2YxNCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NpZ3Jvay9zaWdyb2stY2xpXzAuNy4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC9zaWdyb2svc2lncm9rLWNsaV8wLjcuMS5iYgpAQCAtMTMsNiArMTMsNyBAQAogaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCiAKIFNSQ19VUkkgPSAiaHR0cDovL3NpZ3Jvay5vcmcvZG93bmxvYWQvc291cmNlL3NpZ3Jvay1jbGkvc2lncm9rLWNsaS0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiM2Y0NWNlNjY0YmFkNTI5ZDhiM2Y3OGE2MWIwMTdkNzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjUyNDEzNDI5ZjQ3ZDQ1N2MzMzNkYjBmZDA2ODQxNmFiN2EzZjllMzVjYTc2ZGU4NjI0ZGM1YWM2ZmIwNzc5NyIKIAotU1JDX1VSSVttZDVzdW1dID0gIjc3Y2I3NDVlMmZhMjM5YzdiZDFlYTgxZTJkNjdlZGU5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU2NjlkOTY4YzJkZTNkZmM2YWRmZGE3NmU4Mzc4OWI2YmE3NjM2ODQwN2M4MzI0MzhjZWY1ZTcwOTlhNjVlMWMiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NtYXJ0bW9udG9vbHMvc21hcnRtb250b29sc183LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc21hcnRtb250b29scy9zbWFydG1vbnRvb2xzXzcuMS5iYgpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvc21hcnRtb250b29scy9zbWFydG1vbnRvb2xzXzcuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NtYXJ0bW9udG9vbHMvc21hcnRtb250b29sc183LjEuYmIKaW5kZXggZDk4NDU2Ni4uYjQwMTI3MiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NtYXJ0bW9udG9vbHMvc21hcnRtb250b29sc183LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3NtYXJ0bW9udG9vbHMvc21hcnRtb250b29sc183LjEuYmIKQEAgLTIyLDggKzIyLDggQEAKIFBBQ0tBR0VDT05GSUdbbGliY2FwLW5nXSA9ICItLXdpdGgtbGliY2FwLW5nPXllcywtLXdpdGgtbGliY2FwLW5nPW5vLGxpYmNhcC1uZyIKIFBBQ0tBR0VDT05GSUdbc2VsaW51eF0gPSAiLS13aXRoLXNlbGludXg9eWVzLC0td2l0aC1zZWxpbnV4PW5vLGxpYnNlbGludXgiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJiMmE4MGU0Nzg5YWYyM2Q2N2RmZTFlODhhOTk3YWJiZiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJlNWUxYWMyNzg2YmM4N2ZkYmQ2ZjkyZDBlZTc1MWI3OTlmYmIzZTFhMDljMGE2YTM3OWY5ZWI2NGIzZThmNjFjIgorU1JDX1VSSVttZDVzdW1dID0gIjQzMGNkNWY2NGNhYTQ1MjQwMThiNTM2ZTVlY2Q5YzI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNmNzM0ZDJjOTlkZWIxZTRhZjYyYjI1ZDk0NGM2MjUyZGU3MGNhNjRkNzY2YzRjNzI5NDU0NWEyZTY1OWI4NDYiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3VwbS91cG0vMDAwMS1jbWFrZS1EaXNhYmxlLVduby1taXNsZWFkaW5nLWluZGVudGF0aW9uLXdpdGgtY2xhbmctLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3VwbS91cG0vMDAwMS1jbWFrZS1EaXNhYmxlLVduby1taXNsZWFkaW5nLWluZGVudGF0aW9uLXdpdGgtY2xhbmctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjczYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvdXBtL3VwbS8wMDAxLWNtYWtlLURpc2FibGUtV25vLW1pc2xlYWRpbmctaW5kZW50YXRpb24td2l0aC1jbGFuZy0ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBkNDFlMmJlZjFjMzlkY2JjNDg5NmIxZGQ3YWIxNjhkYTUzMDY3MmI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMzAgRGVjIDIwMTkgMTM6MzM6MzkgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY21ha2U6IERpc2FibGUgLVduby1taXNsZWFkaW5nLWluZGVudGF0aW9uIHdpdGggY2xhbmctMTAgb253YXJkcworCitjbGFuZyBhbHNvIGludHJvZHVjZWQgdGhpcyB3YXJuaW5nIG5vdworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UvdXBtL3B1bGwvNjkzXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgQ01ha2VMaXN0cy50eHQgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAoraW5kZXggMDY5ZTQ5MDIuLjQ3YzdmNGMzIDEwMDY0NAorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtOTksNiArOTksMTEgQEAgaWYgKENNQUtFX0NYWF9DT01QSUxFUl9JRCBTVFJFUVVBTCAiR05VIiBBTkQgQ01BS0VfQ1hYX0NPTVBJTEVSX1ZFUlNJT04gVkVSU0lPTl8KKyAgIGxpc3QgKEFQUEVORCBDX0NYWF9XQVJOSU5HX0ZMQUdTIC1Xbm8tbWlzbGVhZGluZy1pbmRlbnRhdGlvbikKKyBlbmRpZiAoKQorIAorKyMgY2xhbmctMTAgYWRkZWQgIC1XbWlzbGVhZGluZy1pbmRlbnRhdGlvbiBhcyB3ZWxsLCBza2lwcCBpdCB0b28KKytpZiAoQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIFNUUkVRVUFMICJDbGFuZyIgQU5EIENNQUtFX0NYWF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUiAiOSIpCisrICBsaXN0IChBUFBFTkQgQ19DWFhfV0FSTklOR19GTEFHUyAtV25vLW1pc2xlYWRpbmctaW5kZW50YXRpb24pCisrZW5kaWYgKCkKKysKKyAjIFdhcm5pbmdzIGFzIGVycm9ycz8KKyBpZiAoV0VSUk9SKQorICAgbGlzdCAoQVBQRU5EIENfQ1hYX1dBUk5JTkdfRkxBR1MgLVdlcnJvcikKKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC91cG0vdXBtLzAwMDEtaW5pdGlhbGl6ZS1sb2NhbC12YXJpYWJsZXMtYmVmb3JlLXVzZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC91cG0vdXBtLzAwMDEtaW5pdGlhbGl6ZS1sb2NhbC12YXJpYWJsZXMtYmVmb3JlLXVzZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWZhZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3VwbS91cG0vMDAwMS1pbml0aWFsaXplLWxvY2FsLXZhcmlhYmxlcy1iZWZvcmUtdXNlLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gY2NlOGJlMzk2NmI2MDJjZjdlMjBkNTU5ZTUwZmNmNDkzYjliNDJjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDE5IDE4OjEzOjIxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzIGJlZm9yZSB1c2UKKworZml4ZXMKK2Vycm9yOiAnY3RybF9yZWcyX2RhdGEnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbiBbLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkXQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UvdXBtL3B1bGwvNjkzXQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9reHRqMy9reHRqMy5jIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMva3h0ajMva3h0ajMuYyBiL3NyYy9reHRqMy9reHRqMy5jCitpbmRleCBhNmYzYzRmOC4uMDUwYWU1ODUgMTAwNzU1CistLS0gYS9zcmMva3h0ajMva3h0ajMuYworKysrIGIvc3JjL2t4dGozL2t4dGozLmMKK0BAIC03MTUsNyArNzE1LDcgQEAgdXBtX3Jlc3VsdF90IGt4dGozX3NlbnNvcl9zb2Z0d2FyZV9yZXNldChjb25zdCBreHRqM19jb250ZXh0IGRldikKKyAgICAgaWYgKGt4dGozX3NldF9iaXRfb24oZGV2LCBLWFRKM19DVFJMX1JFRzIsIEtYVEozX0NUUkxfUkVHMl9TUlNUKSAhPSBVUE1fU1VDQ0VTUykKKyAgICAgICAgIHJldHVybiBVUE1fRVJST1JfT1BFUkFUSU9OX0ZBSUxFRDsKKyAKKy0gICAgdWludDhfdCBjdHJsX3JlZzJfZGF0YTsKKysgICAgdWludDhfdCBjdHJsX3JlZzJfZGF0YSA9IDA7CisgICAgIGt4dGozX3JlYWRfcmVnaXN0ZXIoZGV2LCBLWFRKM19DVFJMX1JFRzIsICZjdHJsX3JlZzJfZGF0YSk7CisgCisgICAgIHVpbnQ4X3Qgc3JzdF9jb3VudGVyID0gMDsKK0BAIC04MjQsNyArODI0LDcgQEAgdXBtX3Jlc3VsdF90IGt4dGozX2VuYWJsZV9pbnRlcnJ1cHRfcGluKGNvbnN0IGt4dGozX2NvbnRleHQgZGV2LCBLWFRKM19JTlRFUlJVUFQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1hUSjNfSU5URVJSVVBUX1JFU1BPTlNFX1QgcmVzcG9uc2VfdHlwZSkKKyB7CisgICAgIGFzc2VydChkZXYgIT0gTlVMTCk7CistICAgIHVpbnQ4X3QgaW50X3JlZ192YWx1ZTsKKysgICAgdWludDhfdCBpbnRfcmVnX3ZhbHVlID0gMDsKKyAgICAga3h0ajNfcmVhZF9yZWdpc3RlcihkZXYsIEtYVEozX0lOVF9DVFJMX1JFRzEsICZpbnRfcmVnX3ZhbHVlKTsKKyAKKyAgICAgaWYgKHBvbGFyaXR5KQorQEAgLTg2NSw3ICs4NjUsNyBAQCB1cG1fcmVzdWx0X3Qga3h0ajNfc2V0X2ludGVycnVwdF9yZXNwb25zZShjb25zdCBreHRqM19jb250ZXh0IGRldiwgS1hUSjNfSU5URVJSVQorIGJvb2wga3h0ajNfZ2V0X2ludGVycnVwdF9zdGF0dXMoY29uc3Qga3h0ajNfY29udGV4dCBkZXYpCisgeworICAgICBhc3NlcnQoZGV2ICE9IE5VTEwpOworLSAgICB1aW50OF90IHN0YXR1c19yZWdfdmFsdWU7CisrICAgIHVpbnQ4X3Qgc3RhdHVzX3JlZ192YWx1ZSA9IDA7CisgICAgIGt4dGozX3JlYWRfcmVnaXN0ZXIoZGV2LCBLWFRKM19TVEFUVVNfUkVHLCAmc3RhdHVzX3JlZ192YWx1ZSk7CisgICAgIGlmICghKHN0YXR1c19yZWdfdmFsdWUgJiBLWFRKM19TVEFUVVNfUkVHX0lOVCkpCisgICAgICAgICByZXR1cm4gZmFsc2U7CitAQCAtOTU1LDcgKzk1NSw3IEBAIGt4dGozX3dha2V1cF9heGVzIGt4dGozX2dldF93YWtldXBfYXhpc19hbmRfZGlyZWN0aW9uKGt4dGozX2NvbnRleHQgZGV2KQorIHsKKyAgICAgYXNzZXJ0KGRldiAhPSBOVUxMKTsKKyAKKy0gICAgdWludDhfdCBpbnRfc291cmNlMl92YWx1ZTsKKysgICAgdWludDhfdCBpbnRfc291cmNlMl92YWx1ZSA9IDA7CisgICAgIGt4dGozX3JlYWRfcmVnaXN0ZXIoZGV2LCBLWFRKM19JTlRfU09VUkNFMiwgJmludF9zb3VyY2UyX3ZhbHVlKTsKKyAKKyAgICAga3h0ajNfd2FrZXVwX2F4ZXMgd2FrZXVwX2F4aXM7CistLSAKKzIuMjQuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvdXBtL3VwbV9naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvdXBtL3VwbV9naXQuYmIKaW5kZXggZGJlOTczNy4uNmRiOGY4OCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3VwbS91cG1fZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC91cG0vdXBtX2dpdC5iYgpAQCAtMTMsNiArMTMsOCBAQAogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2ludGVsLWlvdC1kZXZraXQvJHtCUE59LmdpdDtwcm90b2NvbD1odHRwIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtQ01ha2VMaXN0cy50eHQtVXNlLVNXSUdfU1VQUE9SVF9GSUxFUy10by1maW5kLXRoZS1saS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1zdGRpbnQtdHlwZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1pbml0aWFsaXplLWxvY2FsLXZhcmlhYmxlcy1iZWZvcmUtdXNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY21ha2UtRGlzYWJsZS1Xbm8tbWlzbGVhZGluZy1pbmRlbnRhdGlvbi13aXRoLWNsYW5nLS5wYXRjaCBcCiAgICAgICAgICAgICIKIAogU1JDX1VSSV9hcHBlbmRfdG9vbGNoYWluLWNsYW5nX3g4NiA9ICIgZmlsZTovLzAwMDEtbm1lYV9ncHMtTGluay13aXRoLWxhdG9taWMucGF0Y2ggIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3ZvbHVtZV9rZXkvdm9sdW1lLWtleV8wLjMuMTIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvdm9sdW1lX2tleS92b2x1bWUta2V5XzAuMy4xMi5iYgppbmRleCAzMTAzNzQ4Li5lMDM2ZjcxIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvdm9sdW1lX2tleS92b2x1bWUta2V5XzAuMy4xMi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZXh0ZW5kZWQvdm9sdW1lX2tleS92b2x1bWUta2V5XzAuMy4xMi5iYgpAQCAtMjgsOSArMjgsMTAgQEAKICIKIAogUEFDS0FHRUNPTkZJRyA/Pz0gInB5dGhvbjMiCi1QQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbiwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbixweXRob24iCiBQQUNLQUdFQ09ORklHW3B5dGhvbjNdID0gIi0td2l0aC1weXRob24zLC0td2l0aG91dC1weXRob24zLHB5dGhvbjMscHl0aG9uMyIKIAorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24iCisKIFJERVBFTkRTX3B5dGhvbjMtJHtCUE59ICs9ICIke1BOfSIKIAogUEFDS0FHRVMgKz0gInB5dGhvbjMtJHtCUE59IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWV4dGVuZGVkL3pzdGQvenN0ZF8xLjQuNC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC96c3RkL3pzdGRfMS40LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyMDFmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1leHRlbmRlZC96c3RkL3pzdGRfMS40LjQuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJac3RhbmRhcmQgLSBGYXN0IHJlYWwtdGltZSBjb21wcmVzc2lvbiBhbGdvcml0aG0iCitERVNDUklQVElPTiA9ICJac3RhbmRhcmQgaXMgYSBmYXN0IGxvc3NsZXNzIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgdGFyZ2V0aW5nIFwKK3JlYWwtdGltZSBjb21wcmVzc2lvbiBzY2VuYXJpb3MgYXQgemxpYi1sZXZlbCBhbmQgYmV0dGVyIGNvbXByZXNzaW9uIHJhdGlvcy4gXAorSXQncyBiYWNrZWQgYnkgYSB2ZXJ5IGZhc3QgZW50cm9weSBzdGFnZSwgcHJvdmlkZWQgYnkgSHVmZjAgYW5kIEZTRSBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuenN0ZC5uZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzdmMGIxNjFlZGJlNTJmNWYzNDVhM2QxMzExZDBiMzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9MzliYmE3ZDJjZjBiYTEwMzZmMmE2ZTJiZTUyZmUzZjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9mYWNlYm9vay96c3RkLmdpdDtub2JyYW5jaD0xIgorCitTUkNSRVYgPSAiMTBmMGU2OTkzZjlkMmY2ODJkYTZkMDRhYTIzODViN2Q1M2NiYjRlZSIKK1VQU1RSRUFNX0NIRUNLX0dJVFRBR1JFR0VYID0gInYoP1A8cHZlcj5cZCsoXC5cZCspKykiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2x6NF0gPSAiSEFWRV9MWjQ9MSxIQVZFX0xaND0wLGx6NCIKK1BBQ0tBR0VDT05GSUdbbHptYV0gPSAiSEFWRV9MWk1BPTEsSEFWRV9MWk1BPTAseHoiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIkhBVkVfWkxJQj0xLEhBVkVfWkxJQj0wLHpsaWIiCisKKyMgU2VlIHByb2dyYW1zL1JFQURNRS5tZCBmb3IgaG93IHRvIHVzZSB0aGlzCitaU1REX0xFR0FDWV9TVVBQT1JUID8/PSAiNCIKKworZG9fY29tcGlsZSAoKSB7CisgICAgb2VfcnVubWFrZSAke1BBQ0tBR0VDT05GSUdfQ09ORkFSR1N9IFpTVERfTEVHQUNZX1NVUFBPUlQ9JHtaU1REX0xFR0FDWV9TVVBQT1JUfQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgJ0RFU1RESVI9JHtEfScKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMKaW5kZXggOTZhYTMxMS4uNjVmZDg5ZSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jCkBAIC0yMSw3ICsyMSw4IEBACiAgICAgICAgICAgIGZpbGU6Ly91c2UtUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZml4LWNsaWVudC1nZnhfc3RhdGUtaW5pdGlhbGlzYXRpb24ucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vZml4LXRzbGliLXZlcnNpb24tY2hlY2sucGF0Y2ggXAotICAgICAgICAgICIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaCBcCisgICAgICAgICAgICIKIAogUyA9ICIke1dPUktESVJ9L0RpcmVjdEZCLSR7UFZ9IgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjc2NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaApAQCAtMCwwICsxLDEzOSBAQAorRnJvbSAwYjY2NTU3ZjJlOTI0MDIzYjEyMDA2YjU4ZDhlODYxNDljNzQ1YWVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgTm92IDIwMTkgMjA6MzQ6MzMgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIG9uIDMyYml0IGFyY2hlcyB3aXRoIDY0Yml0IHRpbWVfdAorCit0aW1lIGVsZW1lbnQgaXMgZGVwcmVjYXRlZCBvbiBuZXcgaW5wdXRfZXZlbnQgc3RydWN0dXJlIGluIGtlcm5lbCdzCitpbnB1dC5oIFsxXQorCitbMV0gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L2NvbW1pdD9pZD0xNTIxOTRmZTljM2YKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgaW5wdXRkcml2ZXJzL2xpbnV4X2lucHV0L2xpbnV4X2lucHV0LmMgfCAzNiArKysrKysrKysrKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2lucHV0ZHJpdmVycy9saW51eF9pbnB1dC9saW51eF9pbnB1dC5jIGIvaW5wdXRkcml2ZXJzL2xpbnV4X2lucHV0L2xpbnV4X2lucHV0LmMKK2luZGV4IDdlOWE2YWQuLjAzZGVlYmMgMTAwNjQ0CistLS0gYS9pbnB1dGRyaXZlcnMvbGludXhfaW5wdXQvbGludXhfaW5wdXQuYworKysrIGIvaW5wdXRkcml2ZXJzL2xpbnV4X2lucHV0L2xpbnV4X2lucHV0LmMKK0BAIC00Miw2ICs0MiwxMSBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcga2VybmVsX3Vsb25nX3Q7CisgCisgI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisgCisrI2lmbmRlZiBpbnB1dF9ldmVudF9zZWMKKysjZGVmaW5lIGlucHV0X2V2ZW50X3NlYyB0aW1lLnR2X3NlYworKyNkZWZpbmUgaW5wdXRfZXZlbnRfdXNlYyB0aW1lLnR2X3VzZWMKKysjZW5kaWYKKysKKyAjaWZuZGVmIEtFWV9PSworIC8qIExpbnV4IGtlcm5lbCAyLjUuNDIrIGRlZmluZXMgYWRkaXRpb25hbCBrZXlzIGluIGxpbnV4L2lucHV0LmggKi8KKyAjaW5jbHVkZSAiaW5wdXRfZmFrZS5oIgorQEAgLTc1NCw3ICs3NTksOCBAQCB0cmFuc2xhdGVfZXZlbnQoIGNvbnN0IExpbnV4SW5wdXREYXRhICAgICAqZGF0YSwKKyAgICAgICAgICAgICAgICAgIERGQklucHV0RXZlbnQgICAgICAgICAgICAqZGV2dCApCisgeworICAgICAgZGV2dC0+ZmxhZ3MgICAgID0gRElFRl9USU1FU1RBTVA7CistICAgICBkZXZ0LT50aW1lc3RhbXAgPSBsZXZ0LT50aW1lOworKyAgICAgZGV2dC0+dGltZXN0YW1wLnR2X3NlYyA9IGxldnQtPmlucHV0X2V2ZW50X3NlYzsKKysgICAgIGRldnQtPnRpbWVzdGFtcC50dl91c2VjID0gbGV2dC0+aW5wdXRfZXZlbnRfdXNlYzsKKyAKKyAgICAgIHN3aXRjaCAobGV2dC0+dHlwZSkgeworICAgICAgICAgICBjYXNlIEVWX0tFWToKK0BAIC0yMTM5LDcgKzIxNDUsOCBAQCB0b3VjaHBhZF90cmFuc2xhdGUoIHN0cnVjdCB0b3VjaHBhZF9mc21fc3RhdGUgKnN0YXRlLAorICAgICAgaW50IGFicywgcmVsOworIAorICAgICAgZGV2dC0+ZmxhZ3MgICAgID0gRElFRl9USU1FU1RBTVAgfCAoZGZiX2NvbmZpZy0+bGludXhfaW5wdXRfdG91Y2hfYWJzID8gRElFRl9BWElTQUJTIDogRElFRl9BWElTUkVMKTsKKy0gICAgIGRldnQtPnRpbWVzdGFtcCA9IGxldnQtPnRpbWU7CisrICAgICBkZXZ0LT50aW1lc3RhbXAudHZfc2VjID0gbGV2dC0+aW5wdXRfZXZlbnRfc2VjOworKyAgICAgZGV2dC0+dGltZXN0YW1wLnR2X3VzZWMgPSBsZXZ0LT5pbnB1dF9ldmVudF91c2VjOworICAgICAgZGV2dC0+dHlwZSAgICAgID0gRElFVF9BWElTTU9USU9OOworIAorICAgICAgc3dpdGNoIChsZXZ0LT5jb2RlKSB7CitAQCAtMjIwNCw3ICsyMjExLDcgQEAgdG91Y2hwYWRfZnNtKCBzdHJ1Y3QgdG91Y2hwYWRfZnNtX3N0YXRlICpzdGF0ZSwKKyAgICAgICAgICAgICAgIERGQklucHV0RXZlbnQgICAgICAgICAgICAgKmRldnQgKQorIHsKKyAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQgPSB7IDAsIDEyNTAwMCB9OworLQorKyAgICAgc3RydWN0IHRpbWV2YWwgdHZhbDsKKyAgICAgIC8qIHNlbGVjdCgpIHRpbWVvdXQ/ICovCisgICAgICBpZiAoIWxldnQpIHsKKyAgICAgICAgICAgLyogQ2hlY2sgaWYgYnV0dG9uIHJlbGVhc2UgaXMgZHVlLiAqLworQEAgLTIyMjMsNiArMjIzMCw4IEBAIHRvdWNocGFkX2ZzbSggc3RydWN0IHRvdWNocGFkX2ZzbV9zdGF0ZSAqc3RhdGUsCisgICAgICAgICAgIHJldHVybiAwOworICAgICAgfQorIAorKyAgICAgdHZhbC50dl9zZWMgPSBsZXZ0LT5pbnB1dF9ldmVudF9zZWM7CisrICAgICB0dmFsLnR2X3VzZWMgPSBsZXZ0LT5pbnB1dF9ldmVudF91c2VjOworICAgICAgLyogTW9yZSBvciBsZXNzIGlnbm9yZSB0aGVzZSBldmVudHMgZm9yIG5vdyAqLworICAgICAgaWYgKChsZXZ0LT50eXBlID09IEVWX1NZTiAmJiBsZXZ0LT5jb2RlID09IFNZTl9SRVBPUlQpIHx8CisgICAgICAgICAgKGxldnQtPnR5cGUgPT0gRVZfQUJTICYmIGxldnQtPmNvZGUgPT0gQUJTX1BSRVNTVVJFKSB8fAorQEAgLTIyMzMsNyArMjI0Miw3IEBAIHRvdWNocGFkX2ZzbSggc3RydWN0IHRvdWNocGFkX2ZzbV9zdGF0ZSAqc3RhdGUsCisgCisgICAgICAgICAgIC8qIENoZWNrIGlmIGJ1dHRvbiByZWxlYXNlIGlzIGR1ZS4gKi8KKyAgICAgICAgICAgaWYgKHN0YXRlLT5mc21fc3RhdGUgPT0gVE9VQ0hQQURfRlNNX0RSQUdfU1RBUlQgJiYKKy0gICAgICAgICAgICAgIHRpbWVvdXRfcGFzc2VkKCAmc3RhdGUtPnRpbWVvdXQsICZsZXZ0LT50aW1lICkpIHsKKysgICAgICAgICAgICAgIHRpbWVvdXRfcGFzc2VkKCAmc3RhdGUtPnRpbWVvdXQsICZ0dmFsICkpIHsKKyAgICAgICAgICAgICAgICBkZXZ0LT5mbGFncyAgICAgPSBESUVGX1RJTUVTVEFNUDsKKyAgICAgICAgICAgICAgICBkZXZ0LT50aW1lc3RhbXAgPSBzdGF0ZS0+dGltZW91dDsgLyogdGltZW91dCBvZiBsZXZ0LT50aW1lPyAqLworICAgICAgICAgICAgICAgIGRldnQtPnR5cGUgICAgICA9IERJRVRfQlVUVE9OUkVMRUFTRTsKK0BAIC0yMjU1LDcgKzIyNjQsOCBAQCB0b3VjaHBhZF9mc20oIHN0cnVjdCB0b3VjaHBhZF9mc21fc3RhdGUgKnN0YXRlLAorICAgICAgY2FzZSBUT1VDSFBBRF9GU01fU1RBUlQ6CisgICAgICAgICAgIGlmICh0b3VjaHBhZF9maW5nZXJfbGFuZGluZyggbGV2dCApKSB7CisgICAgICAgICAgICAgICAgc3RhdGUtPmZzbV9zdGF0ZSA9IFRPVUNIUEFEX0ZTTV9NQUlOOworLSAgICAgICAgICAgICAgIHN0YXRlLT50aW1lb3V0ID0gbGV2dC0+dGltZTsKKysgICAgICAgICAgICAgICBzdGF0ZS0+dGltZW91dC50dl9zZWMgPSBsZXZ0LT5pbnB1dF9ldmVudF9zZWM7CisrICAgICAgICAgICAgICAgc3RhdGUtPnRpbWVvdXQudHZfdXNlYyA9IGxldnQtPmlucHV0X2V2ZW50X3VzZWM7CisgICAgICAgICAgICAgICAgdGltZW91dF9hZGQoICZzdGF0ZS0+dGltZW91dCwgJnRpbWVvdXQgKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICByZXR1cm4gMDsKK0BAIC0yMjY4LDE1ICsyMjc4LDE3IEBAIHRvdWNocGFkX2ZzbSggc3RydWN0IHRvdWNocGFkX2ZzbV9zdGF0ZSAqc3RhdGUsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9CisgICAgICAgICAgIGVsc2UgaWYgKHRvdWNocGFkX2Zpbmdlcl9sZWF2aW5nKCBsZXZ0ICkpIHsKKy0gICAgICAgICAgICAgICBpZiAoIXRpbWVvdXRfcGFzc2VkKCAmc3RhdGUtPnRpbWVvdXQsICZsZXZ0LT50aW1lICkpIHsKKysgICAgICAgICAgICAgICBpZiAoIXRpbWVvdXRfcGFzc2VkKCAmc3RhdGUtPnRpbWVvdXQsICZ0dmFsICkpIHsKKyAgICAgICAgICAgICAgICAgICAgIGRldnQtPmZsYWdzICAgICA9IERJRUZfVElNRVNUQU1QOworLSAgICAgICAgICAgICAgICAgICAgZGV2dC0+dGltZXN0YW1wID0gbGV2dC0+dGltZTsKKysgICAgICAgICAgICAgICAgICAgIGRldnQtPnRpbWVzdGFtcC50dl9zZWMgPSBsZXZ0LT5pbnB1dF9ldmVudF9zZWM7CisrICAgICAgICAgICAgICAgICAgICBkZXZ0LT50aW1lc3RhbXAudHZfdXNlYyA9IGxldnQtPmlucHV0X2V2ZW50X3VzZWM7CisgICAgICAgICAgICAgICAgICAgICBkZXZ0LT50eXBlICAgICAgPSBESUVUX0JVVFRPTlBSRVNTOworICAgICAgICAgICAgICAgICAgICAgZGV2dC0+YnV0dG9uICAgID0gRElCSV9GSVJTVDsKKyAKKyAgICAgICAgICAgICAgICAgICAgIHRvdWNocGFkX2ZzbV9pbml0KCBzdGF0ZSApOworICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmZzbV9zdGF0ZSA9IFRPVUNIUEFEX0ZTTV9EUkFHX1NUQVJUOworLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnRpbWVvdXQgPSBsZXZ0LT50aW1lOworKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnRpbWVvdXQudHZfc2VjID0gbGV2dC0+aW5wdXRfZXZlbnRfc2VjOworKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnRpbWVvdXQudHZfdXNlYyA9IGxldnQtPmlucHV0X2V2ZW50X3VzZWM7CisgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X2FkZCggJnN0YXRlLT50aW1lb3V0LCAmdGltZW91dCApOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorQEAgLTIyODcsNyArMjI5OSw3IEBAIHRvdWNocGFkX2ZzbSggc3RydWN0IHRvdWNocGFkX2ZzbV9zdGF0ZSAqc3RhdGUsCisgICAgICAgICAgIHJldHVybiAwOworIAorICAgICAgY2FzZSBUT1VDSFBBRF9GU01fRFJBR19TVEFSVDoKKy0gICAgICAgICAgaWYgKHRpbWVvdXRfcGFzc2VkKCAmc3RhdGUtPnRpbWVvdXQsICZsZXZ0LT50aW1lICkpeworKyAgICAgICAgICBpZiAodGltZW91dF9wYXNzZWQoICZzdGF0ZS0+dGltZW91dCwgJnR2YWwgKSl7CisgICAgICAgICAgICAgICAgZGV2dC0+ZmxhZ3MgICAgID0gRElFRl9USU1FU1RBTVA7CisgICAgICAgICAgICAgICAgZGV2dC0+dGltZXN0YW1wID0gc3RhdGUtPnRpbWVvdXQ7IC8qIHRpbWVvdXQgb2YgbGV2dC0+dGltZT8gKi8KKyAgICAgICAgICAgICAgICBkZXZ0LT50eXBlICAgICAgPSBESUVUX0JVVFRPTlJFTEVBU0U7CitAQCAtMjI5OSw3ICsyMzExLDggQEAgdG91Y2hwYWRfZnNtKCBzdHJ1Y3QgdG91Y2hwYWRfZnNtX3N0YXRlICpzdGF0ZSwKKyAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRvdWNocGFkX2Zpbmdlcl9sYW5kaW5nKCBsZXZ0ICkpIHsKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5mc21fc3RhdGUgPSBUT1VDSFBBRF9GU01fRFJBR19NQUlOOworLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnRpbWVvdXQgPSBsZXZ0LT50aW1lOworKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnRpbWVvdXQudHZfc2VjID0gbGV2dC0+aW5wdXRfZXZlbnRfc2VjOworKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnRpbWVvdXQudHZfdXNlYyA9IGxldnQtPmlucHV0X2V2ZW50X3VzZWM7CisgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X2FkZCggJnN0YXRlLT50aW1lb3V0LCAmdGltZW91dCApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfQorQEAgLTIzMTQsNyArMjMyNyw4IEBAIHRvdWNocGFkX2ZzbSggc3RydWN0IHRvdWNocGFkX2ZzbV9zdGF0ZSAqc3RhdGUsCisgICAgICAgICAgIH0KKyAgICAgICAgICAgZWxzZSBpZiAodG91Y2hwYWRfZmluZ2VyX2xlYXZpbmcoIGxldnQgKSkgeworICAgICAgICAgICAgICAgIGRldnQtPmZsYWdzICAgICA9IERJRUZfVElNRVNUQU1QOworLSAgICAgICAgICAgICAgIGRldnQtPnRpbWVzdGFtcCA9IGxldnQtPnRpbWU7CisrICAgICAgICAgICAgICAgZGV2dC0+dGltZXN0YW1wLnR2X3NlYyA9IGxldnQtPmlucHV0X2V2ZW50X3NlYzsKKysgICAgICAgICAgICAgICBkZXZ0LT50aW1lc3RhbXAudHZfdXNlYyA9IGxldnQtPmlucHV0X2V2ZW50X3VzZWM7CisgICAgICAgICAgICAgICAgZGV2dC0+dHlwZSAgICAgID0gRElFVF9CVVRUT05SRUxFQVNFOworICAgICAgICAgICAgICAgIGRldnQtPmJ1dHRvbiAgICA9IERJQklfRklSU1Q7CisgCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZnZ3bS9mdndtLzAwMDEtRml4LWNvbXBpbGF0aW9uLWZvci1kaXNhYmxlZC1nbm9tZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9mdndtL2Z2d20vMDAwMS1GaXgtY29tcGlsYXRpb24tZm9yLWRpc2FibGVkLWdub21lLnBhdGNoCmluZGV4IGU4MWQzOTUuLjUwMDAzZTMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9mdndtL2Z2d20vMDAwMS1GaXgtY29tcGlsYXRpb24tZm9yLWRpc2FibGVkLWdub21lLnBhdGNoCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9mdndtL2Z2d20vMDAwMS1GaXgtY29tcGlsYXRpb24tZm9yLWRpc2FibGVkLWdub21lLnBhdGNoCkBAIC0xMCwxMCArMTAsNiBAQAogbW9zdCBkZWZpbml0ZWx5IGlzIG5vdC4gIEl0IGlzIGFjY29tcGxpc2hlZCBieSB0cnlpbmcgdG8gZXhlY3V0ZQogYSBwcm9ncmFtLCB3aGljaCBkb2VzIG5vdCB3b3JrIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgogCi1UaGUgZnZ3bSgxKSBtYW4gcGFnZSBpcyBjcmVhdGVkIGZyb20gRG9jYm9vayBYTUwgd2hpY2ggaXMgc2V0IGZvcgotYSBXaW5kb3dzIGNvZGUgcGFnZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgd2hlbiBjb21waWxpbmcuICBFYXNpZXN0IGlzCi10byBqdXN0IG5vdCBjcmVhdGUgdGhlIG1hbiBwYWdlIGFzIHRob3NlIGFyZSBub3QgbmVlZGVkIG9uIHRoZSBtb25pdG9yLgotCiBVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQogU2lnbmVkLW9mZi1ieTogSmFybW8gSmFha2tvbGEgPGphcm1vLmphYWtrb2xhQHZpbmNpdC5maT4KIFNpZ25lZC1vZmYtYnk6IFJpa3UgSMOkbcOkbMOkaW5lbiA8cmlrdS5oYW1hbGFpbmVuQGdlLmNvbT4KQEAgLTM2LDE5ICszMiw2IEBACiAgQUhfVkVSQkFUSU0oW19DT01QQVRfT0xEX0tFWVNZTURFRl0sCiAgWyNpZmRlZiBDT01QQVRfT0xEX0tFWVNZTURFRgogICMgIGRlZmluZSBYS19QYWdlX1VwICAgWEtfUHJpb3IKLWRpZmYgLS1naXQgYS9kb2MvZnZ3bS9NYWtlZmlsZS5hbSBiL2RvYy9mdndtL01ha2VmaWxlLmFtCi1pbmRleCBjZGRiMTAyLi5mZjAwMTQ5IDEwMDc1NQotLS0tIGEvZG9jL2Z2d20vTWFrZWZpbGUuYW0KLSsrKyBiL2RvYy9mdndtL01ha2VmaWxlLmFtCi1AQCAtMTAsNyArMTAsNyBAQCBYU0xfUFJPRklMRSA9ICQoc3JjZGlyKS8uLi9kb2Nib29rLXhzbC9wcm9maWxpbmcvcHJvZmlsZS54c2wKLSBIVE1MX0ZJTEVTID0gZnZ3bS5tYW4uaHRtbAotIFhNTF9GSUxFUyA9IEBET0NfU0VDVElPTlNfWE1MX1BBVEhACi0gRVhUUkFfRElTVCA9IEBET0NfU0VDVElPTlNfWE1MQCAkKG1hbl9NQU5TKSBzZWN0aW9ucwotLW1hbl9NQU5TID0gZnZ3bS4xCi0rbWFuX01BTlMgPQotIAotIGlmIEZWV01fQlVJTERfSFRNTERPQwotIGRvY19EQVRBID0gJChIVE1MX0ZJTEVTKQogLS0gCiAxLjkuMQogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZnZ3bS9mdndtXzIuNi44LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2Z2d20vZnZ3bV8yLjYuOS5iYgpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZnZ3bS9mdndtXzIuNi44LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZnZ3bS9mdndtXzIuNi45LmJiCmluZGV4IGIzY2IwMWEuLmQxYmE0ODIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9mdndtL2Z2d21fMi42LjguYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2Z2d20vZnZ3bV8yLjYuOS5iYgpAQCAtMzEsMTQgKzMxLDEyIEBACiAgICAgemxpYiBcCiAiCiAKLVBWID0gIjIuNi44IgotCiBTUkNfVVJJID0gIiBcCiAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9mdndtb3JnL2Z2d20uZ2l0O3Byb3RvY29sPWh0dHBzIFwKICAgICBmaWxlOi8vMDAwMS1GaXgtY29tcGlsYXRpb24tZm9yLWRpc2FibGVkLWdub21lLnBhdGNoIFwKICIKIAotU1JDUkVWID0gImRjNmEzOTZiZmU1Y2Q2YzUzZWIxZGYxMDNjM2FmNTA1ZDA4OTlmOTAiCitTUkNSRVYgPSAiODhlYWI2ZGMxNmRhNmU1ZGQyNWZlOTdmYmI1NmI5NmVmMGQ1ODY1NyIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApAQCAtNTUsNyArNTMsNiBAQAogICAgIC0tZGlzYWJsZS1mb250Y29uZmlndGVzdCBcCiAgICAgLS1kaXNhYmxlLWh0bWxkb2MgXAogICAgIC0tZGlzYWJsZS1pbWxpYnRlc3QgXAotICAgIC0tZGlzYWJsZS1tYW5kb2MgXAogICAgIC0tZGlzYWJsZS1ubHMgXAogICAgIC0tZGlzYWJsZS1wZXJsbGliIFwKICAgICAtLWRpc2FibGUtcnN2ZyBcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ2xtL2dsbS8wMDAxLUZpeC1XaW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24td2FybmluZ3Mtd2l0aC1jbGEucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ2xtL2dsbS8wMDAxLUZpeC1XaW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24td2FybmluZ3Mtd2l0aC1jbGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViNTBhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9nbG0vZ2xtLzAwMDEtRml4LVdpbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbi13YXJuaW5ncy13aXRoLWNsYS5wYXRjaApAQCAtMCwwICsxLDE1OCBAQAorRnJvbSA0NjE4NjFjZDJlMzQyOTQ4MzBiMTIxZGI4MzRjMDVmZjM5NDI0ZjZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjcgRGVjIDIwMTkgMTg6NDI6NTEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IFdpbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiB3YXJuaW5ncyB3aXRoIGNsYW5nIDEwKworCitUaGlzIGlzIGEgbmV3IHdhcm5pbmcgaW4gY2xhbmcgd2hpY2ggd2lsbCBiZSBhdmFpbGFibGUgaW4gY2xhbmcgMTAKK29ud2FyZHMKKworRml4ZXMKK2Vycm9yOiBpbXBsaWNpdCBjb252ZXJzaW9uIGZyb20gJ2NvbnN0IGludCcgdG8gJ2Zsb2F0JyBtYXkgbG9zZSBwcmVjaXNpb24gWy1XZXJyb3IsLVdpbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbl0KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9nLXRydWMvZ2xtL3B1bGwvOTg2XQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdsbS9ndHgvc2NhbGFyX211bHRpcGxpY2F0aW9uLmhwcCAgfCAgMiArLQorIHRlc3QvZ3R4L2d0eF9mYXN0X3RyaWdvbm9tZXRyeS5jcHAgfCAzMiArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2xtL2d0eC9zY2FsYXJfbXVsdGlwbGljYXRpb24uaHBwIGIvZ2xtL2d0eC9zY2FsYXJfbXVsdGlwbGljYXRpb24uaHBwCitpbmRleCBmMzkxZjhkZS4uNDk2YmExOTMgMTAwNjQ0CistLS0gYS9nbG0vZ3R4L3NjYWxhcl9tdWx0aXBsaWNhdGlvbi5ocHAKKysrKyBiL2dsbS9ndHgvc2NhbGFyX211bHRpcGxpY2F0aW9uLmhwcAorQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIGdsbQorIAl0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBcCisgCXJldHVybl90eXBlX3NjYWxhcl9tdWx0aXBsaWNhdGlvbjxULCBWZWM+IFwKKyAJb3BlcmF0b3IvKFZlYyBsaCwgVCBjb25zdCYgcyl7IFwKKy0JCXJldHVybiBsaCAqPSAxLjBmIC8gczsgXAorKwkJcmV0dXJuIGxoICo9IDEuMGYgLyBzdGF0aWNfY2FzdDxmbG9hdD4ocyk7IFwKKyAJfQorIAorIEdMTV9JTVBMRU1FTlRfU0NBTF9NVUxUKHZlYzIpCitkaWZmIC0tZ2l0IGEvdGVzdC9ndHgvZ3R4X2Zhc3RfdHJpZ29ub21ldHJ5LmNwcCBiL3Rlc3QvZ3R4L2d0eF9mYXN0X3RyaWdvbm9tZXRyeS5jcHAKK2luZGV4IGYzYmYxN2JmLi5mM2M0ZTk1NyAxMDA2NDQKKy0tLSBhL3Rlc3QvZ3R4L2d0eF9mYXN0X3RyaWdvbm9tZXRyeS5jcHAKKysrKyBiL3Rlc3QvZ3R4L2d0eF9mYXN0X3RyaWdvbm9tZXRyeS5jcHAKK0BAIC0yMzksMTIgKzIzOSwxMiBAQCBuYW1lc3BhY2UgdGF5bG9yQ29zCisgCQlzdGQ6OnZlY3RvcjxnbG06OnZlYzQ+IFJlc3VsdHM7CisgCQlSZXN1bHRzLnJlc2l6ZShTYW1wbGVzKTsKKyAKKy0JCWZsb2F0IFN0ZXBzID0gKEVuZCAtIEJlZ2luKSAvIFNhbXBsZXM7CisrCQlmbG9hdCBTdGVwcyA9IChFbmQgLSBCZWdpbikgLyBmbG9hdChTYW1wbGVzKTsKKyAKKyAJCXN0ZDo6Y2xvY2tfdCBjb25zdCBUaW1lU3RhbXBCZWdpbiA9IHN0ZDo6Y2xvY2soKTsKKyAKKyAJCWZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IFNhbXBsZXM7ICsraSkKKy0JCQlSZXN1bHRzW2ldID0gZmFzdENvc05ldyhBbmdsZVNoaWZ0ICsgZ2xtOjp2ZWM0KEJlZ2luICsgU3RlcHMgKiBpKSk7CisrCQkJUmVzdWx0c1tpXSA9IGZhc3RDb3NOZXcoQW5nbGVTaGlmdCArIGdsbTo6dmVjNChCZWdpbiArIFN0ZXBzICogZmxvYXQoaSkpKTsKKyAKKyAJCXN0ZDo6Y2xvY2tfdCBjb25zdCBUaW1lU3RhbXBFbmQgPSBzdGQ6OmNsb2NrKCk7CisgCitAQCAtMjgwLDEyICsyODAsMTIgQEAgbmFtZXNwYWNlIHRheWxvckNvcworIAkJc3RkOjp2ZWN0b3I8Z2xtOjp2ZWM0PiBSZXN1bHRzOworIAkJUmVzdWx0cy5yZXNpemUoU2FtcGxlcyk7CisgCistCQlmbG9hdCBTdGVwcyA9IChFbmQgLSBCZWdpbikgLyBTYW1wbGVzOworKwkJZmxvYXQgU3RlcHMgPSAoRW5kIC0gQmVnaW4pIC8gZmxvYXQoU2FtcGxlcyk7CisgCisgCQlzdGQ6OmNsb2NrX3QgY29uc3QgVGltZVN0YW1wQmVnaW4gPSBzdGQ6OmNsb2NrKCk7CisgCisgCQlmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBTYW1wbGVzOyArK2kpCistCQkJUmVzdWx0c1tpXSA9IHRheWxvckNvczo6ZmFzdENvc0RldGVybWluaXNjdGljKEFuZ2xlU2hpZnQgKyBnbG06OnZlYzQoQmVnaW4gKyBTdGVwcyAqIGkpKTsKKysJCQlSZXN1bHRzW2ldID0gdGF5bG9yQ29zOjpmYXN0Q29zRGV0ZXJtaW5pc2N0aWMoQW5nbGVTaGlmdCArIGdsbTo6dmVjNChCZWdpbiArIFN0ZXBzICogZmxvYXQoaSkpKTsKKyAKKyAJCXN0ZDo6Y2xvY2tfdCBjb25zdCBUaW1lU3RhbXBFbmQgPSBzdGQ6OmNsb2NrKCk7CisgCitAQCAtMzI3LDEyICszMjcsMTIgQEAgbmFtZXNwYWNlIHRheWxvckNvcworIAkJc3RkOjp2ZWN0b3I8Z2xtOjp2ZWM0PiBSZXN1bHRzOworIAkJUmVzdWx0cy5yZXNpemUoU2FtcGxlcyk7CisgCistCQlmbG9hdCBTdGVwcyA9IChFbmQgLSBCZWdpbikgLyBTYW1wbGVzOworKwkJZmxvYXQgU3RlcHMgPSAoRW5kIC0gQmVnaW4pIC8gZmxvYXQoU2FtcGxlcyk7CisgCisgCQlzdGQ6OmNsb2NrX3QgY29uc3QgVGltZVN0YW1wQmVnaW4gPSBzdGQ6OmNsb2NrKCk7CisgCisgCQlmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBTYW1wbGVzOyArK2kpCistCQkJUmVzdWx0c1tpXSA9IHRheWxvckNvczo6ZmFzdFJlZkNvcyhBbmdsZVNoaWZ0ICsgZ2xtOjp2ZWM0KEJlZ2luICsgU3RlcHMgKiBpKSk7CisrCQkJUmVzdWx0c1tpXSA9IHRheWxvckNvczo6ZmFzdFJlZkNvcyhBbmdsZVNoaWZ0ICsgZ2xtOjp2ZWM0KEJlZ2luICsgU3RlcHMgKiBmbG9hdChpKSkpOworIAorIAkJc3RkOjpjbG9ja190IGNvbnN0IFRpbWVTdGFtcEVuZCA9IHN0ZDo6Y2xvY2soKTsKKyAKK0BAIC0zNDksMTIgKzM0OSwxMiBAQCBuYW1lc3BhY2UgdGF5bG9yQ29zCisgCQlzdGQ6OnZlY3RvcjxnbG06OnZlYzQ+IFJlc3VsdHM7CisgCQlSZXN1bHRzLnJlc2l6ZShTYW1wbGVzKTsKKyAKKy0JCWZsb2F0IFN0ZXBzID0gKEVuZCAtIEJlZ2luKSAvIFNhbXBsZXM7CisrCQlmbG9hdCBTdGVwcyA9IChFbmQgLSBCZWdpbikgLyBmbG9hdChTYW1wbGVzKTsKKyAKKyAJCXN0ZDo6Y2xvY2tfdCBjb25zdCBUaW1lU3RhbXBCZWdpbiA9IHN0ZDo6Y2xvY2soKTsKKyAKKyAJCWZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IFNhbXBsZXM7ICsraSkKKy0JCQlSZXN1bHRzW2ldID0gZ2xtOjpmYXN0Q29zKEFuZ2xlU2hpZnQgKyBnbG06OnZlYzQoQmVnaW4gKyBTdGVwcyAqIGkpKTsKKysJCQlSZXN1bHRzW2ldID0gZ2xtOjpmYXN0Q29zKEFuZ2xlU2hpZnQgKyBnbG06OnZlYzQoQmVnaW4gKyBTdGVwcyAqIGZsb2F0KGkpKSk7CisgCisgCQlzdGQ6OmNsb2NrX3QgY29uc3QgVGltZVN0YW1wRW5kID0gc3RkOjpjbG9jaygpOworIAorQEAgLTM3MSwxMiArMzcxLDEyIEBAIG5hbWVzcGFjZSB0YXlsb3JDb3MKKyAJCXN0ZDo6dmVjdG9yPGdsbTo6dmVjND4gUmVzdWx0czsKKyAJCVJlc3VsdHMucmVzaXplKFNhbXBsZXMpOworIAorLQkJZmxvYXQgU3RlcHMgPSAoRW5kIC0gQmVnaW4pIC8gU2FtcGxlczsKKysJCWZsb2F0IFN0ZXBzID0gKEVuZCAtIEJlZ2luKSAvIGZsb2F0KFNhbXBsZXMpOworIAorIAkJc3RkOjpjbG9ja190IGNvbnN0IFRpbWVTdGFtcEJlZ2luID0gc3RkOjpjbG9jaygpOworIAorIAkJZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgU2FtcGxlczsgKytpKQorLQkJCVJlc3VsdHNbaV0gPSBnbG06OmNvcyhBbmdsZVNoaWZ0ICsgZ2xtOjp2ZWM0KEJlZ2luICsgU3RlcHMgKiBpKSk7CisrCQkJUmVzdWx0c1tpXSA9IGdsbTo6Y29zKEFuZ2xlU2hpZnQgKyBnbG06OnZlYzQoQmVnaW4gKyBTdGVwcyAqIGZsb2F0KGkpKSk7CisgCisgCQlzdGQ6OmNsb2NrX3QgY29uc3QgVGltZVN0YW1wRW5kID0gc3RkOjpjbG9jaygpOworIAorQEAgLTQ2NiwxMiArNDY2LDEyIEBAIG5hbWVzcGFjZSB0YXlsb3IyCisgCQlzdGQ6OnZlY3RvcjxmbG9hdD4gUmVzdWx0czsKKyAJCVJlc3VsdHMucmVzaXplKFNhbXBsZXMpOworIAorLQkJZmxvYXQgU3RlcHMgPSAoRW5kIC0gQmVnaW4pIC8gU2FtcGxlczsKKysJCWZsb2F0IFN0ZXBzID0gKEVuZCAtIEJlZ2luKSAvIGZsb2F0KFNhbXBsZXMpOworIAorIAkJc3RkOjpjbG9ja190IGNvbnN0IFRpbWVTdGFtcEJlZ2luID0gc3RkOjpjbG9jaygpOworIAorIAkJZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgU2FtcGxlczsgKytpKQorLQkJCVJlc3VsdHNbaV0gPSB0YXlsb3JDb3NBKEFuZ2xlU2hpZnQueCArIEJlZ2luICsgU3RlcHMgKiBpKTsKKysJCQlSZXN1bHRzW2ldID0gdGF5bG9yQ29zQShBbmdsZVNoaWZ0LnggKyBCZWdpbiArIFN0ZXBzICogZmxvYXQoaSkpOworIAorIAkJc3RkOjpjbG9ja190IGNvbnN0IFRpbWVTdGFtcEVuZCA9IHN0ZDo6Y2xvY2soKTsKKyAKK0BAIC00ODgsMTIgKzQ4OCwxMiBAQCBuYW1lc3BhY2UgdGF5bG9yMgorIAkJc3RkOjp2ZWN0b3I8ZmxvYXQ+IFJlc3VsdHM7CisgCQlSZXN1bHRzLnJlc2l6ZShTYW1wbGVzKTsKKyAKKy0JCWZsb2F0IFN0ZXBzID0gKEVuZCAtIEJlZ2luKSAvIFNhbXBsZXM7CisrCQlmbG9hdCBTdGVwcyA9IChFbmQgLSBCZWdpbikgLyBmbG9hdChTYW1wbGVzKTsKKyAKKyAJCXN0ZDo6Y2xvY2tfdCBjb25zdCBUaW1lU3RhbXBCZWdpbiA9IHN0ZDo6Y2xvY2soKTsKKyAKKyAJCWZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSA8IFNhbXBsZXM7ICsraSkKKy0JCQlSZXN1bHRzW2ldID0gdGF5bG9yQ29zQihBbmdsZVNoaWZ0LnggKyBCZWdpbiArIFN0ZXBzICogaSk7CisrCQkJUmVzdWx0c1tpXSA9IHRheWxvckNvc0IoQW5nbGVTaGlmdC54ICsgQmVnaW4gKyBTdGVwcyAqIGZsb2F0KGkpKTsKKyAKKyAJCXN0ZDo6Y2xvY2tfdCBjb25zdCBUaW1lU3RhbXBFbmQgPSBzdGQ6OmNsb2NrKCk7CisgCitAQCAtNTEwLDEyICs1MTAsMTIgQEAgbmFtZXNwYWNlIHRheWxvcjIKKyAJCXN0ZDo6dmVjdG9yPGZsb2F0PiBSZXN1bHRzOworIAkJUmVzdWx0cy5yZXNpemUoU2FtcGxlcyk7CisgCistCQlmbG9hdCBTdGVwcyA9IChFbmQgLSBCZWdpbikgLyBTYW1wbGVzOworKwkJZmxvYXQgU3RlcHMgPSAoRW5kIC0gQmVnaW4pIC8gZmxvYXQoU2FtcGxlcyk7CisgCisgCQlzdGQ6OmNsb2NrX3QgY29uc3QgVGltZVN0YW1wQmVnaW4gPSBzdGQ6OmNsb2NrKCk7CisgCisgCQlmb3Ioc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBTYW1wbGVzOyArK2kpCistCQkJUmVzdWx0c1tpXSA9IHRheWxvckNvc0MoQW5nbGVTaGlmdC54ICsgQmVnaW4gKyBTdGVwcyAqIGkpOworKwkJCVJlc3VsdHNbaV0gPSB0YXlsb3JDb3NDKEFuZ2xlU2hpZnQueCArIEJlZ2luICsgU3RlcHMgKiBmbG9hdChpKSk7CisgCisgCQlzdGQ6OmNsb2NrX3QgY29uc3QgVGltZVN0YW1wRW5kID0gc3RkOjpjbG9jaygpOworIAorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG0vZ2xtLnBjLmluIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG0vZ2xtLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MDUyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ2xtL2dsbS9nbG0ucGMuaW4KQEAgLTAsMCArMSw3IEBACitwcmVmaXg9L3VzcgoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBHTE0KK0Rlc2NyaXB0aW9uOiBPcGVuR0wgTWF0aGVtYXRpY3MKK1ZlcnNpb246IEBWRVJTSU9OQAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9nbG0vZ2xtL2dsbUNvbmZpZy5jbWFrZS5pbiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9nbG0vZ2xtL2dsbUNvbmZpZy5jbWFrZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIyM2ExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG0vZ2xtQ29uZmlnLmNtYWtlLmluCkBAIC0wLDAgKzEsMjAgQEAKK3NldChHTE1fVkVSU0lPTiAiQFZFUlNJT05AIikKKworCisjIyMjIyMjIEV4cGFuZGVkIGZyb20gQFBBQ0tBR0VfSU5JVEAgYnkgY29uZmlndXJlX3BhY2thZ2VfY29uZmlnX2ZpbGUoKSAjIyMjIyMjCitnZXRfZmlsZW5hbWVfY29tcG9uZW50KFBBQ0tBR0VfUFJFRklYX0RJUiAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS8uLi8uLi8uLi8iIEFCU09MVVRFKQorCittYWNybyhzZXRfYW5kX2NoZWNrIF92YXIgX2ZpbGUpCisgIHNldCgke192YXJ9ICIke19maWxlfSIpCisgIGlmKE5PVCBFWElTVFMgIiR7X2ZpbGV9IikKKyAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJGaWxlIG9yIGRpcmVjdG9yeSAke19maWxlfSByZWZlcmVuY2VkIGJ5IHZhcmlhYmxlICR7X3Zhcn0gZG9lcyBub3QgZXhpc3QgISIpCisgIGVuZGlmKCkKK2VuZG1hY3JvKCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldF9hbmRfY2hlY2soR0xNX0lOQ0xVREVfRElSUyAiJHtQQUNLQUdFX1BSRUZJWF9ESVJ9L2luY2x1ZGUiKQorCitpZiAoTk9UIENNQUtFX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIzLjAiKQorICAgIGluY2x1ZGUoIiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vZ2xtVGFyZ2V0cy5jbWFrZSIpCitlbmRpZigpCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ2xtL2dsbS9nbG1Db25maWdWZXJzaW9uLmNtYWtlLmluIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG0vZ2xtQ29uZmlnVmVyc2lvbi5jbWFrZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjFhMGRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG0vZ2xtQ29uZmlnVmVyc2lvbi5jbWFrZS5pbgpAQCAtMCwwICsxLDMxIEBACisjIFRoaXMgaXMgYSBiYXNpYyB2ZXJzaW9uIGZpbGUgZm9yIHRoZSBDb25maWctbW9kZSBvZiBmaW5kX3BhY2thZ2UoKS4KKyMgSXQgaXMgdXNlZCBieSB3cml0ZV9iYXNpY19wYWNrYWdlX3ZlcnNpb25fZmlsZSgpIGFzIGlucHV0IGZpbGUgZm9yIGNvbmZpZ3VyZV9maWxlKCkKKyMgdG8gY3JlYXRlIGEgdmVyc2lvbi1maWxlIHdoaWNoIGNhbiBiZSBpbnN0YWxsZWQgYWxvbmcgYSBjb25maWcuY21ha2UgZmlsZS4KKyMKKyMgVGhlIGNyZWF0ZWQgZmlsZSBzZXRzIFBBQ0tBR0VfVkVSU0lPTl9FWEFDVCBpZiB0aGUgY3VycmVudCB2ZXJzaW9uIHN0cmluZyBhbmQKKyMgdGhlIHJlcXVlc3RlZCB2ZXJzaW9uIHN0cmluZyBhcmUgZXhhY3RseSB0aGUgc2FtZSBhbmQgaXQgc2V0cworIyBQQUNLQUdFX1ZFUlNJT05fQ09NUEFUSUJMRSBpZiB0aGUgY3VycmVudCB2ZXJzaW9uIGlzID49IHJlcXVlc3RlZCB2ZXJzaW9uLgorIyBUaGUgdmFyaWFibGUgQ1ZGX1ZFUlNJT04gbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgY29uZmlndXJlX2ZpbGUoKS4KKworc2V0KFBBQ0tBR0VfVkVSU0lPTiAiQFZFUlNJT05AIikKKworaWYoUEFDS0FHRV9WRVJTSU9OIFZFUlNJT05fTEVTUyBQQUNLQUdFX0ZJTkRfVkVSU0lPTikKKyAgc2V0KFBBQ0tBR0VfVkVSU0lPTl9DT01QQVRJQkxFIEZBTFNFKQorZWxzZSgpCisgIHNldChQQUNLQUdFX1ZFUlNJT05fQ09NUEFUSUJMRSBUUlVFKQorICBpZihQQUNLQUdFX0ZJTkRfVkVSU0lPTiBTVFJFUVVBTCBQQUNLQUdFX1ZFUlNJT04pCisgICAgc2V0KFBBQ0tBR0VfVkVSU0lPTl9FWEFDVCBUUlVFKQorICBlbmRpZigpCitlbmRpZigpCisKKyMgaWYgdGhlIGluc3RhbGxlZCBvciB0aGUgdXNpbmcgcHJvamVjdCBkb24ndCBoYXZlIENNQUtFX1NJWkVPRl9WT0lEX1Agc2V0LCBpZ25vcmUgaXQ6CitpZigiJHtDTUFLRV9TSVpFT0ZfVk9JRF9QfSIgU1RSRVFVQUwgIiIgT1IgIjgiIFNUUkVRVUFMICIiKQorICAgcmV0dXJuKCkKK2VuZGlmKCkKKworIyBjaGVjayB0aGF0IHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBoYXMgdGhlIHNhbWUgMzIvNjRiaXQtbmVzcyBhcyB0aGUgb25lIHdoaWNoIGlzIGN1cnJlbnRseSBzZWFyY2hpbmc6CitpZihOT1QgQ01BS0VfU0laRU9GX1ZPSURfUCBTVFJFUVVBTCAiOCIpCisgICBtYXRoKEVYUFIgaW5zdGFsbGVkQml0cyAiOCAqIDgiKQorICAgc2V0KFBBQ0tBR0VfVkVSU0lPTiAiJHtQQUNLQUdFX1ZFUlNJT059ICgke2luc3RhbGxlZEJpdHN9Yml0KSIpCisgICBzZXQoUEFDS0FHRV9WRVJTSU9OX1VOU1VJVEFCTEUgRkFMU0UpCitlbmRpZigpCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ2xtL2dsbS9nbG1UYXJnZXRzLmNtYWtlIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG0vZ2xtVGFyZ2V0cy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDViNjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG0vZ2xtVGFyZ2V0cy5jbWFrZQpAQCAtMCwwICsxLDEwNyBAQAorIyBHZW5lcmF0ZWQgYnkgQ01ha2UKKworaWYoIiR7Q01BS0VfTUFKT1JfVkVSU0lPTn0uJHtDTUFLRV9NSU5PUl9WRVJTSU9OfSIgTEVTUyAyLjUpCisgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJDTWFrZSA+PSAyLjYuMCByZXF1aXJlZCIpCitlbmRpZigpCitjbWFrZV9wb2xpY3koUFVTSCkKK2NtYWtlX3BvbGljeShWRVJTSU9OIDIuNikKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdlbmVyYXRlZCBDTWFrZSB0YXJnZXQgaW1wb3J0IGZpbGUuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIENvbW1hbmRzIG1heSBuZWVkIHRvIGtub3cgdGhlIGZvcm1hdCB2ZXJzaW9uLgorc2V0KENNQUtFX0lNUE9SVF9GSUxFX1ZFUlNJT04gMSkKKworIyBQcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9uLCB3aGljaCB3b3VsZCBmYWlsIHdoZW4gYWxyZWFkeSBpbXBvcnRlZCB0YXJnZXRzIGFyZSBhZGRlZCBvbmNlIG1vcmUuCitzZXQoX3RhcmdldHNEZWZpbmVkKQorc2V0KF90YXJnZXRzTm90RGVmaW5lZCkKK3NldChfZXhwZWN0ZWRUYXJnZXRzKQorZm9yZWFjaChfZXhwZWN0ZWRUYXJnZXQgZ2xtKQorICBsaXN0KEFQUEVORCBfZXhwZWN0ZWRUYXJnZXRzICR7X2V4cGVjdGVkVGFyZ2V0fSkKKyAgaWYoTk9UIFRBUkdFVCAke19leHBlY3RlZFRhcmdldH0pCisgICAgbGlzdChBUFBFTkQgX3RhcmdldHNOb3REZWZpbmVkICR7X2V4cGVjdGVkVGFyZ2V0fSkKKyAgZW5kaWYoKQorICBpZihUQVJHRVQgJHtfZXhwZWN0ZWRUYXJnZXR9KQorICAgIGxpc3QoQVBQRU5EIF90YXJnZXRzRGVmaW5lZCAke19leHBlY3RlZFRhcmdldH0pCisgIGVuZGlmKCkKK2VuZGZvcmVhY2goKQoraWYoIiR7X3RhcmdldHNEZWZpbmVkfSIgU1RSRVFVQUwgIiR7X2V4cGVjdGVkVGFyZ2V0c30iKQorICB1bnNldChfdGFyZ2V0c0RlZmluZWQpCisgIHVuc2V0KF90YXJnZXRzTm90RGVmaW5lZCkKKyAgdW5zZXQoX2V4cGVjdGVkVGFyZ2V0cykKKyAgc2V0KENNQUtFX0lNUE9SVF9GSUxFX1ZFUlNJT04pCisgIGNtYWtlX3BvbGljeShQT1ApCisgIHJldHVybigpCitlbmRpZigpCitpZihOT1QgIiR7X3RhcmdldHNEZWZpbmVkfSIgU1RSRVFVQUwgIiIpCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlNvbWUgKGJ1dCBub3QgYWxsKSB0YXJnZXRzIGluIHRoaXMgZXhwb3J0IHNldCB3ZXJlIGFscmVhZHkgZGVmaW5lZC5cblRhcmdldHMgRGVmaW5lZDogJHtfdGFyZ2V0c0RlZmluZWR9XG5UYXJnZXRzIG5vdCB5ZXQgZGVmaW5lZDogJHtfdGFyZ2V0c05vdERlZmluZWR9XG4iKQorZW5kaWYoKQordW5zZXQoX3RhcmdldHNEZWZpbmVkKQordW5zZXQoX3RhcmdldHNOb3REZWZpbmVkKQordW5zZXQoX2V4cGVjdGVkVGFyZ2V0cykKKworCisjIENvbXB1dGUgdGhlIGluc3RhbGxhdGlvbiBwcmVmaXggcmVsYXRpdmUgdG8gdGhpcyBmaWxlLgorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfSU1QT1JUX1BSRUZJWCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX0iIFBBVEgpCisjIFVzZSBvcmlnaW5hbCBpbnN0YWxsIHByZWZpeCB3aGVuIGxvYWRlZCB0aHJvdWdoIGEKKyMgY3Jvc3MtcHJlZml4IHN5bWJvbGljIGxpbmsgc3VjaCBhcyAvbGliIC0+IC91c3IvbGliLgorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfcmVhbEN1cnIgIiR7X0lNUE9SVF9QUkVGSVh9IiBSRUFMUEFUSCkKK2dldF9maWxlbmFtZV9jb21wb25lbnQoX3JlYWxPcmlnICIvdXNyL2xpYi9jbWFrZS9nbG0iIFJFQUxQQVRIKQoraWYoX3JlYWxDdXJyIFNUUkVRVUFMIF9yZWFsT3JpZykKKyAgc2V0KF9JTVBPUlRfUFJFRklYICIvdXNyL2xpYi9jbWFrZS9nbG0iKQorZW5kaWYoKQordW5zZXQoX3JlYWxPcmlnKQordW5zZXQoX3JlYWxDdXJyKQorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfSU1QT1JUX1BSRUZJWCAiJHtfSU1QT1JUX1BSRUZJWH0iIFBBVEgpCitnZXRfZmlsZW5hbWVfY29tcG9uZW50KF9JTVBPUlRfUFJFRklYICIke19JTVBPUlRfUFJFRklYfSIgUEFUSCkKK2dldF9maWxlbmFtZV9jb21wb25lbnQoX0lNUE9SVF9QUkVGSVggIiR7X0lNUE9SVF9QUkVGSVh9IiBQQVRIKQoraWYoX0lNUE9SVF9QUkVGSVggU1RSRVFVQUwgIi8iKQorICBzZXQoX0lNUE9SVF9QUkVGSVggIiIpCitlbmRpZigpCisKKyMgQ3JlYXRlIGltcG9ydGVkIHRhcmdldCBnbG0KK2FkZF9saWJyYXJ5KGdsbSBJTlRFUkZBQ0UgSU1QT1JURUQpCisKK3NldF90YXJnZXRfcHJvcGVydGllcyhnbG0gUFJPUEVSVElFUworICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtfSU1QT1JUX1BSRUZJWH0vaW5jbHVkZSIKKykKKworaWYoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMy4wLjApCisgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIlRoaXMgZmlsZSByZWxpZXMgb24gY29uc3VtZXJzIHVzaW5nIENNYWtlIDMuMC4wIG9yIGdyZWF0ZXIuIikKK2VuZGlmKCkKKworIyBMb2FkIGluZm9ybWF0aW9uIGZvciBlYWNoIGluc3RhbGxlZCBjb25maWd1cmF0aW9uLgorZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfRElSICIke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfSIgUEFUSCkKK2ZpbGUoR0xPQiBDT05GSUdfRklMRVMgIiR7X0RJUn0vZ2xtVGFyZ2V0cy0qLmNtYWtlIikKK2ZvcmVhY2goZiAke0NPTkZJR19GSUxFU30pCisgIGluY2x1ZGUoJHtmfSkKK2VuZGZvcmVhY2goKQorCisjIENsZWFudXAgdGVtcG9yYXJ5IHZhcmlhYmxlcy4KK3NldChfSU1QT1JUX1BSRUZJWCkKKworIyBMb29wIG92ZXIgYWxsIGltcG9ydGVkIGZpbGVzIGFuZCB2ZXJpZnkgdGhhdCB0aGV5IGFjdHVhbGx5IGV4aXN0Citmb3JlYWNoKHRhcmdldCAke19JTVBPUlRfQ0hFQ0tfVEFSR0VUU30gKQorICBmb3JlYWNoKGZpbGUgJHtfSU1QT1JUX0NIRUNLX0ZJTEVTX0ZPUl8ke3RhcmdldH19ICkKKyAgICBpZihOT1QgRVhJU1RTICIke2ZpbGV9IiApCisgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJUaGUgaW1wb3J0ZWQgdGFyZ2V0IFwiJHt0YXJnZXR9XCIgcmVmZXJlbmNlcyB0aGUgZmlsZQorICAgXCIke2ZpbGV9XCIKK2J1dCB0aGlzIGZpbGUgZG9lcyBub3QgZXhpc3QuICBQb3NzaWJsZSByZWFzb25zIGluY2x1ZGU6CisqIFRoZSBmaWxlIHdhcyBkZWxldGVkLCByZW5hbWVkLCBvciBtb3ZlZCB0byBhbm90aGVyIGxvY2F0aW9uLgorKiBBbiBpbnN0YWxsIG9yIHVuaW5zdGFsbCBwcm9jZWR1cmUgZGlkIG5vdCBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuCisqIFRoZSBpbnN0YWxsYXRpb24gcGFja2FnZSB3YXMgZmF1bHR5IGFuZCBjb250YWluZWQKKyAgIFwiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX1cIgorYnV0IG5vdCBhbGwgdGhlIGZpbGVzIGl0IHJlZmVyZW5jZXMuCisiKQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisgIHVuc2V0KF9JTVBPUlRfQ0hFQ0tfRklMRVNfRk9SXyR7dGFyZ2V0fSkKK2VuZGZvcmVhY2goKQordW5zZXQoX0lNUE9SVF9DSEVDS19UQVJHRVRTKQorCisjIFRoaXMgZmlsZSBkb2VzIG5vdCBkZXBlbmQgb24gb3RoZXIgaW1wb3J0ZWQgdGFyZ2V0cyB3aGljaCBoYXZlCisjIGJlZW4gZXhwb3J0ZWQgZnJvbSB0aGUgc2FtZSBwcm9qZWN0IGJ1dCBpbiBhIHNlcGFyYXRlIGV4cG9ydCBzZXQuCisKKyMgQ29tbWFuZHMgYmV5b25kIHRoaXMgcG9pbnQgc2hvdWxkIG5vdCBuZWVkIHRvIGtub3cgdGhlIHZlcnNpb24uCitzZXQoQ01BS0VfSU1QT1JUX0ZJTEVfVkVSU0lPTikKK2NtYWtlX3BvbGljeShQT1ApCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ2xtL2dsbV8wLjkuOS41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG1fMC45LjkuNS5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2N2U0ZS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ2xtL2dsbV8wLjkuOS41LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotU1VNTUFSWSA9ICJPcGVuR0wgTWF0aGVtYXRpY3MgTGlicmFyeSIKLURFU0NSSVBUSU9OID0gIk9wZW5HTCBNYXRoZW1hdGljcyAoR0xNKSBpcyBhIGhlYWRlciBvbmx5IEMrKyBcCi1tYXRoZW1hdGljcyBsaWJyYXJ5IGZvciBncmFwaGljcyBzb2Z0d2FyZSBiYXNlZCBvbiB0aGUgT3BlbkdMIFwKLVNoYWRpbmcgTGFuZ3VhZ2UgKEdMU0wpIHNwZWNpZmljYXRpb25zLiIKLUhPTUVQQUdFID0gImh0dHBzOi8vZ2xtLmctdHJ1Yy5uZXQiCi1CVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9nLXRydWMvZ2xtL2lzc3VlcyIKLVNFQ1RJT04gPSAibGlicyIKLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcmVhZG1lLm1kO2JlZ2lubGluZT0yMTtlbmRsaW5lPTIyO21kNT0zMDc1YjU3MjdkMzZmMjllZGNjZjk3YjkzZTcyYjc5MCIKLQotU1JDX1VSSSA9ICIgXAotICAgIGdpdDovL2dpdGh1Yi5jb20vZy10cnVjL2dsbTticmFuY2g9bWFzdGVyIFwKLSIKLSMgdjAuOS45LjUKLVNSQ1JFViA9ICJkMTYyZWVlMWU2ZjdjMzE3YTA5MjI5ZmU2Y2VhYjhlYzZhYjlhNGI0IgotCi1TID0gIiR7V09SS0RJUn0vZ2l0IgotCi1pbmhlcml0IGNtYWtlCi0KLVJERVBFTkRTXyR7UE59LWRldiA9ICIiCi0KLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dsbS9nbG1fMC45LjkuNi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9nbG0vZ2xtXzAuOS45LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNGRiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9nbG0vZ2xtXzAuOS45LjYuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJPcGVuR0wgTWF0aGVtYXRpY3MgTGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIk9wZW5HTCBNYXRoZW1hdGljcyAoR0xNKSBpcyBhIGhlYWRlciBvbmx5IEMrKyBcCittYXRoZW1hdGljcyBsaWJyYXJ5IGZvciBncmFwaGljcyBzb2Z0d2FyZSBiYXNlZCBvbiB0aGUgT3BlbkdMIFwKK1NoYWRpbmcgTGFuZ3VhZ2UgKEdMU0wpIHNwZWNpZmljYXRpb25zLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2xtLmctdHJ1Yy5uZXQiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9nLXRydWMvZ2xtL2lzc3VlcyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY29weWluZy50eHQ7bWQ1PTRhNzM1ZTMzZjI3MWY1NzQwNGZkYTE3ZTgwMDg1NDExIgorCitTUkNfVVJJID0gIiBcCisgICAgZ2l0Oi8vZ2l0aHViLmNvbS9nLXRydWMvZ2xtO2JyYW5jaD1tYXN0ZXIgXAorICAgIGZpbGU6Ly8wMDAxLUZpeC1XaW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24td2FybmluZ3Mtd2l0aC1jbGEucGF0Y2ggXAorICAgIGZpbGU6Ly9nbG1Db25maWcuY21ha2UuaW4gXAorICAgIGZpbGU6Ly9nbG1Db25maWdWZXJzaW9uLmNtYWtlLmluIFwKKyAgICBmaWxlOi8vZ2xtLnBjLmluIFwKKyAgICBmaWxlOi8vZ2xtVGFyZ2V0cy5jbWFrZSBcCisiCitTUkNSRVYgPSAiNGRiOGY4OWFhY2U4ZjA0YzgzOWI2MDZlMTViMzlmYjgzODNlYzczMiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBjbWFrZQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0gJHtEfSR7ZG9jZGlyfS9nbG0gJHtEfSR7bGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfS9jbWFrZS9nbG0KKyAgICBjcCAtUiAtLW5vLWRlcmVmZXJlbmNlIC0tcHJlc2VydmU9bW9kZSxsaW5rcyAke1N9L2dsbSAke0R9JHtpbmNsdWRlZGlyfQorICAgIGNwIC1SIC0tbm8tZGVyZWZlcmVuY2UgLS1wcmVzZXJ2ZT1tb2RlLGxpbmtzICR7U30vZG9jICR7RH0ke2RvY2Rpcn0vZ2xtCisgICAgcm0gJHtEfSR7aW5jbHVkZWRpcn0vZ2xtL0NNYWtlTGlzdHMudHh0CisgICAgc2VkICJzL0BWRVJTSU9OQC8ke1BWfS8iICR7V09SS0RJUn0vZ2xtQ29uZmlnVmVyc2lvbi5jbWFrZS5pbiA+ICR7RH0ke2xpYmRpcn0vY21ha2UvZ2xtL2dsbUNvbmZpZ1ZlcnNpb24uY21ha2UKKyAgICBzZWQgInMvQFZFUlNJT05ALyR7UFZ9LyIgJHtXT1JLRElSfS9nbG1Db25maWcuY21ha2UuaW4gPiAke0R9JHtsaWJkaXJ9L2NtYWtlL2dsbS9nbG1Db25maWcuY21ha2UKKyAgICBzZWQgInMvQFZFUlNJT05ALyR7UFZ9LyIgJHtXT1JLRElSfS9nbG0ucGMuaW4gPiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9nbG0ucGMKKyAgICBpbnN0YWxsIC1EbTY0NCAke1dPUktESVJ9L2dsbVRhcmdldHMuY21ha2UgJHtEfSR7bGliZGlyfS9jbWFrZS9nbG0vZ2xtVGFyZ2V0cy5jbWFrZQorCit9CisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dwaG90bzIvZ3Bob3RvMl8yLjUuMTQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ3Bob3RvMi9ncGhvdG8yXzIuNS4yMy5iYgpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ3Bob3RvMi9ncGhvdG8yXzIuNS4xNC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dwaG90bzIvZ3Bob3RvMl8yLjUuMjMuYmIKaW5kZXggNzVhZDdmNC4uZWYzMTAwZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dwaG90bzIvZ3Bob3RvMl8yLjUuMTQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dwaG90bzIvZ3Bob3RvMl8yLjUuMjMuYmIKQEAgLTExLDggKzExLDggQEAKICAgICAgICAgICAgZmlsZTovLzAwMDItTG9vay1mb3ItcG9wdC13aXRoLUdQX0NIRUNLX0xJQlJBUlktZnVuY3Rpb24ucGF0Y2ggXAogIgogCi1TUkNfVVJJW2dwaG90bzIubWQ1c3VtXSA9ICI2YzZhMjFiNWU4NzkzMzBjZGQ3MWVmOTJkY2UzNjM5OSIKLVNSQ19VUklbZ3Bob3RvMi5zaGEyNTZzdW1dID0gIjkzMDJkMDJmYjQ3MmQ0OTM2OTg4MzgyYjcyNzdjY2RjNGVkYWY3ZWRlNTZjNDkwMjc4OTEyZmZkMDYyNzY5OWMiCitTUkNfVVJJW2dwaG90bzIubWQ1c3VtXSA9ICIwYWJkNWFlODMxNTEwOWFlNjZiZjA2YWMzNzkwMjY3OCIKK1NSQ19VUklbZ3Bob3RvMi5zaGEyNTZzdW1dID0gImRmODcwOTIxMDBlNzc2NmM5ZDBhNDMyMzIxN2M5MTkwOGE5Yzg5MWMwZDM2NzBlYmY0MGI3NjkwM2JlNDU4ZDEiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ncGhvdG8yL2xpYmdwaG90bzJfMi41LjE3LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dwaG90bzIvbGliZ3Bob3RvMl8yLjUuMjMuYmIKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2dwaG90bzIvbGliZ3Bob3RvMl8yLjUuMTcuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ncGhvdG8yL2xpYmdwaG90bzJfMi41LjIzLmJiCmluZGV4IDYyMzAzN2IuLmEzYmRmOWMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ncGhvdG8yL2xpYmdwaG90bzJfMi41LjE3LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ncGhvdG8yL2xpYmdwaG90bzJfMi41LjIzLmJiCkBAIC0xNCw4ICsxNCw4IEBACiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5hYy1yZW1vdmUtQU1fUE9fU1VCRElSUy5wYXRjaCBcCiAiCiAKLVNSQ19VUklbbGliZ3Bob3RvMi5tZDVzdW1dID0gImFlNzhlN2E3OTM2YTY5NjJjM2EyMmIyNTZiZWUxODY5IgotU1JDX1VSSVtsaWJncGhvdG8yLnNoYTI1NnN1bV0gPSAiNDE3NDY0ZjBhMzEzZmE5MzdlOGE3MWNkZjE4YTM3MWNmMDFlNzUwODMwMTk1Y2Q2M2FlMzFkYTBkMDkyYjU1NSIKK1NSQ19VUklbbGliZ3Bob3RvMi5tZDVzdW1dID0gImJmMDUyY2U4MTVlNjA3ZGM3ODFjNWIwZjNjNWNhNWMwIgorU1JDX1VSSVtsaWJncGhvdG8yLnNoYTI1NnN1bV0gPSAiZDhhZjIzMzY0YWE0MGZkODYwN2Y3ZTA3M2RmNzRlN2FjZTA1NTgyZjRiYTEzZjE3MjRkMTJkM2M5N2U4ODUyZCIKIAogaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgbGliX3BhY2thZ2UKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2d0a3BlcmYvZ3RrcGVyZi9nZXR0ZXh0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2d0a3BlcmYvZ3RrcGVyZi9nZXR0ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzI3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ3RrcGVyZi9ndGtwZXJmL2dldHRleHQucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRml4IGJ1aWxkIHdpdGggZ2V0dGV4dCAwLjIwLngKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0zLDcgKzMsNyBAQAorICMjIElmIHlvdSBkb24ndCB3YW50IGl0IHRvIG92ZXJ3cml0ZSBpdCwKKyAjIyAJUGxlYXNlIGRpc2FibGUgaXQgaW4gdGhlIEFuanV0YSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24KKyAKKy1TVUJESVJTID0gaW50bCBwbyBzcmMgcGl4bWFwcworK1NVQkRJUlMgPSBwbyBzcmMgcGl4bWFwcworIAorIGd0a3BlcmZkb2NkaXIgPSAke3ByZWZpeH0vZG9jL2d0a3BlcmYKKyBndGtwZXJmZG9jX0RBVEEgPSBcCistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTMxLDggKzMxLDcgQEAgQUNfREVGSU5FX1VOUVVPVEVEKEdFVFRFWFRfUEFDS0FHRSwgIiRHRQorIAorIGRubCBMYW5ndWFnZXMgd2hpY2ggeW91ciBhcHBsaWNhdGlvbiBzdXBwb3J0cworIEFMTF9MSU5HVUFTPSIiCistQU1fR05VX0dFVFRFWFQKKy1BTV9HTlVfR0VUVEVYVF9WRVJTSU9OKDAuMTAuNDApCisrQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSkKKyAKKyBkbmwgU2V0IFBBQ0tBR0VfTE9DQUxFX0RJUiBpbiBjb25maWcuaC4KKyBpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSI7IHRoZW4KK0BAIC0xMDAsNyArOTksNiBAQCBBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRV9TT1VSQ0VfRElSLCAiCisgCisgQUNfT1VUUFVUKFsKKyBNYWtlZmlsZQorLWludGwvTWFrZWZpbGUKKyBwby9NYWtlZmlsZS5pbgorIHNyYy9NYWtlZmlsZQorIHBpeG1hcHMvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ndGtwZXJmL2d0a3BlcmZfMC40MC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ndGtwZXJmL2d0a3BlcmZfMC40MC5iYgppbmRleCA2ZmUyNTgyLi5iNGQ5NGZmIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ3RrcGVyZi9ndGtwZXJmXzAuNDAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2d0a3BlcmYvZ3RrcGVyZl8wLjQwLmJiCkBAIC03LDYgKzcsNyBAQAogICAgICAgICAgICBmaWxlOi8vTWFrZXZhcnMgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN0ZGxpYi5oLWZvci1leGl0LUFQSS5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXRpbWluZy5jLUZpeC1mb3JtYXQtc2VjdXJpdHktZXJyb3JzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dldHRleHQucGF0Y2ggXAogICAgICAgICAgICAiCiAKIFNSQ19VUklbbWQ1c3VtXSA9ICI0MzMxZGRlNGJiODM4NjVlMTU0ODI4ODVmY2IwY2M1MyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ndGt3YXZlL2d0a3dhdmVfMy4zLjEwMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ndGt3YXZlL2d0a3dhdmVfMy4zLjEwMy5iYgpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ3Rrd2F2ZS9ndGt3YXZlXzMuMy4xMDIuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9ndGt3YXZlL2d0a3dhdmVfMy4zLjEwMy5iYgppbmRleCBjZDNiNjYyLi4yODZkOWFhIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvZ3Rrd2F2ZS9ndGt3YXZlXzMuMy4xMDIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2d0a3dhdmUvZ3Rrd2F2ZV8zLjMuMTAzLmJiCkBAIC03LDggKzcsOCBAQAogCiBTUkNfVVJJID0gImh0dHA6Ly9ndGt3YXZlLnNvdXJjZWZvcmdlLm5ldC8ke0JQfS50YXIuZ3oiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICIxM2RhN2Q0MjM1ZDQwMzFmZGU1Mjk3MTgzMDQ1ODg1MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4MGJiN2NiOTJkYjQ1ODcyMjA5ZjRjYTQ4ZmM5NWEwNDYwZTBkODliMGZlMGMzMTBjODM2ZDliMDRjNzdmZWM3IgorU1JDX1VSSVttZDVzdW1dID0gIjVhOWE1OTEzZjlhMDJhMzMzYjJiMjM2MjZmMTUzZmQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMzMjVhYmY3Y2YyNmM1MzMwOWE2N2MwZWNhYWYxOTY3NzRmYTk4MmE3MTdhMTAyYzU5OWFjOGE1MTZlZWVhZjciCiAKIGluaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KIERFUEVORFMgPSAidGNsIHRrIGdwZXJmLW5hdGl2ZSBiemlwMiB4eiBwYW5nbyB6bGliIGd0aysgZ2RrLXBpeGJ1ZiBnbGliLTIuMCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsMi1pbWFnZV8yLjAuMy5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsMi1pbWFnZV8yLjAuNS5iYgpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbDItaW1hZ2VfMi4wLjMuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsMi1pbWFnZV8yLjAuNS5iYgppbmRleCA2ZGViMzUyLi4wYTM0NmJkIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbDItaW1hZ2VfMi4wLjMuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwyLWltYWdlXzIuMC41LmJiCkBAIC0yLDEzICsyLDEzIEBACiBTRUNUSU9OID0gImxpYnMiCiAKIExJQ0VOU0UgPSAiWmxpYiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcudHh0O21kNT1hODU1YTllYjU1MDdmYzU1NmU2NzIwODBjNGI0MjhjYSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcudHh0O21kNT04MjJlZGI2OTRiMjBmZjE2Y2VlZjg1YjI3ZjYxYzExZiIKIAogREVQRU5EUyA9ICJ0aWZmIHpsaWIgbGlicG5nIGpwZWcgdmlydHVhbC9saWJzZGwyIGxpYndlYnAiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnL3Byb2plY3RzL1NETF9pbWFnZS9yZWxlYXNlL1NETDJfaW1hZ2UtJHtQVn0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gImM2YmFmNmRmYTgwZmE4YTY2ODUzNjYxYTM2YTYwMzRlIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM1MTBjMjVkYTczNWZmY2Q4Y2UzYjY1MDczMTUwZmY0ZjdmOTQ5M2I4NjZlODViODM3MzgwODNiNTU2ZDIzNjgiCitTUkNfVVJJW21kNXN1bV0gPSAiZjI2ZjNhMTUzMzYwYThmMDllZDUyMjBlZjdiMDdhZWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmRkNWY2ZTAyNjY4MmY3ZDdlMWJlMGI2MDUxYjIwOWRhMmY0MDJhMmRkOGJkMWM0YmQ5YzI1YWQyNjMxMDhkMCIKIAogUyA9ICIke1dPUktESVJ9L1NETDJfaW1hZ2UtJHtQVn0iCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsMi1taXhlcl8yLjAuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsMi1taXhlcl8yLjAuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbDItbWl4ZXJfMi4wLjIuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsMi1taXhlcl8yLjAuNC5iYgppbmRleCA3MThmM2Y1Li5hYTI0NmY5IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbDItbWl4ZXJfMi4wLjIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwyLW1peGVyXzIuMC40LmJiCkBAIC0yLDEyICsyLDEyIEBACiBTRUNUSU9OID0gImxpYnMiCiBERVBFTkRTID0gInZpcnR1YWwvbGlic2RsMiBmbGFjIGxpYm1pa21vZCBsaWJ2b3JiaXMiCiBMSUNFTlNFID0gIlpsaWIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9OTVlMGMzY2Y2M2Y3MWI5NTA5MTFlNjk4YTU0YjdmYzUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9NTE2ZGFmN2ExNzdhZDRjODg3NGJiOWVmYTFhNjljMWYiCiAKIFNSQ19VUkkgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnL3Byb2plY3RzL1NETF9taXhlci9yZWxlYXNlL1NETDJfbWl4ZXItJHtQVn0udGFyLmd6IgogCi1TUkNfVVJJW21kNXN1bV0gPSAiYWFhMDU1MTM5Mzk5M2MxNGExM2Y3MmIzMzljMGVkNmMiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGU2MTVlMjdlZmNhNGY0MzlkZjlhZjZhYTJjNmRlODQxNTBkMTdjYmZkMTIxNzRiNTQ4NjhjMTJmMTljODNiYiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMzZlODQxMGNhYzQ2YjAwYTRkMDE3NTJiMzJjM2ViMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNGNmNWEzODJjMDYxY2Q3NTA4MWNmMjQ2YzJhYTJmOWRmOGRiMDRiZGRhOGRjZGM2YjZjY2E1NWJlZGUyNDE5IgogCiBTID0gIiR7V09SS0RJUn0vU0RMMl9taXhlci0ke1BWfSIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwyLXR0Zi91c2UucGtnLWNvbmZpZy5mb3IuZnJlZXR5cGUyLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwyLXR0Zi91c2UucGtnLWNvbmZpZy5mb3IuZnJlZXR5cGUyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGZiZWM2Li4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsMi10dGYvdXNlLnBrZy1jb25maWcuZm9yLmZyZWV0eXBlMi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLUZyb20gZTZkMmMwZTEzMDgxMWMxNWI1ZjVjYzEwMjIxZmFlMTgyY2I4NjA5ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgotRGF0ZTogVGh1LCAyMiBNYXkgMjAxNCAxMDo1OTozMyArMDEwMAotU3ViamVjdDogW1BBVENIXSBmcmVldHlwZS1jb25maWcgd2FzIHJlbW92ZWQgZnJvbSBvZS1jb3JlIGluCi0KLWNvbW1pdCA1ODcwYmQyNzJiMGIwNzdkMDgyNmZiOTAwYjI1MTg4NGMxYzA1MDYxCi0KLSAgICBiaW5jb25maWctZGlzYWJsZWQ6IEFkZCBjbGFzcyBhbmQgdXNlCi0KLS0tLQotIGNvbmZpZ3VyZS5pbiB8IDM4ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KLWluZGV4IDliMzZlMTUuLmYzMDBjYWUgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuaW4KLSsrKyBiL2NvbmZpZ3VyZS5pbgotQEAgLTg2LDM5ICs4NiwxMSBAQCBjYXNlICIkaG9zdCIgaW4KLSBlc2FjCi0gQU1fQ09ORElUSU9OQUwoVVNFX1ZFUlNJT05fUkMsIHRlc3QgeCR1c2VfdmVyc2lvbl9yYyA9IHh0cnVlKQotIAotLWRubCBDaGVjayBmb3IgdGhlIEZyZWVUeXBlIDIgbGlicmFyeQotLWRubAotLWRubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIGZyZWV0eXBlLWNvbmZpZyBzY3JpcHQKLS1kbmwKLS1BQ19BUkdfV0lUSChmcmVldHlwZS1wcmVmaXgsWyAgLS13aXRoLWZyZWV0eXBlLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgRlJFRVRZUEUgaXMgCi0taW5zdGFsbGVkIChvcHRpb25hbCldLAotLSAgICAgICAgICAgIGZyZWV0eXBlX3ByZWZpeD0iJHdpdGh2YWwiLCBmcmVldHlwZV9wcmVmaXg9IiIpCi0tQUNfQVJHX1dJVEgoZnJlZXR5cGUtZXhlYy1wcmVmaXgsWyAgLS13aXRoLWZyZWV0eXBlLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCAKLS13aGVyZSBGUkVFVFlQRSBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCi0tICAgICAgICAgICAgZnJlZXR5cGVfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgZnJlZXR5cGVfZXhlY19wcmVmaXg9IiIpCi0tCi0taWYgdGVzdCB4JGZyZWV0eXBlX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCi0tICAgICBmcmVldHlwZV9hcmdzPSIkZnJlZXR5cGVfYXJncyAtLWV4ZWMtcHJlZml4PSRmcmVldHlwZV9leGVjX3ByZWZpeCIKLS0gICAgIGlmIHRlc3QgeCR7RlJFRVRZUEVfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KLS0gICAgICAgIEZSRUVUWVBFX0NPTkZJRz0kZnJlZXR5cGVfZXhlY19wcmVmaXgvYmluL2ZyZWV0eXBlLWNvbmZpZwotLSAgICAgZmkKLS1maQotLWlmIHRlc3QgeCRmcmVldHlwZV9wcmVmaXggIT0geCA7IHRoZW4KLS0gICAgIGZyZWV0eXBlX2FyZ3M9IiRmcmVldHlwZV9hcmdzIC0tcHJlZml4PSRmcmVldHlwZV9wcmVmaXgiCi0tICAgICBpZiB0ZXN0IHgke0ZSRUVUWVBFX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCi0tICAgICAgICBGUkVFVFlQRV9DT05GSUc9JGZyZWV0eXBlX3ByZWZpeC9iaW4vZnJlZXR5cGUtY29uZmlnCi0tICAgICBmaQotLWZpCi0tQUNfUEFUSF9QUk9HKEZSRUVUWVBFX0NPTkZJRywgZnJlZXR5cGUtY29uZmlnLCBubykKLS1ub19mcmVldHlwZT0iIgotLWlmIHRlc3QgIiRGUkVFVFlQRV9DT05GSUciID0gIm5vIiA7IHRoZW4KLS0gICAgQUNfTVNHX0VSUk9SKFsKLS0qKiogVW5hYmxlIHRvIGZpbmQgRnJlZVR5cGUyIGxpYnJhcnkgKGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnLykKLS1dKQotLWVsc2UKLS0gICAgQ0ZMQUdTPSIkQ0ZMQUdTIGAkRlJFRVRZUEVfQ09ORklHICRmcmVldHlwZWNvbmZfYXJncyAtLWNmbGFnc2AiCi0tICAgIExJQlM9IiRMSUJTIGAkRlJFRVRZUEVfQ09ORklHICRmcmVldHlwZWNvbmZfYXJncyAtLWxpYnNgIgotLWZpCi0rUEtHX0NIRUNLX01PRFVMRVMoRlJFRVRZUEUyLCBmcmVldHlwZTIsIAotKyAgICBDRkxBR1M9IiRDRkxBR1MgJEZSRUVUWVBFMl9DRkxBR1MiCi0rICAgIExJQlM9IiRMSUJTICRGUkVFVFlQRTJfTElCUyIsCi0rICAgIEFDX01TR19FUlJPUihbKioqIFVuYWJsZSB0byBmaW5kIEZyZWVUeXBlMiBsaWJyYXJ5IChodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy8pXSkKLSspCi0gCi0gZG5sIENoZWNrIGZvciBTREwKLSBTRExfVkVSU0lPTj0yLjAuMApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwyLXR0Zl8yLjAuMTQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbDItdHRmXzIuMC4xNS5iYgpzaW1pbGFyaXR5IGluZGV4IDcxJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbDItdHRmXzIuMC4xNC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwyLXR0Zl8yLjAuMTUuYmIKaW5kZXggNjIyNGFkMy4uN2Q4OTZjZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwyLXR0Zl8yLjAuMTQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwyLXR0Zl8yLjAuMTUuYmIKQEAgLTIsMTUgKzIsMTQgQEAKIFNFQ1RJT04gPSAibGlicyIKIERFUEVORFMgPSAidmlydHVhbC9saWJzZGwyIGZyZWV0eXBlIHZpcnR1YWwvbGliZ2wiCiBMSUNFTlNFID0gIlpsaWIiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9Y2IzM2U3YzRkZjlmYmRlMzg5ZjE0OWFkNmJjOTNjZTUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9NGJiMjdkNTUwZmRhZmNkOGY4ZTRmYjhjYmIyNzc1ZWYiCiAKIFNSQ19VUkkgPSAiIFwKICAgICBodHRwOi8vd3d3LmxpYnNkbC5vcmcvcHJvamVjdHMvU0RMX3R0Zi9yZWxlYXNlL1NETDJfdHRmLSR7UFZ9LnRhci5neiBcCi0gICAgZmlsZTovL3VzZS5wa2ctY29uZmlnLmZvci5mcmVldHlwZTIucGF0Y2ggXAogICAgIGZpbGU6Ly9hdXRvbWFrZV9mb3JlaWduLnBhdGNoIFwKICIKLVNSQ19VUklbbWQ1c3VtXSA9ICJlNTNjMDVlMWU3ZjEzODJjMzE2YWZkNmM3NjMzODhiMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzNGRiNWUyMGJjZjY0ZTcwNzFmZTlhZTI1YWNhYTdkNzJiZGM0ZjExYWIzY2U1OWFjYzc2OGFiNjJmZTM5Mjc2IgorU1JDX1VSSVttZDVzdW1dID0gIjA0ZmUwNmZmNzYyM2Q3YmRjYjcwNGU4MmY1Zjg4MzkxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE5ZWNlYjFhZDg4YzFmMTU0NWNkN2JkMjhlN2NiYzBiMmMxNDE5MWQ0MDIzOGY1MzFhMTViMDFiMWIyMmNkMzMiCiAKIFMgPSAiJHtXT1JLRElSfS9TREwyX3R0Zi0ke1BWfSIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnZuY3NlcnZlci9saWJ2bmNzZXJ2ZXJfMC45LjEyLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnZuY3NlcnZlci9saWJ2bmNzZXJ2ZXJfMC45LjEyLmJiCmluZGV4IDRlNGFjYjguLjIyZmM4M2EgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJ2bmNzZXJ2ZXIvbGlidm5jc2VydmVyXzAuOS4xMi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvbGlidm5jc2VydmVyL2xpYnZuY3NlcnZlcl8wLjkuMTIuYmIKQEAgLTYsMjMgKzYsMzggQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM2MWI2YjgzN2NhZDI2YzY5MDBhOTI2YjYyYWFkYTVmIgogCiBQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAyNGJwcCBcCisgICAgZmlsZXRyYW5zZmVyIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTElDRU5TRV9GTEFHU19XSElURUxJU1QnLCdjb21tZXJjaWFsJywnZmZtcGVnJywnJyxkKX0gXAogICAgIGdjcnlwdCBcCiAgICAgZ251dGxzIFwKICAgICBqcGVnIFwKICAgICBsem8gXAogICAgIHBuZyBcCisgICAgcHRocmVhZCBcCiAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kJywnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsZCl9IFwKKyAgICBzYXNsIFwKICAgICBzZGwgXAorICAgIHdlYnNvY2tldHMgXAogICAgIHpsaWIgXAogIgorCitQQUNLQUdFQ09ORklHWzI0YnBwXSA9ICItRFdJVEhfMjRCUFA9T04sLURXSVRIXzI0QlBQPU9GRiwiCitQQUNLQUdFQ09ORklHW2ZpbGV0cmFuc2Zlcl0gPSAiLURXSVRIX1RJR0hUVk5DX0ZJTEVUUkFOU0ZFUj1PTiwtRFdJVEhfVElHSFRWTkNfRklMRVRSQU5TRkVSPU9GRiwiCitQQUNLQUdFQ09ORklHW2ZmbXBlZ10gPSAiLURXSVRIX0ZGTVBFRz1PTiwtRFdJVEhfRkZNUEVHPU9GRixmZm1wZWcsZmZtcGVnIgogUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi1EV0lUSF9HQ1JZUFQ9T04sLURXSVRIX0dDUllQVD1PRkYsbGliZ2NyeXB0LGxpYmdjcnlwdCIKIFBBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItRFdJVEhfR05VVExTPU9OLC1EV0lUSF9HTlVUTFM9T0ZGLGdudXRscyIKIFBBQ0tBR0VDT05GSUdbanBlZ10gPSAiLURXSVRIX0pQRUc9T04sLURXSVRIX0pQRUc9T0ZGLGpwZWciCitQQUNLQUdFQ09ORklHW2lwdjZdID0gIi1EV0lUSF9JUHY2PU9OLC1EV0lUSF9JUHY2PU9GRiwiCiBQQUNLQUdFQ09ORklHW2x6b10gPSAiLURXSVRIX0xaTz1PTiwtRFdJVEhfTFpPPU9GRixsem8iCiBQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi1EV0lUSF9PUEVOU1NMPU9OLC1EV0lUSF9PUEVOU1NMPU9GRixvcGVuc3NsIgogUEFDS0FHRUNPTkZJR1twbmddID0gIi1EV0lUSF9QTkc9T04sLURXSVRIX1BORz1PRkYsbGlicG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbcHRocmVhZF0gPSAiLURXSVRIX1RIUkVBRFM9T04sLURXSVRIX1RIUkVBRFM9T0ZGLCIKIFBBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLURXSVRIX1NZU1RFTUQ9T04sLURXSVRIX1NZU1RFTUQ9T0ZGLHN5c3RlbWQiCitQQUNLQUdFQ09ORklHW3Nhc2xdID0gIi1EV0lUSF9TQVNMPU9OLC1EV0lUSF9TQVNMPU9GRixjeXJ1cy1zYXNsIgogUEFDS0FHRUNPTkZJR1tzZGxdID0gIi1EV0lUSF9TREw9T04sLURXSVRIX1NETD1PRkYsbGlic2RsMiIKK1BBQ0tBR0VDT05GSUdbd2Vic29ja2V0c10gPSAiLURXSVRIX1dFQlNPQ0tFVFM9T04sLURXSVRIX1dFQlNPQ0tFVFM9T0ZGLCIKIFBBQ0tBR0VDT05GSUdbemxpYl0gPSAiLURXSVRIX1pMSUI9T04sLURXSVRIX1pMSUI9T0ZGLHpsaWIiCiAKIFBBQ0tBR0VfQkVGT1JFX1BOID0gImxpYnZuY2NsaWVudCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJ5dWkvbGlieXVpLzAwMDEtRml4LWJ1aWxkLXdpdGgtY2xhbmcucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvbGlieXVpL2xpYnl1aS8wMDAxLUZpeC1idWlsZC13aXRoLWNsYW5nLnBhdGNoCmluZGV4IDQyNjkwMTguLmIwMzcyM2EgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJ5dWkvbGlieXVpLzAwMDEtRml4LWJ1aWxkLXdpdGgtY2xhbmcucGF0Y2gKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnl1aS9saWJ5dWkvMDAwMS1GaXgtYnVpbGQtd2l0aC1jbGFuZy5wYXRjaApAQCAtNjUsOCArNjUsNiBAQAogIHNyYy9ZV2l6YXJkLmggICAgICAgICAgICAgfCAyICstCiAgNDcgZmlsZXMgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCiAKLWRpZmYgLS1naXQgYS9zcmMvWUFsaWdubWVudC5oIGIvc3JjL1lBbGlnbm1lbnQuaAotaW5kZXggZDcxNmM3Ny4uNzI3Njk0NCAxMDA2NDQKIC0tLSBhL3NyYy9ZQWxpZ25tZW50LmgKICsrKyBiL3NyYy9ZQWxpZ25tZW50LmgKIEBAIC0yOCw3ICsyOCw3IEBACkBAIC03OCw4ICs3Niw2IEBACiAgCiAgLyoqCiAgICogSW1wbGVtZW50YXRpb24gb2YgYWxsIHRoZSBhbGlnbm1lbnQgd2lkZ2V0czoKLWRpZmYgLS1naXQgYS9zcmMvWUJhckdyYXBoLmggYi9zcmMvWUJhckdyYXBoLmgKLWluZGV4IDI5ZjdmMjYuLmQ3ZWFhZDIgMTAwNjQ0CiAtLS0gYS9zcmMvWUJhckdyYXBoLmgKICsrKyBiL3NyYy9ZQmFyR3JhcGguaAogQEAgLTI5LDcgKzI5LDcgQEAKQEAgLTkxLDggKzg3LDYgQEAKICBjbGFzcyBZQmFyR3JhcGhTZWdtZW50OwogIAogIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9ZQnVzeUluZGljYXRvci5oIGIvc3JjL1lCdXN5SW5kaWNhdG9yLmgKLWluZGV4IDk1MzBmYTUuLjc1Mjk3ZDggMTAwNjQ0CiAtLS0gYS9zcmMvWUJ1c3lJbmRpY2F0b3IuaAogKysrIGIvc3JjL1lCdXN5SW5kaWNhdG9yLmgKIEBAIC0yNyw3ICsyNyw3IEBACkBAIC0xMDQsOCArOTgsNiBAQAogIAogIAogIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9ZQnV0dG9uQm94LmggYi9zcmMvWUJ1dHRvbkJveC5oCi1pbmRleCA4NGY4ZGJiLi5jYTUxZjU3IDEwMDY0NAogLS0tIGEvc3JjL1lCdXR0b25Cb3guaAogKysrIGIvc3JjL1lCdXR0b25Cb3guaAogQEAgLTMwLDcgKzMwLDcgQEAKQEAgLTEyNiw4ICsxMTgsNiBAQAogIAogIHByb3RlY3RlZDoKICAgICAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lDaGVja0JveC5oIGIvc3JjL1lDaGVja0JveC5oCi1pbmRleCA3OTNjYzc3Li4wM2YzZmFhIDEwMDY0NAogLS0tIGEvc3JjL1lDaGVja0JveC5oCiArKysgYi9zcmMvWUNoZWNrQm94LmgKIEBAIC0zMCw3ICszMCw3IEBACkBAIC0xMzksOCArMTI5LDYgQEAKICAKICBlbnVtIFlDaGVja0JveFN0YXRlCiAgewotZGlmZiAtLWdpdCBhL3NyYy9ZQ2hlY2tCb3hGcmFtZS5oIGIvc3JjL1lDaGVja0JveEZyYW1lLmgKLWluZGV4IDI0M2YxYTAuLjcwMTcxMTAgMTAwNjQ0CiAtLS0gYS9zcmMvWUNoZWNrQm94RnJhbWUuaAogKysrIGIvc3JjL1lDaGVja0JveEZyYW1lLmgKIEBAIC0yOSw3ICsyOSw3IEBACkBAIC0xNTIsOCArMTQwLDYgQEAKICAKICAKICAvKioKLWRpZmYgLS1naXQgYS9zcmMvWUNvbWJvQm94LmggYi9zcmMvWUNvbWJvQm94LmgKLWluZGV4IDQxNjM1OWEuLmFkMGU1NTAgMTAwNjQ0CiAtLS0gYS9zcmMvWUNvbWJvQm94LmgKICsrKyBiL3NyYy9ZQ29tYm9Cb3guaAogQEAgLTI3LDcgKzI3LDcgQEAKQEAgLTE2NSw4ICsxNTEsNiBAQAogIAogIAogIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9ZQ29tbWFuZExpbmUuaCBiL3NyYy9ZQ29tbWFuZExpbmUuaAotaW5kZXggNzBjYjRmZS4uZjM0NGEzYiAxMDA2NDQKIC0tLSBhL3NyYy9ZQ29tbWFuZExpbmUuaAogKysrIGIvc3JjL1lDb21tYW5kTGluZS5oCiBAQCAtMjgsNyArMjgsNyBAQApAQCAtMTc4LDggKzE2Miw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lDb250ZXh0TWVudS5oIGIvc3JjL1lDb250ZXh0TWVudS5oCi1pbmRleCBhNGFjYjFjLi4xMjUzMDAyIDEwMDY0NAogLS0tIGEvc3JjL1lDb250ZXh0TWVudS5oCiArKysgYi9zcmMvWUNvbnRleHRNZW51LmgKIEBAIC0yOSw3ICsyOSw3IEBACkBAIC0xOTEsOCArMTczLDYgQEAKICAKICAKICAvKioKLWRpZmYgLS1naXQgYS9zcmMvWURhdGVGaWVsZC5oIGIvc3JjL1lEYXRlRmllbGQuaAotaW5kZXggZTVhNDY4ZC4uNjE2NGZiYSAxMDA2NDQKIC0tLSBhL3NyYy9ZRGF0ZUZpZWxkLmgKICsrKyBiL3NyYy9ZRGF0ZUZpZWxkLmgKIEBAIC0yNyw3ICsyNyw3IEBACkBAIC0yMDQsOCArMTg0LDYgQEAKICAKICAvKioKICAgKiBJbnB1dCBmaWVsZCBmb3IgZW50ZXJpbmcgYSBkYXRlLgotZGlmZiAtLWdpdCBhL3NyYy9ZRGlhbG9nLmggYi9zcmMvWURpYWxvZy5oCi1pbmRleCA2NmMyNWMwLi4zNzEyMDliIDEwMDY0NAogLS0tIGEvc3JjL1lEaWFsb2cuaAogKysrIGIvc3JjL1lEaWFsb2cuaAogQEAgLTMyLDcgKzMyLDcgQEAKQEAgLTIxNyw4ICsxOTUsNiBAQAogIGNsYXNzIFlFdmVudDsKICBjbGFzcyBZRXZlbnRGaWx0ZXI7CiAgCi1kaWZmIC0tZ2l0IGEvc3JjL1lEb3dubG9hZFByb2dyZXNzLmggYi9zcmMvWURvd25sb2FkUHJvZ3Jlc3MuaAotaW5kZXggYzQ3ZWM0Zi4uZmUwOWE5ZCAxMDA2NDQKIC0tLSBhL3NyYy9ZRG93bmxvYWRQcm9ncmVzcy5oCiArKysgYi9zcmMvWURvd25sb2FkUHJvZ3Jlc3MuaAogQEAgLTI4LDcgKzI4LDcgQEAKQEAgLTIzMCw4ICsyMDYsNiBAQAogIAogIC8qKgogICAqIERvd25sb2FkUHJvZ3Jlc3M6IEEgcHJvZ3Jlc3MgYmFyIHRoYXQgbW9uaXRvcnMgZG93bmxvYWRpbmcgYSBmaWxlIGJ5Ci1kaWZmIC0tZ2l0IGEvc3JjL1lEdW1iVGFiLmggYi9zcmMvWUR1bWJUYWIuaAotaW5kZXggYWVjMTdhMy4uZjhmYjI1MCAxMDA2NDQKIC0tLSBhL3NyYy9ZRHVtYlRhYi5oCiArKysgYi9zcmMvWUR1bWJUYWIuaAogQEAgLTI3LDcgKzI3LDcgQEAKQEAgLTI0Myw4ICsyMTcsNiBAQAogIAogIC8qKgogICAqIER1bWJUYWI6IEEgdmVyeSBzaW1wbGUgdGFiIHdpZGdldCB0aGF0IGNhbiBkaXNwbGF5IGFuZCBzd2l0Y2ggYmV0d2VlbiBhCi1kaWZmIC0tZ2l0IGEvc3JjL1lFbXB0eS5oIGIvc3JjL1lFbXB0eS5oCi1pbmRleCA5YTNjYjM2Li45Yjg4ZmJjIDEwMDY0NAogLS0tIGEvc3JjL1lFbXB0eS5oCiArKysgYi9zcmMvWUVtcHR5LmgKIEBAIC0yOSw3ICsyOSw3IEBACkBAIC0yNTYsOCArMjI4LDYgQEAKICAKICAvKioKICAgKiBBIHdpZGdldCB3aXRoIHplcm8gc2l6ZSwgdXNlZnVsIGFzIGEgcGxhY2Vob2xkZXIuCi1kaWZmIC0tZ2l0IGEvc3JjL1lFdmVudEZpbHRlci5oIGIvc3JjL1lFdmVudEZpbHRlci5oCi1pbmRleCAzZGMxODAzLi43NGFhNjJkIDEwMDY0NAogLS0tIGEvc3JjL1lFdmVudEZpbHRlci5oCiArKysgYi9zcmMvWUV2ZW50RmlsdGVyLmgKIEBAIC0zMiw3ICszMiw3IEBACkBAIC0yNjksOCArMjM5LDYgQEAKICAKICAKICAvKioKLWRpZmYgLS1naXQgYS9zcmMvWUZyYW1lLmggYi9zcmMvWUZyYW1lLmgKLWluZGV4IDExMWU4ZWMuLjRmOGM2MWUgMTAwNjQ0CiAtLS0gYS9zcmMvWUZyYW1lLmgKICsrKyBiL3NyYy9ZRnJhbWUuaAogQEAgLTI5LDcgKzI5LDcgQEAKQEAgLTI4Miw4ICsyNTAsNiBAQAogIAogIAogIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9ZR3JhcGguaCBiL3NyYy9ZR3JhcGguaAotaW5kZXggZDkwZDFhZS4uMjg3ZDgwMCAxMDA2NDQKIC0tLSBhL3NyYy9ZR3JhcGguaAogKysrIGIvc3JjL1lHcmFwaC5oCiBAQCAtMzcsNyArMzcsNyBAQApAQCAtMjk1LDggKzI2MSw2IEBACiAgCiAgLyoqCiAgICogQSBncmFwaCB3aXRoIG5vZGVzIGFuZCBlZGdlcywgcmVuZGVyZWQgd2l0aCBHcmFwaHZpei4KLWRpZmYgLS1naXQgYS9zcmMvWUltYWdlLmggYi9zcmMvWUltYWdlLmgKLWluZGV4IDE3YmVhMjEuLjg0ZWI2NzQgMTAwNjQ0CiAtLS0gYS9zcmMvWUltYWdlLmgKICsrKyBiL3NyYy9ZSW1hZ2UuaAogQEAgLTI5LDcgKzI5LDcgQEAKQEAgLTMwOCw4ICsyNzIsNiBAQAogIAogIC8qKgogICAqIEEgcGljdHVyZSwgcG9zc2libHkgYW5pbWF0ZWQsIGxvYWRlZCBmcm9tIGEgZmlsZS4KLWRpZmYgLS1naXQgYS9zcmMvWUlucHV0RmllbGQuaCBiL3NyYy9ZSW5wdXRGaWVsZC5oCi1pbmRleCA3MDY0MWNlLi5mYTI5YjQyIDEwMDY0NAogLS0tIGEvc3JjL1lJbnB1dEZpZWxkLmgKICsrKyBiL3NyYy9ZSW5wdXRGaWVsZC5oCiBAQCAtMjgsNyArMjgsNyBAQApAQCAtMzIxLDggKzI4Myw2IEBACiAgCiAgCiAgCi1kaWZmIC0tZ2l0IGEvc3JjL1lJbnRGaWVsZC5oIGIvc3JjL1lJbnRGaWVsZC5oCi1pbmRleCA5ZGEwNTM3Li44YWQyOTQ5IDEwMDY0NAogLS0tIGEvc3JjL1lJbnRGaWVsZC5oCiArKysgYi9zcmMvWUludEZpZWxkLmgKIEBAIC0yNyw3ICsyNyw3IEBACkBAIC0zMzQsOCArMjk0LDYgQEAKICAKICAKICAKLWRpZmYgLS1naXQgYS9zcmMvWUxhYmVsLmggYi9zcmMvWUxhYmVsLmgKLWluZGV4IGQyZmZmNjEuLmJmMDZkOGIgMTAwNjQ0CiAtLS0gYS9zcmMvWUxhYmVsLmgKICsrKyBiL3NyYy9ZTGFiZWwuaAogQEAgLTMwLDcgKzMwLDcgQEAKQEAgLTM0Nyw4ICszMDUsNiBAQAogIAogIC8qKgogICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMYWJlbCwgSGVhZGluZyBhbmQgT3V0cHV0RmllbGQgd2lkZ2V0cwotZGlmZiAtLWdpdCBhL3NyYy9ZTGF5b3V0Qm94LmggYi9zcmMvWUxheW91dEJveC5oCi1pbmRleCBlNjUyYTQ1Li4wNzBlYWZmIDEwMDY0NAogLS0tIGEvc3JjL1lMYXlvdXRCb3guaAogKysrIGIvc3JjL1lMYXlvdXRCb3guaAogQEAgLTI5LDcgKzI5LDcgQEAKQEAgLTM2MCw4ICszMTYsNiBAQAogIAogIC8qKgogICAqIEEgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBzdGFja2luZyBvZiB3aWRnZXRzLCBpbXBsZW1lbnRpbmcgSEJveCBhbmQgVkJveC4KLWRpZmYgLS1naXQgYS9zcmMvWUxvZ1ZpZXcuaCBiL3NyYy9ZTG9nVmlldy5oCi1pbmRleCA1M2ZiOWVlLi41YjQ0MjI5IDEwMDY0NAogLS0tIGEvc3JjL1lMb2dWaWV3LmgKICsrKyBiL3NyYy9ZTG9nVmlldy5oCiBAQCAtMjcsNyArMjcsNyBAQApAQCAtMzczLDggKzMyNyw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lNZW51QnV0dG9uLmggYi9zcmMvWU1lbnVCdXR0b24uaAotaW5kZXggMjA1ZTczMC4uNWRmN2VmYiAxMDA2NDQKIC0tLSBhL3NyYy9ZTWVudUJ1dHRvbi5oCiArKysgYi9zcmMvWU1lbnVCdXR0b24uaAogQEAgLTI5LDcgKzI5LDcgQEAKQEAgLTM4Niw4ICszMzgsNiBAQAogIAogIAogIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9ZTXVsdGlMaW5lRWRpdC5oIGIvc3JjL1lNdWx0aUxpbmVFZGl0LmgKLWluZGV4IGM1MmE2YWUuLjFmNzkyZjggMTAwNjQ0CiAtLS0gYS9zcmMvWU11bHRpTGluZUVkaXQuaAogKysrIGIvc3JjL1lNdWx0aUxpbmVFZGl0LmgKIEBAIC0yNyw3ICsyNyw3IEBACkBAIC0zOTksOCArMzQ5LDYgQEAKICAKICAvKioKICAgKiBBIG11bHRpLWxpbmUgcGxhaW4tdGV4dCBhcmVhCi1kaWZmIC0tZ2l0IGEvc3JjL1lNdWx0aVByb2dyZXNzTWV0ZXIuaCBiL3NyYy9ZTXVsdGlQcm9ncmVzc01ldGVyLmgKLWluZGV4IDU3Yzc1OGQuLmY2YmVjOTEgMTAwNjQ0CiAtLS0gYS9zcmMvWU11bHRpUHJvZ3Jlc3NNZXRlci5oCiArKysgYi9zcmMvWU11bHRpUHJvZ3Jlc3NNZXRlci5oCiBAQCAtMjgsNyArMjgsNyBAQApAQCAtNDEyLDggKzM2MCw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lNdWx0aVNlbGVjdGlvbkJveC5oIGIvc3JjL1lNdWx0aVNlbGVjdGlvbkJveC5oCi1pbmRleCBiYmU1YTIwLi5mM2EyOTQ3IDEwMDY0NAogLS0tIGEvc3JjL1lNdWx0aVNlbGVjdGlvbkJveC5oCiArKysgYi9zcmMvWU11bHRpU2VsZWN0aW9uQm94LmgKIEBAIC0yNyw3ICsyNyw3IEBACkBAIC00MjUsOCArMzcxLDYgQEAKICAKICAKICAvKioKLWRpZmYgLS1naXQgYS9zcmMvWVBhcnRpdGlvblNwbGl0dGVyLmggYi9zcmMvWVBhcnRpdGlvblNwbGl0dGVyLmgKLWluZGV4IDI4MzliYmMuLjlkZTExNzQgMTAwNjQ0CiAtLS0gYS9zcmMvWVBhcnRpdGlvblNwbGl0dGVyLmgKICsrKyBiL3NyYy9ZUGFydGl0aW9uU3BsaXR0ZXIuaAogQEAgLTI4LDcgKzI4LDcgQEAKQEAgLTQzOCw4ICszODIsNiBAQAogIAogIAogIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9ZUHJvZ3Jlc3NCYXIuaCBiL3NyYy9ZUHJvZ3Jlc3NCYXIuaAotaW5kZXggNzE4MzUyZi4uYmFhYjY2MiAxMDA2NDQKIC0tLSBhL3NyYy9ZUHJvZ3Jlc3NCYXIuaAogKysrIGIvc3JjL1lQcm9ncmVzc0Jhci5oCiBAQCAtMjcsNyArMjcsNyBAQApAQCAtNDUxLDggKzM5Myw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lQdXNoQnV0dG9uLmggYi9zcmMvWVB1c2hCdXR0b24uaAotaW5kZXggNWI2NWM5OC4uZTI4ODI1MiAxMDA2NDQKIC0tLSBhL3NyYy9ZUHVzaEJ1dHRvbi5oCiArKysgYi9zcmMvWVB1c2hCdXR0b24uaAogQEAgLTI3LDcgKzI3LDcgQEAKQEAgLTQ2NCw4ICs0MDQsNiBAQAogIAogIAogIAotZGlmZiAtLWdpdCBhL3NyYy9ZUmFkaW9CdXR0b24uaCBiL3NyYy9ZUmFkaW9CdXR0b24uaAotaW5kZXggOWRjNjJkZS4uNWE3YzBkZCAxMDA2NDQKIC0tLSBhL3NyYy9ZUmFkaW9CdXR0b24uaAogKysrIGIvc3JjL1lSYWRpb0J1dHRvbi5oCiBAQCAtMjgsNyArMjgsNyBAQApAQCAtNDc3LDggKzQxNSw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lSYWRpb0J1dHRvbkdyb3VwLmggYi9zcmMvWVJhZGlvQnV0dG9uR3JvdXAuaAotaW5kZXggMDYzYTUyZS4uNjcxYTI1NyAxMDA2NDQKIC0tLSBhL3NyYy9ZUmFkaW9CdXR0b25Hcm91cC5oCiArKysgYi9zcmMvWVJhZGlvQnV0dG9uR3JvdXAuaAogQEAgLTI4LDcgKzI4LDcgQEAKQEAgLTQ5MCw4ICs0MjYsNiBAQAogIAogIHR5cGVkZWYgc3RkOjpsaXN0PFlSYWRpb0J1dHRvbiAqPiAJCVlSYWRpb0J1dHRvbkxpc3Q7CiAgdHlwZWRlZiBZUmFkaW9CdXR0b25MaXN0OjppdGVyYXRvcgkJWVJhZGlvQnV0dG9uTGlzdEl0ZXJhdG9yOwotZGlmZiAtLWdpdCBhL3NyYy9ZUmljaFRleHQuaCBiL3NyYy9ZUmljaFRleHQuaAotaW5kZXggMTQ5YmZiMy4uODZiM2Y4MCAxMDA2NDQKIC0tLSBhL3NyYy9ZUmljaFRleHQuaAogKysrIGIvc3JjL1lSaWNoVGV4dC5oCiBAQCAtMzAsNyArMzAsNyBAQApAQCAtNTAzLDggKzQzNyw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lTZWxlY3Rpb25Cb3guaCBiL3NyYy9ZU2VsZWN0aW9uQm94LmgKLWluZGV4IDdmYzRmYjguLjliYmY5ZjMgMTAwNjQ0CiAtLS0gYS9zcmMvWVNlbGVjdGlvbkJveC5oCiArKysgYi9zcmMvWVNlbGVjdGlvbkJveC5oCiBAQCAtMjcsNyArMjcsNyBAQApAQCAtNTE2LDggKzQ0OCw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lTZWxlY3Rpb25XaWRnZXQuaCBiL3NyYy9ZU2VsZWN0aW9uV2lkZ2V0LmgKLWluZGV4IGFiYmRmYjQuLmNmMDVhZmQgMTAwNjQ0CiAtLS0gYS9zcmMvWVNlbGVjdGlvbldpZGdldC5oCiArKysgYi9zcmMvWVNlbGVjdGlvbldpZGdldC5oCiBAQCAtMjksNyArMjksNyBAQApAQCAtNTI5LDggKzQ1OSw2IEBACiAgCiAgLyoqCiAgICogQmFzZSBjbGFzcyBmb3IgdmFyaW91cyBraW5kcyBvZiBtdWx0aS12YWx1ZSB3aWRnZXRzLgotZGlmZiAtLWdpdCBhL3NyYy9ZU2ltcGxlSW5wdXRGaWVsZC5oIGIvc3JjL1lTaW1wbGVJbnB1dEZpZWxkLmgKLWluZGV4IDZkOTI2ZDQuLmI5M2ZlNmIgMTAwNjQ0CiAtLS0gYS9zcmMvWVNpbXBsZUlucHV0RmllbGQuaAogKysrIGIvc3JjL1lTaW1wbGVJbnB1dEZpZWxkLmgKIEBAIC0yNyw3ICsyNyw3IEBACkBAIC01NDIsOCArNDcwLDYgQEAKICAKICAKICAvKioKLWRpZmYgLS1naXQgYS9zcmMvWVNsaWRlci5oIGIvc3JjL1lTbGlkZXIuaAotaW5kZXggZDI5ZjZiOC4uNGJjZDdkMyAxMDA2NDQKIC0tLSBhL3NyYy9ZU2xpZGVyLmgKICsrKyBiL3NyYy9ZU2xpZGVyLmgKIEBAIC0yNyw3ICsyNyw3IEBACkBAIC01NTUsOCArNDgxLDYgQEAKICAKICAKICAvKioKLWRpZmYgLS1naXQgYS9zcmMvWVNwYWNpbmcuaCBiL3NyYy9ZU3BhY2luZy5oCi1pbmRleCBlOGFhZmQzLi4wNjZjZDY4IDEwMDY0NAogLS0tIGEvc3JjL1lTcGFjaW5nLmgKICsrKyBiL3NyYy9ZU3BhY2luZy5oCiBAQCAtMjgsNyArMjgsNyBAQApAQCAtNTY4LDggKzQ5Miw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lTcXVhc2guaCBiL3NyYy9ZU3F1YXNoLmgKLWluZGV4IDRiZDBmYjYuLjM4MDRjYzQgMTAwNjQ0CiAtLS0gYS9zcmMvWVNxdWFzaC5oCiArKysgYi9zcmMvWVNxdWFzaC5oCiBAQCAtMjksNyArMjksNyBAQApAQCAtNTgxLDggKzUwMyw2IEBACiAgCiAgLyoqCiAgICogSFNxdWFzaCwgVlNxdWFzaCBIVlNxdWFzaDogcmVkdWNlIGNoaWxkIHRvIGl0cyBwcmVmZXJyZWQgc2l6ZS4KLWRpZmYgLS1naXQgYS9zcmMvWVRhYmxlLmggYi9zcmMvWVRhYmxlLmgKLWluZGV4IDY2OTRmMTAuLjQ2OWI4Y2EgMTAwNjQ0CiAtLS0gYS9zcmMvWVRhYmxlLmgKICsrKyBiL3NyYy9ZVGFibGUuaAogQEAgLTMwLDcgKzMwLDcgQEAKQEAgLTU5NCw4ICs1MTQsNiBAQAogIAogIAogIAotZGlmZiAtLWdpdCBhL3NyYy9ZVGFibGVIZWFkZXIuaCBiL3NyYy9ZVGFibGVIZWFkZXIuaAotaW5kZXggNzAxNjZjMi4uNGFlOTliNCAxMDA2NDQKIC0tLSBhL3NyYy9ZVGFibGVIZWFkZXIuaAogKysrIGIvc3JjL1lUYWJsZUhlYWRlci5oCiBAQCAtMzEsNyArMzEsNyBAQApAQCAtNjA3LDggKzUyNSw2IEBACiAgCiAgLyoqCiAgICogSGVscGVyIGNsYXNzIGZvciBZVGFibGUgZm9yIHRhYmxlIGNvbHVtbiBwcm9wZXJ0aWVzOgotZGlmZiAtLWdpdCBhL3NyYy9ZVGltZUZpZWxkLmggYi9zcmMvWVRpbWVGaWVsZC5oCi1pbmRleCBhYjJmOWEzLi5mM2E3Yjk0IDEwMDY0NAogLS0tIGEvc3JjL1lUaW1lRmllbGQuaAogKysrIGIvc3JjL1lUaW1lRmllbGQuaAogQEAgLTI3LDcgKzI3LDcgQEAKQEAgLTYyMCw4ICs1MzYsNiBAQAogIAogIAogIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9ZVGltZXpvbmVTZWxlY3Rvci5jYyBiL3NyYy9ZVGltZXpvbmVTZWxlY3Rvci5jYwotaW5kZXggOTI1OWI2NC4uZTJmOWI2ZiAxMDA2NDQKIC0tLSBhL3NyYy9ZVGltZXpvbmVTZWxlY3Rvci5jYwogKysrIGIvc3JjL1lUaW1lem9uZVNlbGVjdG9yLmNjCiBAQCAtMzIsNyArMzIsNyBAQApAQCAtNjMzLDggKzU0Nyw2IEBACiAgfTsKICAKICAKLWRpZmYgLS1naXQgYS9zcmMvWVRyZWUuaCBiL3NyYy9ZVHJlZS5oCi1pbmRleCAxNGZhMjc5Li43MGUxMzY0IDEwMDY0NAogLS0tIGEvc3JjL1lUcmVlLmgKICsrKyBiL3NyYy9ZVHJlZS5oCiBAQCAtMjgsNyArMjgsNyBAQApAQCAtNjQ2LDggKzU1OCw2IEBACiAgCiAgCiAgLyoqCi1kaWZmIC0tZ2l0IGEvc3JjL1lVSUxvZy5oIGIvc3JjL1lVSUxvZy5oCi1pbmRleCAwODkwYmM1Li40YTkyN2E3IDEwMDY0NAogLS0tIGEvc3JjL1lVSUxvZy5oCiArKysgYi9zcmMvWVVJTG9nLmgKIEBAIC02NCw3ICs2NCw3IEBACkBAIC02NTksMTEgKzU2OSw5IEBACiAgCiAgZW51bSBZVUlMb2dMZXZlbF90CiAgewotZGlmZiAtLWdpdCBhL3NyYy9ZV2lkZ2V0LmggYi9zcmMvWVdpZGdldC5oCi1pbmRleCA1YjI4NWQwLi42MzZhNDFiIDEwMDY0NAogLS0tIGEvc3JjL1lXaWRnZXQuaAogKysrIGIvc3JjL1lXaWRnZXQuaAotQEAgLTQ1LDcgKzQ1LDcgQEAgdHlwZWRlZiBZQ2hpbGRyZW5NYW5hZ2VyPFlXaWRnZXQ+CVlXaWRnZXRDaGlsZHJlbk1hbmFnZXI7CitAQCAtNDUsNyArNDUsNyBAQCB0eXBlZGVmIFlDaGlsZHJlbk1hbmFnZXI8WVdpZGdldD4JWVdpZGdlCiAgdHlwZWRlZiBZU2luZ2xlQ2hpbGRNYW5hZ2VyPFlXaWRnZXQ+CVlTaW5nbGVXaWRnZXRDaGlsZE1hbmFnZXI7CiAgdHlwZWRlZiBZQ2hpbGRyZW5SZWplY3RvcjxZV2lkZ2V0PglZV2lkZ2V0Q2hpbGRyZW5SZWplY3RvcjsKICAKQEAgLTY3Miw4ICs1ODAsNiBAQAogIAogIAogIC8qKgotZGlmZiAtLWdpdCBhL3NyYy9ZV2l6YXJkLmggYi9zcmMvWVdpemFyZC5oCi1pbmRleCA3NjcxY2JmLi45NzViNTk3IDEwMDY0NAogLS0tIGEvc3JjL1lXaXphcmQuaAogKysrIGIvc3JjL1lXaXphcmQuaAogQEAgLTI4LDcgKzI4LDcgQEAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9saWJ5dWkvbGlieXVpXzMuNi4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnl1aS9saWJ5dWlfMy42LjAuYmIKaW5kZXggZDhhOTIxOS4uN2M2ZjRjMSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnl1aS9saWJ5dWlfMy42LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL2xpYnl1aS9saWJ5dWlfMy42LjAuYmIKQEAgLTE4LDYgKzE4LDggQEAKIAogREVQRU5EUyArPSAiYm9vc3QiCiAKK0VYVFJBX09FQ01BS0UgKz0gIi1ERU5BQkxFX1dFUlJPUj1PRkYiCisKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKIAogZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgewpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3JlbmRlcmRvYy9yZW5kZXJkb2MvMDAwMS1SZW1vdmUtZ2xzbGFuZy1wb29sX2FsbG9jYXRvci1zZXRBbGxvY2F0b3IucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvcmVuZGVyZG9jL3JlbmRlcmRvYy8wMDAxLVJlbW92ZS1nbHNsYW5nLXBvb2xfYWxsb2NhdG9yLXNldEFsbG9jYXRvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmExZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3JlbmRlcmRvYy9yZW5kZXJkb2MvMDAwMS1SZW1vdmUtZ2xzbGFuZy1wb29sX2FsbG9jYXRvci1zZXRBbGxvY2F0b3IucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA0OWRkOTE0MTA5ZmQxZWU5ZTFlOTE3ODkwYmYxOGY4NWRkOTVmZjMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmVpZCBLbGVja25lciA8cm5rQGdvb2dsZS5jb20+CitEYXRlOiBTdW4sIDI5IERlYyAyMDE5IDIzOjE3OjE2IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSBnbHNsYW5nOjpwb29sX2FsbG9jYXRvcjo6c2V0QWxsb2NhdG9yCisKK1RQb29sQWxsb2NhdG9yIGlzIG5vdCBjb3B5IGFzc2lnbmFibGUsIHNvIHRoaXMgc2V0dGVyIGNvdWxkIG5ldmVyIGhhdmUKK2JlZW4gdXNlZC4gQWZ0ZXIgYSByZWNlbnQgY2hhbmdlICg4NzhhMjRlZTIpLCBuZXcgdmVyc2lvbnMgb2YgQ2xhbmcKK3JlamVjdCB0aGlzIGNvZGUgb3V0cmlnaHQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xzbGFuZy9jb21taXQvMGRlODdlZTlhNWJmNWQwOTRhM2ZhYTFhNzFmZDkwODBlODBiNmJlMF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHJlbmRlcmRvYy8zcmRwYXJ0eS9nbHNsYW5nL2dsc2xhbmcvSW5jbHVkZS9Qb29sQWxsb2MuaCB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9yZW5kZXJkb2MvM3JkcGFydHkvZ2xzbGFuZy9nbHNsYW5nL0luY2x1ZGUvUG9vbEFsbG9jLmggYi9yZW5kZXJkb2MvM3JkcGFydHkvZ2xzbGFuZy9nbHNsYW5nL0luY2x1ZGUvUG9vbEFsbG9jLmgKK2luZGV4IDBlMjM3YTZhMi4uYjhlY2NiODgzIDEwMDY0NAorLS0tIGEvcmVuZGVyZG9jLzNyZHBhcnR5L2dsc2xhbmcvZ2xzbGFuZy9JbmNsdWRlL1Bvb2xBbGxvYy5oCisrKysgYi9yZW5kZXJkb2MvM3JkcGFydHkvZ2xzbGFuZy9nbHNsYW5nL0luY2x1ZGUvUG9vbEFsbG9jLmgKK0BAIC0zMDQsNyArMzA0LDYgQEAgcHVibGljOgorICAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKSAvIHNpemVvZihUKTsgfQorICAgICBzaXplX3R5cGUgbWF4X3NpemUoaW50IHNpemUpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC8gc2l6ZTsgfQorIAorLSAgICB2b2lkIHNldEFsbG9jYXRvcihUUG9vbEFsbG9jYXRvciogYSkgeyBhbGxvY2F0b3IgPSAqYTsgfQorICAgICBUUG9vbEFsbG9jYXRvciYgZ2V0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yOyB9CisgCisgcHJvdGVjdGVkOgorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3JlbmRlcmRvYy9yZW5kZXJkb2NfMS40LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3JlbmRlcmRvYy9yZW5kZXJkb2NfMS41LmJiCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9yZW5kZXJkb2MvcmVuZGVyZG9jXzEuNC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3JlbmRlcmRvYy9yZW5kZXJkb2NfMS41LmJiCmluZGV4IDc4NGY2ZmIuLjVmODFlODQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9yZW5kZXJkb2MvcmVuZGVyZG9jXzEuNC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvcmVuZGVyZG9jL3JlbmRlcmRvY18xLjUuYmIKQEAgLTQsOSArNCwxMCBAQAogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLm1kO21kNT05NzUzYjFiNGZiYTMyNjFjMjdkMWNlNWMxYWNlZjY2NyIKIAotU1JDUkVWID0gIjIxNGQ4NTIyODUzOGU3MWNjNjNhMGQ3ZmExMWRkNzViMWQ1NmNjODEiCitTUkNSRVYgPSAiYTk0ZjIzOGUzN2NmZTJmMTQyMDkzZWI4ZTVkYTc3NzVhYmFhODhjNiIKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9iYWxkdXJrLyR7QlBOfS5naXQ7cHJvdG9jb2w9aHR0cDticmFuY2g9djEueCBcCiAJICAgZmlsZTovLzAwMDEtcmVuZGVyZG9jLXVzZS14eGQtaW5zdGVhZC1vZi1jcm9zcy1jb21waWxpbmctc2hpbS1iaS5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtUmVtb3ZlLWdsc2xhbmctcG9vbF9hbGxvY2F0b3Itc2V0QWxsb2NhdG9yLnBhdGNoIFwKICIKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9zcGlyL2ZpbGVzLzAwMDEtQXZvaWQtcGVzc2ltaXppbmctc3RkLW1vdmUtMzEyNC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9zcGlyL2ZpbGVzLzAwMDEtQXZvaWQtcGVzc2ltaXppbmctc3RkLW1vdmUtMzEyNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjQ4Y2RjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3NwaXIvZmlsZXMvMDAwMS1Bdm9pZC1wZXNzaW1pemluZy1zdGQtbW92ZS0zMTI0LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gNGZmZmNkMjc1YjUwZDA4YjU0YjA0MTE2NzllYWQ5ODk3MDY1MWJhZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhdmlkIE5ldG8gPGRuZXRvQGdvb2dsZS5jb20+CitEYXRlOiBGcmksIDI3IERlYyAyMDE5IDEyOjA1OjU4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIEF2b2lkIHBlc3NpbWl6aW5nIHN0ZDo6bW92ZSAoIzMxMjQpCisKK1Nob3VsZCBmaXggYSB3YXJuaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvU1BJUlYtVG9vbHMvY29tbWl0LzhhYTQyMzkzMGRiMzdlMzcwODY2NjVlZmNjNTU5NDRkNTc3YzA2ZTVdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgdGVzdC9vcHQvcGFzc19maXh0dXJlLmggfCA5ICsrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0L29wdC9wYXNzX2ZpeHR1cmUuaCBiL3Rlc3Qvb3B0L3Bhc3NfZml4dHVyZS5oCitpbmRleCA1M2ZiMjA2Zi4uNjRjMDg5ZDggMTAwNjQ0CistLS0gYS90ZXN0L29wdC9wYXNzX2ZpeHR1cmUuaAorKysrIGIvdGVzdC9vcHQvcGFzc19maXh0dXJlLmgKK0BAIC02MCw4ICs2MCw3IEBAIGNsYXNzIFBhc3NUZXN0IDogcHVibGljIFRlc3RUIHsKKyAgIC8vIGZyb20gcGFzcyBQcm9jZXNzKCkgZnVuY3Rpb24uCisgICBzdGQ6OnR1cGxlPHN0ZDo6dmVjdG9yPHVpbnQzMl90PiwgUGFzczo6U3RhdHVzPiBPcHRpbWl6ZVRvQmluYXJ5KAorICAgICAgIFBhc3MqIHBhc3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBvcmlnaW5hbCwgYm9vbCBza2lwX25vcCkgeworLSAgICBjb250ZXh0XyA9CistICAgICAgICBzdGQ6Om1vdmUoQnVpbGRNb2R1bGUoZW52XywgY29uc3VtZXJfLCBvcmlnaW5hbCwgYXNzZW1ibGVfb3B0aW9uc18pKTsKKysgICAgY29udGV4dF8gPSBCdWlsZE1vZHVsZShlbnZfLCBjb25zdW1lcl8sIG9yaWdpbmFsLCBhc3NlbWJsZV9vcHRpb25zXyk7CisgICAgIEVYUEVDVF9ORShudWxscHRyLCBjb250ZXh0KCkpIDw8ICJBc3NlbWJsaW5nIGZhaWxlZCBmb3Igc2hhZGVyOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBvcmlnaW5hbCA8PCBzdGQ6OmVuZGw7CisgICAgIGlmICghY29udGV4dCgpKSB7CitAQCAtMTk3LDggKzE5Niw3IEBAIGNsYXNzIFBhc3NUZXN0IDogcHVibGljIFRlc3RUIHsKKyAgIC8vIG1lc3NhZ2VzLgorICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBhc3NULCB0eXBlbmFtZS4uLiBBcmdzPgorICAgdm9pZCBTaW5nbGVQYXNzUnVuQW5kRmFpbChjb25zdCBzdGQ6OnN0cmluZyYgb3JpZ2luYWwsIEFyZ3MmJi4uLiBhcmdzKSB7CistICAgIGNvbnRleHRfID0KKy0gICAgICAgIHN0ZDo6bW92ZShCdWlsZE1vZHVsZShlbnZfLCBjb25zdW1lcl8sIG9yaWdpbmFsLCBhc3NlbWJsZV9vcHRpb25zXykpOworKyAgICBjb250ZXh0XyA9IEJ1aWxkTW9kdWxlKGVudl8sIGNvbnN1bWVyXywgb3JpZ2luYWwsIGFzc2VtYmxlX29wdGlvbnNfKTsKKyAgICAgRVhQRUNUX05FKG51bGxwdHIsIGNvbnRleHQoKSkgPDwgIkFzc2VtYmxpbmcgZmFpbGVkIGZvciBzaGFkZXI6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IG9yaWdpbmFsIDw8IHN0ZDo6ZW5kbDsKKyAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGVycnM7CitAQCAtMjM1LDggKzIzMyw3IEBAIGNsYXNzIFBhc3NUZXN0IDogcHVibGljIFRlc3RUIHsKKyAgIHZvaWQgUnVuQW5kQ2hlY2soY29uc3Qgc3RkOjpzdHJpbmcmIG9yaWdpbmFsLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWQpIHsKKyAgICAgYXNzZXJ0KG1hbmFnZXJfLT5OdW1QYXNzZXMoKSk7CisgCistICAgIGNvbnRleHRfID0KKy0gICAgICAgIHN0ZDo6bW92ZShCdWlsZE1vZHVsZShlbnZfLCBudWxscHRyLCBvcmlnaW5hbCwgYXNzZW1ibGVfb3B0aW9uc18pKTsKKysgICAgY29udGV4dF8gPSBCdWlsZE1vZHVsZShlbnZfLCBudWxscHRyLCBvcmlnaW5hbCwgYXNzZW1ibGVfb3B0aW9uc18pOworICAgICBBU1NFUlRfTkUobnVsbHB0ciwgY29udGV4dCgpKTsKKyAKKyAgICAgY29udGV4dCgpLT5zZXRfcHJlc2VydmVfYmluZGluZ3MoT3B0aW1pemVyT3B0aW9ucygpLT5wcmVzZXJ2ZV9iaW5kaW5nc18pOworLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3NwaXIvZmlsZXMvMDAwMS1SZXNwZWN0LUNNQUtFX0lOU1RBTExfTElCRElSLWluLWluc3RhbGxlZC1DTWFrZS1maWxlLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3NwaXIvZmlsZXMvMDAwMS1SZXNwZWN0LUNNQUtFX0lOU1RBTExfTElCRElSLWluLWluc3RhbGxlZC1DTWFrZS1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzdkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3Mvc3Bpci9maWxlcy8wMDAxLVJlc3BlY3QtQ01BS0VfSU5TVEFMTF9MSUJESVItaW4taW5zdGFsbGVkLUNNYWtlLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBjYWY1OWM0NmVhNWRjNDllNGRiZjc1NmM2NDJiMDNlNTJjMWI1NDY4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRGVjIDIwMTkgMDc6MDI6MjQgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVzcGVjdCBDTUFLRV9JTlNUQUxMX0xJQkRJUiBpbiBpbnN0YWxsZWQgQ01ha2UgZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvZWZmY2VlL3B1bGwvMzZdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgQ01ha2VMaXN0cy50eHQgICAgICAgIHwgMSArCisgZWZmY2VlL0NNYWtlTGlzdHMudHh0IHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2V4dGVybmFsL2VmZmNlZS9DTWFrZUxpc3RzLnR4dAorKysrIGIvZXh0ZXJuYWwvZWZmY2VlL0NNYWtlTGlzdHMudHh0CitAQCAtMjcsNiArMjcsNyBAQCBlbmRpZigpCisgCisgaW5jbHVkZShjbWFrZS9zZXR1cF9idWlsZC5jbWFrZSkKKyBpbmNsdWRlKGNtYWtlL3V0aWxzLmNtYWtlKQorK2luY2x1ZGUoR05VSW5zdGFsbERpcnMpCisgCisgYWRkX3N1YmRpcmVjdG9yeSh0aGlyZF9wYXJ0eSkKKyBhZGRfc3ViZGlyZWN0b3J5KGVmZmNlZSkKKy0tLSBhL2V4dGVybmFsL2VmZmNlZS9lZmZjZWUvQ01ha2VMaXN0cy50eHQKKysrKyBiL2V4dGVybmFsL2VmZmNlZS9lZmZjZWUvQ01ha2VMaXN0cy50eHQKK0BAIC0xNCw4ICsxNCw4IEBAIGluc3RhbGwoCisgICBERVNUSU5BVElPTgorICAgICBpbmNsdWRlL2VmZmNlZSkKKyBpbnN0YWxsKFRBUkdFVFMgZWZmY2VlCistICBMSUJSQVJZIERFU1RJTkFUSU9OIGxpYgorLSAgQVJDSElWRSBERVNUSU5BVElPTiBsaWIpCisrICBMSUJSQVJZIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisrICBBUkNISVZFIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9KQorIAorIGlmKEVGRkNFRV9CVUlMRF9URVNUSU5HKQorICAgYWRkX2V4ZWN1dGFibGUoZWZmY2VlLXRlc3QKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9zcGlyL2ZpbGVzLzAwMDEtdG9vbHMtbGVzc3BpcGUtQWxsb3ctZ2VuZXJpYy1zaGVsbC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9zcGlyL2ZpbGVzLzAwMDEtdG9vbHMtbGVzc3BpcGUtQWxsb3ctZ2VuZXJpYy1zaGVsbC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlhNDVjMi4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3Mvc3Bpci9maWxlcy8wMDAxLXRvb2xzLWxlc3NwaXBlLUFsbG93LWdlbmVyaWMtc2hlbGwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1Gcm9tIDAzMTI3ZmQ1YTZlZmY1YWUyZWJlYTJlOWM2YzAxZmJmMWEwYTQyMWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBBbmtpdCBOYXZpayA8YW5raXQudGFyb3RAZ21haWwuY29tPgotRGF0ZTogVHVlLCAyNSBEZWMgMjAxOCAxNDozNDowOSArMDUzMAotU3ViamVjdDogW1BBVENIXSB0b29scy9sZXNzcGlwZTogQWxsb3cgZ2VuZXJpYyBzaGVsbAotCi1VcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9TUElSVi1Ub29scy9wdWxsLzIyNTVdCi1TaWduZWQtb2ZmLWJ5OiBBbmtpdCBOYXZpayA8YW5raXQudGFyb3RAZ21haWwuY29tPgotLS0tCi0gdG9vbHMvbGVzc3BpcGUvc3BpcnYtbGVzc3BpcGUuc2ggfCAyICstCi0gMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS90b29scy9sZXNzcGlwZS9zcGlydi1sZXNzcGlwZS5zaCBiL3Rvb2xzL2xlc3NwaXBlL3NwaXJ2LWxlc3NwaXBlLnNoCi1pbmRleCA4MWUzMzU1Li5mOTU1MjU5IDEwMDY0NAotLS0tIGEvdG9vbHMvbGVzc3BpcGUvc3BpcnYtbGVzc3BpcGUuc2gKLSsrKyBiL3Rvb2xzL2xlc3NwaXBlL3NwaXJ2LWxlc3NwaXBlLnNoCi1AQCAtMSw0ICsxLDQgQEAKLS0jIS9iaW4vYmFzaAotKyMhL3Vzci9iaW4vZW52IHNoCi0gIyBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgotIAotICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0tLSAKLTIuNy40Ci0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9zcGlyL3NwaXJ2LXRvb2xzX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9zcGlyL3NwaXJ2LXRvb2xzX2dpdC5iYgppbmRleCBhYWUxMWRmLi44ZTgzODhlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3Mvc3Bpci9zcGlydi10b29sc19naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3NwaXIvc3BpcnYtdG9vbHNfZ2l0LmJiCkBAIC05LDIwICs5LDIzIEBACiBTID0gIiR7V09SS0RJUn0vZ2l0IgogREVTVF9ESVIgPSAiJHtTfS9leHRlcm5hbCIgCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1NQSVJWLVRvb2xzLmdpdDtuYW1lPXNwaXJ2LXRvb2xzIFwKLQlmaWxlOi8vMDAwMS10b29scy1sZXNzcGlwZS1BbGxvdy1nZW5lcmljLXNoZWxsLnBhdGNoIFwKIAlnaXQ6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9TUElSVi1IZWFkZXJzLmdpdDtuYW1lPXNwaXJ2LWhlYWRlcnM7ZGVzdHN1ZmZpeD0ke0RFU1RfRElSfS9zcGlydi1oZWFkZXJzIFwKIAlnaXQ6Ly9naXRodWIuY29tL2dvb2dsZS9lZmZjZWUuZ2l0O25hbWU9ZWZmY2VlO2Rlc3RzdWZmaXg9JHtERVNUX0RJUn0vZWZmY2VlIFwKIAlnaXQ6Ly9naXRodWIuY29tL2dvb2dsZS9yZTIuZ2l0O25hbWU9cmUyO2Rlc3RzdWZmaXg9JHtERVNUX0RJUn0vcmUyIFwKIAlnaXQ6Ly9naXRodWIuY29tL2dvb2dsZS9nb29nbGV0ZXN0LmdpdDtuYW1lPWdvb2dsZXRlc3Q7ZGVzdHN1ZmZpeD0ke0RFU1RfRElSfS9nb29nbGV0ZXN0IFwKKyAgICAgICAgZmlsZTovLzAwMDEtUmVzcGVjdC1DTUFLRV9JTlNUQUxMX0xJQkRJUi1pbi1pbnN0YWxsZWQtQ01ha2UtZmlsZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLUF2b2lkLXBlc3NpbWl6aW5nLXN0ZC1tb3ZlLTMxMjQucGF0Y2ggXAogIgotU1JDUkVWX3NwaXJ2LXRvb2xzID0gIjE2N2YxMjcwYTllZTY0MWIxN2MwMTZhNTQ1NzQxZTRhYWRmYWJlODYiCi1TUkNSRVZfc3BpcnYtaGVhZGVycyA9ICI0NjE4Yjg2ZTllNGIwMjdhMjIwNDA3MzJkZmVlMzVlMzk5Y2QyYzQ3IgotU1JDUkVWX2VmZmNlZSA9ICI4ZjBhNjFkYzk1ZTBkZjE4YzE4ZTBhYzU2ZDgzYjNmYTlkMmZlOTBiIgotU1JDUkVWX3JlMiA9ICIyY2Y4NmU1YWI2ZGNmZTA0NWExZjUxMGMyYjlhOGIwMTJhNDE1OGNkIgotU1JDUkVWX2dvb2dsZXRlc3QgPSAiMTUwNjEzMTY2NTI0YzQ3NGE4YTk3ZGY0YzAxZDQ2YjcyMDUwYzQ5NSIKK1NSQ1JFVl9zcGlydi10b29scyA9ICJjNDEzYjk4MmMzMTZiMTRlNzg0ZjUwZDk0MTgxNGZjNzM3YjU1YjRhIgorU1JDUkVWX3NwaXJ2LWhlYWRlcnMgPSAiYWY2NGE5ZTgyNmJmNWJiNWZjZDI0MzRkZDcxYmUxZTQxZTkyMjU2MyIKK1NSQ1JFVl9lZmZjZWUgPSAiY2QyNWVjMTdlOTM4MmY5OWE4OTViOWVmNTNmZjNjMjc3NDY0ZDA3ZCIKK1NSQ1JFVl9yZTIgPSAiNWJkNjEzNzQ5ZmQ1MzBiNTc2Yjg5MDI4M2JmYjZiYzZlYTYyNDZjYiIKK1NSQ1JFVl9nb29nbGV0ZXN0ID0gImYyZmI0OGMzYjNkNzlhNzVhODhhOTlmYmE2NTc2YjI1ZDQyZWM1MjgiCiAKIGluaGVyaXQgY21ha2UgcHl0aG9uM25hdGl2ZQogCitFWFRSQV9PRUNNQUtFICs9ICItRFNQSVJWX1dFUlJPUj1PRkYiCisKIGRvX2luc3RhbGxfYXBwZW5kKCkgewogCWluc3RhbGwgLWQgJHtEfS8ke2luY2x1ZGVkaXJ9L3NwaXJ2CiAJaW5zdGFsbCAtbSAwNjQ0ICR7REVTVF9ESVJ9L3NwaXJ2LWhlYWRlcnMvaW5jbHVkZS9zcGlydi8xLjIvKiAke0R9LyR7aW5jbHVkZWRpcn0vc3BpcnYJCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhbG9uZXRyYXkvc3RhbG9uZXRyYXlfMC44LjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhbG9uZXRyYXkvc3RhbG9uZXRyYXlfMC44LjMuYmIKaW5kZXggODg1MTcyOS4uN2RiNzBlYyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3N0YWxvbmV0cmF5L3N0YWxvbmV0cmF5XzAuOC4zLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy9zdGFsb25ldHJheS9zdGFsb25ldHJheV8wLjguMy5iYgpAQCAtMTEsNCArMTEsNiBAQAogU1JDX1VSSVttZDVzdW1dID0gImFlOTVkYmJhY2MyNjIwZTAzMmFjZWE4YWJhYjhjOWVmIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM2NTQ4YTU4OGIyZDQ2NjkxMzQyMzI0NWRkYTZmZmI2MzEzMTMyY2QwY2VjNjM1YTExN2QzN2IzZGFiNWZkNGMiCiAKLWluaGVyaXQgYXV0b3Rvb2xzCitpbmhlcml0IGF1dG90b29scyBmZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3N1cmYvc3VyZl8yLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3Mvc3VyZi9zdXJmXzIuMC5iYgppbmRleCA5OTMyZDBhLi45ODk3MzAxIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3Mvc3VyZi9zdXJmXzIuMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3Mvc3VyZi9zdXJmXzIuMC5iYgpAQCAtNyw3ICs3LDcgQEAKIAogREVQRU5EUyA9ICJ3ZWJraXRndGsgZ3RrKzMgZ2xpYi0yLjAiCiAKLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIG9wZW5nbCIKIAogU1JDX1VSSSA9ICJnaXQ6Ly9naXQuc3Vja2xlc3Mub3JnL3N1cmY7YnJhbmNoPXN1cmYtd2Via2l0MiBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZy5tay1GaXgtY29tcGlsZXItYW5kLWxpbmtlci5wYXRjaCBcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvdGlnZXJ2bmMvdGlnZXJ2bmNfMS45LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvdGlnZXJ2bmMvdGlnZXJ2bmNfMS4xMC4xLmJiCnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy90aWdlcnZuYy90aWdlcnZuY18xLjkuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3RpZ2Vydm5jL3RpZ2Vydm5jXzEuMTAuMS5iYgppbmRleCBkMGVlMmE1Li4xNjkzNzc5IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvdGlnZXJ2bmMvdGlnZXJ2bmNfMS45LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3RpZ2Vydm5jL3RpZ2Vydm5jXzEuMTAuMS5iYgpAQCAtMyw3ICszLDcgQEAKIExJQ0VOU0UgPSAiR1BMdjIrIgogU0VDVElPTiA9ICJ4MTEvdXRpbHMiCiBERVBFTkRTID0gInhzZXJ2ZXIteG9yZyBnbnV0bHMganBlZyBsaWJ4dHN0IGdldHRleHQtbmF0aXZlIGZsdGsiCi1SREVQRU5EU18ke1BOfSA9ICJjaGtjb25maWcgY29yZXV0aWxzIGhpY29sb3ItaWNvbi10aGVtZSIKK1JERVBFTkRTXyR7UE59ID0gImNoa2NvbmZpZyBjb3JldXRpbHMgaGljb2xvci1pY29uLXRoZW1lIHBlcmwiCiAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0UuVFhUO21kNT03NWIwMmMyODcyNDIxMzgwYmJkNDc3ODFkMmJkNzVkMyIKIApAQCAtMTUsMTAgKzE1LDkgQEAKIGluaGVyaXQgYXV0b3Rvb2xzIGNtYWtlCiBCID0gIiR7U30iCiAKLVNSQ1JFViA9ICI2ZjIzMDFkMDhlNjRhOTY1YWQzNmI0MDFlYzhkYzJiMjRiYzQ3MDc1IgorU1JDUkVWID0gIjQ3Mzk0OTNiNjM1MzcyYmQ0MGEzNDY0MGE3MTlmNzlmYTkwZTRkYmEiCiAKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9UaWdlclZOQy90aWdlcnZuYy5naXQ7YnJhbmNoPTEuOS1icmFuY2ggXAotICAgICAgICAgICBmaWxlOi8vMDAwMS10aWdlcnZuYy1yZW1vdmUtaW5jbHVkZWRpci5wYXRjaCBcCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vVGlnZXJWTkMvdGlnZXJ2bmMuZ2l0O2JyYW5jaD0xLjEwLWJyYW5jaCBcCiAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWRvLW5vdC1idWlsZC10ZXN0cy1zdWItZGlyZWN0b3J5LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDMtYWRkLW1pc3NpbmctZHluYW1pYy1saWJyYXJ5LXRvLUZMVEtfTElCUkFSSUVTLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDQtdGlnZXJ2bmMtYWRkLWZQSUMtb3B0aW9uLXRvLUNPTVBJTEVfRkxBR1MucGF0Y2ggXApAQCAtMjYsMTEgKzI1LDExIEBACiAKICMgS2VlcCBzeW5jIHdpdGggeG9yZy1zZXJ2ZXIgaW4gb2UtY29yZQogWE9SR19QTiA/PSAieG9yZy1zZXJ2ZXIiCi1YT1JHX1BWID89ICIxLjE5LjYiCitYT1JHX1BWID89ICIxLjIwLjYiCiBTUkNfVVJJICs9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3hzZXJ2ZXIvJHtYT1JHX1BOfS0ke1hPUkdfUFZ9LnRhci5iejI7bmFtZT14b3JnIgogWE9SR19TID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1hPUkdfUFZ9IgotU1JDX1VSSVt4b3JnLm1kNXN1bV0gPSAiM2U0Nzc3N2ZmMDM0YTMzMWFlZDIzMjJiMDc4Njk0YTgiCi1TUkNfVVJJW3hvcmcuc2hhMjU2c3VtXSA9ICJhNzMyNTAyZjFkYjAwMGNmMzZhMzc2Y2QwYzAxMGZmZGJmMzJlY2RkN2YxZmEwOGJhN2Y1YmRmOTYwMWNjMTk3IgorU1JDX1VSSVt4b3JnLm1kNXN1bV0gPSAiYTk4MTcwMDg0ZjJjOGZlZDQ4MGQyZmY2MDFmOGExNGIiCitTUkNfVVJJW3hvcmcuc2hhMjU2c3VtXSA9ICI2MzE2MTQ2MzA0ZTZlOGEzNmQ1OTA0OTg3YWUyOTE3YjVkNWIxOTVkYzlmYzYzZDY3ZjdhY2ExMzdlNWE1MWQxIgogCiAjIEl0IGlzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgWG9yZyBzb3VyY2UgZm9yIHRoZQogIyBtYWNoaW5lIG9uIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgVGlnZXJWTkMuCkBAIC01OCw3ICs1Nyw3IEBACiAgICAgeGFyZ3MgdGFyIGNmIC0gfCAoY2QgJHtYU0VSVkVSX1NPVVJDRV9ESVJ9ICYmIHRhciB4ZiAtKQogCiAgICAgY2QgJHtYU0VSVkVSX1NPVVJDRV9ESVJ9Ci0gICAgeHNlcnZlcnBhdGNoPSIke1N9L3VuaXgveHNlcnZlcjExOS5wYXRjaCIKKyAgICB4c2VydmVycGF0Y2g9IiR7U30vdW5peC94c2VydmVyMTIwLnBhdGNoIgogICAgIGVjaG8gIkFwcGx5ICR4c2VydmVycGF0Y2giCiAgICAgcGF0Y2ggLXAxIC1iIC0tc3VmZml4IC52bmMgPCAkeHNlcnZlcnBhdGNoCiB9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliLzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJkOTdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliLzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaApAQCAtMCwwICsxLDM4OSBAQAorRnJvbSA1NDU1MDU1NjYwNzAwYmUxOGViODgwMGU1NmUyNDIzMDMxZWQ0Yzc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgTm92IDIwMTkgMTk6NTk6MjkgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIG9uIDMyYml0IGFyY2hlcyB3aXRoIDY0Yml0IHRpbWVfdAorCit0aW1lIGVsZW1lbnQgaXMgZGVwcmVjYXRlZCBvbiBuZXcgaW5wdXRfZXZlbnQgc3RydWN0dXJlIGluIGtlcm5lbCdzCitpbnB1dC5oIFsxXQorCitbMV0gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L2NvbW1pdD9pZD0xNTIxOTRmZTljM2YKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9saWJ0cy90c2xpYi9wdWxsLzE2Ml0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHBsdWdpbnMvaW5wdXQtcmF3LmMgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgdG9vbHMvdHNfdWlucHV0LmMgICB8IDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKSwgNDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wbHVnaW5zL2lucHV0LXJhdy5jIGIvcGx1Z2lucy9pbnB1dC1yYXcuYworaW5kZXggNjRmMDE1Ni4uZjAzMDgzNiAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvaW5wdXQtcmF3LmMKKysrKyBiL3BsdWdpbnMvaW5wdXQtcmF3LmMKK0BAIC00MCw2ICs0MCwxMSBAQAorICMgaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyAjZW5kaWYKKyAKKysjaWZuZGVmIGlucHV0X2V2ZW50X3NlYworKyNkZWZpbmUgaW5wdXRfZXZlbnRfc2VjIHRpbWUudHZfc2VjCisrI2RlZmluZSBpbnB1dF9ldmVudF91c2VjIHRpbWUudHZfdXNlYworKyNlbmRpZgorKworICNpZm5kZWYgRVZfU1lOIC8qIDIuNCBrZXJuZWwgaGVhZGVycyAqLworICMgZGVmaW5lIEVWX1NZTiAweDAwCisgI2VuZGlmCitAQCAtMzg0LDcgKzM4OSw4IEBAIHN0YXRpYyBpbnQgdHNfaW5wdXRfcmVhZChzdHJ1Y3QgdHNsaWJfbW9kdWxlX2luZm8gKmluZiwKKyAJCQkJCQlzYW1wLT55ID0gaS0+Y3VycmVudF95OworIAkJCQkJCXNhbXAtPnByZXNzdXJlID0gaS0+Y3VycmVudF9wOworIAkJCQkJfQorLQkJCQkJc2FtcC0+dHYgPSBldi50aW1lOworKwkJCQkJc2FtcC0+dHYudHZfc2VjID0gZXYuaW5wdXRfZXZlbnRfc2VjOworKwkJCQkJc2FtcC0+dHYudHZfdXNlYyA9IGV2LmlucHV0X2V2ZW50X3VzZWM7CisgCQkJI2lmZGVmIERFQlVHCisgCQkJCWZwcmludGYoc3RkZXJyLAorIAkJCQkJIlJBVy0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gJWQgJWQgJWQgJWxkLiVsZFxuIiwKK0BAIC01MTksNyArNTI1LDggQEAgc3RhdGljIGludCB0c19pbnB1dF9yZWFkKHN0cnVjdCB0c2xpYl9tb2R1bGVfaW5mbyAqaW5mLAorIAkJCQkJc2FtcC0+cHJlc3N1cmUgPSBpLT5jdXJyZW50X3AgPSBldi52YWx1ZTsKKyAJCQkJCWJyZWFrOworIAkJCQl9CistCQkJCXNhbXAtPnR2ID0gZXYudGltZTsKKysJCQkJc2FtcC0+dHYudHZfc2VjID0gZXYuaW5wdXRfZXZlbnRfc2VjOworKwkJCQlzYW1wLT50di50dl91c2VjID0gZXYuaW5wdXRfZXZlbnRfdXNlYzsKKyAJI2lmZGVmIERFQlVHCisgCQkJCWZwcmludGYoc3RkZXJyLAorIAkJCQkJIlJBVy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gJWQgJWQgJWRcbiIsCitAQCAtNTM2LDcgKzU0Myw4IEBAIHN0YXRpYyBpbnQgdHNfaW5wdXRfcmVhZChzdHJ1Y3QgdHNsaWJfbW9kdWxlX2luZm8gKmluZiwKKyAJCQkJCQlzYW1wLT54ID0gMDsKKyAJCQkJCQlzYW1wLT55ID0gMDsKKyAJCQkJCQlzYW1wLT5wcmVzc3VyZSA9IDA7CistCQkJCQkJc2FtcC0+dHYgPSBldi50aW1lOworKwkJCQkJCXNhbXAtPnR2LnR2X3NlYyA9IGV2LmlucHV0X2V2ZW50X3NlYzsKKysJCQkJCQlzYW1wLT50di50dl91c2VjID0gZXYuaW5wdXRfZXZlbnRfdXNlYzsKKyAJCQkJCQlzYW1wKys7CisgCQkJCQkJdG90YWwrKzsKKyAJCQkJCX0KK0BAIC02NTEsNyArNjU5LDggQEAgc3RhdGljIGludCB0c19pbnB1dF9yZWFkX210KHN0cnVjdCB0c2xpYl9tb2R1bGVfaW5mbyAqaW5mLAorIAkJCQlzd2l0Y2ggKGktPmV2W2l0XS5jb2RlKSB7CisgCQkJCWNhc2UgQlROX1RPVUNIOgorIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS5wZW5fZG93biA9IGktPmV2W2l0XS52YWx1ZTsKKy0JCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYgPSBpLT5ldltpdF0udGltZTsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfc2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3NlYzsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfdXNlYyA9IGktPmV2W2l0XS5pbnB1dF9ldmVudF91c2VjOworIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS52YWxpZCB8PSBUU0xJQl9NVF9WQUxJRDsKKyAJCQkJCWlmIChpLT5ldltpdF0udmFsdWUgPT0gMCkKKyAJCQkJCQlwZW5fdXAgPSAxOworQEAgLTc1MSw3ICs3NjAsOCBAQCBzdGF0aWMgaW50IHRzX2lucHV0X3JlYWRfbXQoc3RydWN0IHRzbGliX21vZHVsZV9pbmZvICppbmYsCisgCQkJCQkvLyBmYWxsIHRocm91Z2gKKyAJCQkJY2FzZSBBQlNfTVRfUE9TSVRJT05fWDoKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0ueCA9IGktPmV2W2l0XS52YWx1ZTsKKy0JCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYgPSBpLT5ldltpdF0udGltZTsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfc2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3NlYzsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfdXNlYyA9IGktPmV2W2l0XS5pbnB1dF9ldmVudF91c2VjOworIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS52YWxpZCB8PSBUU0xJQl9NVF9WQUxJRDsKKyAJCQkJCWJyZWFrOworIAkJCQljYXNlIEFCU19ZOgorQEAgLTc2MCw3ICs3NzAsOCBAQCBzdGF0aWMgaW50IHRzX2lucHV0X3JlYWRfbXQoc3RydWN0IHRzbGliX21vZHVsZV9pbmZvICppbmYsCisgCQkJCQkvLyBmYWxsIHRocm91Z2gKKyAJCQkJY2FzZSBBQlNfTVRfUE9TSVRJT05fWToKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0ueSA9IGktPmV2W2l0XS52YWx1ZTsKKy0JCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYgPSBpLT5ldltpdF0udGltZTsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfc2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3NlYzsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfdXNlYyA9IGktPmV2W2l0XS5pbnB1dF9ldmVudF91c2VjOworIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS52YWxpZCB8PSBUU0xJQl9NVF9WQUxJRDsKKyAJCQkJCWJyZWFrOworIAkJCQljYXNlIEFCU19QUkVTU1VSRToKK0BAIC03NjksMTIgKzc4MCwxNCBAQCBzdGF0aWMgaW50IHRzX2lucHV0X3JlYWRfbXQoc3RydWN0IHRzbGliX21vZHVsZV9pbmZvICppbmYsCisgCQkJCQkvLyBmYWxsIHRocm91Z2gKKyAJCQkJY2FzZSBBQlNfTVRfUFJFU1NVUkU6CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnByZXNzdXJlID0gaS0+ZXZbaXRdLnZhbHVlOworLQkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50diA9IGktPmV2W2l0XS50aW1lOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl9zZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfc2VjOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl91c2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3VzZWM7CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnZhbGlkIHw9IFRTTElCX01UX1ZBTElEOworIAkJCQkJYnJlYWs7CisgCQkJCWNhc2UgQUJTX01UX1RPT0xfWDoKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udG9vbF94ID0gaS0+ZXZbaXRdLnZhbHVlOworLQkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50diA9IGktPmV2W2l0XS50aW1lOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl9zZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfc2VjOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl91c2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3VzZWM7CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnZhbGlkIHw9IFRTTElCX01UX1ZBTElEOworIAkJCQkJLyogZm9yIGZ1dHVyZSB1c2UKKyAJCQkJCSAqIGktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udmFsaWQgfD0gVFNMSUJfTVRfVkFMSURfVE9PTDsKK0BAIC03ODIsNyArNzk1LDggQEAgc3RhdGljIGludCB0c19pbnB1dF9yZWFkX210KHN0cnVjdCB0c2xpYl9tb2R1bGVfaW5mbyAqaW5mLAorIAkJCQkJYnJlYWs7CisgCQkJCWNhc2UgQUJTX01UX1RPT0xfWToKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udG9vbF95ID0gaS0+ZXZbaXRdLnZhbHVlOworLQkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50diA9IGktPmV2W2l0XS50aW1lOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl9zZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfc2VjOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl91c2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3VzZWM7CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnZhbGlkIHw9IFRTTElCX01UX1ZBTElEOworIAkJCQkJLyogZm9yIGZ1dHVyZSB1c2UKKyAJCQkJCSAqIGktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udmFsaWQgfD0gVFNMSUJfTVRfVkFMSURfVE9PTDsKK0BAIC03OTAsNyArODA0LDggQEAgc3RhdGljIGludCB0c19pbnB1dF9yZWFkX210KHN0cnVjdCB0c2xpYl9tb2R1bGVfaW5mbyAqaW5mLAorIAkJCQkJYnJlYWs7CisgCQkJCWNhc2UgQUJTX01UX1RPT0xfVFlQRToKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udG9vbF90eXBlID0gaS0+ZXZbaXRdLnZhbHVlOworLQkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50diA9IGktPmV2W2l0XS50aW1lOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl9zZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfc2VjOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl91c2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3VzZWM7CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnZhbGlkIHw9IFRTTElCX01UX1ZBTElEOworIAkJCQkJLyogZm9yIGZ1dHVyZSB1c2UKKyAJCQkJCSAqIGktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udmFsaWQgfD0gVFNMSUJfTVRfVkFMSURfVE9PTDsKK0BAIC03OTgsMTIgKzgxMywxNCBAQCBzdGF0aWMgaW50IHRzX2lucHV0X3JlYWRfbXQoc3RydWN0IHRzbGliX21vZHVsZV9pbmZvICppbmYsCisgCQkJCQlicmVhazsKKyAJCQkJY2FzZSBBQlNfTVRfT1JJRU5UQVRJT046CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLm9yaWVudGF0aW9uID0gaS0+ZXZbaXRdLnZhbHVlOworLQkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50diA9IGktPmV2W2l0XS50aW1lOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl9zZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfc2VjOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl91c2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3VzZWM7CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnZhbGlkIHw9IFRTTElCX01UX1ZBTElEOworIAkJCQkJYnJlYWs7CisgCQkJCWNhc2UgQUJTX01UX0RJU1RBTkNFOgorIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS5kaXN0YW5jZSA9IGktPmV2W2l0XS52YWx1ZTsKKy0JCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYgPSBpLT5ldltpdF0udGltZTsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfc2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3NlYzsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfdXNlYyA9IGktPmV2W2l0XS5pbnB1dF9ldmVudF91c2VjOworIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS52YWxpZCB8PSBUU0xJQl9NVF9WQUxJRDsKKyAKKyAJCQkJCWlmIChpLT5zcGVjaWFsX2RldmljZSA9PSBFR0FMQVhfVkVSU0lPTl8yMTApIHsKK0BAIC04MTYsMzQgKzgzMyw0MCBAQCBzdGF0aWMgaW50IHRzX2lucHV0X3JlYWRfbXQoc3RydWN0IHRzbGliX21vZHVsZV9pbmZvICppbmYsCisgCQkJCQlicmVhazsKKyAJCQkJY2FzZSBBQlNfTVRfQkxPQl9JRDoKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0uYmxvYl9pZCA9IGktPmV2W2l0XS52YWx1ZTsKKy0JCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYgPSBpLT5ldltpdF0udGltZTsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfc2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3NlYzsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfdXNlYyA9IGktPmV2W2l0XS5pbnB1dF9ldmVudF91c2VjOworIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS52YWxpZCB8PSBUU0xJQl9NVF9WQUxJRDsKKyAJCQkJCWJyZWFrOworIAkJCQljYXNlIEFCU19NVF9UT1VDSF9NQUpPUjoKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udG91Y2hfbWFqb3IgPSBpLT5ldltpdF0udmFsdWU7CistCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnR2ID0gaS0+ZXZbaXRdLnRpbWU7CisrCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnR2LnR2X3NlYyA9IGktPmV2W2l0XS5pbnB1dF9ldmVudF9zZWM7CisrCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnR2LnR2X3VzZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfdXNlYzsKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udmFsaWQgfD0gVFNMSUJfTVRfVkFMSUQ7CisgCQkJCQlpZiAoaS0+ZXZbaXRdLnZhbHVlID09IDApCisgCQkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS5wcmVzc3VyZSA9IDA7CisgCQkJCQlicmVhazsKKyAJCQkJY2FzZSBBQlNfTVRfV0lEVEhfTUFKT1I6CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLndpZHRoX21ham9yID0gaS0+ZXZbaXRdLnZhbHVlOworLQkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50diA9IGktPmV2W2l0XS50aW1lOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl9zZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfc2VjOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl91c2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3VzZWM7CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnZhbGlkIHw9IFRTTElCX01UX1ZBTElEOworIAkJCQkJYnJlYWs7CisgCQkJCWNhc2UgQUJTX01UX1RPVUNIX01JTk9SOgorIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50b3VjaF9taW5vciA9IGktPmV2W2l0XS52YWx1ZTsKKy0JCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYgPSBpLT5ldltpdF0udGltZTsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfc2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3NlYzsKKysJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udHYudHZfdXNlYyA9IGktPmV2W2l0XS5pbnB1dF9ldmVudF91c2VjOworIAkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS52YWxpZCB8PSBUU0xJQl9NVF9WQUxJRDsKKyAJCQkJCWJyZWFrOworIAkJCQljYXNlIEFCU19NVF9XSURUSF9NSU5PUjoKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0ud2lkdGhfbWlub3IgPSBpLT5ldltpdF0udmFsdWU7CistCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnR2ID0gaS0+ZXZbaXRdLnRpbWU7CisrCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnR2LnR2X3NlYyA9IGktPmV2W2l0XS5pbnB1dF9ldmVudF9zZWM7CisrCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnR2LnR2X3VzZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfdXNlYzsKKyAJCQkJCWktPmJ1Zlt0b3RhbF1baS0+c2xvdF0udmFsaWQgfD0gVFNMSUJfTVRfVkFMSUQ7CisgCQkJCQlicmVhazsKKyAJCQkJY2FzZSBBQlNfTVRfVFJBQ0tJTkdfSUQ6CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnRyYWNraW5nX2lkID0gaS0+ZXZbaXRdLnZhbHVlOworLQkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50diA9IGktPmV2W2l0XS50aW1lOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl9zZWMgPSBpLT5ldltpdF0uaW5wdXRfZXZlbnRfc2VjOworKwkJCQkJaS0+YnVmW3RvdGFsXVtpLT5zbG90XS50di50dl91c2VjID0gaS0+ZXZbaXRdLmlucHV0X2V2ZW50X3VzZWM7CisgCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnZhbGlkIHw9IFRTTElCX01UX1ZBTElEOworIAkJCQkJaWYgKGktPmV2W2l0XS52YWx1ZSA9PSAtMSkKKyAJCQkJCQlpLT5idWZbdG90YWxdW2ktPnNsb3RdLnByZXNzdXJlID0gMDsKK2RpZmYgLS1naXQgYS90b29scy90c191aW5wdXQuYyBiL3Rvb2xzL3RzX3VpbnB1dC5jCitpbmRleCA2Y2E0YzNkLi4xODMyYTA3IDEwMDY0NAorLS0tIGEvdG9vbHMvdHNfdWlucHV0LmMKKysrKyBiL3Rvb2xzL3RzX3VpbnB1dC5jCitAQCAtMTcwLDE0ICsxNzAsMTYgQEAgc3RhdGljIGludCBzZW5kX3RvdWNoX2V2ZW50cyhzdHJ1Y3QgZGF0YV90ICpkYXRhLCBzdHJ1Y3QgdHNfc2FtcGxlX210ICoqcywKKyAJCQkJY29udGludWU7CisgCisgCQkJaWYgKHNbal1baV0ucGVuX2Rvd24gPT0gMSkgeworLQkJCQlkYXRhLT5ldltjXS50aW1lID0gc1tqXVtpXS50djsKKysJCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfc2VjID0gc1tqXVtpXS50di50dl9zZWM7CisrCQkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3VzZWMgPSBzW2pdW2ldLnR2LnR2X3VzZWM7CisgCQkJCWRhdGEtPmV2W2NdLnR5cGUgPSBFVl9LRVk7CisgCQkJCWRhdGEtPmV2W2NdLmNvZGUgPSBCVE5fVE9VQ0g7CisgCQkJCWRhdGEtPmV2W2NdLnZhbHVlID0gc1tqXVtpXS5wZW5fZG93bjsKKyAJCQkJYysrOworIAkJCX0KKyAKKy0JCQlkYXRhLT5ldltjXS50aW1lID0gc1tqXVtpXS50djsKKysJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF9zZWMgPSBzW2pdW2ldLnR2LnR2X3NlYzsKKysJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF91c2VjID0gc1tqXVtpXS50di50dl91c2VjOworIAkJCWRhdGEtPmV2W2NdLnR5cGUgPSBFVl9BQlM7CisgCQkJZGF0YS0+ZXZbY10uY29kZSA9IEFCU19NVF9TTE9UOworIAkJCWRhdGEtPmV2W2NdLnZhbHVlID0gc1tqXVtpXS5zbG90OworQEAgLTE5MCwxMTEgKzE5MiwxMjkgQEAgc3RhdGljIGludCBzZW5kX3RvdWNoX2V2ZW50cyhzdHJ1Y3QgZGF0YV90ICpkYXRhLCBzdHJ1Y3QgdHNfc2FtcGxlX210ICoqcywKKyAJCQkgKiB3ZSBzaG91bGQgdXNlIHNsb3QgMSBhbmQgc28gb24uCisgCQkJICovCisgCQkJaWYgKGkgPT0gMCkgeworLQkJCQlkYXRhLT5ldltjXS50aW1lID0gc1tqXVtpXS50djsKKysJCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfc2VjID0gc1tqXVtpXS50di50dl9zZWM7CisrCQkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3VzZWMgPSBzW2pdW2ldLnR2LnR2X3VzZWM7CisgCQkJCWRhdGEtPmV2W2NdLnR5cGUgPSBFVl9BQlM7CisgCQkJCWRhdGEtPmV2W2NdLmNvZGUgPSBBQlNfWDsKKyAJCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLng7CisgCQkJCWMrKzsKKyAKKy0JCQkJZGF0YS0+ZXZbY10udGltZSA9IHNbal1baV0udHY7CisrCQkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3NlYyA9IHNbal1baV0udHYudHZfc2VjOworKwkJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF91c2VjID0gc1tqXVtpXS50di50dl91c2VjOworIAkJCQlkYXRhLT5ldltjXS50eXBlID0gRVZfQUJTOworIAkJCQlkYXRhLT5ldltjXS5jb2RlID0gQUJTX1k7CisgCQkJCWRhdGEtPmV2W2NdLnZhbHVlID0gc1tqXVtpXS55OworIAkJCQljKys7CisgCistCQkJCWRhdGEtPmV2W2NdLnRpbWUgPSBzW2pdW2ldLnR2OworKwkJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF9zZWMgPSBzW2pdW2ldLnR2LnR2X3NlYzsKKysJCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfdXNlYyA9IHNbal1baV0udHYudHZfdXNlYzsKKyAJCQkJZGF0YS0+ZXZbY10udHlwZSA9IEVWX0FCUzsKKyAJCQkJZGF0YS0+ZXZbY10uY29kZSA9IEFCU19QUkVTU1VSRTsKKyAJCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLnByZXNzdXJlOworIAkJCQljKys7CisgCQkJfQorIAorLQkJCWRhdGEtPmV2W2NdLnRpbWUgPSBzW2pdW2ldLnR2OworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3NlYyA9IHNbal1baV0udHYudHZfc2VjOworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3VzZWMgPSBzW2pdW2ldLnR2LnR2X3VzZWM7CisgCQkJZGF0YS0+ZXZbY10udHlwZSA9IEVWX0FCUzsKKyAJCQlkYXRhLT5ldltjXS5jb2RlID0gQUJTX01UX1BPU0lUSU9OX1g7CisgCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLng7CisgCQkJYysrOworIAorLQkJCWRhdGEtPmV2W2NdLnRpbWUgPSBzW2pdW2ldLnR2OworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3NlYyA9IHNbal1baV0udHYudHZfc2VjOworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3VzZWMgPSBzW2pdW2ldLnR2LnR2X3VzZWM7CisgCQkJZGF0YS0+ZXZbY10udHlwZSA9IEVWX0FCUzsKKyAJCQlkYXRhLT5ldltjXS5jb2RlID0gQUJTX01UX1BPU0lUSU9OX1k7CisgCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLnk7CisgCQkJYysrOworIAorLQkJCWRhdGEtPmV2W2NdLnRpbWUgPSBzW2pdW2ldLnR2OworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3NlYyA9IHNbal1baV0udHYudHZfc2VjOworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3VzZWMgPSBzW2pdW2ldLnR2LnR2X3VzZWM7CisgCQkJZGF0YS0+ZXZbY10udHlwZSA9IEVWX0FCUzsKKyAJCQlkYXRhLT5ldltjXS5jb2RlID0gQUJTX01UX1BSRVNTVVJFOworIAkJCWRhdGEtPmV2W2NdLnZhbHVlID0gc1tqXVtpXS5wcmVzc3VyZTsKKyAJCQljKys7CisgCistCQkJZGF0YS0+ZXZbY10udGltZSA9IHNbal1baV0udHY7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfc2VjID0gc1tqXVtpXS50di50dl9zZWM7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfdXNlYyA9IHNbal1baV0udHYudHZfdXNlYzsKKyAJCQlkYXRhLT5ldltjXS50eXBlID0gRVZfQUJTOworIAkJCWRhdGEtPmV2W2NdLmNvZGUgPSBBQlNfTVRfVE9VQ0hfTUFKT1I7CisgCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLnRvdWNoX21ham9yOworIAkJCWMrKzsKKyAKKy0JCQlkYXRhLT5ldltjXS50aW1lID0gc1tqXVtpXS50djsKKysJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF9zZWMgPSBzW2pdW2ldLnR2LnR2X3NlYzsKKysJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF91c2VjID0gc1tqXVtpXS50di50dl91c2VjOworIAkJCWRhdGEtPmV2W2NdLnR5cGUgPSBFVl9BQlM7CisgCQkJZGF0YS0+ZXZbY10uY29kZSA9IEFCU19NVF9XSURUSF9NQUpPUjsKKyAJCQlkYXRhLT5ldltjXS52YWx1ZSA9IHNbal1baV0ud2lkdGhfbWFqb3I7CisgCQkJYysrOworIAorLQkJCWRhdGEtPmV2W2NdLnRpbWUgPSBzW2pdW2ldLnR2OworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3NlYyA9IHNbal1baV0udHYudHZfc2VjOworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3VzZWMgPSBzW2pdW2ldLnR2LnR2X3VzZWM7CisgCQkJZGF0YS0+ZXZbY10udHlwZSA9IEVWX0FCUzsKKyAJCQlkYXRhLT5ldltjXS5jb2RlID0gQUJTX01UX1RPVUNIX01JTk9SOworIAkJCWRhdGEtPmV2W2NdLnZhbHVlID0gc1tqXVtpXS50b3VjaF9taW5vcjsKKyAJCQljKys7CisgCistCQkJZGF0YS0+ZXZbY10udGltZSA9IHNbal1baV0udHY7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfc2VjID0gc1tqXVtpXS50di50dl9zZWM7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfdXNlYyA9IHNbal1baV0udHYudHZfdXNlYzsKKyAJCQlkYXRhLT5ldltjXS50eXBlID0gRVZfQUJTOworIAkJCWRhdGEtPmV2W2NdLmNvZGUgPSBBQlNfTVRfV0lEVEhfTUlOT1I7CisgCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLndpZHRoX21pbm9yOworIAkJCWMrKzsKKyAKKy0JCQlkYXRhLT5ldltjXS50aW1lID0gc1tqXVtpXS50djsKKysJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF9zZWMgPSBzW2pdW2ldLnR2LnR2X3NlYzsKKysJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF91c2VjID0gc1tqXVtpXS50di50dl91c2VjOworIAkJCWRhdGEtPmV2W2NdLnR5cGUgPSBFVl9BQlM7CisgCQkJZGF0YS0+ZXZbY10uY29kZSA9IEFCU19NVF9UT09MX1RZUEU7CisgCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLnRvb2xfdHlwZTsKKyAJCQljKys7CisgCistCQkJZGF0YS0+ZXZbY10udGltZSA9IHNbal1baV0udHY7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfc2VjID0gc1tqXVtpXS50di50dl9zZWM7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfdXNlYyA9IHNbal1baV0udHYudHZfdXNlYzsKKyAJCQlkYXRhLT5ldltjXS50eXBlID0gRVZfQUJTOworIAkJCWRhdGEtPmV2W2NdLmNvZGUgPSBBQlNfTVRfVE9PTF9YOworIAkJCWRhdGEtPmV2W2NdLnZhbHVlID0gc1tqXVtpXS50b29sX3g7CisgCQkJYysrOworIAorLQkJCWRhdGEtPmV2W2NdLnRpbWUgPSBzW2pdW2ldLnR2OworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3NlYyA9IHNbal1baV0udHYudHZfc2VjOworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3VzZWMgPSBzW2pdW2ldLnR2LnR2X3VzZWM7CisgCQkJZGF0YS0+ZXZbY10udHlwZSA9IEVWX0FCUzsKKyAJCQlkYXRhLT5ldltjXS5jb2RlID0gQUJTX01UX1RPT0xfWTsKKyAJCQlkYXRhLT5ldltjXS52YWx1ZSA9IHNbal1baV0udG9vbF95OworIAkJCWMrKzsKKyAKKy0JCQlkYXRhLT5ldltjXS50aW1lID0gc1tqXVtpXS50djsKKysJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF9zZWMgPSBzW2pdW2ldLnR2LnR2X3NlYzsKKysJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF91c2VjID0gc1tqXVtpXS50di50dl91c2VjOworIAkJCWRhdGEtPmV2W2NdLnR5cGUgPSBFVl9BQlM7CisgCQkJZGF0YS0+ZXZbY10uY29kZSA9IEFCU19NVF9PUklFTlRBVElPTjsKKyAJCQlkYXRhLT5ldltjXS52YWx1ZSA9IHNbal1baV0ub3JpZW50YXRpb247CisgCQkJYysrOworIAorLQkJCWRhdGEtPmV2W2NdLnRpbWUgPSBzW2pdW2ldLnR2OworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3NlYyA9IHNbal1baV0udHYudHZfc2VjOworKwkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3VzZWMgPSBzW2pdW2ldLnR2LnR2X3VzZWM7CisgCQkJZGF0YS0+ZXZbY10udHlwZSA9IEVWX0FCUzsKKyAJCQlkYXRhLT5ldltjXS5jb2RlID0gQUJTX01UX0RJU1RBTkNFOworIAkJCWRhdGEtPmV2W2NdLnZhbHVlID0gc1tqXVtpXS5kaXN0YW5jZTsKKyAJCQljKys7CisgCistCQkJZGF0YS0+ZXZbY10udGltZSA9IHNbal1baV0udHY7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfc2VjID0gc1tqXVtpXS50di50dl9zZWM7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfdXNlYyA9IHNbal1baV0udHYudHZfdXNlYzsKKyAJCQlkYXRhLT5ldltjXS50eXBlID0gRVZfQUJTOworIAkJCWRhdGEtPmV2W2NdLmNvZGUgPSBBQlNfTVRfQkxPQl9JRDsKKyAJCQlkYXRhLT5ldltjXS52YWx1ZSA9IHNbal1baV0uYmxvYl9pZDsKKyAJCQljKys7CisgCistCQkJZGF0YS0+ZXZbY10udGltZSA9IHNbal1baV0udHY7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfc2VjID0gc1tqXVtpXS50di50dl9zZWM7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfdXNlYyA9IHNbal1baV0udHYudHZfdXNlYzsKKyAJCQlkYXRhLT5ldltjXS50eXBlID0gRVZfQUJTOworIAkJCWRhdGEtPmV2W2NdLmNvZGUgPSBBQlNfTVRfVFJBQ0tJTkdfSUQ7CisgCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLnRyYWNraW5nX2lkOworIAkJCWMrKzsKKyAKKyAJCQlpZiAoZGF0YS0+bXRfdHlwZV9hID09IDEpIHsKKy0JCQkJZGF0YS0+ZXZbY10udGltZSA9IHNbal1baV0udHY7CisrCQkJCWRhdGEtPmV2W2NdLmlucHV0X2V2ZW50X3NlYyA9IHNbal1baV0udHYudHZfc2VjOworKwkJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF91c2VjID0gc1tqXVtpXS50di50dl91c2VjOworIAkJCQlkYXRhLT5ldltjXS50eXBlID0gRVZfU1lOOworIAkJCQlkYXRhLT5ldltjXS5jb2RlID0gU1lOX01UX1JFUE9SVDsKKyAJCQkJZGF0YS0+ZXZbY10udmFsdWUgPSAwOworQEAgLTMwMiw3ICszMjIsOCBAQCBzdGF0aWMgaW50IHNlbmRfdG91Y2hfZXZlbnRzKHN0cnVjdCBkYXRhX3QgKmRhdGEsIHN0cnVjdCB0c19zYW1wbGVfbXQgKipzLAorIAkJCX0KKyAKKyAJCQlpZiAoc1tqXVtpXS5wZW5fZG93biA9PSAwKSB7CistCQkJCWRhdGEtPmV2W2NdLnRpbWUgPSBzW2pdW2ldLnR2OworKwkJCQlkYXRhLT5ldltjXS5pbnB1dF9ldmVudF9zZWMgPSBzW2pdW2ldLnR2LnR2X3NlYzsKKysJCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfdXNlYyA9IHNbal1baV0udHYudHZfdXNlYzsKKyAJCQkJZGF0YS0+ZXZbY10udHlwZSA9IEVWX0tFWTsKKyAJCQkJZGF0YS0+ZXZbY10uY29kZSA9IEJUTl9UT1VDSDsKKyAJCQkJZGF0YS0+ZXZbY10udmFsdWUgPSBzW2pdW2ldLnBlbl9kb3duOworQEAgLTMxMiw3ICszMzMsOCBAQCBzdGF0aWMgaW50IHNlbmRfdG91Y2hfZXZlbnRzKHN0cnVjdCBkYXRhX3QgKmRhdGEsIHN0cnVjdCB0c19zYW1wbGVfbXQgKipzLAorIAkJfQorIAorIAkJaWYgKGMgPiAwKSB7CistCQkJZGF0YS0+ZXZbY10udGltZSA9IHNbal1baV0udHY7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfc2VjID0gc1tqXVtpXS50di50dl9zZWM7CisrCQkJZGF0YS0+ZXZbY10uaW5wdXRfZXZlbnRfdXNlYyA9IHNbal1baV0udHYudHZfdXNlYzsKKyAJCQlkYXRhLT5ldltjXS50eXBlID0gRVZfU1lOOworIAkJCWRhdGEtPmV2W2NdLmNvZGUgPSBTWU5fUkVQT1JUOworIAkJCWRhdGEtPmV2W2NdLnZhbHVlID0gMDsKKy0tIAorMi4yNC4wCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYl8xLjIxLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMjEuYmIKaW5kZXggMmJjNDBkOS4uYmIyOGVlNCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMjEuYmIKQEAgLTE0LDYgKzE0LDcgQEAKICIKIAogU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS90c2xpYi0ke1BWfS50YXIueHo7ZG93bmxvYWRmaWxlbmFtZT10c2xpYi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL3RzLmNvbmYgXAogICAgICAgICAgICBmaWxlOi8vdHNsaWIuc2ggXAogIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ0NDVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2gKQEAgLTAsMCArMSwxMTEgQEAKK0Zyb20gOGFiNjcyY2NjNjdiNjQwNThjZmZhYzJjZDE5YTBkM2I3NWQ1YWEyNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIE5vdiAyMDE5IDExOjQzOjMyIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCBvbiAzMmJpdCBhcmNoZXMgd2l0aCA2NGJpdCB0aW1lX3QKKwordGltZSBlbGVtZW50IGlzIGRlcHJlY2F0ZWQgb24gbmV3IGlucHV0X2V2ZW50IHN0cnVjdHVyZSBpbiBrZXJuZWwncworaW5wdXQuaCBbMV0KKworWzFdIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC9jb21taXQ/aWQ9MTUyMTk0ZmU5YzNmCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vTGliVk5DL3gxMXZuYy9wdWxsLzExN10KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvdWlucHV0LmMgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvdWlucHV0LmMgYi9zcmMvdWlucHV0LmMKK2luZGV4IDI4ZmJhZDMuLjM0M2I3YzUgMTAwNjQ0CistLS0gYS9zcmMvdWlucHV0LmMKKysrKyBiL3NyYy91aW5wdXQuYworQEAgLTU0LDYgKzU0LDExIEBAIHNvLCBkZWxldGUgdGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorICNpbmNsdWRlIDxsaW51eC91aW5wdXQuaD4KKyAKKysjaWZuZGVmIGlucHV0X2V2ZW50X3NlYworKyNkZWZpbmUgaW5wdXRfZXZlbnRfc2VjIHRpbWUudHZfc2VjCisrI2RlZmluZSBpbnB1dF9ldmVudF91c2VjIHRpbWUudHZfdXNlYworKyNlbmRpZgorKworICNpZiAhZGVmaW5lZChFVl9TWU4pIHx8ICFkZWZpbmVkKFNZTl9SRVBPUlQpCisgI3VuZGVmIFVJTlBVVF9PSworICNlbmRpZgorQEAgLTcxMCw2ICs3MTUsNyBAQCB2b2lkIHBhcnNlX3VpbnB1dF9zdHIoY2hhciAqaW4pIHsKKyBzdGF0aWMgdm9pZCBwdHJfbW92ZShpbnQgZHgsIGludCBkeSkgeworICNpZmRlZiBVSU5QVVRfT0sKKyAJc3RydWN0IGlucHV0X2V2ZW50IGV2OworKwlzdHJ1Y3QgdGltZXZhbCB0dmFsOworIAlpbnQgZCA9IGRpcmVjdF9yZWxfZmQgPCAwID8gZmQgOiBkaXJlY3RfcmVsX2ZkOworIAorIAlpZiAoaW5qZWN0YWJsZSAmJiBzdHJjaHIoaW5qZWN0YWJsZSwgJ00nKSA9PSBOVUxMKSB7CitAQCAtNzIwLDcgKzcyNiw5IEBAIHN0YXRpYyB2b2lkIHB0cl9tb3ZlKGludCBkeCwgaW50IGR5KSB7CisgCisgCWlmIChkYikgZnByaW50ZihzdGRlcnIsICJwdHJfbW92ZSglZCwgJWQpIGZkPSVkXG4iLCBkeCwgZHksIGQpOworIAorLQlnZXR0aW1lb2ZkYXkoJmV2LnRpbWUsIE5VTEwpOworKwlnZXR0aW1lb2ZkYXkoJnR2YWwsIE5VTEwpOworKwlldi5pbnB1dF9ldmVudF9zZWMgPSB0dmFsLnR2X3NlYzsKKysJZXYuaW5wdXRfZXZlbnRfdXNlYyA9IHR2YWwudHZfdXNlYzsKKyAJZXYudHlwZSA9IEVWX1JFTDsKKyAJZXYuY29kZSA9IFJFTF9ZOworIAlldi52YWx1ZSA9IGR5OworQEAgLTc1NSw2ICs3NjMsNyBAQCBzdGF0aWMgdm9pZCBhcHBseV90c2xpYihpbnQgKngsIGludCAqeSkgeworIHN0YXRpYyB2b2lkIHB0cl9hYnMoaW50IHgsIGludCB5LCBpbnQgcCkgeworICNpZmRlZiBVSU5QVVRfT0sKKyAJc3RydWN0IGlucHV0X2V2ZW50IGV2OworKwlzdHJ1Y3QgdGltZXZhbCB0dmFsOworIAlpbnQgeDAsIHkwOworIAlpbnQgZCA9IGRpcmVjdF9hYnNfZmQgPCAwID8gZmQgOiBkaXJlY3RfYWJzX2ZkOworIAorQEAgLTc3Myw3ICs3ODIsOSBAQCBzdGF0aWMgdm9pZCBwdHJfYWJzKGludCB4LCBpbnQgeSwgaW50IHApIHsKKyAKKyAJaWYgKGRiKSBmcHJpbnRmKHN0ZGVyciwgInB0cl9hYnMoJWQsICVkID0+ICVkICVkLCBwPSVkKSBmZD0lZFxuIiwgeDAsIHkwLCB4LCB5LCBwLCBkKTsKKyAKKy0JZ2V0dGltZW9mZGF5KCZldi50aW1lLCBOVUxMKTsKKysJZ2V0dGltZW9mZGF5KCZ0dmFsLCBOVUxMKTsKKysJZXYuaW5wdXRfZXZlbnRfc2VjID0gdHZhbC50dl9zZWM7CisrCWV2LmlucHV0X2V2ZW50X3VzZWMgPSB0dmFsLnR2X3VzZWM7CisgCWV2LnR5cGUgPSBFVl9BQlM7CisgCWV2LmNvZGUgPSBBQlNfWTsKKyAJZXYudmFsdWUgPSB5OworQEAgLTk1MCw2ICs5NjEsNyBAQCBpZiAoMCkge3VzbGVlcCgxMDAqMTAwMCkgO30KKyBzdGF0aWMgdm9pZCBidXR0b25fY2xpY2soaW50IGRvd24sIGludCBidG4pIHsKKyAjaWZkZWYgVUlOUFVUX09LCisgCXN0cnVjdCBpbnB1dF9ldmVudCBldjsKKysJc3RydWN0IHRpbWV2YWwgdHZhbDsKKyAJaW50IGQgPSBkaXJlY3RfYnRuX2ZkIDwgMCA/IGZkIDogZGlyZWN0X2J0bl9mZDsKKyAKKyAJaWYgKGluamVjdGFibGUgJiYgc3RyY2hyKGluamVjdGFibGUsICdCJykgPT0gTlVMTCkgeworQEAgLTk1OSw3ICs5NzEsMTIgQEAgc3RhdGljIHZvaWQgYnV0dG9uX2NsaWNrKGludCBkb3duLCBpbnQgYnRuKSB7CisgCWlmIChkYikgZnByaW50ZihzdGRlcnIsICJidXR0b25fY2xpY2s6IGJ0biAlZCAlcyBmZD0lZFxuIiwgYnRuLCBkb3duID8gImRvd24iIDogInVwIiwgZCk7CisgCisgCW1lbXNldCgmZXYsIDAsIHNpemVvZihldikpOworLQlnZXR0aW1lb2ZkYXkoJmV2LnRpbWUsIE5VTEwpOworKwlnZXR0aW1lb2ZkYXkoJnR2YWwsIE5VTEwpOworKwlnZXR0aW1lb2ZkYXkoJnR2YWwsIE5VTEwpOworKwlldi5pbnB1dF9ldmVudF9zZWMgPSB0dmFsLnR2X3NlYzsKKysJZXYuaW5wdXRfZXZlbnRfdXNlYyA9IHR2YWwudHZfdXNlYzsKKysJZXYuaW5wdXRfZXZlbnRfc2VjID0gdHZhbC50dl9zZWM7CisrCWV2LmlucHV0X2V2ZW50X3VzZWMgPSB0dmFsLnR2X3VzZWM7CisgCWV2LnR5cGUgPSBFVl9LRVk7CisgCWV2LnZhbHVlID0gZG93bjsKKyAKK0BAIC0xMjMwLDYgKzEyNDcsNyBAQCB2b2lkIHVpbnB1dF9wb2ludGVyX2NvbW1hbmQoaW50IG1hc2ssIGludCB4LCBpbnQgeSwgcmZiQ2xpZW50UHRyIGNsaWVudCkgeworIHZvaWQgdWlucHV0X2tleV9jb21tYW5kKGludCBkb3duLCBpbnQga2V5c3ltLCByZmJDbGllbnRQdHIgY2xpZW50KSB7CisgI2lmZGVmIFVJTlBVVF9PSworIAlzdHJ1Y3QgaW5wdXRfZXZlbnQgZXY7CisrCXN0cnVjdCB0aW1ldmFsIHR2YWw7CisgCWludCBzY2FuY29kZTsKKyAJYWxsb3dlZF9pbnB1dF90IGlucHV0OworIAlpbnQgZCA9IGRpcmVjdF9rZXlfZmQgPCAwID8gZmQgOiBkaXJlY3Rfa2V5X2ZkOworQEAgLTEyNTMsNyArMTI3MSw5IEBAIHZvaWQgdWlucHV0X2tleV9jb21tYW5kKGludCBkb3duLCBpbnQga2V5c3ltLCByZmJDbGllbnRQdHIgY2xpZW50KSB7CisgCWlmIChkYikgZnByaW50ZihzdGRlcnIsICJ1aW5wdXRfa2V5X2NvbW1hbmQ6ICVkIC0+ICVkICVzIGZkPSVkXG4iLCBrZXlzeW0sIHNjYW5jb2RlLCBkb3duID8gImRvd24iIDogInVwIiwgZCk7CisgCisgCW1lbXNldCgmZXYsIDAsIHNpemVvZihldikpOworLQlnZXR0aW1lb2ZkYXkoJmV2LnRpbWUsIE5VTEwpOworKwlnZXR0aW1lb2ZkYXkoJnR2YWwsIE5VTEwpOworKwlldi5pbnB1dF9ldmVudF9zZWMgPSB0dmFsLnR2X3NlYzsKKysJZXYuaW5wdXRfZXZlbnRfdXNlYyA9IHR2YWwudHZfdXNlYzsKKyAJZXYudHlwZSA9IEVWX0tFWTsKKyAJZXYuY29kZSA9ICh1bnNpZ25lZCBjaGFyKSBzY2FuY29kZTsKKyAJZXYudmFsdWUgPSBkb3duOwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjE2LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjE2LmJiCmluZGV4IGQwYzlmNzcuLjBkODRjNDIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMveDExdm5jXzAuOS4xNi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL3gxMXZuY18wLjkuMTYuYmIKQEAgLTEwLDggKzEwLDkgQEAKIFNSQ1JFViA9ICI0Y2EwMDZmZWQ4MDQxMGJkOWIwNjFhMTUxOWJkNWQ5MzY2YmIwYmM4IgogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL0xpYlZOQy94MTF2bmMgXAogICAgICAgICAgICBmaWxlOi8vc3RhcnRpbmctZml4LnBhdGNoIFwKLQkgICBmaWxlOi8vMDAwMS1taXNjLU1ha2VmaWxlLmFtLWRvbi10LWluc3RhbGwtWGR1bW15LXdoZW4tY29uZmlndXJlLnBhdGNoIFwKLSIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbWlzYy1NYWtlZmlsZS5hbS1kb24tdC1pbnN0YWxsLVhkdW1teS13aGVuLWNvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2ggXAorICAgICAgICAgICAiCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiBERVBFTkRTID0gIlwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94dGVybS8wMDAxLUFkZC1jb25maWd1cmUtdGltZS1jaGVjay1mb3Itc2V0c2lkLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h0ZXJtLzAwMDEtQWRkLWNvbmZpZ3VyZS10aW1lLWNoZWNrLWZvci1zZXRzaWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiZWVhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94dGVybS8wMDAxLUFkZC1jb25maWd1cmUtdGltZS1jaGVjay1mb3Itc2V0c2lkLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK0Zyb20gMzczMGEzOGVmYWQ5NjlmYjZmODIyN2RmMDdlYjQ0NjFhMDc4ZjVhMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEzIERlYyAyMDE5IDEyOjU5OjI2IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBjb25maWd1cmUgdGltZSBjaGVjayBmb3Igc2V0c2lkCisKK0RvIG5vdCBhc3N1bWUgZ2xpYmMgPT0gbGludXgKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgIHwgMSArCisgY29uZmlndXJlLmluIHwgMSArCisgbWFpbi5jICAgICAgIHwgNCArKy0tCisgeHRlcm1jZmcuaGluIHwgMSArCisgNSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDBhYWZlZmMuLjAzZThkZjAgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTU0MTEsNiArNTQxMSw3IEBAIGZvciBhY19mdW5jIGluIFwKKyAJdW5zZXRlbnYgXAorIAlzY2hlZF95aWVsZCBcCisgCXNldHBnaWQgXAorKwlzZXRzaWQgXAorIAlzdHJmdGltZSBcCisgCXRjZ2V0YXR0ciBcCisgCXdhaXRwaWQgXAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggZDJmZWU4OC4uNzRkNjVkZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtOTksNiArOTksNyBAQCBBQ19DSEVDS19GVU5DUyggXAorIAl1bnNldGVudiBcCisgCXNjaGVkX3lpZWxkIFwKKyAJc2V0cGdpZCBcCisrCXNldHNpZCBcCisgCXN0cmZ0aW1lIFwKKyAJdGNnZXRhdHRyIFwKKyAJd2FpdHBpZCBcCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCitpbmRleCA1ZTYwNTg5Li5iODFkMmJlIDEwMDY0NAorLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0yODY4LDcgKzI4NjgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W11FTlZQX0FSRykKKyAgICAgfQorIH0KKyAKKy0jaWYgZGVmaW5lZChfX29zZl9fKSB8fCAoZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKFVTRV9VU0dfUFRZUykpIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKysjaWYgZGVmaW5lZChfX29zZl9fKSB8fCAoZGVmaW5lZChfX2xpbnV4X18pICYmICFkZWZpbmVkKFVTRV9VU0dfUFRZUykpIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyAjZGVmaW5lIFVTRV9PUEVOUFRZIDEKKyBzdGF0aWMgaW50IG9wZW5lZF90dHkgPSAtMTsKKyAjZW5kaWYKK0BAIC00MDQwLDcgKzQwNDAsNyBAQCBzcGF3blhUZXJtKFh0ZXJtV2lkZ2V0IHh3LCB1bnNpZ25lZCBsaW5lX3NwZWVkKQorIAkgICAgLyoKKyAJICAgICAqIG5vdyBpbiBjaGlsZCBwcm9jZXNzCisgCSAgICAgKi8KKy0jaWYgZGVmaW5lZChfUE9TSVhfU09VUkNFKSB8fCBkZWZpbmVkKFNWUjQpIHx8IGRlZmluZWQoX19jb252ZXhfXykgfHwgZGVmaW5lZChfX1NDT19fKSB8fCBkZWZpbmVkKF9fUU5YX18pCisrI2lmIEhBVkVfU0VUU0lECisgCSAgICBpbnQgcGdycCA9IHNldHNpZCgpOwkvKiB2YXJpYWJsZSBtYXkgbm90IGJlIHVzZWQuLi4gKi8KKyAjZWxzZQorIAkgICAgaW50IHBncnAgPSBnZXRwaWQoKTsKK2RpZmYgLS1naXQgYS94dGVybWNmZy5oaW4gYi94dGVybWNmZy5oaW4KK2luZGV4IDFkYmMzYjguLjRmM2ZmNWIgMTAwNjQ0CistLS0gYS94dGVybWNmZy5oaW4KKysrKyBiL3h0ZXJtY2ZnLmhpbgorQEAgLTk2LDYgKzk2LDcgQEAKKyAjdW5kZWYgSEFWRV9QVVRFTlYJCS8qIEFDX0NIRUNLX0ZVTkNTKHB1dGVudikgKi8KKyAjdW5kZWYgSEFWRV9TQ0hFRF9ZSUVMRAkJLyogQUNfQ0hFQ0tfRlVOQ1Moc2NoZWRfeWllbGQpICovCisgI3VuZGVmIEhBVkVfU0VUUEdJRAkJLyogQUNfQ0hFQ0tfRlVOQ1Moc2V0cGdpZCkgKi8KKysjdW5kZWYgSEFWRV9TRVRTSUQJCS8qIEFDX0NIRUNLX0ZVTkNTKHNldHNpZCkgKi8KKyAjdW5kZWYgSEFWRV9TVERJTlRfSAkJLyogQUNfUFJPR19DQ19TVERDICovCisgI3VuZGVmIEhBVkVfU1RETElCX0gJCS8qIEFDX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpICovCisgI3VuZGVmIEhBVkVfU1RSRlRJTUUJCS8qIEFDX0NIRUNLX0ZVTkNTKHN0cmZ0aW1lKSAqLworLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h0ZXJtXzM1MC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94dGVybV8zNTEuYmIKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h0ZXJtXzM1MC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h0ZXJtXzM1MS5iYgppbmRleCBkOThjZTQ3Li40MGVlNTU1IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHRlcm1fMzUwLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94dGVybV8zNTEuYmIKQEAgLTQsMTAgKzQsMTIgQEAKIAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veHRlcm0uaDtiZWdpbmxpbmU9MztlbmRsaW5lPTMxO21kNT1jN2ZhY2ViODcyZDkwMTE1ZTdjMGFkOTBlOTBjMzkwZCIKIAotU1JDX1VSSSA9ICJodHRwOi8vaW52aXNpYmxlLW1pcnJvci5uZXQvYXJjaGl2ZXMvJHtCUE59LyR7QlB9LnRneiIKK1NSQ19VUkkgPSAiaHR0cDovL2ludmlzaWJsZS1taXJyb3IubmV0L2FyY2hpdmVzLyR7QlBOfS8ke0JQfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtY29uZmlndXJlLXRpbWUtY2hlY2stZm9yLXNldHNpZC5wYXRjaCBcCisgICAgICAgICAgIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiMTg5YjU5Mzg0MTE4OWRhNjZiYzFjZWE5MmRmNjAyYTUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWVmYjU5ZWVmZDMxMDI2ODA4MGQxYTkwYTQ0NzM2OGZiOTdhOWE2NzM3YmZlY2ZjMzgwMGJmNmNjMzA0MTA0ZCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMDdlZGZiZWUyZTJmNGM2YTlkZGJmODM0ZmE0YmJlYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NjBhOGExMDIyMWM5Yzk3NDRhZmQ4NmRiODdjN2FkOTViYmY5YmU0ZjVmNTI1ZmVjZjM5MTI1ZjBkMmE2ZTE2IgogUEFDS0FHRUNPTkZJRyA/PSAiIgogUEFDS0FHRUNPTkZJR1t4ZnRdID0gIi0tZW5hYmxlLWZyZWV0eXBlLC0tZGlzYWJsZS1mcmVldHlwZSxsaWJ4ZnQgZm9udGNvbmZpZyBmcmVldHlwZS1uYXRpdmUiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy95YWQveWFkXzQuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy95YWQveWFkXzUuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MveWFkL3lhZF80LjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy95YWQveWFkXzUuMC5iYgppbmRleCBjNjlmNDdkLi5lNTNjMDRiIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MveWFkL3lhZF80LjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWdyYXBoaWNzL3lhZC95YWRfNS4wLmJiCkBAIC02LDcgKzYsNyBAQAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS92MWNvbnQveWFkLmdpdCIKLVNSQ1JFViA9ICIzODU3YTBhODgyMmZjMGE3MjA2ZTgwNGYxNWNjMTdiODVhNWY4Y2UyIgorU1JDUkVWID0gImM4ZWFjODljYzIwZDkxNWNiNWVkMTg1ZjQyMzA5MWEyOTFjOGFmMjQiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIGdzZXR0aW5ncwogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMta2VybmVsL2lwbWl1dGlsL2lwbWl1dGlsXzMuMC41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9pcG1pdXRpbC9pcG1pdXRpbF8zLjEuNS5iYgpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMta2VybmVsL2lwbWl1dGlsL2lwbWl1dGlsXzMuMC41LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMta2VybmVsL2lwbWl1dGlsL2lwbWl1dGlsXzMuMS41LmJiCmluZGV4IDMzOGNhZmQuLjNlMjYzNDAgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1rZXJuZWwvaXBtaXV0aWwvaXBtaXV0aWxfMy4wLjUuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9pcG1pdXRpbC9pcG1pdXRpbF8zLjEuNS5iYgpAQCAtMjIsOCArMjIsOCBAQAogU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vaXBtaXV0aWwvaXBtaXV0aWwtJHtQVn0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL2ZpeF9zeXN0ZW1kX3BhdGgucGF0Y2ggXAogICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI1ZmVhZjZhODI3MjA1NzkyZTA1N2JiNGZmNWM0ZTg0MiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiMmQ3ZjcyNTM1MTMxYzc4MzJiYTRiZTEzZGMzM2M4MTUxM2ZjM2VlNDNmZTc5N2I0YjUyMDE0NjAwZWNlZTVlIgorU1JDX1VSSVttZDVzdW1dID0gIjI5MmQ2ZGYyNWNhZDY3OGJiMjdlNWM4Y2RjNjc0OGY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU4Y2NkYmQ1NzU1ZDdkZDcyNDc4NzU2NzE1YWYwOWU5YzczMzMwZGZhZDJiOTFkYmYwM2QyYWM1MDRiMzAxYTMiCiAKIGluaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcgc3lzdGVtZAogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMta2VybmVsL2tlcm5lbC1zZWxmdGVzdC9rZXJuZWwtc2VsZnRlc3QuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMta2VybmVsL2tlcm5lbC1zZWxmdGVzdC9rZXJuZWwtc2VsZnRlc3QuYmIKaW5kZXggMDIzNTllNy4uMDJjNTZiZSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9rZXJuZWwtc2VsZnRlc3Qva2VybmVsLXNlbGZ0ZXN0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1rZXJuZWwva2VybmVsLXNlbGZ0ZXN0L2tlcm5lbC1zZWxmdGVzdC5iYgpAQCAtMzMsNiArMzMsNyBAQAogCiBURVNUX0xJU1QgPSAiXAogICAgICR7QGJiLnV0aWxzLmZpbHRlcignUEFDS0FHRUNPTkZJRycsICdicGYgdm0nLCBkKX0gXAorICAgIHJ0YyBcCiAiCiAKIEVYVFJBX09FTUFLRSA9ICdcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMta2VybmVsL2xpYnBmbS9saWJwZm00LzAwMDEtSW5jbHVkZS1wb2xsLmgtaW5zdGVhZC1vZi1zeXMtcG9sbC5oLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNC8wMDAxLUluY2x1ZGUtcG9sbC5oLWluc3RlYWQtb2Ytc3lzLXBvbGwuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTEzZGYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNC8wMDAxLUluY2x1ZGUtcG9sbC5oLWluc3RlYWQtb2Ytc3lzLXBvbGwuaC5wYXRjaApAQCAtMCwwICsxLDg2IEBACitGcm9tIGY2MmI2MjljMWUxZTk2OGY5MGFhZmJjMGNmOTExNmI0OWVlYTlkOGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNSBEZWMgMjAxOSAxNjoyNDozNyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIHBvbGwuaCBpbnN0ZWFkIG9mIHN5cy9wb2xsLmgKKworRml4ZXMKK2Vycm9yOiByZWRpcmVjdGluZyBpbmNvcnJlY3QgI2luY2x1ZGUgPHN5cy9wb2xsLmg+IHRvIDxwb2xsLmg+IFstV2Vycm9yLC1XI3dhcm5pbmdzXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBwZXJmX2V4YW1wbGVzL2JyYW5jaF9zbXBsLmMgICAgICAgICB8IDIgKy0KKyBwZXJmX2V4YW1wbGVzL3N5c3Rfc21wbC5jICAgICAgICAgICB8IDIgKy0KKyBwZXJmX2V4YW1wbGVzL3Rhc2tfYXR0YWNoX3RpbWVvdXQuYyB8IDIgKy0KKyBwZXJmX2V4YW1wbGVzL3Rhc2tfc21wbC5jICAgICAgICAgICB8IDIgKy0KKyBwZXJmX2V4YW1wbGVzL3g4Ni9idHNfc21wbC5jICAgICAgICB8IDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BlcmZfZXhhbXBsZXMvYnJhbmNoX3NtcGwuYyBiL3BlcmZfZXhhbXBsZXMvYnJhbmNoX3NtcGwuYworaW5kZXggODdjZDMwMy4uNGQxNmIwNCAxMDA2NDQKKy0tLSBhL3BlcmZfZXhhbXBsZXMvYnJhbmNoX3NtcGwuYworKysrIGIvcGVyZl9leGFtcGxlcy9icmFuY2hfc21wbC5jCitAQCAtMzIsNyArMzIsNyBAQAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c2V0am1wLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CistI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisrI2luY2x1ZGUgPHBvbGwuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorZGlmZiAtLWdpdCBhL3BlcmZfZXhhbXBsZXMvc3lzdF9zbXBsLmMgYi9wZXJmX2V4YW1wbGVzL3N5c3Rfc21wbC5jCitpbmRleCAwNDU4MGZkLi5kMDU5YzA4IDEwMDc1NQorLS0tIGEvcGVyZl9leGFtcGxlcy9zeXN0X3NtcGwuYworKysrIGIvcGVyZl9leGFtcGxlcy9zeXN0X3NtcGwuYworQEAgLTMzLDcgKzMzLDcgQEAKKyAjaW5jbHVkZSA8c2V0am1wLmg+CisgI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKy0jaW5jbHVkZSA8c3lzL3BvbGwuaD4KKysjaW5jbHVkZSA8cG9sbC5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KK2RpZmYgLS1naXQgYS9wZXJmX2V4YW1wbGVzL3Rhc2tfYXR0YWNoX3RpbWVvdXQuYyBiL3BlcmZfZXhhbXBsZXMvdGFza19hdHRhY2hfdGltZW91dC5jCitpbmRleCA3ZmM1NTI0Li5hMDM2N2M4IDEwMDY0NAorLS0tIGEvcGVyZl9leGFtcGxlcy90YXNrX2F0dGFjaF90aW1lb3V0LmMKKysrKyBiL3BlcmZfZXhhbXBsZXMvdGFza19hdHRhY2hfdGltZW91dC5jCitAQCAtMzYsNyArMzYsNyBAQAorICNpbmNsdWRlIDxzdGRhcmcuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSA8ZXJyLmg+CistI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisrI2luY2x1ZGUgPHBvbGwuaD4KKyAKKyAjaW5jbHVkZSAicGVyZl91dGlsLmgiCisgCitkaWZmIC0tZ2l0IGEvcGVyZl9leGFtcGxlcy90YXNrX3NtcGwuYyBiL3BlcmZfZXhhbXBsZXMvdGFza19zbXBsLmMKK2luZGV4IGRjYjc0ODEuLjk1YzQzMmMgMTAwNjQ0CistLS0gYS9wZXJmX2V4YW1wbGVzL3Rhc2tfc21wbC5jCisrKysgYi9wZXJmX2V4YW1wbGVzL3Rhc2tfc21wbC5jCitAQCAtMzcsNyArMzcsNyBAQAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c2V0am1wLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CistI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisrI2luY2x1ZGUgPHBvbGwuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorZGlmZiAtLWdpdCBhL3BlcmZfZXhhbXBsZXMveDg2L2J0c19zbXBsLmMgYi9wZXJmX2V4YW1wbGVzL3g4Ni9idHNfc21wbC5jCitpbmRleCA2NDk4Nzc2Li5kNjZkNWU2IDEwMDY0NAorLS0tIGEvcGVyZl9leGFtcGxlcy94ODYvYnRzX3NtcGwuYworKysrIGIvcGVyZl9leGFtcGxlcy94ODYvYnRzX3NtcGwuYworQEAgLTQxLDcgKzQxLDcgQEAKKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorLSNpbmNsdWRlIDxzeXMvcG9sbC5oPgorKyNpbmNsdWRlIDxwb2xsLmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorICNpbmNsdWRlIDxlcnIuaD4KKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC4xMC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjEwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI0M2I0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC4xMC4xLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiTW9uaXRvcmluZyB0b29scyBleHBsb2l0aW5nIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50cyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyBhIGxpYnJhcnksIGNhbGxlZCBsaWJwZm00IHdoaWNoIGlzIHVzZWQgdG8gZGV2ZWxvcCBcCittb25pdG9yaW5nIHRvb2xzIGV4cGxvaXRpbmcgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZXZlbnRzIHN1Y2ggYXMgdGhvc2UgXAorcHJvdmlkZWQgYnkgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvZiBtb2Rlcm4gcHJvY2Vzc29ycy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGVyZm1vbjIuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNDQ4MjImYXRpZD03NTk5NTMmc291cmNlPW5hdmJhciIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wZGU0ODhmM2JkNDQyNGUzMDhlMmUzOTljYjk5Yzc4OCIKKworU0VDVElPTiA9ICJkZXZlbCIKKworQ09NUEFUSUJMRV9IT1NUID0gInBvd2VycGM2NCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcGVyZm1vbjIvJHtCUE59L2xpYnBmbS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXBvbGwuaC1pbnN0ZWFkLW9mLXN5cy1wb2xsLmgucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkOGY2NmNiOWJmYTdlMTQzNDQzNGUwZGU2NDA5ZGI1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNjFjNTc1Mzc4YjVjMTdjY2ZjNTgwNjc2MWU0MDM4ODI4NjEwZGU3NmUyZTM0ZmFjOWY3ZmE3M2JhODQ0YjQ5IgorCitVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wZXJmbW9uMi9maWxlcy9saWJwZm00LyIKKworRVhUUkFfT0VNQUtFID0gIkRFU1RESVI9XCIke0R9XCIgUFJFRklYPVwiJHtwcmVmaXh9XCIgTElCRElSPVwiJHtsaWJkaXJ9XCIgTERDT05GSUc9XCJ0cnVlXCIiCitFWFRSQV9PRU1BS0VfYXBwZW5kX3Bvd2VycGMgPSAiIEFSQ0g9XCJwb3dlcnBjXCIiCitFWFRSQV9PRU1BS0VfYXBwZW5kX3Bvd2VycGM2NCA9ICIgQVJDSD1cInBvd2VycGNcIiBCSVRNT0RFPVwiNjRcIiIKKworUyA9ICIke1dPUktESVJ9L2xpYnBmbS0ke1BWfSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMta2VybmVsL21ha2VkdW1wZmlsZS9tYWtlZHVtcGZpbGUvMDAwMy1idWlsZC1EZWxldGUtbGliZWJsLWZyb20tcmVxdWlyZWQtbGlicmFyaWVzLWR1cmluZy1sLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9tYWtlZHVtcGZpbGUvbWFrZWR1bXBmaWxlLzAwMDMtYnVpbGQtRGVsZXRlLWxpYmVibC1mcm9tLXJlcXVpcmVkLWxpYnJhcmllcy1kdXJpbmctbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDk1NjQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9tYWtlZHVtcGZpbGUvbWFrZWR1bXBmaWxlLzAwMDMtYnVpbGQtRGVsZXRlLWxpYmVibC1mcm9tLXJlcXVpcmVkLWxpYnJhcmllcy1kdXJpbmctbC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDQ2MDg1MWMxNWU4MDdkMWEyNTE1ZGZiOTg1NDIzZjhhNjYyNGY0YWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCA4IEphbiAyMDIwIDE5OjE0OjE5IC0wODAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBidWlsZDogRGVsZXRlIGxpYmVibCBmcm9tIHJlcXVpcmVkIGxpYnJhcmllcyBkdXJpbmcgbGluaworCitUaGlzIGlzIGEgc3RhdGljIGxpYnJhcnkgZnJvbSBlbGZ1dGlscywgd2hpY2ggaXMgbm90IG1hZGUgYXZhaWxhYmxlIHdoZW4KK3N0YXRpYyBhcmNoaXZlcyBhcmUgZGlzYWJsZWQsIHRoaXMgY2FuIHJlc3VsdCBpbiBsaW5rIGZhaWx1cmVzIGUuZy4KKworYWFyY2g2NC15b2UtbGludXgtbXVzbC85LjIuMC9sZDogY2Fubm90IGZpbmQgLWxlYmwKK2NvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworTWFrZWZpbGU6OTM6IHJlY2lwZSBmb3IgdGFyZ2V0ICdtYWtlZHVtcGZpbGUnIGZhaWxlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDVkY2U1ODkuLmMzYTQwNTQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC01MSw3ICs1MSw3IEBAIE9CSl9QQVJUPSQocGF0c3Vic3QgJS5jLCUubywkKFNSQ19QQVJUKSkKKyBTUkNfQVJDSCA9IGFyY2gvYXJtLmMgYXJjaC9hcm02NC5jIGFyY2gveDg2LmMgYXJjaC94ODZfNjQuYyBhcmNoL2lhNjQuYyBhcmNoL3BwYzY0LmMgYXJjaC9zMzkweC5jIGFyY2gvcHBjLmMgYXJjaC9zcGFyYzY0LmMKKyBPQkpfQVJDSD0kKHBhdHN1YnN0ICUuYywlLm8sJChTUkNfQVJDSCkpCisgCistTElCUyA9IC1sZHcgLWxiejIgLWxlYmwgLWxkbCAtbGVsZiAtbHoKKytMSUJTID0gLWxkdyAtbGJ6MiAtbGRsIC1sZWxmIC1segorIGlmbmVxICgkKExJTktUWVBFKSwgZHluYW1pYykKKyBMSUJTIDo9ICQoTElCUykKKyBlbmRpZgorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9tYWtlZHVtcGZpbGUvbWFrZWR1bXBmaWxlXzEuNi42LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9tYWtlZHVtcGZpbGUvbWFrZWR1bXBmaWxlXzEuNi42LmJiCmluZGV4IDljMzU3YmYuLjY5MjRlMzkgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1rZXJuZWwvbWFrZWR1bXBmaWxlL21ha2VkdW1wZmlsZV8xLjYuNi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMta2VybmVsL21ha2VkdW1wZmlsZS9tYWtlZHVtcGZpbGVfMS42LjYuYmIKQEAgLTI0LDYgKzI0LDcgQEAKICAgICAke1NPVVJDRUZPUkdFX01JUlJPUn0vbWFrZWR1bXBmaWxlLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAogICAgIGZpbGU6Ly8wMDAxLW1ha2VkdW1wZmlsZS1yZXBsYWNlLWhhcmRjb2RlLUNGTEFHUy5wYXRjaCBcCiAgICAgZmlsZTovLzAwMDItbWVtX3NlY3Rpb24tU3VwcG9ydC1vbmx5LTQ2LWJpdC1mb3ItTUFYX1BIWVNNRU1fQklUUy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtYnVpbGQtRGVsZXRlLWxpYmVibC1mcm9tLXJlcXVpcmVkLWxpYnJhcmllcy1kdXJpbmctbC5wYXRjaCBcCiAiCiBTUkNfVVJJW21kNXN1bV0gPSAiNmZkNjMyYjk3YWQ3OGQ5YTBhM2IwZjA5ODkwOTQwNjQiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDAwN2VlYzA1Y2IxNGYwMTU1ZjJkMDZhMGQ0ZGM3MGQzMjFkYmIyYWVjNjVmY2NkY2U5NTMxNDVjODIzMDMyNCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL2lkM2xpYi9pZDNsaWJfMy44LjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS9pZDNsaWIvaWQzbGliXzMuOC4zLmJiCmluZGV4IGZjODBjYzAuLjlkMzExNjAgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL2lkM2xpYi9pZDNsaWJfMy44LjMuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvaWQzbGliL2lkM2xpYl8zLjguMy5iYgpAQCAtNywxMiArNyw0NiBAQAogUFIgPSAicjEiCiAKIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2lkM2xpYi9pZDNsaWItJHtQVn0udGFyLmd6O25hbWU9YXJjaGl2ZSBcCi0gICAgICAgICAgIGh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2kvaWQzbGliMy44LjMvaWQzbGliMy44LjNfMy44LjMtNy4yLmRpZmYuZ3o7bmFtZT1wYXRjaCBcCisgICAgICAgICAgICR7REVCSUFOX01JUlJPUn0vbWFpbi9pL2lkM2xpYjMuOC4zL2lkM2xpYjMuOC4zXzMuOC4zLTE2LjIuZGViaWFuLnRhci54ejtuYW1lPXBhdGNoO3N1YmRpcj0ke0JQfSBcCiAgICAgICAgICAgIGZpbGU6Ly9hY2RlZmluZS5wYXRjaCBcCiAiCiBTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIxOWYyN2RkZDJkZGE0YjJkMjZhNTU5YTRmMGY0MDJhNyIKIFNSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjI3NDljYzNjMGNkNzI4MGIyOTk1MThiMWRkZjVhNWJjZmUyZDExMDA2MTQ1MTliNjg3MDIyMzBlMjZjN2QwNzkiCi1TUkNfVVJJW3BhdGNoLm1kNXN1bV0gPSAiODA1YzAzMjBhMmVmYjIxYzQwY2UwNmZhMTNjZDdjNGIiCi1TUkNfVVJJW3BhdGNoLnNoYTI1NnN1bV0gPSAiOWYwM2I1OWNjYzg4MjZhNWJlNTVhM2RjZGUyZjg4OTA2N2Q1OGJkYzcyYmY4NDY0MTZhMTk4YzliOTMzNzA0YyIKK1NSQ19VUklbcGF0Y2gubWQ1c3VtXSA9ICI5OTdjNzY0ZDNiZTExYzlhNTE3NzlkOTNmYWNmMTExOCIKK1NSQ19VUklbcGF0Y2guc2hhMjU2c3VtXSA9ICJhYzJlZTIzZWM4OWJhMmFmNTFkMmM2ZGQ1YjFiNmJmOWY4YTlmODEzZGUyNTFiYzE4Mjk0MTQzOWE0MDUzMTc2IgogCiBpbmhlcml0IGF1dG90b29scworCisjIFVubGlrZSBvdGhlciBEZWJpYW4gcGFja2FnZXMsIGlkM2xpYiouZGlmZi5neiBjb250YWlucyBhbm90aGVyIHNlcmllcyBvZgorIyBwYXRjaGVzIG1haW50YWluZWQgYnkgcXVpbHQuIFNvIG1hbnVhbGx5IGFwcGx5IHRoZW0gYmVmb3JlIGFwcGx5aW5nIG90aGVyIGxvY2FsCisjIHBhdGNoZXMuIEFsc28gcmVtb3ZlIGFsbCB0ZW1wIGZpbGVzIGJlZm9yZSBsZWF2aW5nLCBiZWNhdXNlIGRvX3BhdGNoKCkgd2lsbCBwb3AKKyMgdXAgYWxsIHByZXZpb3VzbHkgYXBwbGllZCBwYXRjaGVzIGluIHRoZSBzdGFydAoraWQzbGliX2RvX3BhdGNoKCkgeworICAgIGNkICR7U30KKyAgICAjIGl0J3MgaW1wb3J0YW50IHRoYXQgd2Ugb25seSBwb3AgdGhlIGV4aXN0aW5nIHBhdGNoZXMgd2hlbiB0aGV5J3ZlCisgICAgIyBiZWVuIGFwcGxpZWQsIG90aGVyd2lzZSBxdWlsdCB3aWxsIGNsaW1iIHRoZSBkaXJlY3RvcnkgdHJlZQorICAgICMgYW5kIHJldmVyc2Ugb3V0IHNvbWUgY29tcGxldGVseSBkaWZmZXJlbnQgc2V0IG9mIHBhdGNoZXMKKyAgICBpZiBbIC1kICR7U30vcGF0Y2hlcyBdOyB0aGVuCisgICAgICAgICMgd2hpbHN0IHRoaXMgaXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5LCBkb2luZyBpdCBsaWtlIHRoaXMKKyAgICAgICAgIyBkZWZlYXRzIHRoZSBkaXJlY3RvcnkgY2xpbWJpbmcgdGhhdCBxdWlsdCB3aWxsIG90aGVyd2lzZQorICAgICAgICAjIGRvOyBub3RlIHRoZSBkaXJlY3RvcnkgbXVzdCBleGlzdCB0byBkZWZlYXQgdGhpcywgaGVuY2UKKyAgICAgICAgIyB0aGUgdGVzdCBpbnNpZGUgd2hpY2ggd2Ugb3BlcmF0ZQorICAgICAgICBRVUlMVF9QQVRDSEVTPSR7U30vcGF0Y2hlcyBxdWlsdCBwb3AgLWEKKyAgICBmaQorICAgIGlmIFsgLWQgJHtTfS8ucGMtaWQzbGliIF07IHRoZW4KKyAgICAgICAgcm0gLXJmICR7U30vLnBjCisgICAgICAgIG12ICR7U30vLnBjLWlkM2xpYiAke1N9Ly5wYworICAgICAgICBRVUlMVF9QQVRDSEVTPSR7U30vZGViaWFuL3BhdGNoZXMgcXVpbHQgcG9wIC1hCisgICAgICAgIHJtIC1yZiAke1N9Ly5wYyAke1N9L2RlYmlhbgorICAgIGZpCisgICAgUVVJTFRfUEFUQ0hFUz0ke1N9L2RlYmlhbi9wYXRjaGVzIHF1aWx0IHB1c2ggLWEKKyAgICBtdiAke1N9Ly5wYyAke1N9Ly5wYy1pZDNsaWIKK30KKworZG9fdW5wYWNrW2NsZWFuZGlyc10gKz0gIiR7U30iCisKKyMgV2UgaW52b2tlIGJhc2UgZG9fcGF0Y2ggYXQgZW5kLCB0byBpbmNvcnBvcmF0ZSBhbnkgbG9jYWwgcGF0Y2gKK3B5dGhvbiBkb19wYXRjaCgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2lkM2xpYl9kb19wYXRjaCcsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdwYXRjaF9kb19wYXRjaCcsIGQpCit9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS9saWJidXJuL2xpYmJ1cm5fMS41LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS9saWJidXJuL2xpYmJ1cm5fMS41LjIuYmIKc2ltaWxhcml0eSBpbmRleCA2OCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYnVybi9saWJidXJuXzEuNS4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS9saWJidXJuL2xpYmJ1cm5fMS41LjIuYmIKaW5kZXggNjEyMDAwZS4uNzNlOGUzZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYnVybi9saWJidXJuXzEuNS4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmJ1cm4vbGliYnVybl8xLjUuMi5iYgpAQCAtNSw3ICs1LDcgQEAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTlhYzJlN2NmZjFkZGFmNDhiNmVhYjYwMjhmMjNlZjg4IgogCiBTUkNfVVJJID0gImh0dHA6Ly9maWxlcy5saWJidXJuaWEtcHJvamVjdC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci5neiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJiMzJlZGVmZGQ5YTk3OGVkYzY1YWFjZGRmZTdjNTg4YSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1ODJiMTJjMjM2YzEzNjUyMTE5NDZmMmZlM2MyNTQ5NzZhZjM3YmJlYzI0NDA1MWY3NzQyYTk4ZGVkOWJlMmJkIgorU1JDX1VSSVttZDVzdW1dID0gIjA5NmY0YWNmYmEwMGYxMjEwYTg0ZmI3NjUwZjc2OTNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiMzJkYjE3MTlkN2Y2NTE2Y2NlODJhOWQwMGRmZGRmYjM1ODE3MjVkYjczMmVhODdkNDFlYThlZjBjZTUyMjciCiAKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvbGliZHZkcmVhZC9saWJkdmRyZWFkXzYuMC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvbGliZHZkcmVhZC9saWJkdmRyZWFkXzYuMC4yLmJiCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmR2ZHJlYWQvbGliZHZkcmVhZF82LjAuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvbGliZHZkcmVhZC9saWJkdmRyZWFkXzYuMC4yLmJiCmluZGV4IGQ2OGU3OTIuLjJjYTc0ZjYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmR2ZHJlYWQvbGliZHZkcmVhZF82LjAuMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS9saWJkdmRyZWFkL2xpYmR2ZHJlYWRfNi4wLjIuYmIKQEAgLTQsOCArNCw4IEBACiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NGU3NTNmYTdkMWNhMzE2MzJiYzM4M2RhM2I1N2MyNyIKIAogU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQudmlkZW9sYW4ub3JnL3B1Yi92aWRlb2xhbi9saWJkdmRyZWFkLyR7UFZ9L2xpYmR2ZHJlYWQtJHtQVn0udGFyLmJ6MiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJiOWVlYWFhZjNjNDFiMWMzY2I2YzE2MjJlNzIxOWFlYiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyOGNlNGYwMDYzODgzY2E0ZDM3ZGZkNDBhMmY2Njg1NTAzZDY3OWJjYTdkODhkNThlMDRlZTgxMTIzODJkNWJkIgorU1JDX1VSSVttZDVzdW1dID0gIjQ5OTkwOTM1MTc0YmY2YjJmYTUwMWU3ODljNTc4MTM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY5MTQwMWFmMjEzYjIxOWNkZGUyNGI0NmM1MGE1N2YyOTMwMWZlYjdmOTY1Njc4ZjFkN2VkNDYzMmNjNmZlYjAiCiAKIGluaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGJpbmNvbmZpZyBwa2djb25maWcKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvbXBsYXllci9tcHZfMC4yNi4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvbXBsYXllci9tcHZfMC4yNi4wLmJiCmluZGV4IDFiYTlmMGYuLjI5YmNmZTQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL21wbGF5ZXIvbXB2XzAuMjYuMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS9tcGxheWVyL21wdl8wLjI2LjAuYmIKQEAgLTI5LDYgKzI5LDggQEAKIExVQSA/PSAibHVhIgogTFVBX21pcHM2NCAgPSAiIgogTFVBX2FhcmNoNjQgID0gIiIKK0xVQV9wb3dlcnBjNjQgID0gIiIKKwogIyBOb3RlOiBib3RoIGx1YSBhbmQgbGliYXNzIGFyZSByZXF1aXJlZCB0byBnZXQgb24tc2NyZWVuLWRpc3BsYXkgKGNvbnRyb2xzKQogUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCiAgICAgJHtMVUF9IFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL3Y0bDJhcHBzL3Y0bC11dGlscy8wMDAzLXY0bDItY3RsLURvLW5vdC11c2UtZ2V0c3Vib3B0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvdjRsMmFwcHMvdjRsLXV0aWxzLzAwMDMtdjRsMi1jdGwtRG8tbm90LXVzZS1nZXRzdWJvcHQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViODRhZjIuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvdjRsMmFwcHMvdjRsLXV0aWxzLzAwMDMtdjRsMi1jdGwtRG8tbm90LXVzZS1nZXRzdWJvcHQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1Gcm9tIGY3YTRiNzliMzMyMzUzNDQ2MGE2M2IzZTZjNThlYmFmMDZhZGYyMDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAxNCBKdWwgMjAxNyAxMzoyMDowNSAtMDcwMAotU3ViamVjdDogW1BBVENIXSB2NGwyLWN0bDogRG8gbm90IHVzZSBnZXRzdWJvcHQKLQotUE9TSVggc2F5cyB0aGF0IGJlaGF2aW9yIHdoZW4gc3Vib3B0cyBsaXN0IGlzIGVtcHR5IGlzIHVuZGVmaW5lZC4KLW11c2wgbGlicyB3aWxsIHNldCB2YWx1ZSB0byBOVUxMIHdoaWNoIGxlYWRzIHRvIGNyYXNoLgotCi1UYWtlbiBmcm9tIEFscGluZUxpbnV4Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLS0tLQotIHV0aWxzL3Y0bDItY3RsL3Y0bDItY3RsLWNvbW1vbi5jcHAgfCAxOSArKysrKysrKysrLS0tLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS91dGlscy92NGwyLWN0bC92NGwyLWN0bC1jb21tb24uY3BwIGIvdXRpbHMvdjRsMi1jdGwvdjRsMi1jdGwtY29tbW9uLmNwcAotaW5kZXggM2VhNmNkMy4uMjkxZmIzZSAxMDA2NDQKLS0tLSBhL3V0aWxzL3Y0bDItY3RsL3Y0bDItY3RsLWNvbW1vbi5jcHAKLSsrKyBiL3V0aWxzL3Y0bDItY3RsL3Y0bDItY3RsLWNvbW1vbi5jcHAKLUBAIC02OTIsMTYgKzY5MiwxNyBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zdWJzZXQoY2hhciAqb3B0YXJnKQotIAotIHN0YXRpYyBib29sIHBhcnNlX25leHRfc3Vib3B0KGNoYXIgKipzdWJzLCBjaGFyICoqdmFsdWUpCi0gewotLQlzdGF0aWMgY2hhciAqY29uc3Qgc3Vib3B0c1tdID0gewotLQkgICAgTlVMTAotLQl9OwotLQlpbnQgb3B0ID0gZ2V0c3Vib3B0KHN1YnMsIHN1Ym9wdHMsIHZhbHVlKTsKLSsJY2hhciAqcCA9ICpzdWJzOwotKwkqdmFsdWUgPSAqc3ViczsKLSAKLS0JaWYgKG9wdCA8IDAgfHwgKnZhbHVlKQotLQkJcmV0dXJuIGZhbHNlOwotLQlmcHJpbnRmKHN0ZGVyciwgIk5vIHZhbHVlIGdpdmVuIHRvIHN1Ym9wdGlvbiA8JXM+XG4iLAotLQkJCXN1Ym9wdHNbb3B0XSk7Ci0tCXJldHVybiB0cnVlOwotKwl3aGlsZSAoKnAgJiYgKnAgIT0gJywnKQotKwkJcCsrOwotKwotKwlpZiAoKnApCi0rCQkqcCsrID0gJ1wwJzsKLSsKLSsJKnN1YnMgPSBwOwotKwlyZXR1cm4gZmFsc2U7Ci0gfQotIAotIHZvaWQgY29tbW9uX2NtZChpbnQgY2gsIGNoYXIgKm9wdGFyZykKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL3Y0bDJhcHBzL3Y0bC11dGlscy8wMDA1LURlZmluZS1lcnJvcl90LWFuZC1pbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvdjRsMmFwcHMvdjRsLXV0aWxzLzAwMDUtRGVmaW5lLWVycm9yX3QtYW5kLWluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5NDhhZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL3Y0bDJhcHBzL3Y0bC11dGlscy8wMDA1LURlZmluZS1lcnJvcl90LWFuZC1pbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gMTM3Y2UyM2FlNjc3YjExZTU0ODNlZjgxMDc1MWVkYWU3YmY5NmJiOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIE5vdiAyMDE5IDE4OjQwOjA2IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIERlZmluZSBlcnJvcl90IGFuZCBpbmNsdWRlIHN5cy90eXBlcy5oCisKK0ZpeCAndW5rbm93biB0eXBlIG5hbWUnIGZvciBlcnJvcl90IGFuZCB1X2ludDMyX3QuCit1X2ludDMyX3QgaXMgZGVmaW5lZCBpbiBzeXMvdHlwZS5oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyB1dGlscy9pci1jdGwva2V5bWFwLmggICB8IDQgKysrKworIHV0aWxzL2tleXRhYmxlL2tleW1hcC5oIHwgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS91dGlscy9pci1jdGwva2V5bWFwLmggYi91dGlscy9pci1jdGwva2V5bWFwLmgKK2luZGV4IGYyYjI5NjMuLjFmOGEzZjggMTAwNjQ0CistLS0gYS91dGlscy9pci1jdGwva2V5bWFwLmgKKysrKyBiL3V0aWxzL2lyLWN0bC9rZXltYXAuaAorQEAgLTIsNiArMiwxMCBAQAorICNpZm5kZWYgX19LRVlNQVBfSAorICNkZWZpbmUgX19LRVlNQVBfSAorIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaWZuZGVmIGVycm9yX3QKKyt0eXBlZGVmIGludCBlcnJvcl90OworKyNlbmRpZgorIHN0cnVjdCBrZXltYXAgeworIAlzdHJ1Y3Qga2V5bWFwICpuZXh0OworIAljaGFyICpuYW1lOworZGlmZiAtLWdpdCBhL3V0aWxzL2tleXRhYmxlL2tleW1hcC5oIGIvdXRpbHMva2V5dGFibGUva2V5bWFwLmgKK2luZGV4IGYyYjI5NjMuLjM0NWQ1NWQgMTAwNjQ0CistLS0gYS91dGlscy9rZXl0YWJsZS9rZXltYXAuaAorKysrIGIvdXRpbHMva2V5dGFibGUva2V5bWFwLmgKK0BAIC0yLDYgKzIsMTEgQEAKKyAjaWZuZGVmIF9fS0VZTUFQX0gKKyAjZGVmaW5lIF9fS0VZTUFQX0gKKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2lmbmRlZiBlcnJvcl90CisrdHlwZWRlZiBpbnQgZXJyb3JfdDsKKysjZW5kaWYKKysKKyBzdHJ1Y3Qga2V5bWFwIHsKKyAJc3RydWN0IGtleW1hcCAqbmV4dDsKKyAJY2hhciAqbmFtZTsKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL3Y0bDJhcHBzL3Y0bC11dGlscy8wMDA2LUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS92NGwyYXBwcy92NGwtdXRpbHMvMDAwNi1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTI2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS92NGwyYXBwcy92NGwtdXRpbHMvMDAwNi1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gYjIxM2RhMmQ1ZmNjOTNjZDI0ZmM4ODBjNzFjNzE3ZDhlMmNlMjk2OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIE5vdiAyMDE5IDE4OjQzOjIxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCBvbiAzMmJpdCBhcmNoZXMgd2l0aCA2NGJpdCB0aW1lX3QKKwordGltZSBlbGVtZW50IGlzIGRlcHJlY2F0ZWQgb24gbmV3IGlucHV0X2V2ZW50IHN0cnVjdHVyZSBpbiBrZXJuZWwncworaW5wdXQuaCBbMV0KKworWzFdIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC9jb21taXQ/aWQ9MTUyMTk0ZmU5YzNmCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHV0aWxzL2tleXRhYmxlL2tleXRhYmxlLmMgfCA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlscy9rZXl0YWJsZS9rZXl0YWJsZS5jIGIvdXRpbHMva2V5dGFibGUva2V5dGFibGUuYworaW5kZXggNmNiMDIxNy4uNTlmZjFlZSAxMDA2NDQKKy0tLSBhL3V0aWxzL2tleXRhYmxlL2tleXRhYmxlLmMKKysrKyBiL3V0aWxzL2tleXRhYmxlL2tleXRhYmxlLmMKK0BAIC01Myw2ICs1MywxMSBAQAorIAorICMgZGVmaW5lIE5fKHN0cmluZykgc3RyaW5nCisgCisrI2lmbmRlZiBpbnB1dF9ldmVudF9zZWMKKysjZGVmaW5lIGlucHV0X2V2ZW50X3NlYyB0aW1lLnR2X3NlYworKyNkZWZpbmUgaW5wdXRfZXZlbnRfdXNlYyB0aW1lLnR2X3VzZWMKKysjZW5kaWYKKysKKyBzdHJ1Y3QgaW5wdXRfa2V5bWFwX2VudHJ5X3YyIHsKKyAjZGVmaW5lIEtFWU1BUF9CWV9JTkRFWAkoMSA8PCAwKQorIAl1X2ludDhfdCAgZmxhZ3M7CitAQCAtMTUzMyw3ICsxNTM4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9ldmVudChzdHJ1Y3QgcmNfZGV2aWNlICpyY19kZXYsIGludCBmZCkKKyAKKyAJCWZvciAoaSA9IDA7IGkgPCByZCAvIHNpemVvZihzdHJ1Y3QgaW5wdXRfZXZlbnQpOyBpKyspIHsKKyAJCQlwcmludGYoXygiJWxkLiUwNmxkOiBldmVudCB0eXBlICVzKDB4JTAyeCkiKSwKKy0JCQkJZXZbaV0udGltZS50dl9zZWMsIGV2W2ldLnRpbWUudHZfdXNlYywKKysJCQkJZXZbaV0uaW5wdXRfZXZlbnRfc2VjLCBldltpXS5pbnB1dF9ldmVudF91c2VjLAorIAkJCQlnZXRfZXZlbnRfbmFtZShldmVudHNfdHlwZSwgZXZbaV0udHlwZSksIGV2W2ldLnR5cGUpOworIAorIAkJCXN3aXRjaCAoZXZbaV0udHlwZSkgewpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvdjRsMmFwcHMvdjRsLXV0aWxzLzAwMDctRG8tbm90LXVzZS1nZXRzdWJvcHQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS92NGwyYXBwcy92NGwtdXRpbHMvMDAwNy1Eby1ub3QtdXNlLWdldHN1Ym9wdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzcwNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvdjRsMmFwcHMvdjRsLXV0aWxzLzAwMDctRG8tbm90LXVzZS1nZXRzdWJvcHQucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRnJvbSA0YTEwZWFiMGUzMWQ2OTk0ODE2MTI0MWIxODAxYzQxMjAxYTVkMDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgTm92IDIwMTkgMTg6NTA6MzQgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRG8gbm90IHVzZSBnZXRzdWJvcHQKKworUE9TSVggc2F5cyB0aGF0IGJlaGF2aW9yIHdoZW4gc3Vib3B0cyBsaXN0IGlzIGVtcHR5IGlzIHVuZGVmaW5lZC4KK211c2wgbGlicyB3aWxsIHNldCB2YWx1ZSB0byBOVUxMIHdoaWNoIGxlYWRzIHRvIGNyYXNoLgorCitTaW1wbHkgYXZvaWQgZ2V0c3Vib3B0LCBzaW5jZSB3ZSBjYW5ub3QgcmVseSBvbiBpdC4KKworSW1wb3J0ZWQgZnJvbSBBbHBpbmUgTGludXgKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgdXRpbHMvdjRsMi1jdGwvdjRsMi1jdGwtY29tbW9uLmNwcCB8IDE4ICsrKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXRpbHMvdjRsMi1jdGwvdjRsMi1jdGwtY29tbW9uLmNwcCBiL3V0aWxzL3Y0bDItY3RsL3Y0bDItY3RsLWNvbW1vbi5jcHAKK2luZGV4IDY1MTkxN2UuLmNlYTU3YjcgMTAwNjQ0CistLS0gYS91dGlscy92NGwyLWN0bC92NGwyLWN0bC1jb21tb24uY3BwCisrKysgYi91dGlscy92NGwyLWN0bC92NGwyLWN0bC1jb21tb24uY3BwCitAQCAtNzgyLDE1ICs3ODIsMTcgQEAgc3RhdGljIGJvb2wgcGFyc2Vfc3Vic2V0KGNoYXIgKm9wdGFyZykKKyAKKyBzdGF0aWMgYm9vbCBwYXJzZV9uZXh0X3N1Ym9wdChjaGFyICoqc3VicywgY2hhciAqKnZhbHVlKQorIHsKKy0Jc3RhdGljIGNoYXIgKmNvbnN0IHN1Ym9wdHNbXSA9IHsKKy0JICAgIE5VTEwKKy0JfTsKKy0JaW50IG9wdCA9IGdldHN1Ym9wdChzdWJzLCBzdWJvcHRzLCB2YWx1ZSk7CisrCWNoYXIgKnAgPSAqc3ViczsKKysJKnZhbHVlID0gKnN1YnM7CisgCistCWlmIChvcHQgPCAwIHx8ICp2YWx1ZSkKKy0JCXJldHVybiBmYWxzZTsKKy0JZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIHN1Ym9wdGlvbiB2YWx1ZVxuIik7CistCXJldHVybiB0cnVlOworKwl3aGlsZSAoKnAgJiYgKnAgIT0gJywnKQorKwkJcCsrOworKworKwlpZiAoKnApCisrCQkqcCsrID0gJ1wwJzsKKysKKysJKnN1YnMgPSBwOworKwlyZXR1cm4gZmFsc2U7CisgfQorIAorIHZvaWQgY29tbW9uX2NtZChjb25zdCBzdGQ6OnN0cmluZyAmbWVkaWFfYnVzX2luZm8sIGludCBjaCwgY2hhciAqb3B0YXJnKQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvdjRsMmFwcHMvdjRsLXV0aWxzXzEuMTYuNS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL3Y0bDJhcHBzL3Y0bC11dGlsc18xLjE4LjAuYmIKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvdjRsMmFwcHMvdjRsLXV0aWxzXzEuMTYuNS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW11bHRpbWVkaWEvdjRsMmFwcHMvdjRsLXV0aWxzXzEuMTguMC5iYgppbmRleCA0MTU0NDY4Li45Y2MyYThlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbXVsdGltZWRpYS92NGwyYXBwcy92NGwtdXRpbHNfMS4xNi41LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1tdWx0aW1lZGlhL3Y0bDJhcHBzL3Y0bC11dGlsc18xLjE4LjAuYmIKQEAgLTIwLDEwICsyMCwxMiBAQAogICAgICAgICAgICBmaWxlOi8vbWVkaWFjdGwtcGtnY29uZmlnLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovL2V4cG9ydC1tZWRpYWN0bC1oZWFkZXJzLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDItY29udHJpYi10ZXN0LUxpbmstbWNfbmV4dGdlbl90ZXN0LXdpdGgtbGliYXJncC1pZi1uZS5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAzLXY0bDItY3RsLURvLW5vdC11c2UtZ2V0c3Vib3B0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtRGVmaW5lLWVycm9yX3QtYW5kLWluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctRG8tbm90LXVzZS1nZXRzdWJvcHQucGF0Y2ggXAogICAgICAgICAgICAiCi1TUkNfVVJJW21kNXN1bV0gPSAiZGUyNzI4MTcxMzNjMGRjYTAwMGE3OGE1YzhjOGVjOGIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWQ4MDI0MjUxMDM4NTAxN2ExZGM1NjZlMTdhMjg1YTc3MjIyYmIzMDFmNWJjMTkzODZiYWRmY2MyYzE5ZGYxYiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxODk5NmJkNWU5ZDgzZDQ3MDU1YzA1ZGUzNzY3MDhjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2Y2I2MGQ4MjJlZWVkMjA0ODZhMDNjYzIzZTBmYzY1OTU2ZmJjMWU4NWUwYzFhNzQ3N2Y2OGJiZDk4MDI4ODBkIgogCiBFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXF2NGwyIC0tZW5hYmxlLXNoYXJlZCAtLXdpdGgtdWRldmRpcj0ke2Jhc2VfbGliZGlyfS91ZGV2IgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbmF2aWdhdGlvbi9ncHNkL2dwc2RfMy4xOS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1uYXZpZ2F0aW9uL2dwc2QvZ3BzZF8zLjE5LmJiCmluZGV4IDY4MzRiZDQuLjlmZGJiZjIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1uYXZpZ2F0aW9uL2dwc2QvZ3BzZF8zLjE5LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1uYXZpZ2F0aW9uL2dwc2QvZ3BzZF8zLjE5LmJiCkBAIC0yLDcgKzIsNyBAQAogU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCiBMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTAxNzY0YzM1YWUzNGQ5NTIxOTQ0YmI2YWIzMTJhZjUzIgotREVQRU5EUyA9ICJkYnVzIG5jdXJzZXMgcHl0aG9uIHB5dGhvbjMgbGlidXNiMSBwcHMtdG9vbHMiCitERVBFTkRTID0gImRidXMgbmN1cnNlcyBweXRob24gcHl0aG9uMyBwcHMtdG9vbHMiCiBQUk9WSURFUyA9ICJ2aXJ0dWFsL2dwc2QiCiAKIFNSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS8ke0JQTn0vJHtCUH0udGFyLmd6IFwKQEAgLTIzLDkgKzIzLDEwIEBACiBleHBvcnQgU1RBR0lOR19JTkNESVIKIGV4cG9ydCBTVEFHSU5HX0xJQkRJUgogCi1QQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSB1c2IiCiBQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICJibHVlej0ndHJ1ZScsYmx1ZXo9J2ZhbHNlJyxibHVlejUiCiBQQUNLQUdFQ09ORklHW3F0XSA9ICJxdD0neWVzJyBxdF92ZXJzaW9uZWQ9NSxxdD0nbm8nLHF0YmFzZSIKK1BBQ0tBR0VDT05GSUdbdXNiXSA9ICJ1c2I9J3RydWUnLHVzYj0nZmFsc2UnLGxpYnVzYjEiCiBFWFRSQV9PRVNDT05TID0gIiBcCiAgICAgc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAogICAgIGxpYlFncHNtbT0nZmFsc2UnIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1uYXZpZ2F0aW9uL2xpYnNwYXRpYWxpdGUvbGlic3BhdGlhbGl0ZV80LjMuMGEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbmF2aWdhdGlvbi9saWJzcGF0aWFsaXRlL2xpYnNwYXRpYWxpdGVfNC4zLjBhLmJiCmluZGV4IGEzZjA5MDMuLmIzM2Y1YTMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1uYXZpZ2F0aW9uL2xpYnNwYXRpYWxpdGUvbGlic3BhdGlhbGl0ZV80LjMuMGEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW5hdmlnYXRpb24vbGlic3BhdGlhbGl0ZS9saWJzcGF0aWFsaXRlXzQuMy4wYS5iYgpAQCAtMTQsNiArMTQsNyBAQAogaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCiAKIEVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1mcmVleGw9bm8iCitDRkxBR1MgKz0gIi1EQUNDRVBUX1VTRV9PRl9ERVBSRUNBVEVEX1BST0pfQVBJX0giCiAKICMgcGFja2FnZSBwbHVnaW5zIGZvciBTUUxpdGUzCiBQQUNLQUdFUyArPSAiJHtQTn0tcGx1Z2luIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW5hdmlnYXRpb24vcHJvai9wcm9qXzQuOS4zLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW5hdmlnYXRpb24vcHJvai9wcm9qXzQuOS4zLmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDVmODk0Li4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1uYXZpZ2F0aW9uL3Byb2ovcHJval80LjkuMy5iYgorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVNVTU1BUlkgPSAiUFJPSi40IC0gQ2FydG9ncmFwaGljIFByb2plY3Rpb25zIGxpYnJhcnkiCi1IT01FUEFHRSA9ICJodHRwOi8vdHJhYy5vc2dlby5vcmcvcHJvai8iCi1TRUNUSU9OID0gImxpYnMiCi0KLUxJQ0VOU0UgPSAiTUlUIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzRkOWFhZWM1ZmEwY2Q3MzQzNDFlOGM0ZGM5MWI2MDgiCi0KLVNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9zZ2VvLm9yZy9wcm9qL3Byb2otJHtQVn0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gImQ1OTgzMzZjYTgzNDc0MjczNTEzN2M1Njc0YjIxNGExIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5ODQ1NDJmZWEzMzM0ODhkZTVjODJlZWE1OGQ2OTllNGFmZjRiMzU5MjAwYTk5NzE1MzdjZDdlMDQ3MTg1ZjciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQotCi1GSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wcm9qIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW5hdmlnYXRpb24vcHJvai9wcm9qXzYuMi4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLW5hdmlnYXRpb24vcHJvai9wcm9qXzYuMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjY5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtbmF2aWdhdGlvbi9wcm9qL3Byb2pfNi4yLjAuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJQUk9KLjQgLSBDYXJ0b2dyYXBoaWMgUHJvamVjdGlvbnMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly90cmFjLm9zZ2VvLm9yZy9wcm9qLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NGQ5YWFlYzVmYTBjZDczNDM0MWU4YzRkYzkxYjYwOCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3NnZW8ub3JnLyR7QlBOfS8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNWNkZTU1NjU0NTgyOGJlYWZmYmU1MGIxYmIwMzg0ODAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjMwMGMwZjg3MmY2MzJhZDdmOGViNjA3MjVlZGJmMTRmMGY4ZjUyZGI3NDBhM2FiMjNlN2I5NGYxY2QyMmE1MCIKKworREVQRU5EUyA9ICJzcWxpdGUzIHNxbGl0ZTMtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgbGliX3BhY2thZ2UKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vcHJvaiIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1wcmludGluZy9jdXBzL2N1cHMtZmlsdGVycy5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtcHJpbnRpbmcvY3Vwcy9jdXBzLWZpbHRlcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YmRhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtcHJpbnRpbmcvY3Vwcy9jdXBzLWZpbHRlcnMuaW5jCkBAIC0wLDAgKzEsOTUgQEAKK0RFU0NSSVBUSU9OID0gIkNVUFMgYmFja2VuZHMsIGZpbHRlcnMsIGFuZCBvdGhlciBzb2Z0d2FyZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL29wZW5wcmludGluZy9jdXBzLWZpbHRlcnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIgJiBNSVQgJiBHUEx2MisgJiBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTUxNjIxNWZkNTc1NjQ5OTZkNzAzMjdkYjE5YjM2OGZmIgorCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0RFUEVORFMgPSAiY3VwcyBnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZGJ1cyBkYnVzLWdsaWIgbGNtcyBnaG9zdHNjcmlwdCBwb3BwbGVyIHFwZGYgbGlicG5nIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAicG9wcGxlci1uYXRpdmUgZ2xpYi0yLjAtbmF0aXZlIGRidXMtbmF0aXZlIHBrZ2NvbmZpZy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUgbGlicG5nLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vb3BlbnByaW50aW5nLm9yZy9kb3dubG9hZC9jdXBzLWZpbHRlcnMvY3Vwcy1maWx0ZXJzLSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiIC0tZW5hYmxlLWdob3N0c2NyaXB0IC0tZGlzYWJsZS1sZGFwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLXBkZnRvcHM9aHlicmlkIC0tZW5hYmxlLWltYWdlZmlsdGVycyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWdob3N0c2NyaXB0IC0td2l0aC1ncy1wYXRoPSR7YmluZGlyfS9ncyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1wZGZ0b3BzLXBhdGg9JHtiaW5kaXJ9L2dzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWZvbnRkaXI9JHtkYXRhZGlyfS9mb250cyAtLXdpdGgtcmNkaXI9bm8gXAorICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtY3Vwcy1ydW5kaXI9JHtsb2NhbHN0YXRlZGlyfS9ydW4vY3VwcyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbG9jYWxzdGF0ZWRpcj0ke2xvY2Fsc3RhdGVkaXJ9L3ZhciBcCisgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1yY2Rpcj1ubyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1waHAiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgKz0gIiAtLXdpdGgtcGRmdG9wcz1wZGZ0b3BzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1hdmFoaSAtLWRpc2FibGUtZ2hvc3RzY3JpcHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxkYXAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLXBuZyAtLXdpdGhvdXQtanBlZyAtLXdpdGhvdXQtdGlmZiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS13aXRoLWpwZWcsLS13aXRob3V0LWpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbcG5nXSA9ICItLXdpdGgtcG5nLC0td2l0aG91dC1wbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLXdpdGgtdGlmZiwtLXdpdGhvdXQtdGlmZix0aWZmIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd6ZXJvY29uZicsICdhdmFoaScsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0tZW5hYmxlLWF2YWhpLC0tZGlzYWJsZS1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbZGJ1c10gPSAiLS1lbmFibGUtZGJ1cywtLWRpc2FibGUtZGJ1cyxkYnVzIgorCitESVJGSUxFUyA9ICIxIgorCitQQUNLQUdFUyA9KyAiXAorCSR7UE59LWdzdCBcCisgICAgICAgICR7UE59LWRhdGEgXAorICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWdzdCA9ICJcCisJJHtsaWJkaXJ9L2N1cHMvZmlsdGVyL2dzdG9weGwgXAorCSR7bGliZGlyfS9jdXBzL2ZpbHRlci9nc3RvcmFzdGVyIFwKKwkiCisKK0ZJTEVTXyR7UE59LWRhdGEgPSAiXAorCSR7ZGF0YWRpcn0vY3Vwcy9kYXRhIFwKKwkiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorCSR7bGliZGlyfS9jdXBzL2ZpbHRlci8uZGVidWcgXAorCSR7bGliZGlyfS9jdXBzL2JhY2tlbmQvLmRlYnVnIFwKKwkiCisKK0ZJTEVTXyR7UE59ICs9ICJcCisgICAgICAgICR7bGliZGlyfS9jdXBzL2ZpbHRlciBcCisgICAgICAgICR7bGliZGlyfS9jdXBzL2JhY2tlbmQgXAorICAgICAgICAke2xpYmRpcn0vY3Vwcy9kcml2ZXIgXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvY2hhcnNldHMgXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvZHJ2IFwKKyAgICAgICAgJHtkYXRhZGlyfS9jdXBzL21pbWUgXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvcHBkYyBcCisgICAgICAgICR7ZGF0YWRpcn0vcHBkL2N1cHNmaWx0ZXJzIFwKKyAgICAgICAgJHtkYXRhZGlyfS9jdXBzL2JyYWlsbGUgXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvYmFubmVycyBcCisgICAgICAgICR7ZGF0YWRpcn0vY3Vwcy9icmFpbGxlL2luZGV4LnNoIFwKKyAgICAgICAgJHtkYXRhZGlyfS9jdXBzL2JyYWlsbGUvY3Vwcy1icmFpbGxlLnNoIFwKKyAgICAgICAgJHtkYXRhZGlyfS9jdXBzL2JyYWlsbGUvaW5kZXh2My5zaCBcCisgICAgICAgICR7ZGF0YWRpcn0vY3Vwcy9icmFpbGxlL2luZGV4djQuc2ggXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvYmFubmVycy90b3BzZWNyZXQgXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvYmFubmVycy9zZWNyZXQgXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvYmFubmVycy9jb25maWRlbnRpYWwgXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvYmFubmVycy91bmNsYXNzaWZpZWQgXAorICAgICAgICAke2RhdGFkaXJ9L2N1cHMvYmFubmVycy9mb3JtIFwKKyAgICAgICAgJHtkYXRhZGlyfS9jdXBzL2Jhbm5lcnMvY2xhc3NpZmllZCBcCisgICAgICAgICR7ZGF0YWRpcn0vY3Vwcy9iYW5uZXJzL3N0YW5kYXJkIFwKKyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyByZW1vdmUgYmFubmVycywgYnJhaWxsZSBkaXJzCisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2N1cHMve2Jhbm5lcnMsYnJhaWxsZX0KKworCSMgcmVtb3ZlIHN5c3Jvb3QgcGF0aCBjb250YW1pbmF0aW9uIGZyb20gcGtnY29uZmlnIGZpbGUKKwlzZWQgLWkgLWUgJ3M6JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjonICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJjdXBzZmlsdGVycy5wYworfQorCitSREVQRU5EU18ke1BOfSArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1wcmludGluZy9jdXBzL2N1cHMtZmlsdGVyc18xLjI2LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtcHJpbnRpbmcvY3Vwcy9jdXBzLWZpbHRlcnNfMS4yNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOTYwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtcHJpbnRpbmcvY3Vwcy9jdXBzLWZpbHRlcnNfMS4yNi4wLmJiCkBAIC0wLDAgKzEsNCBAQAoraW5jbHVkZSBjdXBzLWZpbHRlcnMuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZmIyNzhjNzdiYjE5NWMyYTMyZmM2NGU1YzgzNzhmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjg2NzlmY2QwYzMxYzI1ZDIyOTI2MmM3YWQxMDBiYTE2MWVmNmIyYWE0NTVhMmRmNjczZGQ3NGVmOTNmNDg4IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXByaW50aW5nL3FwZGYvcXBkZl85LjEuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1wcmludGluZy9xcGRmL3FwZGZfOS4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhNWZlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1wcmludGluZy9xcGRmL3FwZGZfOS4xLjAuYmIKQEAgLTAsMCArMSwzMyBAQAorREVTQ1JJUFRJT04gPSAiUERGIHRyYW5zZm9ybWF0aW9uL2luc3BlY3Rpb24gc29mdHdhcmUiCitIT01FUEFHRSA9ICJodHRwOi8vcXBkZi5zb3VyY2Vmb3JnZS5uZXQiCitMSUNFTlNFID0gIkFydGlzdGljLTIuMCIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibGlicGNyZSB6bGliIGxpYmpwZWctdHVyYm8iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3FwZGYvcXBkZi0ke1BWfS50YXIuZ3oiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0FydGlzdGljLTIuMDttZDU9NzgwNjI5NmI5ZmFlODc0MzYxZTZmYjEwMDcyYjdlZTMiCitTUkNfVVJJW21kNXN1bV0gPSAiMDkwZDAzYWIxNzljMjgxMjMzZjgyNDBhZGUxNzlkNTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2FiYmJiNzkwN2YyZTc1MDMzNmI5Yzk3ZTY3YjZlODA2YWNhOTFhYjUzNzQwMmVjMDgwNjU2ZDYzOTQwZWQ3OSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQKKworIyBkaXNhYmxlIHJhbmRvbSBmaWxlIGRldGVjdGlvbiBmb3IgY3Jvc3MtY29tcGlsZQorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1yYW5kb20gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zdGF0aWMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jaGVjay1hdXRvZmlsZXMgXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJMSUJUT09MPSR7SE9TVF9TWVN9LWxpYnRvb2wiCisKK1M9IiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9IgorCisjIGF2b2lkIE1ha2VmaWxlIHJldHVybmluZyBlcnJvciBvbiAnbWFrZSBjbGVhbicgYmVmb3JlIGNvbmZpZ3VyZSB3YXMgcnVuCitDTEVBTkJST0tFTiA9ICIxIgorCitERUJJQU5fTk9BVVRPTkFNRV9saWJxcGRmID0gIjEiCisKK1BBQ0tBR0VTID0rICJsaWJxcGRmIgorRklMRVNfbGlicXBkZiA9ICIke2xpYmRpcn0vbGlicXBkZi5zby4qIgorCitSREVQRU5EXyR7UE59ID0gImxpYnFwZGYiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9hdnJvL2F2cm8tYy8wMDAxLUFsbG93LWF2cm8tQy10by1iZS1idWlsdC1vbi1tdXNsLWJhc2VkLXN5c3RlbXMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9hdnJvL2F2cm8tYy8wMDAxLUFsbG93LWF2cm8tQy10by1iZS1idWlsdC1vbi1tdXNsLWJhc2VkLXN5c3RlbXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2NGQ2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2F2cm8vYXZyby1jLzAwMDEtQWxsb3ctYXZyby1DLXRvLWJlLWJ1aWx0LW9uLW11c2wtYmFzZWQtc3lzdGVtcy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDliMzlhOTg1YmNkNmNkMzRmMDgyMGYzNjgwZjE0NWQ0NmMwZTU2YmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaXRvdWFuIENocmlzdG9waGUgPHRpdG91YW4uY2hyaXN0b3BoZUByYWlsbm92YS5ldT4KK0RhdGU6IFN1biwgOCBEZWMgMjAxOSAwMTo1NTo1OSArMDEwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyBhdnJvIEMgdG8gYmUgYnVpbHQgb24gbXVzbCBiYXNlZCBzeXN0ZW1zLgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGUgdHlwZSBgc3NpemVfdGAgaXMgZGVmaW5lZCBpbiBzeXMvdHlwZXMuaCwgYW5kIG5vd2hlcmUgZWxzZQoraW4gdGhlIG11c2wgc3RhbmRhcmQgQyBsaWJyYXJ5LCBzbyBpdCBzaG91bGQgYmUgaW5jbHVkZWQgZm9yIHRoZQorY29tcGlsYXRpb24gdG8gc3VjY2VlZC4KKworVGhpcyBmaXhlcyBzZXZlcmFsIGVycm9ycyBsaWtlOgorCisgICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHNyYy9nZW5lcmljLmM6Mjk6MDoKKyAgICBzcmMvZ2VuZXJpYy5jOiBJbiBmdW5jdGlvbiDigJhhdnJvX2dlbmVyaWNfdmFsdWVfbmV34oCZOgorICAgIHNyYy9hdnJvX2dlbmVyaWNfaW50ZXJuYWwuaDo2MzozOToKKyAgICAgICAgZXJyb3I6IOKAmHNzaXplX3TigJkgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pOworICAgICAgICAgICAgICAgZGlkIHlvdSBtZWFuIOKAmHNpemVfdOKAmT8KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogVGl0b3VhbiBDaHJpc3RvcGhlIDx0aXRvdWFuLmNocmlzdG9waGVAcmFpbG5vdmEuZXU+CistLS0KKyBsYW5nL2Mvc3JjL2F2cm9fZ2VuZXJpY19pbnRlcm5hbC5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xhbmcvYy9zcmMvYXZyb19nZW5lcmljX2ludGVybmFsLmggYi9sYW5nL2Mvc3JjL2F2cm9fZ2VuZXJpY19pbnRlcm5hbC5oCitpbmRleCA3MDk0MDNjMDMuLjk4NDNlZDY1MiAxMDA2NDQKKy0tLSBhL2xhbmcvYy9zcmMvYXZyb19nZW5lcmljX2ludGVybmFsLmgKKysrKyBiL2xhbmcvYy9zcmMvYXZyb19nZW5lcmljX2ludGVybmFsLmgKK0BAIC0yNCw2ICsyNCw4IEBAIGV4dGVybiAiQyIgeworICNkZWZpbmUgQ0xPU0VfRVhURVJOCisgI2VuZGlmCisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworICNpbmNsdWRlICJhdnJvL2dlbmVyaWMuaCIKKyAjaW5jbHVkZSAiYXZyby9zY2hlbWEuaCIKKyAjaW5jbHVkZSAiYXZyby92YWx1ZS5oIgorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvYXZyby9hdnJvLWMvMDAwMS1hdnJvLWMtRml4LWJ1aWxkLXdpdGgtY2xhbmctY29tcGlsZXIucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9hdnJvL2F2cm8tYy8wMDAxLWF2cm8tYy1GaXgtYnVpbGQtd2l0aC1jbGFuZy1jb21waWxlci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEyMzVkOC4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9hdnJvL2F2cm8tYy8wMDAxLWF2cm8tYy1GaXgtYnVpbGQtd2l0aC1jbGFuZy1jb21waWxlci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLUZyb20gNTE4YmI4Y2NmYjNmM2ZjMTQzZmJkNTcxNzgyZjNlNDA1NzNkMDFiNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1EYXRlOiBNb24sIDEwIEFwciAyMDE3IDA5OjE1OjA0IC0wNzAwCi1TdWJqZWN0OiBbUEFUQ0hdIGF2cm8tYzogRml4IGJ1aWxkIHdpdGggY2xhbmcgY29tcGlsZXIKLQotQ2xhbmcgYWR2ZXJ0aXplcyBpdHNlbGYgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGdjYyA0LjIuMQotd2hpbGUgdGhhdCB3YXMgdHJ1ZSBzZXZlcmFsIHllYXJzIGFnbywgaXQgbm93IHN1cHBvcnRzCi1hIGxvdCBtb3JlIG5ld2VyIGZlYXR1cmVzLCB0aGUgdGVzdCB0byBqdXN0IGNoZWNrIGdjYwotdmVyc2lvbiBzaG91bGQgYmUgc3VwcGxhbnRlZCB3aXRoIGNsYW5nIGNoZWNrIGFzIHdlbGwKLXNvIGF0b21pYyBzdXBwb3J0IGluIGNsYW5nIGNhbiBiZSBhc3NlcnRlZCBhcyB3ZWxsCi0KLUZpeGVzCi0KLWxhbmcvYy9zcmMvYXZyby9yZWZjb3VudC5oOjMwMToyOiBlcnJvcjogIk5vIGF0b21pYyBpbXBsZW1lbnRhdGlvbiEiCi0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSBsYW5nL2Mvc3JjL2F2cm8vcmVmY291bnQuaCB8IDMgKystCi0gMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvbGFuZy9jL3NyYy9hdnJvL3JlZmNvdW50LmggYi9sYW5nL2Mvc3JjL2F2cm8vcmVmY291bnQuaAotaW5kZXggNjlhZmE0ZmMuLmQ3NmJhMDU3IDEwMDY0NAotLS0tIGEvbGFuZy9jL3NyYy9hdnJvL3JlZmNvdW50LmgKLSsrKyBiL2xhbmcvYy9zcmMvYXZyby9yZWZjb3VudC5oCi1AQCAtMTE4LDcgKzExOCw4IEBAIGF2cm9fcmVmY291bnRfZGVjKHZvbGF0aWxlIGludCAqcmVmY291bnQpCi0gICogR0NDIGludHJpbnNpY3MKLSAgKi8KLSAKLS0jZWxpZiAoX19HTlVDX18gKiAxMDAwMCArIF9fR05VQ19NSU5PUl9fICogMTAwICsgX19HTlVDX1BBVENITEVWRUxfXykgPiA0MDUwMAotKyNlbGlmIChfX0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKSA+IDQwNTAwIFwKLSt8fCBkZWZpbmVkKF9fY2xhbmdfXykKLSAKLSBzdGF0aWMgaW5saW5lIHZvaWQKLSBhdnJvX3JlZmNvdW50X3NldCh2b2xhdGlsZSBpbnQgKnJlZmNvdW50LCBpbnQgdmFsdWUpCi0tLSAKLTIuMTIuMgotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9hdnJvL2F2cm8tYy8wMDAxLWNtYWtlLVVzZS1HTlVJbnN0YWxsRGlycy1pbnN0ZWFkLW9mLWhhcmQtY29kZWQtcGF0aHMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9hdnJvL2F2cm8tYy8wMDAxLWNtYWtlLVVzZS1HTlVJbnN0YWxsRGlycy1pbnN0ZWFkLW9mLWhhcmQtY29kZWQtcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5NmI5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2F2cm8vYXZyby1jLzAwMDEtY21ha2UtVXNlLUdOVUluc3RhbGxEaXJzLWluc3RlYWQtb2YtaGFyZC1jb2RlZC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIGYyNGY4NjNmM2E4Y2E4NmY0NDEyM2E1ODYxM2Y2MmMzYjUxMWRhMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBEZWMgMjAxOSAxODoyMzo0MSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjbWFrZTogVXNlIEdOVUluc3RhbGxEaXJzIGluc3RlYWQgb2YgaGFyZC1jb2RlZCBwYXRocworCitUaGlzIGVuc3VyZXMgdGhhdCBpdCBjYW4gYmUgYnVpbHQgb24gcGxhdGZvcm1zIHdoZXJlIGxpYmRpciBpcyBub3QKKy91c3IvbGliIGUuZy4gcHBjNjQKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvYXZyby9wdWxsLzc0OV0KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsYW5nL2MvQ01ha2VMaXN0cy50eHQgICAgIHwgIDIgKy0KKyBsYW5nL2Mvc3JjL0NNYWtlTGlzdHMudHh0IHwgMTYgKysrKysrKysrLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xhbmcvYy9DTWFrZUxpc3RzLnR4dCBiL2xhbmcvYy9DTWFrZUxpc3RzLnR4dAoraW5kZXggMTFjYmYwMThlLi42YzhkN2FhZjMgMTAwNjQ0CistLS0gYS9sYW5nL2MvQ01ha2VMaXN0cy50eHQKKysrKyBiL2xhbmcvYy9DTWFrZUxpc3RzLnR4dAorQEAgLTE2LDcgKzE2LDcgQEAKKyAjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAjIHVuZGVyIHRoZSBMaWNlbnNlLgorICMKKy1jbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi40KQorK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEpCisgcHJvamVjdChBdnJvQykKKyBlbmFibGVfdGVzdGluZygpCisgCitkaWZmIC0tZ2l0IGEvbGFuZy9jL3NyYy9DTWFrZUxpc3RzLnR4dCBiL2xhbmcvYy9zcmMvQ01ha2VMaXN0cy50eHQKK2luZGV4IDZmNTY1OTc1MC4uYzE3NjFjOGRlIDEwMDY0NAorLS0tIGEvbGFuZy9jL3NyYy9DTWFrZUxpc3RzLnR4dAorKysrIGIvbGFuZy9jL3NyYy9DTWFrZUxpc3RzLnR4dAorQEAgLTEwNiwxNyArMTA2LDE5IEBAIGluc3RhbGwoRElSRUNUT1JZCisgICAgICAgICBERVNUSU5BVElPTiBpbmNsdWRlCisgICAgICAgICBGSUxFU19NQVRDSElORyBQQVRURVJOICIqLmgiKQorIAorK2luY2x1ZGUoR05VSW5zdGFsbERpcnMpCisrCisgaWYgKFdJTjMyKQorIGluc3RhbGwoVEFSR0VUUyBhdnJvLXN0YXRpYworLSAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4KKy0gICAgICAgIExJQlJBUlkgREVTVElOQVRJT04gbGliCistICAgICAgICBBUkNISVZFIERFU1RJTkFUSU9OIGxpYgorKwlSVU5USU1FIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9CisrICAgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisrICAgICAgICBBUkNISVZFIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisgICAgICAgICkKKyBlbHNlKFdJTjMyKQorIGluc3RhbGwoVEFSR0VUUyBhdnJvLXN0YXRpYyBhdnJvLXNoYXJlZAorLSAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4KKy0gICAgICAgIExJQlJBUlkgREVTVElOQVRJT04gbGliCistICAgICAgICBBUkNISVZFIERFU1RJTkFUSU9OIGxpYgorKwlSVU5USU1FIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9CSU5ESVJ9CisrCUxJQlJBUlkgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0KKysgICAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0KKyAgICAgICAgKQorIGVuZGlmKFdJTjMyKQorIAorQEAgLTEyNiw3ICsxMjgsNyBAQCBzZXQocHJlZml4ICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9KQorIHNldChWRVJTSU9OICR7QVZST19WRVJTSU9OfSkKKyBjb25maWd1cmVfZmlsZShhdnJvLWMucGMuaW4gYXZyby1jLnBjKQorIGluc3RhbGwoRklMRVMgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2F2cm8tYy5wYworLSAgICAgICAgREVTVElOQVRJT04gbGliL3BrZ2NvbmZpZykKKysgICAgICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9L3BrZ2NvbmZpZykKKyAKKyBhZGRfZXhlY3V0YWJsZShhdnJvY2F0IGF2cm9jYXQuYykKKyB0YXJnZXRfbGlua19saWJyYXJpZXMoYXZyb2NhdCBhdnJvLXN0YXRpYykKKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2F2cm8vYXZyby1jXzEuOC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvYXZyby9hdnJvLWNfMS44LjEuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NmZlMmIuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvYXZyby9hdnJvLWNfMS44LjEuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1TVU1NQVJZID0gIkFwYWNoZSBBdnJvIGRhdGEgc2VyaWFsaXphdGlvbiBzeXN0ZW0uIgotSE9NRVBBR0UgPSAiaHR0cDovL2Fwci5hcGFjaGUub3JnLyIKLVNFQ1RJT04gPSAibGlicyIKLQotTElDRU5TRSA9ICJBcGFjaGUtMi4wIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzNiZGY3MGYyNjhmMGIzYjljNWE4M2RkN2E2ZjMzMjQiCi0KLURFUEVORFMgPSAiamFuc3NvbiB6bGliIHh6IgotUFYgLj0gIitnaXQke1NSQ1BWfSIKLQotU1JDUkVWID0gIjRiMzY3N2MzMmI4NzllMGU3ZjcxN2ViOTVmOTEzNWFjNjU0ZGE3NjAiCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vYXBhY2hlL2F2cm8gXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1hdnJvLWMtRml4LWJ1aWxkLXdpdGgtY2xhbmctY29tcGlsZXIucGF0Y2g7cGF0Y2hkaXI9Li4vLi4vIFwKLSIKLQotUyA9ICIke1dPUktESVJ9L2dpdC9sYW5nL2MiCi0KLUxERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtbG0iCi0KLWluaGVyaXQgY21ha2UKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2F2cm8vYXZyby1jXzEuOS4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvYXZyby9hdnJvLWNfMS45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1NGM5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2F2cm8vYXZyby1jXzEuOS4xLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQXBhY2hlIEF2cm8gZGF0YSBzZXJpYWxpemF0aW9uIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vYXByLmFwYWNoZS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02ZDUwMmI0MWY3NjE3OWZjODRlNTM2MjM2ZjM1OWNhZSIKKworREVQRU5EUyA9ICJqYW5zc29uIHpsaWIgeHoiCisKK0JSQU5DSCA9ICJicmFuY2gtMS45IgorU1JDUkVWID0gIjg5MjE4MjYyY2RlNjJlOThmY2IzNzc4Yjg2Y2QzZjAzMDU2YzU0ZjMiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vYXBhY2hlL2F2cm87YnJhbmNoPSR7QlJBTkNIfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFsbG93LWF2cm8tQy10by1iZS1idWlsdC1vbi1tdXNsLWJhc2VkLXN5c3RlbXMucGF0Y2g7cGF0Y2hkaXI9Li4vLi4vIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY21ha2UtVXNlLUdOVUluc3RhbGxEaXJzLWluc3RlYWQtb2YtaGFyZC1jb2RlZC1wYXRocy5wYXRjaDtwYXRjaGRpcj0uLi8uLi8gXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdC9sYW5nL2MiCisKK2luaGVyaXQgY21ha2UKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzguMC40LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfOC4wLjQuYmIKaW5kZXggOTA1Zjk1My4uZjRlYTE3MyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfOC4wLjQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfOC4wLjQuYmIKQEAgLTIxLDExICsyMSwxMCBAQAogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUuUVVJQ0s7bWQ1PTgxYjQ0N2Q3NzllMjc4NjI4Yzg0M2FlZjkyZjA4OGZhIgogCi1TUkNSRVYgPSAiZDNkZWRlM2NlNDQ2MmNkODJhMTVmMTYxYWY3OTdjYTUxNjU0NTQ2YSIKLVNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9pdm1haS9iZHdnYy5naXQ7YnJhbmNoPXJlbGVhc2UtOF8wIFwKLSAgICAgICAgICAiCitERVBFTkRTID0gImxpYmF0b21pYy1vcHMiCiAKLUZJTEVTXyR7UE59LWRvYyA9ICIke2RhdGFkaXJ9IgorU1JDUkVWID0gImQzZGVkZTNjZTQ0NjJjZDgyYTE1ZjE2MWFmNzk3Y2E1MTY1NDU0NmEiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vaXZtYWkvYmR3Z2MuZ2l0O2JyYW5jaD1yZWxlYXNlLThfMCIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKIApAQCAtMzMsMTIgKzMyLDEwIEBACiAKIGluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwogCi0jIGJ5IGRlZmF1bHQgdXNlIGV4dGVybmFsIGxpYmF0b21pYy1vcHMKLVBBQ0tBR0VDT05GSUcgPz89ICJsaWJhdG9taWMtb3BzIgotUEFDS0FHRUNPTkZJR1tsaWJhdG9taWMtb3BzXSA9ICItLXdpdGgtbGliYXRvbWljLW9wcz15ZXMsLS13aXRoLWxpYmF0b21pYy1vcHM9bm8sbGliYXRvbWljLW9wcyIKLQogRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1jcGx1c2NwbHVzIgogCiBDRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLURfR05VX1NPVVJDRSAtRE5PX0dFVENPTlRFWFQgLURTRUFSQ0hfRk9SX0RBVEFfU1RBUlQgLURVU0VfTU1BUCAtREhBVkVfRExfSVRFUkFURV9QSERSIgogCitGSUxFU18ke1BOfS1kb2MgPSAiJHtkYXRhZGlyfSIKKwogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvY2xpMTEvY2xpMTFfMS44LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9jbGkxMS9jbGkxMV8xLjguMC5iYgppbmRleCA0MDQ1NDVkLi5kZDEyOWNiIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9jbGkxMS9jbGkxMV8xLjguMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9jbGkxMS9jbGkxMV8xLjguMC5iYgpAQCAtOCw2ICs4LDcgQEAKIAogU1JDX1VSSSArPSAiZ2l0c206Ly9naXRodWIuY29tL0NMSVV0aWxzL0NMSTExIFwKICAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1DTEFOR19USURZLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1HTlVJbnN0YWxsRGlycy1pbnN0ZWFkLW9mLWhhcmQtY29kZWQtcGF0aC5wYXRjaCBcCiAgICAgICAgICAgICIKIAogUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2NsaTExL2ZpbGVzLzAwMDEtVXNlLUdOVUluc3RhbGxEaXJzLWluc3RlYWQtb2YtaGFyZC1jb2RlZC1wYXRoLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvY2xpMTEvZmlsZXMvMDAwMS1Vc2UtR05VSW5zdGFsbERpcnMtaW5zdGVhZC1vZi1oYXJkLWNvZGVkLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0MWNkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2NsaTExL2ZpbGVzLzAwMDEtVXNlLUdOVUluc3RhbGxEaXJzLWluc3RlYWQtb2YtaGFyZC1jb2RlZC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gOGM1MTIyMWY3NDhiY2ExNDgzZmUxMTQxZTU4NDg2N2QyZmYzNGEwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IERlYyAyMDE5IDE2OjI2OjM5IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSBHTlVJbnN0YWxsRGlycyBpbnN0ZWFkIG9mIGhhcmQtY29kZWQgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL0NMSVV0aWxzL0NMSTExL3B1bGwvMzczXQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIENNYWtlTGlzdHMudHh0IHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CitpbmRleCA3MDczYTBiLi41MjM2ZmQyIDEwMDY0NAorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtMTIwLDE3ICsxMjAsMTggQEAgZW5kaWYoKQorIGNvbmZpZ3VyZV9maWxlKCIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY21ha2UvQ0xJMTFDb25maWdWZXJzaW9uLmNtYWtlLmluIgorICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9DTEkxMUNvbmZpZ1ZlcnNpb24uY21ha2UiIEBPTkxZKQorIAorK2luY2x1ZGUoR05VSW5zdGFsbERpcnMpCisgIyBUaGVzZSBpbnN0YWxscyBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGEgbG9jYWwgcHJvamVjdAorIGlmKENVUl9QUk9KKQorICAgICAjIE1ha2UgdmVyc2lvbiBhdmFpbGFibGUgaW4gdGhlIGluc3RhbGwKKyAgICAgaW5zdGFsbChGSUxFUyAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NMSTExQ29uZmlnVmVyc2lvbi5jbWFrZSIKKy0gICAgICAgICAgICBERVNUSU5BVElPTiBsaWIvY21ha2UvQ0xJMTEpCisrICAgICAgICAgICAgREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vY21ha2UvQ0xJMTEpCisgCisgICAgICMgSW5zdGFsbCB0aGUgZXhwb3J0IHRhcmdldCBhcyBhIGZpbGUKKyAgICAgaW5zdGFsbChFWFBPUlQgQ0xJMTFUYXJnZXRzCisgICAgICAgICAgICAgRklMRSBDTEkxMUNvbmZpZy5jbWFrZQorICAgICAgICAgICAgIE5BTUVTUEFDRSBDTEkxMTo6CistICAgICAgICAgICAgREVTVElOQVRJT04gbGliL2NtYWtlL0NMSTExKQorKyAgICAgICAgICAgIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9L2NtYWtlL0NMSTExKQorIAorICAgICAjIFVzZSBmaW5kX3BhY2thZ2Ugb24gdGhlIGluc3RhbGxlZCBwYWNrYWdlCisgICAgIGV4cG9ydChUQVJHRVRTIENMSTExCistLSAKKzIuMjQuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9jcHByZXN0L2NwcHJlc3RfMi4xMC4xNC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2NwcHJlc3QvY3BwcmVzdF8yLjEwLjE0LmJiCmluZGV4IDUzZjY0NjkuLjExYzhlYWIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2NwcHJlc3QvY3BwcmVzdF8yLjEwLjE0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2NwcHJlc3QvY3BwcmVzdF8yLjEwLjE0LmJiCkBAIC01LDcgKzUsNyBAQAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtTfS9saWNlbnNlLnR4dDttZDU9YTJlMTViOTU0NzY5MjE4ZmY5MTI0NjhlZWNkNmEwMmYiCiBERVBFTkRTID0gIm9wZW5zc2wgd2Vic29ja2V0cHAgemxpYiBib29zdCBicm90bGkiCiAKLUVYVFJBX09FQ01BS0UgPSAiLURDUFBSRVNUX0VYUE9SVF9ESVI9Y21ha2UgLURDUFBSRVNUX0VYQ0xVREVfQlJPVExJPU9GRiAtRFdFUlJPUj1PRkYiCitFWFRSQV9PRUNNQUtFID0gIi1EQ1BQUkVTVF9FWFBPUlRfRElSPWNtYWtlL2NwcHJlc3RzZGsgLURDUFBSRVNUX0VYQ0xVREVfQlJPVExJPU9GRiAtRFdFUlJPUj1PRkYiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvY3BwcmVzdHNkay5naXQ7cHJvdG9jb2w9aHR0cHM7YnJhbmNoPW1hc3RlciBcCiAgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWZsb2F0LXRlc3RzLnBhdGNoIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2RmdS11dGlsL2RmdS11dGlsLW5hdGl2ZV8wLjkuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9kZnUtdXRpbC9kZnUtdXRpbC1uYXRpdmVfMC45LmJiCmluZGV4IDc2ZmFlZmUuLmZlYjE2ZmEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2RmdS11dGlsL2RmdS11dGlsLW5hdGl2ZV8wLjkuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvZGZ1LXV0aWwvZGZ1LXV0aWwtbmF0aXZlXzAuOS5iYgpAQCAtOCw3ICs4LDYgQEAKIAogUEFDS0FHRUNPTkZJR1tzdGF0aWNdID0gIkNGTEFHUz0nJHtDRkxBR1N9IC1wdGhyZWFkIC1zdGF0aWMnLCwiCiAKLWRvX2RlcGxveVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX1RPT0xTfSIKIGRvX2RlcGxveSgpIHsKICAgICBpbnN0YWxsIC1tIDA3NTUgc3JjL2RmdS11dGlsICR7REVQTE9ZRElSfS9kZnUtdXRpbC0ke1BWfQogICAgIHJtIC1mICR7REVQTE9ZRElSfS9kZnUtdXRpbApAQCAtMTYsMyArMTUsMTEgQEAKIH0KIAogYWRkdGFzayBkZXBsb3kgYmVmb3JlIGRvX3BhY2thZ2UgYWZ0ZXIgZG9faW5zdGFsbAorCitkb19kZXBsb3lbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9UT09MU30iCisjIGNsZWFuZGlycyBzaG91bGQgcG9zc2libHkgYmUgaW4gZGVwbG95LmJiY2xhc3MgYnV0IHdlIG5lZWQgaXQKK2RvX2RlcGxveVtjbGVhbmRpcnNdID0gIiR7REVQTE9ZRElSfSIKKyMgY2xlYXIgc3RhbXAtZXh0cmEtaW5mbyBzaW5jZSBNQUNISU5FX0FSQ0ggaXMgbm9ybWFsbHkgcHV0IHRoZXJlIGJ5CisjIGRlcGxveS5iYmNsYXNzCitkb19kZXBsb3lbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnQyXzIuMi4zLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvZW5jaGFudC9lbmNoYW50Ml8yLjIuMy5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxNTBjOC4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnQyXzIuMi4zLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotU1VNTUFSWSA9ICJFbmNoYW50IFNwZWxsIGNoZWNrZXIgQVBJIExpYnJhcnkgdjIiCi1TRUNUSU9OID0gImxpYnMiCi1IT01FUEFHRSA9ICJodHRwczovL2FiaXdvcmQuZ2l0aHViLmlvL2VuY2hhbnQvIgotTElDRU5TRSA9ICJMR1BMdjIuMSsiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzciCi0KLURFUEVORFMgPSAiZ2xpYi0yLjAiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1TUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9BYmlXb3JkL2VuY2hhbnQvcmVsZWFzZXMvZG93bmxvYWQvdiR7UFZ9L2VuY2hhbnQtJHtQVn0udGFyLmd6IgotU1JDX1VSSVttZDVzdW1dID0gIjRiOGFiYjU4ZTAwZTkzMzYzNTkxYjNmNWVhNGY1MmQ1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImFiZDhlOTE1Njc1Y2ZmNTRjMGQ0ZGE1MDI5ZDk1YzUyODM2MjI2NjU1N2M2MWM3MTQ5ZDUzZmEwNjliODA3NmQiCi0KLVMgPSAiJHtXT1JLRElSfS9lbmNoYW50LSR7UFZ9IgotCi1FWFRSQV9PRU1BS0UgPSAicGtnZGF0YWRpcj0ke2RhdGFkaXJ9L2VuY2hhbnQtMiIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gImh1bnNwZWxsIgotUEFDS0FHRUNPTkZJR1thc3BlbGxdICA9ICItLXdpdGgtYXNwZWxsLC0td2l0aG91dC1hc3BlbGwsYXNwZWxsLGFzcGVsbCIKLVBBQ0tBR0VDT05GSUdbaHVuc3BlbGxdICA9ICItLXdpdGgtaHVuc3BlbGwsLS13aXRob3V0LWh1bnNwZWxsLGh1bnNwZWxsLGh1bnNwZWxsIgotCi1GSUxFU18ke1BOfSArPSAiIFwKLSAgICAke2RhdGFkaXJ9L2VuY2hhbnQtMiBcCi0gICAgJHtsaWJkaXJ9L2VuY2hhbnQtMiBcCi0iCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9mbHRrL2ZsdGsuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9mbHRrL2ZsdGsuYmIKaW5kZXggN2FkNGFjNy4uMGQwMzNmMyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvZmx0ay9mbHRrLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2ZsdGsvZmx0ay5iYgpAQCAtNSw3ICs1LDEwIEBACiBpbmhlcml0IGZlYXR1cmVzX2NoZWNrIGJpbmNvbmZpZyBsaWJfcGFja2FnZSBndGstaWNvbi1jYWNoZSBtaW1lCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogCi1TUkNfVVJJICs9ICJmaWxlOi8vMDAwMy1DTWFrZS1idWlsZC1Gb3JjZS1zaGFyZWQtbGlicy13aXRoLXVuc3VmZml4ZWQtbmFtZXMucGF0Y2giCitTUkNfVVJJICs9ICIgXAorICAgIGZpbGU6Ly8wMDAzLUNNYWtlLWJ1aWxkLUZvcmNlLXNoYXJlZC1saWJzLXdpdGgtdW5zdWZmaXhlZC1uYW1lcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtRml4LWJ1aWxkLWVycm9yLXdoZW4tZW5hYmxlLXBhY2thZ2UtY29uZmlnLWV4YW1wbGVzLnBhdGNoIFwKKyIKIAogRVhUUkFfT0VDTUFLRSA9ICIgXAogICAgIC1ET1BUSU9OX0JVSUxEX1NIQVJFRF9MSUJTPU9OIFwKQEAgLTE3LDcgKzIwLDcgQEAKIAogUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsIGQpfSIKIAotUEFDS0FHRUNPTkZJR1tleGFtcGxlc10gPSAiLURPUFRJT05fQlVJTERfRVhBTVBMRVM9T04sLURPUFRJT05fQlVJTERfRVhBTVBMRVM9T0ZGLCIKK1BBQ0tBR0VDT05GSUdbZXhhbXBsZXNdID0gIi1ET1BUSU9OX0JVSUxEX0VYQU1QTEVTPU9OLC1ET1BUSU9OX0JVSUxEX0VYQU1QTEVTPU9GRixmbHRrLW5hdGl2ZSIKIFBBQ0tBR0VDT05GSUdbY2Fpcm9dID0gIi1ET1BUSU9OX0NBSVJPPU9OLC1ET1BUSU9OX0NBSVJPPU9GRixjYWlybyIKIFBBQ0tBR0VDT05GSUdbb3BlbmdsXSA9ICItRE9QVElPTl9VU0VfR0w9T04sLURPUFRJT05fVVNFX0dMPU9GRix2aXJ0dWFsL2xpYmdsIgogUEFDS0FHRUNPTkZJR1t4aW5lcmFtYV0gPSAiLURPUFRJT05fVVNFX1hJTkVSQU1BPU9OLC1ET1BUSU9OX1VTRV9YSU5FUkFNQT1PRkYsbGlieGluZXJhbWEiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9mbHRrL2ZsdGsvMDAwNC1GaXgtYnVpbGQtZXJyb3Itd2hlbi1lbmFibGUtcGFja2FnZS1jb25maWctZXhhbXBsZXMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9mbHRrL2ZsdGsvMDAwNC1GaXgtYnVpbGQtZXJyb3Itd2hlbi1lbmFibGUtcGFja2FnZS1jb25maWctZXhhbXBsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0YzAyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2ZsdGsvZmx0ay8wMDA0LUZpeC1idWlsZC1lcnJvci13aGVuLWVuYWJsZS1wYWNrYWdlLWNvbmZpZy1leGFtcGxlcy5wYXRjaApAQCAtMCwwICsxLDE4MiBAQAorRml4IGJ1aWxkIGVycm9yIHdoZW4gZW5hYmxlIHBhY2thZ2UgY29uZmlnIGV4YW1wbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2dpdGh1Yi5jb20vZmx0ay9mbHRrL2NvbW1pdC8xNjc3NGRkXQorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworCitGcm9tIDE2Nzc0ZGRjNGUwMDBjODllNTYwZmRlMGNlZDhiZTk4MTRlZjA0MWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGJyZWNodCBTY2hsb3NzZXIgPGFsYnJlY2h0cy5mbHRrQG9ubGluZS5kZT4KK0RhdGU6IFdlZCwgOCBGZWIgMjAxNyAwMjowNjo1MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBSZW5hbWUgdGVzdC9oZWxwIGRlbW8gcHJvZ3JhbSB0byB0ZXN0L2hlbHBfZGlhbG9nLgorCitUaGlzIGNoYW5nZSBhdm9pZHMgYSBuYW1lIGNvbmZsaWN0IHdpdGggQ01ha2UncyBhdXRvLWdlbmVyYXRlZCB0YXJnZXQgJ2hlbHAnCitmb3IgIlVuaXggTWFrZWZpbGVzIiwgIk5pbmphIiwgYW5kIHN1cHBvc2VkbHkgb3RoZXIgZ2VuZXJhdG9ycyBhcyB3ZWxsLgorCisKK2dpdC1zdm4taWQ6IGZpbGU6Ly8vZmx0ay9zdm4vZmx0ay9icmFuY2hlcy9icmFuY2gtMS40QDEyMTcxIGVhNDFlZDUyLWQyZWUtMDMxMC1hOWMxLWU2YjE4ZDMzZTEyMQorLS0tCisgQ01ha2UvbWFjcm9zLmNtYWtlICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSAtLS0tLQorIGRvY3VtZW50YXRpb24vc3JjL2V4YW1wbGVzLmRveCAgICAgICAgICAgIHwgIDggKysrLS0tLQorIHRlc3QvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgIHwgMjcgKysrKysrKysrKysrKysrKysrKy0tLS0KKyB0ZXN0L2RlbW8ubWVudSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC97aGVscC5jeHggPT4gaGVscF9kaWFsb2cuY3h4fSAgICAgICAgfCAgNiArKy0tLQorIHRlc3Qve2hlbHAtdGVzdC5odG1sID0+IGhlbHBfZGlhbG9nLmh0bWx9IHwgIDAKKyA2IGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQorIHJlbmFtZSB0ZXN0L3toZWxwLmN4eCA9PiBoZWxwX2RpYWxvZy5jeHh9ICg4OCUpCisgcmVuYW1lIHRlc3Qve2hlbHAtdGVzdC5odG1sID0+IGhlbHBfZGlhbG9nLmh0bWx9ICgxMDAlKQorCitkaWZmIC0tZ2l0IGEvQ01ha2UvbWFjcm9zLmNtYWtlIGIvQ01ha2UvbWFjcm9zLmNtYWtlCitpbmRleCA1YjBkMGZhLi43MTM0ZmNiIDEwMDY0NAorLS0tIGEvQ01ha2UvbWFjcm9zLmNtYWtlCisrKysgYi9DTWFrZS9tYWNyb3MuY21ha2UKK0BAIC05MCwxMSArOTAsNiBAQCBmdW5jdGlvbihDUkVBVEVfRVhBTVBMRSBOQU1FIFNPVVJDRVMgTElCUkFSSUVTKQorIAorICAgICBzZXQgKHRuYW1lICR7TkFNRX0pCQkjIHRhcmdldCBuYW1lCisgCistICAgICMgcmVuYW1lIHJlc2VydmVkIHRhcmdldCBuYW1lICJoZWxwIiAoQ01ha2UgMi44LjEyIGFuZCBsYXRlcikKKy0gICAgaWYgKCR7dG5hbWV9IE1BVENIRVMgIl5oZWxwJCIpCistICAgICAgICBzZXQgKHRuYW1lICJ0ZXN0X2hlbHAiKQorLSAgICBlbmRpZiAoJHt0bmFtZX0gTUFUQ0hFUyAiXmhlbHAkIikKKy0KKyAgICAgZm9yZWFjaChzcmMgJHtTT1VSQ0VTfSkKKyAgICAgICAgIGlmICgiJHtzcmN9IiBNQVRDSEVTICJcXC5mbCQiKQorICAgICAgICAgICAgIGxpc3QoQVBQRU5EIGZsc3JjcyAke3NyY30pCitkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9zcmMvZXhhbXBsZXMuZG94IGIvZG9jdW1lbnRhdGlvbi9zcmMvZXhhbXBsZXMuZG94CitpbmRleCA1MTA1YjdiLi43OTYxYjAyIDEwMDY0NAorLS0tIGEvZG9jdW1lbnRhdGlvbi9zcmMvZXhhbXBsZXMuZG94CisrKysgYi9kb2N1bWVudGF0aW9uL3NyYy9leGFtcGxlcy5kb3gKK0BAIC02MCw3ICs2MCw3IEBAIHlvdSBidWlsZCBGTFRLLCB1bmxpa2UgdGhvc2UgaW4gdGhlICd0ZXN0JyBkaXJlY3Rvcnkgc2hvd24gYmVsb3cuCisgPC90cj4KKyA8dHI+CisgPHRkPiBccmVmIGV4YW1wbGVzX2hlbGxvICAgICAgICAgICA8L3RkPgorLTx0ZD4gXHJlZiBleGFtcGxlc19oZWxwICAgICAgICAgICAgPC90ZD4KKys8dGQ+IFxyZWYgZXhhbXBsZXNfaGVscF9kaWFsb2cgICAgIDwvdGQ+CisgPHRkPiBccmVmIGV4YW1wbGVzX2ljb25pemUgICAgICAgICA8L3RkPgorIDx0ZD4gXHJlZiBleGFtcGxlc19pbWFnZSAgICAgICAgICAgPC90ZD4KKyA8dGQ+IFxyZWYgZXhhbXBsZXNfaW5hY3RpdmUgICAgICAgIDwvdGQ+CitAQCAtMzI2LDEzICszMjYsMTMgQEAgZWFzaWx5IHVuZGVyIEZMVEsuCisgdGlueSBkZW1vIHNob3dzIGhvdyBsaXR0bGUgaXMgbmVlZGVkIHRvIGdldCBhIGZ1bmN0aW9uaW5nIGFwcGxpY2F0aW9uCisgcnVubmluZyB3aXRoIEZMVEsuIFF1aXRlIGltcHJlc3NpdmUsIEknZCBzYXkuCisgCistXHN1YnNlY3Rpb24gZXhhbXBsZXNfaGVscCBoZWxwCisrXHN1YnNlY3Rpb24gZXhhbXBsZXNfaGVscF9kaWFsb2cgaGVscF9kaWFsb2cKKyAKKyBccGFyCistXGMgaGVscCBkaXNwbGF5cyB0aGUgYnVpbHQtaW4gRkxUSyBoZWxwIGJyb3dzZXIuIFRoZSAKKytcYyBoZWxwX2RpYWxvZyBkaXNwbGF5cyB0aGUgYnVpbHQtaW4gRkxUSyBoZWxwIGJyb3dzZXIuIFRoZQorIEZsX0hlbHBfRGlhbG9nIHVuZGVyc3RhbmRzIGEgc3Vic2V0IG9mIGh0bWwgYW5kIHJlbmRlcnMKKyB2YXJpb3VzIGltYWdlIGZvcm1hdHMuIFRoaXMgd2lkZ2V0IG1ha2VzIGl0IGVhc3kgdG8gcHJvdmlkZSBoZWxwCistcGFnZXMgdG8gdGhlIHVzZXIgd2l0aG91dCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyAKKytwYWdlcyB0byB0aGUgdXNlciB3aXRob3V0IGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzCisgaHRtbCBicm93c2VyLgorIAorIFxzdWJzZWN0aW9uIGV4YW1wbGVzX2ljb25pemUgaWNvbml6ZQorZGlmZiAtLWdpdCBhL3Rlc3QvQ01ha2VMaXN0cy50eHQgYi90ZXN0L0NNYWtlTGlzdHMudHh0CitpbmRleCAyMmVjOWFiLi40Y2FmZmE1IDEwMDY0NAorLS0tIGEvdGVzdC9DTWFrZUxpc3RzLnR4dAorKysrIGIvdGVzdC9DTWFrZUxpc3RzLnR4dAorQEAgLTEsMyArMSwyMiBAQAorKyMKKysjICIkSWQkIgorKyMKKysjIENNYWtlTGlzdHMudHh0IHVzZWQgdG8gYnVpbGQgdGVzdCBhbmQgZGVtbyBhcHBzIGJ5IHRoZSBDTWFrZSBidWlsZCBzeXN0ZW0KKysjCisrIyBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5IEJpbGwgU3BpdHphayBhbmQgb3RoZXJzLgorKyMKKysjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlLiBEaXN0cmlidXRpb24gYW5kIHVzZSByaWdodHMgYXJlIG91dGxpbmVkIGluCisrIyB0aGUgZmlsZSAiQ09QWUlORyIgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZCB3aXRoIHRoaXMgZmlsZS4gIElmIHRoaXMKKysjIGZpbGUgaXMgbWlzc2luZyBvciBkYW1hZ2VkLCBzZWUgdGhlIGxpY2Vuc2UgYXQ6CisrIworKyMgICAgIGh0dHA6Ly93d3cuZmx0ay5vcmcvQ09QWUlORy5waHAKKysjCisrIyBQbGVhc2UgcmVwb3J0IGFsbCBidWdzIGFuZCBwcm9ibGVtcyBvbiB0aGUgZm9sbG93aW5nIHBhZ2U6CisrIworKyMgICAgIGh0dHA6Ly93d3cuZmx0ay5vcmcvc3RyLnBocAorKyMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworIHNldChFWEVDVVRBQkxFX09VVFBVVF9QQVRIICR7RkxUS19CSU5BUllfRElSfS9iaW4vZXhhbXBsZXMpCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0BAIC02NCw3ICs4Myw3IEBAIENSRUFURV9FWEFNUExFKGZpbGVfY2hvb3NlciBmaWxlX2Nob29zZXIuY3h4ICJmbHRrO2ZsdGtfaW1hZ2VzIikKKyBDUkVBVEVfRVhBTVBMRShmb250cyBmb250cy5jeHggZmx0aykKKyBDUkVBVEVfRVhBTVBMRShmb3JtcyBmb3Jtcy5jeHggImZsdGs7Zmx0a19mb3JtcyIpCisgQ1JFQVRFX0VYQU1QTEUoaGVsbG8gaGVsbG8uY3h4IGZsdGspCistQ1JFQVRFX0VYQU1QTEUoaGVscCBoZWxwLmN4eCAiZmx0aztmbHRrX2ltYWdlcyIpCisrQ1JFQVRFX0VYQU1QTEUoaGVscF9kaWFsb2cgaGVscF9kaWFsb2cuY3h4ICJmbHRrO2ZsdGtfaW1hZ2VzIikKKyBDUkVBVEVfRVhBTVBMRShpY29uIGljb24uY3h4IGZsdGspCisgQ1JFQVRFX0VYQU1QTEUoaWNvbml6ZSBpY29uaXplLmN4eCBmbHRrKQorIENSRUFURV9FWEFNUExFKGltYWdlIGltYWdlLmN4eCBmbHRrKQorQEAgLTEzNCw3ICsxNTMsNyBAQCBlbmRpZihGTFRLX0hBVkVfQ0FJUk8pCisgIyBOb3RlOiB0aGlzIGlzIGluY29tcGxldGUgYXMgb2YgMTEgRmViIDIwMTUKKyAjIFRvZG86IGN1cnJlbnRseSBhbGwgZmlsZXMgYXJlIGNvcGllZCwgYnV0IHNvbWUgb2YgdGhlbSBuZWVkIGNvbmZpZ3VyYXRpb246CisgIyAtIGRlbW8ubWVudTogZmx1aWQgY2FuJ3QgYmUgc3RhcnRlZCAod3JvbmcgcGF0aCkKKy0jIC0gZGVtby5tZW51OiBoZWxwIChoZWxwLXRlc3QuaHRtbCkgY2FuJ3QgZmluZCBpdHMgaW1hZ2VzIChub3QgY29waWVkKQorKyMgLSBkZW1vLm1lbnU6IGhlbHBfZGlhbG9nIChoZWxwX2RpYWxvZy5odG1sKSBjYW4ndCBmaW5kIGl0cyBpbWFnZXMgKG5vdCBjb3BpZWQpCisgIyAtIG1heWJlIG1vcmUgLi4uCisgCisgIyBwcmVwYXJlIGZvciBhICJiZXR0ZXIiIHRlc3QgZmlsZSBpbnN0YWxsYXRpb24gcGF0aAorQEAgLTE0OSwxMSArMTY4LDExIEBAIGNvbmZpZ3VyZV9maWxlKGRlbW8ubWVudSAke1RFU1RGSUxFX1BBVEh9L2RlbW8ubWVudSBDT1BZT05MWSkKKyAKKyAjIHVzZSB0YXJnZXQgZGlyZWN0b3J5IG9ubHkgdG8gYXZvaWQgcmVkdW5kYW5jeQorIGNvbmZpZ3VyZV9maWxlKHJnYi50eHQgJHtURVNURklMRV9QQVRIfSBDT1BZT05MWSkKKy1jb25maWd1cmVfZmlsZShoZWxwLXRlc3QuaHRtbCAke1RFU1RGSUxFX1BBVEh9IENPUFlPTkxZKQorK2NvbmZpZ3VyZV9maWxlKGhlbHBfZGlhbG9nLmh0bWwgJHtURVNURklMRV9QQVRIfSBDT1BZT05MWSkKKyBjb25maWd1cmVfZmlsZShicm93c2VyLmN4eCAke1RFU1RGSUxFX1BBVEh9IENPUFlPTkxZKQorIGNvbmZpZ3VyZV9maWxlKGVkaXRvci5jeHggJHtURVNURklMRV9QQVRIfSBDT1BZT05MWSkKKyBpZihBUFBMRSBBTkQgTk9UIE9QVElPTl9BUFBMRV9YMTEpCisgICAgIGNvbmZpZ3VyZV9maWxlKGJyb3dzZXIuY3h4ICIke1RFU1RGSUxFX1BBVEh9L2Jyb3dzZXIuYXBwL0NvbnRlbnRzL1Jlc291cmNlcy9icm93c2VyLmN4eCIgQ09QWU9OTFkpCisgICAgIGNvbmZpZ3VyZV9maWxlKHJnYi50eHQgJHtURVNURklMRV9QQVRIfS9jb2xicm93c2VyLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvcmdiLnR4dCBDT1BZT05MWSkKKy0gICAgY29uZmlndXJlX2ZpbGUoaGVscC10ZXN0Lmh0bWwgJHtURVNURklMRV9QQVRIfS9oZWxwLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvaGVscC10ZXN0Lmh0bWwgQ09QWU9OTFkpCisrICAgIGNvbmZpZ3VyZV9maWxlKGhlbHBfZGlhbG9nLmh0bWwgJHtURVNURklMRV9QQVRIfS9oZWxwX2RpYWxvZy5hcHAvQ29udGVudHMvUmVzb3VyY2VzL2hlbHBfZGlhbG9nLmh0bWwgQ09QWU9OTFkpCisgZW5kaWYoQVBQTEUgQU5EIE5PVCBPUFRJT05fQVBQTEVfWDExKQorZGlmZiAtLWdpdCBhL3Rlc3QvZGVtby5tZW51IGIvdGVzdC9kZW1vLm1lbnUKK2luZGV4IDMzN2E3MWMuLjk3ZTUyMmEgMTAwNjQ0CistLS0gYS90ZXN0L2RlbW8ubWVudQorKysrIGIvdGVzdC9kZW1vLm1lbnUKK0BAIC03Nyw3ICs3Nyw3IEBACisgCUBvOkZvbnQgVGVzdHMuLi46QG9mCisgCQlAb2Y6Rm9udHM6Zm9udHMKKyAJCUBvZjpVVEYtODp1dGY4CistCUBvOkhlbHBEaWFsb2c6aGVscAorKwlAbzpIZWxwRGlhbG9nOmhlbHBfZGlhbG9nCisgCUBvOklucHV0IENob2ljZTppbnB1dF9jaG9pY2UKKyAJQG86UHJlZmVyZW5jZXM6cHJlZmVyZW5jZXMKKyAJQG86VGhyZWFkaW5nOnRocmVhZHMKK2RpZmYgLS1naXQgYS90ZXN0L2hlbHAuY3h4IGIvdGVzdC9oZWxwX2RpYWxvZy5jeHgKK3NpbWlsYXJpdHkgaW5kZXggODglCityZW5hbWUgZnJvbSB0ZXN0L2hlbHAuY3h4CityZW5hbWUgdG8gdGVzdC9oZWxwX2RpYWxvZy5jeHgKK2luZGV4IGY1YzUxZDYuLjc4NjY2NDEgMTAwNjQ0CistLS0gYS90ZXN0L2hlbHAuY3h4CisrKysgYi90ZXN0L2hlbHBfZGlhbG9nLmN4eAorQEAgLTMsNyArMyw3IEBACisgLy8KKyAvLyBGbF9IZWxwX0RpYWxvZyB0ZXN0IHByb2dyYW0uCisgLy8KKy0vLyBDb3B5cmlnaHQgMTk5OS0yMDEwIGJ5IEVhc3kgU29mdHdhcmUgUHJvZHVjdHMuCisrLy8gQ29weXJpZ2h0IDIwMTEtMjAxNyBieSBCaWxsIFNwaXR6YWsgYW5kIG90aGVycy4KKyAvLworIC8vIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlLiBEaXN0cmlidXRpb24gYW5kIHVzZSByaWdodHMgYXJlIG91dGxpbmVkIGluCisgLy8gdGhlIGZpbGUgIkNPUFlJTkciIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQgd2l0aCB0aGlzIGZpbGUuICBJZiB0aGlzCitAQCAtNDYsMTMgKzQ2LDEzIEBAIG1haW4oaW50ICBhcmdjLAkJCS8vIEkgLSBOdW1iZXIgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cworICAgICBzdHJjcHkoYnVmLCBhcmd2WzBdKTsKKyAgICAgY2hhciAqc2xhc2ggPSBzdHJyY2hyKGJ1ZiwgJy8nKTsKKyAgICAgaWYgKHNsYXNoKQorLSAgICAgIHN0cmNweShzbGFzaCwgIi8uLi9SZXNvdXJjZXMvaGVscC10ZXN0Lmh0bWwiKTsKKysgICAgICBzdHJjcHkoc2xhc2gsICIvLi4vUmVzb3VyY2VzL2hlbHBfZGlhbG9nLmh0bWwiKTsKKyAgICAgaGVscC0+bG9hZChidWYpOworICAgCisgI2Vsc2UKKyAgIAorICAgaWYgKGFyZ2MgPD0gMSkKKy0gICAgaGVscC0+bG9hZCgiaGVscC10ZXN0Lmh0bWwiKTsKKysgICAgaGVscC0+bG9hZCgiaGVscF9kaWFsb2cuaHRtbCIpOworICAgZWxzZQorICAgICBoZWxwLT5sb2FkKGFyZ3ZbMV0pOworICAgCitkaWZmIC0tZ2l0IGEvdGVzdC9oZWxwLXRlc3QuaHRtbCBiL3Rlc3QvaGVscF9kaWFsb2cuaHRtbAorc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSB0ZXN0L2hlbHAtdGVzdC5odG1sCityZW5hbWUgdG8gdGVzdC9oZWxwX2RpYWxvZy5odG1sCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9nbG9nL2dsb2dfMC4zLjUuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9nbG9nL2dsb2dfMC4zLjUuYmIKaW5kZXggM2RlMDFlZi4uNzBlZWY3MiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvZ2xvZy9nbG9nXzAuMy41LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2dsb2cvZ2xvZ18wLjMuNS5iYgpAQCAtOSw3ICs5LDcgQEAKIERFUEVORFMgPSAibGlidW53aW5kIgogCiBTUkNfVVJJID0gIiBcCi0gICAgZ2l0Oi8vZ2l0aHViLmNvbS9nb29nbGUvZ2xvZy5naXQ7YnJhbmNoPXYwMzUgXAorICAgIGdpdDovL2dpdGh1Yi5jb20vZ29vZ2xlL2dsb2cuZ2l0O25vYnJhbmNoPTEgXAogICAgIGZpbGU6Ly8wMDAxLVJld29yay1DTWFrZS1nbG9nLVZFUlNJT04tbWFuYWdlbWVudC5wYXRjaCBcCiAgICAgZmlsZTovLzAwMDItRmluZC1MaWJ1bndpbmQtZHVyaW5nLWNvbmZpZ3VyZS5wYXRjaCBcCiAgICAgZmlsZTovLzAwMDMtaW5zdGFsbGF0aW9uLXBhdGgtZml4LnBhdGNoIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2hkZHRlbXAvaGRkdGVtcC8wMDAxLWNvbmZpZ3VyZS5hYy1SZW5hbWUtdG8tY29uZmlndXJlLmFjLWFuZC11c2UtZXh0ZXJuYWwucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9oZGR0ZW1wL2hkZHRlbXAvMDAwMS1jb25maWd1cmUuYWMtUmVuYW1lLXRvLWNvbmZpZ3VyZS5hYy1hbmQtdXNlLWV4dGVybmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZGUwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9oZGR0ZW1wL2hkZHRlbXAvMDAwMS1jb25maWd1cmUuYWMtUmVuYW1lLXRvLWNvbmZpZ3VyZS5hYy1hbmQtdXNlLWV4dGVybmFsLnBhdGNoCkBAIC0wLDAgKzEsNzAzIEBACitGcm9tIGQ3ZTZmZTJhYzY5MzMzYzJkOTQzYTRiOGViMTM5MzczZDFmYjJjZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAzMSBEZWMgMjAxOSAxODowODowOSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IFJlbmFtZSB0byBjb25maWd1cmUuYWMgYW5kIHVzZSBleHRlcm5hbCBnZXR0ZXh0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgODEgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb25maWd1cmUuYWMKKworLS0tIC9kZXYvbnVsbAorKysrIGIvY29uZmlndXJlLmFjCitAQCAtMCwwICsxLDgxIEBACisrZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisrCisrIyBJbml0aWFsaXphdGlvbgorK0FDX0lOSVQKKytBQ19DT05GSUdfU1JDRElSKFtNYWtlZmlsZS5hbV0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKysKKysjIERldGVybWluZSB0aGUgaG9zdCBhbmQgYnVpbGQgdHlwZS4gVGhlIHRhcmdldCBpcyBhbHdheXMgYSBQSUMuCisrQUNfQ0FOT05JQ0FMX0hPU1QKKysKKytBTV9JTklUX0FVVE9NQUtFKGhkZHRlbXAsIDAuMy1iZXRhMTUpCisrCisrZG5sIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisrQUNfUFJPR19DQworK0FDX1BST0dfSU5TVEFMTAorKworKyMgYXBwZW5kIHRoZSBob3N0IGFsaWFzIHRvIHRoZSB0b29scyBmb3IgY3Jvc3MgY29tcGlsaW5nCisrQUNfSEVBREVSX1NUREMKKytBQ19DSEVDS19IRUFERVJTKGZjbnRsLmgpCisrQUNfQ0hFQ0tfSEVBREVSUyhpY29udi5oKQorK0FDX0NIRUNLX0hFQURFUlMobmV0aW5ldC9pbi5oKQorK0FDX0NIRUNLX1RZUEUoaW5fYWRkcl90LCAsW0FDX0RFRklORV9VTlFVT1RFRChbaW5fYWRkcl90XSwgW3VpbnQzMl90XSwgW0RlZmluZSB0byAndWludDMyX3QnIGlmIDxuZXRpbmV0L2luLmg+IGRvZXMgbm90IGRlZmluZS5dKV0sIFsjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl0pCisrCisrIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorK0FDX0NfQ09OU1QKKytBQ19TVFJVQ1RfVE0KKysKKytkbmwgaW50ZXJuYXRpb25hbGl6YXRpb24gbWFjcm9zCisrQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSkKKysKKytBQ19DSEVDS19GVU5DUyhbYmluZHRleHRkb21haW4gdGV4dGRvbWFpbiBpY29udl0pCisrCisrZG5sIHJlYXNvbmFibGUgZ3Vlc3NlcyBmb3Igd2hlcmUgc3R1ZmYgaXMgaW5zdGFsbGVkCisrZG5sIGlmIHdlIGRvbid0IGRvIHRoYXQgbm93LCB0aGUgY29uZmlnLmggd2lsbCB1c2UgJHtwcmVmaXh9CisrZG5sIGZvciBERUZBVUxUX0RBVEFCQVNFX1BBVEguCisraWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgorKyAgIHByZWZpeD0iL3Vzci9sb2NhbCIKKytmaQorK2lmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgorKyAgIGV4ZWNfcHJlZml4PSRwcmVmaXgKKytmaQorKworK0FDX01TR19DSEVDS0lORyhbTG9jYXRpb24gb2YgaGRkdGVtcC5kYl0pCisrREVGQVVMVF9EQVRBQkFTRV9QQVRIPQorKyNkYl9wYXRoPVwiYGV2YWwgZWNobyAke2RhdGFkaXJ9YC9taXNjL2hkZHRlbXAuZGJcIgorK2RiX3BhdGg9XCIvdXNyL3NoYXJlL21pc2MvaGRkdGVtcC5kYlwiCisrQUNfQVJHX1dJVEgoZGJfcGF0aCwKKysgICAgICAgICAgICAgICBbICAtLXdpdGgtZGItcGF0aD1QQVRIIFwKKysgICAgICAgICAgICAgICAgRGVmYXVsdCBsb2NhdGlvbiBvZiBoZGR0ZW1wLmRiIGZpbGUgWy91c3Ivc2hhcmUvbWlzYy9oZGR0ZW1wLmRiXV0sCisrICAgICAgICAgICAgICAgWyAgaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0ZBSUxVUkUoW25ldyBmaWxlIG5hbWUgZm9yIGRiLXBhdGhdKQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgREVGQVVMVF9EQVRBQkFTRV9QQVRIPSJcIiR3aXRodmFsXCIiCisrICAgICAgICAgICAgICAgXSwKKysgICAgICAgICAgICAgICBbICBERUZBVUxUX0RBVEFCQVNFX1BBVEg9IiRkYl9wYXRoIiBdKQorK0FDX01TR19SRVNVTFQoJERFRkFVTFRfREFUQUJBU0VfUEFUSCkKKytBQ19ERUZJTkVfVU5RVU9URUQoW0RFRkFVTFRfREFUQUJBU0VfUEFUSF0sIFskREVGQVVMVF9EQVRBQkFTRV9QQVRIXSwgW0RlZmF1bHQgbG9jYXRpb24gb2YgZHJpdmUgaW5mbyBkYXRhYmFzZV0pCisrCisrI0NGTEFHUz0iJENGTEFHUyAtV2FsbCAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2Nhc3QtYWxpZ24iCisrQ0ZMQUdTPSIkQ0ZMQUdTIC1XYWxsIC1XIC1XY2FzdC1hbGlnbiIKKysKKysjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKytBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIFwKKytwby9NYWtlZmlsZS5pbiBcCisrbTQvTWFrZWZpbGUgXAorK3NyYy9NYWtlZmlsZSBcCisrZG9jL01ha2VmaWxlIFwKKytdKQorK0FDX09VVFBVVAorKworK0FDX01TR19SRVNVTFQoWworKworK2hkZHRlbXAtJFZFUlNJT04gaXMgbm93IGNvbmZpZ3VyZWQgZm9yICRjYW5vbmljYWxfaG9zdF90eXBlCisrCisrICBCdWlsZDogICAgICAgICAgICAgICAgJGJ1aWxkCisrICBIb3N0OiAgICAgICAgICAgICAgICAgJGhvc3QKKysgIFNvdXJjZSBkaXJlY3Rvcnk6ICAgICAkc3JjZGlyCisrICBJbnN0YWxsYXRpb24gcHJlZml4OiAgJHByZWZpeAorKyAgQyBjb21waWxlcjogICAgICAgICAgICRDQyAkQ0ZMQUdTCisrCisrXSkKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEyLDcgKzEyLDcgQEAgRVhUUkFfRElTVCA9IGNvbmZpZy5ycGF0aCAgYXV0b2dlbi5zaCBcCisgICAgICAgICAgICAgIFJFQURNRSBcCisgICAgICAgICAgICAgIFRPRE8KKyAJICAgICAKKy1TVUJESVJTID0gaW50bCBwbyBtNCBzcmMgZG9jCisrU1VCRElSUyA9IHBvIG00IHNyYyBkb2MKKyAKKyBDTEVBTkZJTEVTID0gKn4KKyAKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIC9kZXYvbnVsbAorQEAgLTEsODMgKzAsMCBAQAorLWRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorLQorLSMgSW5pdGlhbGl6YXRpb24KKy1BQ19JTklUCistQUNfQ09ORklHX1NSQ0RJUihbTWFrZWZpbGUuYW1dKQorLUFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCistCistIyBEZXRlcm1pbmUgdGhlIGhvc3QgYW5kIGJ1aWxkIHR5cGUuIFRoZSB0YXJnZXQgaXMgYWx3YXlzIGEgUElDLgorLUFDX0NBTk9OSUNBTF9IT1NUCistCistQU1fSU5JVF9BVVRPTUFLRShoZGR0ZW1wLCAwLjMtYmV0YTE1KQorLQorLWRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorLUFDX1BST0dfQ0MKKy1BQ19QUk9HX0lOU1RBTEwKKy0KKy0jIGFwcGVuZCB0aGUgaG9zdCBhbGlhcyB0byB0aGUgdG9vbHMgZm9yIGNyb3NzIGNvbXBpbGluZworLUFDX0hFQURFUl9TVERDCistQUNfQ0hFQ0tfSEVBREVSUyhmY250bC5oKQorLUFDX0NIRUNLX0hFQURFUlMoaWNvbnYuaCkKKy1BQ19DSEVDS19IRUFERVJTKG5ldGluZXQvaW4uaCkKKy1BQ19DSEVDS19UWVBFKGluX2FkZHJfdCwgLFtBQ19ERUZJTkVfVU5RVU9URUQoW2luX2FkZHJfdF0sIFt1aW50MzJfdF0sIFtEZWZpbmUgdG8gJ3VpbnQzMl90JyBpZiA8bmV0aW5ldC9pbi5oPiBkb2VzIG5vdCBkZWZpbmUuXSldLCBbI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dKQorLQorLSMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKy1BQ19DX0NPTlNUCistQUNfU1RSVUNUX1RNCistCistZG5sIGludGVybmF0aW9uYWxpemF0aW9uIG1hY3JvcworLUFNX0dOVV9HRVRURVhUX1ZFUlNJT04KKy1BTV9HTlVfR0VUVEVYVAorLSNBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKQorLQorLUFDX0NIRUNLX0ZVTkNTKFtiaW5kdGV4dGRvbWFpbiB0ZXh0ZG9tYWluIGljb252XSkKKy0KKy1kbmwgcmVhc29uYWJsZSBndWVzc2VzIGZvciB3aGVyZSBzdHVmZiBpcyBpbnN0YWxsZWQKKy1kbmwgaWYgd2UgZG9uJ3QgZG8gdGhhdCBub3csIHRoZSBjb25maWcuaCB3aWxsIHVzZSAke3ByZWZpeH0KKy1kbmwgZm9yIERFRkFVTFRfREFUQUJBU0VfUEFUSC4KKy1pZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCistICAgcHJlZml4PSIvdXNyL2xvY2FsIgorLWZpCistaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCistICAgZXhlY19wcmVmaXg9JHByZWZpeAorLWZpCistCistQUNfTVNHX0NIRUNLSU5HKFtMb2NhdGlvbiBvZiBoZGR0ZW1wLmRiXSkKKy1ERUZBVUxUX0RBVEFCQVNFX1BBVEg9CistI2RiX3BhdGg9XCJgZXZhbCBlY2hvICR7ZGF0YWRpcn1gL21pc2MvaGRkdGVtcC5kYlwiCistZGJfcGF0aD1cIi91c3Ivc2hhcmUvbWlzYy9oZGR0ZW1wLmRiXCIKKy1BQ19BUkdfV0lUSChkYl9wYXRoLAorLSAgICAgICAgICAgICAgIFsgIC0td2l0aC1kYi1wYXRoPVBBVEggXAorLSAgICAgICAgICAgICAgICBEZWZhdWx0IGxvY2F0aW9uIG9mIGhkZHRlbXAuZGIgZmlsZSBbL3Vzci9zaGFyZS9taXNjL2hkZHRlbXAuZGJdXSwKKy0gICAgICAgICAgICAgICBbICBpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRkFJTFVSRShbbmV3IGZpbGUgbmFtZSBmb3IgZGItcGF0aF0pCistICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICAgICBERUZBVUxUX0RBVEFCQVNFX1BBVEg9IlwiJHdpdGh2YWxcIiIgCistICAgICAgICAgICAgICAgXSwKKy0gICAgICAgICAgICAgICBbICBERUZBVUxUX0RBVEFCQVNFX1BBVEg9IiRkYl9wYXRoIiBdKQorLUFDX01TR19SRVNVTFQoJERFRkFVTFRfREFUQUJBU0VfUEFUSCkKKy1BQ19ERUZJTkVfVU5RVU9URUQoW0RFRkFVTFRfREFUQUJBU0VfUEFUSF0sIFskREVGQVVMVF9EQVRBQkFTRV9QQVRIXSwgW0RlZmF1bHQgbG9jYXRpb24gb2YgZHJpdmUgaW5mbyBkYXRhYmFzZV0pCistCistI0NGTEFHUz0iJENGTEFHUyAtV2FsbCAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2Nhc3QtYWxpZ24iCistQ0ZMQUdTPSIkQ0ZMQUdTIC1XYWxsIC1XIC1XY2FzdC1hbGlnbiIKKy0KKy0jIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKy1BQ19DT05GSUdfRklMRVMoW01ha2VmaWxlICBpbnRsL01ha2VmaWxlIFwKKy1wby9NYWtlZmlsZS5pbiBcCistbTQvTWFrZWZpbGUgXAorLXNyYy9NYWtlZmlsZSBcCistZG9jL01ha2VmaWxlIFwKKy1dKQorLUFDX09VVFBVVAorLQorLUFDX01TR19SRVNVTFQoWworLQorLWhkZHRlbXAtJFZFUlNJT04gaXMgbm93IGNvbmZpZ3VyZWQgZm9yICRjYW5vbmljYWxfaG9zdF90eXBlCistCistICBCdWlsZDogICAgICAgICAgICAgICAgJGJ1aWxkCistICBIb3N0OiAgICAgICAgICAgICAgICAgJGhvc3QKKy0gIFNvdXJjZSBkaXJlY3Rvcnk6ICAgICAkc3JjZGlyCistICBJbnN0YWxsYXRpb24gcHJlZml4OiAgJHByZWZpeAorLSAgQyBjb21waWxlcjogICAgICAgICAgICRDQyAkQ0ZMQUdTCistICAKKy1dKQorLS0tIGEvaW50bC9DaGFuZ2VMb2cKKysrKyAvZGV2L251bGwKK0BAIC0xLDQgKzAsMCBAQAorLTIwMDUtMDItMjQgIEdOVSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorLQorLQkqIFZlcnNpb24gMC4xNC4yIHJlbGVhc2VkLgorLQorLS0tIGEvaW50bC9NYWtlZmlsZS5pbgorKysrIC9kZXYvbnVsbAorQEAgLTEsNTAwICswLDAgQEAKKy0jIE1ha2VmaWxlIGZvciBkaXJlY3Rvcnkgd2l0aCBtZXNzYWdlIGNhdGFsb2cgaGFuZGxpbmcgbGlicmFyeSBvZiBHTlUgZ2V0dGV4dAorLSMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0jIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKy0jIFVTQS4KKy0KKy1QQUNLQUdFID0gQFBBQ0tBR0VACistVkVSU0lPTiA9IEBWRVJTSU9OQAorLQorLVNIRUxMID0gL2Jpbi9zaAorLQorLXNyY2RpciA9IEBzcmNkaXJACistdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorLXRvcF9idWlsZGRpciA9IC4uCistVlBBVEggPSAkKHNyY2RpcikKKy0KKy1wcmVmaXggPSBAcHJlZml4QAorLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorLXRyYW5zZm9ybSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorLWxpYmRpciA9IEBsaWJkaXJACistaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorLWRhdGFkaXIgPSBAZGF0YWRpckAKKy1sb2NhbGVkaXIgPSAkKGRhdGFkaXIpL2xvY2FsZQorLWdldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvaW50bAorLWFsaWFzcGF0aCA9ICQobG9jYWxlZGlyKQorLXN1YmRpciA9IGludGwKKy0KKy1JTlNUQUxMID0gQElOU1RBTExACistSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKy1NS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACistbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQoTUtJTlNUQUxMRElSUykKKy0KKy1sID0gQElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYQAorLQorLUFSID0gYXIKKy1DQyA9IEBDQ0AKKy1MSUJUT09MID0gQExJQlRPT0xACistUkFOTElCID0gQFJBTkxJQkAKKy1ZQUNDID0gQElOVExCSVNPTkAgLXkgLWQKKy1ZRkxBR1MgPSAtLW5hbWUtcHJlZml4PV9fZ2V0dGV4dAorLQorLURFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ETE9DQUxFX0FMSUFTX1BBVEg9XCIkKGFsaWFzcGF0aClcIiBcCistLURMSUJESVI9XCIkKGxpYmRpcilcIiAtRElOX0xJQklOVEwgXAorLS1ERU5BQkxFX1JFTE9DQVRBQkxFPTEgLURJTl9MSUJSQVJZIC1ESU5TVEFMTERJUj1cIiQobGliZGlyKVwiIC1ETk9fWE1BTExPQyBcCistLURzZXRfcmVsb2NhdGlvbl9wcmVmaXg9bGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggXAorLS1EcmVsb2NhdGU9bGliaW50bF9yZWxvY2F0ZSBcCistLURERVBFTkRTX09OX0xJQklDT05WPTEgQERFRlNACistQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACistQ0ZMQUdTID0gQENGTEFHU0AKKy1MREZMQUdTID0gQExERkxBR1NACistTElCUyA9IEBMSUJTQAorLQorLUNPTVBJTEUgPSAkKENDKSAtYyAkKERFRlMpICQoSU5DTFVERVMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpCistCistSEVBREVSUyA9IFwKKy0gIGdtby5oIFwKKy0gIGdldHRleHRQLmggXAorLSAgaGFzaC1zdHJpbmcuaCBcCistICBsb2FkaW5mby5oIFwKKy0gIHBsdXJhbC1leHAuaCBcCistICBldmFsLXBsdXJhbC5oIFwKKy0gIGxvY2FsY2hhcnNldC5oIFwKKy0gIHJlbG9jYXRhYmxlLmggXAorLSAgeHNpemUuaCBcCistICBwcmludGYtYXJncy5oIHByaW50Zi1hcmdzLmMgXAorLSAgcHJpbnRmLXBhcnNlLmggd3ByaW50Zi1wYXJzZS5oIHByaW50Zi1wYXJzZS5jIFwKKy0gIHZhc25wcmludGYuaCB2YXNud3ByaW50Zi5oIHZhc25wcmludGYuYyBcCistICBvczJjb21wYXQuaCBcCistICBsaWJnbnVpbnRsLmguaW4KKy1TT1VSQ0VTID0gXAorLSAgYmluZHRleHRkb20uYyBcCistICBkY2dldHRleHQuYyBcCistICBkZ2V0dGV4dC5jIFwKKy0gIGdldHRleHQuYyBcCistICBmaW5kZG9tYWluLmMgXAorLSAgbG9hZG1zZ2NhdC5jIFwKKy0gIGxvY2FsZWFsaWFzLmMgXAorLSAgdGV4dGRvbWFpbi5jIFwKKy0gIGwxMG5mbGlzdC5jIFwKKy0gIGV4cGxvZGVuYW1lLmMgXAorLSAgZGNpZ2V0dGV4dC5jIFwKKy0gIGRjbmdldHRleHQuYyBcCistICBkbmdldHRleHQuYyBcCistICBuZ2V0dGV4dC5jIFwKKy0gIHBsdXJhbC55IFwKKy0gIHBsdXJhbC1leHAuYyBcCistICBsb2NhbGNoYXJzZXQuYyBcCistICByZWxvY2F0YWJsZS5jIFwKKy0gIGxhbmdwcmVmcy5jIFwKKy0gIGxvY2FsZW5hbWUuYyBcCistICBsb2cuYyBcCistICBwcmludGYuYyBcCistICBvc2RlcC5jIFwKKy0gIG9zMmNvbXBhdC5jIFwKKy0gIGludGwtY29tcGF0LmMKKy1PQkpFQ1RTID0gXAorLSAgYmluZHRleHRkb20uJGxvIFwKKy0gIGRjZ2V0dGV4dC4kbG8gXAorLSAgZGdldHRleHQuJGxvIFwKKy0gIGdldHRleHQuJGxvIFwKKy0gIGZpbmRkb21haW4uJGxvIFwKKy0gIGxvYWRtc2djYXQuJGxvIFwKKy0gIGxvY2FsZWFsaWFzLiRsbyBcCistICB0ZXh0ZG9tYWluLiRsbyBcCistICBsMTBuZmxpc3QuJGxvIFwKKy0gIGV4cGxvZGVuYW1lLiRsbyBcCistICBkY2lnZXR0ZXh0LiRsbyBcCistICBkY25nZXR0ZXh0LiRsbyBcCistICBkbmdldHRleHQuJGxvIFwKKy0gIG5nZXR0ZXh0LiRsbyBcCistICBwbHVyYWwuJGxvIFwKKy0gIHBsdXJhbC1leHAuJGxvIFwKKy0gIGxvY2FsY2hhcnNldC4kbG8gXAorLSAgcmVsb2NhdGFibGUuJGxvIFwKKy0gIGxhbmdwcmVmcy4kbG8gXAorLSAgbG9jYWxlbmFtZS4kbG8gXAorLSAgbG9nLiRsbyBcCistICBwcmludGYuJGxvIFwKKy0gIG9zZGVwLiRsbyBcCistICBpbnRsLWNvbXBhdC4kbG8KKy1ESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4gXAorLWNvbmZpZy5jaGFyc2V0IGxvY2FsZS5hbGlhcyByZWYtYWRkLnNpbiByZWYtZGVsLnNpbiAkKEhFQURFUlMpICQoU09VUkNFUykKKy1ESVNURklMRVMuZ2VuZXJhdGVkID0gcGx1cmFsLmMKKy1ESVNURklMRVMubm9ybWFsID0gVkVSU0lPTgorLURJU1RGSUxFUy5nZXR0ZXh0ID0gQ09QWUlORy5MSUItMi4wIENPUFlJTkcuTElCLTIuMSBsaWJpbnRsLmdsaWJjIFwKKy1saWJnbnVpbnRsLmhfdm1zIE1ha2VmaWxlLnZtcyBcCistbGliZ251aW50bC5oLm1zdmMtc3RhdGljIGxpYmdudWludGwuaC5tc3ZjLXNoYXJlZCBSRUFETUUud29lMzIgTWFrZWZpbGUubXN2YworLURJU1RGSUxFUy5vYnNvbGV0ZSA9IHhvcGVuLW1zZy5zZWQgbGludXgtbXNnLnNlZCBwbzJ0Ymwuc2VkLmluIGNhdC1jb21wYXQuYyBcCistQ09QWUlORy5MSUItMiBnZXR0ZXh0LmggbGliZ2V0dGV4dC5oIHBsdXJhbC1ldmFsLmMgbGliZ251aW50bC5oCistCistYWxsOiBhbGwtQFVTRV9JTkNMVURFRF9MSUJJTlRMQAorLWFsbC15ZXM6IGxpYmludGwuJGxhIGxpYmludGwuaCBjaGFyc2V0LmFsaWFzIHJlZi1hZGQuc2VkIHJlZi1kZWwuc2VkCistYWxsLW5vOiBhbGwtbm8tQEJVSUxEX0lOQ0xVREVEX0xJQklOVExACistYWxsLW5vLXllczogbGliZ251aW50bC4kbGEKKy1hbGwtbm8tbm86CistCistbGliaW50bC5hIGxpYmdudWludGwuYTogJChPQkpFQ1RTKQorLQlybSAtZiAkQAorLQkkKEFSKSBjcnUgJEAgJChPQkpFQ1RTKQorLQkkKFJBTkxJQikgJEAKKy0KKy1saWJpbnRsLmxhIGxpYmdudWludGwubGE6ICQoT0JKRUNUUykKKy0JJChMSUJUT09MKSAtLW1vZGU9bGluayBcCistCSAgJChDQykgJChDUFBGTEFHUykgJChDRkxBR1MpICQoWENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBcCistCSAgJChPQkpFQ1RTKSBATFRMSUJJQ09OVkAgQElOVExfTUFDT1NYX0xJQlNAICQoTElCUykgLWxjIFwKKy0JICAtdmVyc2lvbi1pbmZvICQoTFRWX0NVUlJFTlQpOiQoTFRWX1JFVklTSU9OKTokKExUVl9BR0UpIFwKKy0JICAtcnBhdGggJChsaWJkaXIpIFwKKy0JICAtbm8tdW5kZWZpbmVkCistCistIyBMaWJ0b29sJ3MgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciBsaWJpbnRsLgorLSMgQmVmb3JlIG1ha2luZyBhIGdldHRleHQgcmVsZWFzZSwgdGhlIGdldHRleHQgbWFpbnRhaW5lciBtdXN0IGNoYW5nZSB0aGlzCistIyBhY2NvcmRpbmcgdG8gdGhlIGxpYnRvb2wgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAiTGlicmFyeSBpbnRlcmZhY2UgdmVyc2lvbnMiLgorLSMgTWFpbnRhaW5lcnMgb2Ygb3RoZXIgcGFja2FnZXMgdGhhdCBpbmNsdWRlIHRoZSBpbnRsIGRpcmVjdG9yeSBtdXN0ICpub3QqCistIyBjaGFuZ2UgdGhlc2UgdmFsdWVzLgorLUxUVl9DVVJSRU5UPTcKKy1MVFZfUkVWSVNJT049MQorLUxUVl9BR0U9NAorLQorLS5TVUZGSVhFUzoKKy0uU1VGRklYRVM6IC5jIC55IC5vIC5sbyAuc2luIC5zZWQKKy0KKy0uYy5vOgorLQkkKENPTVBJTEUpICQ8CistCistLnkuYzoKKy0JJChZQUNDKSAkKFlGTEFHUykgLS1vdXRwdXQgJEAgJDwKKy0Jcm0gLWYgJCouaAorLQorLWJpbmR0ZXh0ZG9tLmxvOiAkKHNyY2RpcikvYmluZHRleHRkb20uYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2JpbmR0ZXh0ZG9tLmMKKy1kY2dldHRleHQubG86ICQoc3JjZGlyKS9kY2dldHRleHQuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjZ2V0dGV4dC5jCistZGdldHRleHQubG86ICQoc3JjZGlyKS9kZ2V0dGV4dC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGdldHRleHQuYworLWdldHRleHQubG86ICQoc3JjZGlyKS9nZXR0ZXh0LmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9nZXR0ZXh0LmMKKy1maW5kZG9tYWluLmxvOiAkKHNyY2RpcikvZmluZGRvbWFpbi5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZmluZGRvbWFpbi5jCistbG9hZG1zZ2NhdC5sbzogJChzcmNkaXIpL2xvYWRtc2djYXQuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvYWRtc2djYXQuYworLWxvY2FsZWFsaWFzLmxvOiAkKHNyY2RpcikvbG9jYWxlYWxpYXMuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvY2FsZWFsaWFzLmMKKy10ZXh0ZG9tYWluLmxvOiAkKHNyY2RpcikvdGV4dGRvbWFpbi5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvdGV4dGRvbWFpbi5jCistbDEwbmZsaXN0LmxvOiAkKHNyY2RpcikvbDEwbmZsaXN0LmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sMTBuZmxpc3QuYworLWV4cGxvZGVuYW1lLmxvOiAkKHNyY2RpcikvZXhwbG9kZW5hbWUuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2V4cGxvZGVuYW1lLmMKKy1kY2lnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNpZ2V0dGV4dC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGNpZ2V0dGV4dC5jCistZGNuZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RjbmdldHRleHQuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjbmdldHRleHQuYworLWRuZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RuZ2V0dGV4dC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZG5nZXR0ZXh0LmMKKy1uZ2V0dGV4dC5sbzogJChzcmNkaXIpL25nZXR0ZXh0LmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9uZ2V0dGV4dC5jCistcGx1cmFsLmxvOiAkKHNyY2RpcikvcGx1cmFsLmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9wbHVyYWwuYworLXBsdXJhbC1leHAubG86ICQoc3JjZGlyKS9wbHVyYWwtZXhwLmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9wbHVyYWwtZXhwLmMKKy1sb2NhbGNoYXJzZXQubG86ICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2xvY2FsY2hhcnNldC5jCistcmVsb2NhdGFibGUubG86ICQoc3JjZGlyKS9yZWxvY2F0YWJsZS5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworLWxhbmdwcmVmcy5sbzogJChzcmNkaXIpL2xhbmdwcmVmcy5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbGFuZ3ByZWZzLmMKKy1sb2NhbGVuYW1lLmxvOiAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCistbG9nLmxvOiAkKHNyY2RpcikvbG9nLmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2cuYworLXByaW50Zi5sbzogJChzcmNkaXIpL3ByaW50Zi5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcHJpbnRmLmMKKy1vc2RlcC5sbzogJChzcmNkaXIpL29zZGVwLmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9vc2RlcC5jCistaW50bC1jb21wYXQubG86ICQoc3JjZGlyKS9pbnRsLWNvbXBhdC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvaW50bC1jb21wYXQuYworLQorLXJlZi1hZGQuc2VkOiAkKHNyY2RpcikvcmVmLWFkZC5zaW4KKy0Jc2VkIC1lICcvXiMvZCcgLWUgJ3MvQCcnUEFDS0FHRScnQC9AUEFDS0FHRUAvZycgJChzcmNkaXIpL3JlZi1hZGQuc2luID4gdC1yZWYtYWRkLnNlZAorLQltdiB0LXJlZi1hZGQuc2VkIHJlZi1hZGQuc2VkCistcmVmLWRlbC5zZWQ6ICQoc3JjZGlyKS9yZWYtZGVsLnNpbgorLQlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWRlbC5zaW4gPiB0LXJlZi1kZWwuc2VkCistCW12IHQtcmVmLWRlbC5zZWQgcmVmLWRlbC5zZWQKKy0KKy1JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSS4uCistCistbGliZ251aW50bC5oOiAkKHNyY2RpcikvbGliZ251aW50bC5oLmluCistCXNlZCAtZSAncyxAJydIQVZFX1BPU0lYX1BSSU5URicnQCxASEFWRV9QT1NJWF9QUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfQVNQUklOVEYnJ0AsQEhBVkVfQVNQUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfU05QUklOVEYnJ0AsQEhBVkVfU05QUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfV1BSSU5URicnQCxASEFWRV9XUFJJTlRGQCxnJyBcCistCSAgPCAkKHNyY2RpcikvbGliZ251aW50bC5oLmluID4gbGliZ251aW50bC5oCistCistbGliaW50bC5oOiBsaWJnbnVpbnRsLmgKKy0JY3AgbGliZ251aW50bC5oIGxpYmludGwuaAorLQorLWNoYXJzZXQuYWxpYXM6ICQoc3JjZGlyKS9jb25maWcuY2hhcnNldAorLQkkKFNIRUxMKSAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQgJ0Bob3N0QCcgPiB0LSRACistCW12IHQtJEAgJEAKKy0KKy1jaGVjazogYWxsCistCistIyBXZSBtdXN0IG5vdCBpbnN0YWxsIHRoZSBsaWJpbnRsLmgvbGliaW50bC5hIGZpbGVzIGlmIHdlIGFyZSBvbiBhCistIyBzeXN0ZW0gd2hpY2ggaGFzIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGluIGl0cyBDIGxpYnJhcnkgb3IgaW4gYQorLSMgc2VwYXJhdGUgbGlicmFyeS4KKy0jIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgb25lIHdoaWNoIGNvbWVzIHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZQorLSMgcGFja2FnZSwgeW91IGhhdmUgdG8gdXNlIGBjb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQnLgorLWluc3RhbGw6IGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEKKy1pbnN0YWxsLWV4ZWM6IGFsbAorLQlpZiB7IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IH0gXAorLQkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCistCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBcCistCSAgJChJTlNUQUxMX0RBVEEpIGxpYmludGwuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9saWJpbnRsLmg7IFwKKy0JICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLiRsYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwuJGxhOyBcCistCSAgaWYgdGVzdCAiQFJFTE9DQVRBQkxFQCIgPSB5ZXM7IHRoZW4gXAorLQkgICAgZGVwZW5kZW5jaWVzPWBzZWQgLW4gLWUgJ3MsXmRlcGVuZGVuY3lfbGlicz1cKC4qXCksXDEscCcgPCAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwubGEgfCBzZWQgLWUgInMsXicsLCIgLWUgInMsJ1wkJCwsImA7IFwKKy0JICAgIGlmIHRlc3QgLW4gIiQkZGVwZW5kZW5jaWVzIjsgdGhlbiBcCistCSAgICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC5sYTsgXAorLQkgICAgZmk7IFwKKy0JICBmaTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCistCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm8gXAorLQkgICAmJiB0ZXN0IEBHTElCQzJAICE9IG5vOyB0aGVuIFwKKy0JICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcik7IFwKKy0JICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSBsaWJnbnVpbnRsLiRsYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdudWludGwuJGxhOyBcCistCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCistCSAgJChJTlNUQUxMX0RBVEEpICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC5zbyAkKERFU1RESVIpJChsaWJkaXIpL3ByZWxvYWRhYmxlX2xpYmludGwuc287IFwKKy0JICAkKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgXAorLQkgICAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLiRsYTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCistCSAgdGVzdCBAR0xJQkMyMUAgIT0gbm8gfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCistCSAgdGVtcD0kKERFU1RESVIpJChsaWJkaXIpL3QtY2hhcnNldC5hbGlhczsgXAorLQkgIGRlc3Q9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCistCSAgaWYgdGVzdCAtZiAkKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IHRoZW4gXAorLQkgICAgb3JpZz0kKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IFwKKy0JICAgIHNlZCAtZiByZWYtYWRkLnNlZCAkJG9yaWcgPiAkJHRlbXA7IFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCistCSAgICBybSAtZiAkJHRlbXA7IFwKKy0JICBlbHNlIFwKKy0JICAgIGlmIHRlc3QgQEdMSUJDMjFAID0gbm87IHRoZW4gXAorLQkgICAgICBvcmlnPWNoYXJzZXQuYWxpYXM7IFwKKy0JICAgICAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorLQkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorLQkgICAgICBybSAtZiAkJHRlbXA7IFwKKy0JICAgIGZpOyBcCistCSAgZmk7IFwKKy0JICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxvY2FsZWRpcik7IFwKKy0JICB0ZXN0IC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzIFwKKy0JICAgICYmIG9yaWc9JChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXMgXAorLQkgICAgfHwgb3JpZz0kKHNyY2RpcikvbG9jYWxlLmFsaWFzOyBcCistCSAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCistCSAgZGVzdD0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhczsgXAorLQkgIHNlZCAtZiByZWYtYWRkLnNlZCAkJG9yaWcgPiAkJHRlbXA7IFwKKy0JICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorLQkgIHJtIC1mICQkdGVtcDsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLWluc3RhbGwtZGF0YTogYWxsCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKy0JICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCistCSAgJChJTlNUQUxMX0RBVEEpIFZFUlNJT04gJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvVkVSU0lPTjsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBDaGFuZ2VMb2cuaW5zdCAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9DaGFuZ2VMb2c7IFwKKy0JICBkaXN0cz0iQ09QWUlORy5MSUItMi4wIENPUFlJTkcuTElCLTIuMSAkKERJU1RGSUxFUy5jb21tb24pIjsgXAorLQkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKy0JCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCSAgZG9uZTsgXAorLQkgIGNobW9kIGEreCAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9jb25maWcuY2hhcnNldDsgXAorLQkgIGRpc3RzPSIkKERJU1RGSUxFUy5nZW5lcmF0ZWQpIjsgXAorLQkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKy0JICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIGRpcj0uOyBlbHNlIGRpcj0kKHNyY2Rpcik7IGZpOyBcCistCSAgICAkKElOU1RBTExfREFUQSkgJCRkaXIvJCRmaWxlIFwKKy0JCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCSAgZG9uZTsgXAorLQkgIGRpc3RzPSIkKERJU1RGSUxFUy5vYnNvbGV0ZSkiOyBcCistCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCSAgZG9uZTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQorLWluc3RhbGwtc3RyaXA6IGluc3RhbGwKKy0KKy1pbnN0YWxsZGlyczoKKy0JaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKy0JICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorLQkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCistCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm8gXAorLQkgICAmJiB0ZXN0IEBHTElCQzJAICE9IG5vOyB0aGVuIFwKKy0JICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGxpYmRpcik7IFwKKy0JZWxzZSBcCistCSAgOiA7IFwKKy0JZmkKKy0JaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorLQkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorLQkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobG9jYWxlZGlyKTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCistCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQorLSMgRGVmaW5lIHRoaXMgYXMgZW1wdHkgdW50aWwgSSBmb3VuZCBhIHVzZWZ1bCBhcHBsaWNhdGlvbi4KKy1pbnN0YWxsY2hlY2s6CistCistdW5pbnN0YWxsOgorLQlpZiB7IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IH0gXAorLQkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCistCSAgcm0gLWYgJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCistCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIFwKKy0JICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC4kbGE7IFwKKy0JZWxzZSBcCistCSAgOiA7IFwKKy0JZmkKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgXAorLQkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IG5vIFwKKy0JICAgJiYgdGVzdCBAR0xJQkMyQCAhPSBubzsgdGhlbiBcCistCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCistCWVsc2UgXAorLQkgIDogOyBcCistCWZpCistCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKy0JICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCistCSAgICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCistCSAgICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorLQkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorLQkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKy0JICAgICAgcm0gLWYgJCRkZXN0OyBcCistCSAgICBlbHNlIFwKKy0JICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKy0JICAgIGZpOyBcCistCSAgICBybSAtZiAkJHRlbXA7IFwKKy0JICBmaTsgXAorLQkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IHRoZW4gXAorLQkgICAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCistCSAgICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCistCSAgICBzZWQgLWYgcmVmLWRlbC5zZWQgJCRkZXN0ID4gJCR0ZW1wOyBcCistCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorLQkgICAgICBybSAtZiAkJGRlc3Q7IFwKKy0JICAgIGVsc2UgXAorLQkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorLQkgICAgZmk7IFwKKy0JICAgIHJtIC1mICQkdGVtcDsgXAorLQkgIGZpOyBcCistCWVsc2UgXAorLQkgIDogOyBcCistCWZpCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKy0JICBmb3IgZmlsZSBpbiBWRVJTSU9OIENoYW5nZUxvZyBDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKTsgZG8gXAorLQkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCSAgZG9uZTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQorLWluZm8gZHZpIHBzIHBkZiBodG1sOgorLQorLSQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdudWludGwuaAorLWJpbmR0ZXh0ZG9tLiRsbyBkY2dldHRleHQuJGxvIGRjaWdldHRleHQuJGxvIGRjbmdldHRleHQuJGxvIGRnZXR0ZXh0LiRsbyBkbmdldHRleHQuJGxvIGZpbmRkb21haW4uJGxvIGdldHRleHQuJGxvIGludGwtY29tcGF0LiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gbmdldHRleHQuJGxvIHRleHRkb21haW4uJGxvOiAkKHNyY2RpcikvZ2V0dGV4dFAuaCAkKHNyY2RpcikvZ21vLmggJChzcmNkaXIpL2xvYWRpbmZvLmgKKy1kY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbzogJChzcmNkaXIpL2hhc2gtc3RyaW5nLmgKKy1leHBsb2RlbmFtZS4kbG8gbDEwbmZsaXN0LiRsbzogJChzcmNkaXIpL2xvYWRpbmZvLmgKKy1kY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbyBwbHVyYWwuJGxvIHBsdXJhbC1leHAuJGxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5oCistZGNpZ2V0dGV4dC4kbG86ICQoc3JjZGlyKS9ldmFsLXBsdXJhbC5oCistbG9jYWxjaGFyc2V0LiRsbzogJChzcmNkaXIpL2xvY2FsY2hhcnNldC5oCistbG9jYWxlYWxpYXMuJGxvIGxvY2FsY2hhcnNldC4kbG8gcmVsb2NhdGFibGUuJGxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuaAorLXByaW50Zi4kbG86ICQoc3JjZGlyKS9wcmludGYtYXJncy5oICQoc3JjZGlyKS9wcmludGYtYXJncy5jICQoc3JjZGlyKS9wcmludGYtcGFyc2UuaCAkKHNyY2Rpcikvd3ByaW50Zi1wYXJzZS5oICQoc3JjZGlyKS94c2l6ZS5oICQoc3JjZGlyKS9wcmludGYtcGFyc2UuYyAkKHNyY2RpcikvdmFzbnByaW50Zi5oICQoc3JjZGlyKS92YXNud3ByaW50Zi5oICQoc3JjZGlyKS92YXNucHJpbnRmLmMKKy0KKy10YWdzOiBUQUdTCistCistVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCistCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBldGFncyAtbyAkJGhlcmUvVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKy0KKy1jdGFnczogQ1RBR1MKKy0KKy1DVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCistCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBjdGFncyAtbyAkJGhlcmUvQ1RBR1MgJChIRUFERVJTKSAkKFNPVVJDRVMpCistCistaWQ6IElECistCistSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorLQloZXJlPWBwd2RgOyBjZCAkKHNyY2RpcikgJiYgbWtpZCAtZiQkaGVyZS9JRCAkKEhFQURFUlMpICQoU09VUkNFUykKKy0KKy0KKy1tb3N0bHljbGVhbjoKKy0Jcm0gLWYgKi5hICoubGEgKi5vICoub2JqICoubG8gY29yZSBjb3JlLioKKy0Jcm0gLWYgbGliZ251aW50bC5oIGxpYmludGwuaCBjaGFyc2V0LmFsaWFzIHJlZi1hZGQuc2VkIHJlZi1kZWwuc2VkCistCXJtIC1mIC1yIC5saWJzIF9saWJzCistCistY2xlYW46IG1vc3RseWNsZWFuCistCistZGlzdGNsZWFuOiBjbGVhbgorLQlybSAtZiBNYWtlZmlsZSBJRCBUQUdTCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorLQkgIHJtIC1mIENoYW5nZUxvZy5pbnN0ICQoRElTVEZJTEVTLm5vcm1hbCk7IFwKKy0JZWxzZSBcCistCSAgOiA7IFwKKy0JZmkKKy0KKy1tYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKy0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKKy0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorLQorLQorLSMgR05VIGdldHRleHQgbmVlZHMgbm90IGNvbnRhaW4gdGhlIGZpbGUgYFZFUlNJT04nIGJ1dCBjb250YWlucyBzb21lCistIyBvdGhlciBmaWxlcyB3aGljaCBzaG91bGQgbm90IGJlIGRpc3RyaWJ1dGVkIGluIG90aGVyIHBhY2thZ2VzLgorLWRpc3RkaXIgPSAuLi8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCistZGlzdCBkaXN0ZGlyOiBNYWtlZmlsZQorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCistCSAgOiA7IFwKKy0JZWxzZSBcCistCSAgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIjsgdGhlbiBcCistCSAgICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKy0JICBlbHNlIFwKKy0JICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLm5vcm1hbCkiOyBcCistCSAgZmk7IFwKKy0JICAkKE1BS0UpICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKSAkJGFkZGl0aW9uYWw7IFwKKy0JICBmb3IgZmlsZSBpbiBDaGFuZ2VMb2cgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZGlyPS47IGVsc2UgZGlyPSQoc3JjZGlyKTsgZmk7IFwKKy0JICAgIGNwIC1wICQkZGlyLyQkZmlsZSAkKGRpc3RkaXIpOyBcCistCSAgZG9uZTsgXAorLQlmaQorLQorLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKy0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworLSMgVGhpcyB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCwgYnV0IGRvZXNuJ3Qgd29yayBhbnkgbW9yZSB3aXRoIGF1dG9jb25mLTIuNTcsCistIyB3aGVuIEFDX0NPTkZJR19GSUxFUyhbaW50bC9NYWtlZmlsZTpzb21lZGlyL01ha2VmaWxlLmluXSkgaXMgdXNlZC4KKy0jCWNkICQodG9wX2J1aWxkZGlyKSAmJiBDT05GSUdfRklMRVM9JChzdWJkaXIpLyRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKy0KKy0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2hkZHRlbXAvaGRkdGVtcF8wLjMtYmV0YTE1LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaGRkdGVtcC9oZGR0ZW1wXzAuMy1iZXRhMTUuYmIKaW5kZXggNGE4NzFiZi4uZDVkYTJiNiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaGRkdGVtcC9oZGR0ZW1wXzAuMy1iZXRhMTUuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaGRkdGVtcC9oZGR0ZW1wXzAuMy1iZXRhMTUuYmIKQEAgLTksNiArOSw3IEBACiAgICAgICAgICAgIGZpbGU6Ly9oZGR0ZW1wXzAuMy1iZXRhMTUtNTIuZGlmZiBcCiAgICAgICAgICAgIGZpbGU6Ly9oZGR0ZW1wLTAuMy1iZXRhMTUtYXV0b2RldGVjdC03MTc0NzkucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1iYWNrdHJhY2UtUmVwbGFjZS1zdHJ1Y3QtdWNvbnRleHQtd2l0aC11Y29udGV4dF90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLVJlbmFtZS10by1jb25maWd1cmUuYWMtYW5kLXVzZS1leHRlcm5hbC5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9oZGR0ZW1wLmRiIFwKICAgICAgICAgICAgZmlsZTovL2luaXQgXAogIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaGRmNS9maWxlcy8wMDAxLWNyb3NzLWNvbXBpbGluZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaGRmNS9maWxlcy8wMDAxLWNyb3NzLWNvbXBpbGluZy1zdXBwb3J0LnBhdGNoCmluZGV4IDk3ZjE2YmIuLmJkYzFmYTUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2hkZjUvZmlsZXMvMDAwMS1jcm9zcy1jb21waWxpbmctc3VwcG9ydC5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9oZGY1L2ZpbGVzLzAwMDEtY3Jvc3MtY29tcGlsaW5nLXN1cHBvcnQucGF0Y2gKQEAgLTE0LDExICsxNCw5IEBACiAgc3JjL0NNYWtlTGlzdHMudHh0IHwgMjMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiAKLWRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0Ci1pbmRleCAwOGE2NWM0Li45YWYxNGQ1IDEwMDY0NAogLS0tIGEvQ01ha2VMaXN0cy50eHQKICsrKyBiL0NNYWtlTGlzdHMudHh0Ci1AQCAtODE3LDQgKzgxNywxMCBAQCBlbmRpZiAoKQorQEAgLTc3MCw0ICs3NzAsMTAgQEAgZW5kaWYgKCkKICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBjb25maWd1cmVfZmlsZSAoJHtIREZfUkVTT1VSQ0VTX0RJUn0vSDVwdWJjb25mLmguaW4gJHtIREY1X0JJTkFSWV9ESVJ9L0g1cHViY29uZi5oIEBPTkxZKQogIApAQCAtMjksMjIgKzI3LDIyIEBACiArY29uZmlndXJlX2ZpbGUoSDVsaWJfc2V0dGluZ3MuYyBINWxpYl9zZXR0aW5ncy5jIENPUFlPTkxZKQogKwogIGluY2x1ZGUgKENNYWtlSW5zdGFsbGF0aW9uLmNtYWtlKQotZGlmZiAtLWdpdCBhL3NyYy9DTWFrZUxpc3RzLnR4dCBiL3NyYy9DTWFrZUxpc3RzLnR4dAotaW5kZXggZDM0MzIwOC4uZDExNTI1YiAxMDA2NDQKIC0tLSBhL3NyYy9DTWFrZUxpc3RzLnR4dAogKysrIGIvc3JjL0NNYWtlTGlzdHMudHh0Ci1AQCAtNjEzLDMyICs2MTMsOSBAQCBzZXQgKEg1X1BSSVZBVEVfSEVBREVSUworQEAgLTYxMywzNiArNjEzLDkgQEAgc2V0IChINV9QUklWQVRFX0hFQURFUlMKICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBhZGRfZXhlY3V0YWJsZSAoSDVkZXRlY3QgJHtIREY1X1NSQ19ESVJ9L0g1ZGV0ZWN0LmMpCiAgVEFSR0VUX0NfUFJPUEVSVElFUyAoSDVkZXRlY3QgU1RBVElDICIgIiAiICIpCiAtaWYgKE1TVkMgT1IgTUlOR1cpCiAtICB0YXJnZXRfbGlua19saWJyYXJpZXMgKEg1ZGV0ZWN0ICJ3czJfMzIubGliIikKIC1lbmRpZiAoKQorLWlmIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiRW1zY3JpcHRlbiIpCistICBzZXRfcHJvcGVydHkoVEFSR0VUIEg1ZGV0ZWN0IFBST1BFUlRZIExJTktfRkxBR1MgIi1PMCIpCistZW5kaWYgKCkKIC0KLS1zZXQgKENNRCAkPFRBUkdFVF9GSUxFOkg1ZGV0ZWN0PikKIC1hZGRfY3VzdG9tX2NvbW1hbmQgKAogLSAgICBPVVRQVVQgJHtIREY1X0JJTkFSWV9ESVJ9L0g1VGluaXQuYwotLSAgICBDT01NQU5EICR7Q01EfQorLSAgICBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6SDVkZXRlY3Q+CiAtICAgIEFSR1MgPiAke0hERjVfQklOQVJZX0RJUn0vSDVUaW5pdC5jCiAtICAgIERFUEVORFMgSDVkZXRlY3QKIC0pCkBAIC01NCwxMSArNTIsMTMgQEAKIC1pZiAoTVNWQyBPUiBNSU5HVykKIC0gIHRhcmdldF9saW5rX2xpYnJhcmllcyAoSDVtYWtlX2xpYnNldHRpbmdzICJ3czJfMzIubGliIikKIC1lbmRpZiAoKQorLWlmIChDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiRW1zY3JpcHRlbiIpCistICBzZXRfcHJvcGVydHkoVEFSR0VUIEg1bWFrZV9saWJzZXR0aW5ncyBQUk9QRVJUWSBMSU5LX0ZMQUdTICItTzAiKQorLWVuZGlmICgpCiAtCi0tc2V0IChDTUQgJDxUQVJHRVRfRklMRTpINW1ha2VfbGlic2V0dGluZ3M+KQogLWFkZF9jdXN0b21fY29tbWFuZCAoCiAtICAgIE9VVFBVVCAke0hERjVfQklOQVJZX0RJUn0vSDVsaWJfc2V0dGluZ3MuYwotLSAgICBDT01NQU5EICR7Q01EfQorLSAgICBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6SDVtYWtlX2xpYnNldHRpbmdzPgogLSAgICBBUkdTID4gJHtIREY1X0JJTkFSWV9ESVJ9L0g1bGliX3NldHRpbmdzLmMKIC0gICAgREVQRU5EUyBINW1ha2VfbGlic2V0dGluZ3MKIC0gICAgV09SS0lOR19ESVJFQ1RPUlkgJHtIREY1X0JJTkFSWV9ESVJ9CkBAIC02Niw2ICs2NiwzIEBACiAgCiAgaWYgKEdFTkVSQVRFX0VSUk9SX0hFQURFUlMpCiAgICBmaW5kX3BhY2thZ2UgKFBlcmwpCi0tLSAKLTIuNy40Ci0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2hkZjUvaGRmNV8xLjguMTkuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9oZGY1L2hkZjVfMS44LjIxLmJiCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2hkZjUvaGRmNV8xLjguMTkuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2hkZjUvaGRmNV8xLjguMjEuYmIKaW5kZXggZmNiZTliMC4uOWFmMmI2NyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaGRmNS9oZGY1XzEuOC4xOS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9oZGY1L2hkZjVfMS44LjIxLmJiCkBAIC0xNiw5ICsxNiw4IEBACiAgICAgZmlsZTovLzAwMDEtY3Jvc3MtY29tcGlsaW5nLXN1cHBvcnQucGF0Y2ggXAogICAgIGZpbGU6Ly8wMDAyLVJlbW92ZS1zdWZmaXgtc2hhcmVkLWZyb20tc2hhcmVkLWxpYnJhcnktbmFtZS5wYXRjaCBcCiAiCi0KLVNSQ19VUklbbWQ1c3VtXSA9ICI2ZjAzNTNlZTMzZTk5MDg5YzExMGExYzhkMmRkMWIyMiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI1OWMwMzgxNjEwNWQ1Nzk5MDMyOTUzN2FkMTA0OWJhMjJjMmI4YWZlMTg5MDA4NWYwYzAyMmI3NWYxNzI3MjM4IgorU1JDX1VSSVttZDVzdW1dID0gIjJkMjQwOGYyYTlkZmI1YzdiNzk5OTgwMDJlOWE5MGU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU1YjFiMWRlZTQ0YTY0Yjc5NWE5MWMzMzIxYWI3MTk2ZDllMDg3MWZlNTBkNDI5Njk3NjE3OTRlMzg5OWY0MGQiCiAKIEZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbGliaGRmNS5zZXR0aW5ncyAke2RhdGFkaXJ9LyoiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2h3ZGF0YS9od2RhdGFfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaHdkYXRhL2h3ZGF0YV9naXQuYmIKaW5kZXggYTg0Nzk0Ni4uZTIwYmVjNSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaHdkYXRhL2h3ZGF0YV9naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaHdkYXRhL2h3ZGF0YV9naXQuYmIKQEAgLTUsOCArNSw4IEBACiBMSUNFTlNFID0gIkdQTC0yLjArIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MTU1NjU0NzcxMWU4MjQ2OTkyYjk5OWVkZDk0NDVhNTciCiAKLVBWID0gIjAuMzI5IgotU1JDUkVWID0gIjNiOTNiMjI2MTc3YjZhOGQyMTlmYTVlZGVlMmE0MTc3NThjZjc0ZGIiCitQViA9ICIwLjMzMCIKK1NSQ1JFViA9ICIzMzVmNzJmOGVkNGFkMGNmMzM1NTI2ZDNjNmM0NzAxZjdlNThmNDViIgogU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3ZjcmhvbmVrLyR7QlBOfS5naXQiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9pbWFnZW1hZ2ljay9pbWFnZW1hZ2lja183LjAuOC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2ltYWdlbWFnaWNrL2ltYWdlbWFnaWNrXzcuMC45LmJiCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2ltYWdlbWFnaWNrL2ltYWdlbWFnaWNrXzcuMC44LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9pbWFnZW1hZ2ljay9pbWFnZW1hZ2lja183LjAuOS5iYgppbmRleCA0ZWUwNmQ3Li4zZjdkMDZlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9pbWFnZW1hZ2ljay9pbWFnZW1hZ2lja183LjAuOC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9pbWFnZW1hZ2ljay9pbWFnZW1hZ2lja183LjAuOS5iYgpAQCAtNCwxNCArNCwxNCBAQAogREVTQ1JJUFRJT04gPSAiSW1hZ2VNYWdpY2sgaXMgYSBjb2xsZWN0aW9uIG9mIHRvb2xzIGZvciBkaXNwbGF5aW5nLCBjb252ZXJ0aW5nLCBhbmQgXAogZWRpdGluZyByYXN0ZXIgYW5kIHZlY3RvciBpbWFnZSBmaWxlcy4gSXQgY2FuIHJlYWQgYW5kIHdyaXRlIG92ZXIgMjAwIGltYWdlIGZpbGUgZm9ybWF0cy4iCiBMSUNFTlNFID0gIkltYWdlTWFnaWNrIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MDVmZjk0YjNmZjU5ZmU2ZmE3NDg5ZmEyNmUzZDkxNDIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00MWI0ZmE5YWY2MGM4OGU2MTQ4NGIwMmMwNTYxMTgxYSIKICMgRklYTUU6IFRoZXJlIGFyZSBtYW55IG1vcmUgY2hlY2tlZCBsaWJyYXJpZXMuIEFsbCBzaG91bGQgYmUgYWRkZWQgb3IgZXhwbGljaXRseSBkaXNhYmxlZCB0byBnZXQgY29uc2lzdGVudCByZXN1bHRzLgogREVQRU5EUyA9ICJsY21zIGJ6aXAyIGpwZWcgbGlicG5nIHRpZmYgemxpYiBmZnR3IGZyZWV0eXBlIGxpYnRvb2wiCiAKIEJBU0VfUFYgOj0gIiR7UFZ9IgotUFYgLj0gIl80NyIKK1BWIC49ICJfMTMiCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vSW1hZ2VNYWdpY2svSW1hZ2VNYWdpY2suZ2l0ICIKLVNSQ1JFViA9ICJiNjcyZGY3YTQ0YjBhYjAyMTliMWZhNzhiMzY3M2MyODEwZGRkMzc0IgorU1JDUkVWID0gIjE1YjkzNWQ2NGY2MTNiNWEwZmM5ZDNmZWFkNWM2ZWMxYjBlMzkwOGYiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKQEAgLTI5LDYgKzI5LDcgQEAKIFBBQ0tBR0VDT05GSUdbb3BlbmpwZWddID0gIi0td2l0aC1vcGVuanAyLC0td2l0aG91dC1vcGVuanAyLG9wZW5qcGVnIgogUEFDS0FHRUNPTkZJR1twYW5nb10gPSAiLS13aXRoLXBhbmdvLC0td2l0aG91dC1wYW5nbyxwYW5nbyBjYWlybyIKIFBBQ0tBR0VDT05GSUdbcnN2Z10gPSAiLS13aXRoLXJzdmcsLS13aXRob3V0LXJzdmcsbGlicnN2ZyIKK1BBQ0tBR0VDT05GSUdbdGNtYWxsb2NdID0gIi0td2l0aC10Y21hbGxvYz15ZXMsLS13aXRoLXRjbWFsbG9jPW5vLGdwZXJmdG9vbHMiCiBQQUNLQUdFQ09ORklHW3dlYnBdID0gIi0td2l0aC13ZWJwLC0td2l0aG91dC13ZWJwLGxpYndlYnAiCiBQQUNLQUdFQ09ORklHW3dtZl0gPSAiLS13aXRoLXdtZiwtLXdpdGhvdXQtd21mLGxpYndtZiIKIFBBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteCwtLXdpdGhvdXQteCx2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnh0IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaW5paC9saWJpbmloX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2luaWgvbGliaW5paF9naXQuYmIKaW5kZXggNDgyNzFmNy4uODdiMTE0MiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvaW5paC9saWJpbmloX2dpdC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9pbmloL2xpYmluaWhfZ2l0LmJiCkBAIC04LDggKzgsOSBAQAogUFIgPSAicjMiCiAKICMgVGhlIGdpdGh1YiByZXBvc2l0b3J5IHByb3ZpZGVzIGEgY21ha2UgYW5kIHBrZy1jb25maWcgaW50ZWdyYXRpb24KLVNSQ1JFViA9ICIyNTA3OGY3MTU2ZWI4NjQ3YjNiMzVkZDI1ZjlhZTZmOGM0ZWUwNTg5IgotU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL09TU3lzdGVtcy9pbmloLmdpdCIKK1NSQ1JFViA9ICJjODU4YWZmOGMzMWZhNjNlZjRkMWUwMTc2YzEwZTU5MjhjZGU5YTIzIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL09TU3lzdGVtcy9pbmloLmdpdCBcCisgICAgICAgICAgIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJieXRlc2l6ZS9saWJieXRlc2l6ZV8yLjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJieXRlc2l6ZS9saWJieXRlc2l6ZV8yLjEuYmIKaW5kZXggMDdiZjFmYS4uMWE1YzE4NCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGliYnl0ZXNpemUvbGliYnl0ZXNpemVfMi4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYmJ5dGVzaXplL2xpYmJ5dGVzaXplXzIuMS5iYgpAQCAtMjUsOCArMjUsNiBAQAogCiBQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uMyIKIFBBQ0tBR0VDT05GSUdbcHl0aG9uM10gPSAiLS13aXRoLXB5dGhvbjMsIC0td2l0aG91dC1weXRob24zLCxweXRob24zLWNvcmUiCi1QQUNLQUdFQ09ORklHW2RvY10gPSAiLS13aXRoLWd0ay1kb2MsIC0td2l0aG91dC1ndGstZG9jLCBndGstZG9jLW5hdGl2ZSIKIAorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1ndGstZG9jIgogRVhUUkFfT0VNQUtFID0gInB5M2xpYmRpcj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSIKLQotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJmYW5uL2xpYmZhbm5fZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGliZmFubi9saWJmYW5uX2dpdC5iYgppbmRleCBjOTg2ZTE3Li5lYWUyNDQ2IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJmYW5uL2xpYmZhbm5fZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYmZhbm4vbGliZmFubl9naXQuYmIKQEAgLTE1LDMgKzE1LDUgQEAKIFBWID0gIjIuMi4wK2dpdCR7U1JDUFZ9IgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNNQUtFID0gIi1ETElCX1NVRkZJWD0ke0BkLmdldFZhcignYmFzZWxpYicpLnJlcGxhY2UoJ2xpYicsICcnKX0iCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJnaXQyL2xpYmdpdDJfMC4yOC4zLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGliZ2l0Mi9saWJnaXQyXzAuMjguNC5iYgpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJnaXQyL2xpYmdpdDJfMC4yOC4zLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJnaXQyL2xpYmdpdDJfMC4yOC40LmJiCmluZGV4IDgyYWNjNDkuLjliOWMxOTEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYmdpdDIvbGliZ2l0Ml8wLjI4LjMuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGliZ2l0Mi9saWJnaXQyXzAuMjguNC5iYgpAQCAtNiw3ICs2LDcgQEAKIERFUEVORFMgPSAiY3VybCBvcGVuc3NsIHpsaWIgbGlic3NoMiBsaWJnY3J5cHQiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9saWJnaXQyL2xpYmdpdDIuZ2l0O2JyYW5jaD1tYWludC92MC4yOCIKLVNSQ1JFViA9ICI3Y2U4OGU2NmExOWUzYjQ4MzQwYWJjZGQ4NmFlYWFlMTg4MmU2M2NjIgorU1JDUkVWID0gIjEwNmE1ZjI3NTg2NTA0ZWEzNzE1MjgxOTFmMGVhM2FhYzJhZDQzMmIiCiAKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKQEAgLTE1LDYgKzE1LDcgQEAKIEVYVFJBX09FQ01BS0UgPSAiXAogICAgIC1EQlVJTERfQ0xBUj1PRkYgXAogICAgIC1EQ01BS0VfQlVJTERfVFlQRT1SZWxXaXRoRGViSW5mbyBcCisgICAgLURMSUJfSU5TVEFMTF9ESVI9JHtsaWJkaXJ9IFwKICIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJteG1sL2xpYm14bWxfMy4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGlibXhtbC9saWJteG1sXzMuMS5iYgpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJteG1sL2xpYm14bWxfMy4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJteG1sL2xpYm14bWxfMy4xLmJiCmluZGV4IDVjYTJkZGEuLjRlNzdkNmMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYm14bWwvbGlibXhtbF8zLjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGlibXhtbC9saWJteG1sXzMuMS5iYgpAQCAtNSw3ICs1LDcgQEAKIEJVR1RSQUNLRVIgPSAiaHR0cHM6Ly9naXRodWIuY29tL21pY2hhZWxyc3dlZXQvbXhtbC9pc3N1ZXMiCiAKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9taWNoYWVscnN3ZWV0L214bWwuZ2l0IgotU1JDUkVWID0gImM3NzU1YjY5OTJhMmFmZGQzNGRkZTQ3ZmM5YmU5N2YxMjM3Y2ZkZWQiCitTUkNSRVYgPSAiZTQ4M2U1ZmQ4YTMzMzg2ZmQ0Njk2NzY4MTUyMWJkZDJkYTJiNTQ4ZiIKIFMgPSAiJHtXT1JLRElSfS9naXQiCiAKIGluaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJuaWgvbGlibmloLTEuMC4zLzAwMDEtVXBkYXRlLWF1dG90b29sLWZpbGVzLWFsc28tbWFrZS1pdC13b3JrLXdpdGgtbGF0ZXN0LS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYm5paC9saWJuaWgtMS4wLjMvMDAwMS1VcGRhdGUtYXV0b3Rvb2wtZmlsZXMtYWxzby1tYWtlLWl0LXdvcmstd2l0aC1sYXRlc3QtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODU3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJuaWgvbGlibmloLTEuMC4zLzAwMDEtVXBkYXRlLWF1dG90b29sLWZpbGVzLWFsc28tbWFrZS1pdC13b3JrLXdpdGgtbGF0ZXN0LS5wYXRjaApAQCAtMCwwICsxLDI0MzEwIEBACitGcm9tIDBmMWNjMWJjNjE1ODA3ZTgxZmQyNzA5ZDQxNzdjYTQxMTY4NDQ2YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA3IERlYyAyMDE5IDAwOjQ1OjIzIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIFVwZGF0ZSBhdXRvdG9vbCBmaWxlcywgYWxzbyBtYWtlIGl0IHdvcmsgd2l0aCBsYXRlc3QgZ2V0dGV4dAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0RlYWQgdXBzdHJlYW1dCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgQUJPVVQtTkxTICAgICAgICAgICAgICAgfCAgMTA2OSArLS0KKyBDaGFuZ2VMb2cgICAgICAgICAgICAgICB8ICAgICA3ICsKKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICB8ICAgICAyICstCisgY29uZmlndXJlLmFjICAgICAgICAgICAgfCAgICAgNiArLQorIGludGwvQ2hhbmdlTG9nICAgICAgICAgIHwgICAgIDQgLQorIGludGwvTWFrZWZpbGUuaW4gICAgICAgIHwgICA1ODcgLS0KKyBpbnRsL1ZFUlNJT04gICAgICAgICAgICB8ICAgICAxIC0KKyBpbnRsL2JpbmR0ZXh0ZG9tLmMgICAgICB8ICAgMzQwIC0KKyBpbnRsL2NvbmZpZy5jaGFyc2V0ICAgICB8ICAgNjQwIC0tCisgaW50bC9kY2dldHRleHQuYyAgICAgICAgfCAgICA1NiAtCisgaW50bC9kY2lnZXR0ZXh0LmMgICAgICAgfCAgMTY4OSAtLS0tLQorIGludGwvZGNuZ2V0dGV4dC5jICAgICAgIHwgICAgNTcgLQorIGludGwvZGdldHRleHQuYyAgICAgICAgIHwgICAgNTggLQorIGludGwvZG5nZXR0ZXh0LmMgICAgICAgIHwgICAgNTkgLQorIGludGwvZXZhbC1wbHVyYWwuaCAgICAgIHwgICAxMDggLQorIGludGwvZXhwbG9kZW5hbWUuYyAgICAgIHwgICAxMzUgLQorIGludGwvZXhwb3J0LmggICAgICAgICAgIHwgICAgIDYgLQorIGludGwvZmluZGRvbWFpbi5jICAgICAgIHwgICAyMTIgLQorIGludGwvZ2V0dGV4dC5jICAgICAgICAgIHwgICAgNjMgLQorIGludGwvZ2V0dGV4dFAuaCAgICAgICAgIHwgICAyOTcgLQorIGludGwvZ21vLmggICAgICAgICAgICAgIHwgICAxNTIgLQorIGludGwvaGFzaC1zdHJpbmcuYyAgICAgIHwgICAgNTEgLQorIGludGwvaGFzaC1zdHJpbmcuaCAgICAgIHwgICAgMzYgLQorIGludGwvaW50bC1jb21wYXQuYyAgICAgIHwgICAxMzMgLQorIGludGwvaW50bC1leHBvcnRzLmMgICAgIHwgICAgMzYgLQorIGludGwvbDEwbmZsaXN0LmMgICAgICAgIHwgICA0MDAgLS0KKyBpbnRsL2xhbmdwcmVmcy5jICAgICAgICB8ICAgMTMwIC0KKyBpbnRsL2xpYmdudWludGwuaC5pbiAgICB8ICAgNDE5IC0tCisgaW50bC9saWJpbnRsLnJjICAgICAgICAgfCAgICAzOCAtCisgaW50bC9sb2FkaW5mby5oICAgICAgICAgfCAgIDEzMiAtCisgaW50bC9sb2FkbXNnY2F0LmMgICAgICAgfCAgMTMzNiAtLS0tCisgaW50bC9sb2NhbGNoYXJzZXQuYyAgICAgfCAgIDQ2MSAtLQorIGludGwvbG9jYWxjaGFyc2V0LmggICAgIHwgICAgNDIgLQorIGludGwvbG9jYWxlLmFsaWFzICAgICAgIHwgICAgNzcgLQorIGludGwvbG9jYWxlYWxpYXMuYyAgICAgIHwgICA0MzkgLS0KKyBpbnRsL2xvY2FsZW5hbWUuYyAgICAgICB8ICAxNTA3IC0tLS0KKyBpbnRsL2xvY2suYyAgICAgICAgICAgICB8ICAgOTIyIC0tLQorIGludGwvbG9jay5oICAgICAgICAgICAgIHwgIDExMDUgLS0tCisgaW50bC9sb2cuYyAgICAgICAgICAgICAgfCAgIDExNiAtCisgaW50bC9uZ2V0dGV4dC5jICAgICAgICAgfCAgICA2NSAtCisgaW50bC9vczJjb21wYXQuYyAgICAgICAgfCAgICA5OCAtCisgaW50bC9vczJjb21wYXQuaCAgICAgICAgfCAgICA0NiAtCisgaW50bC9vc2RlcC5jICAgICAgICAgICAgfCAgICAyNiAtCisgaW50bC9wbHVyYWwtZXhwLmMgICAgICAgfCAgIDE1NSAtCisgaW50bC9wbHVyYWwtZXhwLmggICAgICAgfCAgIDEyOSAtCisgaW50bC9wbHVyYWwuYyAgICAgICAgICAgfCAgMTk4MSAtLS0tLS0KKyBpbnRsL3BsdXJhbC55ICAgICAgICAgICB8ICAgMzg1IC0tCisgaW50bC9wcmludGYtYXJncy5jICAgICAgfCAgIDE4OCAtCisgaW50bC9wcmludGYtYXJncy5oICAgICAgfCAgIDE1NSAtCisgaW50bC9wcmludGYtcGFyc2UuYyAgICAgfCAgIDU5MCAtLQorIGludGwvcHJpbnRmLXBhcnNlLmggICAgIHwgICAgNzUgLQorIGludGwvcHJpbnRmLmMgICAgICAgICAgIHwgICA0MjcgLS0KKyBpbnRsL3JlZi1hZGQuc2luICAgICAgICB8ICAgIDMxIC0KKyBpbnRsL3JlZi1kZWwuc2luICAgICAgICB8ICAgIDI2IC0KKyBpbnRsL3JlbG9jYXRhYmxlLmMgICAgICB8ICAgNDY4IC0tCisgaW50bC9yZWxvY2F0YWJsZS5oICAgICAgfCAgICA3OSAtCisgaW50bC90ZXh0ZG9tYWluLmMgICAgICAgfCAgIDEyNyAtCisgaW50bC90c2VhcmNoLmMgICAgICAgICAgfCAgIDY4NCAtLQorIGludGwvdHNlYXJjaC5oICAgICAgICAgIHwgICAgODMgLQorIGludGwvdmFzbnByaW50Zi5jICAgICAgIHwgIDQ2NzcgLS0tLS0tLS0tLS0tLQorIGludGwvdmFzbnByaW50Zi5oICAgICAgIHwgICAgNzggLQorIGludGwvdmFzbndwcmludGYuaCAgICAgIHwgICAgNDYgLQorIGludGwvdmVyc2lvbi5jICAgICAgICAgIHwgICAgMjYgLQorIGludGwvd3ByaW50Zi1wYXJzZS5oICAgIHwgICAgNzUgLQorIGludGwveHNpemUuaCAgICAgICAgICAgIHwgICAxMDkgLQorIG00L2ludGxtYWNvc3gubTQgICAgICAgIHwgICAgNTUgKy0KKyBwby9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgICA4ICsKKyBwby9SdWxlcy1xdW90ICAgICAgICAgICB8ICAgIDE5ICstCisgcG8vZW5AYm9sZHF1b3QuaGVhZGVyICAgfCAgICAgMiArLQorIHBvL2VuQHF1b3QuaGVhZGVyICAgICAgIHwgICAgIDIgKy0KKyBwby9pbnNlcnQtaGVhZGVyLnNpbiAgICB8ICAgICA1ICsKKyBwby9yZW1vdmUtcG90Y2RhdGUuc2luICB8ICAgICA4ICstCisgNzQgZmlsZXMgY2hhbmdlZCwgMTMzNSBpbnNlcnRpb25zKCspLCAzODY0NiBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9DaGFuZ2VMb2cKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9NYWtlZmlsZS5pbgorIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL1ZFUlNJT04KKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9iaW5kdGV4dGRvbS5jCisgZGVsZXRlIG1vZGUgMTAwNzU1IGludGwvY29uZmlnLmNoYXJzZXQKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9kY2dldHRleHQuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL2RjaWdldHRleHQuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL2RjbmdldHRleHQuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL2RnZXR0ZXh0LmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9kbmdldHRleHQuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL2V2YWwtcGx1cmFsLmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9leHBsb2RlbmFtZS5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvZXhwb3J0LmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9maW5kZG9tYWluLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9nZXR0ZXh0LmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9nZXR0ZXh0UC5oCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvZ21vLmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9oYXNoLXN0cmluZy5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvaGFzaC1zdHJpbmcuaAorIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL2ludGwtY29tcGF0LmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9pbnRsLWV4cG9ydHMuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL2wxMG5mbGlzdC5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvbGFuZ3ByZWZzLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9saWJnbnVpbnRsLmguaW4KKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9saWJpbnRsLnJjCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvbG9hZGluZm8uaAorIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL2xvYWRtc2djYXQuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL2xvY2FsY2hhcnNldC5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvbG9jYWxjaGFyc2V0LmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9sb2NhbGUuYWxpYXMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9sb2NhbGVhbGlhcy5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvbG9jYWxlbmFtZS5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvbG9jay5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvbG9jay5oCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvbG9nLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9uZ2V0dGV4dC5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvb3MyY29tcGF0LmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9vczJjb21wYXQuaAorIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL29zZGVwLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9wbHVyYWwtZXhwLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9wbHVyYWwtZXhwLmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9wbHVyYWwuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL3BsdXJhbC55CisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvcHJpbnRmLWFyZ3MuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL3ByaW50Zi1hcmdzLmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9wcmludGYtcGFyc2UuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL3ByaW50Zi1wYXJzZS5oCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvcHJpbnRmLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC9yZWYtYWRkLnNpbgorIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL3JlZi1kZWwuc2luCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvcmVsb2NhdGFibGUuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbnRsL3JlbG9jYXRhYmxlLmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC90ZXh0ZG9tYWluLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC90c2VhcmNoLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC90c2VhcmNoLmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC92YXNucHJpbnRmLmMKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC92YXNucHJpbnRmLmgKKyBkZWxldGUgbW9kZSAxMDA2NDQgaW50bC92YXNud3ByaW50Zi5oCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvdmVyc2lvbi5jCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwvd3ByaW50Zi1wYXJzZS5oCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGludGwveHNpemUuaAorCistLS0gYS9BQk9VVC1OTFMKKysrKyBiL0FCT1VULU5MUworQEAgLTEsMTA2OCArMSBAQAorLTEgTm90ZXMgb24gdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAorLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLQorLUZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKKy1hIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKKy10b2dldGhlciwgc28gdGhhdCBmcmVlIHNvZnR3YXJlIHdpbGwgZ3JhZHVhbGx5IGJlY29tZSBhYmxlIHRvIHNwZWFrIG1hbnkKKy1sYW5ndWFnZXMuICBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpcgorLW1lc3NhZ2VzLgorLQorLSAgIElmIHlvdSBmb3VuZCB0aGlzIGBBQk9VVC1OTFMnIGZpbGUgaW5zaWRlIGEgZGlzdHJpYnV0aW9uLCB5b3UgbWF5CistYXNzdW1lIHRoYXQgdGhlIGRpc3RyaWJ1dGVkIHBhY2thZ2UgZG9lcyB1c2UgR05VIGBnZXR0ZXh0JyBpbnRlcm5hbGx5LAorLWl0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvIF9ub3RfCistbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKKy10aGlzIHBhY2thZ2Ugd2l0aCBtZXNzYWdlcyB0cmFuc2xhdGVkLgorLQorLSAgIEluc3RhbGxlcnMgd2lsbCBmaW5kIGhlcmUgc29tZSB1c2VmdWwgaGludHMuICBUaGVzZSBub3RlcyBhbHNvCistZXhwbGFpbiBob3cgdXNlcnMgc2hvdWxkIHByb2NlZWQgZm9yIGdldHRpbmcgdGhlIHByb2dyYW1zIHRvIHVzZSB0aGUKKy1hdmFpbGFibGUgdHJhbnNsYXRpb25zLiAgVGhleSB0ZWxsIGhvdyBwZW9wbGUgd2FudGluZyB0byBjb250cmlidXRlIGFuZAorLXdvcmsgb24gdHJhbnNsYXRpb25zIGNhbiBjb250YWN0IHRoZSBhcHByb3ByaWF0ZSB0ZWFtLgorLQorLSAgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MgaW4gdGhlIGBpbnRsLycgZGlyZWN0b3J5IG9yIGJ1Z3Mgd2hpY2ggbWF5IGJlCistcmVsYXRlZCB0byBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91IHNob3VsZCB0ZWxsIGFib3V0IHRoZSB2ZXJzaW9uIG9mCistYGdldHRleHQnIHdoaWNoIGlzIHVzZWQuICBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZQorLWBpbnRsL1ZFUlNJT04nIGZpbGUsIGluIGludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzLgorLQorLTEuMSBRdWljayBjb25maWd1cmF0aW9uIGFkdmljZQorLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLQorLUlmIHlvdSB3YW50IHRvIGV4cGxvaXQgdGhlIGZ1bGwgcG93ZXIgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIHlvdQorLXNob3VsZCBjb25maWd1cmUgaXQgdXNpbmcKKy0KKy0gICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0CistCistdG8gZm9yY2UgdXNhZ2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzCistcGFja2FnZSwgZGVzcGl0ZSB0aGUgZXhpc3RlbmNlIG9mIGludGVybmF0aW9uYWxpemluZyBjYXBhYmlsaXRpZXMgaW4gdGhlCistb3BlcmF0aW5nIHN5c3RlbSB3aGVyZSB0aGlzIHBhY2thZ2UgaXMgYmVpbmcgaW5zdGFsbGVkLiAgU28gZmFyLCBvbmx5CistdGhlIGBnZXR0ZXh0JyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgR05VIEMgbGlicmFyeSB2ZXJzaW9uIDIgcHJvdmlkZXMgYXMKKy1tYW55IGZlYXR1cmVzIChzdWNoIGFzIGxvY2FsZSBhbGlhcywgbWVzc2FnZSBpbmhlcml0YW5jZSwgYXV0b21hdGljCistY2hhcnNldCBjb252ZXJzaW9uIG9yIHBsdXJhbCBmb3JtIGhhbmRsaW5nKSBhcyB0aGUgaW1wbGVtZW50YXRpb24gaGVyZS4KKy1JdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvbiB0b3AKKy1vZiBhIGBjYXRnZXRzJyBpbXBsZW1lbnRhdGlvbi4gIEZ1dHVyZSB2ZXJzaW9ucyBvZiBHTlUgYGdldHRleHQnIHdpbGwKKy12ZXJ5IGxpa2VseSBjb252ZXkgZXZlbiBtb3JlIGZ1bmN0aW9uYWxpdHkuICBTbyBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYQorLXRvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCistCistICAgU28geW91IG5lZWQgX25vdF8gcHJvdmlkZSB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIHVzaW5nIEdOVSBsaWJjIDIgb3IKKy15b3UgaGF2ZSBpbnN0YWxsZWQgYSByZWNlbnQgY29weSBvZiB0aGUgR05VIGdldHRleHQgcGFja2FnZSB3aXRoIHRoZQorLWluY2x1ZGVkIGBsaWJpbnRsJy4KKy0KKy0xLjIgSU5TVEFMTCBNYXR0ZXJzCistPT09PT09PT09PT09PT09PT09PQorLQorLVNvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcworLXRoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuICBNb3N0IHN1Y2gKKy1wYWNrYWdlcyB1c2UgR05VIGBnZXR0ZXh0Jy4gIE90aGVyIHBhY2thZ2VzIGhhdmUgdGhlaXIgb3duIHdheXMgdG8KKy1pbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCistCistICAgQnkgZGVmYXVsdCwgdGhpcyBwYWNrYWdlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIGFsbG93IHRyYW5zbGF0aW9uIG9mCistbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5CistcHJvdmlkZXMgdGhlIEdOVSBgZ2V0dGV4dCcgZnVuY3Rpb25zLiAgSWYgbm90LCB0aGUgaW5jbHVkZWQgR05VCistYGdldHRleHQnIGxpYnJhcnkgd2lsbCBiZSB1c2VkLiAgVGhpcyBsaWJyYXJ5IGlzIHdob2xseSBjb250YWluZWQKKy13aXRoaW4gdGhpcyBwYWNrYWdlLCB1c3VhbGx5IGluIHRoZSBgaW50bC8nIHN1YmRpcmVjdG9yeSwgc28gcHJpb3IKKy1pbnN0YWxsYXRpb24gb2YgdGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4KKy1JbnN0YWxsZXJzIG1heSB1c2Ugc3BlY2lhbCBvcHRpb25zIGF0IGNvbmZpZ3VyYXRpb24gdGltZSBmb3IgY2hhbmdpbmcKKy10aGUgZGVmYXVsdCBiZWhhdmlvdXIuICBUaGUgY29tbWFuZHM6CistCistICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dAorLSAgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scworLQorLXdpbGwsIHJlc3BlY3RpdmVseSwgYnlwYXNzIGFueSBwcmUtZXhpc3RpbmcgYGdldHRleHQnIHRvIHVzZSB0aGUKKy1pbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgb3IgZWxzZSwKKy1fdG90YWxseV8gZGlzYWJsZSB0cmFuc2xhdGlvbiBvZiBtZXNzYWdlcy4KKy0KKy0gICBXaGVuIHlvdSBhbHJlYWR5IGhhdmUgR05VIGBnZXR0ZXh0JyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHJ1bgorLWNvbmZpZ3VyZSB3aXRob3V0IGFuIG9wdGlvbiBmb3IgeW91ciBuZXcgcGFja2FnZSwgYGNvbmZpZ3VyZScgd2lsbAorLXByb2JhYmx5IGRldGVjdCB0aGUgcHJldmlvdXNseSBidWlsdCBhbmQgaW5zdGFsbGVkIGBsaWJpbnRsLmEnIGZpbGUgYW5kCistd2lsbCBkZWNpZGUgdG8gdXNlIHRoaXMuICBUaGlzIG1pZ2h0IG5vdCBiZSBkZXNpcmFibGUuICBZb3Ugc2hvdWxkIHVzZQorLXRoZSBtb3JlIHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBJLmUuIGlmIHRoZSBmaWxlCistYGludGwvVkVSU0lPTicgc2hvd3MgdGhhdCB0aGUgbGlicmFyeSB3aGljaCBjb21lcyB3aXRoIHRoaXMgcGFja2FnZSBpcworLW1vcmUgcmVjZW50LCB5b3Ugc2hvdWxkIHVzZQorLQorLSAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKy0KKy10byBwcmV2ZW50IGF1dG8tZGV0ZWN0aW9uLgorLQorLSAgIFRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbgorLWFuZCB0aGVyZWZvcmUgaXQgd2lsbCBub3QgYmUgdXNlZC4gIFRoZSByZWFzb24gaXMgdGhhdCBldmVuIGFuCistZW11bGF0aW9uIG9mIGBnZXR0ZXh0JyBvbiB0b3Agb2YgYGNhdGdldHMnIGNvdWxkIG5vdCBwcm92aWRlIGFsbCB0aGUKKy1leHRlbnNpb25zIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuCistCistICAgSW50ZXJuYXRpb25hbGl6ZWQgcGFja2FnZXMgdXN1YWxseSBoYXZlIG1hbnkgYHBvL0xMLnBvJyBmaWxlcywgd2hlcmUKKy1MTCBnaXZlcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgY29kZSBpZGVudGlmeWluZyB0aGUgbGFuZ3VhZ2UuICBVbmxlc3MKKy10cmFuc2xhdGlvbnMgaGF2ZSBiZWVuIGZvcmJpZGRlbiBhdCBgY29uZmlndXJlJyB0aW1lIGJ5IHVzaW5nIHRoZQorLWAtLWRpc2FibGUtbmxzJyBzd2l0Y2gsIGFsbCBhdmFpbGFibGUgdHJhbnNsYXRpb25zIGFyZSBpbnN0YWxsZWQKKy10b2dldGhlciB3aXRoIHRoZSBwYWNrYWdlLiAgSG93ZXZlciwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBMSU5HVUFTJworLW1heSBiZSBzZXQsIHByaW9yIHRvIGNvbmZpZ3VyYXRpb24sIHRvIGxpbWl0IHRoZSBpbnN0YWxsZWQgc2V0LgorLWBMSU5HVUFTJyBzaG91bGQgdGhlbiBjb250YWluIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdHdvLWxldHRlcgorLWNvZGVzLCBzdGF0aW5nIHdoaWNoIGxhbmd1YWdlcyBhcmUgYWxsb3dlZC4KKy0KKy0xLjMgVXNpbmcgVGhpcyBQYWNrYWdlCistPT09PT09PT09PT09PT09PT09PT09PQorLQorLUFzIGEgdXNlciwgaWYgeW91ciBsYW5ndWFnZSBoYXMgYmVlbiBpbnN0YWxsZWQgZm9yIHRoaXMgcGFja2FnZSwgeW91Cistb25seSBoYXZlIHRvIHNldCB0aGUgYExBTkcnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZQorLWBMTF9DQycgY29tYmluYXRpb24uICBJZiB5b3UgaGFwcGVuIHRvIGhhdmUgdGhlIGBMQ19BTEwnIG9yIHNvbWUgb3RoZXIKKy1gTENfeHh4JyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0LCB5b3Ugc2hvdWxkIHVuc2V0IHRoZW0gYmVmb3JlCistc2V0dGluZyBgTEFORycsIG90aGVyd2lzZSB0aGUgc2V0dGluZyBvZiBgTEFORycgd2lsbCBub3QgaGF2ZSB0aGUKKy1kZXNpcmVkIGVmZmVjdC4gIEhlcmUgYExMJyBpcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgbGFuZ3VhZ2UgY29kZSwgYW5kCistYENDJyBpcyBhbiBJU08gMzE2NiB0d28tbGV0dGVyIGNvdW50cnkgY29kZS4gIEZvciBleGFtcGxlLCBsZXQncworLXN1cHBvc2UgdGhhdCB5b3Ugc3BlYWsgR2VybWFuIGFuZCBsaXZlIGluIEdlcm1hbnkuICBBdCB0aGUgc2hlbGwKKy1wcm9tcHQsIG1lcmVseSBleGVjdXRlIGBzZXRlbnYgTEFORyBkZV9ERScgKGluIGBjc2gnKSwKKy1gZXhwb3J0IExBTkc7IExBTkc9ZGVfREUnIChpbiBgc2gnKSBvciBgZXhwb3J0IExBTkc9ZGVfREUnIChpbiBgYmFzaCcpLgorLVRoaXMgY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yCistYWxsLgorLQorLSAgIFlvdSBtaWdodCB0aGluayB0aGF0IHRoZSBjb3VudHJ5IGNvZGUgc3BlY2lmaWNhdGlvbiBpcyByZWR1bmRhbnQuCistQnV0IGluIGZhY3QsIHNvbWUgbGFuZ3VhZ2VzIGhhdmUgZGlhbGVjdHMgaW4gZGlmZmVyZW50IGNvdW50cmllcy4gIEZvcgorLWV4YW1wbGUsIGBkZV9BVCcgaXMgdXNlZCBmb3IgQXVzdHJpYSwgYW5kIGBwdF9CUicgZm9yIEJyYXppbC4gIFRoZQorLWNvdW50cnkgY29kZSBzZXJ2ZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpYWxlY3RzLgorLQorLSAgIFRoZSBsb2NhbGUgbmFtaW5nIGNvbnZlbnRpb24gb2YgYExMX0NDJywgd2l0aCBgTEwnIGRlbm90aW5nIHRoZQorLWxhbmd1YWdlIGFuZCBgQ0MnIGRlbm90aW5nIHRoZSBjb3VudHJ5LCBpcyB0aGUgb25lIHVzZSBvbiBzeXN0ZW1zIGJhc2VkCistb24gR05VIGxpYmMuICBPbiBvdGhlciBzeXN0ZW1zLCBzb21lIHZhcmlhdGlvbnMgb2YgdGhpcyBzY2hlbWUgYXJlCistdXNlZCwgc3VjaCBhcyBgTEwnIG9yIGBMTF9DQy5FTkNPRElORycuICBZb3UgY2FuIGdldCB0aGUgbGlzdCBvZgorLWxvY2FsZXMgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtIGZvciB5b3VyIGxhbmd1YWdlIGJ5IHJ1bm5pbmcgdGhlCistY29tbWFuZCBgbG9jYWxlIC1hIHwgZ3JlcCAnXkxMJycuCistCistICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCistRW5nbGlzaCBtZXNzYWdlIGlzIHNob3duIGluIHBsYWNlIG9mIGEgbm9uZXhpc3RlbnQgdHJhbnNsYXRpb24uICBJZiB5b3UKKy11bmRlcnN0YW5kIG90aGVyIGxhbmd1YWdlcywgeW91IGNhbiBzZXQgdXAgYSBwcmlvcml0eSBsaXN0IG9mIGxhbmd1YWdlcy4KKy1UaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCistYExBTkdVQUdFJy4gIEdOVSBgZ2V0dGV4dCcgZ2l2ZXMgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnIG92ZXIgYExBTkcnCistZm9yIHRoZSBwdXJwb3NlIG9mIG1lc3NhZ2UgaGFuZGxpbmcsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBoYXZlIGBMQU5HJworLXNldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKKy1zeXN0ZW0gbGlicmFyaWVzLiAgRm9yIGV4YW1wbGUsIHNvbWUgU3dlZGlzaCB1c2VycyB3aG8gd291bGQgcmF0aGVyCistcmVhZCB0cmFuc2xhdGlvbnMgaW4gR2VybWFuIHRoYW4gRW5nbGlzaCBmb3Igd2hlbiBTd2VkaXNoIGlzIG5vdAorLWF2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorLQorLSAgIFNwZWNpYWwgYWR2aWNlIGZvciBOb3J3ZWdpYW4gdXNlcnM6IFRoZSBsYW5ndWFnZSBjb2RlIGZvciBOb3J3ZWdpYW4KKy1ib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQorLXRyYW5zaXRpb24gcGVyaW9kLCB3aGlsZSBzb21lIG1lc3NhZ2UgY2F0YWxvZ3MgZm9yIHRoaXMgbGFuZ3VhZ2UgYXJlCistaW5zdGFsbGVkIHVuZGVyIGBuYicgYW5kIHNvbWUgb2xkZXIgb25lcyB1bmRlciBgbm8nLCBpdCdzIHJlY29tbWVuZGVkCistZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKKy1vbGRlciB0cmFuc2xhdGlvbnMgYXJlIHVzZWQuCistCistICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJworLWVudmlyb25tZW50IHZhcmlhYmxlLCBgTExfQ0MnIGNvbWJpbmF0aW9ucyBjYW4gYmUgYWJicmV2aWF0ZWQgYXMgYExMJworLXRvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50CistdG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJworLShQb3J0dWd1ZXNlIGFzIHNwb2tlbiBpbiBQb3J0dWdhbCkgaW4gdGhpcyBjb250ZXh0LgorLQorLTEuNCBUcmFuc2xhdGluZyBUZWFtcworLT09PT09PT09PT09PT09PT09PT09PQorLQorLUZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCistcGVvcGxlIHdobyBsaWtlIHRoZWlyIG93biBsYW5ndWFnZSBhbmQgd3JpdGUgaXQgd2VsbCwgYW5kIHdobyBhcmUgYWxzbworLWFibGUgdG8gc3luZXJnaXplIHdpdGggb3RoZXIgdHJhbnNsYXRvcnMgc3BlYWtpbmcgdGhlIHNhbWUgbGFuZ3VhZ2UuCistRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdC4gIFRoZSB1cC10by1kYXRlIGxpc3Qgb2YKKy10ZWFtcyBjYW4gYmUgZm91bmQgYXQgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCdzIGhvbWVwYWdlLAorLWBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy8nLCBpbiB0aGUgIlRlYW1zIiBhcmVhLgorLQorLSAgIElmIHlvdSdkIGxpa2UgdG8gdm9sdW50ZWVyIHRvIF93b3JrXyBhdCB0cmFuc2xhdGluZyBtZXNzYWdlcywgeW91Cistc2hvdWxkIGJlY29tZSBhIG1lbWJlciBvZiB0aGUgdHJhbnNsYXRpbmcgdGVhbSBmb3IgeW91ciBvd24gbGFuZ3VhZ2UuCistVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKKy1gLXJlcXVlc3QnIGFwcGVuZGVkLiAgRm9yIGV4YW1wbGUsIHNwZWFrZXJzIG9mIFN3ZWRpc2ggY2FuIHNlbmQgYQorLW1lc3NhZ2UgdG8gYHN2LXJlcXVlc3RAbGkub3JnJywgaGF2aW5nIHRoaXMgbWVzc2FnZSBib2R5OgorLQorLSAgICAgc3Vic2NyaWJlCistCistICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorLV9hY3RpdmVseV8gaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorLXJhdGhlciB0aGFuIG1lcmVseSBsdXJraW5nIGFyb3VuZC4gIElmIHlvdXIgdGVhbSBkb2VzIG5vdCBleGlzdCB5ZXQgYW5kCisteW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworLWdldCBzdGFydGVkLCBwbGVhc2Ugd3JpdGUgdG8gYGNvb3JkaW5hdG9yQHRyYW5zbGF0aW9ucHJvamVjdC5vcmcnIHRvCistcmVhY2ggdGhlIGNvb3JkaW5hdG9yIGZvciBhbGwgdHJhbnNsYXRvciB0ZWFtcy4KKy0KKy0gICBUaGUgRW5nbGlzaCB0ZWFtIGlzIHNwZWNpYWwuICBJdCB3b3JrcyBhdCBpbXByb3ZpbmcgYW5kIHVuaWZvcm1pemluZworLXRoZSB0ZXJtaW5vbG9neSBpbiB1c2UuICBQcm92ZW4gbGluZ3Vpc3RpYyBza2lsbHMgYXJlIHByYWlzZWQgbW9yZSB0aGFuCistcHJvZ3JhbW1pbmcgc2tpbGxzLCBoZXJlLgorLQorLTEuNSBBdmFpbGFibGUgUGFja2FnZXMKKy09PT09PT09PT09PT09PT09PT09PT09CistCistTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworLW1hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgTm92ZW1iZXIKKy0yMDA3LiAgVGhlIG1hdHJpeCBzaG93cywgaW4gcmVnYXJkIG9mIGVhY2ggcGFja2FnZSwgZm9yIHdoaWNoIGxhbmd1YWdlcworLVBPIGZpbGVzIGhhdmUgYmVlbiBzdWJtaXR0ZWQgdG8gdHJhbnNsYXRpb24gY29vcmRpbmF0aW9uLCB3aXRoIGEKKy10cmFuc2xhdGlvbiBwZXJjZW50YWdlIG9mIGF0IGxlYXN0IDUwJS4KKy0KKy0gICAgIFJlYWR5IFBPIGZpbGVzICAgICAgIGFmIGFtIGFyIGF6IGJlIGJnIGJzIGNhIGNzIGN5IGRhIGRlIGVsIGVuIGVuX0dCIGVvCistICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCistICAgICBDb21wZW5kaXVtICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgICB8CistICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgW10gICAgICB8CistICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CistICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CistICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgW10gICAgICB8CistICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBiaWJzaGVsZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICBbXSB8CistICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CistICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBkaWFsb2cgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSBbXSAgICAgICAgICBbXSB8CistICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgICB8CistICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAoKSBbXSAgICAgW10gICAgICB8CistICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8CistICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CistICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbXVsdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CistICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAoKSAoKSAgICAgW10gICAgICB8CistICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbnVsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtcGFja2FnZSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgW10gICAgICB8CistICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncmFtYWRvaXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CistICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBnc3RyZWFtZXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgW10gICAgICB8CistICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CistICAgICBndGthbSAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBndGtzcGVsbCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8CistICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CistICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSB8CistICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICAgICAgICBbXSB8CistICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CistICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICB8CistICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CistICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBsZWFmcGFkICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICB8CistICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CistICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICBbXSB8CistICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICB8CistICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICB8CistICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBwaWxvdC1xb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSB8CistICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CistICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICBbXSBbXSBbXSBbXSBbXSAgICAgICAgW10gICAgICB8CistICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CistICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSAoKSBbXSAgICAgW10gICBbXSB8CistICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICB8CistICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICB8CistICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICBzeXN0ZW0tdG9vbHMtYmEuLi4gfCAgICAgICBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICAgW10gICAgICB8CistICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8CistICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgKCkgICAgICB8CistICAgICB0dXhwYWludCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgW10gICBbXSB8CistICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8CistICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CistICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgICB8CistICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8CistICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgW10gICAgICB8CistICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8CistICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCistICAgICAgICAgICAgICAgICAgICAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBjeSBkYSBkZSBlbCBlbiBlbl9HQiBlbworLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIDAgIDIgIDEgIDggMjYgIDIgNDAgNDggIDIgNTYgODggMTUgIDEgIDE1ICAgMTgKKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGVzIGV0IGV1IGZhIGZpIGZyICBnYSBnbCBndSBoZSBoaSBociBodSBpZCBpcyBpdAorLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKy0gICAgIENvbXBlbmRpdW0gICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CistICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAorLSAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgYmZkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGJpYnNoZWxmICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBiaW51dGlscyAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgW10gW10gICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIHwKKy0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgIFtdICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CistICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorLSAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGNsaXNwICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgY29yZXV0aWxzICAgICAgICAgIHwgW10gW10gICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKy0gICAgIGNwaW8gICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBjcHBsaWIgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBkaWZmdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gW10gICAgW10gICAgICAgW10gW10gICAgW10gfAorLSAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKy0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorLSAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CistICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorLSAgICAgZmxleCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnYXMgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICgpIHwKKy0gICAgIGdjYWwgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnY2MgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIHwKKy0gICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CistICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorLSAgICAgZ2lwICAgICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorLSAgICAgZ211bHQgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKy0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSB8CistICAgICBnbnVjYXNoICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgfAorLSAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdIFtdICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorLSAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdwZS1jb250YWN0cyAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorLSAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdwZS1nbyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CistICAgICBncGUtbG9naW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIHwKKy0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtc2tldGNoYm9vayAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKy0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtdGltZXNoZWV0ICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGhvdG8yICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKy0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdyZXRsICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSB8CistICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorLSAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CistICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorLSAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgW10gICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKy0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CistICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorLSAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKy0gICAgIGd0a2FtICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CistICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorLSAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgW10gICAgW10gICAgW10gW10gIFtdICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKy0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CistICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSBbXSBbXSAgW10gW10gICAgW10gICAgW10gW10gW10gICAgW10gfAorLSAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gfAorLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gW10gW10gICAgW10gW10gIFtdIFtdICAgICAgICAgICAgIFtdIFtdICAgIFtdIHwKKy0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSAgICAgW10gW10gW10gW10gW10gW10gW10gICAgW10gfAorLSAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CistICAgICBpc29fNjM5ICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorLSAgICAganBpbG90ICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBqd2hvaXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAorLSAgICAga2JkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKy0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBsZCAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gIFtdICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdIHwKKy0gICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICB8CistICAgICBsaWJleGlmICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CistICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKy0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgW10gICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSB8CistICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKy0gICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgICB8CistICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIG1ha2UgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdIFtdICBbXSBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgICB8CistICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorLSAgICAgbWluaWNvbSAgICAgICAgICAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKy0gICAgIG5hbm8gICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSB8CistICAgICBvcGNvZGVzICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIHwKKy0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgICAgICAgW10gICAgfAorLSAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKy0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHJlY29kZSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgIFtdICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICBbXSB8CistICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorLSAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CistICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorLSAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgW10gICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwKKy0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdIFtdICAgICAgIFtdIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSB8CistICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CistICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorLSAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8IFtdICAgIFtdICAgIFtdIFtdICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICBbXSB8CistICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICBbXSBbXSAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorLSAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgIHwKKy0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorLSAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAorLSAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIHwKKy0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgd2RpZmYgICAgICAgICAgICAgIHwgW10gW10gICAgICAgICAgW10gIFtdIFtdICAgICAgICAgICAgIFtdIFtdICAgIFtdIHwKKy0gICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICBbXSB8CistICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gfAorLSAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKy0gICAgIHhwYWQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CistICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXMgZXQgZXUgZmEgZmkgZnIgIGdhIGdsIGd1IGhlIGhpIGhyIGh1IGlkIGlzIGl0CistICAgICAgICAgICAgICAgICAgICAgICAgICA4NSAyMiAxNCAgMiA0OCAxMDEgNjEgMTIgIDIgIDggIDIgIDYgNTMgMjkgIDEgNTIKKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGphIGthIGtvIGt1IGt5IGxnIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5lIG5sICBubgorLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKy0gICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorLSAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgIHwKKy0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICBbXSAgICAgfAorLSAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKy0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICB8CistICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CistICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gICAgIHwKKy0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8CistICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorLSAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CistICAgICBkaWZmdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorLSAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKy0gICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKy0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ211bHQgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKKy0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnbnVjYXNoICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICAgfAorLSAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CistICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdwZS1nbyAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBncGUtbG9naW4gICAgICAgICAgfCBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBncGhvdG8yICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKy0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgfAorLSAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGd0a2FtICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICBbXSAgW10gfAorLSAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgW10gfAorLSAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBpc29fNjM5ICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gfAorLSAgICAganBpbG90ICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgIHwKKy0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGxpYmlkbiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIG00ICAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIG1ha2UgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbWluaWNvbSAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8CistICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBwb3B0ICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgcHNtaXNjICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKKy0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBycG0gICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgc2NyZWVtICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICBbXSB8CistICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgW10gICAgW10gICAgICAgICAgW10gICAgICAgICAgW10gICAgW10gICAgW10gIFtdIHwKKy0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAoKSB8CistICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgc3AgICAgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8IFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKKy0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICBbXSAgW10gfAorLSAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgIHwKKy0gICAgIHdnZXQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CistICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgamEga2Ega28ga3Uga3kgbGcgbHQgbHYgbWsgbW4gbXMgbXQgbmIgbmUgbmwgIG5uCistICAgICAgICAgICAgICAgICAgICAgICAgICA1MSAgMiAyNSAgMyAgMiAgMCAgNiAgMCAgMiAgMiAyMCAgMCAxMSAgMSAxMDMgIDYKKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHBhIHBsIHB0IHB0X0JSIHJtIHJvIHJ1IHJ3IHNrIHNsIHNxIHNyIHN2ICB0YQorLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKy0gICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgIFtdICBbXSAgICAgIFtdICAgICAgIFtdICAgICAgICAgIFtdICAgICB8CistICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAoKSAgICAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgICAgICAgICB8CistICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorLSAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgfAorLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgIFtdICAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgICAgIFtdICAgICB8CistICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICBbXSBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKKy0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICAgfAorLSAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKKy0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorLSAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgIHwKKy0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICBbXSAgICAgfAorLSAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgfAorLSAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKy0gICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CistICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgIHwKKy0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICBbXSAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIFtdICAgICB8CistICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgfAorLSAgICAgZ211bHQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gW10gICAgIHwKKy0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICB8CistICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKKy0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdIFtdICAgICB8CistICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKKy0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgIFtdIFtdICAgICB8CistICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICBbXSBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKKy0gICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgIFtdICAgICBbXSAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CistICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKy0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICB8CistICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKy0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgIFtdICBbXSAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIFtdICAgICB8CistICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKy0gICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgIFtdIFtdICAgICB8CistICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgfAorLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKKy0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgfAorLSAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgIHwKKy0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgfAorLSAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgW10gW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKKy0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgIHwKKy0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSBbXSBbXSAgW10gICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgW10gfAorLSAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgIFtdIFtdICAgICB8CistICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CistICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gIFtdIHwKKy0gICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICB8CistICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorLSAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgIFtdIFtdICBbXSAgICAgIFtdICAgICAgIFtdIFtdICAgIFtdIFtdICAgICB8CistICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgfAorLSAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgIHwKKy0gICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICgpICAgICB8CistICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICBbXSAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgIFtdIFtdICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8CistICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgIFtdIFtdICBbXSAgICAgIFtdIFtdICAgICAgIFtdICAgICAgIFtdICAgICB8CistICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgfAorLSAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgIFtdIFtdIFtdICAgICB8CistICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICBbXSBbXSAgW10gICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgfAorLSAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKKy0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIFtdICAgICB8CistICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgfAorLSAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8ICAgIFtdIFtdIFtdICBbXSAgICAgIFtdICAgICAgICAgICAgIFtdIFtdIFtdICBbXSB8CistICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorLSAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKKy0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICAgfAorLSAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICBbXSAgICAgICBbXSAgICAgfAorLSAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKKy0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8CistICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLSAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKKy0gICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICB8CistICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSAgICAgfAorLSAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKKy0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgICB8CistICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgcGEgcGwgcHQgcHRfQlIgcm0gcm8gcnUgcncgc2sgc2wgc3Egc3Igc3YgIHRhCistICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgNSA3NyAzMSAgNTMgICAgNCA1OCA3MiAgMyA0NSA0NiAgOSA0NSAxMjIgIDMKKy0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgIHRnIHRoIHRrIHRyIHVrIHZlbiB2aSAgd2EgeGggemhfQ04gemhfSEsgemhfVFcgenUKKy0gICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworLSAgICAgQ29tcGVuZGl1bSAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE5CistICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTkKKy0gICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorLSAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CistICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKy0gICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICgpICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorLSAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CistICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKy0gICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorLSAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CistICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDkKKy0gICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyMAorLSAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE4CistICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjgKKy0gICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorLSAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CistICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKy0gICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxOAorLSAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDExCistICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTIKKy0gICAgIGNyeXB0b25pdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorLSAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8ICA5CistICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjkKKy0gICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorLSAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCistICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKy0gICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorLSAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCistICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTgKKy0gICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNQorLSAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCistICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGdhd2sgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxNgorLSAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CistICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDcKKy0gICAgIGdldHRleHQtZXhhbXBsZXMgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgfCAyOQorLSAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDI4CistICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjAKKy0gICAgIGdpcCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMworLSAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCistICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTUKKy0gICAgIGdtdWx0ICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxNgorLSAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCistICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKy0gICAgIGdudWVkdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorLSAgICAgZ251bGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCistICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKy0gICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworLSAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CistICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTQKKy0gICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxNAorLSAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CistICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMjEKKy0gICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAxNgorLSAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEwCistICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjIKKy0gICAgIGdwZS1maWxlbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworLSAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDE5CistICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKKy0gICAgIGdwZS1vd25lcmluZm8gICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMQorLSAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CistICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKKy0gICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMQorLSAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDIxCistICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTgKKy0gICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMQorLSAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CistICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKKy0gICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMworLSAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CistICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKy0gICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorLSAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CistICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDkKKy0gICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworLSAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEzCistICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKy0gICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgfCAxNgorLSAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEzCistICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTgKKy0gICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworLSAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CistICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKy0gICAgIGd0a3NwZWxsICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgW10gICAgIFtdICAgIFtdICAgIFtdICAgICAgfCAyNworLSAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CistICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMzgKKy0gICAgIGhlcnJpZSAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorLSAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCistICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKy0gICAgIGluZGVudCAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyOAorLSAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA0CistICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSBbXSBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICBbXSAgICAgIHwgNTQKKy0gICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAgNAorLSAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgW10gICAgICAgICAgICB8IDI0CistICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICAgICAgICAgIHwgMjYKKy0gICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAgNworLSAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCistICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKKy0gICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMworLSAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4CistICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKy0gICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorLSAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CistICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTAKKy0gICAgIGxlYWZwYWQgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyNAorLSAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE5CistICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKy0gICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorLSAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDIwCistICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKy0gICAgIGxpYmdwaG90bzIgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorLSAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCistICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKy0gICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorLSAgICAgbGliaWRuICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDExCistICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKy0gICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorLSAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CistICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKy0gICAgIGx5bnggICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNQorLSAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE4CistICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorLSAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDIwCistICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKy0gICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorLSAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDIwCistICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKy0gICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMQorLSAgICAgcGlsb3QtcW9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCistICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTgKKy0gICAgIHBzbWlzYyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMAorLSAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCistICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKy0gICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworLSAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDI1CistICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKKy0gICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorLSAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDI2CistICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjMKKy0gICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAyOQorLSAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIzCistICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworLSAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCistICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKy0gICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworLSAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgICAgW10gICAgW10gW10gICAgIFtdICAgICBbXSAgW10gICAgICAgICAgW10gICAgICB8IDM4CistICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKKy0gICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxNQorLSAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCistICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTkKKy0gICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorLSAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCistICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKKy0gICAgIHV0aWwtbGludXgtbmcgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMAorLSAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CistICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKy0gICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMworLSAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIwCistICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjkKKy0gICAgIHhrZXlib2FyZC1jb25maWcgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorLSAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE1CistICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKy0gICAgICAgNzYgdGVhbXMgICAgICAgICAgIHRnIHRoIHRrIHRyIHVrIHZlbiB2aSAgd2EgeGggemhfQ04gemhfSEsgemhfVFcgenUKKy0gICAgICAxNjMgZG9tYWlucyAgICAgICAgICAwICAzICAxIDc0IDUxICAwICAxNDMgMjEgIDEgIDU3ICAgICA3ICAgIDQ1ICAgIDAgIDIwMzYKKy0KKy0gICBTb21lIGNvdW50ZXJzIGluIHRoZSBwcmVjZWRpbmcgbWF0cml4IGFyZSBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mCistdmlzaWJsZSBibG9ja3MgbGV0IHVzIGV4cGVjdC4gIFRoaXMgaXMgYmVjYXVzZSBhIGZldyBleHRyYSBQTyBmaWxlcyBhcmUKKy11c2VkIGZvciBpbXBsZW1lbnRpbmcgcmVnaW9uYWwgdmFyaWFudHMgb2YgbGFuZ3VhZ2VzLCBvciBsYW5ndWFnZQorLWRpYWxlY3RzLgorLQorLSAgIEZvciBhIFBPIGZpbGUgaW4gdGhlIG1hdHJpeCBhYm92ZSB0byBiZSBlZmZlY3RpdmUsIHRoZSBwYWNrYWdlIHRvCistd2hpY2ggaXQgYXBwbGllcyBzaG91bGQgYWxzbyBoYXZlIGJlZW4gaW50ZXJuYXRpb25hbGl6ZWQgYW5kCistZGlzdHJpYnV0ZWQgYXMgc3VjaCBieSBpdHMgbWFpbnRhaW5lci4gIFRoZXJlIG1pZ2h0IGJlIGFuIG9ic2VydmFibGUKKy1sYWcgYmV0d2VlbiB0aGUgbWVyZSBleGlzdGVuY2UgYSBQTyBmaWxlIGFuZCBpdHMgd2lkZSBhdmFpbGFiaWxpdHkgaW4gYQorLWRpc3RyaWJ1dGlvbi4KKy0KKy0gICBJZiBOb3ZlbWJlciAyMDA3IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkKKy1vZiB0aGlzIGBBQk9VVC1OTFMnIGZpbGUgb24gbW9zdCBHTlUgYXJjaGl2ZSBzaXRlcy4gIFRoZSBtb3N0CistdXAtdG8tZGF0ZSBtYXRyaXggd2l0aCBmdWxsIHBlcmNlbnRhZ2UgZGV0YWlscyBjYW4gYmUgZm91bmQgYXQKKy1gaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvZXh0cmEvbWF0cml4Lmh0bWwnLgorLQorLTEuNiBVc2luZyBgZ2V0dGV4dCcgaW4gbmV3IHBhY2thZ2VzCistPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0KKy1JZiB5b3UgYXJlIHdyaXRpbmcgYSBmcmVlbHkgYXZhaWxhYmxlIHByb2dyYW0gYW5kIHdhbnQgdG8KKy1pbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCistcGFja2FnZS4gIE9mIGNvdXJzZSB5b3UgaGF2ZSB0byByZXNwZWN0IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLUxpY2Vuc2Ugd2hpY2ggY292ZXJzIHRoZSB1c2Ugb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4gIFRoaXMgbWVhbnMKKy1pbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAorLWxpYnJhcnksIHdoZXJlYXMgb25seSBmcmVlIHNvZnR3YXJlIGNhbiB1c2UgYGxpYmludGwnIGFzIGEgc3RhdGljCistbGlicmFyeSBvciB1c2UgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYGxpYmludGwnLgorLQorLSAgIE9uY2UgdGhlIHNvdXJjZXMgYXJlIGNoYW5nZWQgYXBwcm9wcmlhdGVseSBhbmQgdGhlIHNldHVwIGNhbiBoYW5kbGUKKy10aGUgdXNlIG9mIGBnZXR0ZXh0JyB0aGUgb25seSB0aGluZyBtaXNzaW5nIGFyZSB0aGUgdHJhbnNsYXRpb25zLiAgVGhlCistRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBwYWNrYWdlcyB3aGljaCBhcmUgbm90CistZGV2ZWxvcGVkIGluc2lkZSB0aGUgR05VIHByb2plY3QuICBUaGVyZWZvcmUgdGhlIGluZm9ybWF0aW9uIGdpdmVuIGFib3ZlCistYXBwbGllcyBhbHNvIGZvciBldmVyeSBvdGhlciBGcmVlIFNvZnR3YXJlIFByb2plY3QuICBDb250YWN0CistYGNvb3JkaW5hdG9yQHRyYW5zbGF0aW9ucHJvamVjdC5vcmcnIHRvIG1ha2UgdGhlIGAucG90JyBmaWxlcyBhdmFpbGFibGUKKy10byB0aGUgdHJhbnNsYXRpb24gdGVhbXMuCistCisrPGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2V0dGV4dC9tYW51YWwvaHRtbF9ub2RlL1VzZXJzLmh0bWw+CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSwxMCBAQAorKzIwMTktMTItMDcgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKysKKysJKiBtNC9pbnRsbWFjb3N4Lm00OiBVcGdyYWRlIHRvIGdldHRleHQtMC4yMC4xLgorKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogUmVtb3ZlIGludGwuCisrCSogY29uZmlndXJlLmFjIChBQ19DT05GSUdfRklMRVMpOiBSZW1vdmUgaW50bC9NYWtlZmlsZS4KKysJKEFNX0dOVV9HRVRURVhUX1ZFUlNJT04pOiBCdW1wIHRvIDAuMjAuCisrCisgMjAxMy0wMy0xMyAgU3RldmUgTGFuZ2FzZWsgIDxzdGV2ZS5sYW5nYXNla0B1YnVudHUuY29tPgorIAorIAkqIG5paC93YXRjaC5jIChuaWhfd2F0Y2hfd2Fsa19maWx0ZXIpOiBOZXcgTmloRmlsZUZpbHRlciBmdW5jdGlvbgorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKy1TVUJESVJTID0gbTQgaW50bCBuaWggbmloLWRidXMgbmloLWRidXMtdG9vbCBwbworK1NVQkRJUlMgPSBtNCBuaWggbmloLWRidXMgbmloLWRidXMtdG9vbCBwbworIAorIEVYVFJBX0RJU1QgPSBIQUNLSU5HCisgCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE1LDggKzE1LDggQEAgQU1fTUFJTlRBSU5FUl9NT0RFKFtlbmFibGVdKQorIExUX1BSRVJFUSgyLjIuNCkKKyBMVF9JTklUCisgCistQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xN10pCistQU1fR05VX0dFVFRFWFQoKQorK0FNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMjBdKQorK0FNX0dOVV9HRVRURVhUKFtleHRlcm5hbF0pCisgCisgIyBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKK0BAIC01OCw3ICs1OCw3IEBAIEFTX0lGKFt0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9ICJ5ZXMiXSwKKyAJICAgICAgQUNfU1VCU1QoW05JSF9EQlVTX1RPT0xdLCBbIlwke3RvcF9idWlsZGRpcn0vbmloLWRidXMtdG9vbC9uaWgtZGJ1cy10b29sIl0pXSldLAorICAgICAgIFtBQ19TVUJTVChbTklIX0RCVVNfVE9PTF0sIFsiXCR7dG9wX2J1aWxkZGlyfS9uaWgtZGJ1cy10b29sL25paC1kYnVzLXRvb2wiXSldKQorIAorLUFDX0NPTkZJR19GSUxFUyhbIE1ha2VmaWxlIG00L01ha2VmaWxlIGludGwvTWFrZWZpbGUKKytBQ19DT05GSUdfRklMRVMoWyBNYWtlZmlsZSBtNC9NYWtlZmlsZQorIAkJICBuaWgvTWFrZWZpbGUgbmloL2xpYm5paC5wYworIAkJICBuaWgtZGJ1cy9NYWtlZmlsZSBuaWgtZGJ1cy9saWJuaWgtZGJ1cy5wYworIAkJICBuaWgtZGJ1cy10b29sL01ha2VmaWxlCistLS0gYS9pbnRsL0NoYW5nZUxvZworKysrIC9kZXYvbnVsbAorQEAgLTEsNCArMCwwIEBACistMjAwNy0xMS0wNyAgR05VICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CistCistCSogVmVyc2lvbiAwLjE3IHJlbGVhc2VkLgorLQorLS0tIGEvaW50bC9NYWtlZmlsZS5pbgorKysrIC9kZXYvbnVsbAorQEAgLTEsNTg3ICswLDAgQEAKKy0jIE1ha2VmaWxlIGZvciBkaXJlY3Rvcnkgd2l0aCBtZXNzYWdlIGNhdGFsb2cgaGFuZGxpbmcgbGlicmFyeSBvZiBHTlUgZ2V0dGV4dAorLSMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0jIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistIyBVU0EuCistCistUEFDS0FHRSA9IEBQQUNLQUdFQAorLVZFUlNJT04gPSBAVkVSU0lPTkAKKy0KKy1TSEVMTCA9IC9iaW4vc2gKKy0KKy1zcmNkaXIgPSBAc3JjZGlyQAorLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKy10b3BfYnVpbGRkaXIgPSAuLgorLQorLSMgVGhlIFZQQVRIIHZhcmlhYmxlcyBhbGxvd3MgYnVpbGRzIHdpdGggJGJ1aWxkZGlyICE9ICRzcmNkaXIsIGFzc3VtaW5nIGEKKy0jICdtYWtlJyBwcm9ncmFtIHRoYXQgc3VwcG9ydHMgVlBBVEggKHN1Y2ggYXMgR05VIG1ha2UpLiBUaGlzIGxpbmUgaXMgcmVtb3ZlZAorLSMgYnkgYXV0b2NvbmYgYXV0b21hdGljYWxseSB3aGVuICIkKHNyY2RpcikiID0gIi4iLgorLSMgSW4gdGhpcyBkaXJlY3RvcnksIHRoZSBWUEFUSCBoYW5kbGluZyBpcyBwYXJ0aWN1bGFyOgorLSMgMS4gSWYgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVggaXMgJ2wnIChpbmRpY2F0aW5nIGEgYnVpbGQgd2l0aCBsaWJ0b29sKSwKKy0jICAgIHRoZSAuYyAtPiAubG8gcnVsZXMgY2FyZWZ1bGx5IHVzZSAkKHNyY2RpciksIHNvIHRoYXQgVlBBVEggY2FuIGJlIG9taXR0ZWQuCistIyAyLiBJZiBQQUNLQUdFID0gZ2V0dGV4dC10b29scywgVlBBVEggX211c3RfIGJlIG9taXR0ZWQsIGJlY2F1c2Ugb3RoZXJ3aXNlCistIyAgICAnbWFrZScgZG9lcyB0aGUgd3JvbmcgdGhpbmcgaWYgR05VIGdldHRleHQgd2FzIGNvbmZpZ3VyZWQgd2l0aAorLSMgICAgIi4vY29uZmlndXJlIC0tc3JjZGlyPWBwd2RgIiwgbmFtZWx5IGl0IGdldHMgY29uZnVzZWQgYnkgdGhlIC5sbyBhbmQgLmxhCistIyAgICBmaWxlcyBpdCBmaW5kcyBpbiBzcmNkaXIgPSAuLi8uLi9nZXR0ZXh0LXJ1bnRpbWUvaW50bC4KKy1WUEFUSCA9ICQoc3JjZGlyKQorLQorLXByZWZpeCA9IEBwcmVmaXhACistZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACistdHJhbnNmb3JtID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACistbGliZGlyID0gQGxpYmRpckAKKy1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACistZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACistZGF0YWRpciA9IEBkYXRhZGlyQAorLWxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCistZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9pbnRsCistYWxpYXNwYXRoID0gJChsb2NhbGVkaXIpCistc3ViZGlyID0gaW50bAorLQorLUlOU1RBTEwgPSBASU5TVEFMTEAKKy1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorLQorLSMgV2UgdXNlICQobWtkaXJfcCkuCistIyBJbiBhdXRvbWFrZSA8PSAxLjkueCwgJChta2Rpcl9wKSBpcyBkZWZpbmVkIGVpdGhlciBhcyAibWtkaXIgLXAgLS0iIG9yIGFzCistIyAiJChta2luc3RhbGxkaXJzKSIgb3IgYXMgIiQoaW5zdGFsbF9zaCkgLWQiLiBGb3IgdGhlc2UgYXV0b21ha2UgdmVyc2lvbnMsCistIyBAaW5zdGFsbF9zaEAgZG9lcyBub3Qgc3RhcnQgd2l0aCAkKFNIRUxMKSwgc28gd2UgYWRkIGl0LgorLSMgSW4gYXV0b21ha2UgPj0gMS4xMCwgQG1rZGlyX3BAIGlzIGRlcml2ZWQgZnJvbSAke01LRElSX1B9LCB3aGljaCBpcyBkZWZpbmVkCistIyBlaXRoZXIgYXMgIi9wYXRoL3RvL21rZGlyIC1wIiBvciAiLi4uL2luc3RhbGwtc2ggLWMgLWQiLiBGb3IgdGhlc2UgYXV0b21ha2UKKy0jIHZlcnNpb25zLCAkKG1raW5zdGFsbGRpcnMpIGFuZCAkKGluc3RhbGxfc2gpIGFyZSB1bnVzZWQuCistbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpIEBpbnN0YWxsX3NoQCAtZAorLWluc3RhbGxfc2ggPSAkKFNIRUxMKSBAaW5zdGFsbF9zaEAKKy1NS0RJUl9QID0gQE1LRElSX1BACistbWtkaXJfcCA9IEBta2Rpcl9wQAorLQorLWwgPSBASU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhACistCistQVIgPSBhcgorLUNDID0gQENDQAorLUxJQlRPT0wgPSBATElCVE9PTEAKKy1SQU5MSUIgPSBAUkFOTElCQAorLVlBQ0MgPSBASU5UTEJJU09OQCAteSAtZAorLVlGTEFHUyA9IC0tbmFtZS1wcmVmaXg9X19nZXR0ZXh0CistV0lORFJFUyA9IEBXSU5EUkVTQAorLQorLSMgLURCVUlMRElOR19MSUJJTlRMOiBDaGFuZ2UgZXhwYW5zaW9uIG9mIExJQklOVExfRExMX0VYUE9SVEVEIG1hY3JvLgorLSMgLURCVUlMRElOR19ETEw6IENoYW5nZSBleHBhbnNpb24gb2YgUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVEIG1hY3JvLgorLURFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ETE9DQUxFX0FMSUFTX1BBVEg9XCIkKGFsaWFzcGF0aClcIiBcCistLURMSUJESVI9XCIkKGxpYmRpcilcIiAtREJVSUxESU5HX0xJQklOVEwgLURCVUlMRElOR19ETEwgLURJTl9MSUJJTlRMIFwKKy0tREVOQUJMRV9SRUxPQ0FUQUJMRT0xIC1ESU5fTElCUkFSWSAtRElOU1RBTExESVI9XCIkKGxpYmRpcilcIiAtRE5PX1hNQUxMT0MgXAorLS1Ec2V0X3JlbG9jYXRpb25fcHJlZml4PWxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IFwKKy0tRHJlbG9jYXRlPWxpYmludGxfcmVsb2NhdGUgXAorLS1EREVQRU5EU19PTl9MSUJJQ09OVj0xIEBERUZTQAorLUNQUEZMQUdTID0gQENQUEZMQUdTQAorLUNGTEFHUyA9IEBDRkxBR1NAIEBDRkxBR19WSVNJQklMSVRZQAorLUxERkxBR1MgPSBATERGTEFHU0AgJChMREZMQUdTX0BXT0UzMkRMTEApCistTERGTEFHU195ZXMgPSAtV2wsLS1leHBvcnQtYWxsLXN5bWJvbHMKKy1MREZMQUdTX25vID0KKy1MSUJTID0gQExJQlNACistCistQ09NUElMRSA9ICQoQ0MpIC1jICQoREVGUykgJChJTkNMVURFUykgJChDUFBGTEFHUykgJChDRkxBR1MpICQoWENGTEFHUykKKy0KKy1IRUFERVJTID0gXAorLSAgZ21vLmggXAorLSAgZ2V0dGV4dFAuaCBcCistICBoYXNoLXN0cmluZy5oIFwKKy0gIGxvYWRpbmZvLmggXAorLSAgcGx1cmFsLWV4cC5oIFwKKy0gIGV2YWwtcGx1cmFsLmggXAorLSAgbG9jYWxjaGFyc2V0LmggXAorLSAgbG9jay5oIFwKKy0gIHJlbG9jYXRhYmxlLmggXAorLSAgdHNlYXJjaC5oIHRzZWFyY2guYyBcCistICB4c2l6ZS5oIFwKKy0gIHByaW50Zi1hcmdzLmggcHJpbnRmLWFyZ3MuYyBcCistICBwcmludGYtcGFyc2UuaCB3cHJpbnRmLXBhcnNlLmggcHJpbnRmLXBhcnNlLmMgXAorLSAgdmFzbnByaW50Zi5oIHZhc253cHJpbnRmLmggdmFzbnByaW50Zi5jIFwKKy0gIG9zMmNvbXBhdC5oIFwKKy0gIGxpYmdudWludGwuaC5pbgorLVNPVVJDRVMgPSBcCistICBiaW5kdGV4dGRvbS5jIFwKKy0gIGRjZ2V0dGV4dC5jIFwKKy0gIGRnZXR0ZXh0LmMgXAorLSAgZ2V0dGV4dC5jIFwKKy0gIGZpbmRkb21haW4uYyBcCistICBoYXNoLXN0cmluZy5jIFwKKy0gIGxvYWRtc2djYXQuYyBcCistICBsb2NhbGVhbGlhcy5jIFwKKy0gIHRleHRkb21haW4uYyBcCistICBsMTBuZmxpc3QuYyBcCistICBleHBsb2RlbmFtZS5jIFwKKy0gIGRjaWdldHRleHQuYyBcCistICBkY25nZXR0ZXh0LmMgXAorLSAgZG5nZXR0ZXh0LmMgXAorLSAgbmdldHRleHQuYyBcCistICBwbHVyYWwueSBcCistICBwbHVyYWwtZXhwLmMgXAorLSAgbG9jYWxjaGFyc2V0LmMgXAorLSAgbG9jay5jIFwKKy0gIHJlbG9jYXRhYmxlLmMgXAorLSAgbGFuZ3ByZWZzLmMgXAorLSAgbG9jYWxlbmFtZS5jIFwKKy0gIGxvZy5jIFwKKy0gIHByaW50Zi5jIFwKKy0gIHZlcnNpb24uYyBcCistICBvc2RlcC5jIFwKKy0gIG9zMmNvbXBhdC5jIFwKKy0gIGludGwtZXhwb3J0cy5jIFwKKy0gIGludGwtY29tcGF0LmMKKy1PQkpFQ1RTID0gXAorLSAgYmluZHRleHRkb20uJGxvIFwKKy0gIGRjZ2V0dGV4dC4kbG8gXAorLSAgZGdldHRleHQuJGxvIFwKKy0gIGdldHRleHQuJGxvIFwKKy0gIGZpbmRkb21haW4uJGxvIFwKKy0gIGhhc2gtc3RyaW5nLiRsbyBcCistICBsb2FkbXNnY2F0LiRsbyBcCistICBsb2NhbGVhbGlhcy4kbG8gXAorLSAgdGV4dGRvbWFpbi4kbG8gXAorLSAgbDEwbmZsaXN0LiRsbyBcCistICBleHBsb2RlbmFtZS4kbG8gXAorLSAgZGNpZ2V0dGV4dC4kbG8gXAorLSAgZGNuZ2V0dGV4dC4kbG8gXAorLSAgZG5nZXR0ZXh0LiRsbyBcCistICBuZ2V0dGV4dC4kbG8gXAorLSAgcGx1cmFsLiRsbyBcCistICBwbHVyYWwtZXhwLiRsbyBcCistICBsb2NhbGNoYXJzZXQuJGxvIFwKKy0gIGxvY2suJGxvIFwKKy0gIHJlbG9jYXRhYmxlLiRsbyBcCistICBsYW5ncHJlZnMuJGxvIFwKKy0gIGxvY2FsZW5hbWUuJGxvIFwKKy0gIGxvZy4kbG8gXAorLSAgcHJpbnRmLiRsbyBcCistICB2ZXJzaW9uLiRsbyBcCistICBvc2RlcC4kbG8gXAorLSAgaW50bC1jb21wYXQuJGxvCistT0JKRUNUU19SRVNfeWVzID0gbGliaW50bC5yZXMKKy1PQkpFQ1RTX1JFU19ubyA9CistRElTVEZJTEVTLmNvbW1vbiA9IE1ha2VmaWxlLmluIFwKKy1jb25maWcuY2hhcnNldCBsb2NhbGUuYWxpYXMgcmVmLWFkZC5zaW4gcmVmLWRlbC5zaW4gZXhwb3J0LmggbGliaW50bC5yYyBcCistJChIRUFERVJTKSAkKFNPVVJDRVMpCistRElTVEZJTEVTLmdlbmVyYXRlZCA9IHBsdXJhbC5jCistRElTVEZJTEVTLm5vcm1hbCA9IFZFUlNJT04KKy1ESVNURklMRVMuZ2V0dGV4dCA9IENPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgbGliaW50bC5nbGliYyBSRUFETUUud29lMzIKKy1ESVNURklMRVMub2Jzb2xldGUgPSB4b3Blbi1tc2cuc2VkIGxpbnV4LW1zZy5zZWQgcG8ydGJsLnNlZC5pbiBjYXQtY29tcGF0LmMgXAorLUNPUFlJTkcuTElCLTIgZ2V0dGV4dC5oIGxpYmdldHRleHQuaCBwbHVyYWwtZXZhbC5jIGxpYmdudWludGwuaCBcCistbGliZ251aW50bC5oX3ZtcyBNYWtlZmlsZS52bXMgbGliZ251aW50bC5oLm1zdmMtc3RhdGljIFwKKy1saWJnbnVpbnRsLmgubXN2Yy1zaGFyZWQgTWFrZWZpbGUubXN2YworLQorLWFsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKy1hbGwteWVzOiBsaWJpbnRsLiRsYSBsaWJpbnRsLmggY2hhcnNldC5hbGlhcyByZWYtYWRkLnNlZCByZWYtZGVsLnNlZAorLWFsbC1ubzogYWxsLW5vLUBCVUlMRF9JTkNMVURFRF9MSUJJTlRMQAorLWFsbC1uby15ZXM6IGxpYmdudWludGwuJGxhCistYWxsLW5vLW5vOgorLQorLWxpYmludGwuYSBsaWJnbnVpbnRsLmE6ICQoT0JKRUNUUykKKy0Jcm0gLWYgJEAKKy0JJChBUikgY3J1ICRAICQoT0JKRUNUUykKKy0JJChSQU5MSUIpICRACistCistbGliaW50bC5sYSBsaWJnbnVpbnRsLmxhOiAkKE9CSkVDVFMpICQoT0JKRUNUU19SRVNfQFdPRTMyQCkKKy0JJChMSUJUT09MKSAtLW1vZGU9bGluayBcCistCSAgJChDQykgJChDUFBGTEFHUykgJChDRkxBR1MpICQoWENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBcCistCSAgJChPQkpFQ1RTKSBATFRMSUJJQ09OVkAgQElOVExfTUFDT1NYX0xJQlNAICQoTElCUykgQExUTElCVEhSRUFEQCBATFRMSUJDQCBcCistCSAgJChPQkpFQ1RTX1JFU19AV09FMzJAKSBcCistCSAgLXZlcnNpb24taW5mbyAkKExUVl9DVVJSRU5UKTokKExUVl9SRVZJU0lPTik6JChMVFZfQUdFKSBcCistCSAgLXJwYXRoICQobGliZGlyKSBcCistCSAgLW5vLXVuZGVmaW5lZAorLQorLSMgTGlidG9vbCdzIGxpYnJhcnkgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgbGliaW50bC4KKy0jIEJlZm9yZSBtYWtpbmcgYSBnZXR0ZXh0IHJlbGVhc2UsIHRoZSBnZXR0ZXh0IG1haW50YWluZXIgbXVzdCBjaGFuZ2UgdGhpcworLSMgYWNjb3JkaW5nIHRvIHRoZSBsaWJ0b29sIGRvY3VtZW50YXRpb24sIHNlY3Rpb24gIkxpYnJhcnkgaW50ZXJmYWNlIHZlcnNpb25zIi4KKy0jIE1haW50YWluZXJzIG9mIG90aGVyIHBhY2thZ2VzIHRoYXQgaW5jbHVkZSB0aGUgaW50bCBkaXJlY3RvcnkgbXVzdCAqbm90KgorLSMgY2hhbmdlIHRoZXNlIHZhbHVlcy4KKy1MVFZfQ1VSUkVOVD04CistTFRWX1JFVklTSU9OPTIKKy1MVFZfQUdFPTAKKy0KKy0uU1VGRklYRVM6CistLlNVRkZJWEVTOiAuYyAueSAubyAubG8gLnNpbiAuc2VkCistCistLmMubzoKKy0JJChDT01QSUxFKSAkPAorLQorLS55LmM6CistCSQoWUFDQykgJChZRkxBR1MpIC0tb3V0cHV0ICRAICQ8CistCXJtIC1mICQqLmgKKy0KKy1iaW5kdGV4dGRvbS5sbzogJChzcmNkaXIpL2JpbmR0ZXh0ZG9tLmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9iaW5kdGV4dGRvbS5jCistZGNnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNnZXR0ZXh0LmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY2dldHRleHQuYworLWRnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGdldHRleHQuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RnZXR0ZXh0LmMKKy1nZXR0ZXh0LmxvOiAkKHNyY2RpcikvZ2V0dGV4dC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZ2V0dGV4dC5jCistZmluZGRvbWFpbi5sbzogJChzcmNkaXIpL2ZpbmRkb21haW4uYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2ZpbmRkb21haW4uYworLWhhc2gtc3RyaW5nLmxvOiAkKHNyY2RpcikvaGFzaC1zdHJpbmcuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2hhc2gtc3RyaW5nLmMKKy1sb2FkbXNnY2F0LmxvOiAkKHNyY2RpcikvbG9hZG1zZ2NhdC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9hZG1zZ2NhdC5jCistbG9jYWxlYWxpYXMubG86ICQoc3JjZGlyKS9sb2NhbGVhbGlhcy5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlYWxpYXMuYworLXRleHRkb21haW4ubG86ICQoc3JjZGlyKS90ZXh0ZG9tYWluLmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS90ZXh0ZG9tYWluLmMKKy1sMTBuZmxpc3QubG86ICQoc3JjZGlyKS9sMTBuZmxpc3QuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2wxMG5mbGlzdC5jCistZXhwbG9kZW5hbWUubG86ICQoc3JjZGlyKS9leHBsb2RlbmFtZS5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZXhwbG9kZW5hbWUuYworLWRjaWdldHRleHQubG86ICQoc3JjZGlyKS9kY2lnZXR0ZXh0LmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY2lnZXR0ZXh0LmMKKy1kY25nZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNuZ2V0dGV4dC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZGNuZ2V0dGV4dC5jCistZG5nZXR0ZXh0LmxvOiAkKHNyY2RpcikvZG5nZXR0ZXh0LmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kbmdldHRleHQuYworLW5nZXR0ZXh0LmxvOiAkKHNyY2RpcikvbmdldHRleHQuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL25nZXR0ZXh0LmMKKy1wbHVyYWwubG86ICQoc3JjZGlyKS9wbHVyYWwuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3BsdXJhbC5jCistcGx1cmFsLWV4cC5sbzogJChzcmNkaXIpL3BsdXJhbC1leHAuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3BsdXJhbC1leHAuYworLWxvY2FsY2hhcnNldC5sbzogJChzcmNkaXIpL2xvY2FsY2hhcnNldC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmMKKy1sb2NrLmxvOiAkKHNyY2RpcikvbG9jay5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jay5jCistcmVsb2NhdGFibGUubG86ICQoc3JjZGlyKS9yZWxvY2F0YWJsZS5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworLWxhbmdwcmVmcy5sbzogJChzcmNkaXIpL2xhbmdwcmVmcy5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbGFuZ3ByZWZzLmMKKy1sb2NhbGVuYW1lLmxvOiAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCistbG9nLmxvOiAkKHNyY2RpcikvbG9nLmMKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2cuYworLXByaW50Zi5sbzogJChzcmNkaXIpL3ByaW50Zi5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcHJpbnRmLmMKKy12ZXJzaW9uLmxvOiAkKHNyY2RpcikvdmVyc2lvbi5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvdmVyc2lvbi5jCistb3NkZXAubG86ICQoc3JjZGlyKS9vc2RlcC5jCistCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2Rpcikvb3NkZXAuYworLWludGwtY29tcGF0LmxvOiAkKHNyY2RpcikvaW50bC1jb21wYXQuYworLQkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2ludGwtY29tcGF0LmMKKy0KKy0jIFRoaXMgcnVsZSBpcyBleGVjdXRlZCBvbmx5IG9uIFdvZTMyIHN5c3RlbXMuCistIyBUaGUgZm9sbG93aW5nIHNlZCBleHByZXNzaW9ucyBjb21lIGZyb20gdGhlIHdpbmRyZXMtb3B0aW9ucyBzY3JpcHQuIFRoZXkgYXJlCistIyBpbmxpbmVkIGhlcmUsIHNvIHRoYXQgdGhleSBjYW4gYmUgd3JpdHRlbiBpbiBhIE1ha2VmaWxlIHdpdGhvdXQgcmVxdWlyaW5nIGEKKy0jIHRlbXBvcmFyeSBmaWxlLiBUaGV5IG11c3QgY29udGFpbiBsaXRlcmFsIG5ld2xpbmVzIHJhdGhlciB0aGFuIHNlbWljb2xvbnMsCistIyBzbyB0aGF0IHRoZXkgd29yayB3aXRoIHRoZSBzZWQtMy4wMiB0aGF0IGlzIHNoaXBwZWQgd2l0aCBNU1lTLiBXZSBjYW4gdXNlCistIyBHTlUgYmFzaCdzICQnXG4nIHN5bnRheCB0byBvYnRhaW4gc3VjaCBhIG5ld2xpbmUuCistbGliaW50bC5yZXM6ICQoc3JjZGlyKS9saWJpbnRsLnJjCistCW5sPSQkJ1xuJzsgXAorLQlzZWRfZXh0cmFjdF9tYWpvcj0nL15bMC05XS97JyQke25sfSdzL15cKFswLTldKlwpLiovXDEvcCckJHtubH1xJCR7bmx9J30nJCR7bmx9J2NcJyQke25sfTAkJHtubH1xOyBcCistCXNlZF9leHRyYWN0X21pbm9yPScvXlswLTldWzAtOV0qWy5dWzAtOV0veyckJHtubH0ncy9eWzAtOV0qWy5dXChbMC05XSpcKS4qL1wxL3AnJCR7bmx9cSQke25sfSd9JyQke25sfSdjXCckJHtubH0wJCR7bmx9cTsgXAorLQlzZWRfZXh0cmFjdF9zdWJtaW5vcj0nL15bMC05XVswLTldKlsuXVswLTldWzAtOV0qWy5dWzAtOV0veyckJHtubH0ncy9eWzAtOV0qWy5dWzAtOV0qWy5dXChbMC05XSpcKS4qL1wxL3AnJCR7bmx9cSQke25sfSd9JyQke25sfSdjXCckJHtubH0wJCR7bmx9cTsgXAorLQkkKFdJTkRSRVMpIFwKKy0JICAiLURQQUNLQUdFX1ZFUlNJT05fU1RSSU5HPVxcXCIkKFZFUlNJT04pXFxcIiIgXAorLQkgICItRFBBQ0tBR0VfVkVSU0lPTl9NQUpPUj0iYGVjaG8gJyQoVkVSU0lPTiknIHwgc2VkIC1uIC1lICIkJHNlZF9leHRyYWN0X21ham9yImAgXAorLQkgICItRFBBQ0tBR0VfVkVSU0lPTl9NSU5PUj0iYGVjaG8gJyQoVkVSU0lPTiknIHwgc2VkIC1uIC1lICIkJHNlZF9leHRyYWN0X21pbm9yImAgXAorLQkgICItRFBBQ0tBR0VfVkVSU0lPTl9TVUJNSU5PUj0iYGVjaG8gJyQoVkVSU0lPTiknIHwgc2VkIC1uIC1lICIkJHNlZF9leHRyYWN0X3N1Ym1pbm9yImAgXAorLQkgIC1pICQoc3JjZGlyKS9saWJpbnRsLnJjIC1vIGxpYmludGwucmVzIC0tb3V0cHV0LWZvcm1hdD1jb2ZmCistCistcmVmLWFkZC5zZWQ6ICQoc3JjZGlyKS9yZWYtYWRkLnNpbgorLQlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWFkZC5zaW4gPiB0LXJlZi1hZGQuc2VkCistCW12IHQtcmVmLWFkZC5zZWQgcmVmLWFkZC5zZWQKKy1yZWYtZGVsLnNlZDogJChzcmNkaXIpL3JlZi1kZWwuc2luCistCXNlZCAtZSAnL14jL2QnIC1lICdzL0AnJ1BBQ0tBR0UnJ0AvQFBBQ0tBR0VAL2cnICQoc3JjZGlyKS9yZWYtZGVsLnNpbiA+IHQtcmVmLWRlbC5zZWQKKy0JbXYgdC1yZWYtZGVsLnNlZCByZWYtZGVsLnNlZAorLQorLUlOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JLi4KKy0KKy1saWJnbnVpbnRsLmg6ICQoc3JjZGlyKS9saWJnbnVpbnRsLmguaW4KKy0Jc2VkIC1lICcvSU5fTElCR0xPQ0FMRS9kJyBcCistCSAgICAtZSAncyxAJydIQVZFX1BPU0lYX1BSSU5URicnQCxASEFWRV9QT1NJWF9QUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfQVNQUklOVEYnJ0AsQEhBVkVfQVNQUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfU05QUklOVEYnJ0AsQEhBVkVfU05QUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfV1BSSU5URicnQCxASEFWRV9XUFJJTlRGQCxnJyBcCistCSAgPCAkKHNyY2RpcikvbGliZ251aW50bC5oLmluIFwKKy0JfCBpZiB0ZXN0ICdAV09FMzJETExAJyA9IHllczsgdGhlbiBcCistCSAgICBzZWQgLWUgJ3MvZXh0ZXJuIFwoW14oKV0qXCk7L2V4dGVybiBfX2RlY2xzcGVjIChkbGxpbXBvcnQpIFwxOy8nOyBcCistCSAgZWxzZSBcCistCSAgICBjYXQ7IFwKKy0JICBmaSBcCistCXwgc2VkIC1lICdzL2V4dGVybiBcKFteIl1cKS9leHRlcm4gTElCSU5UTF9ETExfRVhQT1JURUQgXDEvJyBcCistCSAgICAgIC1lICIvI2RlZmluZSBfTElCSU5UTF9IL3IgJChzcmNkaXIpL2V4cG9ydC5oIiBcCistCXwgc2VkIC1lICdzLEAnJ0hBVkVfVklTSUJJTElUWScnQCxASEFWRV9WSVNJQklMSVRZQCxnJyBcCistCSAgPiBsaWJnbnVpbnRsLmgKKy0KKy1saWJpbnRsLmg6ICQoc3JjZGlyKS9saWJnbnVpbnRsLmguaW4KKy0Jc2VkIC1lICcvSU5fTElCR0xPQ0FMRS9kJyBcCistCSAgICAtZSAncyxAJydIQVZFX1BPU0lYX1BSSU5URicnQCxASEFWRV9QT1NJWF9QUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfQVNQUklOVEYnJ0AsQEhBVkVfQVNQUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfU05QUklOVEYnJ0AsQEhBVkVfU05QUklOVEZALGcnIFwKKy0JICAgIC1lICdzLEAnJ0hBVkVfV1BSSU5URicnQCxASEFWRV9XUFJJTlRGQCxnJyBcCistCSAgPCAkKHNyY2RpcikvbGliZ251aW50bC5oLmluID4gbGliaW50bC5oCistCistY2hhcnNldC5hbGlhczogJChzcmNkaXIpL2NvbmZpZy5jaGFyc2V0CistCSQoU0hFTEwpICQoc3JjZGlyKS9jb25maWcuY2hhcnNldCAnQGhvc3RAJyA+IHQtJEAKKy0JbXYgdC0kQCAkQAorLQorLWNoZWNrOiBhbGwKKy0KKy0jIFdlIG11c3Qgbm90IGluc3RhbGwgdGhlIGxpYmludGwuaC9saWJpbnRsLmEgZmlsZXMgaWYgd2UgYXJlIG9uIGEKKy0jIHN5c3RlbSB3aGljaCBoYXMgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaW4gaXRzIEMgbGlicmFyeSBvciBpbiBhCistIyBzZXBhcmF0ZSBsaWJyYXJ5LgorLSMgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBvbmUgd2hpY2ggY29tZXMgd2l0aCB0aGlzIHZlcnNpb24gb2YgdGhlCistIyBwYWNrYWdlLCB5b3UgaGF2ZSB0byB1c2UgYGNvbmZpZ3VyZSAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCcuCistaW5zdGFsbDogaW5zdGFsbC1leGVjIGluc3RhbGwtZGF0YQorLWluc3RhbGwtZXhlYzogYWxsCistCWlmIHsgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgfSBcCistCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKy0JICAkKG1rZGlyX3ApICQoREVTVERJUikkKGxpYmRpcikgJChERVNURElSKSQoaW5jbHVkZWRpcik7IFwKKy0JICAkKElOU1RBTExfREFUQSkgbGliaW50bC5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorLQkgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgXAorLQkgICAgJChJTlNUQUxMX0RBVEEpIGxpYmludGwuJGxhICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC4kbGE7IFwKKy0JICBpZiB0ZXN0ICJAUkVMT0NBVEFCTEVAIiA9IHllczsgdGhlbiBcCistCSAgICBkZXBlbmRlbmNpZXM9YHNlZCAtbiAtZSAncyxeZGVwZW5kZW5jeV9saWJzPVwoLipcKSxcMSxwJyA8ICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC5sYSB8IHNlZCAtZSAicyxeJywsIiAtZSAicywnXCQkLCwiYDsgXAorLQkgICAgaWYgdGVzdCAtbiAiJCRkZXBlbmRlbmNpZXMiOyB0aGVuIFwKKy0JICAgICAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLmxhOyBcCistCSAgICBmaTsgXAorLQkgIGZpOyBcCistCWVsc2UgXAorLQkgIDogOyBcCistCWZpCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKy0JICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubyBcCistCSAgICYmIHRlc3QgQEdMSUJDMkAgIT0gbm87IHRoZW4gXAorLQkgICQobWtkaXJfcCkgJChERVNURElSKSQobGliZGlyKTsgXAorLQkgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgXAorLQkgICAgJChJTlNUQUxMX0RBVEEpIGxpYmdudWludGwuJGxhICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC4kbGE7IFwKKy0JICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL3ByZWxvYWRhYmxlX2xpYmludGwuc287IFwKKy0JICAkKElOU1RBTExfREFUQSkgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLnNvICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorLQkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBcCistCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdudWludGwuJGxhOyBcCistCWVsc2UgXAorLQkgIDogOyBcCistCWZpCistCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKy0JICB0ZXN0IEBHTElCQzIxQCAhPSBubyB8fCAkKG1rZGlyX3ApICQoREVTVERJUikkKGxpYmRpcik7IFwKKy0JICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCistCSAgZGVzdD0kKERFU1RESVIpJChsaWJkaXIpL2NoYXJzZXQuYWxpYXM7IFwKKy0JICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCistCSAgICBvcmlnPSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorLQkgICAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKy0JICAgIHJtIC1mICQkdGVtcDsgXAorLQkgIGVsc2UgXAorLQkgICAgaWYgdGVzdCBAR0xJQkMyMUAgPSBubzsgdGhlbiBcCistCSAgICAgIG9yaWc9Y2hhcnNldC5hbGlhczsgXAorLQkgICAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCistCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCistCSAgICAgIHJtIC1mICQkdGVtcDsgXAorLQkgICAgZmk7IFwKKy0JICBmaTsgXAorLQkgICQobWtkaXJfcCkgJChERVNURElSKSQobG9jYWxlZGlyKTsgXAorLQkgIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXMgXAorLQkgICAgJiYgb3JpZz0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhcyBcCistCSAgICB8fCBvcmlnPSQoc3JjZGlyKS9sb2NhbGUuYWxpYXM7IFwKKy0JICB0ZW1wPSQoREVTVERJUikkKGxvY2FsZWRpcikvdC1sb2NhbGUuYWxpYXM7IFwKKy0JICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCistCSAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCistCSAgcm0gLWYgJCR0ZW1wOyBcCistCWVsc2UgXAorLQkgIDogOyBcCistCWZpCistaW5zdGFsbC1kYXRhOiBhbGwKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorLQkgICQobWtkaXJfcCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKy0JICAkKElOU1RBTExfREFUQSkgVkVSU0lPTiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9WRVJTSU9OOyBcCistCSAgJChJTlNUQUxMX0RBVEEpIENoYW5nZUxvZy5pbnN0ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL0NoYW5nZUxvZzsgXAorLQkgIGRpc3RzPSJDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikiOyBcCistCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAorLQkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKy0JICBkb25lOyBcCistCSAgY2htb2QgYSt4ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL2NvbmZpZy5jaGFyc2V0OyBcCistCSAgZGlzdHM9IiQoRElTVEZJTEVTLmdlbmVyYXRlZCkiOyBcCistCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZGlyPS47IGVsc2UgZGlyPSQoc3JjZGlyKTsgZmk7IFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGRpci8kJGZpbGUgXAorLQkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKy0JICBkb25lOyBcCistCSAgZGlzdHM9IiQoRElTVEZJTEVTLm9ic29sZXRlKSI7IFwKKy0JICBmb3IgZmlsZSBpbiAkJGRpc3RzOyBkbyBcCistCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKy0JICBkb25lOyBcCistCWVsc2UgXAorLQkgIDogOyBcCistCWZpCistCistaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorLQorLWluc3RhbGwtZHZpIGluc3RhbGwtaHRtbCBpbnN0YWxsLWluZm8gaW5zdGFsbC1wcyBpbnN0YWxsLXBkZjoKKy0KKy1pbnN0YWxsZGlyczoKKy0JaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKy0JICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorLQkgICQobWtkaXJfcCkgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCistCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm8gXAorLQkgICAmJiB0ZXN0IEBHTElCQzJAICE9IG5vOyB0aGVuIFwKKy0JICAkKG1rZGlyX3ApICQoREVTVERJUikkKGxpYmRpcik7IFwKKy0JZWxzZSBcCistCSAgOiA7IFwKKy0JZmkKKy0JaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorLQkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtkaXJfcCkgJChERVNURElSKSQobGliZGlyKTsgXAorLQkgICQobWtkaXJfcCkgJChERVNURElSKSQobG9jYWxlZGlyKTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCistCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQorLSMgRGVmaW5lIHRoaXMgYXMgZW1wdHkgdW50aWwgSSBmb3VuZCBhIHVzZWZ1bCBhcHBsaWNhdGlvbi4KKy1pbnN0YWxsY2hlY2s6CistCistdW5pbnN0YWxsOgorLQlpZiB7IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IH0gXAorLQkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCistCSAgcm0gLWYgJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCistCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIFwKKy0JICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliaW50bC4kbGE7IFwKKy0JZWxzZSBcCistCSAgOiA7IFwKKy0JZmkKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgXAorLQkgICAmJiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IG5vIFwKKy0JICAgJiYgdGVzdCBAR0xJQkMyQCAhPSBubzsgdGhlbiBcCistCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCistCWVsc2UgXAorLQkgIDogOyBcCistCWZpCistCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKy0JICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCistCSAgICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCistCSAgICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorLQkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorLQkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKy0JICAgICAgcm0gLWYgJCRkZXN0OyBcCistCSAgICBlbHNlIFwKKy0JICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKy0JICAgIGZpOyBcCistCSAgICBybSAtZiAkJHRlbXA7IFwKKy0JICBmaTsgXAorLQkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IHRoZW4gXAorLQkgICAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCistCSAgICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCistCSAgICBzZWQgLWYgcmVmLWRlbC5zZWQgJCRkZXN0ID4gJCR0ZW1wOyBcCistCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorLQkgICAgICBybSAtZiAkJGRlc3Q7IFwKKy0JICAgIGVsc2UgXAorLQkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorLQkgICAgZmk7IFwKKy0JICAgIHJtIC1mICQkdGVtcDsgXAorLQkgIGZpOyBcCistCWVsc2UgXAorLQkgIDogOyBcCistCWZpCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKy0JICBmb3IgZmlsZSBpbiBWRVJTSU9OIENoYW5nZUxvZyBDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKTsgZG8gXAorLQkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCSAgZG9uZTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQorLWluZm8gZHZpIHBzIHBkZiBodG1sOgorLQorLSQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdudWludGwuaAorLWJpbmR0ZXh0ZG9tLiRsbyBkY2dldHRleHQuJGxvIGRjaWdldHRleHQuJGxvIGRjbmdldHRleHQuJGxvIGRnZXR0ZXh0LiRsbyBkbmdldHRleHQuJGxvIGZpbmRkb21haW4uJGxvIGdldHRleHQuJGxvIGludGwtY29tcGF0LiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gbmdldHRleHQuJGxvIHRleHRkb21haW4uJGxvOiAkKHNyY2RpcikvZ2V0dGV4dFAuaCAkKHNyY2RpcikvZ21vLmggJChzcmNkaXIpL2xvYWRpbmZvLmgKKy1oYXNoLXN0cmluZy4kbG8gZGNpZ2V0dGV4dC4kbG8gbG9hZG1zZ2NhdC4kbG86ICQoc3JjZGlyKS9oYXNoLXN0cmluZy5oCistZXhwbG9kZW5hbWUuJGxvIGwxMG5mbGlzdC4kbG86ICQoc3JjZGlyKS9sb2FkaW5mby5oCistZGNpZ2V0dGV4dC4kbG8gbG9hZG1zZ2NhdC4kbG8gcGx1cmFsLiRsbyBwbHVyYWwtZXhwLiRsbzogJChzcmNkaXIpL3BsdXJhbC1leHAuaAorLWRjaWdldHRleHQuJGxvOiAkKHNyY2RpcikvZXZhbC1wbHVyYWwuaAorLWxvY2FsY2hhcnNldC4kbG86ICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuaAorLWJpbmR0ZXh0ZG9tLiRsbyBkY2lnZXR0ZXh0LiRsbyBmaW5kZG9tYWluLiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gbG9jay4kbG8gbG9nLiRsbzogJChzcmNkaXIpL2xvY2suaAorLWxvY2FsZWFsaWFzLiRsbyBsb2NhbGNoYXJzZXQuJGxvIHJlbG9jYXRhYmxlLiRsbzogJChzcmNkaXIpL3JlbG9jYXRhYmxlLmgKKy1wcmludGYuJGxvOiAkKHNyY2RpcikvcHJpbnRmLWFyZ3MuaCAkKHNyY2RpcikvcHJpbnRmLWFyZ3MuYyAkKHNyY2RpcikvcHJpbnRmLXBhcnNlLmggJChzcmNkaXIpL3dwcmludGYtcGFyc2UuaCAkKHNyY2RpcikveHNpemUuaCAkKHNyY2RpcikvcHJpbnRmLXBhcnNlLmMgJChzcmNkaXIpL3Zhc25wcmludGYuaCAkKHNyY2RpcikvdmFzbndwcmludGYuaCAkKHNyY2RpcikvdmFzbnByaW50Zi5jCistCistIyBBIGJpc29uLTIuMSBnZW5lcmF0ZWQgcGx1cmFsLmMgaW5jbHVkZXMgPGxpYmludGwuaD4gaWYgRU5BQkxFX05MUy4KKy1QTFVSQUxfREVQU195ZXMgPSBsaWJpbnRsLmgKKy1QTFVSQUxfREVQU19ubyA9CistcGx1cmFsLiRsbzogJChQTFVSQUxfREVQU19AVVNFX0lOQ0xVREVEX0xJQklOVExAKQorLQorLXRhZ3M6IFRBR1MKKy0KKy1UQUdTOiAkKEhFQURFUlMpICQoU09VUkNFUykKKy0JaGVyZT1gcHdkYDsgY2QgJChzcmNkaXIpICYmIGV0YWdzIC1vICQkaGVyZS9UQUdTICQoSEVBREVSUykgJChTT1VSQ0VTKQorLQorLWN0YWdzOiBDVEFHUworLQorLUNUQUdTOiAkKEhFQURFUlMpICQoU09VUkNFUykKKy0JaGVyZT1gcHdkYDsgY2QgJChzcmNkaXIpICYmIGN0YWdzIC1vICQkaGVyZS9DVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKy0KKy1pZDogSUQKKy0KKy1JRDogJChIRUFERVJTKSAkKFNPVVJDRVMpCistCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBta2lkIC1mJCRoZXJlL0lEICQoSEVBREVSUykgJChTT1VSQ0VTKQorLQorLQorLW1vc3RseWNsZWFuOgorLQlybSAtZiAqLmEgKi5sYSAqLm8gKi5vYmogKi5sbyBsaWJpbnRsLnJlcyBjb3JlIGNvcmUuKgorLQlybSAtZiBsaWJnbnVpbnRsLmggbGliaW50bC5oIGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKy0Jcm0gLWYgLXIgLmxpYnMgX2xpYnMKKy0KKy1jbGVhbjogbW9zdGx5Y2xlYW4KKy0KKy1kaXN0Y2xlYW46IGNsZWFuCistCXJtIC1mIE1ha2VmaWxlIElEIFRBR1MKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIiB8fCB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCistCSAgcm0gLWYgQ2hhbmdlTG9nLmluc3QgJChESVNURklMRVMubm9ybWFsKTsgXAorLQllbHNlIFwKKy0JICA6IDsgXAorLQlmaQorLQorLW1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCistCistCistIyBHTlUgZ2V0dGV4dCBuZWVkcyBub3QgY29udGFpbiB0aGUgZmlsZSBgVkVSU0lPTicgYnV0IGNvbnRhaW5zIHNvbWUKKy0jIG90aGVyIGZpbGVzIHdoaWNoIHNob3VsZCBub3QgYmUgZGlzdHJpYnV0ZWQgaW4gb3RoZXIgcGFja2FnZXMuCistZGlzdGRpciA9IC4uLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKKy1kaXN0IGRpc3RkaXI6IE1ha2VmaWxlCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKy0JICA6IDsgXAorLQllbHNlIFwKKy0JICBpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiOyB0aGVuIFwKKy0JICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLmdldHRleHQpIjsgXAorLQkgIGVsc2UgXAorLQkgICAgYWRkaXRpb25hbD0iJChESVNURklMRVMubm9ybWFsKSI7IFwKKy0JICBmaTsgXAorLQkgICQoTUFLRSkgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgXAorLQkgIGZvciBmaWxlIGluIENoYW5nZUxvZyAkKERJU1RGSUxFUy5jb21tb24pICQoRElTVEZJTEVTLmdlbmVyYXRlZCkgJCRhZGRpdGlvbmFsOyBkbyBcCistCSAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkaXI9LjsgZWxzZSBkaXI9JChzcmNkaXIpOyBmaTsgXAorLQkgICAgY3AgLXAgJCRkaXIvJCRmaWxlICQoZGlzdGRpcikgfHwgdGVzdCAkJGZpbGUgPSBNYWtlZmlsZS5pbiB8fCBleGl0IDE7IFwKKy0JICBkb25lOyBcCistCWZpCistCistTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCistIyBUaGlzIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LCBidXQgZG9lc24ndCB3b3JrIGFueSBtb3JlIHdpdGggYXV0b2NvbmYtMi41NywKKy0jIHdoZW4gQUNfQ09ORklHX0ZJTEVTKFtpbnRsL01ha2VmaWxlOnNvbWVkaXIvTWFrZWZpbGUuaW5dKSBpcyB1c2VkLgorLSMJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKKy0KKy0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2Ugbm90IHRvIGV4cG9ydCBhbGwgdmFyaWFibGVzLgorLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLS5OT0VYUE9SVDoKKy0tLSBhL2ludGwvVkVSU0lPTgorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLUdOVSBnZXR0ZXh0IGxpYnJhcnkgZnJvbSBnZXR0ZXh0LTAuMTcKKy0tLSBhL2ludGwvYmluZHRleHRkb20uYworKysrIC9kZXYvbnVsbAorQEAgLTEsMzQwICswLDAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmluZHRleHRkb21haW4oMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgPHN0ZGRlZi5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistCistI2luY2x1ZGUgImdldHRleHRQLmgiCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxsaWJpbnRsLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdudWludGwuaCIKKy0jZW5kaWYKKy0KKy0vKiBIYW5kbGUgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CistIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZQorLSMgZGVmaW5lIGdsX3J3bG9ja193cmxvY2sgX19saWJjX3J3bG9ja193cmxvY2sKKy0jIGRlZmluZSBnbF9yd2xvY2tfdW5sb2NrIF9fbGliY19yd2xvY2tfdW5sb2NrCistI2Vsc2UKKy0jIGluY2x1ZGUgImxvY2suaCIKKy0jZW5kaWYKKy0KKy0vKiBTb21lIGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRlZi5oPi4gICovCistI2lmbmRlZiBvZmZzZXRvZgorLSMgZGVmaW5lIG9mZnNldG9mKHR5cGUsaWRlbnQpICgoc2l6ZV90KSYoKCh0eXBlKikwKS0+aWRlbnQpKQorLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0vKiBMb2NrIHZhcmlhYmxlIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBkYXRhIGluIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLiAgKi8KKy1nbF9yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9ubF9zdGF0ZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCistCistCistLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorLSAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKy0gICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKy0gICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworLSNpZmRlZiBfTElCQworLSMgZGVmaW5lIEJJTkRURVhURE9NQUlOIF9fYmluZHRleHRkb21haW4KKy0jIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CistIyBpZm5kZWYgc3RyZHVwCistIyAgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCistIyBlbmRpZgorLSNlbHNlCistIyBkZWZpbmUgQklORFRFWFRET01BSU4gbGliaW50bF9iaW5kdGV4dGRvbWFpbgorLSMgZGVmaW5lIEJJTkRfVEVYVERPTUFJTl9DT0RFU0VUIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKy0jZW5kaWYKKy0KKy0vKiBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBuYW1lICpESVJOQU1FUCBhbmQgdGhlIG91dHB1dCBjb2Rlc2V0ICpDT0RFU0VUUAorLSAgIHRvIGJlIHVzZWQgZm9yIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZy4KKy0gICBJZiAqRElSTkFNRVAgb3IgKkNPREVTRVRQIGlzIE5VTEwsIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBpcyBub3QKKy0gICBtb2RpZmllZCwgb25seSB0aGUgY3VycmVudCB2YWx1ZSBpcyByZXR1cm5lZC4KKy0gICBJZiBESVJOQU1FUCBvciBDT0RFU0VUUCBpcyBOVUxMLCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgaXMgbmVpdGhlcgorLSAgIG1vZGlmaWVkIG5vciByZXR1cm5lZC4gICovCistc3RhdGljIHZvaWQKKy1zZXRfYmluZGluZ192YWx1ZXMgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkgICAgY29uc3QgY2hhciAqKmRpcm5hbWVwLCBjb25zdCBjaGFyICoqY29kZXNldHApCisteworLSAgc3RydWN0IGJpbmRpbmcgKmJpbmRpbmc7CistICBpbnQgbW9kaWZpZWQ7CistCistICAvKiBTb21lIHNhbml0eSBjaGVja3MuICAqLworLSAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCB8fCBkb21haW5uYW1lWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBpZiAoZGlybmFtZXApCistCSpkaXJuYW1lcCA9IE5VTEw7CistICAgICAgaWYgKGNvZGVzZXRwKQorLQkqY29kZXNldHAgPSBOVUxMOworLSAgICAgIHJldHVybjsKKy0gICAgfQorLQorLSAgZ2xfcndsb2NrX3dybG9jayAoX25sX3N0YXRlX2xvY2spOworLQorLSAgbW9kaWZpZWQgPSAwOworLQorLSAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKy0gICAgeworLSAgICAgIGludCBjb21wYXJlID0gc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKKy0gICAgICBpZiAoY29tcGFyZSA9PSAwKQorLQkvKiBXZSBmb3VuZCBpdCEgICovCistCWJyZWFrOworLSAgICAgIGlmIChjb21wYXJlIDwgMCkKKy0JeworLQkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCistCSAgYmluZGluZyA9IE5VTEw7CistCSAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgaWYgKGJpbmRpbmcgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIGlmIChkaXJuYW1lcCkKKy0JeworLQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CistCistCSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKy0JICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKy0JICAgICpkaXJuYW1lcCA9IGJpbmRpbmctPmRpcm5hbWU7CistCSAgZWxzZQorLQkgICAgeworLQkgICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCistCQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorLQkJIG9sZCBiaW5kaW5nLiAgKi8KKy0JICAgICAgY2hhciAqcmVzdWx0ID0gYmluZGluZy0+ZGlybmFtZTsKKy0JICAgICAgaWYgKHN0cmNtcCAoZGlybmFtZSwgcmVzdWx0KSAhPSAwKQorLQkJeworLQkJICBpZiAoc3RyY21wIChkaXJuYW1lLCBfbmxfZGVmYXVsdF9kaXJuYW1lKSA9PSAwKQorLQkJICAgIHJlc3VsdCA9IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWU7CistCQkgIGVsc2UKKy0JCSAgICB7CistI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorLQkJICAgICAgcmVzdWx0ID0gc3RyZHVwIChkaXJuYW1lKTsKKy0jZWxzZQorLQkJICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZGlybmFtZSkgKyAxOworLQkJICAgICAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworLQkJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKy0JCQltZW1jcHkgKHJlc3VsdCwgZGlybmFtZSwgbGVuKTsKKy0jZW5kaWYKKy0JCSAgICB9CistCistCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCistCQkgICAgeworLQkJICAgICAgaWYgKGJpbmRpbmctPmRpcm5hbWUgIT0gX25sX2RlZmF1bHRfZGlybmFtZSkKKy0JCQlmcmVlIChiaW5kaW5nLT5kaXJuYW1lKTsKKy0KKy0JCSAgICAgIGJpbmRpbmctPmRpcm5hbWUgPSByZXN1bHQ7CistCQkgICAgICBtb2RpZmllZCA9IDE7CistCQkgICAgfQorLQkJfQorLQkgICAgICAqZGlybmFtZXAgPSByZXN1bHQ7CistCSAgICB9CistCX0KKy0KKy0gICAgICBpZiAoY29kZXNldHApCistCXsKKy0JICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworLQorLQkgIGlmIChjb2Rlc2V0ID09IE5VTEwpCistCSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCistCSAgICAqY29kZXNldHAgPSBiaW5kaW5nLT5jb2Rlc2V0OworLQkgIGVsc2UKKy0JICAgIHsKKy0JICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorLQkJIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKy0JCSBvbGQgYmluZGluZy4gICovCistCSAgICAgIGNoYXIgKnJlc3VsdCA9IGJpbmRpbmctPmNvZGVzZXQ7CistCSAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCB8fCBzdHJjbXAgKGNvZGVzZXQsIHJlc3VsdCkgIT0gMCkKKy0JCXsKKy0jaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCQkgIHJlc3VsdCA9IHN0cmR1cCAoY29kZXNldCk7CistI2Vsc2UKKy0JCSAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoY29kZXNldCkgKyAxOworLQkJICByZXN1bHQgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCistCQkgICAgbWVtY3B5IChyZXN1bHQsIGNvZGVzZXQsIGxlbik7CistI2VuZGlmCistCistCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCistCQkgICAgeworLQkJICAgICAgaWYgKGJpbmRpbmctPmNvZGVzZXQgIT0gTlVMTCkKKy0JCQlmcmVlIChiaW5kaW5nLT5jb2Rlc2V0KTsKKy0KKy0JCSAgICAgIGJpbmRpbmctPmNvZGVzZXQgPSByZXN1bHQ7CistCQkgICAgICBtb2RpZmllZCA9IDE7CistCQkgICAgfQorLQkJfQorLQkgICAgICAqY29kZXNldHAgPSByZXN1bHQ7CistCSAgICB9CistCX0KKy0gICAgfQorLSAgZWxzZSBpZiAoKGRpcm5hbWVwID09IE5VTEwgfHwgKmRpcm5hbWVwID09IE5VTEwpCistCSAgICYmIChjb2Rlc2V0cCA9PSBOVUxMIHx8ICpjb2Rlc2V0cCA9PSBOVUxMKSkKKy0gICAgeworLSAgICAgIC8qIFNpbXBseSByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWVzLiAgKi8KKy0gICAgICBpZiAoZGlybmFtZXApCistCSpkaXJuYW1lcCA9IF9ubF9kZWZhdWx0X2Rpcm5hbWU7CistICAgICAgaWYgKGNvZGVzZXRwKQorLQkqY29kZXNldHAgPSBOVUxMOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBXZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nLiAgKi8KKy0gICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgc3RydWN0IGJpbmRpbmcgKm5ld19iaW5kaW5nID0KKy0JKHN0cnVjdCBiaW5kaW5nICopIG1hbGxvYyAob2Zmc2V0b2YgKHN0cnVjdCBiaW5kaW5nLCBkb21haW5uYW1lKSArIGxlbik7CistCistICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG5ld19iaW5kaW5nID09IE5VTEwsIDApKQorLQlnb3RvIGZhaWxlZDsKKy0KKy0gICAgICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lLCBkb21haW5uYW1lLCBsZW4pOworLQorLSAgICAgIGlmIChkaXJuYW1lcCkKKy0JeworLQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CistCistCSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKy0JICAgIC8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKy0JICAgIGRpcm5hbWUgPSBfbmxfZGVmYXVsdF9kaXJuYW1lOworLQkgIGVsc2UKKy0JICAgIHsKKy0JICAgICAgaWYgKHN0cmNtcCAoZGlybmFtZSwgX25sX2RlZmF1bHRfZGlybmFtZSkgPT0gMCkKKy0JCWRpcm5hbWUgPSBfbmxfZGVmYXVsdF9kaXJuYW1lOworLQkgICAgICBlbHNlCistCQl7CistCQkgIGNoYXIgKnJlc3VsdDsKKy0jaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCQkgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CistCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCistCQkgICAgZ290byBmYWlsZWRfZGlybmFtZTsKKy0jZWxzZQorLQkJICBzaXplX3QgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CistCQkgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKy0JCSAgICBnb3RvIGZhaWxlZF9kaXJuYW1lOworLQkJICBtZW1jcHkgKHJlc3VsdCwgZGlybmFtZSwgbGVuKTsKKy0jZW5kaWYKKy0JCSAgZGlybmFtZSA9IHJlc3VsdDsKKy0JCX0KKy0JICAgIH0KKy0JICAqZGlybmFtZXAgPSBkaXJuYW1lOworLQkgIG5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgZGlybmFtZTsKKy0JfQorLSAgICAgIGVsc2UKKy0JLyogVGhlIGRlZmF1bHQgdmFsdWUuICAqLworLQluZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWU7CistCistICAgICAgaWYgKGNvZGVzZXRwKQorLQl7CistCSAgY29uc3QgY2hhciAqY29kZXNldCA9ICpjb2Rlc2V0cDsKKy0KKy0JICBpZiAoY29kZXNldCAhPSBOVUxMKQorLQkgICAgeworLQkgICAgICBjaGFyICpyZXN1bHQ7CistCistI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorLQkgICAgICByZXN1bHQgPSBzdHJkdXAgKGNvZGVzZXQpOworLQkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorLQkJZ290byBmYWlsZWRfY29kZXNldDsKKy0jZWxzZQorLQkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CistCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKy0JCWdvdG8gZmFpbGVkX2NvZGVzZXQ7CistCSAgICAgIG1lbWNweSAocmVzdWx0LCBjb2Rlc2V0LCBsZW4pOworLSNlbmRpZgorLQkgICAgICBjb2Rlc2V0ID0gcmVzdWx0OworLQkgICAgfQorLQkgICpjb2Rlc2V0cCA9IGNvZGVzZXQ7CistCSAgbmV3X2JpbmRpbmctPmNvZGVzZXQgPSAoY2hhciAqKSBjb2Rlc2V0OworLQl9CistICAgICAgZWxzZQorLQluZXdfYmluZGluZy0+Y29kZXNldCA9IE5VTEw7CistCistICAgICAgLyogTm93IGVucXVldWUgaXQuICAqLworLSAgICAgIGlmIChfbmxfZG9tYWluX2JpbmRpbmdzID09IE5VTEwKKy0JICB8fCBzdHJjbXAgKGRvbWFpbm5hbWUsIF9ubF9kb21haW5fYmluZGluZ3MtPmRvbWFpbm5hbWUpIDwgMCkKKy0JeworLQkgIG5ld19iaW5kaW5nLT5uZXh0ID0gX25sX2RvbWFpbl9iaW5kaW5nczsKKy0JICBfbmxfZG9tYWluX2JpbmRpbmdzID0gbmV3X2JpbmRpbmc7CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICBiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsKKy0JICB3aGlsZSAoYmluZGluZy0+bmV4dCAhPSBOVUxMCistCQkgJiYgc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5uZXh0LT5kb21haW5uYW1lKSA+IDApCistCSAgICBiaW5kaW5nID0gYmluZGluZy0+bmV4dDsKKy0KKy0JICBuZXdfYmluZGluZy0+bmV4dCA9IGJpbmRpbmctPm5leHQ7CistCSAgYmluZGluZy0+bmV4dCA9IG5ld19iaW5kaW5nOworLQl9CistCistICAgICAgbW9kaWZpZWQgPSAxOworLQorLSAgICAgIC8qIEhlcmUgd2UgZGVhbCB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiAgKi8KKy0gICAgICBpZiAoMCkKKy0JeworLQlmYWlsZWRfY29kZXNldDoKKy0JICBpZiAobmV3X2JpbmRpbmctPmRpcm5hbWUgIT0gX25sX2RlZmF1bHRfZGlybmFtZSkKKy0JICAgIGZyZWUgKG5ld19iaW5kaW5nLT5kaXJuYW1lKTsKKy0JZmFpbGVkX2Rpcm5hbWU6CistCSAgZnJlZSAobmV3X2JpbmRpbmcpOworLQlmYWlsZWQ6CistCSAgaWYgKGRpcm5hbWVwKQorLQkgICAgKmRpcm5hbWVwID0gTlVMTDsKKy0JICBpZiAoY29kZXNldHApCistCSAgICAqY29kZXNldHAgPSBOVUxMOworLQl9CistICAgIH0KKy0KKy0gIC8qIElmIHdlIG1vZGlmaWVkIGFueSBiaW5kaW5nLCB3ZSBmbHVzaCB0aGUgY2FjaGVzLiAgKi8KKy0gIGlmIChtb2RpZmllZCkKKy0gICAgKytfbmxfbXNnX2NhdF9jbnRyOworLQorLSAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworLX0KKy0KKy0vKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKy0gICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCistY2hhciAqCistQklORFRFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmRpcm5hbWUpCisteworLSAgc2V0X2JpbmRpbmdfdmFsdWVzIChkb21haW5uYW1lLCAmZGlybmFtZSwgTlVMTCk7CistICByZXR1cm4gKGNoYXIgKikgZGlybmFtZTsKKy19CistCistLyogU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZQorLSAgIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuICAqLworLWNoYXIgKgorLUJJTkRfVEVYVERPTUFJTl9DT0RFU0VUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpjb2Rlc2V0KQorLXsKKy0gIHNldF9iaW5kaW5nX3ZhbHVlcyAoZG9tYWlubmFtZSwgTlVMTCwgJmNvZGVzZXQpOworLSAgcmV0dXJuIChjaGFyICopIGNvZGVzZXQ7CistfQorLQorLSNpZmRlZiBfTElCQworLS8qIEFsaWFzZXMgZm9yIGZ1bmN0aW9uIG5hbWVzIGluIEdOVSBDIExpYnJhcnkuICAqLworLXdlYWtfYWxpYXMgKF9fYmluZHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKTsKKy13ZWFrX2FsaWFzIChfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LCBiaW5kX3RleHRkb21haW5fY29kZXNldCk7CistI2VuZGlmCistLS0gYS9pbnRsL2NvbmZpZy5jaGFyc2V0CisrKysgL2Rldi9udWxsCitAQCAtMSw2NDAgKzAsMCBAQAorLSMhIC9iaW4vc2gKKy0jIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMuCistIworLSMgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jCistIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0jICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSMgICBVU0EuCistIworLSMgVGhlIHRhYmxlIGNvbnNpc3RzIG9mIGxpbmVzIG9mIHRoZSBmb3JtCistIyAgICBBTElBUyAgQ0FOT05JQ0FMCistIworLSMgQUxJQVMgaXMgdGhlIChzeXN0ZW0gZGVwZW5kZW50KSByZXN1bHQgb2YgIm5sX2xhbmdpbmZvIChDT0RFU0VUKSIuCistIyBBTElBUyBpcyBjb21wYXJlZCBpbiBhIGNhc2Ugc2Vuc2l0aXZlIHdheS4KKy0jCistIyBDQU5PTklDQUwgaXMgdGhlIEdOVSBjYW5vbmljYWwgbmFtZSBmb3IgdGhpcyBjaGFyYWN0ZXIgZW5jb2RpbmcuCistIyBJdCBtdXN0IGJlIGFuIGVuY29kaW5nIHN1cHBvcnRlZCBieSBsaWJpY29udi4gU3VwcG9ydCBieSBHTlUgbGliYyBpcworLSMgYWxzbyBkZXNpcmFibGUuIENBTk9OSUNBTCBpcyBjYXNlIGluc2Vuc2l0aXZlLiBVc3VhbGx5IGFuIHVwcGVyIGNhc2UKKy0jIE1JTUUgY2hhcnNldCBuYW1lIGlzIHByZWZlcnJlZC4KKy0jIFRoZSBjdXJyZW50IGxpc3Qgb2YgR05VIGNhbm9uaWNhbCBjaGFyc2V0IG5hbWVzIGlzIGFzIGZvbGxvd3MuCistIworLSMgICAgICAgbmFtZSAgICAgICAgICAgICAgTUlNRT8gICAgICAgICAgICAgdXNlZCBieSB3aGljaCBzeXN0ZW1zCistIyAgIEFTQ0lJLCBBTlNJX1gzLjQtMTk2OCAgICAgICBnbGliYyBzb2xhcmlzIGZyZWVic2QgbmV0YnNkIGRhcndpbgorLSMgICBJU08tODg1OS0xICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4KKy0jICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCistIyAgIElTTy04ODU5LTMgICAgICAgICAgICAgIFkgICBnbGliYyBzb2xhcmlzCistIyAgIElTTy04ODU5LTQgICAgICAgICAgICAgIFkgICBvc2Ygc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4KKy0jICAgSVNPLTg4NTktNSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCistIyAgIElTTy04ODU5LTYgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBzb2xhcmlzCistIyAgIElTTy04ODU5LTcgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIG5ldGJzZCBkYXJ3aW4KKy0jICAgSVNPLTg4NTktOCAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzCistIyAgIElTTy04ODU5LTkgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGRhcndpbgorLSMgICBJU08tODg1OS0xMyAgICAgICAgICAgICAgICAgZ2xpYmMgbmV0YnNkIGRhcndpbgorLSMgICBJU08tODg1OS0xNCAgICAgICAgICAgICAgICAgZ2xpYmMKKy0jICAgSVNPLTg4NTktMTUgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorLSMgICBLT0k4LVIgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4KKy0jICAgS09JOC1VICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGZyZWVic2QgbmV0YnNkIGRhcndpbgorLSMgICBLT0k4LVQgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMKKy0jICAgQ1A0MzcgICAgICAgICAgICAgICAgICAgICAgIGRvcworLSMgICBDUDc3NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCistIyAgIENQODUwICAgICAgICAgICAgICAgICAgICAgICBhaXggb3NmIGRvcworLSMgICBDUDg1MiAgICAgICAgICAgICAgICAgICAgICAgZG9zCistIyAgIENQODU1ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKy0jICAgQ1A4NTYgICAgICAgICAgICAgICAgICAgICAgIGFpeAorLSMgICBDUDg1NyAgICAgICAgICAgICAgICAgICAgICAgZG9zCistIyAgIENQODYxICAgICAgICAgICAgICAgICAgICAgICBkb3MKKy0jICAgQ1A4NjIgICAgICAgICAgICAgICAgICAgICAgIGRvcworLSMgICBDUDg2NCAgICAgICAgICAgICAgICAgICAgICAgZG9zCistIyAgIENQODY1ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKy0jICAgQ1A4NjYgICAgICAgICAgICAgICAgICAgICAgIGZyZWVic2QgbmV0YnNkIGRhcndpbiBkb3MKKy0jICAgQ1A4NjkgICAgICAgICAgICAgICAgICAgICAgIGRvcworLSMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCistIyAgIENQOTIyICAgICAgICAgICAgICAgICAgICAgICBhaXgKKy0jICAgQ1A5MzIgICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMiBkb3MKKy0jICAgQ1A5NDMgICAgICAgICAgICAgICAgICAgICAgIGFpeAorLSMgICBDUDk0OSAgICAgICAgICAgICAgICAgICAgICAgb3NmIHdvZTMyIGRvcworLSMgICBDUDk1MCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCistIyAgIENQMTA0NiAgICAgICAgICAgICAgICAgICAgICBhaXgKKy0jICAgQ1AxMTI0ICAgICAgICAgICAgICAgICAgICAgIGFpeAorLSMgICBDUDExMjUgICAgICAgICAgICAgICAgICAgICAgZG9zCistIyAgIENQMTEyOSAgICAgICAgICAgICAgICAgICAgICBhaXgKKy0jICAgQ1AxMjUwICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCistIyAgIENQMTI1MSAgICAgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzIG5ldGJzZCBkYXJ3aW4gd29lMzIKKy0jICAgQ1AxMjUyICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMgorLSMgICBDUDEyNTMgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKy0jICAgQ1AxMjU0ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCistIyAgIENQMTI1NSAgICAgICAgICAgICAgICAgICAgICBnbGliYyB3b2UzMgorLSMgICBDUDEyNTYgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKy0jICAgQ1AxMjU3ICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCistIyAgIEdCMjMxMiAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IHNvbGFyaXMgZnJlZWJzZCBuZXRic2QgZGFyd2luCistIyAgIEVVQy1KUCAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgbmV0YnNkIGRhcndpbgorLSMgICBFVUMtS1IgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4KKy0jICAgRVVDLVRXICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgbmV0YnNkCistIyAgIEJJRzUgICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcyBmcmVlYnNkIG5ldGJzZCBkYXJ3aW4KKy0jICAgQklHNS1IS1NDUyAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKy0jICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyB3b2UzMiBkb3MKKy0jICAgR0IxODAzMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgbmV0YnNkCistIyAgIFNISUZUX0pJUyAgICAgICAgICAgICAgIFkgICBocHV4IG9zZiBzb2xhcmlzIGZyZWVic2QgbmV0YnNkIGRhcndpbgorLSMgICBKT0hBQiAgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgc29sYXJpcyB3b2UzMgorLSMgICBUSVMtNjIwICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKy0jICAgVklTQ0lJICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjCistIyAgIFRDVk41NzEyLTEgICAgICAgICAgICAgICAgICBnbGliYworLSMgICBHRU9SR0lBTi1QUyAgICAgICAgICAgICAgICAgZ2xpYmMKKy0jICAgSFAtUk9NQU44ICAgICAgICAgICAgICAgICAgIGhwdXgKKy0jICAgSFAtQVJBQklDOCAgICAgICAgICAgICAgICAgIGhwdXgKKy0jICAgSFAtR1JFRUs4ICAgICAgICAgICAgICAgICAgIGhwdXgKKy0jICAgSFAtSEVCUkVXOCAgICAgICAgICAgICAgICAgIGhwdXgKKy0jICAgSFAtVFVSS0lTSDggICAgICAgICAgICAgICAgIGhwdXgKKy0jICAgSFAtS0FOQTggICAgICAgICAgICAgICAgICAgIGhwdXgKKy0jICAgREVDLUtBTkpJICAgICAgICAgICAgICAgICAgIG9zZgorLSMgICBERUMtSEFOWVUgICAgICAgICAgICAgICAgICAgb3NmCistIyAgIFVURi04ICAgICAgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcyBuZXRic2QgZGFyd2luCistIworLSMgTm90ZTogTmFtZXMgd2hpY2ggYXJlIG5vdCBtYXJrZWQgYXMgYmVpbmcgYSBNSU1FIG5hbWUgc2hvdWxkIG5vdCBiZSB1c2VkIGluCistIyBJbnRlcm5ldCBwcm90b2NvbHMgZm9yIGluZm9ybWF0aW9uIGludGVyY2hhbmdlIChtYWlsLCBuZXdzLCBldGMuKS4KKy0jCistIyBOb3RlOiBBU0NJSSBhbmQgQU5TSV9YMy40LTE5NjggYXJlIHN5bm9ueW1vdXMgY2Fub25pY2FsIG5hbWVzLiBBcHBsaWNhdGlvbnMKKy0jIG11c3QgdW5kZXJzdGFuZCBib3RoIG5hbWVzIGFuZCB0cmVhdCB0aGVtIGFzIGVxdWl2YWxlbnQuCistIworLSMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCistIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorLSMgb3IKKy0jICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorLQorLWhvc3Q9IiQxIgorLW9zPWBlY2hvICIkaG9zdCIgfCBzZWQgLWUgJ3MvXlteLV0qLVteLV0qLVwoLipcKSQvXDEvJ2AKKy1lY2hvICIjIFRoaXMgZmlsZSBjb250YWlucyBhIHRhYmxlIG9mIGNoYXJhY3RlciBlbmNvZGluZyBhbGlhc2VzLCIKKy1lY2hvICIjIHN1aXRhYmxlIGZvciBvcGVyYXRpbmcgc3lzdGVtICcke29zfScuIgorLWVjaG8gIiMgSXQgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29uZmlnLmNoYXJzZXQuIgorLSMgTGlzdCBvZiByZWZlcmVuY2VzLCB1cGRhdGVkIGR1cmluZyBpbnN0YWxsYXRpb246CistZWNobyAiIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICIKKy1jYXNlICIkb3MiIGluCistICAgIGxpbnV4LWdudWxpYmMxKikKKy0JIyBMaW51eCBsaWJjNSBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorLQkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKy0JIyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCistCWVjaG8gIkMgQVNDSUkiCistCWVjaG8gIlBPU0lYIEFTQ0lJIgorLQlmb3IgbCBpbiBhZiBhZl9aQSBjYSBjYV9FUyBkYSBkYV9ESyBkZSBkZV9BVCBkZV9CRSBkZV9DSCBkZV9ERSBkZV9MVSBcCistCSAgICAgICAgIGVuIGVuX0FVIGVuX0JXIGVuX0NBIGVuX0RLIGVuX0dCIGVuX0lFIGVuX05aIGVuX1VTIGVuX1pBIFwKKy0JICAgICAgICAgZW5fWlcgZXMgZXNfQVIgZXNfQk8gZXNfQ0wgZXNfQ08gZXNfRE8gZXNfRUMgZXNfRVMgZXNfR1QgXAorLQkgICAgICAgICBlc19ITiBlc19NWCBlc19QQSBlc19QRSBlc19QWSBlc19TViBlc19VUyBlc19VWSBlc19WRSBldCBcCistCSAgICAgICAgIGV0X0VFIGV1IGV1X0VTIGZpIGZpX0ZJIGZvIGZvX0ZPIGZyIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIFwKKy0JICAgICAgICAgZnJfTFUgZ2EgZ2FfSUUgZ2wgZ2xfRVMgaWQgaWRfSUQgaW4gaW5fSUQgaXMgaXNfSVMgaXQgaXRfQ0ggXAorLQkgICAgICAgICBpdF9JVCBrbCBrbF9HTCBubCBubF9CRSBubF9OTCBubyBub19OTyBwdCBwdF9CUiBwdF9QVCBzdiBcCistCSAgICAgICAgIHN2X0ZJIHN2X1NFOyBkbworLQkgIGVjaG8gIiRsIElTTy04ODU5LTEiCistCSAgZWNobyAiJGwuaXNvLTg4NTktMSBJU08tODg1OS0xIgorLQkgIGVjaG8gIiRsLmlzby04ODU5LTE1IElTTy04ODU5LTE1IgorLQkgIGVjaG8gIiRsLmlzby04ODU5LTE1QGV1cm8gSVNPLTg4NTktMTUiCistCSAgZWNobyAiJGxAZXVybyBJU08tODg1OS0xNSIKKy0JICBlY2hvICIkbC5jcC00MzcgQ1A0MzciCistCSAgZWNobyAiJGwuY3AtODUwIENQODUwIgorLQkgIGVjaG8gIiRsLmNwLTEyNTIgQ1AxMjUyIgorLQkgIGVjaG8gIiRsLmNwLTEyNTJAZXVybyBDUDEyNTIiCistCSAgI2VjaG8gIiRsLmF0YXJpLXN0IEFUQVJJLVNUIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcKKy0JICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKy0JICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorLQlkb25lCistCWZvciBsIGluIGNzIGNzX0NaIGhyIGhyX0hSIGh1IGh1X0hVIHBsIHBsX1BMIHJvIHJvX1JPIHNrIHNrX1NLIHNsIFwKKy0JICAgICAgICAgc2xfU0kgc3Igc3JfQ1Mgc3JfWVU7IGRvCistCSAgZWNobyAiJGwgSVNPLTg4NTktMiIKKy0JICBlY2hvICIkbC5pc28tODg1OS0yIElTTy04ODU5LTIiCistCSAgZWNobyAiJGwuY3AtODUyIENQODUyIgorLQkgIGVjaG8gIiRsLmNwLTEyNTAgQ1AxMjUwIgorLQkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorLQlkb25lCistCWZvciBsIGluIG1rIG1rX01LIHJ1IHJ1X1JVOyBkbworLQkgIGVjaG8gIiRsIElTTy04ODU5LTUiCistCSAgZWNobyAiJGwuaXNvLTg4NTktNSBJU08tODg1OS01IgorLQkgIGVjaG8gIiRsLmtvaTgtciBLT0k4LVIiCistCSAgZWNobyAiJGwuY3AtODY2IENQODY2IgorLQkgIGVjaG8gIiRsLmNwLTEyNTEgQ1AxMjUxIgorLQkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorLQlkb25lCistCWZvciBsIGluIGFyIGFyX1NBOyBkbworLQkgIGVjaG8gIiRsIElTTy04ODU5LTYiCistCSAgZWNobyAiJGwuaXNvLTg4NTktNiBJU08tODg1OS02IgorLQkgIGVjaG8gIiRsLmNwLTg2NCBDUDg2NCIKKy0JICAjZWNobyAiJGwuY3AtODY4IENQODY4IiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcKKy0JICBlY2hvICIkbC5jcC0xMjU2IENQMTI1NiIKKy0JICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKy0JZG9uZQorLQlmb3IgbCBpbiBlbCBlbF9HUiBnciBncl9HUjsgZG8KKy0JICBlY2hvICIkbCBJU08tODg1OS03IgorLQkgIGVjaG8gIiRsLmlzby04ODU5LTcgSVNPLTg4NTktNyIKKy0JICBlY2hvICIkbC5jcC04NjkgQ1A4NjkiCistCSAgZWNobyAiJGwuY3AtMTI1MyBDUDEyNTMiCistCSAgZWNobyAiJGwuY3AtMTI1M0BldXJvIENQMTI1MyIKKy0JICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKy0JICBlY2hvICIkbC51dGYtOEBldXJvIFVURi04IgorLQlkb25lCistCWZvciBsIGluIGhlIGhlX0lMIGl3IGl3X0lMOyBkbworLQkgIGVjaG8gIiRsIElTTy04ODU5LTgiCistCSAgZWNobyAiJGwuaXNvLTg4NTktOCBJU08tODg1OS04IgorLQkgIGVjaG8gIiRsLmNwLTg2MiBDUDg2MiIKKy0JICBlY2hvICIkbC5jcC0xMjU1IENQMTI1NSIKKy0JICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKy0JZG9uZQorLQlmb3IgbCBpbiB0ciB0cl9UUjsgZG8KKy0JICBlY2hvICIkbCBJU08tODg1OS05IgorLQkgIGVjaG8gIiRsLmlzby04ODU5LTkgSVNPLTg4NTktOSIKKy0JICBlY2hvICIkbC5jcC04NTcgQ1A4NTciCistCSAgZWNobyAiJGwuY3AtMTI1NCBDUDEyNTQiCistCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCistCWRvbmUKKy0JZm9yIGwgaW4gbHQgbHRfTFQgbHYgbHZfTFY7IGRvCistCSAgI2VjaG8gIiRsIEJBTFRJQyIgIyBub3QgYSBjb21tb25seSB1c2VkIGVuY29kaW5nLCB3cm9uZyBlbmNvZGluZyBuYW1lCistCSAgZWNobyAiJGwgSVNPLTg4NTktMTMiCistCWRvbmUKKy0JZm9yIGwgaW4gcnVfVUEgdWsgdWtfVUE7IGRvCistCSAgZWNobyAiJGwgS09JOC1VIgorLQlkb25lCistCWZvciBsIGluIHpoIHpoX0NOOyBkbworLQkgICNlY2hvICIkbCBHQl8yMzEyLTgwIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKy0JICBlY2hvICIkbCBHQjIzMTIiCistCWRvbmUKKy0JZm9yIGwgaW4gamEgamFfSlAgamFfSlAuRVVDOyBkbworLQkgIGVjaG8gIiRsIEVVQy1KUCIKKy0JZG9uZQorLQlmb3IgbCBpbiBrbyBrb19LUjsgZG8KKy0JICBlY2hvICIkbCBFVUMtS1IiCistCWRvbmUKKy0JZm9yIGwgaW4gdGggdGhfVEg7IGRvCistCSAgZWNobyAiJGwgVElTLTYyMCIKKy0JZG9uZQorLQlmb3IgbCBpbiBmYSBmYV9JUjsgZG8KKy0JICAjZWNobyAiJGwgSVNJUkktMzM0MiIgIyBhIGJyb2tlbiBlbmNvZGluZworLQkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorLQlkb25lCistCTs7CistICAgIGxpbnV4KiB8ICotZ251KikKKy0JIyBXaXRoIGdsaWJjLTIuMSBvciBuZXdlciwgd2UgZG9uJ3QgbmVlZCBhbnkgY2Fub25pY2FsaXphdGlvbiwKKy0JIyBiZWNhdXNlIGdsaWJjIGhhcyBpY29udiBhbmQgYm90aCBnbGliYyBhbmQgbGliaWNvbnYgc3VwcG9ydCBhbGwKKy0JIyBHTlUgY2Fub25pY2FsIG5hbWVzIGRpcmVjdGx5LiBUaGVyZWZvcmUsIHRoZSBNYWtlZmlsZSBkb2VzIG5vdAorLQkjIG5lZWQgdG8gaW5zdGFsbCB0aGUgYWxpYXMgZmlsZSBhdCBhbGwuCistCSMgVGhlIGZvbGxvd2luZyBhcHBsaWVzIG9ubHkgdG8gZ2xpYmMtMi4wLnggYW5kIG9sZGVyIGxpYmNzLgorLQllY2hvICJJU09fNjQ2LklSVjoxOTgzIEFTQ0lJIgorLQk7OworLSAgICBhaXgqKQorLQllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKy0JZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCistCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorLQllY2hvICJJU084ODU5LTYgSVNPLTg4NTktNiIKKy0JZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCistCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorLQllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKy0JZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKy0JZWNobyAiSUJNLTg1MCBDUDg1MCIKKy0JZWNobyAiSUJNLTg1NiBDUDg1NiIKKy0JZWNobyAiSUJNLTkyMSBJU08tODg1OS0xMyIKKy0JZWNobyAiSUJNLTkyMiBDUDkyMiIKKy0JZWNobyAiSUJNLTkzMiBDUDkzMiIKKy0JZWNobyAiSUJNLTk0MyBDUDk0MyIKKy0JZWNobyAiSUJNLTEwNDYgQ1AxMDQ2IgorLQllY2hvICJJQk0tMTEyNCBDUDExMjQiCistCWVjaG8gIklCTS0xMTI5IENQMTEyOSIKKy0JZWNobyAiSUJNLTEyNTIgQ1AxMjUyIgorLQllY2hvICJJQk0tZXVjQ04gR0IyMzEyIgorLQllY2hvICJJQk0tZXVjSlAgRVVDLUpQIgorLQllY2hvICJJQk0tZXVjS1IgRVVDLUtSIgorLQllY2hvICJJQk0tZXVjVFcgRVVDLVRXIgorLQllY2hvICJiaWc1IEJJRzUiCistCWVjaG8gIkdCSyBHQksiCistCWVjaG8gIlRJUy02MjAgVElTLTYyMCIKKy0JZWNobyAiVVRGLTggVVRGLTgiCistCTs7CistICAgIGhwdXgqKQorLQllY2hvICJpc284ODU5MSBJU08tODg1OS0xIgorLQllY2hvICJpc284ODU5MiBJU08tODg1OS0yIgorLQllY2hvICJpc284ODU5NSBJU08tODg1OS01IgorLQllY2hvICJpc284ODU5NiBJU08tODg1OS02IgorLQllY2hvICJpc284ODU5NyBJU08tODg1OS03IgorLQllY2hvICJpc284ODU5OCBJU08tODg1OS04IgorLQllY2hvICJpc284ODU5OSBJU08tODg1OS05IgorLQllY2hvICJpc284ODU5MTUgSVNPLTg4NTktMTUiCistCWVjaG8gInJvbWFuOCBIUC1ST01BTjgiCistCWVjaG8gImFyYWJpYzggSFAtQVJBQklDOCIKKy0JZWNobyAiZ3JlZWs4IEhQLUdSRUVLOCIKKy0JZWNobyAiaGVicmV3OCBIUC1IRUJSRVc4IgorLQllY2hvICJ0dXJraXNoOCBIUC1UVVJLSVNIOCIKKy0JZWNobyAia2FuYTggSFAtS0FOQTgiCistCWVjaG8gInRpczYyMCBUSVMtNjIwIgorLQllY2hvICJiaWc1IEJJRzUiCistCWVjaG8gImV1Y0pQIEVVQy1KUCIKKy0JZWNobyAiZXVjS1IgRVVDLUtSIgorLQllY2hvICJldWNUVyBFVUMtVFciCistCWVjaG8gImhwMTVDTiBHQjIzMTIiCistCSNlY2hvICJjY2RjID8iICMgd2hhdCBpcyB0aGlzPworLQllY2hvICJTSklTIFNISUZUX0pJUyIKKy0JZWNobyAidXRmOCBVVEYtOCIKKy0JOzsKKy0gICAgaXJpeCopCistCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorLQllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKy0JZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCistCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorLQllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKy0JZWNobyAiZXVjQ04gR0IyMzEyIgorLQllY2hvICJldWNKUCBFVUMtSlAiCistCWVjaG8gImV1Y0tSIEVVQy1LUiIKKy0JZWNobyAiZXVjVFcgRVVDLVRXIgorLQk7OworLSAgICBvc2YqKQorLQllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKy0JZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCistCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorLQllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKy0JZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCistCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorLQllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKy0JZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKy0JZWNobyAiY3A4NTAgQ1A4NTAiCistCWVjaG8gImJpZzUgQklHNSIKKy0JZWNobyAiZGVjaGFueXUgREVDLUhBTllVIgorLQllY2hvICJkZWNoYW56aSBHQjIzMTIiCistCWVjaG8gImRlY2thbmppIERFQy1LQU5KSSIKKy0JZWNobyAiZGVja29yZWFuIEVVQy1LUiIKKy0JZWNobyAiZXVjSlAgRVVDLUpQIgorLQllY2hvICJldWNLUiBFVUMtS1IiCistCWVjaG8gImV1Y1RXIEVVQy1UVyIKKy0JZWNobyAiR0JLIEdCSyIKKy0JZWNobyAiS1NDNTYwMSBDUDk0OSIKKy0JZWNobyAic2RlY2thbmppIEVVQy1KUCIKKy0JZWNobyAiU0pJUyBTSElGVF9KSVMiCistCWVjaG8gIlRBQ1RJUyBUSVMtNjIwIgorLQllY2hvICJVVEYtOCBVVEYtOCIKKy0JOzsKKy0gICAgc29sYXJpcyopCistCWVjaG8gIjY0NiBBU0NJSSIKKy0JZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCistCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorLQllY2hvICJJU084ODU5LTMgSVNPLTg4NTktMyIKKy0JZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCistCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorLQllY2hvICJJU084ODU5LTYgSVNPLTg4NTktNiIKKy0JZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCistCWVjaG8gIklTTzg4NTktOCBJU08tODg1OS04IgorLQllY2hvICJJU084ODU5LTkgSVNPLTg4NTktOSIKKy0JZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKy0JZWNobyAia29pOC1yIEtPSTgtUiIKKy0JZWNobyAiYW5zaS0xMjUxIENQMTI1MSIKKy0JZWNobyAiQklHNSBCSUc1IgorLQllY2hvICJCaWc1LUhLU0NTIEJJRzUtSEtTQ1MiCistCWVjaG8gImdiMjMxMiBHQjIzMTIiCistCWVjaG8gIkdCSyBHQksiCistCWVjaG8gIkdCMTgwMzAgR0IxODAzMCIKKy0JZWNobyAiY25zMTE2NDMgRVVDLVRXIgorLQllY2hvICI1NjAxIEVVQy1LUiIKKy0JZWNobyAia29fS1Iuam9oYXA5MiBKT0hBQiIKKy0JZWNobyAiZXVjSlAgRVVDLUpQIgorLQllY2hvICJQQ0sgU0hJRlRfSklTIgorLQllY2hvICJUSVM2MjAuMjUzMyBUSVMtNjIwIgorLQkjZWNobyAic3VuX2V1X2dyZWVrID8iICMgd2hhdCBpcyB0aGlzPworLQllY2hvICJVVEYtOCBVVEYtOCIKKy0JOzsKKy0gICAgZnJlZWJzZCogfCBvczIqKQorLQkjIEZyZWVCU0QgNC4yIGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCistCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorLQkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKy0JIyBMaWtld2lzZSBmb3IgT1MvMi4gT1MvMiBoYXMgWEZyZWU4NiBqdXN0IGxpa2UgRnJlZUJTRC4gSnVzdAorLQkjIHJldXNlIEZyZWVCU0QncyBsb2NhbGUgZGF0YSBmb3IgT1MvMi4KKy0JZWNobyAiQyBBU0NJSSIKKy0JZWNobyAiVVMtQVNDSUkgQVNDSUkiCistCWZvciBsIGluIGxhX0xOIGx0X0xOOyBkbworLQkgIGVjaG8gIiRsLkFTQ0lJIEFTQ0lJIgorLQlkb25lCistCWZvciBsIGluIGRhX0RLIGRlX0FUIGRlX0NIIGRlX0RFIGVuX0FVIGVuX0NBIGVuX0dCIGVuX1VTIGVzX0VTIFwKKy0JICAgICAgICAgZmlfRkkgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgaXNfSVMgaXRfQ0ggaXRfSVQgbGFfTE4gXAorLQkgICAgICAgICBsdF9MTiBubF9CRSBubF9OTCBub19OTyBwdF9QVCBzdl9TRTsgZG8KKy0JICBlY2hvICIkbC5JU09fODg1OS0xIElTTy04ODU5LTEiCistCSAgZWNobyAiJGwuRElTXzg4NTktMTUgSVNPLTg4NTktMTUiCistCWRvbmUKKy0JZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gbHRfTE4gcGxfUEwgc2xfU0k7IGRvCistCSAgZWNobyAiJGwuSVNPXzg4NTktMiBJU08tODg1OS0yIgorLQlkb25lCistCWZvciBsIGluIGxhX0xOIGx0X0xUOyBkbworLQkgIGVjaG8gIiRsLklTT184ODU5LTQgSVNPLTg4NTktNCIKKy0JZG9uZQorLQlmb3IgbCBpbiBydV9SVSBydV9TVTsgZG8KKy0JICBlY2hvICIkbC5LT0k4LVIgS09JOC1SIgorLQkgIGVjaG8gIiRsLklTT184ODU5LTUgSVNPLTg4NTktNSIKKy0JICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKy0JZG9uZQorLQllY2hvICJ1a19VQS5LT0k4LVUgS09JOC1VIgorLQllY2hvICJ6aF9UVy5CSUc1IEJJRzUiCistCWVjaG8gInpoX1RXLkJpZzUgQklHNSIKKy0JZWNobyAiemhfQ04uRVVDIEdCMjMxMiIKKy0JZWNobyAiamFfSlAuRVVDIEVVQy1KUCIKKy0JZWNobyAiamFfSlAuU0pJUyBTSElGVF9KSVMiCistCWVjaG8gImphX0pQLlNoaWZ0X0pJUyBTSElGVF9KSVMiCistCWVjaG8gImtvX0tSLkVVQyBFVUMtS1IiCistCTs7CistICAgIG5ldGJzZCopCistCWVjaG8gIjY0NiBBU0NJSSIKKy0JZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCistCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorLQllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKy0JZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCistCWVjaG8gIklTTzg4NTktNyBJU08tODg1OS03IgorLQllY2hvICJJU084ODU5LTEzIElTTy04ODU5LTEzIgorLQllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorLQllY2hvICJldWNDTiBHQjIzMTIiCistCWVjaG8gImV1Y0pQIEVVQy1KUCIKKy0JZWNobyAiZXVjS1IgRVVDLUtSIgorLQllY2hvICJldWNUVyBFVUMtVFciCistCWVjaG8gIkJJRzUgQklHNSIKKy0JZWNobyAiU0pJUyBTSElGVF9KSVMiCistCTs7CistICAgIGRhcndpbls1Nl0qKQorLQkjIERhcndpbiA2LjggZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKy0JIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCistCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorLQllY2hvICJDIEFTQ0lJIgorLQlmb3IgbCBpbiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBsYV9MTjsgZG8KKy0JICBlY2hvICIkbC5VUy1BU0NJSSBBU0NJSSIKKy0JZG9uZQorLQlmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCistCSAgICAgICAgIGZpX0ZJIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGlzX0lTIGl0X0NIIGl0X0lUIG5sX0JFIFwKKy0JICAgICAgICAgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCistCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKy0JICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKy0JICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorLQlkb25lCistCWZvciBsIGluIGxhX0xOOyBkbworLQkgIGVjaG8gIiRsLklTTzg4NTktMSBJU08tODg1OS0xIgorLQkgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCistCWRvbmUKKy0JZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gcGxfUEwgc2xfU0k7IGRvCistCSAgZWNobyAiJGwuSVNPODg1OS0yIElTTy04ODU5LTIiCistCWRvbmUKKy0JZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCistCSAgZWNobyAiJGwuSVNPODg1OS00IElTTy04ODU5LTQiCistCWRvbmUKKy0JZm9yIGwgaW4gcnVfUlU7IGRvCistCSAgZWNobyAiJGwuS09JOC1SIEtPSTgtUiIKKy0JICBlY2hvICIkbC5JU084ODU5LTUgSVNPLTg4NTktNSIKKy0JICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKy0JZG9uZQorLQlmb3IgbCBpbiBiZ19CRzsgZG8KKy0JICBlY2hvICIkbC5DUDEyNTEgQ1AxMjUxIgorLQlkb25lCistCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCistCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKy0JZWNobyAiemhfVFcuQmlnNSBCSUc1IgorLQllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorLQllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorLQllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKy0JZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKy0JOzsKKy0gICAgZGFyd2luKikKKy0JIyBEYXJ3aW4gNy41IGhhcyBubF9sYW5naW5mbyhDT0RFU0VUKSwgYnV0IGl0IGlzIHVzZWxlc3M6CistCSMgLSBJdCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgd2hlbiBMQU5HIGlzIHNldCB0byBhIGxvY2FsZSBvZiB0aGUKKy0JIyAgIGZvcm0gbGxfQ0MsIGFsdGhvdWdoIGxsX0NDL0xDX0NUWVBFIGlzIGEgc3ltbGluayB0byBhbiBVVEYtOAorLQkjICAgTENfQ1RZUEUgZmlsZS4KKy0JIyAtIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTEFORywgTENfQ1RZUEUsIExDX0FMTCBhcmUgbm90IHNldCBieQorLQkjICAgdGhlIHN5c3RlbTsgbmxfbGFuZ2luZm8oQ09ERVNFVCkgcmV0dXJucyAiVVMtQVNDSUkiIGluIHRoaXMgY2FzZS4KKy0JIyAtIFRoZSBkb2N1bWVudGF0aW9uIHNheXM6CistCSMgICAgICIuLi4gYWxsIGNvZGUgdGhhdCBjYWxscyBCU0Qgc3lzdGVtIHJvdXRpbmVzIHNob3VsZCBlbnN1cmUKKy0JIyAgICAgIHRoYXQgdGhlIGNvbnN0ICpjaGFyIHBhcmFtZXRlcnMgb2YgdGhlc2Ugcm91dGluZXMgYXJlIGluIFVURi04CistCSMgICAgICBlbmNvZGluZy4gQWxsIEJTRCBzeXN0ZW0gZnVuY3Rpb25zIGV4cGVjdCB0aGVpciBzdHJpbmcKKy0JIyAgICAgIHBhcmFtZXRlcnMgdG8gYmUgaW4gVVRGLTggZW5jb2RpbmcgYW5kIG5vdGhpbmcgZWxzZS4iCistCSMgICBJdCBhbHNvIHNheXMKKy0JIyAgICAgIkFuIGFkZGl0aW9uYWwgY2F2ZWF0IGlzIHRoYXQgc3RyaW5nIHBhcmFtZXRlcnMgZm9yIGZpbGVzLAorLQkjICAgICAgcGF0aHMsIGFuZCBvdGhlciBmaWxlLXN5c3RlbSBlbnRpdGllcyBtdXN0IGJlIGluIGNhbm9uaWNhbAorLQkjICAgICAgVVRGLTguIEluIGEgY2Fub25pY2FsIFVURi04IFVuaWNvZGUgc3RyaW5nLCBhbGwgZGVjb21wb3NhYmxlCistCSMgICAgICBjaGFyYWN0ZXJzIGFyZSBkZWNvbXBvc2VkIC4uLiIKKy0JIyAgIGJ1dCB0aGlzIGlzIG5vdCB0cnVlOiBZb3UgY2FuIHBhc3Mgbm9uLWRlY29tcG9zZWQgVVRGLTggc3RyaW5ncworLQkjICAgdG8gZmlsZSBzeXN0ZW0gZnVuY3Rpb25zLCBhbmQgaXQgaXMgdGhlIE9TIHdoaWNoIHdpbGwgY29udmVydAorLQkjICAgdGhlbSB0byBkZWNvbXBvc2VkIFVURi04IGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGZpbGUgc3lzdGVtLgorLQkjIC0gVGhlIEFwcGxlIFRlcm1pbmFsIGFwcGxpY2F0aW9uIGRpc3BsYXlzIFVURi04IGJ5IGRlZmF1bHQuCistCSMgLSBIb3dldmVyLCBvdGhlciBhcHBsaWNhdGlvbnMgYXJlIGZyZWUgdG8gdXNlIGRpZmZlcmVudCBlbmNvZGluZ3M6CistCSMgICAtIHh0ZXJtIHVzZXMgSVNPLTg4NTktMSBieSBkZWZhdWx0LgorLQkjICAgLSBUZXh0RWRpdCB1c2VzIE1hY1JvbWFuIGJ5IGRlZmF1bHQuCistCSMgV2UgcHJlZmVyIFVURi04IG92ZXIgZGVjb21wb3NlZCBVVEYtOC1NQUMgYmVjYXVzZSBvbmUgc2hvdWxkCistCSMgbWluaW1pemUgdGhlIHVzZSBvZiBkZWNvbXBvc2VkIFVuaWNvZGUuIFVuZm9ydHVuYXRlbHksIHRocm91Z2ggdGhlCistCSMgRGFyd2luIGZpbGUgc3lzdGVtLCBkZWNvbXBvc2VkIFVURi04IHN0cmluZ3MgYXJlIGxlYWtlZCBpbnRvIHVzZXIKKy0JIyBzcGFjZSBuZXZlcnRoZWxlc3MuCistCWVjaG8gIiogVVRGLTgiCistCTs7CistICAgIGJlb3MqKQorLQkjIEJlT1MgaGFzIGEgc2luZ2xlIGxvY2FsZSwgYW5kIGl0IGhhcyBVVEYtOCBlbmNvZGluZy4KKy0JZWNobyAiKiBVVEYtOCIKKy0JOzsKKy0gICAgbXNkb3NkamdwcCopCistCSMgREpHUFAgMi4wMyBkb2Vzbid0IGhhdmUgbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHRoZXJlZm9yZQorLQkjIGxvY2FsY2hhcnNldC5jIGZhbGxzIGJhY2sgdG8gdXNpbmcgdGhlIGZ1bGwgbG9jYWxlIG5hbWUKKy0JIyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCistCWVjaG8gIiMiCistCWVjaG8gIiMgVGhlIGVuY29kaW5ncyBnaXZlbiBoZXJlIG1heSBub3QgYWxsIGJlIGNvcnJlY3QuIgorLQllY2hvICIjIElmIHlvdSBmaW5kIHRoYXQgdGhlIGVuY29kaW5nIGdpdmVuIGZvciB5b3VyIGxhbmd1YWdlIGFuZCIKKy0JZWNobyAiIyBjb3VudHJ5IGlzIG5vdCB0aGUgb25lIHlvdXIgRE9TIG1hY2hpbmUgYWN0dWFsbHkgdXNlcywganVzdCIKKy0JZWNobyAiIyBjb3JyZWN0IGl0IGluIHRoaXMgZmlsZSwgYW5kIHNlbmQgYSBtYWlsIHRvIgorLQllY2hvICIjIEp1YW4gTWFudWVsIEd1ZXJyZXJvIDxqdWFuLmd1ZXJyZXJvQGdteC5kZT4iCistCWVjaG8gIiMgYW5kIEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4iCistCWVjaG8gIiMiCistCWVjaG8gIkMgQVNDSUkiCistCSMgSVNPLTg4NTktMSBsYW5ndWFnZXMKKy0JZWNobyAiY2EgQ1A4NTAiCistCWVjaG8gImNhX0VTIENQODUwIgorLQllY2hvICJkYSBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKy0JZWNobyAiZGFfREsgQ1A4NjUiICMgbm90IENQODUwID8/CistCWVjaG8gImRlIENQODUwIgorLQllY2hvICJkZV9BVCBDUDg1MCIKKy0JZWNobyAiZGVfQ0ggQ1A4NTAiCistCWVjaG8gImRlX0RFIENQODUwIgorLQllY2hvICJlbiBDUDg1MCIKKy0JZWNobyAiZW5fQVUgQ1A4NTAiICMgbm90IENQNDM3ID8/CistCWVjaG8gImVuX0NBIENQODUwIgorLQllY2hvICJlbl9HQiBDUDg1MCIKKy0JZWNobyAiZW5fTlogQ1A0MzciCistCWVjaG8gImVuX1VTIENQNDM3IgorLQllY2hvICJlbl9aQSBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKy0JZWNobyAiZXMgQ1A4NTAiCistCWVjaG8gImVzX0FSIENQODUwIgorLQllY2hvICJlc19CTyBDUDg1MCIKKy0JZWNobyAiZXNfQ0wgQ1A4NTAiCistCWVjaG8gImVzX0NPIENQODUwIgorLQllY2hvICJlc19DUiBDUDg1MCIKKy0JZWNobyAiZXNfQ1UgQ1A4NTAiCistCWVjaG8gImVzX0RPIENQODUwIgorLQllY2hvICJlc19FQyBDUDg1MCIKKy0JZWNobyAiZXNfRVMgQ1A4NTAiCistCWVjaG8gImVzX0dUIENQODUwIgorLQllY2hvICJlc19ITiBDUDg1MCIKKy0JZWNobyAiZXNfTVggQ1A4NTAiCistCWVjaG8gImVzX05JIENQODUwIgorLQllY2hvICJlc19QQSBDUDg1MCIKKy0JZWNobyAiZXNfUFkgQ1A4NTAiCistCWVjaG8gImVzX1BFIENQODUwIgorLQllY2hvICJlc19TViBDUDg1MCIKKy0JZWNobyAiZXNfVVkgQ1A4NTAiCistCWVjaG8gImVzX1ZFIENQODUwIgorLQllY2hvICJldCBDUDg1MCIKKy0JZWNobyAiZXRfRUUgQ1A4NTAiCistCWVjaG8gImV1IENQODUwIgorLQllY2hvICJldV9FUyBDUDg1MCIKKy0JZWNobyAiZmkgQ1A4NTAiCistCWVjaG8gImZpX0ZJIENQODUwIgorLQllY2hvICJmciBDUDg1MCIKKy0JZWNobyAiZnJfQkUgQ1A4NTAiCistCWVjaG8gImZyX0NBIENQODUwIgorLQllY2hvICJmcl9DSCBDUDg1MCIKKy0JZWNobyAiZnJfRlIgQ1A4NTAiCistCWVjaG8gImdhIENQODUwIgorLQllY2hvICJnYV9JRSBDUDg1MCIKKy0JZWNobyAiZ2QgQ1A4NTAiCistCWVjaG8gImdkX0dCIENQODUwIgorLQllY2hvICJnbCBDUDg1MCIKKy0JZWNobyAiZ2xfRVMgQ1A4NTAiCistCWVjaG8gImlkIENQODUwIiAgICAjIG5vdCBDUDQzNyA/PworLQllY2hvICJpZF9JRCBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKy0JZWNobyAiaXMgQ1A4NjEiICAgICMgbm90IENQODUwID8/CistCWVjaG8gImlzX0lTIENQODYxIiAjIG5vdCBDUDg1MCA/PworLQllY2hvICJpdCBDUDg1MCIKKy0JZWNobyAiaXRfQ0ggQ1A4NTAiCistCWVjaG8gIml0X0lUIENQODUwIgorLQllY2hvICJsdCBDUDc3NSIKKy0JZWNobyAibHRfTFQgQ1A3NzUiCistCWVjaG8gImx2IENQNzc1IgorLQllY2hvICJsdl9MViBDUDc3NSIKKy0JZWNobyAibmIgQ1A4NjUiICAgICMgbm90IENQODUwID8/CistCWVjaG8gIm5iX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworLQllY2hvICJubCBDUDg1MCIKKy0JZWNobyAibmxfQkUgQ1A4NTAiCistCWVjaG8gIm5sX05MIENQODUwIgorLQllY2hvICJubiBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKy0JZWNobyAibm5fTk8gQ1A4NjUiICMgbm90IENQODUwID8/CistCWVjaG8gIm5vIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworLQllY2hvICJub19OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKy0JZWNobyAicHQgQ1A4NTAiCistCWVjaG8gInB0X0JSIENQODUwIgorLQllY2hvICJwdF9QVCBDUDg1MCIKKy0JZWNobyAic3YgQ1A4NTAiCistCWVjaG8gInN2X1NFIENQODUwIgorLQkjIElTTy04ODU5LTIgbGFuZ3VhZ2VzCistCWVjaG8gImNzIENQODUyIgorLQllY2hvICJjc19DWiBDUDg1MiIKKy0JZWNobyAiaHIgQ1A4NTIiCistCWVjaG8gImhyX0hSIENQODUyIgorLQllY2hvICJodSBDUDg1MiIKKy0JZWNobyAiaHVfSFUgQ1A4NTIiCistCWVjaG8gInBsIENQODUyIgorLQllY2hvICJwbF9QTCBDUDg1MiIKKy0JZWNobyAicm8gQ1A4NTIiCistCWVjaG8gInJvX1JPIENQODUyIgorLQllY2hvICJzayBDUDg1MiIKKy0JZWNobyAic2tfU0sgQ1A4NTIiCistCWVjaG8gInNsIENQODUyIgorLQllY2hvICJzbF9TSSBDUDg1MiIKKy0JZWNobyAic3EgQ1A4NTIiCistCWVjaG8gInNxX0FMIENQODUyIgorLQllY2hvICJzciBDUDg1MiIgICAgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworLQllY2hvICJzcl9DUyBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworLQllY2hvICJzcl9ZVSBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworLQkjIElTTy04ODU5LTMgbGFuZ3VhZ2VzCistCWVjaG8gIm10IENQODUwIgorLQllY2hvICJtdF9NVCBDUDg1MCIKKy0JIyBJU08tODg1OS01IGxhbmd1YWdlcworLQllY2hvICJiZSBDUDg2NiIKKy0JZWNobyAiYmVfQkUgQ1A4NjYiCistCWVjaG8gImJnIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworLQllY2hvICJiZ19CRyBDUDg2NiIgIyBub3QgQ1A4NTUgPz8KKy0JZWNobyAibWsgQ1A4NjYiICAgICMgbm90IENQODU1ID8/CistCWVjaG8gIm1rX01LIENQODY2IiAjIG5vdCBDUDg1NSA/PworLQllY2hvICJydSBDUDg2NiIKKy0JZWNobyAicnVfUlUgQ1A4NjYiCistCWVjaG8gInVrIENQMTEyNSIKKy0JZWNobyAidWtfVUEgQ1AxMTI1IgorLQkjIElTTy04ODU5LTYgbGFuZ3VhZ2VzCistCWVjaG8gImFyIENQODY0IgorLQllY2hvICJhcl9BRSBDUDg2NCIKKy0JZWNobyAiYXJfRFogQ1A4NjQiCistCWVjaG8gImFyX0VHIENQODY0IgorLQllY2hvICJhcl9JUSBDUDg2NCIKKy0JZWNobyAiYXJfSVIgQ1A4NjQiCistCWVjaG8gImFyX0pPIENQODY0IgorLQllY2hvICJhcl9LVyBDUDg2NCIKKy0JZWNobyAiYXJfTUEgQ1A4NjQiCistCWVjaG8gImFyX09NIENQODY0IgorLQllY2hvICJhcl9RQSBDUDg2NCIKKy0JZWNobyAiYXJfU0EgQ1A4NjQiCistCWVjaG8gImFyX1NZIENQODY0IgorLQkjIElTTy04ODU5LTcgbGFuZ3VhZ2VzCistCWVjaG8gImVsIENQODY5IgorLQllY2hvICJlbF9HUiBDUDg2OSIKKy0JIyBJU08tODg1OS04IGxhbmd1YWdlcworLQllY2hvICJoZSBDUDg2MiIKKy0JZWNobyAiaGVfSUwgQ1A4NjIiCistCSMgSVNPLTg4NTktOSBsYW5ndWFnZXMKKy0JZWNobyAidHIgQ1A4NTciCistCWVjaG8gInRyX1RSIENQODU3IgorLQkjIEphcGFuZXNlCistCWVjaG8gImphIENQOTMyIgorLQllY2hvICJqYV9KUCBDUDkzMiIKKy0JIyBDaGluZXNlCistCWVjaG8gInpoX0NOIEdCSyIKKy0JZWNobyAiemhfVFcgQ1A5NTAiICMgbm90IENQOTM4ID8/CistCSMgS29yZWFuCistCWVjaG8gImtyIENQOTQ5IiAgICAjIG5vdCBDUDkzNCA/PworLQllY2hvICJrcl9LUiBDUDk0OSIgIyBub3QgQ1A5MzQgPz8KKy0JIyBUaGFpCistCWVjaG8gInRoIENQODc0IgorLQllY2hvICJ0aF9USCBDUDg3NCIKKy0JIyBPdGhlcgorLQllY2hvICJlbyBDUDg1MCIKKy0JZWNobyAiZW9fRU8gQ1A4NTAiCistCTs7CistZXNhYworLS0tIGEvaW50bC9kY2dldHRleHQuYworKysrIC9kZXYvbnVsbAorQEAgLTEsNTYgKzAsMCBAQAorLS8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY2dldHRleHQoMykgZnVuY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGxpYmludGwuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSAibGliZ251aW50bC5oIgorLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0vKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCistICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorLSAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworLSAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CistIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKy0jZWxzZQorLSMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorLSMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CistI2VuZGlmCistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCistICAgbG9jYWxlLiAgKi8KKy1jaGFyICoKKy1EQ0dFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpCisteworLSAgcmV0dXJuIERDSUdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBOVUxMLCAwLCAwLCBjYXRlZ29yeSk7CistfQorLQorLSNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworLUlOVERFRihfX2RjZ2V0dGV4dCkKKy13ZWFrX2FsaWFzIChfX2RjZ2V0dGV4dCwgZGNnZXR0ZXh0KTsKKy0jZW5kaWYKKy0tLSBhL2ludGwvZGNpZ2V0dGV4dC5jCisrKysgL2Rldi9udWxsCitAQCAtMSwxNjg5ICswLDAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJuYWwgZGNpZ2V0dGV4dCBmdW5jdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgbWVtcGNweSgpLgorLSAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorLSAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKy0jaWZuZGVmIF9HTlVfU09VUkNFCistIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorLSNlbmRpZgorLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0vKiBOTF9MT0NBTEVfTkFNRSBkb2VzIG5vdCB3b3JrIGluIGdsaWJjLTIuNC4gIElnbm9yZSBpdC4gICovCistI3VuZGVmIEhBVkVfTkxfTE9DQUxFX05BTUUKKy0KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistCistI2lmZGVmIF9fR05VQ19fCistIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKy0jIGRlZmluZSBIQVZFX0FMTE9DQSAxCistI2Vsc2UKKy0jIGlmZGVmIF9NU0NfVkVSCistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCistIyBlbHNlCistIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICAgaW5jbHVkZSA8YWxsb2NhLmg+CistIyAgZWxzZQorLSMgICBpZmRlZiBfQUlYCistICNwcmFnbWEgYWxsb2NhCistIyAgIGVsc2UKKy0jICAgIGlmbmRlZiBhbGxvY2EKKy1jaGFyICphbGxvY2EgKCk7CistIyAgICBlbmRpZgorLSMgICBlbmRpZgorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpZm5kZWYgZXJybm8KKy1leHRlcm4gaW50IGVycm5vOworLSNlbmRpZgorLSNpZm5kZWYgX19zZXRfZXJybm8KKy0jIGRlZmluZSBfX3NldF9lcnJubyh2YWwpIGVycm5vID0gKHZhbCkKKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHVuaXN0ZC5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxsb2NhbGUuaD4KKy0KKy0jaWZkZWYgX0xJQkMKKy0gIC8qIEd1ZXNzIHdoZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBzaWduYWwgU0lHRlBFLgorLSAgICAgU2V0IHRvIDEgb25seSBpZiB5b3Uga25vdyBmb3Igc3VyZS4gIEluIGNhc2Ugb2YgZG91YnQsIHNldCB0byAwLiAgKi8KKy0jIGlmIGRlZmluZWQgX19hbHBoYV9fIHx8IGRlZmluZWQgX19hcm1fXyB8fCBkZWZpbmVkIF9faTM4Nl9fIFwKKy0gICAgIHx8IGRlZmluZWQgX19tNjhrX18gfHwgZGVmaW5lZCBfX3MzOTBfXworLSMgIGRlZmluZSBJTlRESVYwX1JBSVNFU19TSUdGUEUgMQorLSMgZWxzZQorLSMgIGRlZmluZSBJTlRESVYwX1JBSVNFU19TSUdGUEUgMAorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorLSMgaW5jbHVkZSA8c2lnbmFsLmg+CistI2VuZGlmCistCistI2lmIGRlZmluZWQgSEFWRV9TWVNfUEFSQU1fSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQgX0xJQkMKKy0jIGlmIEhBVkVfTkxfTE9DQUxFX05BTUUKKy0jICBpbmNsdWRlIDxsYW5naW5mby5oPgorLSMgZW5kaWYKKy0jIGluY2x1ZGUgImxvY2FsY2hhcnNldC5oIgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJnZXR0ZXh0UC5oIgorLSNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxsaWJpbnRsLmg+CistI2Vsc2UKKy0jIGlmZGVmIElOX0xJQkdMT0NBTEUKKy0jICBpbmNsdWRlIDxsaWJpbnRsLmg+CistIyBlbmRpZgorLSMgaW5jbHVkZSAibGliZ251aW50bC5oIgorLSNlbmRpZgorLSNpbmNsdWRlICJoYXNoLXN0cmluZy5oIgorLQorLS8qIEhhbmRsZSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICAqLworLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKy0jIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIF9fbGliY19yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkCistIyBkZWZpbmUgZ2xfcndsb2NrX3JkbG9jayBfX2xpYmNfcndsb2NrX3JkbG9jaworLSMgZGVmaW5lIGdsX3J3bG9ja193cmxvY2sgX19saWJjX3J3bG9ja193cmxvY2sKKy0jIGRlZmluZSBnbF9yd2xvY2tfdW5sb2NrIF9fbGliY19yd2xvY2tfdW5sb2NrCistI2Vsc2UKKy0jIGluY2x1ZGUgImxvY2suaCIKKy0jZW5kaWYKKy0KKy0vKiBBbGlnbm1lbnQgb2YgdHlwZXMuICAqLworLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDIKKy0jIGRlZmluZSBhbGlnbm9mKFRZUEUpIF9fYWxpZ25vZl9fIChUWVBFKQorLSNlbHNlCistIyBkZWZpbmUgYWxpZ25vZihUWVBFKSBcCistICAgICgoaW50KSAmKChzdHJ1Y3QgeyBjaGFyIGR1bW15MTsgVFlQRSBkdW1teTI7IH0gKikgMCktPmR1bW15MikKKy0jZW5kaWYKKy0KKy0vKiBTb21lIGNvbXBpbGVycywgbGlrZSBTdW5PUzQgY2MsIGRvbid0IGhhdmUgb2Zmc2V0b2YgaW4gPHN0ZGRlZi5oPi4gICovCistI2lmbmRlZiBvZmZzZXRvZgorLSMgZGVmaW5lIG9mZnNldG9mKHR5cGUsaWRlbnQpICgoc2l6ZV90KSYoKCh0eXBlKikwKS0+aWRlbnQpKQorLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0jaWZkZWYgX0xJQkMKKy0vKiBSZW5hbWUgdGhlIG5vbiBBTlNJIEMgZnVuY3Rpb25zLiAgVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQKKy0gICBiZWNhdXNlIHNvbWUgQU5TSSBDIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgbGlua2luZyB3aXRoIHRoaXMgb2JqZWN0CistICAgZmlsZSBhbmQgdGhlIG5hbWUgc3BhY2UgbXVzdCBub3QgYmUgcG9sbHV0ZWQuICAqLworLSMgZGVmaW5lIGdldGN3ZCBfX2dldGN3ZAorLSMgaWZuZGVmIHN0cGNweQorLSMgIGRlZmluZSBzdHBjcHkgX19zdHBjcHkKKy0jIGVuZGlmCistIyBkZWZpbmUgdGZpbmQgX190ZmluZAorLSNlbHNlCistIyBpZiAhZGVmaW5lZCBIQVZFX0dFVENXRAorLWNoYXIgKmdldHdkICgpOworLSMgIGRlZmluZSBnZXRjd2QoYnVmLCBtYXgpIGdldHdkIChidWYpCistIyBlbHNlCistIyAgaWYgVk1TCistIyAgIGRlZmluZSBnZXRjd2QoYnVmLCBtYXgpIChnZXRjd2QpIChidWYsIG1heCwgMCkKKy0jICBlbHNlCistY2hhciAqZ2V0Y3dkICgpOworLSMgIGVuZGlmCistIyBlbmRpZgorLSMgaWZuZGVmIEhBVkVfU1RQQ1BZCistc3RhdGljIGNoYXIgKnN0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKKy0jIGVuZGlmCistIyBpZm5kZWYgSEFWRV9NRU1QQ1BZCistc3RhdGljIHZvaWQgKm1lbXBjcHkgKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBVc2UgYSByZXBsYWNlbWVudCBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgdGhlIGB0c2VhcmNoJyBmdW5jdGlvbgorLSAgIGZhbWlseS4gICovCistI2lmIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzZWFyY2guaD4KKy0jZWxzZQorLSMgZGVmaW5lIHRzZWFyY2ggbGliaW50bF90c2VhcmNoCistIyBkZWZpbmUgdGZpbmQgbGliaW50bF90ZmluZAorLSMgZGVmaW5lIHRkZWxldGUgbGliaW50bF90ZGVsZXRlCistIyBkZWZpbmUgdHdhbGsgbGliaW50bF90d2FsaworLSMgaW5jbHVkZSAidHNlYXJjaC5oIgorLSNlbmRpZgorLQorLSNpZmRlZiBfTElCQworLSMgZGVmaW5lIHRzZWFyY2ggX190c2VhcmNoCistI2VuZGlmCistCistLyogQW1vdW50IHRvIGluY3JlYXNlIGJ1ZmZlciBzaXplIGJ5IGluIGVhY2ggdHJ5LiAgKi8KKy0jZGVmaW5lIFBBVEhfSU5DUiAzMgorLQorLS8qIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBwYXRobWF4LmguICAqLworLS8qIE5vbi1QT1NJWCBCU0Qgc3lzdGVtcyBtaWdodCBoYXZlIGdjYydzIGxpbWl0cy5oLCB3aGljaCBkb2Vzbid0IGRlZmluZQorLSAgIFBBVEhfTUFYIGJ1dCBtaWdodCBjYXVzZSByZWRlZmluaXRpb24gd2FybmluZ3Mgd2hlbiBzeXMvcGFyYW0uaCBpcworLSAgIGxhdGVyIGluY2x1ZGVkIChhcyBvbiBNT1JFL0JTRCA0LjMpLiAgKi8KKy0jaWYgZGVmaW5lZCBfUE9TSVhfVkVSU0lPTiB8fCAoZGVmaW5lZCBIQVZFX0xJTUlUU19IICYmICFkZWZpbmVkIF9fR05VQ19fKQorLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2VuZGlmCistCistI2lmbmRlZiBfUE9TSVhfUEFUSF9NQVgKKy0jIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU1CistI2VuZGlmCistCistI2lmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgX1BDX1BBVEhfTUFYCistIyBkZWZpbmUgUEFUSF9NQVggKHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkgPCAxID8gMTAyNCA6IHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkpCistI2VuZGlmCistCistLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KKy0jaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKy0jIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorLSNlbmRpZgorLQorLSNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIE1BWFBBVEhMRU4KKy0jIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCistI2VuZGlmCistCistI2lmbmRlZiBQQVRIX01BWAorLSMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorLSNlbmRpZgorLQorLS8qIFBhdGhuYW1lIHN1cHBvcnQuCistICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCistICAgSVNfQUJTT0xVVEVfUEFUSChQKSAgdGVzdHMgd2hldGhlciBQIGlzIGFuIGFic29sdXRlIHBhdGguICBJZiBpdCBpcyBub3QsCistICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKy0gICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKy0gKi8KKy0jaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworLSAgLyogV2luMzIsIEN5Z3dpbiwgT1MvMiwgRE9TICovCistIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKy0jIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKy0gICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorLSAgICAgJiYgKFApWzFdID09ICc6JykKKy0jIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJQ0UgKFApKQorLSMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgXAorLSAgICAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwgfHwgc3RyY2hyIChQLCAnXFwnKSAhPSBOVUxMIHx8IEhBU19ERVZJQ0UgKFApKQorLSNlbHNlCistICAvKiBVbml4ICovCistIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKy0jIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKy0jIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKy0jZW5kaWYKKy0KKy0vKiBXaGV0aGVyIHRvIHN1cHBvcnQgZGlmZmVyZW50IGxvY2FsZXMgaW4gZGlmZmVyZW50IHRocmVhZHMuICAqLworLSNpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTkxfTE9DQUxFX05BTUUgfHwgKEhBVkVfU1RSVUNUX19fTE9DQUxFX1NUUlVDVF9fX05BTUVTICYmIGRlZmluZWQgVVNFX0lOX0dFVFRFWFRfVEVTVFMpIHx8IGRlZmluZWQgSU5fTElCR0xPQ0FMRQorLSMgZGVmaW5lIEhBVkVfUEVSX1RIUkVBRF9MT0NBTEUKKy0jZW5kaWYKKy0KKy0vKiBUaGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSBzZWFyY2ggdHJlZSB3aGVyZSBrbm93biB0cmFuc2xhdGlvbnMKKy0gICBhcmUgc3RvcmVkLiAgKi8KKy1zdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdAorLXsKKy0gIC8qIERvbWFpbiBpbiB3aGljaCB0byBzZWFyY2guICAqLworLSAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0KKy0gIC8qIFRoZSBjYXRlZ29yeS4gICovCistICBpbnQgY2F0ZWdvcnk7CistCistI2lmZGVmIEhBVkVfUEVSX1RIUkVBRF9MT0NBTEUKKy0gIC8qIE5hbWUgb2YgdGhlIHJlbGV2YW50IGxvY2FsZSBjYXRlZ29yeSwgb3IgIiIgZm9yIHRoZSBnbG9iYWwgbG9jYWxlLiAgKi8KKy0gIGNvbnN0IGNoYXIgKmxvY2FsZW5hbWU7CistI2VuZGlmCistCistI2lmZGVmIElOX0xJQkdMT0NBTEUKKy0gIC8qIFRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcuICAqLworLSAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CistI2VuZGlmCistCistICAvKiBTdGF0ZSBvZiB0aGUgY2F0YWxvZyBjb3VudGVyIGF0IHRoZSBwb2ludCB0aGUgc3RyaW5nIHdhcyBmb3VuZC4gICovCistICBpbnQgY291bnRlcjsKKy0KKy0gIC8qIENhdGFsb2cgd2hlcmUgdGhlIHN0cmluZyB3YXMgZm91bmQuICAqLworLSAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluOworLQorLSAgLyogQW5kIGZpbmFsbHkgdGhlIHRyYW5zbGF0aW9uLiAgKi8KKy0gIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uOworLSAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbmd0aDsKKy0KKy0gIC8qIFBvaW50ZXIgdG8gdGhlIHN0cmluZyBpbiBxdWVzdGlvbi4gICovCistICBjaGFyIG1zZ2lkW1pFUk9dOworLX07CistCistZ2xfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCB0cmVlX2xvY2spCistCistLyogUm9vdCBvZiB0aGUgc2VhcmNoIHRyZWUgd2l0aCBrbm93biB0cmFuc2xhdGlvbnMuICAqLworLXN0YXRpYyB2b2lkICpyb290OworLQorLS8qIEZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGtub3duIHRyYW5zbGF0aW9ucy4gICovCistc3RhdGljIGludAorLXRyYW5zY21wIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCisteworLSAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMxOworLSAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMyOworLSAgaW50IHJlc3VsdDsKKy0KKy0gIHMxID0gKGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopIHAxOworLSAgczIgPSAoY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikgcDI7CistCistICByZXN1bHQgPSBzdHJjbXAgKHMxLT5tc2dpZCwgczItPm1zZ2lkKTsKKy0gIGlmIChyZXN1bHQgPT0gMCkKKy0gICAgeworLSAgICAgIHJlc3VsdCA9IHN0cmNtcCAoczEtPmRvbWFpbm5hbWUsIHMyLT5kb21haW5uYW1lKTsKKy0gICAgICBpZiAocmVzdWx0ID09IDApCistCXsKKy0jaWZkZWYgSEFWRV9QRVJfVEhSRUFEX0xPQ0FMRQorLQkgIHJlc3VsdCA9IHN0cmNtcCAoczEtPmxvY2FsZW5hbWUsIHMyLT5sb2NhbGVuYW1lKTsKKy0JICBpZiAocmVzdWx0ID09IDApCistI2VuZGlmCistCSAgICB7CistI2lmZGVmIElOX0xJQkdMT0NBTEUKKy0JICAgICAgcmVzdWx0ID0gc3RyY21wIChzMS0+ZW5jb2RpbmcsIHMyLT5lbmNvZGluZyk7CistCSAgICAgIGlmIChyZXN1bHQgPT0gMCkKKy0jZW5kaWYKKy0JCS8qIFdlIGNvbXBhcmUgdGhlIGNhdGVnb3J5IGxhc3QgKHRob3VnaCB0aGlzIGlzIHRoZSBjaGVhcGVzdAorLQkJICAgb3BlcmF0aW9uKSBzaW5jZSBpdCBpcyBob3BlZnVsbHkgYWx3YXlzIHRoZSBzYW1lIChuYW1lbHkKKy0JCSAgIExDX01FU1NBR0VTKS4gICovCistCQlyZXN1bHQgPSBzMS0+Y2F0ZWdvcnkgLSBzMi0+Y2F0ZWdvcnk7CistCSAgICB9CistCX0KKy0gICAgfQorLQorLSAgcmV0dXJuIHJlc3VsdDsKKy19CistCistLyogTmFtZSBvZiB0aGUgZGVmYXVsdCBkb21haW4gdXNlZCBmb3IgZ2V0dGV4dCgzKSBwcmlvciBhbnkgY2FsbCB0bworLSAgIHRleHRkb21haW4oMykuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBpcyAibWVzc2FnZXMiLiAgKi8KKy1jb25zdCBjaGFyIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluW10gYXR0cmlidXRlX2hpZGRlbiA9ICJtZXNzYWdlcyI7CistCistI2lmbmRlZiBJTl9MSUJHTE9DQUxFCistLyogVmFsdWUgdXNlZCBhcyB0aGUgZGVmYXVsdCBkb21haW4gZm9yIGdldHRleHQoMykuICAqLworLWNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGF0dHJpYnV0ZV9oaWRkZW4KKy0gICAgID0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW47CistI2VuZGlmCistCistLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworLSNpZiBkZWZpbmVkIF9fRU1YX18KKy1leHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW107CistI2Vsc2UKKy0jIGlmZGVmIF9MSUJDCistZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdOworLWxpYmNfaGlkZGVuX3Byb3RvIChfbmxfZGVmYXVsdF9kaXJuYW1lKQorLSMgZW5kaWYKKy1jb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXSA9IExPQ0FMRURJUjsKKy0jIGlmZGVmIF9MSUJDCistbGliY19oaWRkZW5fZGF0YV9kZWYgKF9ubF9kZWZhdWx0X2Rpcm5hbWUpCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZm5kZWYgSU5fTElCR0xPQ0FMRQorLS8qIExpc3Qgd2l0aCBiaW5kaW5ncyBvZiBzcGVjaWZpYyBkb21haW5zIGNyZWF0ZWQgYnkgYmluZHRleHRkb21haW4oKQorLSAgIGNhbGxzLiAgKi8KKy1zdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKy0jZW5kaWYKKy0KKy0vKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworLXN0YXRpYyBjaGFyICpwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sCistCQkJICAgIHVuc2lnbmVkIGxvbmcgaW50IG4sCistCQkJICAgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uLCBzaXplX3QgdHJhbnNsYXRpb25fbGVuKQorLSAgICAgaW50ZXJuYWxfZnVuY3Rpb247CistCistI2lmZGVmIElOX0xJQkdMT0NBTEUKKy1zdGF0aWMgY29uc3QgY2hhciAqZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGludCBjYXRlZ29yeSwKKy0JCQkJCSBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUsCistCQkJCQkgY29uc3QgY2hhciAqbG9jYWxlbmFtZSkKKy0gICAgIGludGVybmFsX2Z1bmN0aW9uOworLSNlbHNlCistc3RhdGljIGNvbnN0IGNoYXIgKmd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksCistCQkJCQkgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorLSAgICAgaW50ZXJuYWxfZnVuY3Rpb247CistI2VuZGlmCistCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorLSMgZGVmaW5lIGNhdGVnb3J5X3RvX25hbWUoY2F0ZWdvcnkpIFwKKy0gIF9ubF9jYXRlZ29yeV9uYW1lcy5zdHIgKyBfbmxfY2F0ZWdvcnlfbmFtZV9pZHhzW2NhdGVnb3J5XQorLSNlbHNlCistc3RhdGljIGNvbnN0IGNoYXIgKmNhdGVnb3J5X3RvX25hbWUgKGludCBjYXRlZ29yeSkgaW50ZXJuYWxfZnVuY3Rpb247CistI2VuZGlmCistI2lmIChkZWZpbmVkIF9MSUJDIHx8IEhBVkVfSUNPTlYpICYmICFkZWZpbmVkIElOX0xJQkdMT0NBTEUKKy1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X291dHB1dF9jaGFyc2V0IChzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKy0gICAgIGludGVybmFsX2Z1bmN0aW9uOworLSNlbmRpZgorLQorLQorLS8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorLSAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCistI2lmZGVmIEhBVkVfQUxMT0NBCistLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCistIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworLSNlbHNlCistc3RydWN0IGJsb2NrX2xpc3QKKy17CistICB2b2lkICphZGRyZXNzOworLSAgc3RydWN0IGJsb2NrX2xpc3QgKm5leHQ7CistfTsKKy0jIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJCQkgICAgICBcCistICBkbyB7CQkJCQkJCQkJICAgICAgXAorLSAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV3cCA9IChzdHJ1Y3QgYmxvY2tfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsgIFwKKy0gICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3IGVsZW1lbnQgdG8JICAgICAgXAorLSAgICAgICB0aGUgbGlzdC4gICovCQkJCQkJCSAgICAgIFwKKy0gICAgaWYgKG5ld3AgIT0gTlVMTCkgewkJCQkJCQkgICAgICBcCistICAgICAgbmV3cC0+YWRkcmVzcyA9IChhZGRyKTsJCQkJCQkgICAgICBcCistICAgICAgbmV3cC0+bmV4dCA9IChsaXN0KTsJCQkJCQkgICAgICBcCistICAgICAgKGxpc3QpID0gbmV3cDsJCQkJCQkJICAgICAgXAorLSAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfSB3aGlsZSAoMCkKKy0jIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KQkJCQkJCSAgICAgIFwKKy0gIGRvIHsJCQkJCQkJCQkgICAgICBcCistICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsJCQkJCQkgICAgICBcCistICAgICAgc3RydWN0IGJsb2NrX2xpc3QgKm9sZCA9IGxpc3Q7CQkJCQkgICAgICBcCistICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAorLSAgICAgIGZyZWUgKG9sZC0+YWRkcmVzcyk7CQkJCQkJICAgICAgXAorLSAgICAgIGZyZWUgKG9sZCk7CQkJCQkJCSAgICAgIFwKKy0gICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0gd2hpbGUgKDApCistIyB1bmRlZiBhbGxvY2EKKy0jIGRlZmluZSBhbGxvY2Eoc2l6ZSkgKG1hbGxvYyAoc2l6ZSkpCistIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKy0jZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKy0KKy0KKy0jaWZkZWYgX0xJQkMKKy0vKiBMaXN0IG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRyYW5zbGF0aW9ucy4gICovCistdHlwZWRlZiBzdHJ1Y3QgdHJhbnNtZW1fbGlzdAorLXsKKy0gIHN0cnVjdCB0cmFuc21lbV9saXN0ICpuZXh0OworLSAgY2hhciBkYXRhW1pFUk9dOworLX0gdHJhbnNtZW1fYmxvY2tfdDsKKy1zdGF0aWMgc3RydWN0IHRyYW5zbWVtX2xpc3QgKnRyYW5zbWVtX2xpc3Q7CistI2Vsc2UKKy10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHJhbnNtZW1fYmxvY2tfdDsKKy0jZW5kaWYKKy0KKy0KKy0vKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCistICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorLSAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworLSAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKy0jZWxzZQorLSMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CistI2VuZGlmCistCistLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCistZ2xfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZCAoLCBfbmxfc3RhdGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorLQorLS8qIENoZWNraW5nIHdoZXRoZXIgdGhlIGJpbmFyaWVzIHJ1bnMgU1VJRCBtdXN0IGJlIGRvbmUgYW5kIGdsaWJjIHByb3ZpZGVzCistICAgZWFzaWVyIG1ldGhvZHMgdGhlcmVmb3JlIHdlIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworLSNpZmRlZiBfTElCQworLSMgZGVmaW5lIEVOQUJMRV9TRUNVUkUgX19saWJjX2VuYWJsZV9zZWN1cmUKKy0jIGRlZmluZSBERVRFUk1JTkVfU0VDVVJFCistI2Vsc2UKKy0jIGlmbmRlZiBIQVZFX0dFVFVJRAorLSMgIGRlZmluZSBnZXR1aWQoKSAwCistIyBlbmRpZgorLSMgaWZuZGVmIEhBVkVfR0VUR0lECistIyAgZGVmaW5lIGdldGdpZCgpIDAKKy0jIGVuZGlmCistIyBpZm5kZWYgSEFWRV9HRVRFVUlECistIyAgZGVmaW5lIGdldGV1aWQoKSBnZXR1aWQoKQorLSMgZW5kaWYKKy0jIGlmbmRlZiBIQVZFX0dFVEVHSUQKKy0jICBkZWZpbmUgZ2V0ZWdpZCgpIGdldGdpZCgpCistIyBlbmRpZgorLXN0YXRpYyBpbnQgZW5hYmxlX3NlY3VyZTsKKy0jIGRlZmluZSBFTkFCTEVfU0VDVVJFIChlbmFibGVfc2VjdXJlID09IDEpCistIyBkZWZpbmUgREVURVJNSU5FX1NFQ1VSRSBcCistICBpZiAoZW5hYmxlX3NlY3VyZSA9PSAwKQkJCQkJCSAgICAgIFwKKy0gICAgewkJCQkJCQkJCSAgICAgIFwKKy0gICAgICBpZiAoZ2V0dWlkICgpICE9IGdldGV1aWQgKCkgfHwgZ2V0Z2lkICgpICE9IGdldGVnaWQgKCkpCQkgICAgICBcCistCWVuYWJsZV9zZWN1cmUgPSAxOwkJCQkJCSAgICAgIFwKKy0gICAgICBlbHNlCQkJCQkJCQkgICAgICBcCistCWVuYWJsZV9zZWN1cmUgPSAtMTsJCQkJCQkgICAgICBcCistICAgIH0KKy0jZW5kaWYKKy0KKy0vKiBHZXQgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIHRoZSBwbHVyYWwgZXhwcmVzc2lvbi4gICovCistI2luY2x1ZGUgImV2YWwtcGx1cmFsLmgiCistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CistICAgQ0FURUdPUlkgbG9jYWxlIGFuZCwgaWYgUExVUkFMIGlzIG5vbnplcm8sIHNlYXJjaCBvdmVyIHN0cmluZworLSAgIGRlcGVuZGluZyBvbiB0aGUgcGx1cmFsIGZvcm0gZGV0ZXJtaW5lZCBieSBOLiAgKi8KKy0jaWZkZWYgSU5fTElCR0xPQ0FMRQorLWNoYXIgKgorLWdsX2RjaWdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCSAgICAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKy0JICAgICAgIGludCBwbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IG4sCistCSAgICAgICBpbnQgY2F0ZWdvcnksCistCSAgICAgICBjb25zdCBjaGFyICpsb2NhbGVuYW1lLCBjb25zdCBjaGFyICplbmNvZGluZykKKy0jZWxzZQorLWNoYXIgKgorLURDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorLQkgICAgaW50IHBsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgbiwgaW50IGNhdGVnb3J5KQorLSNlbmRpZgorLXsKKy0jaWZuZGVmIEhBVkVfQUxMT0NBCistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2tfbGlzdCA9IE5VTEw7CistI2VuZGlmCistICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW47CistICBzdHJ1Y3QgYmluZGluZyAqYmluZGluZzsKKy0gIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZTsKKy0gIGNvbnN0IGNoYXIgKmNhdGVnb3J5dmFsdWU7CistICBjb25zdCBjaGFyICpkaXJuYW1lOworLSAgY2hhciAqeGRvbWFpbm5hbWU7CistICBjaGFyICpzaW5nbGVfbG9jYWxlOworLSAgY2hhciAqcmV0dmFsOworLSAgc2l6ZV90IHJldGxlbjsKKy0gIGludCBzYXZlZF9lcnJubzsKKy0gIHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICpzZWFyY2g7CistICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKmZvdW5kcCA9IE5VTEw7CistICBzaXplX3QgbXNnaWRfbGVuOworLSNpZiBkZWZpbmVkIEhBVkVfUEVSX1RIUkVBRF9MT0NBTEUgJiYgIWRlZmluZWQgSU5fTElCR0xPQ0FMRQorLSAgY29uc3QgY2hhciAqbG9jYWxlbmFtZTsKKy0jZW5kaWYKKy0gIHNpemVfdCBkb21haW5uYW1lX2xlbjsKKy0KKy0gIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworLSAgaWYgKG1zZ2lkMSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0jaWZkZWYgX0xJQkMKKy0gIGlmIChjYXRlZ29yeSA8IDAgfHwgY2F0ZWdvcnkgPj0gX19MQ19MQVNUIHx8IGNhdGVnb3J5ID09IExDX0FMTCkKKy0gICAgLyogQm9ndXMuICAqLworLSAgICByZXR1cm4gKHBsdXJhbCA9PSAwCistCSAgICA/IChjaGFyICopIG1zZ2lkMQorLQkgICAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCistCSAgICA6IG4gPT0gMSA/IChjaGFyICopIG1zZ2lkMSA6IChjaGFyICopIG1zZ2lkMik7CistI2VuZGlmCistCistICAvKiBQcmVzZXJ2ZSB0aGUgYGVycm5vJyB2YWx1ZS4gICovCistICBzYXZlZF9lcnJubyA9IGVycm5vOworLQorLSAgZ2xfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOworLQorLSAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorLSAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCistICAgICBkZWZpbml0aW9uIGxlZnQgdGhpcyB1bmRlZmluZWQuICAqLworLSAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKy0gICAgZG9tYWlubmFtZSA9IF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworLQorLSAgLyogT1MvMiBzcGVjaWZpYzogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxpYmludGwgdmVyc2lvbnMgICovCistI2lmZGVmIExDX01FU1NBR0VTX0NPTVBBVAorLSAgaWYgKGNhdGVnb3J5ID09IExDX01FU1NBR0VTX0NPTVBBVCkKKy0gICAgY2F0ZWdvcnkgPSBMQ19NRVNTQUdFUzsKKy0jZW5kaWYKKy0KKy0gIG1zZ2lkX2xlbiA9IHN0cmxlbiAobXNnaWQxKSArIDE7CistCistICAvKiBUcnkgdG8gZmluZCB0aGUgdHJhbnNsYXRpb24gYW1vbmcgdGhvc2Ugd2hpY2ggd2UgZm91bmQgYXQKKy0gICAgIHNvbWUgdGltZS4gICovCistICBzZWFyY2ggPSAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikKKy0JICAgYWxsb2NhIChvZmZzZXRvZiAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QsIG1zZ2lkKSArIG1zZ2lkX2xlbik7CistICBtZW1jcHkgKHNlYXJjaC0+bXNnaWQsIG1zZ2lkMSwgbXNnaWRfbGVuKTsKKy0gIHNlYXJjaC0+ZG9tYWlubmFtZSA9IGRvbWFpbm5hbWU7CistICBzZWFyY2gtPmNhdGVnb3J5ID0gY2F0ZWdvcnk7CistI2lmZGVmIEhBVkVfUEVSX1RIUkVBRF9MT0NBTEUKKy0jIGlmbmRlZiBJTl9MSUJHTE9DQUxFCistIyAgaWZkZWYgX0xJQkMKKy0gIGxvY2FsZW5hbWUgPSBfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KTsKKy0jICBlbHNlCistIyAgIGlmIEhBVkVfTkxfTE9DQUxFX05BTUUKKy0gIC8qIE5MX0xPQ0FMRV9OQU1FIGlzIHB1YmxpYyBnbGliYyBBUEkgaW50cm9kdWNlZCBpbiBnbGliYy0yLjQuICAqLworLSAgbG9jYWxlbmFtZSA9IG5sX2xhbmdpbmZvIChOTF9MT0NBTEVfTkFNRSAoY2F0ZWdvcnkpKTsKKy0jICAgZWxzZQorLSMgICAgaWYgSEFWRV9TVFJVQ1RfX19MT0NBTEVfU1RSVUNUX19fTkFNRVMgJiYgZGVmaW5lZCBVU0VfSU5fR0VUVEVYVF9URVNUUworLSAgLyogVGhlIF9fbmFtZXMgZmllbGQgaXMgbm90IHB1YmxpYyBnbGliYyBBUEkgYW5kIG11c3QgdGhlcmVmb3JlIG5vdCBiZSB1c2VkCistICAgICBpbiBjb2RlIHRoYXQgaXMgaW5zdGFsbGVkIGluIHB1YmxpYyBsb2NhdGlvbnMuICAqLworLSAgeworLSAgICBsb2NhbGVfdCB0aHJlYWRfbG9jYWxlID0gdXNlbG9jYWxlIChOVUxMKTsKKy0gICAgaWYgKHRocmVhZF9sb2NhbGUgIT0gTENfR0xPQkFMX0xPQ0FMRSkKKy0gICAgICBsb2NhbGVuYW1lID0gdGhyZWFkX2xvY2FsZS0+X19uYW1lc1tjYXRlZ29yeV07CistICAgIGVsc2UKKy0gICAgICBsb2NhbGVuYW1lID0gIiI7CistICB9CistIyAgICBlbmRpZgorLSMgICBlbmRpZgorLSMgIGVuZGlmCistIyBlbmRpZgorLSAgc2VhcmNoLT5sb2NhbGVuYW1lID0gbG9jYWxlbmFtZTsKKy0jIGlmZGVmIElOX0xJQkdMT0NBTEUKKy0gIHNlYXJjaC0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKKy0jIGVuZGlmCistCistICAvKiBTaW5jZSB0ZmluZC90c2VhcmNoIG1hbmFnZSBhIGJhbGFuY2VkIHRyZWUsIGNvbmN1cnJlbnQgdGZpbmQgYW5kCistICAgICB0c2VhcmNoIGNhbGxzIGNhbiBiZSBmYXRhbC4gICovCistICBnbF9yd2xvY2tfcmRsb2NrICh0cmVlX2xvY2spOworLQorLSAgZm91bmRwID0gKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICoqKSB0ZmluZCAoc2VhcmNoLCAmcm9vdCwgdHJhbnNjbXApOworLQorLSAgZ2xfcndsb2NrX3VubG9jayAodHJlZV9sb2NrKTsKKy0KKy0gIGZyZWVhIChzZWFyY2gpOworLSAgaWYgKGZvdW5kcCAhPSBOVUxMICYmICgqZm91bmRwKS0+Y291bnRlciA9PSBfbmxfbXNnX2NhdF9jbnRyKQorLSAgICB7CistICAgICAgLyogTm93IGRlYWwgd2l0aCBwbHVyYWwuICAqLworLSAgICAgIGlmIChwbHVyYWwpCistCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKCgqZm91bmRwKS0+ZG9tYWluLCBuLCAoKmZvdW5kcCktPnRyYW5zbGF0aW9uLAorLQkJCQkoKmZvdW5kcCktPnRyYW5zbGF0aW9uX2xlbmd0aCk7CistICAgICAgZWxzZQorLQlyZXR2YWwgPSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOworLQorLSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKy0gICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLSAgICAgIHJldHVybiByZXR2YWw7CistICAgIH0KKy0jZW5kaWYKKy0KKy0gIC8qIFNlZSB3aGV0aGVyIHRoaXMgaXMgYSBTVUlEIGJpbmFyeSBvciBub3QuICAqLworLSAgREVURVJNSU5FX1NFQ1VSRTsKKy0KKy0gIC8qIEZpcnN0IGZpbmQgbWF0Y2hpbmcgYmluZGluZy4gICovCistI2lmZGVmIElOX0xJQkdMT0NBTEUKKy0gIC8qIFdlIGNhbiB1c2UgYSB0cml2aWFsIGJpbmRpbmcsIHNpbmNlIF9ubF9maW5kX21zZyB3aWxsIGlnbm9yZSBpdCBhbnl3YXksCistICAgICBhbmQgX25sX2xvYWRfZG9tYWluIGFuZCBfbmxfZmluZF9kb21haW4ganVzdCBwYXNzIGl0IHRocm91Z2guICAqLworLSAgYmluZGluZyA9IE5VTEw7CistICBkaXJuYW1lID0gYmluZHRleHRkb21haW4gKGRvbWFpbm5hbWUsIE5VTEwpOworLSNlbHNlCistICBmb3IgKGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOyBiaW5kaW5nICE9IE5VTEw7IGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0KQorLSAgICB7CistICAgICAgaW50IGNvbXBhcmUgPSBzdHJjbXAgKGRvbWFpbm5hbWUsIGJpbmRpbmctPmRvbWFpbm5hbWUpOworLSAgICAgIGlmIChjb21wYXJlID09IDApCistCS8qIFdlIGZvdW5kIGl0ISAgKi8KKy0JYnJlYWs7CistICAgICAgaWYgKGNvbXBhcmUgPCAwKQorLQl7CistCSAgLyogSXQgaXMgbm90IGluIHRoZSBsaXN0LiAgKi8KKy0JICBiaW5kaW5nID0gTlVMTDsKKy0JICBicmVhazsKKy0JfQorLSAgICB9CistCistICBpZiAoYmluZGluZyA9PSBOVUxMKQorLSAgICBkaXJuYW1lID0gX25sX2RlZmF1bHRfZGlybmFtZTsKKy0gIGVsc2UKKy0gICAgeworLSAgICAgIGRpcm5hbWUgPSBiaW5kaW5nLT5kaXJuYW1lOworLSNlbmRpZgorLSAgICAgIGlmICghSVNfQUJTT0xVVEVfUEFUSCAoZGlybmFtZSkpCistCXsKKy0JICAvKiBXZSBoYXZlIGEgcmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUgbm93LiAgKi8KKy0JICBzaXplX3QgZGlybmFtZV9sZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKy0JICBzaXplX3QgcGF0aF9tYXg7CistCSAgY2hhciAqcmVzb2x2ZWRfZGlybmFtZTsKKy0JICBjaGFyICpyZXQ7CistCistCSAgcGF0aF9tYXggPSAodW5zaWduZWQgaW50KSBQQVRIX01BWDsKKy0JICBwYXRoX21heCArPSAyOwkJLyogVGhlIGdldGN3ZCBkb2NzIHNheSB0byBkbyB0aGlzLiAgKi8KKy0KKy0JICBmb3IgKDs7KQorLQkgICAgeworLQkgICAgICByZXNvbHZlZF9kaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0JICAgICAgQUREX0JMT0NLIChibG9ja19saXN0LCB0bXBfZGlybmFtZSk7CistCistCSAgICAgIF9fc2V0X2Vycm5vICgwKTsKKy0JICAgICAgcmV0ID0gZ2V0Y3dkIChyZXNvbHZlZF9kaXJuYW1lLCBwYXRoX21heCk7CistCSAgICAgIGlmIChyZXQgIT0gTlVMTCB8fCBlcnJubyAhPSBFUkFOR0UpCistCQlicmVhazsKKy0KKy0JICAgICAgcGF0aF9tYXggKz0gcGF0aF9tYXggLyAyOworLQkgICAgICBwYXRoX21heCArPSBQQVRIX0lOQ1I7CistCSAgICB9CistCistCSAgaWYgKHJldCA9PSBOVUxMKQorLQkgICAgLyogV2UgY2Fubm90IGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIERvbid0IHNpZ25hbCBhbgorLQkgICAgICAgZXJyb3IgYnV0IHNpbXBseSByZXR1cm4gdGhlIGRlZmF1bHQgc3RyaW5nLiAgKi8KKy0JICAgIGdvdG8gcmV0dXJuX3VudHJhbnNsYXRlZDsKKy0KKy0JICBzdHBjcHkgKHN0cGNweSAoc3RyY2hyIChyZXNvbHZlZF9kaXJuYW1lLCAnXDAnKSwgIi8iKSwgZGlybmFtZSk7CistCSAgZGlybmFtZSA9IHJlc29sdmVkX2Rpcm5hbWU7CistCX0KKy0jaWZuZGVmIElOX0xJQkdMT0NBTEUKKy0gICAgfQorLSNlbmRpZgorLQorLSAgLyogTm93IGRldGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8KKy0gIGNhdGVnb3J5bmFtZSA9IGNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KTsKKy0jaWZkZWYgSU5fTElCR0xPQ0FMRQorLSAgY2F0ZWdvcnl2YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lLCBsb2NhbGVuYW1lKTsKKy0jZWxzZQorLSAgY2F0ZWdvcnl2YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKy0jZW5kaWYKKy0KKy0gIGRvbWFpbm5hbWVfbGVuID0gc3RybGVuIChkb21haW5uYW1lKTsKKy0gIHhkb21haW5uYW1lID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5bmFtZSkKKy0JCQkJICsgZG9tYWlubmFtZV9sZW4gKyA1KTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworLQorLSAgc3RwY3B5ICgoY2hhciAqKSBtZW1wY3B5IChzdHBjcHkgKHN0cGNweSAoeGRvbWFpbm5hbWUsIGNhdGVnb3J5bmFtZSksICIvIiksCistCQkJICAgIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuKSwKKy0JICAiLm1vIik7CistCistICAvKiBDcmVhdGluZyB3b3JraW5nIGFyZWEuICAqLworLSAgc2luZ2xlX2xvY2FsZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeXZhbHVlKSArIDEpOworLSAgQUREX0JMT0NLIChibG9ja19saXN0LCBzaW5nbGVfbG9jYWxlKTsKKy0KKy0KKy0gIC8qIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHN0cmluZy4gIFRoaXMgaXMgYSBsb29wIGJlY2F1c2Ugd2UgcGVyaGFwcworLSAgICAgZ290IGFuIG9yZGVyZWQgbGlzdCBvZiBsYW5ndWFnZXMgdG8gY29uc2lkZXIgZm9yIHRoZSB0cmFuc2xhdGlvbi4gICovCistICB3aGlsZSAoMSkKKy0gICAgeworLSAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKy0gICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorLQkrK2NhdGVnb3J5dmFsdWU7CistICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKy0JeworLQkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorLQkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKy0JICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorLQkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCistCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKy0JICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKy0JICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorLQkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworLQkgICpjcCA9ICdcMCc7CistCistCSAgLyogV2hlbiB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgd2UgbXVzdCBub3QgYWxsb3cgYWNjZXNzaW5nIGZpbGVzCistCSAgICAgb3V0c2lkZSB0aGUgZGVkaWNhdGVkIGRpcmVjdG9yaWVzLiAgKi8KKy0JICBpZiAoRU5BQkxFX1NFQ1VSRSAmJiBJU19QQVRIX1dJVEhfRElSIChzaW5nbGVfbG9jYWxlKSkKKy0JICAgIC8qIEluZ29yZSB0aGlzIGVudHJ5LiAgKi8KKy0JICAgIGNvbnRpbnVlOworLQl9CistCistICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbG9jYWxlIHZhbHVlIGlzIEMgKG9yIFBPU0lYKSB3ZSBkb24ndCBsb2FkIGEKKy0JIGRvbWFpbi4gIFJldHVybiB0aGUgTVNHSUQuICAqLworLSAgICAgIGlmIChzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJDIikgPT0gMAorLQkgIHx8IHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIlBPU0lYIikgPT0gMCkKKy0JYnJlYWs7CistCistICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorLQkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworLSAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUsIGJpbmRpbmcpOworLQorLSAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKy0JeworLSNpZiBkZWZpbmVkIElOX0xJQkdMT0NBTEUKKy0JICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbiwgYmluZGluZywgZW5jb2RpbmcsIG1zZ2lkMSwgJnJldGxlbik7CistI2Vsc2UKKy0JICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbiwgYmluZGluZywgbXNnaWQxLCAxLCAmcmV0bGVuKTsKKy0jZW5kaWYKKy0KKy0JICBpZiAocmV0dmFsID09IE5VTEwpCistCSAgICB7CistCSAgICAgIGludCBjbnQ7CistCistCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKy0JCXsKKy0jaWYgZGVmaW5lZCBJTl9MSUJHTE9DQUxFCistCQkgIHJldHZhbCA9IF9ubF9maW5kX21zZyAoZG9tYWluLT5zdWNjZXNzb3JbY250XSwgYmluZGluZywKKy0JCQkJCSBlbmNvZGluZywgbXNnaWQxLCAmcmV0bGVuKTsKKy0jZWxzZQorLQkJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIGJpbmRpbmcsCistCQkJCQkgbXNnaWQxLCAxLCAmcmV0bGVuKTsKKy0jZW5kaWYKKy0KKy0JCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQkJICAgIHsKKy0JCSAgICAgIGRvbWFpbiA9IGRvbWFpbi0+c3VjY2Vzc29yW2NudF07CistCQkgICAgICBicmVhazsKKy0JCSAgICB9CistCQl9CistCSAgICB9CistCistCSAgLyogUmV0dXJuaW5nIC0xIG1lYW5zIHRoYXQgc29tZSByZXNvdXJjZSBwcm9ibGVtIGV4aXN0cworLQkgICAgIChsaWtlbHkgbWVtb3J5KSBhbmQgdGhhdCB0aGUgc3RyaW5ncyBjb3VsZCBub3QgYmUKKy0JICAgICBjb252ZXJ0ZWQuICBSZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZ3MuICAqLworLQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXR2YWwgPT0gKGNoYXIgKikgLTEsIDApKQorLQkgICAgYnJlYWs7CistCistCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQkgICAgeworLQkgICAgICAvKiBGb3VuZCB0aGUgdHJhbnNsYXRpb24gb2YgTVNHSUQxIGluIGRvbWFpbiBET01BSU46CistCQkgc3RhcnRpbmcgYXQgUkVUVkFMLCBSRVRMRU4gYnl0ZXMuICAqLworLQkgICAgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistCSAgICAgIGlmIChmb3VuZHAgPT0gTlVMTCkKKy0JCXsKKy0JCSAgLyogQ3JlYXRlIGEgbmV3IGVudHJ5IGFuZCBhZGQgaXQgdG8gdGhlIHNlYXJjaCB0cmVlLiAgKi8KKy0JCSAgc2l6ZV90IHNpemU7CistCQkgIHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICpuZXdwOworLQorLQkJICBzaXplID0gb2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkKKy0JCQkgKyBtc2dpZF9sZW4gKyBkb21haW5uYW1lX2xlbiArIDE7CistI2lmZGVmIEhBVkVfUEVSX1RIUkVBRF9MT0NBTEUKKy0JCSAgc2l6ZSArPSBzdHJsZW4gKGxvY2FsZW5hbWUpICsgMTsKKy0jZW5kaWYKKy0JCSAgbmV3cCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKSBtYWxsb2MgKHNpemUpOworLQkJICBpZiAobmV3cCAhPSBOVUxMKQorLQkJICAgIHsKKy0JCSAgICAgIGNoYXIgKm5ld19kb21haW5uYW1lOworLSNpZmRlZiBIQVZFX1BFUl9USFJFQURfTE9DQUxFCistCQkgICAgICBjaGFyICpuZXdfbG9jYWxlbmFtZTsKKy0jZW5kaWYKKy0KKy0JCSAgICAgIG5ld19kb21haW5uYW1lID0KKy0JCQkoY2hhciAqKSBtZW1wY3B5IChuZXdwLT5tc2dpZCwgbXNnaWQxLCBtc2dpZF9sZW4pOworLQkJICAgICAgbWVtY3B5IChuZXdfZG9tYWlubmFtZSwgZG9tYWlubmFtZSwgZG9tYWlubmFtZV9sZW4gKyAxKTsKKy0jaWZkZWYgSEFWRV9QRVJfVEhSRUFEX0xPQ0FMRQorLQkJICAgICAgbmV3X2xvY2FsZW5hbWUgPSBuZXdfZG9tYWlubmFtZSArIGRvbWFpbm5hbWVfbGVuICsgMTsKKy0JCSAgICAgIHN0cmNweSAobmV3X2xvY2FsZW5hbWUsIGxvY2FsZW5hbWUpOworLSNlbmRpZgorLQkJICAgICAgbmV3cC0+ZG9tYWlubmFtZSA9IG5ld19kb21haW5uYW1lOworLQkJICAgICAgbmV3cC0+Y2F0ZWdvcnkgPSBjYXRlZ29yeTsKKy0jaWZkZWYgSEFWRV9QRVJfVEhSRUFEX0xPQ0FMRQorLQkJICAgICAgbmV3cC0+bG9jYWxlbmFtZSA9IG5ld19sb2NhbGVuYW1lOworLSNlbmRpZgorLSNpZmRlZiBJTl9MSUJHTE9DQUxFCistCQkgICAgICBuZXdwLT5lbmNvZGluZyA9IGVuY29kaW5nOworLSNlbmRpZgorLQkJICAgICAgbmV3cC0+Y291bnRlciA9IF9ubF9tc2dfY2F0X2NudHI7CistCQkgICAgICBuZXdwLT5kb21haW4gPSBkb21haW47CistCQkgICAgICBuZXdwLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKy0JCSAgICAgIG5ld3AtPnRyYW5zbGF0aW9uX2xlbmd0aCA9IHJldGxlbjsKKy0KKy0JCSAgICAgIGdsX3J3bG9ja193cmxvY2sgKHRyZWVfbG9jayk7CistCistCQkgICAgICAvKiBJbnNlcnQgdGhlIGVudHJ5IGluIHRoZSBzZWFyY2ggdHJlZS4gICovCistCQkgICAgICBmb3VuZHAgPSAoc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKiopCistCQkJdHNlYXJjaCAobmV3cCwgJnJvb3QsIHRyYW5zY21wKTsKKy0KKy0JCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKHRyZWVfbG9jayk7CistCistCQkgICAgICBpZiAoZm91bmRwID09IE5VTEwKKy0JCQkgIHx8IF9fYnVpbHRpbl9leHBlY3QgKCpmb3VuZHAgIT0gbmV3cCwgMCkpCistCQkJLyogVGhlIGluc2VydCBmYWlsZWQuICAqLworLQkJCWZyZWUgKG5ld3ApOworLQkJICAgIH0KKy0JCX0KKy0JICAgICAgZWxzZQorLQkJeworLQkJICAvKiBXZSBjYW4gdXBkYXRlIHRoZSBleGlzdGluZyBlbnRyeS4gICovCistCQkgICgqZm91bmRwKS0+Y291bnRlciA9IF9ubF9tc2dfY2F0X2NudHI7CistCQkgICgqZm91bmRwKS0+ZG9tYWluID0gZG9tYWluOworLQkJICAoKmZvdW5kcCktPnRyYW5zbGF0aW9uID0gcmV0dmFsOworLQkJICAoKmZvdW5kcCktPnRyYW5zbGF0aW9uX2xlbmd0aCA9IHJldGxlbjsKKy0JCX0KKy0KKy0JICAgICAgX19zZXRfZXJybm8gKHNhdmVkX2Vycm5vKTsKKy0KKy0JICAgICAgLyogTm93IGRlYWwgd2l0aCBwbHVyYWwuICAqLworLQkgICAgICBpZiAocGx1cmFsKQorLQkJcmV0dmFsID0gcGx1cmFsX2xvb2t1cCAoZG9tYWluLCBuLCByZXR2YWwsIHJldGxlbik7CistCistCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKy0JICAgICAgcmV0dXJuIHJldHZhbDsKKy0JICAgIH0KKy0JfQorLSAgICB9CistCistIHJldHVybl91bnRyYW5zbGF0ZWQ6CistICAvKiBSZXR1cm4gdGhlIHVudHJhbnNsYXRlZCBNU0dJRC4gICovCistICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CistICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CistI2lmbmRlZiBfTElCQworLSAgaWYgKCFFTkFCTEVfU0VDVVJFKQorLSAgICB7CistICAgICAgZXh0ZXJuIHZvaWQgX25sX2xvZ191bnRyYW5zbGF0ZWQgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLAorLQkJCQkJY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJCWNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorLQkJCQkJaW50IHBsdXJhbCk7CistICAgICAgY29uc3QgY2hhciAqbG9nZmlsZW5hbWUgPSBnZXRlbnYgKCJHRVRURVhUX0xPR19VTlRSQU5TTEFURUQiKTsKKy0KKy0gICAgICBpZiAobG9nZmlsZW5hbWUgIT0gTlVMTCAmJiBsb2dmaWxlbmFtZVswXSAhPSAnXDAnKQorLQlfbmxfbG9nX3VudHJhbnNsYXRlZCAobG9nZmlsZW5hbWUsIGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBwbHVyYWwpOworLSAgICB9CistI2VuZGlmCistICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLSAgcmV0dXJuIChwbHVyYWwgPT0gMAorLQkgID8gKGNoYXIgKikgbXNnaWQxCistCSAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCistCSAgOiBuID09IDEgPyAoY2hhciAqKSBtc2dpZDEgOiAoY2hhciAqKSBtc2dpZDIpOworLX0KKy0KKy0KKy0vKiBMb29rIHVwIHRoZSB0cmFuc2xhdGlvbiBvZiBtc2dpZCB3aXRoaW4gRE9NQUlOX0ZJTEUgYW5kIERPTUFJTkJJTkRJTkcuCistICAgUmV0dXJuIGl0IGlmIGZvdW5kLiAgUmV0dXJuIE5VTEwgaWYgbm90IGZvdW5kIG9yIGluIGNhc2Ugb2YgYSBjb252ZXJzaW9uCistICAgZmFpbHVyZSAocHJvYmxlbSBpbiB0aGUgcGFydGljdWxhciBtZXNzYWdlIGNhdGFsb2cpLiAgUmV0dXJuIChjaGFyICopIC0xCistICAgaW4gY2FzZSBvZiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgZHVyaW5nIGNvbnZlcnNpb24gKG9ubHkgaWYKKy0gICBFTkNPRElORyAhPSBOVUxMIHJlc3AuIENPTlZFUlQgPT0gdHJ1ZSkuICAqLworLWNoYXIgKgorLWludGVybmFsX2Z1bmN0aW9uCistI2lmZGVmIElOX0xJQkdMT0NBTEUKKy1fbmxfZmluZF9tc2cgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorLQkgICAgICBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsCistCSAgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLAorLQkgICAgICBzaXplX3QgKmxlbmd0aHApCistI2Vsc2UKKy1fbmxfZmluZF9tc2cgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorLQkgICAgICBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZywKKy0JICAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjb252ZXJ0LAorLQkgICAgICBzaXplX3QgKmxlbmd0aHApCistI2VuZGlmCisteworLSAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKy0gIG5sc191aW50MzIgbnN0cmluZ3M7CistICBzaXplX3QgYWN0OworLSAgY2hhciAqcmVzdWx0OworLSAgc2l6ZV90IHJlc3VsdGxlbjsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGVjaWRlZCA8PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nKTsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKy0KKy0gIG5zdHJpbmdzID0gZG9tYWluLT5uc3RyaW5nczsKKy0KKy0gIC8qIExvY2F0ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCistICBpZiAoZG9tYWluLT5oYXNoX3RhYiAhPSBOVUxMKQorLSAgICB7CistICAgICAgLyogVXNlIHRoZSBoYXNoaW5nIHRhYmxlLiAgKi8KKy0gICAgICBubHNfdWludDMyIGxlbiA9IHN0cmxlbiAobXNnaWQpOworLSAgICAgIG5sc191aW50MzIgaGFzaF92YWwgPSBfX2hhc2hfc3RyaW5nIChtc2dpZCk7CistICAgICAgbmxzX3VpbnQzMiBpZHggPSBoYXNoX3ZhbCAlIGRvbWFpbi0+aGFzaF9zaXplOworLSAgICAgIG5sc191aW50MzIgaW5jciA9IDEgKyAoaGFzaF92YWwgJSAoZG9tYWluLT5oYXNoX3NpemUgLSAyKSk7CistCistICAgICAgd2hpbGUgKDEpCistCXsKKy0JICBubHNfdWludDMyIG5zdHIgPQorLQkgICAgVyAoZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CistCistCSAgaWYgKG5zdHIgPT0gMCkKKy0JICAgIC8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLworLQkgICAgcmV0dXJuIE5VTEw7CistCistCSAgbnN0ci0tOworLQorLQkgIC8qIENvbXBhcmUgbXNnaWQgd2l0aCB0aGUgb3JpZ2luYWwgc3RyaW5nIGF0IGluZGV4IG5zdHIuCistCSAgICAgV2UgY29tcGFyZSB0aGUgbGVuZ3RocyB3aXRoID49LCBub3QgPT0sIGJlY2F1c2UgcGx1cmFsIGVudHJpZXMKKy0JICAgICBhcmUgcmVwcmVzZW50ZWQgYnkgc3RyaW5ncyB3aXRoIGFuIGVtYmVkZGVkIE5VTC4gICovCistCSAgaWYgKG5zdHIgPCBuc3RyaW5ncworLQkgICAgICA/IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHJdLmxlbmd0aCkgPj0gbGVuCistCQkmJiAoc3RyY21wIChtc2dpZCwKKy0JCQkgICAgZG9tYWluLT5kYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCQkgICAgICBkb21haW4tPm9yaWdfdGFiW25zdHJdLm9mZnNldCkpCistCQkgICAgPT0gMCkKKy0JICAgICAgOiBkb21haW4tPm9yaWdfc3lzZGVwX3RhYltuc3RyIC0gbnN0cmluZ3NdLmxlbmd0aCA+IGxlbgorLQkJJiYgKHN0cmNtcCAobXNnaWQsCistCQkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiW25zdHIgLSBuc3RyaW5nc10ucG9pbnRlcikKKy0JCSAgICA9PSAwKSkKKy0JICAgIHsKKy0JICAgICAgYWN0ID0gbnN0cjsKKy0JICAgICAgZ290byBmb3VuZDsKKy0JICAgIH0KKy0KKy0JICBpZiAoaWR4ID49IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcikKKy0JICAgIGlkeCAtPSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3I7CistCSAgZWxzZQorLQkgICAgaWR4ICs9IGluY3I7CistCX0KKy0gICAgICAvKiBOT1RSRUFDSEVEICovCistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIC8qIFRyeSB0aGUgZGVmYXVsdCBtZXRob2Q6ICBiaW5hcnkgc2VhcmNoIGluIHRoZSBzb3J0ZWQgYXJyYXkgb2YKKy0JIG1lc3NhZ2VzLiAgKi8KKy0gICAgICBzaXplX3QgdG9wLCBib3R0b207CistCistICAgICAgYm90dG9tID0gMDsKKy0gICAgICB0b3AgPSBuc3RyaW5nczsKKy0gICAgICB3aGlsZSAoYm90dG9tIDwgdG9wKQorLQl7CistCSAgaW50IGNtcF92YWw7CistCistCSAgYWN0ID0gKGJvdHRvbSArIHRvcCkgLyAyOworLQkgIGNtcF92YWwgPSBzdHJjbXAgKG1zZ2lkLCAoZG9tYWluLT5kYXRhCistCQkJCSAgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkJIGRvbWFpbi0+b3JpZ190YWJbYWN0XS5vZmZzZXQpKSk7CistCSAgaWYgKGNtcF92YWwgPCAwKQorLQkgICAgdG9wID0gYWN0OworLQkgIGVsc2UgaWYgKGNtcF92YWwgPiAwKQorLQkgICAgYm90dG9tID0gYWN0ICsgMTsKKy0JICBlbHNlCistCSAgICBnb3RvIGZvdW5kOworLQl9CistICAgICAgLyogTm8gdHJhbnNsYXRpb24gd2FzIGZvdW5kLiAgKi8KKy0gICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLQorLSBmb3VuZDoKKy0gIC8qIFRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQgYXQgaW5kZXggQUNULiAgSWYgd2UgaGF2ZSB0byBjb252ZXJ0IHRoZQorLSAgICAgc3RyaW5nIHRvIHVzZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgc2V0LCB0aGlzIGlzIHRoZSB0aW1lLiAgKi8KKy0gIGlmIChhY3QgPCBuc3RyaW5ncykKKy0gICAgeworLSAgICAgIHJlc3VsdCA9IChjaGFyICopCistCShkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT50cmFuc190YWJbYWN0XS5vZmZzZXQpKTsKKy0gICAgICByZXN1bHRsZW4gPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT50cmFuc190YWJbYWN0XS5sZW5ndGgpICsgMTsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgcmVzdWx0ID0gKGNoYXIgKikgZG9tYWluLT50cmFuc19zeXNkZXBfdGFiW2FjdCAtIG5zdHJpbmdzXS5wb2ludGVyOworLSAgICAgIHJlc3VsdGxlbiA9IGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYlthY3QgLSBuc3RyaW5nc10ubGVuZ3RoOworLSAgICB9CistCistI2lmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9JQ09OVgorLSMgaWZkZWYgSU5fTElCR0xPQ0FMRQorLSAgaWYgKGVuY29kaW5nICE9IE5VTEwpCistIyBlbHNlCistICBpZiAoY29udmVydCkKKy0jIGVuZGlmCistICAgIHsKKy0gICAgICAvKiBXZSBhcmUgc3VwcG9zZWQgdG8gZG8gYSBjb252ZXJzaW9uLiAgKi8KKy0jIGlmbmRlZiBJTl9MSUJHTE9DQUxFCistICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRfb3V0cHV0X2NoYXJzZXQgKGRvbWFpbmJpbmRpbmcpOworLSMgZW5kaWYKKy0gICAgICBzaXplX3QgbmNvbnZlcnNpb25zOworLSAgICAgIHN0cnVjdCBjb252ZXJ0ZWRfZG9tYWluICpjb252ZDsKKy0gICAgICBzaXplX3QgaTsKKy0KKy0gICAgICAvKiBQcm90ZWN0IGFnYWluc3QgcmVhbGxvY2F0aW9uIG9mIHRoZSB0YWJsZS4gICovCistICAgICAgZ2xfcndsb2NrX3JkbG9jayAoZG9tYWluLT5jb252ZXJzaW9uc19sb2NrKTsKKy0KKy0gICAgICAvKiBTZWFyY2ggd2hldGhlciBhIHRhYmxlIHdpdGggY29udmVydGVkIHRyYW5zbGF0aW9ucyBmb3IgdGhpcworLQkgZW5jb2RpbmcgaGFzIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQuICAqLworLSAgICAgIG5jb252ZXJzaW9ucyA9IGRvbWFpbi0+bmNvbnZlcnNpb25zOworLSAgICAgIGNvbnZkID0gTlVMTDsKKy0KKy0gICAgICBmb3IgKGkgPSBuY29udmVyc2lvbnM7IGkgPiAwOyApCistCXsKKy0JICBpLS07CistCSAgaWYgKHN0cmNtcCAoZG9tYWluLT5jb252ZXJzaW9uc1tpXS5lbmNvZGluZywgZW5jb2RpbmcpID09IDApCistCSAgICB7CistCSAgICAgIGNvbnZkID0gJmRvbWFpbi0+Y29udmVyc2lvbnNbaV07CistCSAgICAgIGJyZWFrOworLQkgICAgfQorLQl9CistCistICAgICAgZ2xfcndsb2NrX3VubG9jayAoZG9tYWluLT5jb252ZXJzaW9uc19sb2NrKTsKKy0KKy0gICAgICBpZiAoY29udmQgPT0gTlVMTCkKKy0JeworLQkgIC8qIFdlIGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcgY29udmVyc2lvbnMgdGFibGUuICAqLworLQkgIGdsX3J3bG9ja193cmxvY2sgKGRvbWFpbi0+Y29udmVyc2lvbnNfbG9jayk7CistCistCSAgLyogTWF5YmUgaW4gdGhlIG1lYW50aW1lIHNvbWVib2R5IGFkZGVkIHRoZSB0cmFuc2xhdGlvbi4KKy0JICAgICBSZWNoZWNrLiAgKi8KKy0JICBmb3IgKGkgPSBuY29udmVyc2lvbnM7IGkgPiAwOyApCistCSAgICB7CistCSAgICAgIGktLTsKKy0JICAgICAgaWYgKHN0cmNtcCAoZG9tYWluLT5jb252ZXJzaW9uc1tpXS5lbmNvZGluZywgZW5jb2RpbmcpID09IDApCistCQl7CistCQkgIGNvbnZkID0gJmRvbWFpbi0+Y29udmVyc2lvbnNbaV07CistCQkgIGdvdG8gZm91bmRfY29udmQ7CistCQl9CistCSAgICB9CistCistCSAgeworLQkgICAgLyogQWxsb2NhdGUgYSB0YWJsZSBmb3IgdGhlIGNvbnZlcnRlZCB0cmFuc2xhdGlvbnMgZm9yIHRoaXMKKy0JICAgICAgIGVuY29kaW5nLiAgKi8KKy0JICAgIHN0cnVjdCBjb252ZXJ0ZWRfZG9tYWluICpuZXdfY29udmVyc2lvbnMgPQorLQkgICAgICAoc3RydWN0IGNvbnZlcnRlZF9kb21haW4gKikKKy0JICAgICAgKGRvbWFpbi0+Y29udmVyc2lvbnMgIT0gTlVMTAorLQkgICAgICAgPyByZWFsbG9jIChkb21haW4tPmNvbnZlcnNpb25zLAorLQkJCSAgKG5jb252ZXJzaW9ucyArIDEpICogc2l6ZW9mIChzdHJ1Y3QgY29udmVydGVkX2RvbWFpbikpCistCSAgICAgICA6IG1hbGxvYyAoKG5jb252ZXJzaW9ucyArIDEpICogc2l6ZW9mIChzdHJ1Y3QgY29udmVydGVkX2RvbWFpbikpKTsKKy0KKy0JICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuZXdfY29udmVyc2lvbnMgPT0gTlVMTCwgMCkpCistCSAgICAgIHsKKy0JCS8qIE5vdGhpbmcgd2UgY2FuIGRvLCBubyBtb3JlIG1lbW9yeS4gIFdlIGNhbm5vdCB1c2UgdGhlCistCQkgICB0cmFuc2xhdGlvbiBiZWNhdXNlIGl0IG1pZ2h0IGJlIGVuY29kZWQgaW5jb3JyZWN0bHkuICAqLworLQkgICAgICB1bmxvY2tfZmFpbDoKKy0JCWdsX3J3bG9ja191bmxvY2sgKGRvbWFpbi0+Y29udmVyc2lvbnNfbG9jayk7CistCQlyZXR1cm4gKGNoYXIgKikgLTE7CistCSAgICAgIH0KKy0KKy0JICAgIGRvbWFpbi0+Y29udmVyc2lvbnMgPSBuZXdfY29udmVyc2lvbnM7CistCistCSAgICAvKiBDb3B5IHRoZSAnZW5jb2RpbmcnIHN0cmluZyB0byBwZXJtYW5lbnQgc3RvcmFnZS4gICovCistCSAgICBlbmNvZGluZyA9IHN0cmR1cCAoZW5jb2RpbmcpOworLQkgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGVuY29kaW5nID09IE5VTEwsIDApKQorLQkgICAgICAvKiBOb3RoaW5nIHdlIGNhbiBkbywgbm8gbW9yZSBtZW1vcnkuICBXZSBjYW5ub3QgdXNlIHRoZQorLQkJIHRyYW5zbGF0aW9uIGJlY2F1c2UgaXQgbWlnaHQgYmUgZW5jb2RlZCBpbmNvcnJlY3RseS4gICovCistCSAgICAgIGdvdG8gdW5sb2NrX2ZhaWw7CistCistCSAgICBjb252ZCA9ICZuZXdfY29udmVyc2lvbnNbbmNvbnZlcnNpb25zXTsKKy0JICAgIGNvbnZkLT5lbmNvZGluZyA9IGVuY29kaW5nOworLQorLQkgICAgLyogRmluZCBvdXQgYWJvdXQgdGhlIGNoYXJhY3RlciBzZXQgdGhlIGZpbGUgaXMgZW5jb2RlZCB3aXRoLgorLQkgICAgICAgVGhpcyBjYW4gYmUgZm91bmQgKGluIHRleHR1YWwgZm9ybSkgaW4gdGhlIGVudHJ5ICIiLiAgSWYgdGhpcworLQkgICAgICAgZW50cnkgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhpcyBkb2VzIG5vdCBjb250YWluIHRoZSAnY2hhcnNldD0nCistCSAgICAgICBpbmZvcm1hdGlvbiwgd2Ugd2lsbCBhc3N1bWUgdGhlIGNoYXJzZXQgbWF0Y2hlcyB0aGUgb25lIHRoZQorLQkgICAgICAgY3VycmVudCBsb2NhbGUgYW5kIHdlIGRvbid0IGhhdmUgdG8gcGVyZm9ybSBhbnkgY29udmVyc2lvbi4gICovCistIyBpZmRlZiBfTElCQworLQkgICAgY29udmQtPmNvbnYgPSAoX19nY29udl90KSAtMTsKKy0jIGVsc2UKKy0jICBpZiBIQVZFX0lDT05WCistCSAgICBjb252ZC0+Y29udiA9IChpY29udl90KSAtMTsKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0JICAgIHsKKy0JICAgICAgY2hhciAqbnVsbGVudHJ5OworLQkgICAgICBzaXplX3QgbnVsbGVudHJ5bGVuOworLQorLQkgICAgICAvKiBHZXQgdGhlIGhlYWRlciBlbnRyeS4gIFRoaXMgaXMgYSByZWN1cnNpb24sIGJ1dCBpdCBkb2Vzbid0CistCQkgcmVhbGxvY2F0ZSBkb21haW4tPmNvbnZlcnNpb25zIGJlY2F1c2Ugd2UgcGFzcworLQkJIGVuY29kaW5nID0gTlVMTCBvciBjb252ZXJ0ID0gMCwgcmVzcGVjdGl2ZWx5LiAgKi8KKy0JICAgICAgbnVsbGVudHJ5ID0KKy0jIGlmZGVmIElOX0xJQkdMT0NBTEUKKy0JCV9ubF9maW5kX21zZyAoZG9tYWluX2ZpbGUsIGRvbWFpbmJpbmRpbmcsIE5VTEwsICIiLAorLQkJCSAgICAgICZudWxsZW50cnlsZW4pOworLSMgZWxzZQorLQkJX25sX2ZpbmRfbXNnIChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZywgIiIsIDAsICZudWxsZW50cnlsZW4pOworLSMgZW5kaWYKKy0KKy0JICAgICAgaWYgKG51bGxlbnRyeSAhPSBOVUxMKQorLQkJeworLQkJICBjb25zdCBjaGFyICpjaGFyc2V0c3RyOworLQorLQkJICBjaGFyc2V0c3RyID0gc3Ryc3RyIChudWxsZW50cnksICJjaGFyc2V0PSIpOworLQkJICBpZiAoY2hhcnNldHN0ciAhPSBOVUxMKQorLQkJICAgIHsKKy0JCSAgICAgIHNpemVfdCBsZW47CistCQkgICAgICBjaGFyICpjaGFyc2V0OworLQkJICAgICAgY29uc3QgY2hhciAqb3V0Y2hhcnNldDsKKy0KKy0JCSAgICAgIGNoYXJzZXRzdHIgKz0gc3RybGVuICgiY2hhcnNldD0iKTsKKy0JCSAgICAgIGxlbiA9IHN0cmNzcG4gKGNoYXJzZXRzdHIsICIgXHRcbiIpOworLQorLQkJICAgICAgY2hhcnNldCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CistIyBpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTUVNUENQWQorLQkJICAgICAgKigoY2hhciAqKSBtZW1wY3B5IChjaGFyc2V0LCBjaGFyc2V0c3RyLCBsZW4pKSA9ICdcMCc7CistIyBlbHNlCistCQkgICAgICBtZW1jcHkgKGNoYXJzZXQsIGNoYXJzZXRzdHIsIGxlbik7CistCQkgICAgICBjaGFyc2V0W2xlbl0gPSAnXDAnOworLSMgZW5kaWYKKy0KKy0JCSAgICAgIG91dGNoYXJzZXQgPSBlbmNvZGluZzsKKy0KKy0jIGlmZGVmIF9MSUJDCistCQkgICAgICAvKiBXZSBhbHdheXMgd2FudCB0byB1c2UgdHJhbnNsaXRlcmF0aW9uLiAgKi8KKy0JCSAgICAgIG91dGNoYXJzZXQgPSBub3JtX2FkZF9zbGFzaGVzIChvdXRjaGFyc2V0LCAiVFJBTlNMSVQiKTsKKy0JCSAgICAgIGNoYXJzZXQgPSBub3JtX2FkZF9zbGFzaGVzIChjaGFyc2V0LCAiIik7CistCQkgICAgICBpbnQgciA9IF9fZ2NvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCwgJmNvbnZkLT5jb252LAorLQkJCQkJICAgIEdDT05WX0FWT0lEX05PQ09OVik7CistCQkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAociAhPSBfX0dDT05WX09LLCAwKSkKKy0JCQl7CistCQkJICAvKiBJZiB0aGUgb3V0cHV0IGVuY29kaW5nIGlzIHRoZSBzYW1lIHRoZXJlIGlzCistCQkJICAgICBub3RoaW5nIHRvIGRvLiAgT3RoZXJ3aXNlIGRvIG5vdCB1c2UgdGhlCistCQkJICAgICB0cmFuc2xhdGlvbiBhdCBhbGwuICAqLworLQkJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHIgIT0gX19HQ09OVl9OVUxDT05WLCAxKSkKKy0JCQkgICAgeworLQkJCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKGRvbWFpbi0+Y29udmVyc2lvbnNfbG9jayk7CistCQkJICAgICAgZnJlZSAoKGNoYXIgKikgZW5jb2RpbmcpOworLQkJCSAgICAgIHJldHVybiBOVUxMOworLQkJCSAgICB9CistCistCQkJICBjb252ZC0+Y29udiA9IChfX2djb252X3QpIC0xOworLQkJCX0KKy0jIGVsc2UKKy0jICBpZiBIQVZFX0lDT05WCistCQkgICAgICAvKiBXaGVuIHVzaW5nIEdOVSBsaWJjID49IDIuMiBvciBHTlUgbGliaWNvbnYgPj0gMS41LAorLQkJCSB3ZSB3YW50IHRvIHVzZSB0cmFuc2xpdGVyYXRpb24uICAqLworLSMgICBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDIpIHx8IF9fR0xJQkNfXyA+IDIgXAorLSAgICAgICB8fCBfTElCSUNPTlZfVkVSU0lPTiA+PSAweDAxMDUKKy0JCSAgICAgIGlmIChzdHJjaHIgKG91dGNoYXJzZXQsICcvJykgPT0gTlVMTCkKKy0JCQl7CistCQkJICBjaGFyICp0bXA7CistCistCQkJICBsZW4gPSBzdHJsZW4gKG91dGNoYXJzZXQpOworLQkJCSAgdG1wID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxMCArIDEpOworLQkJCSAgbWVtY3B5ICh0bXAsIG91dGNoYXJzZXQsIGxlbik7CistCQkJICBtZW1jcHkgKHRtcCArIGxlbiwgIi8vVFJBTlNMSVQiLCAxMCArIDEpOworLQkJCSAgb3V0Y2hhcnNldCA9IHRtcDsKKy0KKy0JCQkgIGNvbnZkLT5jb252ID0gaWNvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCk7CistCistCQkJICBmcmVlYSAob3V0Y2hhcnNldCk7CistCQkJfQorLQkJICAgICAgZWxzZQorLSMgICBlbmRpZgorLQkJCWNvbnZkLT5jb252ID0gaWNvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCk7CistIyAgZW5kaWYKKy0jIGVuZGlmCistCistCQkgICAgICBmcmVlYSAoY2hhcnNldCk7CistCQkgICAgfQorLQkJfQorLQkgICAgfQorLQkgICAgY29udmQtPmNvbnZfdGFiID0gTlVMTDsKKy0JICAgIC8qIEhlcmUgZG9tYWluLT5jb252ZXJzaW9ucyBpcyBzdGlsbCA9PSBuZXdfY29udmVyc2lvbnMuICAqLworLQkgICAgZG9tYWluLT5uY29udmVyc2lvbnMrKzsKKy0JICB9CistCistCWZvdW5kX2NvbnZkOgorLQkgIGdsX3J3bG9ja191bmxvY2sgKGRvbWFpbi0+Y29udmVyc2lvbnNfbG9jayk7CistCX0KKy0KKy0gICAgICBpZiAoCistIyBpZmRlZiBfTElCQworLQkgIGNvbnZkLT5jb252ICE9IChfX2djb252X3QpIC0xCistIyBlbHNlCistIyAgaWYgSEFWRV9JQ09OVgorLQkgIGNvbnZkLT5jb252ICE9IChpY29udl90KSAtMQorLSMgIGVuZGlmCistIyBlbmRpZgorLQkgICkKKy0JeworLQkgIC8qIFdlIGFyZSBzdXBwb3NlZCB0byBkbyBhIGNvbnZlcnNpb24uICBGaXJzdCBhbGxvY2F0ZSBhbgorLQkgICAgIGFwcHJvcHJpYXRlIHRhYmxlIHdpdGggdGhlIHNhbWUgc3RydWN0dXJlIGFzIHRoZSB0YWJsZQorLQkgICAgIG9mIHRyYW5zbGF0aW9ucyBpbiB0aGUgZmlsZSwgd2hlcmUgd2UgY2FuIHB1dCB0aGUgcG9pbnRlcnMKKy0JICAgICB0byB0aGUgY29udmVydGVkIHN0cmluZ3MgaW4uCistCSAgICAgVGhlcmUgaXMgYSBzbGlnaHQgY29tcGxpY2F0aW9uIHdpdGggcGx1cmFsIGVudHJpZXMuICBUaGV5CistCSAgICAgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnNlY3V0aXZlIE5VTCB0ZXJtaW5hdGVkIHN0cmluZ3MuICBXZQorLQkgICAgIGhhbmRsZSB0aGlzIGNhc2UgYnkgY29udmVydGluZyBSRVNVTFRMRU4gYnl0ZXMsIGluY2x1ZGluZworLQkgICAgIE5VTHMuICAqLworLQorLQkgIGlmIChjb252ZC0+Y29udl90YWIgPT0gTlVMTAorLQkgICAgICAmJiAoKGNvbnZkLT5jb252X3RhYiA9CistCQkgICAgKGNoYXIgKiopIGNhbGxvYyAobnN0cmluZ3MgKyBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MsCistCQkJCSAgICAgIHNpemVvZiAoY2hhciAqKSkpCistCQkgID09IE5VTEwpKQorLQkgICAgLyogTWFyayB0aGF0IHdlIGRpZG4ndCBzdWNjZWVkIGFsbG9jYXRpbmcgYSB0YWJsZS4gICovCistCSAgICBjb252ZC0+Y29udl90YWIgPSAoY2hhciAqKikgLTE7CistCistCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGNvbnZkLT5jb252X3RhYiA9PSAoY2hhciAqKikgLTEsIDApKQorLQkgICAgLyogTm90aGluZyB3ZSBjYW4gZG8sIG5vIG1vcmUgbWVtb3J5LiAgV2UgY2Fubm90IHVzZSB0aGUKKy0JICAgICAgIHRyYW5zbGF0aW9uIGJlY2F1c2UgaXQgbWlnaHQgYmUgZW5jb2RlZCBpbmNvcnJlY3RseS4gICovCistCSAgICByZXR1cm4gKGNoYXIgKikgLTE7CistCistCSAgaWYgKGNvbnZkLT5jb252X3RhYlthY3RdID09IE5VTEwpCistCSAgICB7CistCSAgICAgIC8qIFdlIGhhdmVuJ3QgdXNlZCB0aGlzIHN0cmluZyBzbyBmYXIsIHNvIGl0IGlzIG5vdAorLQkJIHRyYW5zbGF0ZWQgeWV0LiAgRG8gdGhpcyBub3cuICAqLworLQkgICAgICAvKiBXZSB1c2UgYSBiaXQgbW9yZSBlZmZpY2llbnQgbWVtb3J5IGhhbmRsaW5nLgorLQkJIFdlIGFsbG9jYXRlIGFsd2F5cyBsYXJnZXIgYmxvY2tzIHdoaWNoIGdldCB1c2VkIG92ZXIKKy0JCSB0aW1lLiAgVGhpcyBpcyBmYXN0ZXIgdGhhbiBtYW55IHNtYWxsIGFsbG9jYXRpb25zLiAgICovCistCSAgICAgIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKQorLSMgZGVmaW5lIElOSVRJQUxfQkxPQ0tfU0laRQk0MDgwCistCSAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpmcmVlbWVtOworLQkgICAgICBzdGF0aWMgc2l6ZV90IGZyZWVtZW1fc2l6ZTsKKy0KKy0JICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWY7CistCSAgICAgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZjsKKy0JICAgICAgaW50IG1hbGxvY19jb3VudDsKKy0jIGlmbmRlZiBfTElCQworLQkgICAgICB0cmFuc21lbV9ibG9ja190ICp0cmFuc21lbV9saXN0ID0gTlVMTDsKKy0jIGVuZGlmCistCistCSAgICAgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworLQorLQkgICAgICBpbmJ1ZiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHJlc3VsdDsKKy0JICAgICAgb3V0YnVmID0gZnJlZW1lbSArIHNpemVvZiAoc2l6ZV90KTsKKy0KKy0JICAgICAgbWFsbG9jX2NvdW50ID0gMDsKKy0JICAgICAgd2hpbGUgKDEpCistCQl7CistCQkgIHRyYW5zbWVtX2Jsb2NrX3QgKm5ld21lbTsKKy0jIGlmZGVmIF9MSUJDCistCQkgIHNpemVfdCBub25fcmV2ZXJzaWJsZTsKKy0JCSAgaW50IHJlczsKKy0KKy0JCSAgaWYgKGZyZWVtZW1fc2l6ZSA8IHNpemVvZiAoc2l6ZV90KSkKKy0JCSAgICBnb3RvIHJlc2l6ZV9mcmVlbWVtOworLQorLQkJICByZXMgPSBfX2djb252IChjb252ZC0+Y29udiwKKy0JCQkJICZpbmJ1ZiwgaW5idWYgKyByZXN1bHRsZW4sCistCQkJCSAmb3V0YnVmLAorLQkJCQkgb3V0YnVmICsgZnJlZW1lbV9zaXplIC0gc2l6ZW9mIChzaXplX3QpLAorLQkJCQkgJm5vbl9yZXZlcnNpYmxlKTsKKy0KKy0JCSAgaWYgKHJlcyA9PSBfX0dDT05WX09LIHx8IHJlcyA9PSBfX0dDT05WX0VNUFRZX0lOUFVUKQorLQkJICAgIGJyZWFrOworLQorLQkJICBpZiAocmVzICE9IF9fR0NPTlZfRlVMTF9PVVRQVVQpCistCQkgICAgeworLQkJICAgICAgLyogV2Ugc2hvdWxkIG5vdCB1c2UgdGhlIHRyYW5zbGF0aW9uIGF0IGFsbCwgaXQKKy0JCQkgaXMgaW5jb3JyZWN0bHkgZW5jb2RlZC4gICovCistCQkgICAgICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworLQkJICAgICAgcmV0dXJuIE5VTEw7CistCQkgICAgfQorLQorLQkJICBpbmJ1ZiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHJlc3VsdDsKKy0jIGVsc2UKKy0jICBpZiBIQVZFX0lDT05WCistCQkgIGNvbnN0IGNoYXIgKmlucHRyID0gKGNvbnN0IGNoYXIgKikgaW5idWY7CistCQkgIHNpemVfdCBpbmxlZnQgPSByZXN1bHRsZW47CistCQkgIGNoYXIgKm91dHB0ciA9IChjaGFyICopIG91dGJ1ZjsKKy0JCSAgc2l6ZV90IG91dGxlZnQ7CistCistCQkgIGlmIChmcmVlbWVtX3NpemUgPCBzaXplb2YgKHNpemVfdCkpCistCQkgICAgZ290byByZXNpemVfZnJlZW1lbTsKKy0KKy0JCSAgb3V0bGVmdCA9IGZyZWVtZW1fc2l6ZSAtIHNpemVvZiAoc2l6ZV90KTsKKy0JCSAgaWYgKGljb252IChjb252ZC0+Y29udiwKKy0JCQkgICAgIChJQ09OVl9DT05TVCBjaGFyICoqKSAmaW5wdHIsICZpbmxlZnQsCistCQkJICAgICAmb3V0cHRyLCAmb3V0bGVmdCkKKy0JCSAgICAgICE9IChzaXplX3QpICgtMSkpCistCQkgICAgeworLQkJICAgICAgb3V0YnVmID0gKHVuc2lnbmVkIGNoYXIgKikgb3V0cHRyOworLQkJICAgICAgYnJlYWs7CistCQkgICAgfQorLQkJICBpZiAoZXJybm8gIT0gRTJCSUcpCistCQkgICAgeworLQkJICAgICAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKy0JCSAgICAgIHJldHVybiBOVUxMOworLQkJICAgIH0KKy0jICBlbmRpZgorLSMgZW5kaWYKKy0KKy0JCXJlc2l6ZV9mcmVlbWVtOgorLQkJICAvKiBXZSBtdXN0IGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBvciByZXNpemUgdGhlIG9sZCBvbmUuICAqLworLQkJICBpZiAobWFsbG9jX2NvdW50ID4gMCkKKy0JCSAgICB7CistCQkgICAgICArK21hbGxvY19jb3VudDsKKy0JCSAgICAgIGZyZWVtZW1fc2l6ZSA9IG1hbGxvY19jb3VudCAqIElOSVRJQUxfQkxPQ0tfU0laRTsKKy0JCSAgICAgIG5ld21lbSA9ICh0cmFuc21lbV9ibG9ja190ICopIHJlYWxsb2MgKHRyYW5zbWVtX2xpc3QsCistCQkJCQkJCSAgICAgZnJlZW1lbV9zaXplKTsKKy0jIGlmZGVmIF9MSUJDCistCQkgICAgICBpZiAobmV3bWVtICE9IE5VTEwpCistCQkJdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CistCQkgICAgICBlbHNlCistCQkJeworLQkJCSAgc3RydWN0IHRyYW5zbWVtX2xpc3QgKm9sZCA9IHRyYW5zbWVtX2xpc3Q7CistCistCQkJICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKy0JCQkgIGZyZWUgKG9sZCk7CistCQkJfQorLSMgZW5kaWYKKy0JCSAgICB9CistCQkgIGVsc2UKKy0JCSAgICB7CistCQkgICAgICBtYWxsb2NfY291bnQgPSAxOworLQkJICAgICAgZnJlZW1lbV9zaXplID0gSU5JVElBTF9CTE9DS19TSVpFOworLQkJICAgICAgbmV3bWVtID0gKHRyYW5zbWVtX2Jsb2NrX3QgKikgbWFsbG9jIChmcmVlbWVtX3NpemUpOworLQkJICAgIH0KKy0JCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG5ld21lbSA9PSBOVUxMLCAwKSkKKy0JCSAgICB7CistCQkgICAgICBmcmVlbWVtID0gTlVMTDsKKy0JCSAgICAgIGZyZWVtZW1fc2l6ZSA9IDA7CistCQkgICAgICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworLQkJICAgICAgcmV0dXJuIChjaGFyICopIC0xOworLQkJICAgIH0KKy0KKy0jIGlmZGVmIF9MSUJDCistCQkgIC8qIEFkZCB0aGUgYmxvY2sgdG8gdGhlIGxpc3Qgb2YgYmxvY2tzIHdlIGhhdmUgdG8gZnJlZQorLQkJICAgICBhdCBzb21lIHBvaW50LiAgKi8KKy0JCSAgbmV3bWVtLT5uZXh0ID0gdHJhbnNtZW1fbGlzdDsKKy0JCSAgdHJhbnNtZW1fbGlzdCA9IG5ld21lbTsKKy0KKy0JCSAgZnJlZW1lbSA9ICh1bnNpZ25lZCBjaGFyICopIG5ld21lbS0+ZGF0YTsKKy0JCSAgZnJlZW1lbV9zaXplIC09IG9mZnNldG9mIChzdHJ1Y3QgdHJhbnNtZW1fbGlzdCwgZGF0YSk7CistIyBlbHNlCistCQkgIHRyYW5zbWVtX2xpc3QgPSBuZXdtZW07CistCQkgIGZyZWVtZW0gPSBuZXdtZW07CistIyBlbmRpZgorLQorLQkJICBvdXRidWYgPSBmcmVlbWVtICsgc2l6ZW9mIChzaXplX3QpOworLQkJfQorLQorLQkgICAgICAvKiBXZSBoYXZlIG5vdyBpbiBvdXIgYnVmZmVyIGEgY29udmVydGVkIHN0cmluZy4gIFB1dCB0aGlzCistCQkgaW50byB0aGUgdGFibGUgb2YgY29udmVyc2lvbnMuICAqLworLQkgICAgICAqKHNpemVfdCAqKSBmcmVlbWVtID0gb3V0YnVmIC0gZnJlZW1lbSAtIHNpemVvZiAoc2l6ZV90KTsKKy0JICAgICAgY29udmQtPmNvbnZfdGFiW2FjdF0gPSAoY2hhciAqKSBmcmVlbWVtOworLQkgICAgICAvKiBTaHJpbmsgZnJlZW1lbSwgYnV0IGtlZXAgaXQgYWxpZ25lZC4gICovCistCSAgICAgIGZyZWVtZW1fc2l6ZSAtPSBvdXRidWYgLSBmcmVlbWVtOworLQkgICAgICBmcmVlbWVtID0gb3V0YnVmOworLQkgICAgICBmcmVlbWVtICs9IGZyZWVtZW1fc2l6ZSAmIChhbGlnbm9mIChzaXplX3QpIC0gMSk7CistCSAgICAgIGZyZWVtZW1fc2l6ZSA9IGZyZWVtZW1fc2l6ZSAmIH4gKGFsaWdub2YgKHNpemVfdCkgLSAxKTsKKy0KKy0JICAgICAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKy0JICAgIH0KKy0KKy0JICAvKiBOb3cgY29udmQtPmNvbnZfdGFiW2FjdF0gY29udGFpbnMgdGhlIHRyYW5zbGF0aW9uIG9mIGFsbAorLQkgICAgIHRoZSBwbHVyYWwgdmFyaWFudHMuICAqLworLQkgIHJlc3VsdCA9IGNvbnZkLT5jb252X3RhYlthY3RdICsgc2l6ZW9mIChzaXplX3QpOworLQkgIHJlc3VsdGxlbiA9ICooc2l6ZV90ICopIGNvbnZkLT5jb252X3RhYlthY3RdOworLQl9CistICAgIH0KKy0KKy0gIC8qIFRoZSByZXN1bHQgc3RyaW5nIGlzIGNvbnZlcnRlZC4gICovCistCistI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKy0KKy0gICpsZW5ndGhwID0gcmVzdWx0bGVuOworLSAgcmV0dXJuIHJlc3VsdDsKKy19CistCistCistLyogTG9vayB1cCBhIHBsdXJhbCB2YXJpYW50LiAgKi8KKy1zdGF0aWMgY2hhciAqCistaW50ZXJuYWxfZnVuY3Rpb24KKy1wbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW50IG4sCistCSAgICAgICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbiwgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbikKKy17CistICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluZGF0YSA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW4tPmRhdGE7CistICB1bnNpZ25lZCBsb25nIGludCBpbmRleDsKKy0gIGNvbnN0IGNoYXIgKnA7CistCistICBpbmRleCA9IHBsdXJhbF9ldmFsIChkb21haW5kYXRhLT5wbHVyYWwsIG4pOworLSAgaWYgKGluZGV4ID49IGRvbWFpbmRhdGEtPm5wbHVyYWxzKQorLSAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBJdCBtZWFucyB0aGUgcGx1cmFsIGV4cHJlc3Npb24gYW5kIHRoZQorLSAgICAgICBnaXZlbiBtYXhpbXVtIHZhbHVlIGRvIG5vdCBtYXRjaC4gICovCistICAgIGluZGV4ID0gMDsKKy0KKy0gIC8qIFNraXAgSU5ERVggc3RyaW5ncyBhdCBUUkFOU0xBVElPTi4gICovCistICBwID0gdHJhbnNsYXRpb247CistICB3aGlsZSAoaW5kZXgtLSA+IDApCistICAgIHsKKy0jaWZkZWYgX0xJQkMKKy0gICAgICBwID0gX19yYXdtZW1jaHIgKHAsICdcMCcpOworLSNlbHNlCistICAgICAgcCA9IHN0cmNociAocCwgJ1wwJyk7CistI2VuZGlmCistICAgICAgLyogQW5kIHNraXAgb3ZlciB0aGUgTlVMIGJ5dGUuICAqLworLSAgICAgIHArKzsKKy0KKy0gICAgICBpZiAocCA+PSB0cmFuc2xhdGlvbiArIHRyYW5zbGF0aW9uX2xlbikKKy0JLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSXQgbWVhbnMgdGhlIHBsdXJhbCBleHByZXNzaW9uCistCSAgIGV2YWx1YXRlZCB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgdmFyaWFudHMKKy0JICAgYXZhaWxhYmxlIGZvciBNU0dJRDEuICAqLworLQlyZXR1cm4gKGNoYXIgKikgdHJhbnNsYXRpb247CistICAgIH0KKy0gIHJldHVybiAoY2hhciAqKSBwOworLX0KKy0KKy0jaWZuZGVmIF9MSUJDCistLyogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBsb2NhbGUgQ0FURUdPUlkuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICoKKy1pbnRlcm5hbF9mdW5jdGlvbgorLWNhdGVnb3J5X3RvX25hbWUgKGludCBjYXRlZ29yeSkKKy17CistICBjb25zdCBjaGFyICpyZXR2YWw7CistCistICBzd2l0Y2ggKGNhdGVnb3J5KQorLSAgeworLSNpZmRlZiBMQ19DT0xMQVRFCistICBjYXNlIExDX0NPTExBVEU6CistICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX0NUWVBFCistICBjYXNlIExDX0NUWVBFOgorLSAgICByZXR2YWwgPSAiTENfQ1RZUEUiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfTU9ORVRBUlkKKy0gIGNhc2UgTENfTU9ORVRBUlk6CistICAgIHJldHZhbCA9ICJMQ19NT05FVEFSWSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19OVU1FUklDCistICBjYXNlIExDX05VTUVSSUM6CistICAgIHJldHZhbCA9ICJMQ19OVU1FUklDIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX1RJTUUKKy0gIGNhc2UgTENfVElNRToKKy0gICAgcmV0dmFsID0gIkxDX1RJTUUiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfTUVTU0FHRVMKKy0gIGNhc2UgTENfTUVTU0FHRVM6CistICAgIHJldHZhbCA9ICJMQ19NRVNTQUdFUyI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19SRVNQT05TRQorLSAgY2FzZSBMQ19SRVNQT05TRToKKy0gICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX0FMTAorLSAgY2FzZSBMQ19BTEw6CistICAgIC8qIFRoaXMgbWlnaHQgbm90IG1ha2Ugc2Vuc2UgYnV0IGlzIHBlcmhhcHMgYmV0dGVyIHRoYW4gYW55IG90aGVyCistICAgICAgIHZhbHVlLiAgKi8KKy0gICAgcmV0dmFsID0gIkxDX0FMTCI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSAgZGVmYXVsdDoKKy0gICAgLyogSWYgeW91IGhhdmUgYSBiZXR0ZXIgaWRlYSBmb3IgYSBkZWZhdWx0IHZhbHVlIGxldCBtZSBrbm93LiAgKi8KKy0gICAgcmV0dmFsID0gIkxDX1hYWCI7CistICB9CistCistICByZXR1cm4gcmV0dmFsOworLX0KKy0jZW5kaWYKKy0KKy0vKiBHdWVzcyB2YWx1ZSBvZiBjdXJyZW50IGxvY2FsZSBmcm9tIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKy0gICBvciBzeXN0ZW0tZGVwZW5kZW50IGRlZmF1bHRzLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqCistaW50ZXJuYWxfZnVuY3Rpb24KKy0jaWZkZWYgSU5fTElCR0xPQ0FMRQorLWd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSwKKy0JCSAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZSkKKy0KKy0jZWxzZQorLWd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKy0jZW5kaWYKKy17CistICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKy0jaWZuZGVmIElOX0xJQkdMT0NBTEUKKy0gIGNvbnN0IGNoYXIgKmxvY2FsZTsKKy0jIGlmbmRlZiBfTElCQworLSAgY29uc3QgY2hhciAqbGFuZ3VhZ2VfZGVmYXVsdDsKKy0gIGludCBsb2NhbGVfZGVmYXVsdGVkOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0gIC8qIFdlIHVzZSB0aGUgc2V0dGluZ3MgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKy0gICAgIDEuIFRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0xBTkdVQUdFJy4gIFRoaXMgaXMgYSBHTlUKKy0gICAgICAgIGV4dGVuc2lvbi4gIEl0cyB2YWx1ZSBjYW4gYmUgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBsb2NhbGUgbmFtZXMuCistICAgICAyLiBUaGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdMQ19BTEwnLCAnTENfeHh4Jywgb3IgJ0xBTkcnLgorLSAgICAgICAgTW9yZSBwcmVjaXNlbHksIHRoZSBmaXJzdCBhbW9uZyB0aGVzZSB0aGF0IGlzIHNldCB0byBhIG5vbi1lbXB0eSB2YWx1ZS4KKy0gICAgICAgIFRoaXMgaXMgaG93IFBPU0lYIHNwZWNpZmllcyBpdC4gIFRoZSB2YWx1ZSBpcyBhIHNpbmdsZSBsb2NhbGUgbmFtZS4KKy0gICAgIDMuIEEgc3lzdGVtLWRlcGVuZGVudCBwcmVmZXJlbmNlIGxpc3Qgb2YgbGFuZ3VhZ2VzLiAgSXRzIHZhbHVlIGNhbiBiZSBhCistICAgICAgICBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBsb2NhbGUgbmFtZXMuCistICAgICA0LiBBIHN5c3RlbS1kZXBlbmRlbnQgZGVmYXVsdCBsb2NhbGUgbmFtZS4KKy0gICAgIFRoaXMgd2F5OgorLSAgICAgICAtIFN5c3RlbS1kZXBlbmRlbnQgc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorLSAgICAgICAtIElmIHRoZSBzeXN0ZW0gcHJvdmlkZXMgYm90aCBhIGxpc3Qgb2YgbGFuZ3VhZ2VzIGFuZCBhIGRlZmF1bHQgbG9jYWxlLAorLSAgICAgICAgIHRoZSBmb3JtZXIgaXMgdXNlZC4gICovCistCistI2lmbmRlZiBJTl9MSUJHTE9DQUxFCistICAvKiBGZXRjaCB0aGUgbG9jYWxlIG5hbWUsIHRocm91Z2ggdGhlIFBPU0lYIG1ldGhvZCBvZiBsb29raW5nIHRvIGBMQ19BTEwnLAorLSAgICAgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUKKy0gICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCistIyBpZmRlZiBfTElCQworLSAgbG9jYWxlID0gX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSk7CistIyBlbHNlCistIyAgaWYgSEFWRV9TVFJVQ1RfX19MT0NBTEVfU1RSVUNUX19fTkFNRVMgJiYgZGVmaW5lZCBVU0VfSU5fR0VUVEVYVF9URVNUUworLSAgLyogVGhlIF9fbmFtZXMgZmllbGQgaXMgbm90IHB1YmxpYyBnbGliYyBBUEkgYW5kIG11c3QgdGhlcmVmb3JlIG5vdCBiZSB1c2VkCistICAgICBpbiBjb2RlIHRoYXQgaXMgaW5zdGFsbGVkIGluIHB1YmxpYyBsb2NhdGlvbnMuICAqLworLSAgbG9jYWxlX3QgdGhyZWFkX2xvY2FsZSA9IHVzZWxvY2FsZSAoTlVMTCk7CistICBpZiAodGhyZWFkX2xvY2FsZSAhPSBMQ19HTE9CQUxfTE9DQUxFKQorLSAgICB7CistICAgICAgbG9jYWxlID0gdGhyZWFkX2xvY2FsZS0+X19uYW1lc1tjYXRlZ29yeV07CistICAgICAgbG9jYWxlX2RlZmF1bHRlZCA9IDA7CistICAgIH0KKy0gIGVsc2UKKy0jICBlbmRpZgorLSAgICB7CistICAgICAgbG9jYWxlID0gX25sX2xvY2FsZV9uYW1lX3Bvc2l4IChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKy0gICAgICBsb2NhbGVfZGVmYXVsdGVkID0gMDsKKy0gICAgICBpZiAobG9jYWxlID09IE5VTEwpCistCXsKKy0JICBsb2NhbGUgPSBfbmxfbG9jYWxlX25hbWVfZGVmYXVsdCAoKTsKKy0JICBsb2NhbGVfZGVmYXVsdGVkID0gMTsKKy0JfQorLSAgICB9CistIyBlbmRpZgorLSNlbmRpZgorLQorLSAgLyogSWdub3JlIExBTkdVQUdFIGFuZCBpdHMgc3lzdGVtLWRlcGVuZGVudCBhbmFsb2dvbiBpZiB0aGUgbG9jYWxlIGlzIHNldAorLSAgICAgdG8gIkMiIGJlY2F1c2UKKy0gICAgIDEuICJDIiBsb2NhbGUgdXN1YWxseSB1c2VzIHRoZSBBU0NJSSBlbmNvZGluZywgYW5kIG1vc3QgaW50ZXJuYXRpb25hbAorLQltZXNzYWdlcyB1c2Ugbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFRoZXNlIGNoYXJhY3RlcnMgZ2V0IGRpc3BsYXllZAorLQlhcyBxdWVzdGlvbiBtYXJrcyAoaWYgdXNpbmcgZ2xpYmMncyBpY29udigpKSBvciBhcyBpbnZhbGlkIDgtYml0CistCWNoYXJhY3RlcnMgKGJlY2F1c2Ugb3RoZXIgaWNvbnYoKXMgcmVmdXNlIHRvIGNvbnZlcnQgbW9zdCBub24tQVNDSUkKKy0JY2hhcmFjdGVycyB0byBBU0NJSSkuIEluIGFueSBjYXNlLCB0aGUgb3V0cHV0IGlzIHVnbHkuCistICAgICAyLiBUaGUgcHJlY2lzZSBvdXRwdXQgb2Ygc29tZSBwcm9ncmFtcyBpbiB0aGUgIkMiIGxvY2FsZSBpcyBzcGVjaWZpZWQKKy0JYnkgUE9TSVggYW5kIHNob3VsZCBub3QgZGVwZW5kIG9uIGVudmlyb25tZW50IHZhcmlhYmxlcyBsaWtlCistCSJMQU5HVUFHRSIgb3Igc3lzdGVtLWRlcGVuZGVudCBpbmZvcm1hdGlvbi4gIFdlIGFsbG93IHN1Y2ggcHJvZ3JhbXMKKy0gICAgICAgIHRvIHVzZSBnZXR0ZXh0KCkuICAqLworLSAgaWYgKHN0cmNtcCAobG9jYWxlLCAiQyIpID09IDApCistICAgIHJldHVybiBsb2NhbGU7CistCistICAvKiBUaGUgaGlnaGVzdCBwcmlvcml0eSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlICdMQU5HVUFHRScgZW52aXJvbm1lbnQKKy0gICAgIHZhcmlhYmxlLiAgKi8KKy0gIGxhbmd1YWdlID0gZ2V0ZW52ICgiTEFOR1VBR0UiKTsKKy0gIGlmIChsYW5ndWFnZSAhPSBOVUxMICYmIGxhbmd1YWdlWzBdICE9ICdcMCcpCistICAgIHJldHVybiBsYW5ndWFnZTsKKy0jaWYgIWRlZmluZWQgSU5fTElCR0xPQ0FMRSAmJiAhZGVmaW5lZCBfTElCQworLSAgLyogVGhlIG5leHQgcHJpb3JpdHkgdmFsdWUgaXMgdGhlIGxvY2FsZSBuYW1lLCBpZiBub3QgZGVmYXVsdGVkLiAgKi8KKy0gIGlmIChsb2NhbGVfZGVmYXVsdGVkKQorLSAgICB7CistICAgICAgLyogVGhlIG5leHQgcHJpb3JpdHkgdmFsdWUgaXMgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgcHJlZmVyZW5jZXMgbGlzdC4gKi8KKy0gICAgICBsYW5ndWFnZV9kZWZhdWx0ID0gX25sX2xhbmd1YWdlX3ByZWZlcmVuY2VzX2RlZmF1bHQgKCk7CistICAgICAgaWYgKGxhbmd1YWdlX2RlZmF1bHQgIT0gTlVMTCkKKy0gICAgICAgIHJldHVybiBsYW5ndWFnZV9kZWZhdWx0OworLSAgICB9CistICAvKiBUaGUgbGVhc3QgcHJpb3JpdHkgdmFsdWUgaXMgdGhlIGxvY2FsZSBuYW1lLCBpZiBkZWZhdWx0ZWQuICAqLworLSNlbmRpZgorLSAgcmV0dXJuIGxvY2FsZTsKKy19CistCistI2lmIChkZWZpbmVkIF9MSUJDIHx8IEhBVkVfSUNPTlYpICYmICFkZWZpbmVkIElOX0xJQkdMT0NBTEUKKy0vKiBSZXR1cm5zIHRoZSBvdXRwdXQgY2hhcnNldC4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWludGVybmFsX2Z1bmN0aW9uCistZ2V0X291dHB1dF9jaGFyc2V0IChzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKy17CistICAvKiBUaGUgb3V0cHV0IGNoYXJzZXQgc2hvdWxkIG5vcm1hbGx5IGJlIGRldGVybWluZWQgYnkgdGhlIGxvY2FsZS4gIEJ1dAorLSAgICAgc29tZXRpbWVzIHRoZSBsb2NhbGUgaXMgbm90IHVzZWQgb3Igbm90IGNvcnJlY3RseSBzZXQgdXAsIHNvIHdlIHByb3ZpZGUKKy0gICAgIGEgcG9zc2liaWxpdHkgZm9yIHRoZSB1c2VyIHRvIG92ZXJyaWRlIHRoaXM6IHRoZSBPVVRQVVRfQ0hBUlNFVAorLSAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUuICBNb3Jlb3ZlciwgdGhlIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoCistICAgICBiaW5kX3RleHRkb21haW5fY29kZXNldCBvdmVycmlkZXMgYm90aC4gICovCistICBpZiAoZG9tYWluYmluZGluZyAhPSBOVUxMICYmIGRvbWFpbmJpbmRpbmctPmNvZGVzZXQgIT0gTlVMTCkKKy0gICAgcmV0dXJuIGRvbWFpbmJpbmRpbmctPmNvZGVzZXQ7CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBGb3Igc3BlZWQgcmVhc29ucywgd2UgbG9vayBhdCB0aGUgdmFsdWUgb2YgT1VUUFVUX0NIQVJTRVQgb25seQorLQkgb25jZS4gIFRoaXMgaXMgYSB1c2VyIHZhcmlhYmxlIHRoYXQgaXMgbm90IHN1cHBvc2VkIHRvIGNoYW5nZQorLQkgZHVyaW5nIGEgcHJvZ3JhbSBydW4uICAqLworLSAgICAgIHN0YXRpYyBjaGFyICpvdXRwdXRfY2hhcnNldF9jYWNoZTsKKy0gICAgICBzdGF0aWMgaW50IG91dHB1dF9jaGFyc2V0X2NhY2hlZDsKKy0KKy0gICAgICBpZiAoIW91dHB1dF9jaGFyc2V0X2NhY2hlZCkKKy0JeworLQkgIGNvbnN0IGNoYXIgKnZhbHVlID0gZ2V0ZW52ICgiT1VUUFVUX0NIQVJTRVQiKTsKKy0KKy0JICBpZiAodmFsdWUgIT0gTlVMTCAmJiB2YWx1ZVswXSAhPSAnXDAnKQorLQkgICAgeworLQkgICAgICBzaXplX3QgbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworLQkgICAgICBjaGFyICp2YWx1ZV9jb3B5ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworLQorLQkgICAgICBpZiAodmFsdWVfY29weSAhPSBOVUxMKQorLQkJbWVtY3B5ICh2YWx1ZV9jb3B5LCB2YWx1ZSwgbGVuKTsKKy0JICAgICAgb3V0cHV0X2NoYXJzZXRfY2FjaGUgPSB2YWx1ZV9jb3B5OworLQkgICAgfQorLQkgIG91dHB1dF9jaGFyc2V0X2NhY2hlZCA9IDE7CistCX0KKy0KKy0gICAgICBpZiAob3V0cHV0X2NoYXJzZXRfY2FjaGUgIT0gTlVMTCkKKy0JcmV0dXJuIG91dHB1dF9jaGFyc2V0X2NhY2hlOworLSAgICAgIGVsc2UKKy0JeworLSMgaWZkZWYgX0xJQkMKKy0JICByZXR1cm4gX05MX0NVUlJFTlQgKExDX0NUWVBFLCBDT0RFU0VUKTsKKy0jIGVsc2UKKy0jICBpZiBIQVZFX0lDT05WCistCSAgcmV0dXJuIGxvY2FsZV9jaGFyc2V0ICgpOworLSMgIGVuZGlmCistIyBlbmRpZgorLQl9CistICAgIH0KKy19CistI2VuZGlmCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCisteworLSAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorLSAgICAvKiBEbyBub3RoaW5nLiAqLyA7CistICByZXR1cm4gZGVzdCAtIDE7CistfQorLSNlbmRpZgorLQorLSNpZiAhX0xJQkMgJiYgIUhBVkVfTUVNUENQWQorLXN0YXRpYyB2b2lkICoKKy1tZW1wY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQorLXsKKy0gIHJldHVybiAodm9pZCAqKSAoKGNoYXIgKikgbWVtY3B5IChkZXN0LCBzcmMsIG4pICsgbik7CistfQorLSNlbmRpZgorLQorLSNpZiAhX0xJQkMgJiYgIUhBVkVfVFNFQVJDSAorLSMgaW5jbHVkZSAidHNlYXJjaC5jIgorLSNlbmRpZgorLQorLQorLSNpZmRlZiBfTElCQworLS8qIElmIHdlIHdhbnQgdG8gZnJlZSBhbGwgcmVzb3VyY2VzIHdlIGhhdmUgdG8gZG8gc29tZSB3b3JrIGF0CistICAgcHJvZ3JhbSdzIGVuZC4gICovCistbGliY19mcmVlcmVzX2ZuIChmcmVlX21lbSkKKy17CistICB2b2lkICpvbGQ7CistCistICB3aGlsZSAoX25sX2RvbWFpbl9iaW5kaW5ncyAhPSBOVUxMKQorLSAgICB7CistICAgICAgc3RydWN0IGJpbmRpbmcgKm9sZHAgPSBfbmxfZG9tYWluX2JpbmRpbmdzOworLSAgICAgIF9ubF9kb21haW5fYmluZGluZ3MgPSBfbmxfZG9tYWluX2JpbmRpbmdzLT5uZXh0OworLSAgICAgIGlmIChvbGRwLT5kaXJuYW1lICE9IF9ubF9kZWZhdWx0X2Rpcm5hbWUpCistCS8qIFllcywgdGhpcyBpcyBhIHBvaW50ZXIgY29tcGFyaXNvbi4gICovCistCWZyZWUgKG9sZHAtPmRpcm5hbWUpOworLSAgICAgIGZyZWUgKG9sZHAtPmNvZGVzZXQpOworLSAgICAgIGZyZWUgKG9sZHApOworLSAgICB9CistCistICBpZiAoX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCistICAgIC8qIFllcywgYWdhaW4gYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLworLSAgICBmcmVlICgoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbik7CistCistICAvKiBSZW1vdmUgdGhlIHNlYXJjaCB0cmVlIHdpdGggdGhlIGtub3duIHRyYW5zbGF0aW9ucy4gICovCistICBfX3RkZXN0cm95IChyb290LCBmcmVlKTsKKy0gIHJvb3QgPSBOVUxMOworLQorLSAgd2hpbGUgKHRyYW5zbWVtX2xpc3QgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIG9sZCA9IHRyYW5zbWVtX2xpc3Q7CistICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CistICAgICAgZnJlZSAob2xkKTsKKy0gICAgfQorLX0KKy0jZW5kaWYKKy0tLSBhL2ludGwvZGNuZ2V0dGV4dC5jCisrKysgL2Rldi9udWxsCitAQCAtMSw1NyArMCwwIEBACistLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRjbmdldHRleHQoMykgZnVuY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGxpYmludGwuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSAibGliZ251aW50bC5oIgorLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0vKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCistICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorLSAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworLSAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgRENOR0VUVEVYVCBfX2RjbmdldHRleHQKKy0jIGRlZmluZSBEQ0lHRVRURVhUIF9fZGNpZ2V0dGV4dAorLSNlbHNlCistIyBkZWZpbmUgRENOR0VUVEVYVCBsaWJpbnRsX2RjbmdldHRleHQKKy0jIGRlZmluZSBEQ0lHRVRURVhUIGxpYmludGxfZGNpZ2V0dGV4dAorLSNlbmRpZgorLQorLS8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorLSAgIGxvY2FsZS4gICovCistY2hhciAqCistRENOR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JICAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuLAorLQkgICAgaW50IGNhdGVnb3J5KQorLXsKKy0gIHJldHVybiBEQ0lHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgMSwgbiwgY2F0ZWdvcnkpOworLX0KKy0KKy0jaWZkZWYgX0xJQkMKKy0vKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKy13ZWFrX2FsaWFzIChfX2RjbmdldHRleHQsIGRjbmdldHRleHQpOworLSNlbmRpZgorLS0tIGEvaW50bC9kZ2V0dGV4dC5jCisrKysgL2Rldi9udWxsCitAQCAtMSw1OCArMCwwIEBACistLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRnZXR0ZXh0KDMpIGZ1bmN0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImdldHRleHRQLmgiCistCistI2luY2x1ZGUgPGxvY2FsZS5oPgorLQorLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorLSNlbHNlCistIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLS8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKy0gICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCistICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCistICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBER0VUVEVYVCBfX2RnZXR0ZXh0CistIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKy0jZWxzZQorLSMgZGVmaW5lIERHRVRURVhUIGxpYmludGxfZGdldHRleHQKKy0jIGRlZmluZSBEQ0dFVFRFWFQgbGliaW50bF9kY2dldHRleHQKKy0jZW5kaWYKKy0KKy0vKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBvZiB0aGUgY3VycmVudAorLSAgIExDX01FU1NBR0VTIGxvY2FsZS4gICovCistY2hhciAqCistREdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkKQorLXsKKy0gIHJldHVybiBEQ0dFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBMQ19NRVNTQUdFUyk7CistfQorLQorLSNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworLXdlYWtfYWxpYXMgKF9fZGdldHRleHQsIGRnZXR0ZXh0KTsKKy0jZW5kaWYKKy0tLSBhL2ludGwvZG5nZXR0ZXh0LmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDU5ICswLDAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImdldHRleHRQLmgiCistCistI2luY2x1ZGUgPGxvY2FsZS5oPgorLQorLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorLSNlbHNlCistIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLS8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKy0gICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCistICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCistICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBETkdFVFRFWFQgX19kbmdldHRleHQKKy0jIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorLSNlbHNlCistIyBkZWZpbmUgRE5HRVRURVhUIGxpYmludGxfZG5nZXR0ZXh0CistIyBkZWZpbmUgRENOR0VUVEVYVCBsaWJpbnRsX2RjbmdldHRleHQKKy0jZW5kaWYKKy0KKy0vKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBvZiB0aGUgY3VycmVudAorLSAgIExDX01FU1NBR0VTIGxvY2FsZSBhbmQgc2tpcCBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUgcGx1cmFsIGZvcm0uICAqLworLWNoYXIgKgorLUROR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisteworLSAgcmV0dXJuIERDTkdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuLCBMQ19NRVNTQUdFUyk7CistfQorLQorLSNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworLXdlYWtfYWxpYXMgKF9fZG5nZXR0ZXh0LCBkbmdldHRleHQpOworLSNlbmRpZgorLS0tIGEvaW50bC9ldmFsLXBsdXJhbC5oCisrKysgL2Rldi9udWxsCitAQCAtMSwxMDggKzAsMCBAQAorLS8qIFBsdXJhbCBleHByZXNzaW9uIGV2YWx1YXRpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIFNUQVRJQworLSNkZWZpbmUgU1RBVElDIHN0YXRpYworLSNlbmRpZgorLQorLS8qIEV2YWx1YXRlIHRoZSBwbHVyYWwgZXhwcmVzc2lvbiBhbmQgcmV0dXJuIGFuIGluZGV4IHZhbHVlLiAgKi8KKy1TVEFUSUMKKy11bnNpZ25lZCBsb25nIGludAorLWludGVybmFsX2Z1bmN0aW9uCistcGx1cmFsX2V2YWwgKGNvbnN0IHN0cnVjdCBleHByZXNzaW9uICpwZXhwLCB1bnNpZ25lZCBsb25nIGludCBuKQorLXsKKy0gIHN3aXRjaCAocGV4cC0+bmFyZ3MpCistICAgIHsKKy0gICAgY2FzZSAwOgorLSAgICAgIHN3aXRjaCAocGV4cC0+b3BlcmF0aW9uKQorLQl7CistCWNhc2UgdmFyOgorLQkgIHJldHVybiBuOworLQljYXNlIG51bToKKy0JICByZXR1cm4gcGV4cC0+dmFsLm51bTsKKy0JZGVmYXVsdDoKKy0JICBicmVhazsKKy0JfQorLSAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKy0gICAgICBicmVhazsKKy0gICAgY2FzZSAxOgorLSAgICAgIHsKKy0JLyogcGV4cC0+b3BlcmF0aW9uIG11c3QgYmUgbG5vdC4gICovCistCXVuc2lnbmVkIGxvbmcgaW50IGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CistCXJldHVybiAhIGFyZzsKKy0gICAgICB9CistICAgIGNhc2UgMjoKKy0gICAgICB7CistCXVuc2lnbmVkIGxvbmcgaW50IGxlZnRhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMF0sIG4pOworLQlpZiAocGV4cC0+b3BlcmF0aW9uID09IGxvcikKKy0JICByZXR1cm4gbGVmdGFyZyB8fCBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworLQllbHNlIGlmIChwZXhwLT5vcGVyYXRpb24gPT0gbGFuZCkKKy0JICByZXR1cm4gbGVmdGFyZyAmJiBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworLQllbHNlCistCSAgeworLQkgICAgdW5zaWduZWQgbG9uZyBpbnQgcmlnaHRhcmcgPSBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbMV0sIG4pOworLQorLQkgICAgc3dpdGNoIChwZXhwLT5vcGVyYXRpb24pCistCSAgICAgIHsKKy0JICAgICAgY2FzZSBtdWx0OgorLQkJcmV0dXJuIGxlZnRhcmcgKiByaWdodGFyZzsKKy0JICAgICAgY2FzZSBkaXZpZGU6CistI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKy0JCWlmIChyaWdodGFyZyA9PSAwKQorLQkJICByYWlzZSAoU0lHRlBFKTsKKy0jZW5kaWYKKy0JCXJldHVybiBsZWZ0YXJnIC8gcmlnaHRhcmc7CistCSAgICAgIGNhc2UgbW9kdWxlOgorLSNpZiAhSU5URElWMF9SQUlTRVNfU0lHRlBFCistCQlpZiAocmlnaHRhcmcgPT0gMCkKKy0JCSAgcmFpc2UgKFNJR0ZQRSk7CistI2VuZGlmCistCQlyZXR1cm4gbGVmdGFyZyAlIHJpZ2h0YXJnOworLQkgICAgICBjYXNlIHBsdXM6CistCQlyZXR1cm4gbGVmdGFyZyArIHJpZ2h0YXJnOworLQkgICAgICBjYXNlIG1pbnVzOgorLQkJcmV0dXJuIGxlZnRhcmcgLSByaWdodGFyZzsKKy0JICAgICAgY2FzZSBsZXNzX3RoYW46CistCQlyZXR1cm4gbGVmdGFyZyA8IHJpZ2h0YXJnOworLQkgICAgICBjYXNlIGdyZWF0ZXJfdGhhbjoKKy0JCXJldHVybiBsZWZ0YXJnID4gcmlnaHRhcmc7CistCSAgICAgIGNhc2UgbGVzc19vcl9lcXVhbDoKKy0JCXJldHVybiBsZWZ0YXJnIDw9IHJpZ2h0YXJnOworLQkgICAgICBjYXNlIGdyZWF0ZXJfb3JfZXF1YWw6CistCQlyZXR1cm4gbGVmdGFyZyA+PSByaWdodGFyZzsKKy0JICAgICAgY2FzZSBlcXVhbDoKKy0JCXJldHVybiBsZWZ0YXJnID09IHJpZ2h0YXJnOworLQkgICAgICBjYXNlIG5vdF9lcXVhbDoKKy0JCXJldHVybiBsZWZ0YXJnICE9IHJpZ2h0YXJnOworLQkgICAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICAgIH0KKy0JICB9CistCS8qIE5PVFJFQUNIRUQgKi8KKy0JYnJlYWs7CistICAgICAgfQorLSAgICBjYXNlIDM6CistICAgICAgeworLQkvKiBwZXhwLT5vcGVyYXRpb24gbXVzdCBiZSBxbW9wLiAgKi8KKy0JdW5zaWduZWQgbG9uZyBpbnQgYm9vbGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CistCXJldHVybiBwbHVyYWxfZXZhbCAocGV4cC0+dmFsLmFyZ3NbYm9vbGFyZyA/IDEgOiAyXSwgbik7CistICAgICAgfQorLSAgICB9CistICAvKiBOT1RSRUFDSEVEICovCistICByZXR1cm4gMDsKKy19CistLS0gYS9pbnRsL2V4cGxvZGVuYW1lLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDEzNSArMCwwIEBACistLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMSwgMjAwMywgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistCistI2luY2x1ZGUgImxvYWRpbmZvLmgiCistCistLyogT24gc29tZSBzdHJhbmdlIHN5c3RlbXMgc3RpbGwgbm8gZGVmaW5pdGlvbiBvZiBOVUxMIGlzIGZvdW5kLiAgU2lnaCEgICovCistI2lmbmRlZiBOVUxMCistIyBpZiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCistIyAgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCistIyBlbHNlCistIyAgZGVmaW5lIE5VTEwgMAorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogU3BsaXQgYSBsb2NhbGUgbmFtZSBOQU1FIGludG8gYSBsZWFkaW5nIGxhbmd1YWdlIHBhcnQgYW5kIGFsbCB0aGUKKy0gICByZXN0LiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBsYW5ndWFnZSwKKy0gICBpLmUuIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXN0LiAgKi8KKy1zdGF0aWMgY2hhciAqX25sX2ZpbmRfbGFuZ3VhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpOworLQorLXN0YXRpYyBjaGFyICoKKy1fbmxfZmluZF9sYW5ndWFnZSAoY29uc3QgY2hhciAqbmFtZSkKKy17CistICB3aGlsZSAobmFtZVswXSAhPSAnXDAnICYmIG5hbWVbMF0gIT0gJ18nICYmIG5hbWVbMF0gIT0gJ0AnICYmIG5hbWVbMF0gIT0gJy4nKQorLSAgICArK25hbWU7CistCistICByZXR1cm4gKGNoYXIgKikgbmFtZTsKKy19CistCistCistaW50CistX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwKKy0JCSAgY29uc3QgY2hhciAqKmxhbmd1YWdlLCBjb25zdCBjaGFyICoqbW9kaWZpZXIsCistCQkgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorLQkJICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0KQorLXsKKy0gIGNoYXIgKmNwOworLSAgaW50IG1hc2s7CistCistICAqbW9kaWZpZXIgPSBOVUxMOworLSAgKnRlcnJpdG9yeSA9IE5VTEw7CistICAqY29kZXNldCA9IE5VTEw7CistICAqbm9ybWFsaXplZF9jb2Rlc2V0ID0gTlVMTDsKKy0KKy0gIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorLSAgICAgbG9vayBmb3IgdGhlIGxhbmd1YWdlLiAgVGVybWluYXRpb24gc3ltYm9scyBhcmUgYF8nLCAnLicsIGFuZCBgQCcuICAqLworLSAgbWFzayA9IDA7CistICAqbGFuZ3VhZ2UgPSBjcCA9IG5hbWU7CistICBjcCA9IF9ubF9maW5kX2xhbmd1YWdlICgqbGFuZ3VhZ2UpOworLQorLSAgaWYgKCpsYW5ndWFnZSA9PSBjcCkKKy0gICAgLyogVGhpcyBkb2VzIG5vdCBtYWtlIHNlbnNlOiBsYW5ndWFnZSBoYXMgdG8gYmUgc3BlY2lmaWVkLiAgVXNlCistICAgICAgIHRoaXMgZW50cnkgYXMgaXQgaXMgd2l0aG91dCBleHBsb2RpbmcuICBQZXJoYXBzIGl0IGlzIGFuIGFsaWFzLiAgKi8KKy0gICAgY3AgPSBzdHJjaHIgKCpsYW5ndWFnZSwgJ1wwJyk7CistICBlbHNlCistICAgIHsKKy0gICAgICBpZiAoY3BbMF0gPT0gJ18nKQorLQl7CistCSAgLyogTmV4dCBpcyB0aGUgdGVycml0b3J5LiAgKi8KKy0JICBjcFswXSA9ICdcMCc7CistCSAgKnRlcnJpdG9yeSA9ICsrY3A7CistCistCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJy4nICYmIGNwWzBdICE9ICdAJykKKy0JICAgICsrY3A7CistCistCSAgbWFzayB8PSBYUEdfVEVSUklUT1JZOworLQl9CistCistICAgICAgaWYgKGNwWzBdID09ICcuJykKKy0JeworLQkgIC8qIE5leHQgaXMgdGhlIGNvZGVzZXQuICAqLworLQkgIGNwWzBdID0gJ1wwJzsKKy0JICAqY29kZXNldCA9ICsrY3A7CistCistCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJ0AnKQorLQkgICAgKytjcDsKKy0KKy0JICBtYXNrIHw9IFhQR19DT0RFU0VUOworLQorLQkgIGlmICgqY29kZXNldCAhPSBjcCAmJiAoKmNvZGVzZXQpWzBdICE9ICdcMCcpCistCSAgICB7CistCSAgICAgICpub3JtYWxpemVkX2NvZGVzZXQgPSBfbmxfbm9ybWFsaXplX2NvZGVzZXQgKCpjb2Rlc2V0LAorLQkJCQkJCQkgICBjcCAtICpjb2Rlc2V0KTsKKy0JICAgICAgaWYgKCpub3JtYWxpemVkX2NvZGVzZXQgPT0gTlVMTCkKKy0JCXJldHVybiAtMTsKKy0JICAgICAgZWxzZSBpZiAoc3RyY21wICgqY29kZXNldCwgKm5vcm1hbGl6ZWRfY29kZXNldCkgPT0gMCkKKy0JCWZyZWUgKChjaGFyICopICpub3JtYWxpemVkX2NvZGVzZXQpOworLQkgICAgICBlbHNlCistCQltYXNrIHw9IFhQR19OT1JNX0NPREVTRVQ7CistCSAgICB9CistCX0KKy0gICAgfQorLQorLSAgaWYgKGNwWzBdID09ICdAJykKKy0gICAgeworLSAgICAgIC8qIE5leHQgaXMgdGhlIG1vZGlmaWVyLiAgKi8KKy0gICAgICBjcFswXSA9ICdcMCc7CistICAgICAgKm1vZGlmaWVyID0gKytjcDsKKy0KKy0gICAgICBpZiAoY3BbMF0gIT0gJ1wwJykKKy0JbWFzayB8PSBYUEdfTU9ESUZJRVI7CistICAgIH0KKy0KKy0gIGlmICgqdGVycml0b3J5ICE9IE5VTEwgJiYgKCp0ZXJyaXRvcnkpWzBdID09ICdcMCcpCistICAgIG1hc2sgJj0gflhQR19URVJSSVRPUlk7CistCistICBpZiAoKmNvZGVzZXQgIT0gTlVMTCAmJiAoKmNvZGVzZXQpWzBdID09ICdcMCcpCistICAgIG1hc2sgJj0gflhQR19DT0RFU0VUOworLQorLSAgcmV0dXJuIG1hc2s7CistfQorLS0tIGEvaW50bC9leHBvcnQuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsNiArMCwwIEBACistCistI2lmIEBIQVZFX1ZJU0lCSUxJVFlAICYmIEJVSUxESU5HX0xJQklOVEwKKy0jZGVmaW5lIExJQklOVExfRExMX0VYUE9SVEVEIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKQorLSNlbHNlCistI2RlZmluZSBMSUJJTlRMX0RMTF9FWFBPUlRFRAorLSNlbmRpZgorLS0tIGEvaW50bC9maW5kZG9tYWluLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDIxMiArMCwwIEBACistLyogSGFuZGxlIGxpc3Qgb2YgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAxLCAyMDAzLTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHVuaXN0ZC5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJnZXR0ZXh0UC5oIgorLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorLSNlbHNlCistIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCistI2VuZGlmCistCistLyogSGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKKy0jIGRlZmluZSBnbF9yd2xvY2tfcmRsb2NrIF9fbGliY19yd2xvY2tfcmRsb2NrCistIyBkZWZpbmUgZ2xfcndsb2NrX3dybG9jayBfX2xpYmNfcndsb2NrX3dybG9jaworLSMgZGVmaW5lIGdsX3J3bG9ja191bmxvY2sgX19saWJjX3J3bG9ja191bmxvY2sKKy0jZWxzZQorLSMgaW5jbHVkZSAibG9jay5oIgorLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0vKiBMaXN0IG9mIGFscmVhZHkgbG9hZGVkIGRvbWFpbnMuICAqLworLXN0YXRpYyBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfbmxfbG9hZGVkX2RvbWFpbnM7CistCistCistLyogUmV0dXJuIGEgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIGRlc2NyaWJlZCBieQorLSAgIHRoZSBET01BSU5OQU1FIGFuZCBDQVRFR09SWSBwYXJhbWV0ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudGx5CistICAgZXN0YWJsaXNoZWQgYmluZGluZ3MuICAqLworLXN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLWludGVybmFsX2Z1bmN0aW9uCistX25sX2ZpbmRfZG9tYWluIChjb25zdCBjaGFyICpkaXJuYW1lLCBjaGFyICpsb2NhbGUsCistCQkgY29uc3QgY2hhciAqZG9tYWlubmFtZSwgc3RydWN0IGJpbmRpbmcgKmRvbWFpbmJpbmRpbmcpCisteworLSAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqcmV0dmFsOworLSAgY29uc3QgY2hhciAqbGFuZ3VhZ2U7CistICBjb25zdCBjaGFyICptb2RpZmllcjsKKy0gIGNvbnN0IGNoYXIgKnRlcnJpdG9yeTsKKy0gIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CistICBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQ7CistICBjb25zdCBjaGFyICphbGlhc192YWx1ZTsKKy0gIGludCBtYXNrOworLQorLSAgLyogTE9DQUxFIGNhbiBjb25zaXN0IG9mIHVwIHRvIGZvdXIgcmVjb2duaXplZCBwYXJ0cyBmb3IgdGhlIFhQRyBzeW50YXg6CistCistCQlsYW5ndWFnZVtfdGVycml0b3J5XVsuY29kZXNldF1bQG1vZGlmaWVyXQorLQorLSAgICAgQmVzaWRlIHRoZSBmaXJzdCBwYXJ0IGFsbCBvZiB0aGVtIGFyZSBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuICBJZgorLSAgICAgdGhlIGZ1bGwgc3BlY2lmaWVkIGxvY2FsZSBpcyBub3QgZm91bmQsIHRoZSBsZXNzIHNwZWNpZmljIG9uZSBhcmUKKy0gICAgIGxvb2tlZCBmb3IuICBUaGUgdmFyaW91cyBwYXJ0cyB3aWxsIGJlIHN0cmlwcGVkIG9mZiBhY2NvcmRpbmcgdG8KKy0gICAgIHRoZSBmb2xsb3dpbmcgb3JkZXI6CistCQkoMSkgY29kZXNldAorLQkJKDIpIG5vcm1hbGl6ZWQgY29kZXNldAorLQkJKDMpIHRlcnJpdG9yeQorLQkJKDQpIG1vZGlmaWVyCistICAgKi8KKy0KKy0gIC8qIFdlIG5lZWQgdG8gcHJvdGVjdCBtb2RpZnlpbmcgdGhlIF9OTF9MT0FERURfRE9NQUlOUyBkYXRhLiAgKi8KKy0gIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jayk7CistICBnbF9yd2xvY2tfcmRsb2NrIChsb2NrKTsKKy0KKy0gIC8qIElmIHdlIGhhdmUgYWxyZWFkeSB0ZXN0ZWQgZm9yIHRoaXMgbG9jYWxlIGVudHJ5IHRoZXJlIGhhcyB0bworLSAgICAgYmUgb25lIGRhdGEgc2V0IGluIHRoZSBsaXN0IG9mIGxvYWRlZCBkb21haW5zLiAgKi8KKy0gIHJldHZhbCA9IF9ubF9tYWtlX2wxMG5mbGlzdCAoJl9ubF9sb2FkZWRfZG9tYWlucywgZGlybmFtZSwKKy0JCQkgICAgICAgc3RybGVuIChkaXJuYW1lKSArIDEsIDAsIGxvY2FsZSwgTlVMTCwgTlVMTCwKKy0JCQkgICAgICAgTlVMTCwgTlVMTCwgZG9tYWlubmFtZSwgMCk7CistCistICBnbF9yd2xvY2tfdW5sb2NrIChsb2NrKTsKKy0KKy0gIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIC8qIFdlIGtub3cgc29tZXRoaW5nIGFib3V0IHRoaXMgbG9jYWxlLiAgKi8KKy0gICAgICBpbnQgY250OworLQorLSAgICAgIGlmIChyZXR2YWwtPmRlY2lkZWQgPD0gMCkKKy0JX25sX2xvYWRfZG9tYWluIChyZXR2YWwsIGRvbWFpbmJpbmRpbmcpOworLQorLSAgICAgIGlmIChyZXR2YWwtPmRhdGEgIT0gTlVMTCkKKy0JcmV0dXJuIHJldHZhbDsKKy0KKy0gICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCistCXsKKy0JICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA8PSAwKQorLQkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLCBkb21haW5iaW5kaW5nKTsKKy0KKy0JICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGF0YSAhPSBOVUxMKQorLQkgICAgYnJlYWs7CistCX0KKy0KKy0gICAgICByZXR1cm4gcmV0dmFsOworLSAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKy0gICAgfQorLQorLSAgLyogU2VlIHdoZXRoZXIgdGhlIGxvY2FsZSB2YWx1ZSBpcyBhbiBhbGlhcy4gIElmIHllcyBpdHMgdmFsdWUKKy0gICAgICpvdmVyd3JpdGVzKiB0aGUgYWxpYXMgbmFtZS4gIE5vIHRlc3QgZm9yIHRoZSBvcmlnaW5hbCB2YWx1ZSBpcworLSAgICAgZG9uZS4gICovCistICBhbGlhc192YWx1ZSA9IF9ubF9leHBhbmRfYWxpYXMgKGxvY2FsZSk7CistICBpZiAoYWxpYXNfdmFsdWUgIT0gTlVMTCkKKy0gICAgeworLSNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKy0gICAgICBsb2NhbGUgPSBzdHJkdXAgKGFsaWFzX3ZhbHVlKTsKKy0gICAgICBpZiAobG9jYWxlID09IE5VTEwpCistCXJldHVybiBOVUxMOworLSNlbHNlCistICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoYWxpYXNfdmFsdWUpICsgMTsKKy0gICAgICBsb2NhbGUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKy0KKy0gICAgICBtZW1jcHkgKGxvY2FsZSwgYWxpYXNfdmFsdWUsIGxlbik7CistI2VuZGlmCistICAgIH0KKy0KKy0gIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorLSAgICAgbG9vayBmb3IgdGhlIGxhbmd1YWdlLiAgVGVybWluYXRpb24gc3ltYm9scyBhcmUgYF8nLCAnLicsIGFuZCBgQCcuICAqLworLSAgbWFzayA9IF9ubF9leHBsb2RlX25hbWUgKGxvY2FsZSwgJmxhbmd1YWdlLCAmbW9kaWZpZXIsICZ0ZXJyaXRvcnksCistCQkJICAgJmNvZGVzZXQsICZub3JtYWxpemVkX2NvZGVzZXQpOworLSAgaWYgKG1hc2sgPT0gLTEpCistICAgIC8qIFRoaXMgbWVhbnMgd2UgYXJlIG91dCBvZiBjb3JlLiAgKi8KKy0gICAgcmV0dXJuIE5VTEw7CistCistICAvKiBXZSBuZWVkIHRvIHByb3RlY3QgbW9kaWZ5aW5nIHRoZSBfTkxfTE9BREVEX0RPTUFJTlMgZGF0YS4gICovCistICBnbF9yd2xvY2tfd3Jsb2NrIChsb2NrKTsKKy0KKy0gIC8qIENyZWF0ZSBhbGwgcG9zc2libGUgbG9jYWxlIGVudHJpZXMgd2hpY2ggbWlnaHQgYmUgaW50ZXJlc3RlZCBpbgorLSAgICAgZ2VuZXJhbGl6YXRpb24uICAqLworLSAgcmV0dmFsID0gX25sX21ha2VfbDEwbmZsaXN0ICgmX25sX2xvYWRlZF9kb21haW5zLCBkaXJuYW1lLAorLQkJCSAgICAgICBzdHJsZW4gKGRpcm5hbWUpICsgMSwgbWFzaywgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwKKy0JCQkgICAgICAgY29kZXNldCwgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwKKy0JCQkgICAgICAgZG9tYWlubmFtZSwgMSk7CistCistICBnbF9yd2xvY2tfdW5sb2NrIChsb2NrKTsKKy0KKy0gIGlmIChyZXR2YWwgPT0gTlVMTCkKKy0gICAgLyogVGhpcyBtZWFucyB3ZSBhcmUgb3V0IG9mIGNvcmUuICAqLworLSAgICBnb3RvIG91dDsKKy0KKy0gIGlmIChyZXR2YWwtPmRlY2lkZWQgPD0gMCkKKy0gICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwsIGRvbWFpbmJpbmRpbmcpOworLSAgaWYgKHJldHZhbC0+ZGF0YSA9PSBOVUxMKQorLSAgICB7CistICAgICAgaW50IGNudDsKKy0gICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCistCXsKKy0JICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA8PSAwKQorLQkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLCBkb21haW5iaW5kaW5nKTsKKy0JICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGF0YSAhPSBOVUxMKQorLQkgICAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgLyogVGhlIHJvb20gZm9yIGFuIGFsaWFzIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICBGcmVlIGl0IG5vdy4gICovCistICBpZiAoYWxpYXNfdmFsdWUgIT0gTlVMTCkKKy0gICAgZnJlZSAobG9jYWxlKTsKKy0KKy1vdXQ6CistICAvKiBUaGUgc3BhY2UgZm9yIG5vcm1hbGl6ZWRfY29kZXNldCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICBGcmVlIGl0LiAgKi8KKy0gIGlmIChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkKKy0gICAgZnJlZSAoKHZvaWQgKikgbm9ybWFsaXplZF9jb2Rlc2V0KTsKKy0KKy0gIHJldHVybiByZXR2YWw7CistfQorLQorLQorLSNpZmRlZiBfTElCQworLS8qIFRoaXMgaXMgY2FsbGVkIGZyb20gaWNvbnYvZ2NvbnZfZGIuYydzIGZyZWVfbWVtLCBhcyBsb2NhbGVzIG11c3QKKy0gICBiZSBmcmVlZCBiZWZvcmUgZnJlZWluZyBnY29udiBzdGVwcyBhcnJheXMuICAqLworLXZvaWQgX19saWJjX2ZyZWVyZXNfZm5fc2VjdGlvbgorLV9ubF9maW5kZG9tYWluX3N1YmZyZWVyZXMgKCkKKy17CistICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpydW5wID0gX25sX2xvYWRlZF9kb21haW5zOworLQorLSAgd2hpbGUgKHJ1bnAgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmhlcmUgPSBydW5wOworLSAgICAgIGlmIChydW5wLT5kYXRhICE9IE5VTEwpCistCV9ubF91bmxvYWRfZG9tYWluICgoc3RydWN0IGxvYWRlZF9kb21haW4gKikgcnVucC0+ZGF0YSk7CistICAgICAgcnVucCA9IHJ1bnAtPm5leHQ7CistICAgICAgZnJlZSAoKGNoYXIgKikgaGVyZS0+ZmlsZW5hbWUpOworLSAgICAgIGZyZWUgKGhlcmUpOworLSAgICB9CistfQorLSNlbmRpZgorLS0tIGEvaW50bC9nZXR0ZXh0LmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDYzICswLDAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0KDMpIGZ1bmN0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpZmRlZiBfTElCQworLSMgZGVmaW5lIF9fbmVlZF9OVUxMCistIyBpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGxpYmludGwuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSAibGliZ251aW50bC5oIgorLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0vKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCistICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorLSAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworLSAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgR0VUVEVYVCBfX2dldHRleHQKKy0jIGRlZmluZSBEQ0dFVFRFWFQgSU5UVVNFKF9fZGNnZXR0ZXh0KQorLSNlbHNlCistIyBkZWZpbmUgR0VUVEVYVCBsaWJpbnRsX2dldHRleHQKKy0jIGRlZmluZSBEQ0dFVFRFWFQgbGliaW50bF9kY2dldHRleHQKKy0jZW5kaWYKKy0KKy0vKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorLSAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CistICAgdGV4dCkuICAqLworLWNoYXIgKgorLUdFVFRFWFQgKGNvbnN0IGNoYXIgKm1zZ2lkKQorLXsKKy0gIHJldHVybiBEQ0dFVFRFWFQgKE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUyk7CistfQorLQorLSNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworLXdlYWtfYWxpYXMgKF9fZ2V0dGV4dCwgZ2V0dGV4dCk7CistI2VuZGlmCistLS0gYS9pbnRsL2dldHRleHRQLmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDI5NyArMCwwIEBACistLyogSGVhZGVyIGRlc2NyaWJpbmcgaW50ZXJuYWxzIG9mIGxpYmludGwgbGlicmFyeS4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9HRVRURVhUUF9ICistI2RlZmluZSBfR0VUVEVYVFBfSAorLQorLSNpbmNsdWRlIDxzdGRkZWYuaD4JCS8qIEdldCBzaXplX3QuICAqLworLQorLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSAiLi4vaWNvbnYvZ2NvbnZfaW50LmgiCistI2Vsc2UKKy0jIGlmIEhBVkVfSUNPTlYKKy0jICBpbmNsdWRlIDxpY29udi5oPgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBIYW5kbGUgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CistIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZQorLSNlbHNlCistIyBpbmNsdWRlICJsb2NrLmgiCistI2VuZGlmCistCistI2lmZGVmIF9MSUJDCistZXh0ZXJuIGNoYXIgKl9fZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCk7CistZXh0ZXJuIGNoYXIgKl9fZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCk7CistZXh0ZXJuIGNoYXIgKl9fZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCistCQkJICBpbnQgX19jYXRlZ29yeSk7CistZXh0ZXJuIGNoYXIgKl9fbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKy0JCQkgdW5zaWduZWQgbG9uZyBpbnQgX19uKTsKKy1leHRlcm4gY2hhciAqX19kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKy0JCQkgIHVuc2lnbmVkIGxvbmcgaW50IG4pOworLWV4dGVybiBjaGFyICpfX2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkgICBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCistCQkJICAgdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSk7CistZXh0ZXJuIGNoYXIgKl9fZGNpZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCSAgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKy0JCQkgICBpbnQgX19wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwKKy0JCQkgICBpbnQgX19jYXRlZ29yeSk7CistZXh0ZXJuIGNoYXIgKl9fdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKTsKKy1leHRlcm4gY2hhciAqX19iaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCSAgICAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpOworLWV4dGVybiBjaGFyICpfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCQljb25zdCBjaGFyICpfX2NvZGVzZXQpOworLWV4dGVybiB2b2lkIF9ubF9maW5kZG9tYWluX3N1YmZyZWVyZXMgKHZvaWQpIGF0dHJpYnV0ZV9oaWRkZW47CistZXh0ZXJuIHZvaWQgX25sX3VubG9hZF9kb21haW4gKHN0cnVjdCBsb2FkZWRfZG9tYWluICpfX2RvbWFpbikKKy0gICAgIGludGVybmFsX2Z1bmN0aW9uIGF0dHJpYnV0ZV9oaWRkZW47CistI2Vsc2UKKy0vKiBEZWNsYXJlIHRoZSBleHBvcnRlZCBsaWJpbnRsXyogZnVuY3Rpb25zLCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0bworLSAgIGNhbGwgdGhlbSB1bmRlciB0aGVpciByZWFsIG5hbWUuICAqLworLSMgdW5kZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCistIyB1bmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKy0jIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKy0jIGluY2x1ZGUgImxpYmdudWludGwuaCIKKy0jIGlmZGVmIElOX0xJQkdMT0NBTEUKKy1leHRlcm4gY2hhciAqZ2xfZGNpZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCSAgICBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCistCQkJICAgIGludCBfX3BsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAorLQkJCSAgICBpbnQgX19jYXRlZ29yeSwKKy0JCQkgICAgY29uc3QgY2hhciAqX19sb2NhbGVuYW1lLCBjb25zdCBjaGFyICpfX2VuY29kaW5nKTsKKy0jIGVsc2UKKy1leHRlcm4gY2hhciAqbGliaW50bF9kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCistCQkJCSBpbnQgX19wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwKKy0JCQkJIGludCBfX2NhdGVnb3J5KTsKKy0jIGVuZGlmCistI2VuZGlmCistCistI2luY2x1ZGUgImxvYWRpbmZvLmgiCistCistI2luY2x1ZGUgImdtby5oIgkJLyogR2V0IG5sc191aW50MzIuICAqLworLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0jaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCistIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKy0jZW5kaWYKKy0KKy0jaWZuZGVmIGF0dHJpYnV0ZV9oaWRkZW4KKy0jIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCistI2VuZGlmCistCistLyogVGVsbCB0aGUgY29tcGlsZXIgd2hlbiBhIGNvbmRpdGlvbmFsIG9yIGludGVnZXIgZXhwcmVzc2lvbiBpcworLSAgIGFsbW9zdCBhbHdheXMgdHJ1ZSBvciBhbG1vc3QgYWx3YXlzIGZhbHNlLiAgKi8KKy0jaWZuZGVmIEhBVkVfQlVJTFRJTl9FWFBFQ1QKKy0jIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGV4cHIsIHZhbCkgKGV4cHIpCistI2VuZGlmCistCistI2lmbmRlZiBXCistIyBkZWZpbmUgVyhmbGFnLCBkYXRhKSAoKGZsYWcpID8gU1dBUCAoZGF0YSkgOiAoZGF0YSkpCistI2VuZGlmCistCistCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxieXRlc3dhcC5oPgorLSMgZGVmaW5lIFNXQVAoaSkgYnN3YXBfMzIgKGkpCistI2Vsc2UKKy1zdGF0aWMgaW5saW5lIG5sc191aW50MzIKKy0jIGlmZGVmIF9fY3BsdXNwbHVzCistU1dBUCAobmxzX3VpbnQzMiBpKQorLSMgZWxzZQorLVNXQVAgKGkpCistICAgICBubHNfdWludDMyIGk7CistIyBlbmRpZgorLXsKKy0gIHJldHVybiAoaSA8PCAyNCkgfCAoKGkgJiAweGZmMDApIDw8IDgpIHwgKChpID4+IDgpICYgMHhmZjAwKSB8IChpID4+IDI0KTsKKy19CistI2VuZGlmCistCistCistLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKy1zdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjCisteworLSAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKy0gIHNpemVfdCBsZW5ndGg7CistICAvKiBQb2ludGVyIHRvIGFkZHJlc3NlZCBzdHJpbmcuICAqLworLSAgY29uc3QgY2hhciAqcG9pbnRlcjsKKy19OworLQorLS8qIENhY2hlIG9mIHRyYW5zbGF0ZWQgc3RyaW5ncyBhZnRlciBjaGFyc2V0IGNvbnZlcnNpb24uCistICAgTm90ZTogVGhlIHN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byB0aGUgdGFyZ2V0IGVuY29kaW5nIG9ubHkgb24gYW4gYXMtbmVlZGVkCistICAgYmFzaXMuICAqLworLXN0cnVjdCBjb252ZXJ0ZWRfZG9tYWluCisteworLSAgLyogVGhlIHRhcmdldCBlbmNvZGluZyBuYW1lLiAgKi8KKy0gIGNvbnN0IGNoYXIgKmVuY29kaW5nOworLSAgLyogVGhlIGRlc2NyaXB0b3IgZm9yIGNvbnZlcnNpb24gZnJvbSB0aGUgbWVzc2FnZSBjYXRhbG9nJ3MgZW5jb2RpbmcgdG8KKy0gICAgIHRoaXMgdGFyZ2V0IGVuY29kaW5nLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0gIF9fZ2NvbnZfdCBjb252OworLSNlbHNlCistIyBpZiBIQVZFX0lDT05WCistICBpY29udl90IGNvbnY7CistIyBlbmRpZgorLSNlbmRpZgorLSAgLyogVGhlIHRhYmxlIG9mIHRyYW5zbGF0ZWQgc3RyaW5ncyBhZnRlciBjaGFyc2V0IGNvbnZlcnNpb24uICAqLworLSAgY2hhciAqKmNvbnZfdGFiOworLX07CistCistLyogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuICAqLworLXN0cnVjdCBsb2FkZWRfZG9tYWluCisteworLSAgLyogUG9pbnRlciB0byBtZW1vcnkgY29udGFpbmluZyB0aGUgLm1vIGZpbGUuICAqLworLSAgY29uc3QgY2hhciAqZGF0YTsKKy0gIC8qIDEgaWYgdGhlIG1lbW9yeSBpcyBtbWFwKCllZCwgMCBpZiB0aGUgbWVtb3J5IGlzIG1hbGxvYygpZWQuICAqLworLSAgaW50IHVzZV9tbWFwOworLSAgLyogU2l6ZSBvZiBtbWFwKCllZCBtZW1vcnkuICAqLworLSAgc2l6ZV90IG1tYXBfc2l6ZTsKKy0gIC8qIDEgaWYgdGhlIC5tbyBmaWxlIHVzZXMgYSBkaWZmZXJlbnQgZW5kaWFubmVzcyB0aGFuIHRoaXMgbWFjaGluZS4gICovCistICBpbnQgbXVzdF9zd2FwOworLSAgLyogUG9pbnRlciB0byBhZGRpdGlvbmFsIG1hbGxvYygpZWQgbWVtb3J5LiAgKi8KKy0gIHZvaWQgKm1hbGxvY2VkOworLQorLSAgLyogTnVtYmVyIG9mIHN0YXRpYyBzdHJpbmdzIHBhaXJzLiAgKi8KKy0gIG5sc191aW50MzIgbnN0cmluZ3M7CistICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIG9yaWdpbmFsIHN0cmluZ3MgaW4gdGhlIGZpbGUuICAqLworLSAgY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICpvcmlnX3RhYjsKKy0gIC8qIFBvaW50ZXIgdG8gZGVzY3JpcHRvcnMgb2YgdHJhbnNsYXRlZCBzdHJpbmdzIGluIHRoZSBmaWxlLiAgKi8KKy0gIGNvbnN0IHN0cnVjdCBzdHJpbmdfZGVzYyAqdHJhbnNfdGFiOworLQorLSAgLyogTnVtYmVyIG9mIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5ncyBwYWlycy4gICovCistICBubHNfdWludDMyIG5fc3lzZGVwX3N0cmluZ3M7CistICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIG9yaWdpbmFsIHN5c2RlcCBzdHJpbmdzLiAgKi8KKy0gIGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKm9yaWdfc3lzZGVwX3RhYjsKKy0gIC8qIFBvaW50ZXIgdG8gZGVzY3JpcHRvcnMgb2YgdHJhbnNsYXRlZCBzeXNkZXAgc3RyaW5ncy4gICovCistICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICp0cmFuc19zeXNkZXBfdGFiOworLQorLSAgLyogU2l6ZSBvZiBoYXNoIHRhYmxlLiAgKi8KKy0gIG5sc191aW50MzIgaGFzaF9zaXplOworLSAgLyogUG9pbnRlciB0byBoYXNoIHRhYmxlLiAgKi8KKy0gIGNvbnN0IG5sc191aW50MzIgKmhhc2hfdGFiOworLSAgLyogMSBpZiB0aGUgaGFzaCB0YWJsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworLSAgaW50IG11c3Rfc3dhcF9oYXNoX3RhYjsKKy0KKy0gIC8qIENhY2hlIG9mIGNoYXJzZXQgY29udmVyc2lvbnMgb2YgdGhlIHRyYW5zbGF0ZWQgc3RyaW5ncy4gICovCistICBzdHJ1Y3QgY29udmVydGVkX2RvbWFpbiAqY29udmVyc2lvbnM7CistICBzaXplX3QgbmNvbnZlcnNpb25zOworLSAgZ2xfcndsb2NrX2RlZmluZSAoLCBjb252ZXJzaW9uc19sb2NrKQorLQorLSAgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gKnBsdXJhbDsKKy0gIHVuc2lnbmVkIGxvbmcgaW50IG5wbHVyYWxzOworLX07CistCistLyogV2Ugd2FudCB0byBhbGxvY2F0ZSBhIHN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3QuICBCdXQgSVNPIEMKKy0gICBkb2Vzbid0IGFsbG93IHplcm8gc2l6ZWQgYXJyYXlzLiAgKi8KKy0jaWZkZWYgX19HTlVDX18KKy0jIGRlZmluZSBaRVJPIDAKKy0jZWxzZQorLSMgZGVmaW5lIFpFUk8gMQorLSNlbmRpZgorLQorLS8qIEEgc2V0IG9mIHNldHRpbmdzIGJvdW5kIHRvIGEgbWVzc2FnZSBkb21haW4uICBVc2VkIHRvIHN0b3JlIHNldHRpbmdzCistICAgZnJvbSBiaW5kdGV4dGRvbWFpbigpIGFuZCBiaW5kX3RleHRkb21haW5fY29kZXNldCgpLiAgKi8KKy1zdHJ1Y3QgYmluZGluZworLXsKKy0gIHN0cnVjdCBiaW5kaW5nICpuZXh0OworLSAgY2hhciAqZGlybmFtZTsKKy0gIGNoYXIgKmNvZGVzZXQ7CistICBjaGFyIGRvbWFpbm5hbWVbWkVST107CistfTsKKy0KKy0vKiBBIGNvdW50ZXIgd2hpY2ggaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHNvbWUgcHJldmlvdXMgdHJhbnNsYXRpb25zCistICAgYmVjb21lIGludmFsaWQuCistICAgVGhpcyB2YXJpYWJsZSBpcyBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBQkkgb2YgdGhlIEdOVSBsaWJpbnRsLiAgKi8KKy0jaWZkZWYgSU5fTElCR0xPQ0FMRQorLSMgaW5jbHVkZSA8Z2xvY2FsZS9jb25maWcuaD4KKy1leHRlcm4gTElCR0xPQ0FMRV9ETExfRVhQT1JURUQgaW50IF9ubF9tc2dfY2F0X2NudHI7CistI2Vsc2UKKy1leHRlcm4gTElCSU5UTF9ETExfRVhQT1JURUQgaW50IF9ubF9tc2dfY2F0X2NudHI7CistI2VuZGlmCistCistI2lmbmRlZiBfTElCQworLWV4dGVybiBjb25zdCBjaGFyICpfbmxfbGFuZ3VhZ2VfcHJlZmVyZW5jZXNfZGVmYXVsdCAodm9pZCk7CistIyBkZWZpbmUgZ2xfbG9jYWxlX25hbWVfY2Fub25pY2FsaXplIF9ubF9sb2NhbGVfbmFtZV9jYW5vbmljYWxpemUKKy1leHRlcm4gdm9pZCBfbmxfbG9jYWxlX25hbWVfY2Fub25pY2FsaXplIChjaGFyICpuYW1lKTsKKy0jIGRlZmluZSBnbF9sb2NhbGVfbmFtZV9wb3NpeCBfbmxfbG9jYWxlX25hbWVfcG9zaXgKKy1leHRlcm4gY29uc3QgY2hhciAqX25sX2xvY2FsZV9uYW1lX3Bvc2l4IChpbnQgY2F0ZWdvcnksCistCQkJCQkgIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSk7CistIyBkZWZpbmUgZ2xfbG9jYWxlX25hbWVfZGVmYXVsdCBfbmxfbG9jYWxlX25hbWVfZGVmYXVsdAorLWV4dGVybiBjb25zdCBjaGFyICpfbmxfbG9jYWxlX25hbWVfZGVmYXVsdCAodm9pZCk7CistIyBkZWZpbmUgZ2xfbG9jYWxlX25hbWUgX25sX2xvY2FsZV9uYW1lCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpOworLSNlbmRpZgorLQorLXN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9ubF9maW5kX2RvbWFpbiAoY29uc3QgY2hhciAqX19kaXJuYW1lLCBjaGFyICpfX2xvY2FsZSwKKy0JCQkJCSBjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCQkgc3RydWN0IGJpbmRpbmcgKl9fZG9tYWluYmluZGluZykKKy0gICAgIGludGVybmFsX2Z1bmN0aW9uOworLXZvaWQgX25sX2xvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfX2RvbWFpbiwKKy0JCSAgICAgIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCistICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKy0KKy0jaWZkZWYgSU5fTElCR0xPQ0FMRQorLWNoYXIgKl9ubF9maW5kX21zZyAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCistCQkgICAgc3RydWN0IGJpbmRpbmcgKmRvbWFpbmJpbmRpbmcsIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorLQkJICAgIGNvbnN0IGNoYXIgKm1zZ2lkLAorLQkJICAgIHNpemVfdCAqbGVuZ3RocCkKKy0gICAgIGludGVybmFsX2Z1bmN0aW9uOworLSNlbHNlCistY2hhciAqX25sX2ZpbmRfbXNnIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKy0JCSAgICBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZywgY29uc3QgY2hhciAqbXNnaWQsCistCQkgICAgaW50IGNvbnZlcnQsIHNpemVfdCAqbGVuZ3RocCkKKy0gICAgIGludGVybmFsX2Z1bmN0aW9uOworLSNlbmRpZgorLQorLS8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKy0gICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworLSAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworLSNpZiAhZGVmaW5lZCBfTElCQworLSMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKy0jIGRlZmluZSBfbmxfZG9tYWluX2JpbmRpbmdzIGxpYmludGxfbmxfZG9tYWluX2JpbmRpbmdzCistI2VuZGlmCistCistLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworLWV4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXTsKKy0jaWZkZWYgX0xJQkMKKy1saWJjX2hpZGRlbl9wcm90byAoX25sX2RlZmF1bHRfZGlybmFtZSkKKy0jZW5kaWYKKy0KKy0vKiBMaXN0IHdpdGggYmluZGluZ3Mgb2Ygc3BlY2lmaWMgZG9tYWlucy4gICovCistZXh0ZXJuIHN0cnVjdCBiaW5kaW5nICpfbmxfZG9tYWluX2JpbmRpbmdzOworLQorLS8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKy0gICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworLSAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworLSNpZiAhZGVmaW5lZCBfTElCQworLSMgZGVmaW5lIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbgorLSMgZGVmaW5lIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbgorLSNlbmRpZgorLQorLS8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgdGV4dCBkb21haW4uICAqLworLWV4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluW10gYXR0cmlidXRlX2hpZGRlbjsKKy0KKy0vKiBEZWZhdWx0IHRleHQgZG9tYWluIGluIHdoaWNoIGVudHJpZXMgZm9yIGdldHRleHQoMykgYXJlIHRvIGJlIGZvdW5kLiAgKi8KKy1leHRlcm4gY29uc3QgY2hhciAqX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gYXR0cmlidXRlX2hpZGRlbjsKKy0KKy0vKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKy0KKy0jZW5kaWYgLyogZ2V0dGV4dFAuaCAgKi8KKy0tLSBhL2ludGwvZ21vLmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDE1MiArMCwwIEBACistLyogRGVzY3JpcHRpb24gb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQ6IGdlbmVyYWwgZmlsZSBsYXlvdXQuCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCAyMDAwLTIwMDIsIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9HRVRURVhUX0gKKy0jZGVmaW5lIF9HRVRURVhUX0ggMQorLQorLSNpbmNsdWRlIDxsaW1pdHMuaD4KKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogVGhlIG1hZ2ljIG51bWJlciBvZiB0aGUgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQuICAqLworLSNkZWZpbmUgX01BR0lDIDB4OTUwNDEyZGUKKy0jZGVmaW5lIF9NQUdJQ19TV0FQUEVEIDB4ZGUxMjA0OTUKKy0KKy0vKiBSZXZpc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIC5tbyAoYmluYXJ5KSBmaWxlIGZvcm1hdC4gICovCistI2RlZmluZSBNT19SRVZJU0lPTl9OVU1CRVIgMAorLSNkZWZpbmUgTU9fUkVWSVNJT05fTlVNQkVSX1dJVEhfU1lTREVQX0kgMQorLQorLS8qIFRoZSBmb2xsb3dpbmcgY29udG9ydGlvbnMgYXJlIGFuIGF0dGVtcHQgdG8gdXNlIHRoZSBDIHByZXByb2Nlc3NvcgorLSAgIHRvIGRldGVybWluZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgaXMgMzIgYml0cyB3aWRlLiAgQW4KKy0gICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorLSAgIGFzIG9mIHZlcnNpb24gYXV0b2NvbmYtMi4xMywgdGhlIEFDX0NIRUNLX1NJWkVPRiBtYWNybyBkb2Vzbid0IHdvcmsKKy0gICB3aGVuIGNyb3NzLWNvbXBpbGluZy4gICovCistCistI2lmIF9fU1REQ19fCistIyBkZWZpbmUgVUlOVF9NQVhfMzJfQklUUyA0Mjk0OTY3Mjk1VQorLSNlbHNlCistIyBkZWZpbmUgVUlOVF9NQVhfMzJfQklUUyAweEZGRkZGRkZGCistI2VuZGlmCistCistLyogSWYgVUlOVF9NQVggaXNuJ3QgZGVmaW5lZCwgYXNzdW1lIGl0J3MgYSAzMi1iaXQgdHlwZS4KKy0gICBUaGlzIHNob3VsZCBiZSB2YWxpZCBmb3IgYWxsIHN5c3RlbXMgR05VIGNhcmVzIGFib3V0IGJlY2F1c2UKKy0gICB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAxNi1iaXQgc3lzdGVtcywgYW5kIG9ubHkgbW9kZXJuIHN5c3RlbXMKKy0gICAodGhhdCBjZXJ0YWlubHkgaGF2ZSA8bGltaXRzLmg+KSBoYXZlIDY0Ky1iaXQgaW50ZWdyYWwgdHlwZXMuICAqLworLQorLSNpZm5kZWYgVUlOVF9NQVgKKy0jIGRlZmluZSBVSU5UX01BWCBVSU5UX01BWF8zMl9CSVRTCistI2VuZGlmCistCistI2lmIFVJTlRfTUFYID09IFVJTlRfTUFYXzMyX0JJVFMKKy10eXBlZGVmIHVuc2lnbmVkIG5sc191aW50MzI7CistI2Vsc2UKKy0jIGlmIFVTSFJUX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCistdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBubHNfdWludDMyOworLSMgZWxzZQorLSMgIGlmIFVMT05HX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCistdHlwZWRlZiB1bnNpZ25lZCBsb25nIG5sc191aW50MzI7CistIyAgZWxzZQorLSAgLyogVGhlIGZvbGxvd2luZyBsaW5lIGlzIGludGVuZGVkIHRvIHRocm93IGFuIGVycm9yLiAgVXNpbmcgI2Vycm9yIGlzCistICAgICBub3QgcG9ydGFibGUgZW5vdWdoLiAgKi8KKy0gICJDYW5ub3QgZGV0ZXJtaW5lIHVuc2lnbmVkIDMyLWJpdCBkYXRhIHR5cGUuIgorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLQorLS8qIEhlYWRlciBmb3IgYmluYXJ5IC5tbyBmaWxlIGZvcm1hdC4gICovCistc3RydWN0IG1vX2ZpbGVfaGVhZGVyCisteworLSAgLyogVGhlIG1hZ2ljIG51bWJlci4gICovCistICBubHNfdWludDMyIG1hZ2ljOworLSAgLyogVGhlIHJldmlzaW9uIG51bWJlciBvZiB0aGUgZmlsZSBmb3JtYXQuICAqLworLSAgbmxzX3VpbnQzMiByZXZpc2lvbjsKKy0KKy0gIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgdXNlZCBpbiAubW8gZmlsZXMgd2l0aCBtYWpvciByZXZpc2lvbiAwIG9yIDEuICAqLworLQorLSAgLyogVGhlIG51bWJlciBvZiBzdHJpbmdzIHBhaXJzLiAgKi8KKy0gIG5sc191aW50MzIgbnN0cmluZ3M7CistICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIG9yaWdpbmFsIHN0cmluZ3MuICAqLworLSAgbmxzX3VpbnQzMiBvcmlnX3RhYl9vZmZzZXQ7CistICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIHRyYW5zbGF0ZWQgc3RyaW5ncy4gICovCistICBubHNfdWludDMyIHRyYW5zX3RhYl9vZmZzZXQ7CistICAvKiBTaXplIG9mIGhhc2ggdGFibGUuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9zaXplOworLSAgLyogT2Zmc2V0IG9mIGZpcnN0IGhhc2ggdGFibGUgZW50cnkuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9vZmZzZXQ7CistCistICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWlub3IgcmV2aXNpb24gPj0gMS4gICovCistCistICAvKiBUaGUgbnVtYmVyIG9mIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuICAqLworLSAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSBkZXNjcmliaW5nIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuICAqLworLSAgbmxzX3VpbnQzMiBzeXNkZXBfc2VnbWVudHNfb2Zmc2V0OworLSAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgcGFpcnMuICAqLworLSAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworLSAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiBvcmlnaW5hbCBzeXNkZXAgc3RyaW5ncy4gICovCistICBubHNfdWludDMyIG9yaWdfc3lzZGVwX3RhYl9vZmZzZXQ7CistICAvKiBPZmZzZXQgb2YgdGFibGUgd2l0aCBzdGFydCBvZmZzZXRzIG9mIHRyYW5zbGF0ZWQgc3lzZGVwIHN0cmluZ3MuICAqLworLSAgbmxzX3VpbnQzMiB0cmFuc19zeXNkZXBfdGFiX29mZnNldDsKKy19OworLQorLS8qIERlc2NyaXB0b3IgZm9yIHN0YXRpYyBzdHJpbmcgY29udGFpbmVkIGluIHRoZSBiaW5hcnkgLm1vIGZpbGUuICAqLworLXN0cnVjdCBzdHJpbmdfZGVzYworLXsKKy0gIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICAqLworLSAgbmxzX3VpbnQzMiBsZW5ndGg7CistICAvKiBPZmZzZXQgb2Ygc3RyaW5nIGluIGZpbGUuICAqLworLSAgbmxzX3VpbnQzMiBvZmZzZXQ7CistfTsKKy0KKy0vKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWlub3IgcmV2aXNpb24gPj0gMS4gICovCistCistLyogRGVzY3JpcHRvciBmb3Igc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcgc2VnbWVudC4gICovCistc3RydWN0IHN5c2RlcF9zZWdtZW50CisteworLSAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKy0gIG5sc191aW50MzIgbGVuZ3RoOworLSAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKy0gIG5sc191aW50MzIgb2Zmc2V0OworLX07CistCistLyogUGFpciBvZiBhIHN0YXRpYyBhbmQgYSBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnQsIGluIHN0cnVjdCBzeXNkZXBfc3RyaW5nLiAgKi8KKy1zdHJ1Y3Qgc2VnbWVudF9wYWlyCisteworLSAgLyogU2l6ZSBvZiBzdGF0aWMgc2VnbWVudC4gICovCistICBubHNfdWludDMyIHNlZ3NpemU7CistICAvKiBSZWZlcmVuY2UgdG8gc3lzdGVtIGRlcGVuZGVudCBzdHJpbmcgc2VnbWVudCwgb3IgfjAgYXQgdGhlIGVuZC4gICovCistICBubHNfdWludDMyIHN5c2RlcHJlZjsKKy19OworLQorLS8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKy1zdHJ1Y3Qgc3lzZGVwX3N0cmluZworLXsKKy0gIC8qIE9mZnNldCBvZiBzdGF0aWMgc3RyaW5nIHNlZ21lbnRzIGluIGZpbGUuICAqLworLSAgbmxzX3VpbnQzMiBvZmZzZXQ7CistICAvKiBBbHRlcm5hdGluZyBzZXF1ZW5jZSBvZiBzdGF0aWMgYW5kIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuCistICAgICBUaGUgbGFzdCBzZWdtZW50IGlzIGEgc3RhdGljIHNlZ21lbnQsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKy0gIHN0cnVjdCBzZWdtZW50X3BhaXIgc2VnbWVudHNbMV07CistfTsKKy0KKy0vKiBNYXJrZXIgZm9yIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnRzW10gYXJyYXkuICBUaGlzIGhhcyB0aGUgdmFsdWUgMHhGRkZGRkZGRiwKKy0gICByZWdhcmRsZXNzIHdoZXRoZXIgJ2ludCcgaXMgMTYgYml0LCAzMiBiaXQsIG9yIDY0IGJpdC4gICovCistI2RlZmluZSBTRUdNRU5UU19FTkQgKChubHNfdWludDMyKSB+MCkKKy0KKy0vKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKy0KKy0jZW5kaWYJLyogZ2V0dGV4dC5oICAqLworLS0tIGEvaW50bC9oYXNoLXN0cmluZy5jCisrKysgL2Rldi9udWxsCitAQCAtMSw1MSArMCwwIEBACistLyogSW1wbGVtZW50cyBhIHN0cmluZyBoYXNoaW5nIGZ1bmN0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMTk5OCwgMjAwMCwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKy0KKy0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKy0gICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCistICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCistICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKy0gICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLS8qIFNwZWNpZmljYXRpb24uICAqLworLSNpbmNsdWRlICJoYXNoLXN0cmluZy5oIgorLQorLQorLS8qIERlZmluZXMgdGhlIHNvIGNhbGxlZCBgaGFzaHBqdycgZnVuY3Rpb24gYnkgUC5KLiBXZWluYmVyZ2VyCistICAgW3NlZSBBaG8vU2V0aGkvVWxsbWFuLCBDT01QSUxFUlM6IFByaW5jaXBsZXMsIFRlY2huaXF1ZXMgYW5kIFRvb2xzLAorLSAgIDE5ODYsIDE5ODcgQmVsbCBUZWxlcGhvbmUgTGFib3JhdG9yaWVzLCBJbmMuXSAgKi8KKy11bnNpZ25lZCBsb25nIGludAorLV9faGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cl9wYXJhbSkKKy17CistICB1bnNpZ25lZCBsb25nIGludCBodmFsLCBnOworLSAgY29uc3QgY2hhciAqc3RyID0gc3RyX3BhcmFtOworLQorLSAgLyogQ29tcHV0ZSB0aGUgaGFzaCB2YWx1ZSBmb3IgdGhlIGdpdmVuIHN0cmluZy4gICovCistICBodmFsID0gMDsKKy0gIHdoaWxlICgqc3RyICE9ICdcMCcpCistICAgIHsKKy0gICAgICBodmFsIDw8PSA0OworLSAgICAgIGh2YWwgKz0gKHVuc2lnbmVkIGNoYXIpICpzdHIrKzsKKy0gICAgICBnID0gaHZhbCAmICgodW5zaWduZWQgbG9uZyBpbnQpIDB4ZiA8PCAoSEFTSFdPUkRCSVRTIC0gNCkpOworLSAgICAgIGlmIChnICE9IDApCistCXsKKy0JICBodmFsIF49IGcgPj4gKEhBU0hXT1JEQklUUyAtIDgpOworLQkgIGh2YWwgXj0gZzsKKy0JfQorLSAgICB9CistICByZXR1cm4gaHZhbDsKKy19CistLS0gYS9pbnRsL2hhc2gtc3RyaW5nLmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDM2ICswLDAgQEAKKy0vKiBEZXNjcmlwdGlvbiBvZiBHTlUgbWVzc2FnZSBjYXRhbG9nIGZvcm1hdDogc3RyaW5nIGhhc2hpbmcgZnVuY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LTE5OTgsIDIwMDAtMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0vKiBXZSBhc3N1bWUgdG8gaGF2ZSBgdW5zaWduZWQgbG9uZyBpbnQnIHZhbHVlIHdpdGggYXQgbGVhc3QgMzIgYml0cy4gICovCistI2RlZmluZSBIQVNIV09SREJJVFMgMzIKKy0KKy0KKy0jaWZuZGVmIF9MSUJDCistIyBpZmRlZiBJTl9MSUJJTlRMCistIyAgZGVmaW5lIF9faGFzaF9zdHJpbmcgbGliaW50bF9oYXNoX3N0cmluZworLSMgZWxzZQorLSMgIGRlZmluZSBfX2hhc2hfc3RyaW5nIGhhc2hfc3RyaW5nCistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIERlZmluZXMgdGhlIHNvIGNhbGxlZCBgaGFzaHBqdycgZnVuY3Rpb24gYnkgUC5KLiBXZWluYmVyZ2VyCistICAgW3NlZSBBaG8vU2V0aGkvVWxsbWFuLCBDT01QSUxFUlM6IFByaW5jaXBsZXMsIFRlY2huaXF1ZXMgYW5kIFRvb2xzLAorLSAgIDE5ODYsIDE5ODcgQmVsbCBUZWxlcGhvbmUgTGFib3JhdG9yaWVzLCBJbmMuXSAgKi8KKy1leHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19oYXNoX3N0cmluZyAoY29uc3QgY2hhciAqc3RyX3BhcmFtKTsKKy0tLSBhL2ludGwvaW50bC1jb21wYXQuYworKysrIC9kZXYvbnVsbAorQEAgLTEsMTMzICswLDAgQEAKKy0vKiBpbnRsLWNvbXBhdC5jIC0gU3R1YiBmdW5jdGlvbnMgdG8gY2FsbCBnZXR0ZXh0IGZ1bmN0aW9ucyBmcm9tIEdOVSBnZXR0ZXh0CistICAgTGlicmFyeS4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDIwMDAtMjAwMywgMjAwNSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImdldHRleHRQLmgiCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLS8qIFRoaXMgZmlsZSByZWRpcmVjdHMgdGhlIGdldHRleHQgZnVuY3Rpb25zICh3aXRob3V0IHByZWZpeCkgdG8gdGhvc2UKKy0gICBkZWZpbmVkIGluIHRoZSBpbmNsdWRlZCBHTlUgbGliaW50bCBsaWJyYXJ5ICh3aXRoICJsaWJpbnRsXyIgcHJlZml4KS4KKy0gICBJdCBpcyBjb21waWxlZCBpbnRvIGxpYmludGwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgQU1fR05VX0dFVFRFWFQgdGVzdAorLSAgIG9mIGdldHRleHQgPD0gMC4xMS4yIHdvcmsgd2l0aCB0aGUgbGliaW50bCBsaWJyYXJ5ID49IDAuMTEuMyB3aGljaAorLSAgIGhhcyB0aGUgcmVkaXJlY3Rpb25zIHByaW1hcmlseSBpbiB0aGUgPGxpYmludGwuaD4gaW5jbHVkZSBmaWxlLgorLSAgIEl0IGlzIGFsc28gY29tcGlsZWQgaW50byBsaWJnbnVpbnRsIHNvIHRoYXQgbGliZ251aW50bC5zbyBjYW4gYmUgdXNlZAorLSAgIGFzIExEX1BSRUxPQURhYmxlIGxpYnJhcnkgb24gZ2xpYmMgc3lzdGVtcywgdG8gcHJvdmlkZSB0aGUgZXh0cmEKKy0gICBmZWF0dXJlcyB0aGF0IHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxpYmMgZG9uJ3QgaGF2ZSAobmFtZWx5LCBsb2dnaW5nKS4gICovCistCistCistI3VuZGVmIGdldHRleHQKKy0jdW5kZWYgZGdldHRleHQKKy0jdW5kZWYgZGNnZXR0ZXh0CistI3VuZGVmIG5nZXR0ZXh0CistI3VuZGVmIGRuZ2V0dGV4dAorLSN1bmRlZiBkY25nZXR0ZXh0CistI3VuZGVmIHRleHRkb21haW4KKy0jdW5kZWYgYmluZHRleHRkb21haW4KKy0jdW5kZWYgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKy0KKy0KKy0vKiBXaGVuIGJ1aWxkaW5nIGEgRExMLCB3ZSBtdXN0IGV4cG9ydCBzb21lIGZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBiZWNhdXNlCistICAgdGhlIGZ1bmN0aW9ucyBhcmUgb25seSBkZWZpbmVkIGZvciBiaW5hcnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgd2UKKy0gICBkb24ndCBuZWVkIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgaW4gYW55IGNhc2UuICAqLworLSNpZiBIQVZFX1ZJU0lCSUxJVFkgJiYgQlVJTERJTkdfRExMCistIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKQorLSNlbGlmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCistIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorLSNlbHNlCistIyBkZWZpbmUgRExMX0VYUE9SVEVECistI2VuZGlmCistCistCistRExMX0VYUE9SVEVECistY2hhciAqCistZ2V0dGV4dCAoY29uc3QgY2hhciAqbXNnaWQpCisteworLSAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAobXNnaWQpOworLX0KKy0KKy0KKy1ETExfRVhQT1JURUQKKy1jaGFyICoKKy1kZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQpCisteworLSAgcmV0dXJuIGxpYmludGxfZGdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkKTsKKy19CistCistCistRExMX0VYUE9SVEVECistY2hhciAqCistZGNnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KQorLXsKKy0gIHJldHVybiBsaWJpbnRsX2RjZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KTsKKy19CistCistCistRExMX0VYUE9SVEVECistY2hhciAqCistbmdldHRleHQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQorLXsKKy0gIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChtc2dpZDEsIG1zZ2lkMiwgbik7CistfQorLQorLQorLURMTF9FWFBPUlRFRAorLWNoYXIgKgorLWRuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisteworLSAgcmV0dXJuIGxpYmludGxfZG5nZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbik7CistfQorLQorLQorLURMTF9FWFBPUlRFRAorLWNoYXIgKgorLWRjbmdldHRleHQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCSAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbiwKKy0JICAgIGludCBjYXRlZ29yeSkKKy17CistICByZXR1cm4gbGliaW50bF9kY25nZXR0ZXh0IChkb21haW5uYW1lLCBtc2dpZDEsIG1zZ2lkMiwgbiwgY2F0ZWdvcnkpOworLX0KKy0KKy0KKy1ETExfRVhQT1JURUQKKy1jaGFyICoKKy10ZXh0ZG9tYWluIChjb25zdCBjaGFyICpkb21haW5uYW1lKQorLXsKKy0gIHJldHVybiBsaWJpbnRsX3RleHRkb21haW4gKGRvbWFpbm5hbWUpOworLX0KKy0KKy0KKy1ETExfRVhQT1JURUQKKy1jaGFyICoKKy1iaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqZGlybmFtZSkKKy17CistICByZXR1cm4gbGliaW50bF9iaW5kdGV4dGRvbWFpbiAoZG9tYWlubmFtZSwgZGlybmFtZSk7CistfQorLQorLQorLURMTF9FWFBPUlRFRAorLWNoYXIgKgorLWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpjb2Rlc2V0KQorLXsKKy0gIHJldHVybiBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChkb21haW5uYW1lLCBjb2Rlc2V0KTsKKy19CistLS0gYS9pbnRsL2ludGwtZXhwb3J0cy5jCisrKysgL2Rldi9udWxsCitAQCAtMSwzNiArMCwwIEBACistLyogTGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIG9mIGxpYmludGwgb24gQ3lnd2luLgorLSAgIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwNi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSAvKiBJTVAoeCkgaXMgYSBzeW1ib2wgdGhhdCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB4LiAgKi8KKy0jZGVmaW5lIElNUCh4KSBfaW1wX18jI3gKKy0KKy0gLyogRW5zdXJlIHRoYXQgdGhlIHZhcmlhYmxlIHggaXMgZXhwb3J0ZWQgZnJvbSB0aGUgbGlicmFyeSwgYW5kIHRoYXQgYQorLSAgICBwc2V1ZG8tdmFyaWFibGUgSU1QKHgpIGlzIGF2YWlsYWJsZS4gICovCistI2RlZmluZSBWQVJJQUJMRSh4KSBcCistIC8qIEV4cG9ydCB4IHdpdGhvdXQgcmVkZWZpbmluZyB4LiAgVGhpcyBjb2RlIHdhcyBmb3VuZCBieSBjb21waWxpbmcgYQlcCistICAgIHNuaXBwZXQ6CQkJCQkJCQlcCistICAgICAgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBpbnQgeDsgaW50IHggPSA0MjsgICovCQlcCistIGFzbSAoIi5zZWN0aW9uIC5kcmVjdHZlXG4iKTsJCQkJCQlcCistIGFzbSAoIi5hc2NpaSBcIiAtZXhwb3J0OiIgI3ggIixkYXRhXCJcbiIpOwkJCQlcCistIGFzbSAoIi5kYXRhXG4iKTsJCQkJCQkJXAorLSAvKiBBbGxvY2F0ZSBhIHBzZXVkby12YXJpYWJsZSBJTVAoeCkuICAqLwkJCQlcCistIGV4dGVybiBpbnQgeDsJCQkJCQkJCVwKKy0gdm9pZCAqIElNUCh4KSA9ICZ4OworLQorLVZBUklBQkxFKGxpYmludGxfdmVyc2lvbikKKy0tLSBhL2ludGwvbDEwbmZsaXN0LmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDQwMCArMCwwIEBACistLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0vKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBzdHBjcHkoKS4KKy0gICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKy0gICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCistI2lmbmRlZiBfR05VX1NPVVJDRQorLSMgZGVmaW5lIF9HTlVfU09VUkNFCTEKKy0jZW5kaWYKKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgPHN0cmluZy5oPgorLQorLSNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9BUkdaX0gKKy0jIGluY2x1ZGUgPGFyZ3ouaD4KKy0jZW5kaWYKKy0jaW5jbHVkZSA8Y3R5cGUuaD4KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLQorLSNpbmNsdWRlICJsb2FkaW5mby5oIgorLQorLS8qIE9uIHNvbWUgc3RyYW5nZSBzeXN0ZW1zIHN0aWxsIG5vIGRlZmluaXRpb24gb2YgTlVMTCBpcyBmb3VuZC4gIFNpZ2ghICAqLworLSNpZm5kZWYgTlVMTAorLSMgaWYgZGVmaW5lZCBfX1NURENfXyAmJiBfX1NURENfXworLSMgIGRlZmluZSBOVUxMICgodm9pZCAqKSAwKQorLSMgZWxzZQorLSMgIGRlZmluZSBOVUxMIDAKKy0jIGVuZGlmCistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLSNpZmRlZiBfTElCQworLS8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorLSAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKy0gICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCistIyBpZm5kZWYgc3RwY3B5CistIyAgZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIF9fc3RwY3B5KGRlc3QsIHNyYykKKy0jIGVuZGlmCistI2Vsc2UKKy0jIGlmbmRlZiBIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIFBhdGhuYW1lIHN1cHBvcnQuCistICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCistICAgSVNfQUJTT0xVVEVfUEFUSChQKSAgdGVzdHMgd2hldGhlciBQIGlzIGFuIGFic29sdXRlIHBhdGguICBJZiBpdCBpcyBub3QsCistICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKy0gKi8KKy0jaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworLSAgLyogV2luMzIsIEN5Z3dpbiwgT1MvMiwgRE9TICovCistIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKy0jIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKy0gICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorLSAgICAgJiYgKFApWzFdID09ICc6JykKKy0jIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJQ0UgKFApKQorLSNlbHNlCistICAvKiBVbml4ICovCistIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKy0jIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKy0jZW5kaWYKKy0KKy0vKiBEZWZpbmUgZnVuY3Rpb24gd2hpY2ggYXJlIHVzdWFsbHkgbm90IGF2YWlsYWJsZS4gICovCistCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgX19hcmd6X2NvdW50KGFyZ3osIGxlbikgSU5UVVNFKF9fYXJnel9jb3VudCkgKGFyZ3osIGxlbikKKy0jZWxpZiBkZWZpbmVkIEhBVkVfQVJHWl9DT1VOVAorLSMgdW5kZWYgX19hcmd6X2NvdW50CistIyBkZWZpbmUgX19hcmd6X2NvdW50IGFyZ3pfY291bnQKKy0jZWxzZQorLS8qIFJldHVybnMgdGhlIG51bWJlciBvZiBzdHJpbmdzIGluIEFSR1ouICAqLworLXN0YXRpYyBzaXplX3QKKy1hcmd6X2NvdW50X18gKGNvbnN0IGNoYXIgKmFyZ3osIHNpemVfdCBsZW4pCisteworLSAgc2l6ZV90IGNvdW50ID0gMDsKKy0gIHdoaWxlIChsZW4gPiAwKQorLSAgICB7CistICAgICAgc2l6ZV90IHBhcnRfbGVuID0gc3RybGVuIChhcmd6KTsKKy0gICAgICBhcmd6ICs9IHBhcnRfbGVuICsgMTsKKy0gICAgICBsZW4gLT0gcGFydF9sZW4gKyAxOworLSAgICAgIGNvdW50Kys7CistICAgIH0KKy0gIHJldHVybiBjb3VudDsKKy19CistIyB1bmRlZiBfX2FyZ3pfY291bnQKKy0jIGRlZmluZSBfX2FyZ3pfY291bnQoYXJneiwgbGVuKSBhcmd6X2NvdW50X18gKGFyZ3osIGxlbikKKy0jZW5kaWYJLyogIV9MSUJDICYmICFIQVZFX0FSR1pfQ09VTlQgKi8KKy0KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBfX2FyZ3pfc3RyaW5naWZ5KGFyZ3osIGxlbiwgc2VwKSBcCistICBJTlRVU0UoX19hcmd6X3N0cmluZ2lmeSkgKGFyZ3osIGxlbiwgc2VwKQorLSNlbGlmIGRlZmluZWQgSEFWRV9BUkdaX1NUUklOR0lGWQorLSMgdW5kZWYgX19hcmd6X3N0cmluZ2lmeQorLSMgZGVmaW5lIF9fYXJnel9zdHJpbmdpZnkgYXJnel9zdHJpbmdpZnkKKy0jZWxzZQorLS8qIE1ha2UgJ1wwJyBzZXBhcmF0ZWQgYXJnIHZlY3RvciBBUkdaIHByaW50YWJsZSBieSBjb252ZXJ0aW5nIGFsbCB0aGUgJ1wwJ3MKKy0gICBleGNlcHQgdGhlIGxhc3QgaW50byB0aGUgY2hhcmFjdGVyIFNFUC4gICovCistc3RhdGljIHZvaWQKKy1hcmd6X3N0cmluZ2lmeV9fIChjaGFyICphcmd6LCBzaXplX3QgbGVuLCBpbnQgc2VwKQorLXsKKy0gIHdoaWxlIChsZW4gPiAwKQorLSAgICB7CistICAgICAgc2l6ZV90IHBhcnRfbGVuID0gc3RybGVuIChhcmd6KTsKKy0gICAgICBhcmd6ICs9IHBhcnRfbGVuOworLSAgICAgIGxlbiAtPSBwYXJ0X2xlbiArIDE7CistICAgICAgaWYgKGxlbiA+IDApCistCSphcmd6KysgPSBzZXA7CistICAgIH0KKy19CistIyB1bmRlZiBfX2FyZ3pfc3RyaW5naWZ5CistIyBkZWZpbmUgX19hcmd6X3N0cmluZ2lmeShhcmd6LCBsZW4sIHNlcCkgYXJnel9zdHJpbmdpZnlfXyAoYXJneiwgbGVuLCBzZXApCistI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9BUkdaX1NUUklOR0lGWSAqLworLQorLSNpZmRlZiBfTElCQworLSNlbGlmIGRlZmluZWQgSEFWRV9BUkdaX05FWFQKKy0jIHVuZGVmIF9fYXJnel9uZXh0CistIyBkZWZpbmUgX19hcmd6X25leHQgYXJnel9uZXh0CistI2Vsc2UKKy1zdGF0aWMgY2hhciAqCistYXJnel9uZXh0X18gKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwgY29uc3QgY2hhciAqZW50cnkpCisteworLSAgaWYgKGVudHJ5KQorLSAgICB7CistICAgICAgaWYgKGVudHJ5IDwgYXJneiArIGFyZ3pfbGVuKQorLSAgICAgICAgZW50cnkgPSBzdHJjaHIgKGVudHJ5LCAnXDAnKSArIDE7CistCistICAgICAgcmV0dXJuIGVudHJ5ID49IGFyZ3ogKyBhcmd6X2xlbiA/IE5VTEwgOiAoY2hhciAqKSBlbnRyeTsKKy0gICAgfQorLSAgZWxzZQorLSAgICBpZiAoYXJnel9sZW4gPiAwKQorLSAgICAgIHJldHVybiBhcmd6OworLSAgICBlbHNlCistICAgICAgcmV0dXJuIDA7CistfQorLSMgdW5kZWYgX19hcmd6X25leHQKKy0jIGRlZmluZSBfX2FyZ3pfbmV4dChhcmd6LCBsZW4sIGVudHJ5KSBhcmd6X25leHRfXyAoYXJneiwgbGVuLCBlbnRyeSkKKy0jZW5kaWYJLyogIV9MSUJDICYmICFIQVZFX0FSR1pfTkVYVCAqLworLQorLQorLS8qIFJldHVybiBudW1iZXIgb2YgYml0cyBzZXQgaW4gWC4gICovCistc3RhdGljIGlubGluZSBpbnQKKy1wb3AgKGludCB4KQorLXsKKy0gIC8qIFdlIGFzc3VtZSB0aGF0IG5vIG1vcmUgdGhhbiAxNiBiaXRzIGFyZSB1c2VkLiAgKi8KKy0gIHggPSAoKHggJiB+MHg1NTU1KSA+PiAxKSArICh4ICYgMHg1NTU1KTsKKy0gIHggPSAoKHggJiB+MHgzMzMzKSA+PiAyKSArICh4ICYgMHgzMzMzKTsKKy0gIHggPSAoKHggPj4gNCkgKyB4KSAmIDB4MGYwZjsKKy0gIHggPSAoKHggPj4gOCkgKyB4KSAmIDB4ZmY7CistCistICByZXR1cm4geDsKKy19CistCistDAorLXN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3QsCistCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLAorLQkJICAgIGludCBtYXNrLCBjb25zdCBjaGFyICpsYW5ndWFnZSwgY29uc3QgY2hhciAqdGVycml0b3J5LAorLQkJICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQsIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRfY29kZXNldCwKKy0JCSAgICBjb25zdCBjaGFyICptb2RpZmllciwKKy0JCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGRvX2FsbG9jYXRlKQorLXsKKy0gIGNoYXIgKmFic19maWxlbmFtZTsKKy0gIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsYXN0cDsKKy0gIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJldHZhbDsKKy0gIGNoYXIgKmNwOworLSAgc2l6ZV90IGRpcmxpc3RfY291bnQ7CistICBzaXplX3QgZW50cmllczsKKy0gIGludCBjbnQ7CistCistICAvKiBJZiBMQU5HVUFHRSBjb250YWlucyBhbiBhYnNvbHV0ZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgd2UgaWdub3JlCistICAgICBESVJMSVNULiAgKi8KKy0gIGlmIChJU19BQlNPTFVURV9QQVRIIChsYW5ndWFnZSkpCistICAgIGRpcmxpc3RfbGVuID0gMDsKKy0KKy0gIC8qIEFsbG9jYXRlIHJvb20gZm9yIHRoZSBmdWxsIGZpbGUgbmFtZS4gICovCistICBhYnNfZmlsZW5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcmxpc3RfbGVuCistCQkJCSAgKyBzdHJsZW4gKGxhbmd1YWdlKQorLQkJCQkgICsgKChtYXNrICYgWFBHX1RFUlJJVE9SWSkgIT0gMAorLQkJCQkgICAgID8gc3RybGVuICh0ZXJyaXRvcnkpICsgMSA6IDApCistCQkJCSAgKyAoKG1hc2sgJiBYUEdfQ09ERVNFVCkgIT0gMAorLQkJCQkgICAgID8gc3RybGVuIChjb2Rlc2V0KSArIDEgOiAwKQorLQkJCQkgICsgKChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkgIT0gMAorLQkJCQkgICAgID8gc3RybGVuIChub3JtYWxpemVkX2NvZGVzZXQpICsgMSA6IDApCistCQkJCSAgKyAoKG1hc2sgJiBYUEdfTU9ESUZJRVIpICE9IDAKKy0JCQkJICAgICA/IHN0cmxlbiAobW9kaWZpZXIpICsgMSA6IDApCistCQkJCSAgKyAxICsgc3RybGVuIChmaWxlbmFtZSkgKyAxKTsKKy0KKy0gIGlmIChhYnNfZmlsZW5hbWUgPT0gTlVMTCkKKy0gICAgcmV0dXJuIE5VTEw7CistCistICAvKiBDb25zdHJ1Y3QgZmlsZSBuYW1lLiAgKi8KKy0gIGNwID0gYWJzX2ZpbGVuYW1lOworLSAgaWYgKGRpcmxpc3RfbGVuID4gMCkKKy0gICAgeworLSAgICAgIG1lbWNweSAoY3AsIGRpcmxpc3QsIGRpcmxpc3RfbGVuKTsKKy0gICAgICBfX2FyZ3pfc3RyaW5naWZ5IChjcCwgZGlybGlzdF9sZW4sIFBBVEhfU0VQQVJBVE9SKTsKKy0gICAgICBjcCArPSBkaXJsaXN0X2xlbjsKKy0gICAgICBjcFstMV0gPSAnLyc7CistICAgIH0KKy0KKy0gIGNwID0gc3RwY3B5IChjcCwgbGFuZ3VhZ2UpOworLQorLSAgaWYgKChtYXNrICYgWFBHX1RFUlJJVE9SWSkgIT0gMCkKKy0gICAgeworLSAgICAgICpjcCsrID0gJ18nOworLSAgICAgIGNwID0gc3RwY3B5IChjcCwgdGVycml0b3J5KTsKKy0gICAgfQorLSAgaWYgKChtYXNrICYgWFBHX0NPREVTRVQpICE9IDApCistICAgIHsKKy0gICAgICAqY3ArKyA9ICcuJzsKKy0gICAgICBjcCA9IHN0cGNweSAoY3AsIGNvZGVzZXQpOworLSAgICB9CistICBpZiAoKG1hc2sgJiBYUEdfTk9STV9DT0RFU0VUKSAhPSAwKQorLSAgICB7CistICAgICAgKmNwKysgPSAnLic7CistICAgICAgY3AgPSBzdHBjcHkgKGNwLCBub3JtYWxpemVkX2NvZGVzZXQpOworLSAgICB9CistICBpZiAoKG1hc2sgJiBYUEdfTU9ESUZJRVIpICE9IDApCistICAgIHsKKy0gICAgICAqY3ArKyA9ICdAJzsKKy0gICAgICBjcCA9IHN0cGNweSAoY3AsIG1vZGlmaWVyKTsKKy0gICAgfQorLQorLSAgKmNwKysgPSAnLyc7CistICBzdHBjcHkgKGNwLCBmaWxlbmFtZSk7CistCistICAvKiBMb29rIGluIGxpc3Qgb2YgYWxyZWFkeSBsb2FkZWQgZG9tYWlucyB3aGV0aGVyIGl0IGlzIGFscmVhZHkKKy0gICAgIGF2YWlsYWJsZS4gICovCistICBsYXN0cCA9IGwxMG5maWxlX2xpc3Q7CistICBmb3IgKHJldHZhbCA9ICpsMTBuZmlsZV9saXN0OyByZXR2YWwgIT0gTlVMTDsgcmV0dmFsID0gcmV0dmFsLT5uZXh0KQorLSAgICBpZiAocmV0dmFsLT5maWxlbmFtZSAhPSBOVUxMKQorLSAgICAgIHsKKy0JaW50IGNvbXBhcmUgPSBzdHJjbXAgKHJldHZhbC0+ZmlsZW5hbWUsIGFic19maWxlbmFtZSk7CistCWlmIChjb21wYXJlID09IDApCistCSAgLyogV2UgZm91bmQgaXQhICAqLworLQkgIGJyZWFrOworLQlpZiAoY29tcGFyZSA8IDApCistCSAgeworLQkgICAgLyogSXQncyBub3QgaW4gdGhlIGxpc3QuICAqLworLQkgICAgcmV0dmFsID0gTlVMTDsKKy0JICAgIGJyZWFrOworLQkgIH0KKy0KKy0JbGFzdHAgPSAmcmV0dmFsLT5uZXh0OworLSAgICAgIH0KKy0KKy0gIGlmIChyZXR2YWwgIT0gTlVMTCB8fCBkb19hbGxvY2F0ZSA9PSAwKQorLSAgICB7CistICAgICAgZnJlZSAoYWJzX2ZpbGVuYW1lKTsKKy0gICAgICByZXR1cm4gcmV0dmFsOworLSAgICB9CistCistICBkaXJsaXN0X2NvdW50ID0gKGRpcmxpc3RfbGVuID4gMCA/IF9fYXJnel9jb3VudCAoZGlybGlzdCwgZGlybGlzdF9sZW4pIDogMSk7CistCistICAvKiBBbGxvY2F0ZSBhIG5ldyBsb2FkZWRfbDEwbmZpbGUuICAqLworLSAgcmV0dmFsID0KKy0gICAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikKKy0gICAgbWFsbG9jIChzaXplb2YgKCpyZXR2YWwpCistCSAgICArICgoKGRpcmxpc3RfY291bnQgPDwgcG9wIChtYXNrKSkgKyAoZGlybGlzdF9jb3VudCA+IDEgPyAxIDogMCkpCistCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKSkpOworLSAgaWYgKHJldHZhbCA9PSBOVUxMKQorLSAgICB7CistICAgICAgZnJlZSAoYWJzX2ZpbGVuYW1lKTsKKy0gICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLQorLSAgcmV0dmFsLT5maWxlbmFtZSA9IGFic19maWxlbmFtZTsKKy0KKy0gIC8qIFdlIHNldCByZXR2YWwtPmRhdGEgdG8gTlVMTCBoZXJlOyBpdCBpcyBmaWxsZWQgaW4gbGF0ZXIuCistICAgICBTZXR0aW5nIHJldHZhbC0+ZGVjaWRlZCB0byAxIGhlcmUgbWVhbnMgdGhhdCByZXR2YWwgZG9lcyBub3QKKy0gICAgIGNvcnJlc3BvbmQgdG8gYSByZWFsIGZpbGUgKGRpcmxpc3RfY291bnQgPiAxKSBvciBpcyBub3Qgd29ydGgKKy0gICAgIGxvb2tpbmcgdXAgKGlmIGFuIHVubm9ybWFsaXplZCBjb2Rlc2V0IHdhcyBzcGVjaWZpZWQpLiAgKi8KKy0gIHJldHZhbC0+ZGVjaWRlZCA9IChkaXJsaXN0X2NvdW50ID4gMQorLQkJICAgICB8fCAoKG1hc2sgJiBYUEdfQ09ERVNFVCkgIT0gMAorLQkJCSAmJiAobWFzayAmIFhQR19OT1JNX0NPREVTRVQpICE9IDApKTsKKy0gIHJldHZhbC0+ZGF0YSA9IE5VTEw7CistCistICByZXR2YWwtPm5leHQgPSAqbGFzdHA7CistICAqbGFzdHAgPSByZXR2YWw7CistCistICBlbnRyaWVzID0gMDsKKy0gIC8qIFJlY3Vyc2UgdG8gZmlsbCB0aGUgaW5oZXJpdGFuY2UgbGlzdCBvZiBSRVRWQUwuCistICAgICBJZiB0aGUgRElSTElTVCBpcyBhIHJlYWwgbGlzdCAoaS5lLiBESVJMSVNUX0NPVU5UID4gMSksIHRoZSBSRVRWQUwKKy0gICAgIGVudHJ5IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGZpbGU7IHJldHZhbC0+ZmlsZW5hbWUgY29udGFpbnMKKy0gICAgIGNvbG9ucy4gIEluIHRoaXMgY2FzZSB3ZSBsb29wIGFjcm9zcyBhbGwgZWxlbWVudHMgb2YgRElSTElTVCBhbmQKKy0gICAgIGFjcm9zcyBhbGwgYml0IHBhdHRlcm5zIGRvbWluYXRlZCBieSBNQVNLLgorLSAgICAgSWYgdGhlIERJUkxJU1QgaXMgYSBzaW5nbGUgZGlyZWN0b3J5IG9yIGVudGlyZWx5IHJlZHVuZGFudCAoaS5lLgorLSAgICAgRElSTElTVF9DT1VOVCA9PSAxKSwgd2UgbG9vcCBhY3Jvc3MgYWxsIGJpdCBwYXR0ZXJucyBkb21pbmF0ZWQgYnkKKy0gICAgIE1BU0ssIGV4Y2x1ZGluZyBNQVNLIGl0c2VsZi4KKy0gICAgIEluIGVpdGhlciBjYXNlLCB3ZSBsb29wIGRvd24gZnJvbSBNQVNLIHRvIDAuICBUaGlzIGhhcyB0aGUgZWZmZWN0CistICAgICB0aGF0IHRoZSBleHRyYSBiaXRzIGluIHRoZSBsb2NhbGUgbmFtZSBhcmUgZHJvcHBlZCBpbiB0aGlzIG9yZGVyOgorLSAgICAgZmlyc3QgdGhlIG1vZGlmaWVyLCB0aGVuIHRoZSB0ZXJyaXRvcnksIHRoZW4gdGhlIGNvZGVzZXQsIHRoZW4gdGhlCistICAgICBub3JtYWxpemVkX2NvZGVzZXQuICAqLworLSAgZm9yIChjbnQgPSBkaXJsaXN0X2NvdW50ID4gMSA/IG1hc2sgOiBtYXNrIC0gMTsgY250ID49IDA7IC0tY250KQorLSAgICBpZiAoKGNudCAmIH5tYXNrKSA9PSAwCistCSYmICEoKGNudCAmIFhQR19DT0RFU0VUKSAhPSAwICYmIChjbnQgJiBYUEdfTk9STV9DT0RFU0VUKSAhPSAwKSkKKy0gICAgICB7CistCWlmIChkaXJsaXN0X2NvdW50ID4gMSkKKy0JICB7CistCSAgICAvKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIG9mIHRoZSBESVJMSVNULiAgKi8KKy0JICAgIGNoYXIgKmRpciA9IE5VTEw7CistCistCSAgICB3aGlsZSAoKGRpciA9IF9fYXJnel9uZXh0ICgoY2hhciAqKSBkaXJsaXN0LCBkaXJsaXN0X2xlbiwgZGlyKSkKKy0JCSAgICE9IE5VTEwpCistCSAgICAgIHJldHZhbC0+c3VjY2Vzc29yW2VudHJpZXMrK10KKy0JCT0gX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXIsIHN0cmxlbiAoZGlyKSArIDEsCistCQkJCSAgICAgIGNudCwgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKy0JCQkJICAgICAgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgZmlsZW5hbWUsCistCQkJCSAgICAgIDEpOworLQkgIH0KKy0JZWxzZQorLQkgIHJldHZhbC0+c3VjY2Vzc29yW2VudHJpZXMrK10KKy0JICAgID0gX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXJsaXN0LCBkaXJsaXN0X2xlbiwKKy0JCQkJICBjbnQsIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGNvZGVzZXQsCistCQkJCSAgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgZmlsZW5hbWUsIDEpOworLSAgICAgIH0KKy0gIHJldHZhbC0+c3VjY2Vzc29yW2VudHJpZXNdID0gTlVMTDsKKy0KKy0gIHJldHVybiByZXR2YWw7CistfQorLQwKKy0vKiBOb3JtYWxpemUgY29kZXNldCBuYW1lLiAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIHRoZSBjb2Rlc2V0CistICAgbmFtZXMuICBOb3JtYWxpemF0aW9uIGFsbG93cyB0aGUgdXNlciB0byB1c2UgYW55IG9mIHRoZSBjb21tb24KKy0gICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKy0gICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKy1jb25zdCBjaGFyICoKKy1fbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsIHNpemVfdCBuYW1lX2xlbikKKy17CistICBpbnQgbGVuID0gMDsKKy0gIGludCBvbmx5X2RpZ2l0ID0gMTsKKy0gIGNoYXIgKnJldHZhbDsKKy0gIGNoYXIgKndwOworLSAgc2l6ZV90IGNudDsKKy0KKy0gIGZvciAoY250ID0gMDsgY250IDwgbmFtZV9sZW47ICsrY250KQorLSAgICBpZiAoaXNhbG51bSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCistICAgICAgeworLQkrK2xlbjsKKy0KKy0JaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorLQkgIG9ubHlfZGlnaXQgPSAwOworLSAgICAgIH0KKy0KKy0gIHJldHZhbCA9IChjaGFyICopIG1hbGxvYyAoKG9ubHlfZGlnaXQgPyAzIDogMCkgKyBsZW4gKyAxKTsKKy0KKy0gIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIGlmIChvbmx5X2RpZ2l0KQorLQl3cCA9IHN0cGNweSAocmV0dmFsLCAiaXNvIik7CistICAgICAgZWxzZQorLQl3cCA9IHJldHZhbDsKKy0KKy0gICAgICBmb3IgKGNudCA9IDA7IGNudCA8IG5hbWVfbGVuOyArK2NudCkKKy0JaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorLQkgICp3cCsrID0gdG9sb3dlciAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSk7CistCWVsc2UgaWYgKGlzZGlnaXQgKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorLQkgICp3cCsrID0gY29kZXNldFtjbnRdOworLQorLSAgICAgICp3cCA9ICdcMCc7CistICAgIH0KKy0KKy0gIHJldHVybiAoY29uc3QgY2hhciAqKSByZXR2YWw7CistfQorLQorLQorLS8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworLQorLS8qIFdlIGRvbid0IHdhbnQgbGliaW50bC5hIHRvIGRlcGVuZCBvbiBhbnkgb3RoZXIgbGlicmFyeS4gIFNvIHdlCistICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKy0gICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFsc28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQorLSAgIHRvIGJlIGRlZmluZWQuICAqLworLSNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCistc3RhdGljIGNoYXIgKgorLXN0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQorLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBhL2ludGwvbGFuZ3ByZWZzLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDEzMCArMCwwIEBACistLyogRGV0ZXJtaW5lIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgcHJlZmVyZW5jZXMuCistICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0vKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0KKy0jaWYgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jIGluY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD4KKy0jIGluY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJvcGVydHlMaXN0Lmg+CistIyBpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkFycmF5Lmg+CistIyBpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlN0cmluZy5oPgorLWV4dGVybiB2b2lkIF9ubF9sb2NhbGVfbmFtZV9jYW5vbmljYWxpemUgKGNoYXIgKm5hbWUpOworLSNlbmRpZgorLQorLS8qIERldGVybWluZSB0aGUgdXNlcidzIGxhbmd1YWdlIHByZWZlcmVuY2VzLCBhcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mCistICAgbG9jYWxlIG5hbWVzIGluIFhQRyBzeW50YXgKKy0gICAgIGxhbmd1YWdlW190ZXJyaXRvcnldWy5jb2Rlc2V0XVtAbW9kaWZpZXJdCistICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCistICAgVGhlIExBTkdVQUdFIGVudmlyb25tZW50IHZhcmlhYmxlIGRvZXMgbm90IG5lZWQgdG8gYmUgY29uc2lkZXJlZDsgaXQgaXMKKy0gICBhbHJlYWR5IHRha2VuIGludG8gYWNjb3VudCBieSB0aGUgY2FsbGVyLiAgKi8KKy0KKy1jb25zdCBjaGFyICoKKy1fbmxfbGFuZ3VhZ2VfcHJlZmVyZW5jZXNfZGVmYXVsdCAodm9pZCkKKy17CistI2lmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRSAvKiBNYWNPUyBYIDEwLjIgb3IgbmV3ZXIgKi8KKy0gIHsKKy0gICAgLyogQ2FjaGUgdGhlIHByZWZlcmVuY2VzIGxpc3QsIHNpbmNlIENvcmVGb3VuZGF0aW9uIGNhbGxzIGFyZSBleHBlbnNpdmUuICAqLworLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY2FjaGVkX2xhbmd1YWdlczsKKy0gICAgc3RhdGljIGludCBjYWNoZV9pbml0aWFsaXplZDsKKy0KKy0gICAgaWYgKCFjYWNoZV9pbml0aWFsaXplZCkKKy0gICAgICB7CistCUNGVHlwZVJlZiBwcmVmZXJlbmNlcyA9CistCSAgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSAoQ0ZTVFIgKCJBcHBsZUxhbmd1YWdlcyIpLAorLQkJCQkgICAgIGtDRlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uKTsKKy0JaWYgKHByZWZlcmVuY2VzICE9IE5VTEwKKy0JICAgICYmIENGR2V0VHlwZUlEIChwcmVmZXJlbmNlcykgPT0gQ0ZBcnJheUdldFR5cGVJRCAoKSkKKy0JICB7CistCSAgICBDRkFycmF5UmVmIHByZWZBcnJheSA9IChDRkFycmF5UmVmKXByZWZlcmVuY2VzOworLQkgICAgaW50IG4gPSBDRkFycmF5R2V0Q291bnQgKHByZWZBcnJheSk7CistCSAgICBjaGFyIGJ1ZlsyNTZdOworLQkgICAgc2l6ZV90IHNpemUgPSAwOworLQkgICAgaW50IGk7CistCistCSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorLQkgICAgICB7CistCQlDRlR5cGVSZWYgZWxlbWVudCA9IENGQXJyYXlHZXRWYWx1ZUF0SW5kZXggKHByZWZBcnJheSwgaSk7CistCQlpZiAoZWxlbWVudCAhPSBOVUxMCistCQkgICAgJiYgQ0ZHZXRUeXBlSUQgKGVsZW1lbnQpID09IENGU3RyaW5nR2V0VHlwZUlEICgpCistCQkgICAgJiYgQ0ZTdHJpbmdHZXRDU3RyaW5nICgoQ0ZTdHJpbmdSZWYpZWxlbWVudCwKKy0JCQkJCSAgIGJ1Ziwgc2l6ZW9mIChidWYpLAorLQkJCQkJICAga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSkpCistCQkgIHsKKy0JCSAgICBfbmxfbG9jYWxlX25hbWVfY2Fub25pY2FsaXplIChidWYpOworLQkJICAgIHNpemUgKz0gc3RybGVuIChidWYpICsgMTsKKy0JCSAgICAvKiBNb3N0IEdOVSBwcm9ncmFtcyB1c2UgbXNnaWRzIGluIEVuZ2xpc2ggYW5kIGRvbid0IHNoaXAKKy0JCSAgICAgICBhbiBlbi5tbyBtZXNzYWdlIGNhdGFsb2cuICBUaGVyZWZvcmUgd2hlbiB3ZSBzZWUgImVuIgorLQkJICAgICAgIGluIHRoZSBwcmVmZXJlbmNlcyBsaXN0LCBhcnJhbmdlIGZvciBnZXR0ZXh0KCkgdG8KKy0JCSAgICAgICByZXR1cm4gdGhlIG1zZ2lkLCBhbmQgaWdub3JlIGFsbCBmdXJ0aGVyIGVsZW1lbnRzIG9mCistCQkgICAgICAgdGhlIHByZWZlcmVuY2VzIGxpc3QuICAqLworLQkJICAgIGlmIChzdHJjbXAgKGJ1ZiwgImVuIikgPT0gMCkKKy0JCSAgICAgIGJyZWFrOworLQkJICB9CistCQllbHNlCistCQkgIGJyZWFrOworLQkgICAgICB9CistCSAgICBpZiAoc2l6ZSA+IDApCistCSAgICAgIHsKKy0JCWNoYXIgKmxhbmd1YWdlcyA9IChjaGFyICopIG1hbGxvYyAoc2l6ZSk7CistCistCQlpZiAobGFuZ3VhZ2VzICE9IE5VTEwpCistCQkgIHsKKy0JCSAgICBjaGFyICpwID0gbGFuZ3VhZ2VzOworLQorLQkJICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCistCQkgICAgICB7CistCQkJQ0ZUeXBlUmVmIGVsZW1lbnQgPQorLQkJCSAgQ0ZBcnJheUdldFZhbHVlQXRJbmRleCAocHJlZkFycmF5LCBpKTsKKy0JCQlpZiAoZWxlbWVudCAhPSBOVUxMCistCQkgICAgICAgICAgICAmJiBDRkdldFR5cGVJRCAoZWxlbWVudCkgPT0gQ0ZTdHJpbmdHZXRUeXBlSUQgKCkKKy0JCQkgICAgJiYgQ0ZTdHJpbmdHZXRDU3RyaW5nICgoQ0ZTdHJpbmdSZWYpZWxlbWVudCwKKy0JCQkJCQkgICBidWYsIHNpemVvZiAoYnVmKSwKKy0JCQkJCQkgICBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJKSkKKy0JCQkgIHsKKy0JCQkgICAgX25sX2xvY2FsZV9uYW1lX2Nhbm9uaWNhbGl6ZSAoYnVmKTsKKy0JCQkgICAgc3RyY3B5IChwLCBidWYpOworLQkJCSAgICBwICs9IHN0cmxlbiAoYnVmKTsKKy0JCQkgICAgKnArKyA9ICc6JzsKKy0JCQkgICAgaWYgKHN0cmNtcCAoYnVmLCAiZW4iKSA9PSAwKQorLQkJCSAgICAgIGJyZWFrOworLQkJCSAgfQorLQkJCWVsc2UKKy0JCQkgIGJyZWFrOworLQkJICAgICAgfQorLQkJICAgICotLXAgPSAnXDAnOworLQorLQkJICAgIGNhY2hlZF9sYW5ndWFnZXMgPSBsYW5ndWFnZXM7CistCQkgIH0KKy0JICAgICAgfQorLQkgIH0KKy0JY2FjaGVfaW5pdGlhbGl6ZWQgPSAxOworLSAgICAgIH0KKy0gICAgaWYgKGNhY2hlZF9sYW5ndWFnZXMgIT0gTlVMTCkKKy0gICAgICByZXR1cm4gY2FjaGVkX2xhbmd1YWdlczsKKy0gIH0KKy0jZW5kaWYKKy0KKy0gIHJldHVybiBOVUxMOworLX0KKy0tLSBhL2ludGwvbGliZ251aW50bC5oLmluCisrKysgL2Rldi9udWxsCitAQCAtMSw0MTkgKzAsMCBAQAorLS8qIE1lc3NhZ2UgY2F0YWxvZ3MgZm9yIGludGVybmF0aW9uYWxpemF0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9MSUJJTlRMX0gKKy0jZGVmaW5lIF9MSUJJTlRMX0gJMQorLQorLSNpbmNsdWRlIDxsb2NhbGUuaD4KKy0KKy0vKiBUaGUgTENfTUVTU0FHRVMgbG9jYWxlIGNhdGVnb3J5IGlzIHRoZSBjYXRlZ29yeSB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMKKy0gICBnZXR0ZXh0KCkgYW5kIGRnZXR0ZXh0KCkuICBJdCBpcyBzcGVjaWZpZWQgaW4gUE9TSVgsIGJ1dCBub3QgaW4gQU5TSSBDLgorLSAgIE9uIHN5c3RlbXMgdGhhdCBkb24ndCBkZWZpbmUgaXQsIHVzZSBhbiBhcmJpdHJhcnkgdmFsdWUgaW5zdGVhZC4KKy0gICBPbiBTb2xhcmlzLCA8bG9jYWxlLmg+IGRlZmluZXMgX19MT0NBTEVfSCAob3IgX0xPQ0FMRV9IIGluIFNvbGFyaXMgMi41KQorLSAgIHRoZW4gaW5jbHVkZXMgPGxpYmludGwuaD4gKGkuZS4gdGhpcyBmaWxlISkgYW5kIHRoZW4gb25seSBkZWZpbmVzCistICAgTENfTUVTU0FHRVMuICBUbyBhdm9pZCBhIHJlZGVmaW5pdGlvbiB3YXJuaW5nLCBkb24ndCBkZWZpbmUgTENfTUVTU0FHRVMKKy0gICBpbiB0aGlzIGNhc2UuICAqLworLSNpZiAhZGVmaW5lZCBMQ19NRVNTQUdFUyAmJiAhKGRlZmluZWQgX19MT0NBTEVfSCB8fCAoZGVmaW5lZCBfTE9DQUxFX0ggJiYgZGVmaW5lZCBfX3N1bikpCistIyBkZWZpbmUgTENfTUVTU0FHRVMgMTcyOQorLSNlbmRpZgorLQorLS8qIFdlIGRlZmluZSBhbiBhZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgdGhlIEdOVQorLSAgIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQuICAqLworLSNkZWZpbmUgX19VU0VfR05VX0dFVFRFWFQgMQorLQorLS8qIFByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN1cHBvcnRlZCBmaWxlIGZvcm1hdHMuICBSZXR1cm5zIHRoZQorLSAgIG1heGltdW0gbWlub3IgcmV2aXNpb24gbnVtYmVyIHN1cHBvcnRlZCBmb3IgYSBnaXZlbiBtYWpvciByZXZpc2lvbi4gICovCistI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgXAorLSAgKChtYWpvcikgPT0gMCB8fCAobWFqb3IpID09IDEgPyAxIDogLTEpCistCistLyogUmVzb2x2ZSBhIHBsYXRmb3JtIHNwZWNpZmljIGNvbmZsaWN0IG9uIERKR1BQLiAgR05VIGdldHRleHQgdGFrZXMKKy0gICBwcmVjZWRlbmNlIG92ZXIgX2NvbmlvX2dldHRleHQuICAqLworLSNpZmRlZiBfX0RKR1BQX18KKy0jIHVuZGVmIGdldHRleHQKKy0jZW5kaWYKKy0KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsKKy0jZW5kaWYKKy0KKy0KKy0vKiBWZXJzaW9uIG51bWJlcjogKG1ham9yPDwxNikgKyAobWlub3I8PDgpICsgc3VibWlub3IgKi8KKy0jZGVmaW5lIExJQklOVExfVkVSU0lPTiAweDAwMTEwMAorLWV4dGVybiBpbnQgbGliaW50bF92ZXJzaW9uOworLQorLQorLS8qIFdlIHJlZGlyZWN0IHRoZSBmdW5jdGlvbnMgdG8gdGhvc2UgcHJlZml4ZWQgd2l0aCAibGliaW50bF8iLiAgVGhpcyBpcworLSAgIG5lY2Vzc2FyeSwgYmVjYXVzZSBzb21lIHN5c3RlbXMgZGVmaW5lIGdldHRleHQvdGV4dGRvbWFpbi8uLi4gaW4gdGhlIEMKKy0gICBsaWJyYXJ5IChuYW1lbHksIFNvbGFyaXMgMi40IGFuZCBuZXdlciwgYW5kIEdOVSBsaWJjIDIuMCBhbmQgbmV3ZXIpLgorLSAgIElmIHdlIHVzZWQgdGhlIHVucHJlZml4ZWQgbmFtZXMsIHRoZXJlIHdvdWxkIGJlIGNhc2VzIHdoZXJlIHRoZQorLSAgIGRlZmluaXRpb24gaW4gdGhlIEMgbGlicmFyeSB3b3VsZCBvdmVycmlkZSB0aGUgb25lIGluIHRoZSBsaWJpbnRsLnNvCistICAgc2hhcmVkIGxpYnJhcnkuICBSZWNhbGwgdGhhdCBvbiBFTEYgc3lzdGVtcywgdGhlIHN5bWJvbHMgYXJlIGxvb2tlZAorLSAgIHVwIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CistICAgICAxLiBpbiB0aGUgZXhlY3V0YWJsZSwKKy0gICAgIDIuIGluIHRoZSBzaGFyZWQgbGlicmFyaWVzIHNwZWNpZmllZCBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUsIGluIG9yZGVyLAorLSAgICAgMy4gaW4gdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgc2hhcmVkIGxpYnJhcmllcyBzcGVjaWZpZWQgb24gdGhlIGxpbmsKKy0gICAgICAgIGNvbW1hbmQgbGluZSwKKy0gICAgIDQuIGluIHRoZSBkbG9wZW4oKWVkIHNoYXJlZCBsaWJyYXJpZXMsIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUKKy0gICAgICAgIGRsb3BlbigpZWQuCistICAgVGhlIGRlZmluaXRpb24gaW4gdGhlIEMgbGlicmFyeSB3b3VsZCBvdmVycmlkZSB0aGUgb25lIGluIGxpYmludGwuc28gaWYKKy0gICBlaXRoZXIKKy0gICAgICogLWxjIGlzIGdpdmVuIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSBhbmQgLWxpbnRsIGlzbid0LCBvcgorLSAgICAgKiAtbGMgaXMgZ2l2ZW4gb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lIGJlZm9yZSAtbGludGwsIG9yCistICAgICAqIGxpYmludGwuc28gaXMgYSBkZXBlbmRlbmN5IG9mIGEgZGxvcGVuKCllZCBzaGFyZWQgbGlicmFyeSBidXQgbm90CistICAgICAgIGxpbmtlZCB0byB0aGUgZXhlY3V0YWJsZSBhdCBsaW5rIHRpbWUuCistICAgU2luY2UgU29sYXJpcyBnZXR0ZXh0KCkgYmVoYXZlcyBkaWZmZXJlbnRseSB0aGFuIEdOVSBnZXR0ZXh0KCksIHRoaXMKKy0gICB3b3VsZCBiZSB1bmFjY2VwdGFibGUuCistCistICAgVGhlIHJlZGlyZWN0aW9uIGhhcHBlbnMgYnkgZGVmYXVsdCB0aHJvdWdoIG1hY3JvcyBpbiBDLCBzbyB0aGF0ICZnZXR0ZXh0CistICAgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQsIGJ1dCB0aHJvdWdoIGlubGluZSBmdW5jdGlvbnMgaW4KKy0gICBDKyssIGluIG9yZGVyIG5vdCB0byBpbnRlcmZlcmUgd2l0aCB0aGUgbmFtZSBtYW5nbGluZyBvZiBjbGFzcyBmaWVsZHMgb3IKKy0gICBjbGFzcyBtZXRob2RzIGNhbGxlZCAnZ2V0dGV4dCcuICAqLworLQorLS8qIFRoZSB1c2VyIGNhbiBkZWZpbmUgX0lOVExfUkVESVJFQ1RfSU5MSU5FIG9yIF9JTlRMX1JFRElSRUNUX01BQ1JPUy4KKy0gICBJZiBoZSBkb2Vzbid0LCB3ZSBjaG9vc2UgdGhlIG1ldGhvZC4gIEEgdGhpcmQgcG9zc2libGUgbWV0aG9kIGlzCistICAgX0lOVExfUkVESVJFQ1RfQVNNLCBzdXBwb3J0ZWQgb25seSBieSBHQ0MuICAqLworLSNpZiAhKGRlZmluZWQgX0lOVExfUkVESVJFQ1RfSU5MSU5FIHx8IGRlZmluZWQgX0lOVExfUkVESVJFQ1RfTUFDUk9TKQorLSMgaWYgX19HTlVDX18gPj0gMiAmJiAhKF9fQVBQTEVfQ0NfXyA+IDEpICYmICFkZWZpbmVkIF9fTUlOR1czMl9fICYmICEoX19HTlVDX18gPT0gMiAmJiBkZWZpbmVkIF9BSVgpICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMpCistIyAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX0FTTQorLSMgZWxzZQorLSMgIGlmZGVmIF9fY3BsdXNwbHVzCistIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKy0jICBlbHNlCistIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0vKiBBdXhpbGlhcnkgbWFjcm9zLiAgKi8KKy0jaWZkZWYgX0lOVExfUkVESVJFQ1RfQVNNCistIyBkZWZpbmUgX0lOVExfQVNNKGNuYW1lKSBfX2FzbV9fIChfSU5UTF9BU01OQU1FIChfX1VTRVJfTEFCRUxfUFJFRklYX18sICNjbmFtZSkpCistIyBkZWZpbmUgX0lOVExfQVNNTkFNRShwcmVmaXgsY25hbWVzdHJpbmcpIF9JTlRMX1NUUklOR0lGWSAocHJlZml4KSBjbmFtZXN0cmluZworLSMgZGVmaW5lIF9JTlRMX1NUUklOR0lGWShwcmVmaXgpICNwcmVmaXgKKy0jZWxzZQorLSMgZGVmaW5lIF9JTlRMX0FTTShjbmFtZSkKKy0jZW5kaWYKKy0KKy0vKiBfSU5UTF9NQVlfUkVUVVJOX1NUUklOR19BUkcobikgZGVjbGFyZXMgdGhhdCB0aGUgZ2l2ZW4gZnVuY3Rpb24gbWF5IHJldHVybgorLSAgIGl0cyBuLXRoIGFyZ3VtZW50IGxpdGVyYWxseS4gIFRoaXMgZW5hYmxlcyBHQ0MgdG8gd2FybiBmb3IgZXhhbXBsZSBhYm91dAorLSAgIHByaW50ZiAoZ2V0dGV4dCAoImZvbyAleSIpKS4gICovCistI2lmIF9fR05VQ19fID49IDMgJiYgIShfX0FQUExFX0NDX18gPiAxICYmIGRlZmluZWQgX19jcGx1c3BsdXMpCistIyBkZWZpbmUgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHKG4pIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAobikpKQorLSNlbHNlCistIyBkZWZpbmUgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHKG4pCistI2VuZGlmCistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKy0gICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorLSAgIHRleHQpLiAgKi8KKy0jaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCistZXh0ZXJuIGNoYXIgKmxpYmludGxfZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZCkKKy0gICAgICAgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHICgxKTsKKy1zdGF0aWMgaW5saW5lIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisteworLSAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAoX19tc2dpZCk7CistfQorLSNlbHNlCistI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworLSMgZGVmaW5lIGdldHRleHQgbGliaW50bF9nZXR0ZXh0CistI2VuZGlmCistZXh0ZXJuIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCistICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9nZXR0ZXh0KQorLSAgICAgICBfSU5UTF9NQVlfUkVUVVJOX1NUUklOR19BUkcgKDEpOworLSNlbmRpZgorLQorLS8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorLSAgIExDX01FU1NBR0VTIGxvY2FsZS4gICovCistI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorLWV4dGVybiBjaGFyICpsaWJpbnRsX2RnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCistICAgICAgIF9JTlRMX01BWV9SRVRVUk5fU1RSSU5HX0FSRyAoMik7Cistc3RhdGljIGlubGluZSBjaGFyICpkZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKQorLXsKKy0gIHJldHVybiBsaWJpbnRsX2RnZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQpOworLX0KKy0jZWxzZQorLSNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKy0jIGRlZmluZSBkZ2V0dGV4dCBsaWJpbnRsX2RnZXR0ZXh0CistI2VuZGlmCistZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCistICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kZ2V0dGV4dCkKKy0gICAgICAgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHICgyKTsKKy0jZW5kaWYKKy0KKy0vKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKy0gICBsb2NhbGUuICAqLworLSNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKy1leHRlcm4gY2hhciAqbGliaW50bF9kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKy0JCQkJaW50IF9fY2F0ZWdvcnkpCistICAgICAgIF9JTlRMX01BWV9SRVRVUk5fU1RSSU5HX0FSRyAoMik7Cistc3RhdGljIGlubGluZSBjaGFyICpkY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKy0JCQkgICAgICAgaW50IF9fY2F0ZWdvcnkpCisteworLSAgcmV0dXJuIGxpYmludGxfZGNnZXR0ZXh0IChfX2RvbWFpbm5hbWUsIF9fbXNnaWQsIF9fY2F0ZWdvcnkpOworLX0KKy0jZWxzZQorLSNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKy0jIGRlZmluZSBkY2dldHRleHQgbGliaW50bF9kY2dldHRleHQKKy0jZW5kaWYKKy1leHRlcm4gY2hhciAqZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCistCQkJaW50IF9fY2F0ZWdvcnkpCistICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9kY2dldHRleHQpCistICAgICAgIF9JTlRMX01BWV9SRVRVUk5fU1RSSU5HX0FSRyAoMik7CistI2VuZGlmCistCistCistLyogU2ltaWxhciB0byBgZ2V0dGV4dCcgYnV0IHNlbGVjdCB0aGUgcGx1cmFsIGZvcm0gY29ycmVzcG9uZGluZyB0byB0aGUKKy0gICBudW1iZXIgTi4gICovCistI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorLWV4dGVybiBjaGFyICpsaWJpbnRsX25nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCistCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKy0gICAgICAgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHICgxKSBfSU5UTF9NQVlfUkVUVVJOX1NUUklOR19BUkcgKDIpOworLXN0YXRpYyBpbmxpbmUgY2hhciAqbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKy0JCQkgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCisteworLSAgcmV0dXJuIGxpYmludGxfbmdldHRleHQgKF9fbXNnaWQxLCBfX21zZ2lkMiwgX19uKTsKKy19CistI2Vsc2UKKy0jaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCistIyBkZWZpbmUgbmdldHRleHQgbGliaW50bF9uZ2V0dGV4dAorLSNlbmRpZgorLWV4dGVybiBjaGFyICpuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKy0gICAgICAgX0lOVExfQVNNIChsaWJpbnRsX25nZXR0ZXh0KQorLSAgICAgICBfSU5UTF9NQVlfUkVUVVJOX1NUUklOR19BUkcgKDEpIF9JTlRMX01BWV9SRVRVUk5fU1RSSU5HX0FSRyAoMik7CistI2VuZGlmCistCistLyogU2ltaWxhciB0byBgZGdldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCistICAgbnVtYmVyIE4uICAqLworLSNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKy1leHRlcm4gY2hhciAqbGliaW50bF9kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCistCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pCistICAgICAgIF9JTlRMX01BWV9SRVRVUk5fU1RSSU5HX0FSRyAoMikgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHICgzKTsKKy1zdGF0aWMgaW5saW5lIGNoYXIgKmRuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkMSwKKy0JCQkgICAgICAgY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKKy17CistICByZXR1cm4gbGliaW50bF9kbmdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZDEsIF9fbXNnaWQyLCBfX24pOworLX0KKy0jZWxzZQorLSNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKy0jIGRlZmluZSBkbmdldHRleHQgbGliaW50bF9kbmdldHRleHQKKy0jZW5kaWYKKy1leHRlcm4gY2hhciAqZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorLQkJCXVuc2lnbmVkIGxvbmcgaW50IF9fbikKKy0gICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RuZ2V0dGV4dCkKKy0gICAgICAgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHICgyKSBfSU5UTF9NQVlfUkVUVVJOX1NUUklOR19BUkcgKDMpOworLSNlbmRpZgorLQorLS8qIFNpbWlsYXIgdG8gYGRjZ2V0dGV4dCcgYnV0IHNlbGVjdCB0aGUgcGx1cmFsIGZvcm0gY29ycmVzcG9uZGluZyB0byB0aGUKKy0gICBudW1iZXIgTi4gICovCistI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorLWV4dGVybiBjaGFyICpsaWJpbnRsX2RjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKy0JCQkJIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwgaW50IF9fY2F0ZWdvcnkpCistICAgICAgIF9JTlRMX01BWV9SRVRVUk5fU1RSSU5HX0FSRyAoMikgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHICgzKTsKKy1zdGF0aWMgaW5saW5lIGNoYXIgKmRjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorLQkJCQl1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQorLXsKKy0gIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZDEsIF9fbXNnaWQyLCBfX24sIF9fY2F0ZWdvcnkpOworLX0KKy0jZWxzZQorLSNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKy0jIGRlZmluZSBkY25nZXR0ZXh0IGxpYmludGxfZGNuZ2V0dGV4dAorLSNlbmRpZgorLWV4dGVybiBjaGFyICpkY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKy0JCQkgdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSkKKy0gICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RjbmdldHRleHQpCistICAgICAgIF9JTlRMX01BWV9SRVRVUk5fU1RSSU5HX0FSRyAoMikgX0lOVExfTUFZX1JFVFVSTl9TVFJJTkdfQVJHICgzKTsKKy0jZW5kaWYKKy0KKy0KKy0jaWZuZGVmIElOX0xJQkdMT0NBTEUKKy0KKy0vKiBTZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgdG8gRE9NQUlOTkFNRS4KKy0gICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorLSAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworLSNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKy1leHRlcm4gY2hhciAqbGliaW50bF90ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpOworLXN0YXRpYyBpbmxpbmUgY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKQorLXsKKy0gIHJldHVybiBsaWJpbnRsX3RleHRkb21haW4gKF9fZG9tYWlubmFtZSk7CistfQorLSNlbHNlCistI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworLSMgZGVmaW5lIHRleHRkb21haW4gbGliaW50bF90ZXh0ZG9tYWluCistI2VuZGlmCistZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkKKy0gICAgICAgX0lOVExfQVNNIChsaWJpbnRsX3RleHRkb21haW4pOworLSNlbmRpZgorLQorLS8qIFNwZWNpZnkgdGhhdCB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSBmb3VuZAorLSAgIGluIERJUk5BTUUgcmF0aGVyIHRoYW4gaW4gdGhlIHN5c3RlbSBsb2NhbGUgZGF0YSBiYXNlLiAgKi8KKy0jaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCistZXh0ZXJuIGNoYXIgKmxpYmludGxfYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpOworLXN0YXRpYyBpbmxpbmUgY2hhciAqYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkKKy17CistICByZXR1cm4gbGliaW50bF9iaW5kdGV4dGRvbWFpbiAoX19kb21haW5uYW1lLCBfX2Rpcm5hbWUpOworLX0KKy0jZWxzZQorLSNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKy0jIGRlZmluZSBiaW5kdGV4dGRvbWFpbiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluCistI2VuZGlmCistZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fZGlybmFtZSkKKy0gICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluKTsKKy0jZW5kaWYKKy0KKy0vKiBTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIGZyb20gdGhlCistICAgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSByZXR1cm5lZC4gICovCistI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorLWV4dGVybiBjaGFyICpsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCQkgICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpOworLXN0YXRpYyBpbmxpbmUgY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJCSAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KQorLXsKKy0gIHJldHVybiBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChfX2RvbWFpbm5hbWUsIF9fY29kZXNldCk7CistfQorLSNlbHNlCistI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworLSMgZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKy0jZW5kaWYKKy1leHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICAgICAgY29uc3QgY2hhciAqX19jb2Rlc2V0KQorLSAgICAgICBfSU5UTF9BU00gKGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpOworLSNlbmRpZgorLQorLSNlbmRpZiAvKiBJTl9MSUJHTE9DQUxFICovCistCistCistLyogU3VwcG9ydCBmb3IgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMgaW4gKnByaW50ZigpLCBmb2xsb3dpbmcgdGhlCistICAgUE9TSVgvWFNJIHNwZWNpZmljYXRpb24uCistICAgTm90ZTogVGhlc2UgcmVwbGFjZW1lbnRzIGZvciB0aGUgKnByaW50ZigpIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBvbmx5CistICAgaW4gc291cmNlIGZpbGVzIHRoYXQgI2luY2x1ZGUgPGxpYmludGwuaD4gb3IgI2luY2x1ZGUgImdldHRleHQuaCIuCistICAgUGFja2FnZXMgdGhhdCB1c2UgKnByaW50ZigpIGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IHJlZmVyIHRvIF8oKQorLSAgIG9yIGdldHRleHQoKSBidXQgZm9yIHdoaWNoIHRoZSBmb3JtYXQgc3RyaW5nIGNvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUKKy0gICBvZiBfKCkgb3IgZ2V0dGV4dCgpIG5lZWQgdG8gYWRkIHRoaXMgI2luY2x1ZGUuICBPaCB3ZWxsLiAgKi8KKy0KKy0jaWYgIUBIQVZFX1BPU0lYX1BSSU5URkAKKy0KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistCistLyogR2V0IHZhX2xpc3QuICAqLworLSNpZiBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIKKy0jIGluY2x1ZGUgPHN0ZGFyZy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDx2YXJhcmdzLmg+CistI2VuZGlmCistCistI3VuZGVmIGZwcmludGYKKy0jZGVmaW5lIGZwcmludGYgbGliaW50bF9mcHJpbnRmCistZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKy0jdW5kZWYgdmZwcmludGYKKy0jZGVmaW5lIHZmcHJpbnRmIGxpYmludGxfdmZwcmludGYKKy1leHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CistCistI3VuZGVmIHByaW50ZgorLSNpZiBkZWZpbmVkIF9fTmV0QlNEX18gfHwgZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfX01JTkdXMzJfXworLS8qIERvbid0IGJyZWFrIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsTSxOKSkpLgorLSAgIFRoaXMgcmVkZWZpbml0aW9uIGlzIG9ubHkgcG9zc2libGUgYmVjYXVzZSB0aGUgbGliYyBpbiBOZXRCU0QsIEN5Z3dpbiwKKy0gICBtaW5ndyBkb2VzIG5vdCBoYXZlIGEgZnVuY3Rpb24gX19wcmludGZfXy4gICovCistIyBkZWZpbmUgbGliaW50bF9wcmludGYgX19wcmludGZfXworLSNlbmRpZgorLSNkZWZpbmUgcHJpbnRmIGxpYmludGxfcHJpbnRmCistZXh0ZXJuIGludCBwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKKy0jdW5kZWYgdnByaW50ZgorLSNkZWZpbmUgdnByaW50ZiBsaWJpbnRsX3ZwcmludGYKKy1leHRlcm4gaW50IHZwcmludGYgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CistCistI3VuZGVmIHNwcmludGYKKy0jZGVmaW5lIHNwcmludGYgbGliaW50bF9zcHJpbnRmCistZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKy0jdW5kZWYgdnNwcmludGYKKy0jZGVmaW5lIHZzcHJpbnRmIGxpYmludGxfdnNwcmludGYKKy1leHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CistCistI2lmIEBIQVZFX1NOUFJJTlRGQAorLQorLSN1bmRlZiBzbnByaW50ZgorLSNkZWZpbmUgc25wcmludGYgbGliaW50bF9zbnByaW50ZgorLWV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CistI3VuZGVmIHZzbnByaW50ZgorLSNkZWZpbmUgdnNucHJpbnRmIGxpYmludGxfdnNucHJpbnRmCistZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworLQorLSNlbmRpZgorLQorLSNpZiBASEFWRV9BU1BSSU5URkAKKy0KKy0jdW5kZWYgYXNwcmludGYKKy0jZGVmaW5lIGFzcHJpbnRmIGxpYmludGxfYXNwcmludGYKKy1leHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7CistI3VuZGVmIHZhc3ByaW50ZgorLSNkZWZpbmUgdmFzcHJpbnRmIGxpYmludGxfdmFzcHJpbnRmCistZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CistCistI2VuZGlmCistCistI2lmIEBIQVZFX1dQUklOVEZACistCistI3VuZGVmIGZ3cHJpbnRmCistI2RlZmluZSBmd3ByaW50ZiBsaWJpbnRsX2Z3cHJpbnRmCistZXh0ZXJuIGludCBmd3ByaW50ZiAoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CistI3VuZGVmIHZmd3ByaW50ZgorLSNkZWZpbmUgdmZ3cHJpbnRmIGxpYmludGxfdmZ3cHJpbnRmCistZXh0ZXJuIGludCB2ZndwcmludGYgKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKKy0KKy0jdW5kZWYgd3ByaW50ZgorLSNkZWZpbmUgd3ByaW50ZiBsaWJpbnRsX3dwcmludGYKKy1leHRlcm4gaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKy0jdW5kZWYgdndwcmludGYKKy0jZGVmaW5lIHZ3cHJpbnRmIGxpYmludGxfdndwcmludGYKKy1leHRlcm4gaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworLQorLSN1bmRlZiBzd3ByaW50ZgorLSNkZWZpbmUgc3dwcmludGYgbGliaW50bF9zd3ByaW50ZgorLWV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CistI3VuZGVmIHZzd3ByaW50ZgorLSNkZWZpbmUgdnN3cHJpbnRmIGxpYmludGxfdnN3cHJpbnRmCistZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworLQorLSNlbmRpZgorLQorLSNlbmRpZgorLQorLQorLS8qIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIHBhY2thZ2VzLiAgKi8KKy0KKy0vKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKy0gICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorLSAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCistICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorLSAgIGluc3RlYWQgb2YgIi8iKS4gICovCistI2RlZmluZSBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeAorLWV4dGVybiB2b2lkCistICAgICAgIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeCwKKy0JCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworLQorLQorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKy0jZW5kaWYKKy0KKy0jZW5kaWYgLyogbGliaW50bC5oICovCistLS0gYS9pbnRsL2xpYmludGwucmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDM4ICswLDAgQEAKKy0vKiBSZXNvdXJjZXMgZm9yIGludGwuZGxsICovCistCistI2luY2x1ZGUgPHdpbnZlci5oPgorLQorLVZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTworLSBGSUxFVkVSU0lPTiBQQUNLQUdFX1ZFUlNJT05fTUFKT1IsUEFDS0FHRV9WRVJTSU9OX01JTk9SLFBBQ0tBR0VfVkVSU0lPTl9TVUJNSU5PUiwwCistIFBST0RVQ1RWRVJTSU9OIFBBQ0tBR0VfVkVSU0lPTl9NQUpPUixQQUNLQUdFX1ZFUlNJT05fTUlOT1IsUEFDS0FHRV9WRVJTSU9OX1NVQk1JTk9SLDAKKy0gRklMRUZMQUdTTUFTSyAweDNmTCAvKiBWU19GRklfRklMRUZMQUdTTUFTSyAqLworLSNpZmRlZiBfREVCVUcKKy0gRklMRUZMQUdTIDB4MUwgIC8qIFZTX0ZGX0RFQlVHICovCistI2Vsc2UKKy0gRklMRUZMQUdTIDB4MEwKKy0jZW5kaWYKKy0gRklMRU9TIDB4MTAwMDRMICAvKiBWT1NfRE9TX1dJTkRPV1MzMiAqLworLSBGSUxFVFlQRSAweDJMICAvKiBWRlRfRExMICovCistIEZJTEVTVUJUWVBFIDB4MEwgIC8qIFZGVDJfVU5LTk9XTiAqLworLUJFR0lOCistICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKKy0gICAgQkVHSU4KKy0gICAgICAgIEJMT0NLICIwNDA5MDAwMCIgIC8qIExhbmcgPSBVUyBFbmdsaXNoLCBDaGFyc2V0ID0gQVNDSUkgKi8KKy0gICAgICAgIEJFR0lOCistICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwgIlRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQVwwIgorLSAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25cMCIKKy0gICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIkxHUExlZCBsaWJpbnRsIGZvciBXaW5kb3dzIE5ULzIwMDAvWFAvVmlzdGEgYW5kIFdpbmRvd3MgOTUvOTgvTUVcMCIKKy0gICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBQQUNLQUdFX1ZFUlNJT05fU1RSSU5HICJcMCIKKy0gICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImludGwuZGxsXDAiCistICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMTk5NS0yMDA3XDAiCistICAgICAgICAgICAgVkFMVUUgIkxlZ2FsVHJhZGVtYXJrcyIsICJcMCIKKy0gICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJpbnRsLmRsbFwwIgorLSAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJsaWJpbnRsOiBhY2Nlc3NpbmcgTkxTIG1lc3NhZ2UgY2F0YWxvZ3NcMCIKKy0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBQQUNLQUdFX1ZFUlNJT05fU1RSSU5HICJcMCIKKy0gICAgICAgIEVORAorLSAgICBFTkQKKy0gICAgQkxPQ0sgIlZhckZpbGVJbmZvIgorLSAgICBCRUdJTgorLSAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHgwNDA5LCAwICAvKiBVUyBFbmdsaXNoLCBBU0NJSSAqLworLSAgICBFTkQKKy1FTkQKKy0tLSBhL2ludGwvbG9hZGluZm8uaAorKysrIC9kZXYvbnVsbAorQEAgLTEsMTMyICswLDAgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OSwgMjAwMC0yMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCistICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9MT0FESU5GT19ICistI2RlZmluZSBfTE9BRElORk9fSAkxCistCistLyogRGVjbGFyYXRpb25zIG9mIGxvY2FsZSBkZXBlbmRlbnQgY2F0YWxvZyBsb29rdXAgZnVuY3Rpb25zLgorLSAgIEltcGxlbWVudGVkIGluCistCistICAgICBsb2NhbGVhbGlhcy5jICAgIFBvc3NpYmx5IHJlcGxhY2UgYSBsb2NhbGUgbmFtZSBieSBhbm90aGVyLgorLSAgICAgZXhwbG9kZW5hbWUuYyAgICBTcGxpdCBhIGxvY2FsZSBuYW1lIGludG8gaXRzIHZhcmlvdXMgZmllbGRzLgorLSAgICAgbDEwbmZsaXN0LmMgICAgICBHZW5lcmF0ZSBhIGxpc3Qgb2YgZmlsZW5hbWVzIG9mIHBvc3NpYmxlIG1lc3NhZ2UgY2F0YWxvZ3MuCistICAgICBmaW5kZG9tYWluLmMgICAgIEZpbmQgYW5kIG9wZW4gdGhlIHJlbGV2YW50IG1lc3NhZ2UgY2F0YWxvZ3MuCistCistICAgVGhlIG1haW4gZnVuY3Rpb24gX25sX2ZpbmRfZG9tYWluKCkgaW4gZmluZGRvbWFpbi5jIGlzIGRlY2xhcmVkCistICAgaW4gZ2V0dGV4dFAuaC4KKy0gKi8KKy0KKy0jaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCistIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKy0jZW5kaWYKKy0KKy0jaWZuZGVmIExJQklOVExfRExMX0VYUE9SVEVECistIyBkZWZpbmUgTElCSU5UTF9ETExfRVhQT1JURUQKKy0jZW5kaWYKKy0KKy0vKiBUZWxsIHRoZSBjb21waWxlciB3aGVuIGEgY29uZGl0aW9uYWwgb3IgaW50ZWdlciBleHByZXNzaW9uIGlzCistICAgYWxtb3N0IGFsd2F5cyB0cnVlIG9yIGFsbW9zdCBhbHdheXMgZmFsc2UuICAqLworLSNpZm5kZWYgSEFWRV9CVUlMVElOX0VYUEVDVAorLSMgZGVmaW5lIF9fYnVpbHRpbl9leHBlY3QoZXhwciwgdmFsKSAoZXhwcikKKy0jZW5kaWYKKy0KKy0vKiBTZXBhcmF0b3IgaW4gUEFUSCBsaWtlIGxpc3RzIG9mIHBhdGhuYW1lcy4gICovCistI2lmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18pIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworLSAgLyogV2luMzIsIE9TLzIsIERPUyAqLworLSMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc7JworLSNlbHNlCistICAvKiBVbml4ICovCistIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCistI2VuZGlmCistCistLyogRW5jb2Rpbmcgb2YgbG9jYWxlIG5hbWUgcGFydHMuICAqLworLSNkZWZpbmUgWFBHX05PUk1fQ09ERVNFVAkxCistI2RlZmluZSBYUEdfQ09ERVNFVAkJMgorLSNkZWZpbmUgWFBHX1RFUlJJVE9SWQkJNAorLSNkZWZpbmUgWFBHX01PRElGSUVSCQk4CistCistCistc3RydWN0IGxvYWRlZF9sMTBuZmlsZQorLXsKKy0gIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworLSAgaW50IGRlY2lkZWQ7CistCistICBjb25zdCB2b2lkICpkYXRhOworLQorLSAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqbmV4dDsKKy0gIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnN1Y2Nlc3NvclsxXTsKKy19OworLQorLQorLS8qIE5vcm1hbGl6ZSBjb2Rlc2V0IG5hbWUuICBUaGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIGNvZGVzZXQKKy0gICBuYW1lcy4gIE5vcm1hbGl6YXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSBhbnkgb2YgdGhlIGNvbW1vbgorLSAgIG5hbWVzLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGhhcyB0byBiZQorLSAgIGZyZWVkIGJ5IHRoZSBjYWxsZXIuICAqLworLWV4dGVybiBjb25zdCBjaGFyICpfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsCistCQkJCQkgIHNpemVfdCBuYW1lX2xlbik7CistCistLyogTG9va3VwIGEgbG9jYWxlIGRlcGVuZGVudCBmaWxlLgorLSAgICpMMTBORklMRV9MSVNUIGRlbm90ZXMgYSBwb29sIG9mIGxvb2t1cCByZXN1bHRzIG9mIGxvY2FsZSBkZXBlbmRlbnQKKy0gICBmaWxlcyBvZiB0aGUgc2FtZSBraW5kLCBzb3J0ZWQgaW4gZGVjcmVhc2luZyBvcmRlciBvZiAtPmZpbGVuYW1lLgorLSAgIERJUkxJU1QgYW5kIERJUkxJU1RfTEVOIGFyZSBhbiBhcmd6IGxpc3Qgb2YgZGlyZWN0b3JpZXMgaW4gd2hpY2ggdG8KKy0gICBsb29rLCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBkaXJlY3RvcnkgKGkuZS4gRElSTElTVF9MRU4gPiAwKS4KKy0gICBNQVNLLCBMQU5HVUFHRSwgVEVSUklUT1JZLCBDT0RFU0VULCBOT1JNQUxJWkVEX0NPREVTRVQsIE1PRElGSUVSCistICAgYXJlIHRoZSBwaWVjZXMgb2YgdGhlIGxvY2FsZSBuYW1lLCBhcyBwcm9kdWNlZCBieSBfbmxfZXhwbG9kZV9uYW1lKCkuCistICAgRklMRU5BTUUgaXMgdGhlIGZpbGVuYW1lIHN1ZmZpeC4KKy0gICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsb29rdXAgcmVzdWx0LCBlaXRoZXIgZm91bmQgaW4gKkwxME5GSUxFX0xJU1QsCistICAgb3IgLSBpZiBET19BTExPQ0FURSBpcyBub256ZXJvIC0gZnJlc2hseSBhbGxvY2F0ZWQsIG9yIHBvc3NpYmx5IE5VTEwuCistICAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBub24tTlVMTCwgaXQgaXMgYWRkZWQgdG8gKkwxME5GSUxFX0xJU1QsIGFuZAorLSAgIGl0cyAtPm5leHQgZmllbGQgZGVub3RlcyB0aGUgY2hhaW5pbmcgaW5zaWRlICpMMTBORklMRV9MSVNULCBhbmQKKy0gICBmdXJ0aGVybW9yZSBpdHMgLT5zdWNjZXNzb3JbXSBmaWVsZCBjb250YWlucyBhIGxpc3Qgb2Ygb3RoZXIgbG9va3VwCistICAgcmVzdWx0cyBmcm9tIHdoaWNoIHRoaXMgbG9va3VwIHJlc3VsdCBpbmhlcml0cy4gICovCistZXh0ZXJuIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3QsCistCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLCBpbnQgbWFzaywKKy0JCSAgICBjb25zdCBjaGFyICpsYW5ndWFnZSwgY29uc3QgY2hhciAqdGVycml0b3J5LAorLQkJICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQsIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRfY29kZXNldCwKKy0JCSAgICBjb25zdCBjaGFyICptb2RpZmllciwKKy0JCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGRvX2FsbG9jYXRlKTsKKy0KKy0vKiBMb29rdXAgdGhlIHJlYWwgbG9jYWxlIG5hbWUgZm9yIGEgbG9jYWxlIGFsaWFzIE5BTUUsIG9yIE5VTEwgaWYKKy0gICBOQU1FIGlzIG5vdCBhIGxvY2FsZSBhbGlhcyAoYnV0IHBvc3NpYmx5IGEgcmVhbCBsb2NhbGUgbmFtZSkuCistICAgVGhlIHJldHVybiB2YWx1ZSBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgbXVzdCBub3QgYmUgZnJlZWQuICAqLworLS8qIFBhcnQgb2YgdGhlIGxpYmludGwgQUJJIG9ubHkgZm9yIHRoZSBzYWtlIG9mIHRoZSBnZXR0ZXh0Lm00IG1hY3JvLiAgKi8KKy1leHRlcm4gTElCSU5UTF9ETExfRVhQT1JURUQgY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqbmFtZSk7CistCistLyogU3BsaXQgYSBsb2NhbGUgbmFtZSBOQU1FIGludG8gaXRzIHBpZWNlczogbGFuZ3VhZ2UsIG1vZGlmaWVyLAorLSAgIHRlcnJpdG9yeSwgY29kZXNldC4KKy0gICBOQU1FIGdldHMgZGVzdHJ1Y3RpdmVseSBtb2RpZmllZDogTlVMIGJ5dGVzIGFyZSBpbnNlcnRlZCBoZXJlIGFuZAorLSAgIHRoZXJlLiAgKkxBTkdVQUdFIGdldHMgYXNzaWduZWQgTkFNRS4gIEVhY2ggb2YgKk1PRElGSUVSLCAqVEVSUklUT1JZLAorLSAgICpDT0RFU0VUIGdldHMgYXNzaWduZWQgZWl0aGVyIGEgcG9pbnRlciBpbnRvIHRoZSBvbGQgTkFNRSBzdHJpbmcsIG9yCistICAgTlVMTC4gICpOT1JNQUxJWkVEX0NPREVTRVQgZ2V0cyBhc3NpZ25lZCB0aGUgZXhwYW5kZWQgKkNPREVTRVQsIGlmIGl0CistICAgaXMgZGlmZmVyZW50IGZyb20gKkNPREVTRVQ7IHRoaXMgb25lIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgaGFzCistICAgdG8gYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKy0gICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYml0bWFzaywgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lCistICAgZmlsbGVkLWluIHZhbHVlOgorLSAgICAgWFBHX01PRElGSUVSICAgICAgICAgICAgICAgIGZvciAqTU9ESUZJRVIsCistICAgICBYUEdfVEVSUklUT1JZICAgICAgICAgICAgICAgZm9yICpURVJSSVRPUlksCistICAgICBYUEdfQ09ERVNFVCAgICAgICAgICAgICAgICAgZm9yICpDT0RFU0VULAorLSAgICAgWFBHX05PUk1fQ09ERVNFVCAgICAgICAgICAgIGZvciAqTk9STUFMSVpFRF9DT0RFU0VULgorLSAqLworLWV4dGVybiBpbnQgX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKmxhbmd1YWdlLAorLQkJCSAgICAgY29uc3QgY2hhciAqKm1vZGlmaWVyLCBjb25zdCBjaGFyICoqdGVycml0b3J5LAorLQkJCSAgICAgY29uc3QgY2hhciAqKmNvZGVzZXQsCistCQkJICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0KTsKKy0KKy0jZW5kaWYJLyogbG9hZGluZm8uaCAqLworLS0tIGEvaW50bC9sb2FkbXNnY2F0LmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDEzMzYgKzAsMCBAQAorLS8qIExvYWQgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MuCistICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLS8qIFRlbGwgZ2xpYmMncyA8c3RyaW5nLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIG1lbXBjcHkoKS4KKy0gICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKy0gICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCistI2lmbmRlZiBfR05VX1NPVVJDRQorLSMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKy0jZW5kaWYKKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgPGN0eXBlLmg+CistI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPGZjbnRsLmg+CistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLQorLSNpZmRlZiBfX0dOVUNfXworLSMgdW5kZWYgIGFsbG9jYQorLSMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCistIyBkZWZpbmUgSEFWRV9BTExPQ0EgMQorLSNlbHNlCistIyBpZmRlZiBfTVNDX1ZFUgorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorLSMgZWxzZQorLSMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCistIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorLSMgIGVsc2UKKy0jICAgaWZkZWYgX0FJWAorLSAjcHJhZ21hIGFsbG9jYQorLSMgICBlbHNlCistIyAgICBpZm5kZWYgYWxsb2NhCistY2hhciAqYWxsb2NhICgpOworLSMgICAgZW5kaWYKKy0jICAgZW5kaWYKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLQorLSNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8dW5pc3RkLmg+CistI2VuZGlmCistCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxsYW5naW5mby5oPgorLSMgaW5jbHVkZSA8bG9jYWxlLmg+CistI2VuZGlmCistCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgKGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBfUE9TSVhfTUFQUEVEX0ZJTEVTKQorLSMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKy0jIHVuZGVmIEhBVkVfTU1BUAorLSMgZGVmaW5lIEhBVkVfTU1BUAkxCistI2Vsc2UKKy0jIHVuZGVmIEhBVkVfTU1BUAorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGludC5oPgorLSNlbmRpZgorLSNpZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJnbW8uaCIKKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKy0jaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKy0jaW5jbHVkZSAicGx1cmFsLWV4cC5oIgorLQorLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKy0jIGluY2x1ZGUgPG5vdC1jYW5jZWwuaD4KKy0jZW5kaWYKKy0KKy0vKiBIYW5kbGUgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgImxvY2suaCIKKy0jZW5kaWYKKy0KKy0vKiBQcm92aWRlIGZhbGxiYWNrIHZhbHVlcyBmb3IgbWFjcm9zIHRoYXQgb3VnaHQgdG8gYmUgZGVmaW5lZCBpbiA8aW50dHlwZXMuaD4uCistICAgTm90ZSB0aGF0IG91ciBmYWxsYmFjayB2YWx1ZXMgbmVlZCBub3QgYmUgbGl0ZXJhbCBzdHJpbmdzLCBiZWNhdXNlIHdlIGRvbid0CistICAgdXNlIHRoZW0gd2l0aCBwcmVwcm9jZXNzb3Igc3RyaW5nIGNvbmNhdGVuYXRpb24uICAqLworLSNpZiAhZGVmaW5lZCBQUklkOCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJZDgKKy0jIGRlZmluZSBQUklkOCAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaTggfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWk4CistIyBkZWZpbmUgUFJJaTggImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW84IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklvOAorLSMgZGVmaW5lIFBSSW84ICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1OCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJdTgKKy0jIGRlZmluZSBQUkl1OCAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXg4CistIyBkZWZpbmUgUFJJeDggIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVg4IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklYOAorLSMgZGVmaW5lIFBSSVg4ICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWQxNgorLSMgZGVmaW5lIFBSSWQxNiAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaTE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklpMTYKKy0jIGRlZmluZSBQUklpMTYgImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW8xNiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJbzE2CistIyBkZWZpbmUgUFJJbzE2ICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1MTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXUxNgorLSMgZGVmaW5lIFBSSXUxNiAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl4MTYKKy0jIGRlZmluZSBQUkl4MTYgIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVgxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJWDE2CistIyBkZWZpbmUgUFJJWDE2ICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWQzMgorLSMgZGVmaW5lIFBSSWQzMiAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaTMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklpMzIKKy0jIGRlZmluZSBQUklpMzIgImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW8zMiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJbzMyCistIyBkZWZpbmUgUFJJbzMyICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1MzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXUzMgorLSMgZGVmaW5lIFBSSXUzMiAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl4MzIKKy0jIGRlZmluZSBQUkl4MzIgIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVgzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJWDMyCistIyBkZWZpbmUgUFJJWDMyICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWQ2NAorLSMgZGVmaW5lIFBSSWQ2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxkIiA6ICJsbGQiKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklpNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWk2NAorLSMgZGVmaW5lIFBSSWk2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxpIiA6ICJsbGkiKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklvNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSW82NAorLSMgZGVmaW5lIFBSSW82NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxvIiA6ICJsbG8iKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1NjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXU2NAorLSMgZGVmaW5lIFBSSXU2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImx1IiA6ICJsbHUiKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl4NjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXg2NAorLSMgZGVmaW5lIFBSSXg2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImx4IiA6ICJsbHgiKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklYNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSVg2NAorLSMgZGVmaW5lIFBSSVg2NCAoc2l6ZW9mIChsb25nKSA9PSA4ID8gImxYIiA6ICJsbFgiKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklkTEVBU1Q4CistIyBkZWZpbmUgUFJJZExFQVNUOCAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaUxFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJaUxFQVNUOAorLSMgZGVmaW5lIFBSSWlMRUFTVDggImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW9MRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSW9MRUFTVDgKKy0jIGRlZmluZSBQUklvTEVBU1Q4ICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1TEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl1TEVBU1Q4CistIyBkZWZpbmUgUFJJdUxFQVNUOCAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeExFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJeExFQVNUOAorLSMgZGVmaW5lIFBSSXhMRUFTVDggIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVhMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSVhMRUFTVDgKKy0jIGRlZmluZSBQUklYTEVBU1Q4ICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJZExFQVNUMTYKKy0jIGRlZmluZSBQUklkTEVBU1QxNiAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaUxFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWlMRUFTVDE2CistIyBkZWZpbmUgUFJJaUxFQVNUMTYgImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW9MRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklvTEVBU1QxNgorLSMgZGVmaW5lIFBSSW9MRUFTVDE2ICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1TEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJdUxFQVNUMTYKKy0jIGRlZmluZSBQUkl1TEVBU1QxNiAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeExFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXhMRUFTVDE2CistIyBkZWZpbmUgUFJJeExFQVNUMTYgIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVhMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklYTEVBU1QxNgorLSMgZGVmaW5lIFBSSVhMRUFTVDE2ICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJZExFQVNUMzIKKy0jIGRlZmluZSBQUklkTEVBU1QzMiAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaUxFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWlMRUFTVDMyCistIyBkZWZpbmUgUFJJaUxFQVNUMzIgImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW9MRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklvTEVBU1QzMgorLSMgZGVmaW5lIFBSSW9MRUFTVDMyICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1TEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJdUxFQVNUMzIKKy0jIGRlZmluZSBQUkl1TEVBU1QzMiAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeExFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXhMRUFTVDMyCistIyBkZWZpbmUgUFJJeExFQVNUMzIgIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVhMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklYTEVBU1QzMgorLSMgZGVmaW5lIFBSSVhMRUFTVDMyICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJZExFQVNUNjQKKy0jIGRlZmluZSBQUklkTEVBU1Q2NCBQUklkNjQKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaUxFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWlMRUFTVDY0CistIyBkZWZpbmUgUFJJaUxFQVNUNjQgUFJJaTY0CistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW9MRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklvTEVBU1Q2NAorLSMgZGVmaW5lIFBSSW9MRUFTVDY0IFBSSW82NAorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1TEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJdUxFQVNUNjQKKy0jIGRlZmluZSBQUkl1TEVBU1Q2NCBQUkl1NjQKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeExFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXhMRUFTVDY0CistIyBkZWZpbmUgUFJJeExFQVNUNjQgUFJJeDY0CistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVhMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklYTEVBU1Q2NAorLSMgZGVmaW5lIFBSSVhMRUFTVDY0IFBSSVg2NAorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWRGQVNUOAorLSMgZGVmaW5lIFBSSWRGQVNUOCAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaUZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklpRkFTVDgKKy0jIGRlZmluZSBQUklpRkFTVDggImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW9GQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJb0ZBU1Q4CistIyBkZWZpbmUgUFJJb0ZBU1Q4ICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1RkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXVGQVNUOAorLSMgZGVmaW5lIFBSSXVGQVNUOCAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeEZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl4RkFTVDgKKy0jIGRlZmluZSBQUkl4RkFTVDggIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVhGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJWEZBU1Q4CistIyBkZWZpbmUgUFJJWEZBU1Q4ICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklkRkFTVDE2CistIyBkZWZpbmUgUFJJZEZBU1QxNiAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaUZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJaUZBU1QxNgorLSMgZGVmaW5lIFBSSWlGQVNUMTYgImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW9GQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSW9GQVNUMTYKKy0jIGRlZmluZSBQUklvRkFTVDE2ICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1RkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl1RkFTVDE2CistIyBkZWZpbmUgUFJJdUZBU1QxNiAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeEZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJeEZBU1QxNgorLSMgZGVmaW5lIFBSSXhGQVNUMTYgIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVhGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSVhGQVNUMTYKKy0jIGRlZmluZSBQUklYRkFTVDE2ICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklkRkFTVDMyCistIyBkZWZpbmUgUFJJZEZBU1QzMiAiZCIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaUZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJaUZBU1QzMgorLSMgZGVmaW5lIFBSSWlGQVNUMzIgImkiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW9GQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSW9GQVNUMzIKKy0jIGRlZmluZSBQUklvRkFTVDMyICJvIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1RkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl1RkFTVDMyCistIyBkZWZpbmUgUFJJdUZBU1QzMiAidSIKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeEZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJeEZBU1QzMgorLSMgZGVmaW5lIFBSSXhGQVNUMzIgIngiCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVhGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSVhGQVNUMzIKKy0jIGRlZmluZSBQUklYRkFTVDMyICJYIgorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklkRkFTVDY0CistIyBkZWZpbmUgUFJJZEZBU1Q2NCBQUklkNjQKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJaUZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJaUZBU1Q2NAorLSMgZGVmaW5lIFBSSWlGQVNUNjQgUFJJaTY0CistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSW9GQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSW9GQVNUNjQKKy0jIGRlZmluZSBQUklvRkFTVDY0IFBSSW82NAorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1RkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl1RkFTVDY0CistIyBkZWZpbmUgUFJJdUZBU1Q2NCBQUkl1NjQKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJeEZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJeEZBU1Q2NAorLSMgZGVmaW5lIFBSSXhGQVNUNjQgUFJJeDY0CistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSVhGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSVhGQVNUNjQKKy0jIGRlZmluZSBQUklYRkFTVDY0IFBSSVg2NAorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklkTUFYCistIyBkZWZpbmUgUFJJZE1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibGQiIDogImxsZCIpCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSWlNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWlNQVgKKy0jIGRlZmluZSBQUklpTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsaSIgOiAibGxpIikKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJb01BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJb01BWAorLSMgZGVmaW5lIFBSSW9NQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxvIiA6ICJsbG8iKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1TUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl1TUFYCistIyBkZWZpbmUgUFJJdU1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibHUiIDogImxsdSIpCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSXhNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXhNQVgKKy0jIGRlZmluZSBQUkl4TUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJseCIgOiAibGx4IikKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJWE1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJWE1BWAorLSMgZGVmaW5lIFBSSVhNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxYIiA6ICJsbFgiKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUklkUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUklkUFRSCistIyBkZWZpbmUgUFJJZFBUUiBcCistICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibGQiIDogXAorLSAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAiZCIgOiBcCistICAgImxsZCIpCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSWlQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSWlQVFIKKy0jIGRlZmluZSBQUklpUFRSIFwKKy0gIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsaSIgOiBcCistICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJpIiA6IFwKKy0gICAibGxpIikKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJb1BUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJb1BUUgorLSMgZGVmaW5lIFBSSW9QVFIgXAorLSAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxvIiA6IFwKKy0gICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gIm8iIDogXAorLSAgICJsbG8iKQorLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBQUkl1UFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCistIyB1bmRlZiBQUkl1UFRSCistIyBkZWZpbmUgUFJJdVBUUiBcCistICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibHUiIDogXAorLSAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAidSIgOiBcCistICAgImxsdSIpCistI2VuZGlmCistI2lmICFkZWZpbmVkIFBSSXhQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKy0jIHVuZGVmIFBSSXhQVFIKKy0jIGRlZmluZSBQUkl4UFRSIFwKKy0gIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJseCIgOiBcCistICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJ4IiA6IFwKKy0gICAibGx4IikKKy0jZW5kaWYKKy0jaWYgIWRlZmluZWQgUFJJWFBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorLSMgdW5kZWYgUFJJWFBUUgorLSMgZGVmaW5lIFBSSVhQVFIgXAorLSAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxYIiA6IFwKKy0gICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gIlgiIDogXAorLSAgICJsbFgiKQorLSNlbmRpZgorLQorLS8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKy0KKy0jaWZkZWYgX0xJQkMKKy0vKiBSZW5hbWUgdGhlIG5vbiBJU08gQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorLSAgIGJlY2F1c2Ugc29tZSBJU08gQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorLSAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBvcGVuKG5hbWUsIGZsYWdzKQlvcGVuX25vdF9jYW5jZWxfMiAobmFtZSwgZmxhZ3MpCistIyBkZWZpbmUgY2xvc2UoZmQpCQljbG9zZV9ub3RfY2FuY2VsX25vX3N0YXR1cyAoZmQpCistIyBkZWZpbmUgcmVhZChmZCwgYnVmLCBuKQlyZWFkX25vdF9jYW5jZWwgKGZkLCBidWYsIG4pCistIyBkZWZpbmUgbW1hcChhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgb2Zmc2V0KSBcCistICBfX21tYXAgKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpCistIyBkZWZpbmUgbXVubWFwKGFkZHIsIGxlbikJX19tdW5tYXAgKGFkZHIsIGxlbikKKy0jZW5kaWYKKy0KKy0vKiBGb3IgdGhvc2UgbG9zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorLSAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCistI2lmZGVmIEhBVkVfQUxMT0NBCistIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworLSNlbHNlCistIyBkZWZpbmUgYWxsb2NhKG4pIG1hbGxvYyAobikKKy0jIGRlZmluZSBmcmVlYShwKSBmcmVlIChwKQorLSNlbmRpZgorLQorLS8qIEZvciBzeXN0ZW1zIHRoYXQgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0ZXh0IGFuZCBiaW5hcnkgSS9PLgorLSAgIE9fQklOQVJZIGlzIHVzdWFsbHkgZGVjbGFyZWQgaW4gPGZjbnRsLmg+LiAqLworLSNpZiAhZGVmaW5lZCBPX0JJTkFSWSAmJiBkZWZpbmVkIF9PX0JJTkFSWQorLSAgLyogRm9yIE1TQy1jb21wYXRpYmxlIGNvbXBpbGVycy4gICovCistIyBkZWZpbmUgT19CSU5BUlkgX09fQklOQVJZCistIyBkZWZpbmUgT19URVhUIF9PX1RFWFQKKy0jZW5kaWYKKy0jaWZkZWYgX19CRU9TX18KKy0gIC8qIEJlT1MgNSBoYXMgT19CSU5BUlkgYW5kIE9fVEVYVCwgYnV0IHRoZXkgaGF2ZSBubyBlZmZlY3QuICAqLworLSMgdW5kZWYgT19CSU5BUlkKKy0jIHVuZGVmIE9fVEVYVAorLSNlbmRpZgorLS8qIE9uIHJlYXNvbmFibGUgc3lzdGVtcywgYmluYXJ5IEkvTyBpcyB0aGUgZGVmYXVsdC4gICovCistI2lmbmRlZiBPX0JJTkFSWQorLSMgZGVmaW5lIE9fQklOQVJZIDAKKy0jZW5kaWYKKy0KKy0KKy0vKiBXZSBuZWVkIGEgc2lnbiwgd2hldGhlciBhIG5ldyBjYXRhbG9nIHdhcyBsb2FkZWQsIHdoaWNoIGNhbiBiZSBhc3NvY2lhdGVkCistICAgd2l0aCBhbGwgdHJhbnNsYXRpb25zLiAgVGhpcyBpcyBpbXBvcnRhbnQgaWYgdGhlIHRyYW5zbGF0aW9ucyBhcmUKKy0gICBjYWNoZWQgYnkgb25lIG9mIEdDQydzIGZlYXR1cmVzLiAgKi8KKy1pbnQgX25sX21zZ19jYXRfY250cjsKKy0KKy0KKy0vKiBFeHBhbmQgYSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LiAgUmV0dXJuIE5VTEwgaWYgdW5zdXBwb3J0ZWQuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICoKKy1nZXRfc3lzZGVwX3NlZ21lbnRfdmFsdWUgKGNvbnN0IGNoYXIgKm5hbWUpCisteworLSAgLyogVGVzdCBmb3IgYW4gSVNPIEMgOTkgc2VjdGlvbiA3LjguMSBmb3JtYXQgc3RyaW5nIGRpcmVjdGl2ZS4KKy0gICAgIFN5bnRheDoKKy0gICAgIFAgUiBJIHsgZCB8IGkgfCBvIHwgdSB8IHggfCBYIH0KKy0gICAgIHsgeyB8IExFQVNUIHwgRkFTVCB9IHsgOCB8IDE2IHwgMzIgfCA2NCB9IHwgTUFYIHwgUFRSIH0gICovCistICAvKiBXZSBkb24ndCB1c2UgYSB0YWJsZSBvZiAxNCB0aW1lcyA2ICdjb25zdCBjaGFyIConIHN0cmluZ3MgaGVyZSwgYmVjYXVzZQorLSAgICAgZGF0YSByZWxvY2F0aW9ucyBjb3N0IHN0YXJ0dXAgdGltZS4gICovCistICBpZiAobmFtZVswXSA9PSAnUCcgJiYgbmFtZVsxXSA9PSAnUicgJiYgbmFtZVsyXSA9PSAnSScpCistICAgIHsKKy0gICAgICBpZiAobmFtZVszXSA9PSAnZCcgfHwgbmFtZVszXSA9PSAnaScgfHwgbmFtZVszXSA9PSAnbycgfHwgbmFtZVszXSA9PSAndScKKy0JICB8fCBuYW1lWzNdID09ICd4JyB8fCBuYW1lWzNdID09ICdYJykKKy0JeworLQkgIGlmIChuYW1lWzRdID09ICc4JyAmJiBuYW1lWzVdID09ICdcMCcpCistCSAgICB7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCXJldHVybiBQUklkODsKKy0JICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorLQkJcmV0dXJuIFBSSWk4OworLQkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCistCQlyZXR1cm4gUFJJbzg7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCXJldHVybiBQUkl1ODsKKy0JICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorLQkJcmV0dXJuIFBSSXg4OworLQkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCistCQlyZXR1cm4gUFJJWDg7CistCSAgICAgIGFib3J0ICgpOworLQkgICAgfQorLQkgIGlmIChuYW1lWzRdID09ICcxJyAmJiBuYW1lWzVdID09ICc2JyAmJiBuYW1lWzZdID09ICdcMCcpCistCSAgICB7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCXJldHVybiBQUklkMTY7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCXJldHVybiBQUklpMTY7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKy0JCXJldHVybiBQUklvMTY7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCXJldHVybiBQUkl1MTY7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCXJldHVybiBQUkl4MTY7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKy0JCXJldHVybiBQUklYMTY7CistCSAgICAgIGFib3J0ICgpOworLQkgICAgfQorLQkgIGlmIChuYW1lWzRdID09ICczJyAmJiBuYW1lWzVdID09ICcyJyAmJiBuYW1lWzZdID09ICdcMCcpCistCSAgICB7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCXJldHVybiBQUklkMzI7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCXJldHVybiBQUklpMzI7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKy0JCXJldHVybiBQUklvMzI7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCXJldHVybiBQUkl1MzI7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCXJldHVybiBQUkl4MzI7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKy0JCXJldHVybiBQUklYMzI7CistCSAgICAgIGFib3J0ICgpOworLQkgICAgfQorLQkgIGlmIChuYW1lWzRdID09ICc2JyAmJiBuYW1lWzVdID09ICc0JyAmJiBuYW1lWzZdID09ICdcMCcpCistCSAgICB7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCXJldHVybiBQUklkNjQ7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCXJldHVybiBQUklpNjQ7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKy0JCXJldHVybiBQUklvNjQ7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCXJldHVybiBQUkl1NjQ7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCXJldHVybiBQUkl4NjQ7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKy0JCXJldHVybiBQUklYNjQ7CistCSAgICAgIGFib3J0ICgpOworLQkgICAgfQorLQkgIGlmIChuYW1lWzRdID09ICdMJyAmJiBuYW1lWzVdID09ICdFJyAmJiBuYW1lWzZdID09ICdBJworLQkgICAgICAmJiBuYW1lWzddID09ICdTJyAmJiBuYW1lWzhdID09ICdUJykKKy0JICAgIHsKKy0JICAgICAgaWYgKG5hbWVbOV0gPT0gJzgnICYmIG5hbWVbMTBdID09ICdcMCcpCistCQl7CistCQkgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCSAgICByZXR1cm4gUFJJZExFQVNUODsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorLQkJICAgIHJldHVybiBQUklpTEVBU1Q4OworLQkJICBpZiAobmFtZVszXSA9PSAnbycpCistCQkgICAgcmV0dXJuIFBSSW9MRUFTVDg7CistCQkgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCSAgICByZXR1cm4gUFJJdUxFQVNUODsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorLQkJICAgIHJldHVybiBQUkl4TEVBU1Q4OworLQkJICBpZiAobmFtZVszXSA9PSAnWCcpCistCQkgICAgcmV0dXJuIFBSSVhMRUFTVDg7CistCQkgIGFib3J0ICgpOworLQkJfQorLQkgICAgICBpZiAobmFtZVs5XSA9PSAnMScgJiYgbmFtZVsxMF0gPT0gJzYnICYmIG5hbWVbMTFdID09ICdcMCcpCistCQl7CistCQkgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCSAgICByZXR1cm4gUFJJZExFQVNUMTY7CistCQkgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCSAgICByZXR1cm4gUFJJaUxFQVNUMTY7CistCQkgIGlmIChuYW1lWzNdID09ICdvJykKKy0JCSAgICByZXR1cm4gUFJJb0xFQVNUMTY7CistCQkgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCSAgICByZXR1cm4gUFJJdUxFQVNUMTY7CistCQkgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCSAgICByZXR1cm4gUFJJeExFQVNUMTY7CistCQkgIGlmIChuYW1lWzNdID09ICdYJykKKy0JCSAgICByZXR1cm4gUFJJWExFQVNUMTY7CistCQkgIGFib3J0ICgpOworLQkJfQorLQkgICAgICBpZiAobmFtZVs5XSA9PSAnMycgJiYgbmFtZVsxMF0gPT0gJzInICYmIG5hbWVbMTFdID09ICdcMCcpCistCQl7CistCQkgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCSAgICByZXR1cm4gUFJJZExFQVNUMzI7CistCQkgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCSAgICByZXR1cm4gUFJJaUxFQVNUMzI7CistCQkgIGlmIChuYW1lWzNdID09ICdvJykKKy0JCSAgICByZXR1cm4gUFJJb0xFQVNUMzI7CistCQkgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCSAgICByZXR1cm4gUFJJdUxFQVNUMzI7CistCQkgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCSAgICByZXR1cm4gUFJJeExFQVNUMzI7CistCQkgIGlmIChuYW1lWzNdID09ICdYJykKKy0JCSAgICByZXR1cm4gUFJJWExFQVNUMzI7CistCQkgIGFib3J0ICgpOworLQkJfQorLQkgICAgICBpZiAobmFtZVs5XSA9PSAnNicgJiYgbmFtZVsxMF0gPT0gJzQnICYmIG5hbWVbMTFdID09ICdcMCcpCistCQl7CistCQkgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCSAgICByZXR1cm4gUFJJZExFQVNUNjQ7CistCQkgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCSAgICByZXR1cm4gUFJJaUxFQVNUNjQ7CistCQkgIGlmIChuYW1lWzNdID09ICdvJykKKy0JCSAgICByZXR1cm4gUFJJb0xFQVNUNjQ7CistCQkgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCSAgICByZXR1cm4gUFJJdUxFQVNUNjQ7CistCQkgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCSAgICByZXR1cm4gUFJJeExFQVNUNjQ7CistCQkgIGlmIChuYW1lWzNdID09ICdYJykKKy0JCSAgICByZXR1cm4gUFJJWExFQVNUNjQ7CistCQkgIGFib3J0ICgpOworLQkJfQorLQkgICAgfQorLQkgIGlmIChuYW1lWzRdID09ICdGJyAmJiBuYW1lWzVdID09ICdBJyAmJiBuYW1lWzZdID09ICdTJworLQkgICAgICAmJiBuYW1lWzddID09ICdUJykKKy0JICAgIHsKKy0JICAgICAgaWYgKG5hbWVbOF0gPT0gJzgnICYmIG5hbWVbOV0gPT0gJ1wwJykKKy0JCXsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorLQkJICAgIHJldHVybiBQUklkRkFTVDg7CistCQkgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCSAgICByZXR1cm4gUFJJaUZBU1Q4OworLQkJICBpZiAobmFtZVszXSA9PSAnbycpCistCQkgICAgcmV0dXJuIFBSSW9GQVNUODsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorLQkJICAgIHJldHVybiBQUkl1RkFTVDg7CistCQkgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCSAgICByZXR1cm4gUFJJeEZBU1Q4OworLQkJICBpZiAobmFtZVszXSA9PSAnWCcpCistCQkgICAgcmV0dXJuIFBSSVhGQVNUODsKKy0JCSAgYWJvcnQgKCk7CistCQl9CistCSAgICAgIGlmIChuYW1lWzhdID09ICcxJyAmJiBuYW1lWzldID09ICc2JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorLQkJeworLQkJICBpZiAobmFtZVszXSA9PSAnZCcpCistCQkgICAgcmV0dXJuIFBSSWRGQVNUMTY7CistCQkgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCSAgICByZXR1cm4gUFJJaUZBU1QxNjsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorLQkJICAgIHJldHVybiBQUklvRkFTVDE2OworLQkJICBpZiAobmFtZVszXSA9PSAndScpCistCQkgICAgcmV0dXJuIFBSSXVGQVNUMTY7CistCQkgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCSAgICByZXR1cm4gUFJJeEZBU1QxNjsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorLQkJICAgIHJldHVybiBQUklYRkFTVDE2OworLQkJICBhYm9ydCAoKTsKKy0JCX0KKy0JICAgICAgaWYgKG5hbWVbOF0gPT0gJzMnICYmIG5hbWVbOV0gPT0gJzInICYmIG5hbWVbMTBdID09ICdcMCcpCistCQl7CistCQkgIGlmIChuYW1lWzNdID09ICdkJykKKy0JCSAgICByZXR1cm4gUFJJZEZBU1QzMjsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorLQkJICAgIHJldHVybiBQUklpRkFTVDMyOworLQkJICBpZiAobmFtZVszXSA9PSAnbycpCistCQkgICAgcmV0dXJuIFBSSW9GQVNUMzI7CistCQkgIGlmIChuYW1lWzNdID09ICd1JykKKy0JCSAgICByZXR1cm4gUFJJdUZBU1QzMjsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorLQkJICAgIHJldHVybiBQUkl4RkFTVDMyOworLQkJICBpZiAobmFtZVszXSA9PSAnWCcpCistCQkgICAgcmV0dXJuIFBSSVhGQVNUMzI7CistCQkgIGFib3J0ICgpOworLQkJfQorLQkgICAgICBpZiAobmFtZVs4XSA9PSAnNicgJiYgbmFtZVs5XSA9PSAnNCcgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKy0JCXsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorLQkJICAgIHJldHVybiBQUklkRkFTVDY0OworLQkJICBpZiAobmFtZVszXSA9PSAnaScpCistCQkgICAgcmV0dXJuIFBSSWlGQVNUNjQ7CistCQkgIGlmIChuYW1lWzNdID09ICdvJykKKy0JCSAgICByZXR1cm4gUFJJb0ZBU1Q2NDsKKy0JCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorLQkJICAgIHJldHVybiBQUkl1RkFTVDY0OworLQkJICBpZiAobmFtZVszXSA9PSAneCcpCistCQkgICAgcmV0dXJuIFBSSXhGQVNUNjQ7CistCQkgIGlmIChuYW1lWzNdID09ICdYJykKKy0JCSAgICByZXR1cm4gUFJJWEZBU1Q2NDsKKy0JCSAgYWJvcnQgKCk7CistCQl9CistCSAgICB9CistCSAgaWYgKG5hbWVbNF0gPT0gJ00nICYmIG5hbWVbNV0gPT0gJ0EnICYmIG5hbWVbNl0gPT0gJ1gnCistCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKy0JICAgIHsKKy0JICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorLQkJcmV0dXJuIFBSSWRNQVg7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCXJldHVybiBQUklpTUFYOworLQkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCistCQlyZXR1cm4gUFJJb01BWDsKKy0JICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorLQkJcmV0dXJuIFBSSXVNQVg7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCXJldHVybiBQUkl4TUFYOworLQkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCistCQlyZXR1cm4gUFJJWE1BWDsKKy0JICAgICAgYWJvcnQgKCk7CistCSAgICB9CistCSAgaWYgKG5hbWVbNF0gPT0gJ1AnICYmIG5hbWVbNV0gPT0gJ1QnICYmIG5hbWVbNl0gPT0gJ1InCistCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKy0JICAgIHsKKy0JICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorLQkJcmV0dXJuIFBSSWRQVFI7CistCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKy0JCXJldHVybiBQUklpUFRSOworLQkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCistCQlyZXR1cm4gUFJJb1BUUjsKKy0JICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorLQkJcmV0dXJuIFBSSXVQVFI7CistCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKy0JCXJldHVybiBQUkl4UFRSOworLQkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCistCQlyZXR1cm4gUFJJWFBUUjsKKy0JICAgICAgYWJvcnQgKCk7CistCSAgICB9CistCX0KKy0gICAgfQorLSAgLyogVGVzdCBmb3IgYSBnbGliYyBzcGVjaWZpYyBwcmludGYoKSBmb3JtYXQgZGlyZWN0aXZlIGZsYWcuICAqLworLSAgaWYgKG5hbWVbMF0gPT0gJ0knICYmIG5hbWVbMV0gPT0gJ1wwJykKKy0gICAgeworLSNpZiBkZWZpbmVkIF9MSUJDIHx8IF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKQorLSAgICAgIC8qIFRoZSAnSScgZmxhZywgaW4gbnVtZXJpYyBmb3JtYXQgZGlyZWN0aXZlcywgcmVwbGFjZXMgQVNDSUkgZGlnaXRzCistCSB3aXRoIHRoZSAnb3V0ZGlnaXRzJyBkZWZpbmVkIGluIHRoZSBMQ19DVFlQRSBsb2NhbGUgZmFjZXQuICBUaGlzIGlzCistCSB1c2VkIGZvciBGYXJzaSAoUGVyc2lhbikgYW5kIG1heWJlIEFyYWJpYy4gICovCistICAgICAgcmV0dXJuICJJIjsKKy0jZWxzZQorLSAgICAgIHJldHVybiAiIjsKKy0jZW5kaWYKKy0gICAgfQorLSAgLyogT3RoZXIgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFyZSBub3QgdmFsaWQuICAqLworLSAgcmV0dXJuIE5VTEw7CistfQorLQorLS8qIExvYWQgdGhlIG1lc3NhZ2UgY2F0YWxvZ3Mgc3BlY2lmaWVkIGJ5IEZJTEVOQU1FLiAgSWYgaXQgaXMgbm8gdmFsaWQKKy0gICBtZXNzYWdlIGNhdGFsb2cgZG8gbm90aGluZy4gICovCistdm9pZAorLWludGVybmFsX2Z1bmN0aW9uCistX25sX2xvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKy0JCSBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKy17CistICBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWRfcmVjdXJzaXZlIChzdGF0aWMsIGxvY2spCistICBpbnQgZmQgPSAtMTsKKy0gIHNpemVfdCBzaXplOworLSNpZmRlZiBfTElCQworLSAgc3RydWN0IHN0YXQ2NCBzdDsKKy0jZWxzZQorLSAgc3RydWN0IHN0YXQgc3Q7CistI2VuZGlmCistICBzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKmRhdGEgPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xOworLSAgaW50IHVzZV9tbWFwID0gMDsKKy0gIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW47CistICBpbnQgcmV2aXNpb247CistICBjb25zdCBjaGFyICpudWxsZW50cnk7CistICBzaXplX3QgbnVsbGVudHJ5bGVuOworLQorLSAgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUgKGxvY2spOworLSAgaWYgKGRvbWFpbl9maWxlLT5kZWNpZGVkICE9IDApCistICAgIHsKKy0gICAgICAvKiBUaGVyZSBhcmUgdHdvIHBvc3NpYmlsaXRpZXM6CistCistCSArIHRoaXMgaXMgdGhlIHNhbWUgdGhyZWFkIGNhbGxpbmcgYWdhaW4gZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24KKy0JICAgdmlhIF9ubF9maW5kX21zZy4gIFdlIGhhdmUgaW5pdGlhbGl6ZWQgZXZlcnl0aGluZyB0aGlzIGNhbGwgbmVlZHMuCistCistCSArIHRoaXMgaXMgYW5vdGhlciB0aHJlYWQgd2hpY2ggdHJpZWQgdG8gaW5pdGlhbGl6ZSB0aGlzIG9iamVjdC4KKy0JICAgTm90IG5lY2Vzc2FyeSBhbnltb3JlIHNpbmNlIGlmIHRoZSBsb2NrIGlzIGF2YWlsYWJsZSB0aGlzCistCSAgIGlzIGZpbmlzaGVkLgorLSAgICAgICovCistICAgICAgZ290byBkb25lOworLSAgICB9CistCistICBkb21haW5fZmlsZS0+ZGVjaWRlZCA9IC0xOworLSAgZG9tYWluX2ZpbGUtPmRhdGEgPSBOVUxMOworLQorLSAgLyogTm90ZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWxlc3MgdG8gc3RvcmUgZG9tYWluYmluZGluZyBpbiBkb21haW5fZmlsZQorLSAgICAgYmVjYXVzZSBkb21haW5iaW5kaW5nIG1pZ2h0IGJlID09IE5VTEwgbm93IGJ1dCAhPSBOVUxMIGxhdGVyIChhZnRlcgorLSAgICAgYSBjYWxsIHRvIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KS4gICovCistCistICAvKiBJZiB0aGUgcmVjb3JkIGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbGlkIGxvY2FsZSB0aGUgRklMRU5BTUUKKy0gICAgIG1pZ2h0IGJlIE5VTEwuICBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuCistICAgICBzcGVjaWZpY2F0aW9uIHRoZSBsb2NhbGUgZmlsZSBuYW1lIGlzIGRpZmZlcmVudCBmb3IgWFBHIGFuZCBDRU4KKy0gICAgIHN5bnRheC4gICovCistICBpZiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lID09IE5VTEwpCistICAgIGdvdG8gb3V0OworLQorLSAgLyogVHJ5IHRvIG9wZW4gdGhlIGFkZHJlc3NlZCBmaWxlLiAgKi8KKy0gIGZkID0gb3BlbiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKTsKKy0gIGlmIChmZCA9PSAtMSkKKy0gICAgZ290byBvdXQ7CistCistICAvKiBXZSBtdXN0IGtub3cgYWJvdXQgdGhlIHNpemUgb2YgdGhlIGZpbGUuICAqLworLSAgaWYgKAorLSNpZmRlZiBfTElCQworLSAgICAgIF9fYnVpbHRpbl9leHBlY3QgKGZzdGF0NjQgKGZkLCAmc3QpICE9IDAsIDApCistI2Vsc2UKKy0gICAgICBfX2J1aWx0aW5fZXhwZWN0IChmc3RhdCAoZmQsICZzdCkgIT0gMCwgMCkKKy0jZW5kaWYKKy0gICAgICB8fCBfX2J1aWx0aW5fZXhwZWN0ICgoc2l6ZSA9IChzaXplX3QpIHN0LnN0X3NpemUpICE9IHN0LnN0X3NpemUsIDApCistICAgICAgfHwgX19idWlsdGluX2V4cGVjdCAoc2l6ZSA8IHNpemVvZiAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyKSwgMCkpCistICAgIC8qIFNvbWV0aGluZyB3ZW50IHdyb25nLiAgKi8KKy0gICAgZ290byBvdXQ7CistCistI2lmZGVmIEhBVkVfTU1BUAorLSAgLyogTm93IHdlIGFyZSByZWFkeSB0byBsb2FkIHRoZSBmaWxlLiAgSWYgbW1hcCgpIGlzIGF2YWlsYWJsZSB3ZSB0cnkKKy0gICAgIHRoaXMgZmlyc3QuICBJZiBub3QgYXZhaWxhYmxlIG9yIGl0IGZhaWxlZCB3ZSB0cnkgdG8gbG9hZCBpdC4gICovCistICBkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSBtbWFwIChOVUxMLCBzaXplLCBQUk9UX1JFQUQsCistCQkJCQkgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKy0KKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkYXRhICE9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgLTEsIDEpKQorLSAgICB7CistICAgICAgLyogbW1hcCgpIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuICAqLworLSAgICAgIGNsb3NlIChmZCk7CistICAgICAgZmQgPSAtMTsKKy0gICAgICB1c2VfbW1hcCA9IDE7CistICAgIH0KKy0jZW5kaWYKKy0KKy0gIC8qIElmIHRoZSBkYXRhIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIChpLmUuIG1tYXAnZWQpIHdlIHRyeSB0byBsb2FkCistICAgICBpdCBtYW51YWxseS4gICovCistICBpZiAoZGF0YSA9PSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xKQorLSAgICB7CistICAgICAgc2l6ZV90IHRvX3JlYWQ7CistICAgICAgY2hhciAqcmVhZF9wdHI7CistCistICAgICAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbWFsbG9jIChzaXplKTsKKy0gICAgICBpZiAoZGF0YSA9PSBOVUxMKQorLQlnb3RvIG91dDsKKy0KKy0gICAgICB0b19yZWFkID0gc2l6ZTsKKy0gICAgICByZWFkX3B0ciA9IChjaGFyICopIGRhdGE7CistICAgICAgZG8KKy0JeworLQkgIGxvbmcgaW50IG5iID0gKGxvbmcgaW50KSByZWFkIChmZCwgcmVhZF9wdHIsIHRvX3JlYWQpOworLQkgIGlmIChuYiA8PSAwKQorLQkgICAgeworLSNpZmRlZiBFSU5UUgorLQkgICAgICBpZiAobmIgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpCistCQljb250aW51ZTsKKy0jZW5kaWYKKy0JICAgICAgZ290byBvdXQ7CistCSAgICB9CistCSAgcmVhZF9wdHIgKz0gbmI7CistCSAgdG9fcmVhZCAtPSBuYjsKKy0JfQorLSAgICAgIHdoaWxlICh0b19yZWFkID4gMCk7CistCistICAgICAgY2xvc2UgKGZkKTsKKy0gICAgICBmZCA9IC0xOworLSAgICB9CistCistICAvKiBVc2luZyB0aGUgbWFnaWMgbnVtYmVyIHdlIGNhbiB0ZXN0IHdoZXRoZXIgaXQgcmVhbGx5IGlzIGEgbWVzc2FnZQorLSAgICAgY2F0YWxvZyBmaWxlLiAgKi8KKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkYXRhLT5tYWdpYyAhPSBfTUFHSUMgJiYgZGF0YS0+bWFnaWMgIT0gX01BR0lDX1NXQVBQRUQsCistCQkJMCkpCistICAgIHsKKy0gICAgICAvKiBUaGUgbWFnaWMgbnVtYmVyIGlzIHdyb25nOiBub3QgYSBtZXNzYWdlIGNhdGFsb2cgZmlsZS4gICovCistI2lmZGVmIEhBVkVfTU1BUAorLSAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc2l6ZSk7CistICAgICAgZWxzZQorLSNlbmRpZgorLQlmcmVlIChkYXRhKTsKKy0gICAgICBnb3RvIG91dDsKKy0gICAgfQorLQorLSAgZG9tYWluID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbikpOworLSAgaWYgKGRvbWFpbiA9PSBOVUxMKQorLSAgICBnb3RvIG91dDsKKy0gIGRvbWFpbl9maWxlLT5kYXRhID0gZG9tYWluOworLQorLSAgZG9tYWluLT5kYXRhID0gKGNoYXIgKikgZGF0YTsKKy0gIGRvbWFpbi0+dXNlX21tYXAgPSB1c2VfbW1hcDsKKy0gIGRvbWFpbi0+bW1hcF9zaXplID0gc2l6ZTsKKy0gIGRvbWFpbi0+bXVzdF9zd2FwID0gZGF0YS0+bWFnaWMgIT0gX01BR0lDOworLSAgZG9tYWluLT5tYWxsb2NlZCA9IE5VTEw7CistCistICAvKiBGaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXZhaWxhYmxlIHRhYmxlcy4gICovCistICByZXZpc2lvbiA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5yZXZpc2lvbik7CistICAvKiBXZSBzdXBwb3J0IG9ubHkgdGhlIG1ham9yIHJldmlzaW9ucyAwIGFuZCAxLiAgKi8KKy0gIHN3aXRjaCAocmV2aXNpb24gPj4gMTYpCistICAgIHsKKy0gICAgY2FzZSAwOgorLSAgICBjYXNlIDE6CistICAgICAgZG9tYWluLT5uc3RyaW5ncyA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uc3RyaW5ncyk7CistICAgICAgZG9tYWluLT5vcmlnX3RhYiA9IChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKy0JKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+b3JpZ190YWJfb2Zmc2V0KSk7CistICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICopCistCSgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnRyYW5zX3RhYl9vZmZzZXQpKTsKKy0gICAgICBkb21haW4tPmhhc2hfc2l6ZSA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9zaXplKTsKKy0gICAgICBkb21haW4tPmhhc2hfdGFiID0KKy0JKGRvbWFpbi0+aGFzaF9zaXplID4gMgorLQkgPyAoY29uc3QgbmxzX3VpbnQzMiAqKQorLQkgICAoKGNoYXIgKikgZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9vZmZzZXQpKQorLQkgOiBOVUxMKTsKKy0gICAgICBkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiA9IGRvbWFpbi0+bXVzdF9zd2FwOworLQorLSAgICAgIC8qIE5vdyBkaXNwYXRjaCBvbiB0aGUgbWlub3IgcmV2aXNpb24uICAqLworLSAgICAgIHN3aXRjaCAocmV2aXNpb24gJiAweGZmZmYpCistCXsKKy0JY2FzZSAwOgorLQkgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IDA7CistCSAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworLQkgIGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYiA9IE5VTEw7CistCSAgYnJlYWs7CistCWNhc2UgMToKKy0JZGVmYXVsdDoKKy0JICB7CistCSAgICBubHNfdWludDMyIG5fc3lzZGVwX3N0cmluZ3M7CistCistCSAgICBpZiAoZG9tYWluLT5oYXNoX3RhYiA9PSBOVUxMKQorLQkgICAgICAvKiBUaGlzIGlzIGludmFsaWQuICBUaGVzZSBtaW5vciByZXZpc2lvbnMgbmVlZCBhIGhhc2ggdGFibGUuICAqLworLQkgICAgICBnb3RvIGludmFsaWQ7CistCistCSAgICBuX3N5c2RlcF9zdHJpbmdzID0KKy0JICAgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm5fc3lzZGVwX3N0cmluZ3MpOworLQkgICAgaWYgKG5fc3lzZGVwX3N0cmluZ3MgPiAwKQorLQkgICAgICB7CistCQlubHNfdWludDMyIG5fc3lzZGVwX3NlZ21lbnRzOworLQkJY29uc3Qgc3RydWN0IHN5c2RlcF9zZWdtZW50ICpzeXNkZXBfc2VnbWVudHM7CistCQljb25zdCBjaGFyICoqc3lzZGVwX3NlZ21lbnRfdmFsdWVzOworLQkJY29uc3QgbmxzX3VpbnQzMiAqb3JpZ19zeXNkZXBfdGFiOworLQkJY29uc3QgbmxzX3VpbnQzMiAqdHJhbnNfc3lzZGVwX3RhYjsKKy0JCW5sc191aW50MzIgbl9pbm1lbV9zeXNkZXBfc3RyaW5nczsKKy0JCXNpemVfdCBtZW1uZWVkOworLQkJY2hhciAqbWVtOworLQkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fb3JpZ19zeXNkZXBfdGFiOworLQkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fdHJhbnNfc3lzZGVwX3RhYjsKKy0JCW5sc191aW50MzIgKmlubWVtX2hhc2hfdGFiOworLQkJdW5zaWduZWQgaW50IGksIGo7CistCistCQkvKiBHZXQgdGhlIHZhbHVlcyBvZiB0aGUgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50cy4gICovCistCQluX3N5c2RlcF9zZWdtZW50cyA9CistCQkgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uX3N5c2RlcF9zZWdtZW50cyk7CistCQlzeXNkZXBfc2VnbWVudHMgPSAoY29uc3Qgc3RydWN0IHN5c2RlcF9zZWdtZW50ICopCistCQkgICgoY2hhciAqKSBkYXRhCistCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5zeXNkZXBfc2VnbWVudHNfb2Zmc2V0KSk7CistCQlzeXNkZXBfc2VnbWVudF92YWx1ZXMgPQorLQkJICAoY29uc3QgY2hhciAqKikKKy0JCSAgYWxsb2NhIChuX3N5c2RlcF9zZWdtZW50cyAqIHNpemVvZiAoY29uc3QgY2hhciAqKSk7CistCQlmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc2VnbWVudHM7IGkrKykKKy0JCSAgeworLQkJICAgIGNvbnN0IGNoYXIgKm5hbWUgPQorLQkJICAgICAgKGNoYXIgKikgZGF0YQorLQkJICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgc3lzZGVwX3NlZ21lbnRzW2ldLm9mZnNldCk7CistCQkgICAgbmxzX3VpbnQzMiBuYW1lbGVuID0KKy0JCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc2VnbWVudHNbaV0ubGVuZ3RoKTsKKy0KKy0JCSAgICBpZiAoIShuYW1lbGVuID4gMCAmJiBuYW1lW25hbWVsZW4gLSAxXSA9PSAnXDAnKSkKKy0JCSAgICAgIHsKKy0JCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKy0JCQlnb3RvIGludmFsaWQ7CistCQkgICAgICB9CistCistCQkgICAgc3lzZGVwX3NlZ21lbnRfdmFsdWVzW2ldID0gZ2V0X3N5c2RlcF9zZWdtZW50X3ZhbHVlIChuYW1lKTsKKy0JCSAgfQorLQorLQkJb3JpZ19zeXNkZXBfdGFiID0gKGNvbnN0IG5sc191aW50MzIgKikKKy0JCSAgKChjaGFyICopIGRhdGEKKy0JCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm9yaWdfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKy0JCXRyYW5zX3N5c2RlcF90YWIgPSAoY29uc3QgbmxzX3VpbnQzMiAqKQorLQkJICAoKGNoYXIgKikgZGF0YQorLQkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+dHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKy0KKy0JCS8qIENvbXB1dGUgdGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsIG1lbW9yeSBuZWVkZWQgZm9yIHRoZQorLQkJICAgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFuZCB0aGUgYXVnbWVudGVkIGhhc2ggdGFibGUuCistCQkgICBBdCB0aGUgc2FtZSB0aW1lLCBhbHNvIGRyb3Agc3RyaW5nIHBhaXJzIHdoaWNoIHJlZmVyIHRvCistCQkgICBhbiB1bmRlZmluZWQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50LiAgKi8KKy0JCW5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPSAwOworLQkJbWVtbmVlZCA9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKy0JCWZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCistCQkgIHsKKy0JCSAgICBpbnQgdmFsaWQgPSAxOworLQkJICAgIHNpemVfdCBuZWVkc1syXTsKKy0KKy0JCSAgICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorLQkJICAgICAgeworLQkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKy0JCQkgIChjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqKQorLQkJCSAgKChjaGFyICopIGRhdGEKKy0JCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQlqID09IDAKKy0JCQkJPyBvcmlnX3N5c2RlcF90YWJbaV0KKy0JCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CistCQkJc2l6ZV90IG5lZWQgPSAwOworLQkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKy0KKy0JCQlpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZikgIT0gU0VHTUVOVFNfRU5EKQorLQkJCSAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCistCQkJICAgIHsKKy0JCQkgICAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKy0KKy0JCQkgICAgICBuZWVkICs9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zZWdzaXplKTsKKy0KKy0JCQkgICAgICBzeXNkZXByZWYgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKy0JCQkgICAgICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKy0JCQkJYnJlYWs7CistCistCQkJICAgICAgaWYgKHN5c2RlcHJlZiA+PSBuX3N5c2RlcF9zZWdtZW50cykKKy0JCQkJeworLQkJCQkgIC8qIEludmFsaWQuICAqLworLQkJCQkgIGZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworLQkJCQkgIGdvdG8gaW52YWxpZDsKKy0JCQkJfQorLQorLQkJCSAgICAgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorLQkJCQl7CistCQkJCSAgLyogVGhpcyBwYXJ0aWN1bGFyIHN0cmluZyBwYWlyIGlzIGludmFsaWQuICAqLworLQkJCQkgIHZhbGlkID0gMDsKKy0JCQkJICBicmVhazsKKy0JCQkJfQorLQorLQkJCSAgICAgIG5lZWQgKz0gc3RybGVuIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSk7CistCQkJICAgIH0KKy0KKy0JCQluZWVkc1tqXSA9IG5lZWQ7CistCQkJaWYgKCF2YWxpZCkKKy0JCQkgIGJyZWFrOworLQkJICAgICAgfQorLQorLQkJICAgIGlmICh2YWxpZCkKKy0JCSAgICAgIHsKKy0JCQluX2lubWVtX3N5c2RlcF9zdHJpbmdzKys7CistCQkJbWVtbmVlZCArPSBuZWVkc1swXSArIG5lZWRzWzFdOworLQkJICAgICAgfQorLQkJICB9CistCQltZW1uZWVkICs9IDIgKiBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCistCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworLQorLQkJaWYgKG5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPiAwKQorLQkJICB7CistCQkgICAgdW5zaWduZWQgaW50IGs7CistCistCQkgICAgLyogQWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkuICAqLworLQkJICAgIG1lbSA9IChjaGFyICopIG1hbGxvYyAobWVtbmVlZCk7CistCQkgICAgaWYgKG1lbSA9PSBOVUxMKQorLQkJICAgICAgZ290byBpbnZhbGlkOworLQorLQkJICAgIGRvbWFpbi0+bWFsbG9jZWQgPSBtZW07CistCQkgICAgaW5tZW1fb3JpZ19zeXNkZXBfdGFiID0gKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKikgbWVtOworLQkJICAgIG1lbSArPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCistCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworLQkJICAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWIgPSAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqKSBtZW07CistCQkgICAgbWVtICs9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3MKKy0JCQkgICAqIHNpemVvZiAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyk7CistCQkgICAgaW5tZW1faGFzaF90YWIgPSAobmxzX3VpbnQzMiAqKSBtZW07CistCQkgICAgbWVtICs9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKy0KKy0JCSAgICAvKiBDb21wdXRlIHRoZSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MuICAqLworLQkJICAgIGsgPSAwOworLQkJICAgIGZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCistCQkgICAgICB7CistCQkJaW50IHZhbGlkID0gMTsKKy0KKy0JCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorLQkJCSAgeworLQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqc3lzZGVwX3N0cmluZyA9CistCQkJICAgICAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCistCQkJICAgICAgKChjaGFyICopIGRhdGEKKy0JCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJICAgIGogPT0gMAorLQkJCQkgICAgPyBvcmlnX3N5c2RlcF90YWJbaV0KKy0JCQkJICAgIDogdHJhbnNfc3lzZGVwX3RhYltpXSkpOworLQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0KKy0JCQkgICAgICBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKy0KKy0JCQkgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpCistCQkJCSE9IFNFR01FTlRTX0VORCkKKy0JCQkgICAgICBmb3IgKHAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czs7IHArKykKKy0JCQkJeworLQkJCQkgIG5sc191aW50MzIgc3lzZGVwcmVmOworLQorLQkJCQkgIHN5c2RlcHJlZiA9CistCQkJCSAgICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKy0JCQkJICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKy0JCQkJICAgIGJyZWFrOworLQorLQkJCQkgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorLQkJCQkgICAgeworLQkJCQkgICAgICAvKiBUaGlzIHBhcnRpY3VsYXIgc3RyaW5nIHBhaXIgaXMKKy0JCQkJCSBpbnZhbGlkLiAgKi8KKy0JCQkJICAgICAgdmFsaWQgPSAwOworLQkJCQkgICAgICBicmVhazsKKy0JCQkJICAgIH0KKy0JCQkJfQorLQorLQkJCSAgICBpZiAoIXZhbGlkKQorLQkJCSAgICAgIGJyZWFrOworLQkJCSAgfQorLQorLQkJCWlmICh2YWxpZCkKKy0JCQkgIHsKKy0JCQkgICAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKy0JCQkgICAgICB7CistCQkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKy0JCQkJICAoY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKikKKy0JCQkJICAoKGNoYXIgKikgZGF0YQorLQkJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkJaiA9PSAwCistCQkJCQk/IG9yaWdfc3lzZGVwX3RhYltpXQorLQkJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CistCQkJCWNvbnN0IGNoYXIgKnN0YXRpY19zZWdtZW50cyA9CistCQkJCSAgKGNoYXIgKikgZGF0YQorLQkJCQkgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHN5c2RlcF9zdHJpbmctPm9mZnNldCk7CistCQkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPQorLQkJCQkgIHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworLQorLQkJCQkvKiBDb25jYXRlbmF0ZSB0aGUgc2VnbWVudHMsIGFuZCBmaWxsCistCQkJCSAgIGlubWVtX29yaWdfc3lzZGVwX3RhYltrXSAoZm9yIGogPT0gMCkgYW5kCistCQkJCSAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWJba10gKGZvciBqID09IDEpLiAgKi8KKy0KKy0JCQkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fdGFiX2VudHJ5ID0KKy0JCQkJICAoaiA9PSAwCistCQkJCSAgID8gaW5tZW1fb3JpZ19zeXNkZXBfdGFiCistCQkJCSAgIDogaW5tZW1fdHJhbnNfc3lzZGVwX3RhYikKKy0JCQkJICArIGs7CistCistCQkJCWlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKQorLQkJCQkgICAgPT0gU0VHTUVOVFNfRU5EKQorLQkJCQkgIHsKKy0JCQkJICAgIC8qIE9ubHkgb25lIHN0YXRpYyBzZWdtZW50LiAgKi8KKy0JCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+bGVuZ3RoID0KKy0JCQkJICAgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnNlZ3NpemUpOworLQkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyID0gc3RhdGljX3NlZ21lbnRzOworLQkJCQkgIH0KKy0JCQkJZWxzZQorLQkJCQkgIHsKKy0JCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlciA9IG1lbTsKKy0KKy0JCQkJICAgIGZvciAocCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOzsgcCsrKQorLQkJCQkgICAgICB7CistCQkJCQlubHNfdWludDMyIHNlZ3NpemUgPQorLQkJCQkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c2Vnc2l6ZSk7CistCQkJCQlubHNfdWludDMyIHN5c2RlcHJlZiA9CistCQkJCQkgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpOworLQkJCQkJc2l6ZV90IG47CistCistCQkJCQlpZiAoc2Vnc2l6ZSA+IDApCistCQkJCQkgIHsKKy0JCQkJCSAgICBtZW1jcHkgKG1lbSwgc3RhdGljX3NlZ21lbnRzLCBzZWdzaXplKTsKKy0JCQkJCSAgICBtZW0gKz0gc2Vnc2l6ZTsKKy0JCQkJCSAgICBzdGF0aWNfc2VnbWVudHMgKz0gc2Vnc2l6ZTsKKy0JCQkJCSAgfQorLQorLQkJCQkJaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCistCQkJCQkgIGJyZWFrOworLQorLQkJCQkJbiA9IHN0cmxlbiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0pOworLQkJCQkJbWVtY3B5IChtZW0sIHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdLCBuKTsKKy0JCQkJCW1lbSArPSBuOworLQkJCQkgICAgICB9CistCistCQkJCSAgICBpbm1lbV90YWJfZW50cnktPmxlbmd0aCA9CistCQkJCSAgICAgIG1lbSAtIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlcjsKKy0JCQkJICB9CistCQkJICAgICAgfQorLQorLQkJCSAgICBrKys7CistCQkJICB9CistCQkgICAgICB9CistCQkgICAgaWYgKGsgIT0gbl9pbm1lbV9zeXNkZXBfc3RyaW5ncykKKy0JCSAgICAgIGFib3J0ICgpOworLQorLQkJICAgIC8qIENvbXB1dGUgdGhlIGF1Z21lbnRlZCBoYXNoIHRhYmxlLiAgKi8KKy0JCSAgICBmb3IgKGkgPSAwOyBpIDwgZG9tYWluLT5oYXNoX3NpemU7IGkrKykKKy0JCSAgICAgIGlubWVtX2hhc2hfdGFiW2ldID0KKy0JCQlXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpXSk7CistCQkgICAgZm9yIChpID0gMDsgaSA8IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7IGkrKykKKy0JCSAgICAgIHsKKy0JCQljb25zdCBjaGFyICptc2dpZCA9IGlubWVtX29yaWdfc3lzZGVwX3RhYltpXS5wb2ludGVyOworLQkJCW5sc191aW50MzIgaGFzaF92YWwgPSBfX2hhc2hfc3RyaW5nIChtc2dpZCk7CistCQkJbmxzX3VpbnQzMiBpZHggPSBoYXNoX3ZhbCAlIGRvbWFpbi0+aGFzaF9zaXplOworLQkJCW5sc191aW50MzIgaW5jciA9CistCQkJICAxICsgKGhhc2hfdmFsICUgKGRvbWFpbi0+aGFzaF9zaXplIC0gMikpOworLQorLQkJCWZvciAoOzspCistCQkJICB7CistCQkJICAgIGlmIChpbm1lbV9oYXNoX3RhYltpZHhdID09IDApCistCQkJICAgICAgeworLQkJCQkvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgVXNlIGl0LiAgKi8KKy0JCQkJaW5tZW1faGFzaF90YWJbaWR4XSA9IDEgKyBkb21haW4tPm5zdHJpbmdzICsgaTsKKy0JCQkJYnJlYWs7CistCQkJICAgICAgfQorLQorLQkJCSAgICBpZiAoaWR4ID49IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcikKKy0JCQkgICAgICBpZHggLT0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyOworLQkJCSAgICBlbHNlCistCQkJICAgICAgaWR4ICs9IGluY3I7CistCQkJICB9CistCQkgICAgICB9CistCistCQkgICAgZG9tYWluLT5uX3N5c2RlcF9zdHJpbmdzID0gbl9pbm1lbV9zeXNkZXBfc3RyaW5nczsKKy0JCSAgICBkb21haW4tPm9yaWdfc3lzZGVwX3RhYiA9IGlubWVtX29yaWdfc3lzZGVwX3RhYjsKKy0JCSAgICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBpbm1lbV90cmFuc19zeXNkZXBfdGFiOworLQorLQkJICAgIGRvbWFpbi0+aGFzaF90YWIgPSBpbm1lbV9oYXNoX3RhYjsKKy0JCSAgICBkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiA9IDA7CistCQkgIH0KKy0JCWVsc2UKKy0JCSAgeworLQkJICAgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IDA7CistCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworLQkJICAgIGRvbWFpbi0+dHJhbnNfc3lzZGVwX3RhYiA9IE5VTEw7CistCQkgIH0KKy0KKy0JCWZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworLQkgICAgICB9CistCSAgICBlbHNlCistCSAgICAgIHsKKy0JCWRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IDA7CistCQlkb21haW4tPm9yaWdfc3lzZGVwX3RhYiA9IE5VTEw7CistCQlkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworLQkgICAgICB9CistCSAgfQorLQkgIGJyZWFrOworLQl9CistICAgICAgYnJlYWs7CistICAgIGRlZmF1bHQ6CistICAgICAgLyogVGhpcyBpcyBhbiBpbnZhbGlkIHJldmlzaW9uLiAgKi8KKy0gICAgaW52YWxpZDoKKy0gICAgICAvKiBUaGlzIGlzIGFuIGludmFsaWQgLm1vIGZpbGUuICAqLworLSAgICAgIGlmIChkb21haW4tPm1hbGxvY2VkKQorLQlmcmVlIChkb21haW4tPm1hbGxvY2VkKTsKKy0jaWZkZWYgSEFWRV9NTUFQCistICAgICAgaWYgKHVzZV9tbWFwKQorLQltdW5tYXAgKChjYWRkcl90KSBkYXRhLCBzaXplKTsKKy0gICAgICBlbHNlCistI2VuZGlmCistCWZyZWUgKGRhdGEpOworLSAgICAgIGZyZWUgKGRvbWFpbik7CistICAgICAgZG9tYWluX2ZpbGUtPmRhdGEgPSBOVUxMOworLSAgICAgIGdvdG8gb3V0OworLSAgICB9CistCistICAvKiBObyBjYWNoZXMgb2YgY29udmVydGVkIHRyYW5zbGF0aW9ucyBzbyBmYXIuICAqLworLSAgZG9tYWluLT5jb252ZXJzaW9ucyA9IE5VTEw7CistICBkb21haW4tPm5jb252ZXJzaW9ucyA9IDA7CistICBnbF9yd2xvY2tfaW5pdCAoZG9tYWluLT5jb252ZXJzaW9uc19sb2NrKTsKKy0KKy0gIC8qIEdldCB0aGUgaGVhZGVyIGVudHJ5IGFuZCBsb29rIGZvciBhIHBsdXJhbCBzcGVjaWZpY2F0aW9uLiAgKi8KKy0jaWZkZWYgSU5fTElCR0xPQ0FMRQorLSAgbnVsbGVudHJ5ID0KKy0gICAgX25sX2ZpbmRfbXNnIChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZywgTlVMTCwgIiIsICZudWxsZW50cnlsZW4pOworLSNlbHNlCistICBudWxsZW50cnkgPSBfbmxfZmluZF9tc2cgKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nLCAiIiwgMCwgJm51bGxlbnRyeWxlbik7CistI2VuZGlmCistICBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChudWxsZW50cnksICZkb21haW4tPnBsdXJhbCwgJmRvbWFpbi0+bnBsdXJhbHMpOworLQorLSBvdXQ6CistICBpZiAoZmQgIT0gLTEpCistICAgIGNsb3NlIChmZCk7CistCistICBkb21haW5fZmlsZS0+ZGVjaWRlZCA9IDE7CistCistIGRvbmU6CistICBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlIChsb2NrKTsKKy19CistCistCistI2lmZGVmIF9MSUJDCistdm9pZAorLWludGVybmFsX2Z1bmN0aW9uIF9fbGliY19mcmVlcmVzX2ZuX3NlY3Rpb24KKy1fbmxfdW5sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbikKKy17CistICBzaXplX3QgaTsKKy0KKy0gIGlmIChkb21haW4tPnBsdXJhbCAhPSAmX19nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbCkKKy0gICAgX19nZXR0ZXh0X2ZyZWVfZXhwICgoc3RydWN0IGV4cHJlc3Npb24gKikgZG9tYWluLT5wbHVyYWwpOworLQorLSAgZm9yIChpID0gMDsgaSA8IGRvbWFpbi0+bmNvbnZlcnNpb25zOyBpKyspCistICAgIHsKKy0gICAgICBzdHJ1Y3QgY29udmVydGVkX2RvbWFpbiAqY29udmQgPSAmZG9tYWluLT5jb252ZXJzaW9uc1tpXTsKKy0KKy0gICAgICBmcmVlIChjb252ZC0+ZW5jb2RpbmcpOworLSAgICAgIGlmIChjb252ZC0+Y29udl90YWIgIT0gTlVMTCAmJiBjb252ZC0+Y29udl90YWIgIT0gKGNoYXIgKiopIC0xKQorLQlmcmVlIChjb252ZC0+Y29udl90YWIpOworLSAgICAgIGlmIChjb252ZC0+Y29udiAhPSAoX19nY29udl90KSAtMSkKKy0JX19nY29udl9jbG9zZSAoY29udmQtPmNvbnYpOworLSAgICB9CistICBpZiAoZG9tYWluLT5jb252ZXJzaW9ucyAhPSBOVUxMKQorLSAgICBmcmVlIChkb21haW4tPmNvbnZlcnNpb25zKTsKKy0gIF9fbGliY19yd2xvY2tfZmluaSAoZG9tYWluLT5jb252ZXJzaW9uc19sb2NrKTsKKy0KKy0gIGlmIChkb21haW4tPm1hbGxvY2VkKQorLSAgICBmcmVlIChkb21haW4tPm1hbGxvY2VkKTsKKy0KKy0jIGlmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKy0gIGlmIChkb21haW4tPnVzZV9tbWFwKQorLSAgICBtdW5tYXAgKChjYWRkcl90KSBkb21haW4tPmRhdGEsIGRvbWFpbi0+bW1hcF9zaXplKTsKKy0gIGVsc2UKKy0jIGVuZGlmCS8qIF9QT1NJWF9NQVBQRURfRklMRVMgKi8KKy0gICAgZnJlZSAoKHZvaWQgKikgZG9tYWluLT5kYXRhKTsKKy0KKy0gIGZyZWUgKGRvbWFpbik7CistfQorLSNlbmRpZgorLS0tIGEvaW50bC9sb2NhbGNoYXJzZXQuYworKysrIC9kZXYvbnVsbAorQEAgLTEsNDYxICswLDAgQEAKKy0vKiBEZXRlcm1pbmUgYSBjYW5vbmljYWwgbmFtZSBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLgorLQorLSAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uICAqLworLQorLSNpbmNsdWRlIDxjb25maWcuaD4KKy0KKy0vKiBTcGVjaWZpY2F0aW9uLiAgKi8KKy0jaW5jbHVkZSAibG9jYWxjaGFyc2V0LmgiCistCistI2luY2x1ZGUgPHN0ZGRlZi5oPgorLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistCistI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCistIyBkZWZpbmUgV0lOMzJfTkFUSVZFCistI2VuZGlmCistCistI2lmIGRlZmluZWQgX19FTVhfXworLS8qIEFzc3VtZSBFTVggcHJvZ3JhbSBydW5zIG9uIE9TLzIsIGV2ZW4gaWYgY29tcGlsZWQgdW5kZXIgRE9TLiAgKi8KKy0jIGRlZmluZSBPUzIKKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQgV0lOMzJfTkFUSVZFCistIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKy0jICBpbmNsdWRlIDxsYW5naW5mby5oPgorLSMgZWxzZQorLSMgIGlmIDAgLyogc2VlIGNvbW1lbnQgYmVsb3cgKi8KKy0jICAgaW5jbHVkZSA8bG9jYWxlLmg+CistIyAgZW5kaWYKKy0jIGVuZGlmCistIyBpZmRlZiBfX0NZR1dJTl9fCistIyAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKy0jICBpbmNsdWRlIDx3aW5kb3dzLmg+CistIyBlbmRpZgorLSNlbGlmIGRlZmluZWQgV0lOMzJfTkFUSVZFCistIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorLSMgaW5jbHVkZSA8d2luZG93cy5oPgorLSNlbmRpZgorLSNpZiBkZWZpbmVkIE9TMgorLSMgZGVmaW5lIElOQ0xfRE9TCistIyBpbmNsdWRlIDxvczIuaD4KKy0jZW5kaWYKKy0KKy0jaWYgRU5BQkxFX1JFTE9DQVRBQkxFCistIyBpbmNsdWRlICJyZWxvY2F0YWJsZS5oIgorLSNlbHNlCistIyBkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKy0jZW5kaWYKKy0KKy0vKiBHZXQgTElCRElSLiAgKi8KKy0jaWZuZGVmIExJQkRJUgorLSMgaW5jbHVkZSAiY29uZmlnbWFrZS5oIgorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCistICAvKiBXaW4zMiwgQ3lnd2luLCBPUy8yLCBET1MgKi8KKy0jIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorLSNlbmRpZgorLQorLSNpZm5kZWYgRElSRUNUT1JZX1NFUEFSQVRPUgorLSMgZGVmaW5lIERJUkVDVE9SWV9TRVBBUkFUT1IgJy8nCistI2VuZGlmCistCistI2lmbmRlZiBJU1NMQVNICistIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09IERJUkVDVE9SWV9TRVBBUkFUT1IpCistI2VuZGlmCistCistI2lmIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VECistIyB1bmRlZiBnZXRjCistIyBkZWZpbmUgZ2V0YyBnZXRjX3VubG9ja2VkCistI2VuZGlmCistCistLyogVGhlIGZvbGxvd2luZyBzdGF0aWMgdmFyaWFibGUgaXMgZGVjbGFyZWQgJ3ZvbGF0aWxlJyB0byBhdm9pZCBhCistICAgcG9zc2libGUgbXVsdGl0aHJlYWQgcHJvYmxlbSBpbiB0aGUgZnVuY3Rpb24gZ2V0X2NoYXJzZXRfYWxpYXNlcy4gSWYgd2UKKy0gICBhcmUgcnVubmluZyBpbiBhIHRocmVhZGVkIGVudmlyb25tZW50LCBhbmQgaWYgdHdvIHRocmVhZHMgaW5pdGlhbGl6ZQorLSAgICdjaGFyc2V0X2FsaWFzZXMnIHNpbXVsdGFuZW91c2x5LCBib3RoIHdpbGwgcHJvZHVjZSB0aGUgc2FtZSB2YWx1ZSwKKy0gICBhbmQgZXZlcnl0aGluZyB3aWxsIGJlIG9rIGlmIHRoZSB0d28gYXNzaWdubWVudHMgdG8gJ2NoYXJzZXRfYWxpYXNlcycKKy0gICBhcmUgYXRvbWljLiBCdXQgSSBkb24ndCBrbm93IHdoYXQgd2lsbCBoYXBwZW4gaWYgdGhlIHR3byBhc3NpZ25tZW50cyBtaXguICAqLworLSNpZiBfX1NURENfXyAhPSAxCistIyBkZWZpbmUgdm9sYXRpbGUgLyogZW1wdHkgKi8KKy0jZW5kaWYKKy0vKiBQb2ludGVyIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuCistICAgcmVhZCwgZWxzZSBOVUxMLiAgSXRzIGZvcm1hdCBpczoKKy0gICBBTElBU18xICdcMCcgQ0FOT05JQ0FMXzEgJ1wwJyAuLi4gQUxJQVNfbiAnXDAnIENBTk9OSUNBTF9uICdcMCcgJ1wwJyAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqIHZvbGF0aWxlIGNoYXJzZXRfYWxpYXNlczsKKy0KKy0vKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqCistZ2V0X2NoYXJzZXRfYWxpYXNlcyAodm9pZCkKKy17CistICBjb25zdCBjaGFyICpjcDsKKy0KKy0gIGNwID0gY2hhcnNldF9hbGlhc2VzOworLSAgaWYgKGNwID09IE5VTEwpCistICAgIHsKKy0jaWYgIShkZWZpbmVkIFZNUyB8fCBkZWZpbmVkIFdJTjMyX05BVElWRSB8fCBkZWZpbmVkIF9fQ1lHV0lOX18pCistICAgICAgRklMRSAqZnA7CistICAgICAgY29uc3QgY2hhciAqZGlyOworLSAgICAgIGNvbnN0IGNoYXIgKmJhc2UgPSAiY2hhcnNldC5hbGlhcyI7CistICAgICAgY2hhciAqZmlsZV9uYW1lOworLQorLSAgICAgIC8qIE1ha2UgaXQgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIGNoYXJzZXQuYWxpYXMgbG9jYXRpb24uICBUaGlzIGlzCistCSBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzdWl0ZSBiZWZvcmUgIm1ha2UgaW5zdGFsbCIuICAqLworLSAgICAgIGRpciA9IGdldGVudiAoIkNIQVJTRVRBTElBU0RJUiIpOworLSAgICAgIGlmIChkaXIgPT0gTlVMTCB8fCBkaXJbMF0gPT0gJ1wwJykKKy0JZGlyID0gcmVsb2NhdGUgKExJQkRJUik7CistCistICAgICAgLyogQ29uY2F0ZW5hdGUgZGlyIGFuZCBiYXNlIGludG8gZnJlc2hseSBhbGxvY2F0ZWQgZmlsZV9uYW1lLiAgKi8KKy0gICAgICB7CistCXNpemVfdCBkaXJfbGVuID0gc3RybGVuIChkaXIpOworLQlzaXplX3QgYmFzZV9sZW4gPSBzdHJsZW4gKGJhc2UpOworLQlpbnQgYWRkX3NsYXNoID0gKGRpcl9sZW4gPiAwICYmICFJU1NMQVNIIChkaXJbZGlyX2xlbiAtIDFdKSk7CistCWZpbGVfbmFtZSA9IChjaGFyICopIG1hbGxvYyAoZGlyX2xlbiArIGFkZF9zbGFzaCArIGJhc2VfbGVuICsgMSk7CistCWlmIChmaWxlX25hbWUgIT0gTlVMTCkKKy0JICB7CistCSAgICBtZW1jcHkgKGZpbGVfbmFtZSwgZGlyLCBkaXJfbGVuKTsKKy0JICAgIGlmIChhZGRfc2xhc2gpCistCSAgICAgIGZpbGVfbmFtZVtkaXJfbGVuXSA9IERJUkVDVE9SWV9TRVBBUkFUT1I7CistCSAgICBtZW1jcHkgKGZpbGVfbmFtZSArIGRpcl9sZW4gKyBhZGRfc2xhc2gsIGJhc2UsIGJhc2VfbGVuICsgMSk7CistCSAgfQorLSAgICAgIH0KKy0KKy0gICAgICBpZiAoZmlsZV9uYW1lID09IE5VTEwgfHwgKGZwID0gZm9wZW4gKGZpbGVfbmFtZSwgInIiKSkgPT0gTlVMTCkKKy0JLyogT3V0IG9mIG1lbW9yeSBvciBmaWxlIG5vdCBmb3VuZCwgdHJlYXQgaXQgYXMgZW1wdHkuICAqLworLQljcCA9ICIiOworLSAgICAgIGVsc2UKKy0JeworLQkgIC8qIFBhcnNlIHRoZSBmaWxlJ3MgY29udGVudHMuICAqLworLQkgIGNoYXIgKnJlc19wdHIgPSBOVUxMOworLQkgIHNpemVfdCByZXNfc2l6ZSA9IDA7CistCistCSAgZm9yICg7OykKKy0JICAgIHsKKy0JICAgICAgaW50IGM7CistCSAgICAgIGNoYXIgYnVmMVs1MCsxXTsKKy0JICAgICAgY2hhciBidWYyWzUwKzFdOworLQkgICAgICBzaXplX3QgbDEsIGwyOworLQkgICAgICBjaGFyICpvbGRfcmVzX3B0cjsKKy0KKy0JICAgICAgYyA9IGdldGMgKGZwKTsKKy0JICAgICAgaWYgKGMgPT0gRU9GKQorLQkJYnJlYWs7CistCSAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorLQkJY29udGludWU7CistCSAgICAgIGlmIChjID09ICcjJykKKy0JCXsKKy0JCSAgLyogU2tpcCBjb21tZW50LCB0byBlbmQgb2YgbGluZS4gICovCistCQkgIGRvCistCQkgICAgYyA9IGdldGMgKGZwKTsKKy0JCSAgd2hpbGUgKCEoYyA9PSBFT0YgfHwgYyA9PSAnXG4nKSk7CistCQkgIGlmIChjID09IEVPRikKKy0JCSAgICBicmVhazsKKy0JCSAgY29udGludWU7CistCQl9CistCSAgICAgIHVuZ2V0YyAoYywgZnApOworLQkgICAgICBpZiAoZnNjYW5mIChmcCwgIiU1MHMgJTUwcyIsIGJ1ZjEsIGJ1ZjIpIDwgMikKKy0JCWJyZWFrOworLQkgICAgICBsMSA9IHN0cmxlbiAoYnVmMSk7CistCSAgICAgIGwyID0gc3RybGVuIChidWYyKTsKKy0JICAgICAgb2xkX3Jlc19wdHIgPSByZXNfcHRyOworLQkgICAgICBpZiAocmVzX3NpemUgPT0gMCkKKy0JCXsKKy0JCSAgcmVzX3NpemUgPSBsMSArIDEgKyBsMiArIDE7CistCQkgIHJlc19wdHIgPSAoY2hhciAqKSBtYWxsb2MgKHJlc19zaXplICsgMSk7CistCQl9CistCSAgICAgIGVsc2UKKy0JCXsKKy0JCSAgcmVzX3NpemUgKz0gbDEgKyAxICsgbDIgKyAxOworLQkJICByZXNfcHRyID0gKGNoYXIgKikgcmVhbGxvYyAocmVzX3B0ciwgcmVzX3NpemUgKyAxKTsKKy0JCX0KKy0JICAgICAgaWYgKHJlc19wdHIgPT0gTlVMTCkKKy0JCXsKKy0JCSAgLyogT3V0IG9mIG1lbW9yeS4gKi8KKy0JCSAgcmVzX3NpemUgPSAwOworLQkJICBpZiAob2xkX3Jlc19wdHIgIT0gTlVMTCkKKy0JCSAgICBmcmVlIChvbGRfcmVzX3B0cik7CistCQkgIGJyZWFrOworLQkJfQorLQkgICAgICBzdHJjcHkgKHJlc19wdHIgKyByZXNfc2l6ZSAtIChsMiArIDEpIC0gKGwxICsgMSksIGJ1ZjEpOworLQkgICAgICBzdHJjcHkgKHJlc19wdHIgKyByZXNfc2l6ZSAtIChsMiArIDEpLCBidWYyKTsKKy0JICAgIH0KKy0JICBmY2xvc2UgKGZwKTsKKy0JICBpZiAocmVzX3NpemUgPT0gMCkKKy0JICAgIGNwID0gIiI7CistCSAgZWxzZQorLQkgICAgeworLQkgICAgICAqKHJlc19wdHIgKyByZXNfc2l6ZSkgPSAnXDAnOworLQkgICAgICBjcCA9IHJlc19wdHI7CistCSAgICB9CistCX0KKy0KKy0gICAgICBpZiAoZmlsZV9uYW1lICE9IE5VTEwpCistCWZyZWUgKGZpbGVfbmFtZSk7CistCistI2Vsc2UKKy0KKy0jIGlmIGRlZmluZWQgVk1TCistICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGFuIGV4dHJhIGZpbGUgY2hhcnNldC5hbGlhc192bXMgaW4gdGhlCistCSBzb3VyY2VzIG9mIG1hbnkgR05VIHBhY2thZ2VzLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworLSAgICAgIC8qIFRoZSBsaXN0IG9mIGVuY29kaW5ncyBpcyB0YWtlbiBmcm9tIHRoZSBPcGVuVk1TIDcuMy0xIGRvY3VtZW50YXRpb24KKy0JICJDb21wYXEgQyBSdW4tVGltZSBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwgZm9yIE9wZW5WTVMgc3lzdGVtcyIKKy0JIHNlY3Rpb24gMTAuNyAiSGFuZGxpbmcgRGlmZmVyZW50IENoYXJhY3RlciBTZXRzIi4gICovCistICAgICAgY3AgPSAiSVNPODg1OS0xIiAiXDAiICJJU08tODg1OS0xIiAiXDAiCistCSAgICJJU084ODU5LTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKy0JICAgIklTTzg4NTktNSIgIlwwIiAiSVNPLTg4NTktNSIgIlwwIgorLQkgICAiSVNPODg1OS03IiAiXDAiICJJU08tODg1OS03IiAiXDAiCistCSAgICJJU084ODU5LTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKy0JICAgIklTTzg4NTktOSIgIlwwIiAiSVNPLTg4NTktOSIgIlwwIgorLQkgICAvKiBKYXBhbmVzZSAqLworLQkgICAiZXVjSlAiICJcMCIgIkVVQy1KUCIgIlwwIgorLQkgICAiU0pJUyIgIlwwIiAiU0hJRlRfSklTIiAiXDAiCistCSAgICJERUNLQU5KSSIgIlwwIiAiREVDLUtBTkpJIiAiXDAiCistCSAgICJTREVDS0FOSkkiICJcMCIgIkVVQy1KUCIgIlwwIgorLQkgICAvKiBDaGluZXNlICovCistCSAgICJldWNUVyIgIlwwIiAiRVVDLVRXIiAiXDAiCistCSAgICJERUNIQU5ZVSIgIlwwIiAiREVDLUhBTllVIiAiXDAiCistCSAgICJERUNIQU5aSSIgIlwwIiAiR0IyMzEyIiAiXDAiCistCSAgIC8qIEtvcmVhbiAqLworLQkgICAiREVDS09SRUFOIiAiXDAiICJFVUMtS1IiICJcMCI7CistIyBlbmRpZgorLQorLSMgaWYgZGVmaW5lZCBXSU4zMl9OQVRJVkUgfHwgZGVmaW5lZCBfX0NZR1dJTl9fCistICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGluc3RhbGxpbmcgYSBzZXBhcmF0ZSBmaWxlIGluIHRoZSBzYW1lCistCSBkaXJlY3RvcnkgYXMgdGhlIERMTCBhbmQgb2YgcmV0cmlldmluZyB0aGUgRExMJ3MgZGlyZWN0b3J5IGF0CistCSBydW50aW1lLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworLQorLSAgICAgIGNwID0gIkNQOTM2IiAiXDAiICJHQksiICJcMCIKKy0JICAgIkNQMTM2MSIgIlwwIiAiSk9IQUIiICJcMCIKKy0JICAgIkNQMjAxMjciICJcMCIgIkFTQ0lJIiAiXDAiCistCSAgICJDUDIwODY2IiAiXDAiICJLT0k4LVIiICJcMCIKKy0JICAgIkNQMjA5MzYiICJcMCIgIkdCMjMxMiIgIlwwIgorLQkgICAiQ1AyMTg2NiIgIlwwIiAiS09JOC1SVSIgIlwwIgorLQkgICAiQ1AyODU5MSIgIlwwIiAiSVNPLTg4NTktMSIgIlwwIgorLQkgICAiQ1AyODU5MiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorLQkgICAiQ1AyODU5MyIgIlwwIiAiSVNPLTg4NTktMyIgIlwwIgorLQkgICAiQ1AyODU5NCIgIlwwIiAiSVNPLTg4NTktNCIgIlwwIgorLQkgICAiQ1AyODU5NSIgIlwwIiAiSVNPLTg4NTktNSIgIlwwIgorLQkgICAiQ1AyODU5NiIgIlwwIiAiSVNPLTg4NTktNiIgIlwwIgorLQkgICAiQ1AyODU5NyIgIlwwIiAiSVNPLTg4NTktNyIgIlwwIgorLQkgICAiQ1AyODU5OCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorLQkgICAiQ1AyODU5OSIgIlwwIiAiSVNPLTg4NTktOSIgIlwwIgorLQkgICAiQ1AyODYwNSIgIlwwIiAiSVNPLTg4NTktMTUiICJcMCIKKy0JICAgIkNQMzg1OTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKy0JICAgIkNQNTE5MzIiICJcMCIgIkVVQy1KUCIgIlwwIgorLQkgICAiQ1A1MTkzNiIgIlwwIiAiR0IyMzEyIiAiXDAiCistCSAgICJDUDUxOTQ5IiAiXDAiICJFVUMtS1IiICJcMCIKKy0JICAgIkNQNTE5NTAiICJcMCIgIkVVQy1UVyIgIlwwIgorLQkgICAiQ1A1NDkzNiIgIlwwIiAiR0IxODAzMCIgIlwwIgorLQkgICAiQ1A2NTAwMSIgIlwwIiAiVVRGLTgiICJcMCI7CistIyBlbmRpZgorLSNlbmRpZgorLQorLSAgICAgIGNoYXJzZXRfYWxpYXNlcyA9IGNwOworLSAgICB9CistCistICByZXR1cm4gY3A7CistfQorLQorLS8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFuZCBjYW5vbmljYWxpemUgaXQKKy0gICBpbnRvIG9uZSBvZiB0aGUgY2Fub25pY2FsIG5hbWVzIGxpc3RlZCBpbiBjb25maWcuY2hhcnNldC4KKy0gICBUaGUgcmVzdWx0IG11c3Qgbm90IGJlIGZyZWVkOyBpdCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KKy0gICBJZiB0aGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZSByZXN1bHQgaXMgYSBub24tY2Fub25pY2FsCistICAgbmFtZS4gICovCistCistI2lmZGVmIFNUQVRJQworLVNUQVRJQworLSNlbmRpZgorLWNvbnN0IGNoYXIgKgorLWxvY2FsZV9jaGFyc2V0ICh2b2lkKQorLXsKKy0gIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CistICBjb25zdCBjaGFyICphbGlhc2VzOworLQorLSNpZiAhKGRlZmluZWQgV0lOMzJfTkFUSVZFIHx8IGRlZmluZWQgT1MyKQorLQorLSMgaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCistCistICAvKiBNb3N0IHN5c3RlbXMgc3VwcG9ydCBubF9sYW5naW5mbyAoQ09ERVNFVCkgbm93YWRheXMuICAqLworLSAgY29kZXNldCA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKy0KKy0jICBpZmRlZiBfX0NZR1dJTl9fCistICAvKiBDeWd3aW4gMjAwNiBkb2VzIG5vdCBoYXZlIGxvY2FsZXMuICBubF9sYW5naW5mbyAoQ09ERVNFVCkgYWx3YXlzCistICAgICByZXR1cm5zICJVUy1BU0NJSSIuICBBcyBsb25nIGFzIHRoaXMgaXMgbm90IGZpeGVkLCByZXR1cm4gdGhlIHN1ZmZpeAorLSAgICAgb2YgdGhlIGxvY2FsZSBuYW1lIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAoaWYgcHJlc2VudCkgb3IKKy0gICAgIHRoZSBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCistICBpZiAoY29kZXNldCAhPSBOVUxMICYmIHN0cmNtcCAoY29kZXNldCwgIlVTLUFTQ0lJIikgPT0gMCkKKy0gICAgeworLSAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKy0gICAgICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CistCistICAgICAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQUxMIik7CistICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorLQl7CistCSAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQ1RZUEUiKTsKKy0JICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCistCSAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CistCX0KKy0gICAgICBpZiAobG9jYWxlICE9IE5VTEwgJiYgbG9jYWxlWzBdICE9ICdcMCcpCistCXsKKy0JICAvKiBJZiB0aGUgbG9jYWxlIG5hbWUgY29udGFpbnMgYW4gZW5jb2RpbmcgYWZ0ZXIgdGhlIGRvdCwgcmV0dXJuCistCSAgICAgaXQuICAqLworLQkgIGNvbnN0IGNoYXIgKmRvdCA9IHN0cmNociAobG9jYWxlLCAnLicpOworLQorLQkgIGlmIChkb3QgIT0gTlVMTCkKKy0JICAgIHsKKy0JICAgICAgY29uc3QgY2hhciAqbW9kaWZpZXI7CistCistCSAgICAgIGRvdCsrOworLQkgICAgICAvKiBMb29rIGZvciB0aGUgcG9zc2libGUgQC4uLiB0cmFpbGVyIGFuZCByZW1vdmUgaXQsIGlmIGFueS4gICovCistCSAgICAgIG1vZGlmaWVyID0gc3RyY2hyIChkb3QsICdAJyk7CistCSAgICAgIGlmIChtb2RpZmllciA9PSBOVUxMKQorLQkJcmV0dXJuIGRvdDsKKy0JICAgICAgaWYgKG1vZGlmaWVyIC0gZG90IDwgc2l6ZW9mIChidWYpKQorLQkJeworLQkJICBtZW1jcHkgKGJ1ZiwgZG90LCBtb2RpZmllciAtIGRvdCk7CistCQkgIGJ1ZiBbbW9kaWZpZXIgLSBkb3RdID0gJ1wwJzsKKy0JCSAgcmV0dXJuIGJ1ZjsKKy0JCX0KKy0JICAgIH0KKy0JfQorLQorLSAgICAgIC8qIFdvZTMyIGhhcyBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbG9jYWxlJ3MgY29kZXBhZ2UgYXMgYSBudW1iZXIuICAqLworLSAgICAgIHNwcmludGYgKGJ1ZiwgIkNQJXUiLCBHZXRBQ1AgKCkpOworLSAgICAgIGNvZGVzZXQgPSBidWY7CistICAgIH0KKy0jICBlbmRpZgorLQorLSMgZWxzZQorLQorLSAgLyogT24gb2xkIHN5c3RlbXMgd2hpY2ggbGFjayBpdCwgdXNlIHNldGxvY2FsZSBvciBnZXRlbnYuICAqLworLSAgY29uc3QgY2hhciAqbG9jYWxlID0gTlVMTDsKKy0KKy0gIC8qIEJ1dCBtb3N0IG9sZCBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbG9jYWxlcy4gIFNvbWUKKy0gICAgIChsaWtlIFN1bk9TIDQgb3IgREpHUFApIGhhdmUgb25seSB0aGUgQyBsb2NhbGUuICBUaGVyZWZvcmUgd2UgZG9uJ3QKKy0gICAgIHVzZSBzZXRsb2NhbGUgaGVyZTsgaXQgd291bGQgcmV0dXJuICJDIiB3aGVuIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUKKy0gICAgIGxvY2FsZSBuYW1lIHRoZSB1c2VyIGhhcyBzZXQuICAqLworLSMgIGlmIDAKKy0gIGxvY2FsZSA9IHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpOworLSMgIGVuZGlmCistICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKy0gICAgICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCistCXsKKy0JICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworLQkgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKy0JICAgIGxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKy0JfQorLSAgICB9CistCistICAvKiBPbiBzb21lIG9sZCBzeXN0ZW1zLCBvbmUgdXNlZCB0byBzZXQgbG9jYWxlID0gImlzbzg4NTlfMSIuIE9uIG90aGVycywKKy0gICAgIHlvdSBzZXQgaXQgdG8gImxhbmd1YWdlX0NPVU5UUlkuY2hhcnNldCIuIEluIGFueSBjYXNlLCB3ZSByZXNvbHZlIGl0CistICAgICB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworLSAgY29kZXNldCA9IGxvY2FsZTsKKy0KKy0jIGVuZGlmCistCistI2VsaWYgZGVmaW5lZCBXSU4zMl9OQVRJVkUKKy0KKy0gIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKy0KKy0gIC8qIFdvZTMyIGhhcyBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbG9jYWxlJ3MgY29kZXBhZ2UgYXMgYSBudW1iZXIuICAqLworLSAgc3ByaW50ZiAoYnVmLCAiQ1AldSIsIEdldEFDUCAoKSk7CistICBjb2Rlc2V0ID0gYnVmOworLQorLSNlbGlmIGRlZmluZWQgT1MyCistCistICBjb25zdCBjaGFyICpsb2NhbGU7CistICBzdGF0aWMgY2hhciBidWZbMiArIDEwICsgMV07CistICBVTE9ORyBjcFszXTsKKy0gIFVMT05HIGNwbGVuOworLQorLSAgLyogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgY29kZXNldCwgYXMgc2V0IGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtLAorLSAgICAgd2l0aCBzdGFuZGFyZCBsYW5ndWFnZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLworLSAgbG9jYWxlID0gZ2V0ZW52ICgiTENfQUxMIik7CistICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworLSAgICAgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKy0JbG9jYWxlID0gZ2V0ZW52ICgiTEFORyIpOworLSAgICB9CistICBpZiAobG9jYWxlICE9IE5VTEwgJiYgbG9jYWxlWzBdICE9ICdcMCcpCistICAgIHsKKy0gICAgICAvKiBJZiB0aGUgbG9jYWxlIG5hbWUgY29udGFpbnMgYW4gZW5jb2RpbmcgYWZ0ZXIgdGhlIGRvdCwgcmV0dXJuIGl0LiAgKi8KKy0gICAgICBjb25zdCBjaGFyICpkb3QgPSBzdHJjaHIgKGxvY2FsZSwgJy4nKTsKKy0KKy0gICAgICBpZiAoZG90ICE9IE5VTEwpCistCXsKKy0JICBjb25zdCBjaGFyICptb2RpZmllcjsKKy0KKy0JICBkb3QrKzsKKy0JICAvKiBMb29rIGZvciB0aGUgcG9zc2libGUgQC4uLiB0cmFpbGVyIGFuZCByZW1vdmUgaXQsIGlmIGFueS4gICovCistCSAgbW9kaWZpZXIgPSBzdHJjaHIgKGRvdCwgJ0AnKTsKKy0JICBpZiAobW9kaWZpZXIgPT0gTlVMTCkKKy0JICAgIHJldHVybiBkb3Q7CistCSAgaWYgKG1vZGlmaWVyIC0gZG90IDwgc2l6ZW9mIChidWYpKQorLQkgICAgeworLQkgICAgICBtZW1jcHkgKGJ1ZiwgZG90LCBtb2RpZmllciAtIGRvdCk7CistCSAgICAgIGJ1ZiBbbW9kaWZpZXIgLSBkb3RdID0gJ1wwJzsKKy0JICAgICAgcmV0dXJuIGJ1ZjsKKy0JICAgIH0KKy0JfQorLQorLSAgICAgIC8qIFJlc29sdmUgdGhyb3VnaCB0aGUgY2hhcnNldC5hbGlhcyBmaWxlLiAgKi8KKy0gICAgICBjb2Rlc2V0ID0gbG9jYWxlOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBPUy8yIGhhcyBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgbG9jYWxlJ3MgY29kZXBhZ2UgYXMgYSBudW1iZXIuICAqLworLSAgICAgIGlmIChEb3NRdWVyeUNwIChzaXplb2YgKGNwKSwgY3AsICZjcGxlbikpCistCWNvZGVzZXQgPSAiIjsKKy0gICAgICBlbHNlCistCXsKKy0JICBzcHJpbnRmIChidWYsICJDUCV1IiwgY3BbMF0pOworLQkgIGNvZGVzZXQgPSBidWY7CistCX0KKy0gICAgfQorLQorLSNlbmRpZgorLQorLSAgaWYgKGNvZGVzZXQgPT0gTlVMTCkKKy0gICAgLyogVGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLiAgKi8KKy0gICAgY29kZXNldCA9ICIiOworLQorLSAgLyogUmVzb2x2ZSBhbGlhcy4gKi8KKy0gIGZvciAoYWxpYXNlcyA9IGdldF9jaGFyc2V0X2FsaWFzZXMgKCk7CistICAgICAgICphbGlhc2VzICE9ICdcMCc7CistICAgICAgIGFsaWFzZXMgKz0gc3RybGVuIChhbGlhc2VzKSArIDEsIGFsaWFzZXMgKz0gc3RybGVuIChhbGlhc2VzKSArIDEpCistICAgIGlmIChzdHJjbXAgKGNvZGVzZXQsIGFsaWFzZXMpID09IDAKKy0JfHwgKGFsaWFzZXNbMF0gPT0gJyonICYmIGFsaWFzZXNbMV0gPT0gJ1wwJykpCistICAgICAgeworLQljb2Rlc2V0ID0gYWxpYXNlcyArIHN0cmxlbiAoYWxpYXNlcykgKyAxOworLQlicmVhazsKKy0gICAgICB9CistCistICAvKiBEb24ndCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiAgR05VIGxpYmMgYW5kIEdOVSBsaWJpY29udiBpbnRlcnByZXQKKy0gICAgIHRoZSBlbXB0eSBzdHJpbmcgYXMgZGVub3RpbmcgInRoZSBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmciLAorLSAgICAgdGh1cyBHTlUgbGliaWNvbnYgd291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGEgc2Vjb25kIHRpbWUuICAqLworLSAgaWYgKGNvZGVzZXRbMF0gPT0gJ1wwJykKKy0gICAgY29kZXNldCA9ICJBU0NJSSI7CistCistICByZXR1cm4gY29kZXNldDsKKy19CistLS0gYS9pbnRsL2xvY2FsY2hhcnNldC5oCisrKysgL2Rldi9udWxsCitAQCAtMSw0MiArMCwwIEBACistLyogRGV0ZXJtaW5lIGEgY2Fub25pY2FsIG5hbWUgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZy4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIENIQVJTRVQgTGlicmFyeS4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZm5kZWYgX0xPQ0FMQ0hBUlNFVF9ICistI2RlZmluZSBfTE9DQUxDSEFSU0VUX0gKKy0KKy0KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsKKy0jZW5kaWYKKy0KKy0KKy0vKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CistICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCistICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCistICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorLSAgIG5hbWUuICAqLworLWV4dGVybiBjb25zdCBjaGFyICogbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworLQorLQorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKy0jZW5kaWYKKy0KKy0KKy0jZW5kaWYgLyogX0xPQ0FMQ0hBUlNFVF9IICovCistLS0gYS9pbnRsL2xvY2FsZS5hbGlhcworKysrIC9kZXYvbnVsbAorQEAgLTEsNzcgKzAsMCBAQAorLSMgTG9jYWxlIG5hbWUgYWxpYXMgZGF0YSBiYXNlLgorLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsMjAwMywyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistIyBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0jIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0jIFVTQS4KKy0KKy0jIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9mCistIyB0aGUgWCBXaW5kb3cgU3lzdGVtLCB3aGljaCBub3JtYWxseSBjYW4gYmUgZm91bmQgaW4KKy0jCS91c3IvbGliL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzCistIyBBIHNpbmdsZSBsaW5lIGNvbnRhaW5zIHR3byBmaWVsZHM6IGFuIGFsaWFzIGFuZCBhIHN1YnN0aXR1dGlvbiB2YWx1ZS4KKy0jIEFsbCBlbnRyaWVzIGFyZSBjYXNlIGluZGVwZW5kZW50LgorLQorLSMgTm90ZTogVGhpcyBmaWxlIGlzIG9ic29sZXRlIGFuZCBpcyBrZXB0IGFyb3VuZCBmb3IgdGhlIHRpbWUgYmVpbmcgZm9yCistIyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgTm9ib2R5IHNob3VsZCByZWx5IG9uIHRoZSBuYW1lcyBkZWZpbmVkIGhlcmUuCistIyBMb2NhbGVzIHNob3VsZCBhbHdheXMgYmUgc3BlY2lmaWVkIGJ5IHRoZWlyIGZ1bGwgbmFtZS4KKy0KKy0jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogCistCistYm9rbWFsCQluYl9OTy5JU08tODg1OS0xCistYm9rbeVsCQluYl9OTy5JU08tODg1OS0xCistY2F0YWxhbgkJY2FfRVMuSVNPLTg4NTktMQorLWNyb2F0aWFuCWhyX0hSLklTTy04ODU5LTIKKy1jemVjaAkJY3NfQ1ouSVNPLTg4NTktMgorLWRhbmlzaCAgICAgICAgICBkYV9ESy5JU08tODg1OS0xCistZGFuc2sJCWRhX0RLLklTTy04ODU5LTEKKy1kZXV0c2NoCQlkZV9ERS5JU08tODg1OS0xCistZHV0Y2gJCW5sX05MLklTTy04ODU5LTEKKy1lZXN0aQkJZXRfRUUuSVNPLTg4NTktMQorLWVzdG9uaWFuCWV0X0VFLklTTy04ODU5LTEKKy1maW5uaXNoICAgICAgICAgZmlfRkkuSVNPLTg4NTktMQorLWZyYW7nYWlzCWZyX0ZSLklTTy04ODU5LTEKKy1mcmVuY2gJCWZyX0ZSLklTTy04ODU5LTEKKy1nYWxlZ28JCWdsX0VTLklTTy04ODU5LTEKKy1nYWxpY2lhbglnbF9FUy5JU08tODg1OS0xCistZ2VybWFuCQlkZV9ERS5JU08tODg1OS0xCistZ3JlZWsgICAgICAgICAgIGVsX0dSLklTTy04ODU5LTcKKy1oZWJyZXcgICAgICAgICAgaGVfSUwuSVNPLTg4NTktOAorLWhydmF0c2tpCWhyX0hSLklTTy04ODU5LTIKKy1odW5nYXJpYW4gICAgICAgaHVfSFUuSVNPLTg4NTktMgorLWljZWxhbmRpYyAgICAgICBpc19JUy5JU08tODg1OS0xCistaXRhbGlhbiAgICAgICAgIGl0X0lULklTTy04ODU5LTEKKy1qYXBhbmVzZQlqYV9KUC5ldWNKUAorLWphcGFuZXNlLmV1YwlqYV9KUC5ldWNKUAorLWphX0pQCQlqYV9KUC5ldWNKUAorLWphX0pQLnVqaXMJamFfSlAuZXVjSlAKKy1qYXBhbmVzZS5zamlzCWphX0pQLlNKSVMKKy1rb3JlYW4JCWtvX0tSLmV1Y0tSCista29yZWFuLmV1YyAJa29fS1IuZXVjS1IKKy1rb19LUgkJa29fS1IuZXVjS1IKKy1saXRodWFuaWFuICAgICAgbHRfTFQuSVNPLTg4NTktMTMKKy1ub19OTwkJbmJfTk8uSVNPLTg4NTktMQorLW5vX05PLklTTy04ODU5LTEgbmJfTk8uSVNPLTg4NTktMQorLW5vcndlZ2lhbiAgICAgICBuYl9OTy5JU08tODg1OS0xCistbnlub3JzawkJbm5fTk8uSVNPLTg4NTktMQorLXBvbGlzaCAgICAgICAgICBwbF9QTC5JU08tODg1OS0yCistcG9ydHVndWVzZSAgICAgIHB0X1BULklTTy04ODU5LTEKKy1yb21hbmlhbiAgICAgICAgcm9fUk8uSVNPLTg4NTktMgorLXJ1c3NpYW4gICAgICAgICBydV9SVS5JU08tODg1OS01Cistc2xvdmFrICAgICAgICAgIHNrX1NLLklTTy04ODU5LTIKKy1zbG92ZW5lICAgICAgICAgc2xfU0kuSVNPLTg4NTktMgorLXNsb3ZlbmlhbiAgICAgICBzbF9TSS5JU08tODg1OS0yCistc3BhbmlzaCAgICAgICAgIGVzX0VTLklTTy04ODU5LTEKKy1zd2VkaXNoICAgICAgICAgc3ZfU0UuSVNPLTg4NTktMQorLXRoYWkJCXRoX1RILlRJUy02MjAKKy10dXJraXNoICAgICAgICAgdHJfVFIuSVNPLTg4NTktOQorLS0tIGEvaW50bC9sb2NhbGVhbGlhcy5jCisrKysgL2Rldi9udWxsCitAQCAtMSw0MzkgKzAsMCBAQAorLS8qIEhhbmRsZSBhbGlhc2VzIGZvciBsb2NhbGUgbmFtZXMuCistICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMSwgMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgbWVtcGNweSgpLgorLSAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorLSAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKy0jaWZuZGVmIF9HTlVfU09VUkNFCistIyBkZWZpbmUgX0dOVV9TT1VSQ0UgICAgMQorLSNlbmRpZgorLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8Y3R5cGUuaD4KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfX19GU0VUTE9DS0lORworLSMgaW5jbHVkZSA8c3RkaW9fZXh0Lmg+CistI2VuZGlmCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQorLSNpZmRlZiBfX0dOVUNfXworLSMgdW5kZWYgYWxsb2NhCistIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKy0jIGRlZmluZSBIQVZFX0FMTE9DQSAxCistI2Vsc2UKKy0jIGlmZGVmIF9NU0NfVkVSCistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCistIyBlbHNlCistIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICAgaW5jbHVkZSA8YWxsb2NhLmg+CistIyAgZWxzZQorLSMgICBpZmRlZiBfQUlYCistICNwcmFnbWEgYWxsb2NhCistIyAgIGVsc2UKKy0jICAgIGlmbmRlZiBhbGxvY2EKKy1jaGFyICphbGxvY2EgKCk7CistIyAgICBlbmRpZgorLSMgICBlbmRpZgorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistCistI2luY2x1ZGUgImdldHRleHRQLmgiCistCistI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorLSMgaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKy0jZWxzZQorLSMgZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLSNpZmRlZiBfTElCQworLS8qIFJlbmFtZSB0aGUgbm9uIEFOU0kgQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorLSAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKy0gICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCistIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKy0KKy0jIGlmbmRlZiBtZW1wY3B5CistIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CistIyBlbmRpZgorLSMgZGVmaW5lIEhBVkVfTUVNUENQWQkxCistIyBkZWZpbmUgSEFWRV9fX0ZTRVRMT0NLSU5HCTEKKy0jZW5kaWYKKy0KKy0vKiBIYW5kbGUgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgImxvY2suaCIKKy0jZW5kaWYKKy0KKy0jaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCistIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKy0jZW5kaWYKKy0KKy0vKiBTb21lIG9wdGltaXphdGlvbnMgZm9yIGdsaWJjLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBGRU9GKGZwKQkJZmVvZl91bmxvY2tlZCAoZnApCistIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHNfdW5sb2NrZWQgKGJ1ZiwgbiwgZnApCistI2Vsc2UKKy0jIGRlZmluZSBGRU9GKGZwKQkJZmVvZiAoZnApCistIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHMgKGJ1ZiwgbiwgZnApCistI2VuZGlmCistCistLyogRm9yIHRob3NlIGxvc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKy0gICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworLSNpZmRlZiBIQVZFX0FMTE9DQQorLSMgZGVmaW5lIGZyZWVhKHApIC8qIG5vdGhpbmcgKi8KKy0jZWxzZQorLSMgZGVmaW5lIGFsbG9jYShuKSBtYWxsb2MgKG4pCistIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBfTElCQ19SRUVOVFJBTlQgfHwgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VECistIyB1bmRlZiBmZ2V0cworLSMgZGVmaW5lIGZnZXRzKGJ1ZiwgbGVuLCBzKSBmZ2V0c191bmxvY2tlZCAoYnVmLCBsZW4sIHMpCistI2VuZGlmCistI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECistIyB1bmRlZiBmZW9mCistIyBkZWZpbmUgZmVvZihzKSBmZW9mX3VubG9ja2VkIChzKQorLSNlbmRpZgorLQorLQorLV9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKQorLQorLQorLXN0cnVjdCBhbGlhc19tYXAKKy17CistICBjb25zdCBjaGFyICphbGlhczsKKy0gIGNvbnN0IGNoYXIgKnZhbHVlOworLX07CistCistCistI2lmbmRlZiBfTElCQworLSMgZGVmaW5lIGxpYmNfZnJlZXJlc19wdHIoZGVjbCkgZGVjbAorLSNlbmRpZgorLQorLWxpYmNfZnJlZXJlc19wdHIgKHN0YXRpYyBjaGFyICpzdHJpbmdfc3BhY2UpOworLXN0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX2FjdDsKKy1zdGF0aWMgc2l6ZV90IHN0cmluZ19zcGFjZV9tYXg7CistbGliY19mcmVlcmVzX3B0ciAoc3RhdGljIHN0cnVjdCBhbGlhc19tYXAgKm1hcCk7Cistc3RhdGljIHNpemVfdCBubWFwOworLXN0YXRpYyBzaXplX3QgbWF4bWFwOworLQorLQorLS8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCistc3RhdGljIHNpemVfdCByZWFkX2FsaWFzX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgZm5hbWVfbGVuKQorLSAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cistc3RhdGljIGludCBleHRlbmRfYWxpYXNfdGFibGUgKHZvaWQpOworLXN0YXRpYyBpbnQgYWxpYXNfY29tcGFyZSAoY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMSwKKy0JCQkgIGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDIpOworLQorLQorLWNvbnN0IGNoYXIgKgorLV9ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKm5hbWUpCisteworLSAgc3RhdGljIGNvbnN0IGNoYXIgKmxvY2FsZV9hbGlhc19wYXRoOworLSAgc3RydWN0IGFsaWFzX21hcCAqcmV0dmFsOworLSAgY29uc3QgY2hhciAqcmVzdWx0ID0gTlVMTDsKKy0gIHNpemVfdCBhZGRlZDsKKy0KKy0gIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworLQorLSAgaWYgKGxvY2FsZV9hbGlhc19wYXRoID09IE5VTEwpCistICAgIGxvY2FsZV9hbGlhc19wYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CistCistICBkbworLSAgICB7CistICAgICAgc3RydWN0IGFsaWFzX21hcCBpdGVtOworLQorLSAgICAgIGl0ZW0uYWxpYXMgPSBuYW1lOworLQorLSAgICAgIGlmIChubWFwID4gMCkKKy0JcmV0dmFsID0gKHN0cnVjdCBhbGlhc19tYXAgKikgYnNlYXJjaCAoJml0ZW0sIG1hcCwgbm1hcCwKKy0JCQkJCSAgICAgICBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApLAorLQkJCQkJICAgICAgIChpbnQgKCopIChjb25zdCB2b2lkICosCistCQkJCQkJCSBjb25zdCB2b2lkICopCistCQkJCQkJKSBhbGlhc19jb21wYXJlKTsKKy0gICAgICBlbHNlCistCXJldHZhbCA9IE5VTEw7CistCistICAgICAgLyogV2UgcmVhbGx5IGZvdW5kIGFuIGFsaWFzLiAgUmV0dXJuIHRoZSB2YWx1ZS4gICovCistICAgICAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQl7CistCSAgcmVzdWx0ID0gcmV0dmFsLT52YWx1ZTsKKy0JICBicmVhazsKKy0JfQorLQorLSAgICAgIC8qIFBlcmhhcHMgd2UgY2FuIGZpbmQgYW5vdGhlciBhbGlhcyBmaWxlLiAgKi8KKy0gICAgICBhZGRlZCA9IDA7CistICAgICAgd2hpbGUgKGFkZGVkID09IDAgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJ1wwJykKKy0JeworLQkgIGNvbnN0IGNoYXIgKnN0YXJ0OworLQorLQkgIHdoaWxlIChsb2NhbGVfYWxpYXNfcGF0aFswXSA9PSBQQVRIX1NFUEFSQVRPUikKKy0JICAgICsrbG9jYWxlX2FsaWFzX3BhdGg7CistCSAgc3RhcnQgPSBsb2NhbGVfYWxpYXNfcGF0aDsKKy0KKy0JICB3aGlsZSAobG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJ1wwJworLQkJICYmIGxvY2FsZV9hbGlhc19wYXRoWzBdICE9IFBBVEhfU0VQQVJBVE9SKQorLQkgICAgKytsb2NhbGVfYWxpYXNfcGF0aDsKKy0KKy0JICBpZiAoc3RhcnQgPCBsb2NhbGVfYWxpYXNfcGF0aCkKKy0JICAgIGFkZGVkID0gcmVhZF9hbGlhc19maWxlIChzdGFydCwgbG9jYWxlX2FsaWFzX3BhdGggLSBzdGFydCk7CistCX0KKy0gICAgfQorLSAgd2hpbGUgKGFkZGVkICE9IDApOworLQorLSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKy0KKy0gIHJldHVybiByZXN1bHQ7CistfQorLQorLQorLXN0YXRpYyBzaXplX3QKKy1pbnRlcm5hbF9mdW5jdGlvbgorLXJlYWRfYWxpYXNfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUsIGludCBmbmFtZV9sZW4pCisteworLSAgRklMRSAqZnA7CistICBjaGFyICpmdWxsX2ZuYW1lOworLSAgc2l6ZV90IGFkZGVkOworLSAgc3RhdGljIGNvbnN0IGNoYXIgYWxpYXNmaWxlW10gPSAiL2xvY2FsZS5hbGlhcyI7CistCistICBmdWxsX2ZuYW1lID0gKGNoYXIgKikgYWxsb2NhIChmbmFtZV9sZW4gKyBzaXplb2YgYWxpYXNmaWxlKTsKKy0jaWZkZWYgSEFWRV9NRU1QQ1BZCistICBtZW1wY3B5IChtZW1wY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKSwKKy0JICAgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKy0jZWxzZQorLSAgbWVtY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKTsKKy0gIG1lbWNweSAoJmZ1bGxfZm5hbWVbZm5hbWVfbGVuXSwgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKy0jZW5kaWYKKy0KKy0jaWZkZWYgX0xJQkMKKy0gIC8qIE5vdGUgdGhlIGZpbGUgaXMgb3BlbmVkIHdpdGggY2FuY2VsbGF0aW9uIGluIHRoZSBJL08gZnVuY3Rpb25zCistICAgICBkaXNhYmxlZC4gICovCistICBmcCA9IGZvcGVuIChyZWxvY2F0ZSAoZnVsbF9mbmFtZSksICJyYyIpOworLSNlbHNlCistICBmcCA9IGZvcGVuIChyZWxvY2F0ZSAoZnVsbF9mbmFtZSksICJyIik7CistI2VuZGlmCistICBmcmVlYSAoZnVsbF9mbmFtZSk7CistICBpZiAoZnAgPT0gTlVMTCkKKy0gICAgcmV0dXJuIDA7CistCistI2lmZGVmIEhBVkVfX19GU0VUTE9DS0lORworLSAgLyogTm8gdGhyZWFkcyBwcmVzZW50LiAgKi8KKy0gIF9fZnNldGxvY2tpbmcgKGZwLCBGU0VUTE9DS0lOR19CWUNBTExFUik7CistI2VuZGlmCistCistICBhZGRlZCA9IDA7CistICB3aGlsZSAoIUZFT0YgKGZwKSkKKy0gICAgeworLSAgICAgIC8qIEl0IGlzIGEgcmVhc29uYWJsZSBhcHByb2FjaCB0byB1c2UgYSBmaXggYnVmZmVyIGhlcmUgYmVjYXVzZQorLQkgYSkgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZmlyc3QgdHdvIGZpZWxkcworLQkgYikgdGhlc2UgZmllbGRzIG11c3QgYmUgdXNhYmxlIGFzIGZpbGUgbmFtZXMgYW5kIHNvIG11c3Qgbm90CistCSAgICBiZSB0aGF0IGxvbmcKKy0JIFdlIGF2b2lkIGEgbXVsdGkta2lsb2J5dGUgYnVmZmVyIGhlcmUgc2luY2UgdGhpcyB3b3VsZCB1c2UgdXAKKy0JIHN0YWNrIHNwYWNlIHdoaWNoIHdlIG1pZ2h0IG5vdCBoYXZlIGlmIHRoZSBwcm9ncmFtIHJhbiBvdXQgb2YKKy0JIG1lbW9yeS4gICovCistICAgICAgY2hhciBidWZbNDAwXTsKKy0gICAgICBjaGFyICphbGlhczsKKy0gICAgICBjaGFyICp2YWx1ZTsKKy0gICAgICBjaGFyICpjcDsKKy0gICAgICBpbnQgY29tcGxldGVfbGluZTsKKy0KKy0gICAgICBpZiAoRkdFVFMgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgZnApID09IE5VTEwpCistCS8qIEVPRiByZWFjaGVkLiAgKi8KKy0JYnJlYWs7CistCistICAgICAgLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGxpbmUgaXMgY29tcGxldGUuICAqLworLSAgICAgIGNvbXBsZXRlX2xpbmUgPSBzdHJjaHIgKGJ1ZiwgJ1xuJykgIT0gTlVMTDsKKy0KKy0gICAgICBjcCA9IGJ1ZjsKKy0gICAgICAvKiBJZ25vcmUgbGVhZGluZyB3aGl0ZSBzcGFjZS4gICovCistICAgICAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCistCSsrY3A7CistCistICAgICAgLyogQSBsZWFkaW5nICcjJyBzaWduYWxzIGEgY29tbWVudCBsaW5lLiAgKi8KKy0gICAgICBpZiAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnIycpCistCXsKKy0JICBhbGlhcyA9IGNwKys7CistCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCistCSAgICArK2NwOworLQkgIC8qIFRlcm1pbmF0ZSBhbGlhcyBuYW1lLiAgKi8KKy0JICBpZiAoY3BbMF0gIT0gJ1wwJykKKy0JICAgICpjcCsrID0gJ1wwJzsKKy0KKy0JICAvKiBOb3cgbG9vayBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgdmFsdWUuICAqLworLQkgIHdoaWxlIChpc3NwYWNlICgodW5zaWduZWQgY2hhcikgY3BbMF0pKQorLQkgICAgKytjcDsKKy0KKy0JICBpZiAoY3BbMF0gIT0gJ1wwJykKKy0JICAgIHsKKy0JICAgICAgdmFsdWUgPSBjcCsrOworLQkgICAgICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKy0JCSsrY3A7CistCSAgICAgIC8qIFRlcm1pbmF0ZSB2YWx1ZS4gICovCistCSAgICAgIGlmIChjcFswXSA9PSAnXG4nKQorLQkJeworLQkJICAvKiBUaGlzIGhhcyB0byBiZSBkb25lIHRvIG1ha2UgdGhlIGZvbGxvd2luZyB0ZXN0CistCQkgICAgIGZvciB0aGUgZW5kIG9mIGxpbmUgcG9zc2libGUuICBXZSBhcmUgbG9va2luZyBmb3IKKy0JCSAgICAgdGhlIHRlcm1pbmF0aW5nICdcbicgd2hpY2ggZG8gbm90IG92ZXJ3cml0ZSBoZXJlLiAgKi8KKy0JCSAgKmNwKysgPSAnXDAnOworLQkJICAqY3AgPSAnXG4nOworLQkJfQorLQkgICAgICBlbHNlIGlmIChjcFswXSAhPSAnXDAnKQorLQkJKmNwKysgPSAnXDAnOworLQorLSNpZmRlZiBJTl9MSUJHTE9DQUxFCistCSAgICAgIC8qIGdsaWJjJ3MgbG9jYWxlLmFsaWFzIGNvbnRhaW5zIGVudHJpZXMgZm9yIGphX0pQIGFuZCBrb19LUgorLQkJIHRoYXQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHVzZSBhIEphcGFuZXNlIG9yIEtvcmVhbiBVVEYtOAorLQkJIGxvY2FsZSB1bmRlciB0aGUgbmFtZSAiamFfSlAiIG9yICJrb19LUiIuICBJZ25vcmUgdGhlc2UKKy0JCSBlbnRyaWVzLiAgKi8KKy0JICAgICAgaWYgKHN0cmNociAoYWxpYXMsICdfJykgPT0gTlVMTCkKKy0jZW5kaWYKKy0JCXsKKy0JCSAgc2l6ZV90IGFsaWFzX2xlbjsKKy0JCSAgc2l6ZV90IHZhbHVlX2xlbjsKKy0KKy0JCSAgaWYgKG5tYXAgPj0gbWF4bWFwKQorLQkJICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChleHRlbmRfYWxpYXNfdGFibGUgKCksIDApKQorLQkJICAgICAgZ290byBvdXQ7CistCistCQkgIGFsaWFzX2xlbiA9IHN0cmxlbiAoYWxpYXMpICsgMTsKKy0JCSAgdmFsdWVfbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworLQorLQkJICBpZiAoc3RyaW5nX3NwYWNlX2FjdCArIGFsaWFzX2xlbiArIHZhbHVlX2xlbiA+IHN0cmluZ19zcGFjZV9tYXgpCistCQkgICAgeworLQkJICAgICAgLyogSW5jcmVhc2Ugc2l6ZSBvZiBtZW1vcnkgcG9vbC4gICovCistCQkgICAgICBzaXplX3QgbmV3X3NpemUgPSAoc3RyaW5nX3NwYWNlX21heAorLQkJCQkJICsgKGFsaWFzX2xlbiArIHZhbHVlX2xlbiA+IDEwMjQKKy0JCQkJCSAgICA/IGFsaWFzX2xlbiArIHZhbHVlX2xlbiA6IDEwMjQpKTsKKy0JCSAgICAgIGNoYXIgKm5ld19wb29sID0gKGNoYXIgKikgcmVhbGxvYyAoc3RyaW5nX3NwYWNlLCBuZXdfc2l6ZSk7CistCQkgICAgICBpZiAobmV3X3Bvb2wgPT0gTlVMTCkKKy0JCQlnb3RvIG91dDsKKy0KKy0JCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChzdHJpbmdfc3BhY2UgIT0gbmV3X3Bvb2wsIDApKQorLQkJCXsKKy0JCQkgIHNpemVfdCBpOworLQorLQkJCSAgZm9yIChpID0gMDsgaSA8IG5tYXA7IGkrKykKKy0JCQkgICAgeworLQkJCSAgICAgIG1hcFtpXS5hbGlhcyArPSBuZXdfcG9vbCAtIHN0cmluZ19zcGFjZTsKKy0JCQkgICAgICBtYXBbaV0udmFsdWUgKz0gbmV3X3Bvb2wgLSBzdHJpbmdfc3BhY2U7CistCQkJICAgIH0KKy0JCQl9CistCistCQkgICAgICBzdHJpbmdfc3BhY2UgPSBuZXdfcG9vbDsKKy0JCSAgICAgIHN0cmluZ19zcGFjZV9tYXggPSBuZXdfc2l6ZTsKKy0JCSAgICB9CistCistCQkgIG1hcFtubWFwXS5hbGlhcyA9CistCQkgICAgKGNvbnN0IGNoYXIgKikgbWVtY3B5ICgmc3RyaW5nX3NwYWNlW3N0cmluZ19zcGFjZV9hY3RdLAorLQkJCQkJICAgYWxpYXMsIGFsaWFzX2xlbik7CistCQkgIHN0cmluZ19zcGFjZV9hY3QgKz0gYWxpYXNfbGVuOworLQorLQkJICBtYXBbbm1hcF0udmFsdWUgPQorLQkJICAgIChjb25zdCBjaGFyICopIG1lbWNweSAoJnN0cmluZ19zcGFjZVtzdHJpbmdfc3BhY2VfYWN0XSwKKy0JCQkJCSAgIHZhbHVlLCB2YWx1ZV9sZW4pOworLQkJICBzdHJpbmdfc3BhY2VfYWN0ICs9IHZhbHVlX2xlbjsKKy0KKy0JCSAgKytubWFwOworLQkJICArK2FkZGVkOworLQkJfQorLQkgICAgfQorLQl9CistCistICAgICAgLyogUG9zc2libHkgbm90IHRoZSB3aG9sZSBsaW5lIGZpdHMgaW50byB0aGUgYnVmZmVyLiAgSWdub3JlCistCSB0aGUgcmVzdCBvZiB0aGUgbGluZS4gICovCistICAgICAgaWYgKCEgY29tcGxldGVfbGluZSkKKy0JZG8KKy0JICBpZiAoRkdFVFMgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgZnApID09IE5VTEwpCistCSAgICAvKiBNYWtlIHN1cmUgdGhlIGlubmVyIGxvb3Agd2lsbCBiZSBsZWZ0LiAgVGhlIG91dGVyIGxvb3AKKy0JICAgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworLQkgICAgYnJlYWs7CistCXdoaWxlIChzdHJjaHIgKGJ1ZiwgJ1xuJykgPT0gTlVMTCk7CistICAgIH0KKy0KKy0gb3V0OgorLSAgLyogU2hvdWxkIHdlIHRlc3QgZm9yIGZlcnJvcigpPyAgSSB0aGluayB3ZSBoYXZlIHRvIHNpbGVudGx5IGlnbm9yZQorLSAgICAgZXJyb3JzLiAgLS1kcmVwcGVyICAqLworLSAgZmNsb3NlIChmcCk7CistCistICBpZiAoYWRkZWQgPiAwKQorLSAgICBxc29ydCAobWFwLCBubWFwLCBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApLAorLQkgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBhbGlhc19jb21wYXJlKTsKKy0KKy0gIHJldHVybiBhZGRlZDsKKy19CistCistCistc3RhdGljIGludAorLWV4dGVuZF9hbGlhc190YWJsZSAoKQorLXsKKy0gIHNpemVfdCBuZXdfc2l6ZTsKKy0gIHN0cnVjdCBhbGlhc19tYXAgKm5ld19tYXA7CistCistICBuZXdfc2l6ZSA9IG1heG1hcCA9PSAwID8gMTAwIDogMiAqIG1heG1hcDsKKy0gIG5ld19tYXAgPSAoc3RydWN0IGFsaWFzX21hcCAqKSByZWFsbG9jIChtYXAsIChuZXdfc2l6ZQorLQkJCQkJCSogc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSkpOworLSAgaWYgKG5ld19tYXAgPT0gTlVMTCkKKy0gICAgLyogU2ltcGx5IGRvbid0IGV4dGVuZDogd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBjb3JlLiAgKi8KKy0gICAgcmV0dXJuIC0xOworLQorLSAgbWFwID0gbmV3X21hcDsKKy0gIG1heG1hcCA9IG5ld19zaXplOworLSAgcmV0dXJuIDA7CistfQorLQorLQorLXN0YXRpYyBpbnQKKy1hbGlhc19jb21wYXJlIChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLCBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKQorLXsKKy0jaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSQ0FTRUNNUAorLSAgcmV0dXJuIHN0cmNhc2VjbXAgKG1hcDEtPmFsaWFzLCBtYXAyLT5hbGlhcyk7CistI2Vsc2UKKy0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgbWFwMS0+YWxpYXM7CistICBjb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIG1hcDItPmFsaWFzOworLSAgdW5zaWduZWQgY2hhciBjMSwgYzI7CistCistICBpZiAocDEgPT0gcDIpCistICAgIHJldHVybiAwOworLQorLSAgZG8KKy0gICAgeworLSAgICAgIC8qIEkga25vdyB0aGlzIHNlZW1zIHRvIGJlIG9kZCBidXQgdGhlIHRvbG93ZXIoKSBmdW5jdGlvbiBpbgorLQkgc29tZSBzeXN0ZW1zIGxpYmMgY2Fubm90IGhhbmRsZSBub25hbHBoYSBjaGFyYWN0ZXJzLiAgKi8KKy0gICAgICBjMSA9IGlzdXBwZXIgKCpwMSkgPyB0b2xvd2VyICgqcDEpIDogKnAxOworLSAgICAgIGMyID0gaXN1cHBlciAoKnAyKSA/IHRvbG93ZXIgKCpwMikgOiAqcDI7CistICAgICAgaWYgKGMxID09ICdcMCcpCistCWJyZWFrOworLSAgICAgICsrcDE7CistICAgICAgKytwMjsKKy0gICAgfQorLSAgd2hpbGUgKGMxID09IGMyKTsKKy0KKy0gIHJldHVybiBjMSAtIGMyOworLSNlbmRpZgorLX0KKy0tLSBhL2ludGwvbG9jYWxlbmFtZS5jCisrKysgL2Rldi9udWxsCitAQCAtMSwxNTA3ICswLDAgQEAKKy0vKiBEZXRlcm1pbmUgbmFtZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGxvY2FsZS4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistLyogV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4gICovCistLyogV2luMzIgY29kZSB3cml0dGVuIGJ5IFRvciBMaWxscXZpc3QgPHRtbEBpa2kuZmk+LiAgKi8KKy0vKiBNYWNPUyBYIGNvZGUgd3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uICAqLworLQorLSNpbmNsdWRlIDxjb25maWcuaD4KKy0KKy0vKiBTcGVjaWZpY2F0aW9uLiAgKi8KKy0jaWZkZWYgSU5fTElCSU5UTAorLSMgaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKy0jZWxzZQorLSMgaW5jbHVkZSAibG9jYWxlbmFtZS5oIgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8bG9jYWxlLmg+CistCistI2lmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVCB8fCBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorLSMgaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZTdHJpbmcuaD4KKy0jIGlmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVAorLSMgIGluY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGTG9jYWxlLmg+CistIyBlbGlmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQorLSMgIGluY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD4KKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCistIyBkZWZpbmUgV0lOMzJfTkFUSVZFCistI2VuZGlmCistCistI2lmZGVmIFdJTjMyX05BVElWRQorLSMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKy0jIGluY2x1ZGUgPHdpbmRvd3MuaD4KKy0vKiBMaXN0IG9mIGxhbmd1YWdlIGNvZGVzLCBzb3J0ZWQgYnkgdmFsdWU6CistICAgMHgwMSBMQU5HX0FSQUJJQworLSAgIDB4MDIgTEFOR19CVUxHQVJJQU4KKy0gICAweDAzIExBTkdfQ0FUQUxBTgorLSAgIDB4MDQgTEFOR19DSElORVNFCistICAgMHgwNSBMQU5HX0NaRUNICistICAgMHgwNiBMQU5HX0RBTklTSAorLSAgIDB4MDcgTEFOR19HRVJNQU4KKy0gICAweDA4IExBTkdfR1JFRUsKKy0gICAweDA5IExBTkdfRU5HTElTSAorLSAgIDB4MGEgTEFOR19TUEFOSVNICistICAgMHgwYiBMQU5HX0ZJTk5JU0gKKy0gICAweDBjIExBTkdfRlJFTkNICistICAgMHgwZCBMQU5HX0hFQlJFVworLSAgIDB4MGUgTEFOR19IVU5HQVJJQU4KKy0gICAweDBmIExBTkdfSUNFTEFORElDCistICAgMHgxMCBMQU5HX0lUQUxJQU4KKy0gICAweDExIExBTkdfSkFQQU5FU0UKKy0gICAweDEyIExBTkdfS09SRUFOCistICAgMHgxMyBMQU5HX0RVVENICistICAgMHgxNCBMQU5HX05PUldFR0lBTgorLSAgIDB4MTUgTEFOR19QT0xJU0gKKy0gICAweDE2IExBTkdfUE9SVFVHVUVTRQorLSAgIDB4MTcgTEFOR19SSEFFVE9fUk9NQU5DRQorLSAgIDB4MTggTEFOR19ST01BTklBTgorLSAgIDB4MTkgTEFOR19SVVNTSUFOCistICAgMHgxYSBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorLSAgIDB4MWIgTEFOR19TTE9WQUsKKy0gICAweDFjIExBTkdfQUxCQU5JQU4KKy0gICAweDFkIExBTkdfU1dFRElTSAorLSAgIDB4MWUgTEFOR19USEFJCistICAgMHgxZiBMQU5HX1RVUktJU0gKKy0gICAweDIwIExBTkdfVVJEVQorLSAgIDB4MjEgTEFOR19JTkRPTkVTSUFOCistICAgMHgyMiBMQU5HX1VLUkFJTklBTgorLSAgIDB4MjMgTEFOR19CRUxBUlVTSUFOCistICAgMHgyNCBMQU5HX1NMT1ZFTklBTgorLSAgIDB4MjUgTEFOR19FU1RPTklBTgorLSAgIDB4MjYgTEFOR19MQVRWSUFOCistICAgMHgyNyBMQU5HX0xJVEhVQU5JQU4KKy0gICAweDI4IExBTkdfVEFKSUsKKy0gICAweDI5IExBTkdfRkFSU0kKKy0gICAweDJhIExBTkdfVklFVE5BTUVTRQorLSAgIDB4MmIgTEFOR19BUk1FTklBTgorLSAgIDB4MmMgTEFOR19BWkVSSQorLSAgIDB4MmQgTEFOR19CQVNRVUUKKy0gICAweDJlIExBTkdfU09SQklBTgorLSAgIDB4MmYgTEFOR19NQUNFRE9OSUFOCistICAgMHgzMCBMQU5HX1NVVFUKKy0gICAweDMxIExBTkdfVFNPTkdBCistICAgMHgzMiBMQU5HX1RTV0FOQQorLSAgIDB4MzMgTEFOR19WRU5EQQorLSAgIDB4MzQgTEFOR19YSE9TQQorLSAgIDB4MzUgTEFOR19aVUxVCistICAgMHgzNiBMQU5HX0FGUklLQUFOUworLSAgIDB4MzcgTEFOR19HRU9SR0lBTgorLSAgIDB4MzggTEFOR19GQUVST0VTRQorLSAgIDB4MzkgTEFOR19ISU5ESQorLSAgIDB4M2EgTEFOR19NQUxURVNFCistICAgMHgzYiBMQU5HX1NBQU1JCistICAgMHgzYyBMQU5HX0dBRUxJQworLSAgIDB4M2QgTEFOR19ZSURESVNICistICAgMHgzZSBMQU5HX01BTEFZCistICAgMHgzZiBMQU5HX0tBWkFLCistICAgMHg0MCBMQU5HX0tZUkdZWgorLSAgIDB4NDEgTEFOR19TV0FISUxJCistICAgMHg0MiBMQU5HX1RVUktNRU4KKy0gICAweDQzIExBTkdfVVpCRUsKKy0gICAweDQ0IExBTkdfVEFUQVIKKy0gICAweDQ1IExBTkdfQkVOR0FMSQorLSAgIDB4NDYgTEFOR19QVU5KQUJJCistICAgMHg0NyBMQU5HX0dVSkFSQVRJCistICAgMHg0OCBMQU5HX09SSVlBCistICAgMHg0OSBMQU5HX1RBTUlMCistICAgMHg0YSBMQU5HX1RFTFVHVQorLSAgIDB4NGIgTEFOR19LQU5OQURBCistICAgMHg0YyBMQU5HX01BTEFZQUxBTQorLSAgIDB4NGQgTEFOR19BU1NBTUVTRQorLSAgIDB4NGUgTEFOR19NQVJBVEhJCistICAgMHg0ZiBMQU5HX1NBTlNLUklUCistICAgMHg1MCBMQU5HX01PTkdPTElBTgorLSAgIDB4NTEgTEFOR19USUJFVEFOCistICAgMHg1MiBMQU5HX1dFTFNICistICAgMHg1MyBMQU5HX0NBTUJPRElBTgorLSAgIDB4NTQgTEFOR19MQU8KKy0gICAweDU1IExBTkdfQlVSTUVTRQorLSAgIDB4NTYgTEFOR19HQUxJQ0lBTgorLSAgIDB4NTcgTEFOR19LT05LQU5JCistICAgMHg1OCBMQU5HX01BTklQVVJJCistICAgMHg1OSBMQU5HX1NJTkRISQorLSAgIDB4NWEgTEFOR19TWVJJQUMKKy0gICAweDViIExBTkdfU0lOSEFMRVNFCistICAgMHg1YyBMQU5HX0NIRVJPS0VFCistICAgMHg1ZCBMQU5HX0lOVUtUSVRVVAorLSAgIDB4NWUgTEFOR19BTUhBUklDCistICAgMHg1ZiBMQU5HX1RBTUFaSUdIVAorLSAgIDB4NjAgTEFOR19LQVNITUlSSQorLSAgIDB4NjEgTEFOR19ORVBBTEkKKy0gICAweDYyIExBTkdfRlJJU0lBTgorLSAgIDB4NjMgTEFOR19QQVNIVE8KKy0gICAweDY0IExBTkdfVEFHQUxPRworLSAgIDB4NjUgTEFOR19ESVZFSEkKKy0gICAweDY2IExBTkdfRURPCistICAgMHg2NyBMQU5HX0ZVTEZVTERFCistICAgMHg2OCBMQU5HX0hBVVNBCistICAgMHg2OSBMQU5HX0lCSUJJTworLSAgIDB4NmEgTEFOR19ZT1JVQkEKKy0gICAweDcwIExBTkdfSUdCTworLSAgIDB4NzEgTEFOR19LQU5VUkkKKy0gICAweDcyIExBTkdfT1JPTU8KKy0gICAweDczIExBTkdfVElHUklOWUEKKy0gICAweDc0IExBTkdfR1VBUkFOSQorLSAgIDB4NzUgTEFOR19IQVdBSUlBTgorLSAgIDB4NzYgTEFOR19MQVRJTgorLSAgIDB4NzcgTEFOR19TT01BTEkKKy0gICAweDc4IExBTkdfWUkKKy0gICAweDc5IExBTkdfUEFQSUFNRU5UVQorLSovCistLyogTWluZ3cgaGVhZGVycyBkb24ndCBoYXZlIGxhdGVzdCBsYW5ndWFnZSBhbmQgc3VibGFuZ3VhZ2UgY29kZXMuICAqLworLSMgaWZuZGVmIExBTkdfQUZSSUtBQU5TCistIyBkZWZpbmUgTEFOR19BRlJJS0FBTlMgMHgzNgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0FMQkFOSUFOCistIyBkZWZpbmUgTEFOR19BTEJBTklBTiAweDFjCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfQU1IQVJJQworLSMgZGVmaW5lIExBTkdfQU1IQVJJQyAweDVlCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfQVJBQklDCistIyBkZWZpbmUgTEFOR19BUkFCSUMgMHgwMQorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0FSTUVOSUFOCistIyBkZWZpbmUgTEFOR19BUk1FTklBTiAweDJiCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfQVNTQU1FU0UKKy0jIGRlZmluZSBMQU5HX0FTU0FNRVNFIDB4NGQKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19BWkVSSQorLSMgZGVmaW5lIExBTkdfQVpFUkkgMHgyYworLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0JBU1FVRQorLSMgZGVmaW5lIExBTkdfQkFTUVVFIDB4MmQKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19CRUxBUlVTSUFOCistIyBkZWZpbmUgTEFOR19CRUxBUlVTSUFOIDB4MjMKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19CRU5HQUxJCistIyBkZWZpbmUgTEFOR19CRU5HQUxJIDB4NDUKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19CVVJNRVNFCistIyBkZWZpbmUgTEFOR19CVVJNRVNFIDB4NTUKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19DQU1CT0RJQU4KKy0jIGRlZmluZSBMQU5HX0NBTUJPRElBTiAweDUzCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfQ0FUQUxBTgorLSMgZGVmaW5lIExBTkdfQ0FUQUxBTiAweDAzCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfQ0hFUk9LRUUKKy0jIGRlZmluZSBMQU5HX0NIRVJPS0VFIDB4NWMKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19ESVZFSEkKKy0jIGRlZmluZSBMQU5HX0RJVkVISSAweDY1CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfRURPCistIyBkZWZpbmUgTEFOR19FRE8gMHg2NgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0VTVE9OSUFOCistIyBkZWZpbmUgTEFOR19FU1RPTklBTiAweDI1CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfRkFFUk9FU0UKKy0jIGRlZmluZSBMQU5HX0ZBRVJPRVNFIDB4MzgKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19GQVJTSQorLSMgZGVmaW5lIExBTkdfRkFSU0kgMHgyOQorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0ZSSVNJQU4KKy0jIGRlZmluZSBMQU5HX0ZSSVNJQU4gMHg2MgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0ZVTEZVTERFCistIyBkZWZpbmUgTEFOR19GVUxGVUxERSAweDY3CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfR0FFTElDCistIyBkZWZpbmUgTEFOR19HQUVMSUMgMHgzYworLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0dBTElDSUFOCistIyBkZWZpbmUgTEFOR19HQUxJQ0lBTiAweDU2CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfR0VPUkdJQU4KKy0jIGRlZmluZSBMQU5HX0dFT1JHSUFOIDB4MzcKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19HVUFSQU5JCistIyBkZWZpbmUgTEFOR19HVUFSQU5JIDB4NzQKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19HVUpBUkFUSQorLSMgZGVmaW5lIExBTkdfR1VKQVJBVEkgMHg0NworLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0hBVVNBCistIyBkZWZpbmUgTEFOR19IQVVTQSAweDY4CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfSEFXQUlJQU4KKy0jIGRlZmluZSBMQU5HX0hBV0FJSUFOIDB4NzUKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19IRUJSRVcKKy0jIGRlZmluZSBMQU5HX0hFQlJFVyAweDBkCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfSElOREkKKy0jIGRlZmluZSBMQU5HX0hJTkRJIDB4MzkKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19JQklCSU8KKy0jIGRlZmluZSBMQU5HX0lCSUJJTyAweDY5CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfSUdCTworLSMgZGVmaW5lIExBTkdfSUdCTyAweDcwCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfSU5ET05FU0lBTgorLSMgZGVmaW5lIExBTkdfSU5ET05FU0lBTiAweDIxCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfSU5VS1RJVFVUCistIyBkZWZpbmUgTEFOR19JTlVLVElUVVQgMHg1ZAorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0tBTk5BREEKKy0jIGRlZmluZSBMQU5HX0tBTk5BREEgMHg0YgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0tBTlVSSQorLSMgZGVmaW5lIExBTkdfS0FOVVJJIDB4NzEKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19LQVNITUlSSQorLSMgZGVmaW5lIExBTkdfS0FTSE1JUkkgMHg2MAorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0tBWkFLCistIyBkZWZpbmUgTEFOR19LQVpBSyAweDNmCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfS09OS0FOSQorLSMgZGVmaW5lIExBTkdfS09OS0FOSSAweDU3CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfS1lSR1laCistIyBkZWZpbmUgTEFOR19LWVJHWVogMHg0MAorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0xBTworLSMgZGVmaW5lIExBTkdfTEFPIDB4NTQKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19MQVRJTgorLSMgZGVmaW5lIExBTkdfTEFUSU4gMHg3NgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0xBVFZJQU4KKy0jIGRlZmluZSBMQU5HX0xBVFZJQU4gMHgyNgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX0xJVEhVQU5JQU4KKy0jIGRlZmluZSBMQU5HX0xJVEhVQU5JQU4gMHgyNworLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX01BQ0VET05JQU4KKy0jIGRlZmluZSBMQU5HX01BQ0VET05JQU4gMHgyZgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX01BTEFZCistIyBkZWZpbmUgTEFOR19NQUxBWSAweDNlCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfTUFMQVlBTEFNCistIyBkZWZpbmUgTEFOR19NQUxBWUFMQU0gMHg0YworLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX01BTFRFU0UKKy0jIGRlZmluZSBMQU5HX01BTFRFU0UgMHgzYQorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX01BTklQVVJJCistIyBkZWZpbmUgTEFOR19NQU5JUFVSSSAweDU4CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfTUFSQVRISQorLSMgZGVmaW5lIExBTkdfTUFSQVRISSAweDRlCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfTU9OR09MSUFOCistIyBkZWZpbmUgTEFOR19NT05HT0xJQU4gMHg1MAorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX05FUEFMSQorLSMgZGVmaW5lIExBTkdfTkVQQUxJIDB4NjEKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19PUklZQQorLSMgZGVmaW5lIExBTkdfT1JJWUEgMHg0OAorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX09ST01PCistIyBkZWZpbmUgTEFOR19PUk9NTyAweDcyCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfUEFQSUFNRU5UVQorLSMgZGVmaW5lIExBTkdfUEFQSUFNRU5UVSAweDc5CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfUEFTSFRPCistIyBkZWZpbmUgTEFOR19QQVNIVE8gMHg2MworLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1BVTkpBQkkKKy0jIGRlZmluZSBMQU5HX1BVTkpBQkkgMHg0NgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1JIQUVUT19ST01BTkNFCistIyBkZWZpbmUgTEFOR19SSEFFVE9fUk9NQU5DRSAweDE3CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfU0FBTUkKKy0jIGRlZmluZSBMQU5HX1NBQU1JIDB4M2IKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19TQU5TS1JJVAorLSMgZGVmaW5lIExBTkdfU0FOU0tSSVQgMHg0ZgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1NFUkJJQU4KKy0jIGRlZmluZSBMQU5HX1NFUkJJQU4gMHgxYQorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1NJTkRISQorLSMgZGVmaW5lIExBTkdfU0lOREhJIDB4NTkKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19TSU5IQUxFU0UKKy0jIGRlZmluZSBMQU5HX1NJTkhBTEVTRSAweDViCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfU0xPVkFLCistIyBkZWZpbmUgTEFOR19TTE9WQUsgMHgxYgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1NPTUFMSQorLSMgZGVmaW5lIExBTkdfU09NQUxJIDB4NzcKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19TT1JCSUFOCistIyBkZWZpbmUgTEFOR19TT1JCSUFOIDB4MmUKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19TVVRVCistIyBkZWZpbmUgTEFOR19TVVRVIDB4MzAKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19TV0FISUxJCistIyBkZWZpbmUgTEFOR19TV0FISUxJIDB4NDEKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19TWVJJQUMKKy0jIGRlZmluZSBMQU5HX1NZUklBQyAweDVhCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfVEFHQUxPRworLSMgZGVmaW5lIExBTkdfVEFHQUxPRyAweDY0CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfVEFKSUsKKy0jIGRlZmluZSBMQU5HX1RBSklLIDB4MjgKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19UQU1BWklHSFQKKy0jIGRlZmluZSBMQU5HX1RBTUFaSUdIVCAweDVmCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfVEFNSUwKKy0jIGRlZmluZSBMQU5HX1RBTUlMIDB4NDkKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19UQVRBUgorLSMgZGVmaW5lIExBTkdfVEFUQVIgMHg0NAorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1RFTFVHVQorLSMgZGVmaW5lIExBTkdfVEVMVUdVIDB4NGEKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19USEFJCistIyBkZWZpbmUgTEFOR19USEFJIDB4MWUKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19USUJFVEFOCistIyBkZWZpbmUgTEFOR19USUJFVEFOIDB4NTEKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19USUdSSU5ZQQorLSMgZGVmaW5lIExBTkdfVElHUklOWUEgMHg3MworLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1RTT05HQQorLSMgZGVmaW5lIExBTkdfVFNPTkdBIDB4MzEKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19UU1dBTkEKKy0jIGRlZmluZSBMQU5HX1RTV0FOQSAweDMyCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfVFVSS01FTgorLSMgZGVmaW5lIExBTkdfVFVSS01FTiAweDQyCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfVUtSQUlOSUFOCistIyBkZWZpbmUgTEFOR19VS1JBSU5JQU4gMHgyMgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1VSRFUKKy0jIGRlZmluZSBMQU5HX1VSRFUgMHgyMAorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1VaQkVLCistIyBkZWZpbmUgTEFOR19VWkJFSyAweDQzCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfVkVOREEKKy0jIGRlZmluZSBMQU5HX1ZFTkRBIDB4MzMKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19WSUVUTkFNRVNFCistIyBkZWZpbmUgTEFOR19WSUVUTkFNRVNFIDB4MmEKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19XRUxTSAorLSMgZGVmaW5lIExBTkdfV0VMU0ggMHg1MgorLSMgZW5kaWYKKy0jIGlmbmRlZiBMQU5HX1hIT1NBCistIyBkZWZpbmUgTEFOR19YSE9TQSAweDM0CistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfWUkKKy0jIGRlZmluZSBMQU5HX1lJIDB4NzgKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19ZSURESVNICistIyBkZWZpbmUgTEFOR19ZSURESVNIIDB4M2QKKy0jIGVuZGlmCistIyBpZm5kZWYgTEFOR19ZT1JVQkEKKy0jIGRlZmluZSBMQU5HX1lPUlVCQSAweDZhCistIyBlbmRpZgorLSMgaWZuZGVmIExBTkdfWlVMVQorLSMgZGVmaW5lIExBTkdfWlVMVSAweDM1CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQQorLSMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQSAweDAxCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0lSQVEKKy0jIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19JUkFRIDB4MDIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfRUdZUFQKKy0jIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19FR1lQVCAweDAzCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0xJQllBCistIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTElCWUEgMHgwNAorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19BTEdFUklBCistIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQUxHRVJJQSAweDA1CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX01PUk9DQ08KKy0jIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPIDB4MDYKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfVFVOSVNJQQorLSMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1RVTklTSUEgMHgwNworLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19PTUFOCistIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfT01BTiAweDA4CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1lFTUVOCistIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfWUVNRU4gMHgwOQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19TWVJJQQorLSMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NZUklBIDB4MGEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfSk9SREFOCistIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfSk9SREFOIDB4MGIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfTEVCQU5PTgorLSMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0xFQkFOT04gMHgwYworLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19LVVdBSVQKKy0jIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19LVVdBSVQgMHgwZAorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19VQUUKKy0jIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19VQUUgMHgwZQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOCistIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQkFIUkFJTiAweDBmCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1FBVEFSCistIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfUUFUQVIgMHgxMAorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0FaRVJJX0xBVElOCistIyBkZWZpbmUgU1VCTEFOR19BWkVSSV9MQVRJTiAweDAxCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUMKKy0jIGRlZmluZSBTVUJMQU5HX0FaRVJJX0NZUklMTElDIDB4MDIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0lORElBCistIyBkZWZpbmUgU1VCTEFOR19CRU5HQUxJX0lORElBIDB4MDEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0gKKy0jIGRlZmluZSBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSCAweDAyCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVQorLSMgZGVmaW5lIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVSAweDA1CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0EKKy0jIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBIDB4MDcKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0EKKy0jIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQSAweDA4CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU4KKy0jIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOIDB4MDkKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0JFTElaRQorLSMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUgMHgwYQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQKKy0jIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQgMHgwYgorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UKKy0jIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UgMHgwYworLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMKKy0jIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMgMHgwZAorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSU5ET05FU0lBCistIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQSAweDBlCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORworLSMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORyAweDBmCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9JTkRJQQorLSMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9JTkRJQSAweDEwCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQQorLSMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQSAweDExCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkUKKy0jIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFIDB4MTIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRworLSMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcgMHgwNQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NT05BQ08KKy0jIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ08gMHgwNgorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTCistIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUyAweDA3CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1JFVU5JT04KKy0jIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OIDB4MDgKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ09OR08KKy0jIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DT05HTyAweDA5CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1NFTkVHQUwKKy0jIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMIDB4MGEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ0FNRVJPT04KKy0jIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTiAweDBiCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NPVEVESVZPSVJFCistIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkUgMHgwYworLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NQUxJCistIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTUFMSSAweDBkCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX01PUk9DQ08KKy0jIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPIDB4MGUKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfSEFJVEkKKy0jIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9IQUlUSSAweDBmCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkcKKy0jIGRlZmluZSBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHIDB4MDQKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTgorLSMgZGVmaW5lIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4gMHgwNQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX0tBU0hNSVJJX0lORElBCistIyBkZWZpbmUgU1VCTEFOR19LQVNITUlSSV9JTkRJQSAweDAyCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfTUFMQVlfTUFMQVlTSUEKKy0jIGRlZmluZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBIDB4MDEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19NQUxBWV9CUlVORUlfREFSVVNTQUxBTQorLSMgZGVmaW5lIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gMHgwMgorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX05FUEFMSV9JTkRJQQorLSMgZGVmaW5lIFNVQkxBTkdfTkVQQUxJX0lORElBIDB4MDIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX0lORElBCistIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX0lORElBIDB4MDEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOCistIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOIDB4MDIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9ST01BTklBCistIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9ST01BTklBIDB4MDEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBCistIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBIDB4MDIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0xBVElOCistIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0xBVElOIDB4MDIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDCistIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDIDB4MDMKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19TSU5ESElfUEFLSVNUQU4KKy0jIGRlZmluZSBTVUJMQU5HX1NJTkRISV9QQUtJU1RBTiAweDAxCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfU0lOREhJX0FGR0hBTklTVEFOCistIyBkZWZpbmUgU1VCTEFOR19TSU5ESElfQUZHSEFOSVNUQU4gMHgwMgorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBCistIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQSAweDA0CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBCistIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0EgMHgwNQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BCistIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BBTkFNQSAweDA2CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9ET01JTklDQU5fUkVQVUJMSUMKKy0jIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDIDB4MDcKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1ZFTkVaVUVMQQorLSMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEgMHgwOAorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEKKy0jIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEgMHgwOQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEVSVQorLSMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QRVJVIDB4MGEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0FSR0VOVElOQQorLSMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEgMHgwYgorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUgorLSMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SIDB4MGMKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NISUxFCistIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NISUxFIDB4MGQKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1VSVUdVQVkKKy0jIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWSAweDBlCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWQorLSMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWSAweDBmCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9CT0xJVklBCistIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0JPTElWSUEgMHgxMAorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IKKy0jIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IgMHgxMQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMKKy0jIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMgMHgxMgorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBCistIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQSAweDEzCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTworLSMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTyAweDE0CistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfU1dFRElTSF9GSU5MQU5ECistIyBkZWZpbmUgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQgMHgwMgorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMKKy0jIGRlZmluZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMgMHgwMQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9BTEdFUklBX0xBVElOCistIyBkZWZpbmUgU1VCTEFOR19UQU1BWklHSFRfQUxHRVJJQV9MQVRJTiAweDAyCistIyBlbmRpZgorLSMgaWZuZGVmIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEKKy0jIGRlZmluZSBTVUJMQU5HX1RJR1JJTllBX0VUSElPUElBIDB4MDEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBCistIyBkZWZpbmUgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBIDB4MDIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19VUkRVX1BBS0lTVEFOCistIyBkZWZpbmUgU1VCTEFOR19VUkRVX1BBS0lTVEFOIDB4MDEKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19VUkRVX0lORElBCistIyBkZWZpbmUgU1VCTEFOR19VUkRVX0lORElBIDB4MDIKKy0jIGVuZGlmCistIyBpZm5kZWYgU1VCTEFOR19VWkJFS19MQVRJTgorLSMgZGVmaW5lIFNVQkxBTkdfVVpCRUtfTEFUSU4gMHgwMQorLSMgZW5kaWYKKy0jIGlmbmRlZiBTVUJMQU5HX1VaQkVLX0NZUklMTElDCistIyBkZWZpbmUgU1VCTEFOR19VWkJFS19DWVJJTExJQyAweDAyCistIyBlbmRpZgorLSNlbmRpZgorLQorLSMgaWYgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UIHx8IEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQorLS8qIE1hY09TIFggMTAuMiBvciBuZXdlciAqLworLQorLS8qIENhbm9uaWNhbGl6ZSBhIE1hY09TIFggbG9jYWxlIG5hbWUgdG8gYSBVbml4IGxvY2FsZSBuYW1lLgorLSAgIE5BTUUgaXMgYSBzdWZmaWNpZW50bHkgbGFyZ2UgYnVmZmVyLgorLSAgIE9uIGlucHV0LCBpdCBjb250YWlucyB0aGUgTWFjT1MgWCBsb2NhbGUgbmFtZS4KKy0gICBPbiBvdXRwdXQsIGl0IGNvbnRhaW5zIHRoZSBVbml4IGxvY2FsZSBuYW1lLiAgKi8KKy0jICBpZiAhZGVmaW5lZCBJTl9MSUJJTlRMCistc3RhdGljCistIyAgZW5kaWYKKy12b2lkCistZ2xfbG9jYWxlX25hbWVfY2Fub25pY2FsaXplIChjaGFyICpuYW1lKQorLXsKKy0gIC8qIFRoaXMgY29udmVyc2lvbiBpcyBiYXNlZCBvbiBhIHBvc3RpbmcgYnkKKy0gICAgIERlYm9yYWggR29sZFNtaXRoIDxnb2xkc21pdEBhcHBsZS5jb20+IG9uIDIwMDUtMDMtMDgsCistICAgICBodHRwOi8vbGlzdHMuYXBwbGUuY29tL2FyY2hpdmVzL2NhcmJvbi1kZXYvMjAwNS9NYXIvbXNnMDAyOTMuaHRtbCAqLworLQorLSAgLyogQ29udmVydCBsZWdhY3kgKE5lWFRzdGVwIGluaGVyaXRlZCkgRW5nbGlzaCBuYW1lcyB0byBVbml4IChJU08gNjM5IGFuZAorLSAgICAgSVNPIDMxNjYpIG5hbWVzLiAgUHJpb3IgdG8gTWFjT1MgWCAxMC4zLCB0aGVyZSBpcyBubyBBUEkgZm9yIGRvaW5nIHRoaXMuCistICAgICBUaGVyZWZvcmUgd2UgZG8gaXQgb3Vyc2VsdmVzLCB1c2luZyBhIHRhYmxlIGJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIHRoZQorLSAgICAgTWFjT1MgWCAxMC4zLjggZnVuY3Rpb24KKy0gICAgIENGTG9jYWxlQ3JlYXRlQ2Fub25pY2FsTG9jYWxlSWRlbnRpZmllckZyb21TdHJpbmcoKS4gICovCistICB0eXBlZGVmIHN0cnVjdCB7IGNvbnN0IGNoYXIgbGVnYWN5WzIxKzFdOyBjb25zdCBjaGFyIHVuaXh5WzUrMV07IH0KKy0JICBsZWdhY3lfZW50cnk7CistICBzdGF0aWMgY29uc3QgbGVnYWN5X2VudHJ5IGxlZ2FjeV90YWJsZVtdID0geworLSAgICB7ICJBZnJpa2FhbnMiLCAgICAgICAgICAgICAiYWYiIH0sCistICAgIHsgIkFsYmFuaWFuIiwgICAgICAgICAgICAgICJzcSIgfSwKKy0gICAgeyAiQW1oYXJpYyIsICAgICAgICAgICAgICAgImFtIiB9LAorLSAgICB7ICJBcmFiaWMiLCAgICAgICAgICAgICAgICAiYXIiIH0sCistICAgIHsgIkFybWVuaWFuIiwgICAgICAgICAgICAgICJoeSIgfSwKKy0gICAgeyAiQXNzYW1lc2UiLCAgICAgICAgICAgICAgImFzIiB9LAorLSAgICB7ICJBeW1hcmEiLCAgICAgICAgICAgICAgICAiYXkiIH0sCistICAgIHsgIkF6ZXJiYWlqYW5pIiwgICAgICAgICAgICJheiIgfSwKKy0gICAgeyAiQmFzcXVlIiwgICAgICAgICAgICAgICAgImV1IiB9LAorLSAgICB7ICJCZWxhcnVzaWFuIiwgICAgICAgICAgICAiYmUiIH0sCistICAgIHsgIkJlbG9ydXNzaWFuIiwgICAgICAgICAgICJiZSIgfSwKKy0gICAgeyAiQmVuZ2FsaSIsICAgICAgICAgICAgICAgImJuIiB9LAorLSAgICB7ICJCcmF6aWxpYW4gUG9ydHVnZXNlIiwgICAicHRfQlIiIH0sCistICAgIHsgIkJyYXppbGlhbiBQb3J0dWd1ZXNlIiwgICJwdF9CUiIgfSwKKy0gICAgeyAiQnJldG9uIiwgICAgICAgICAgICAgICAgImJyIiB9LAorLSAgICB7ICJCdWxnYXJpYW4iLCAgICAgICAgICAgICAiYmciIH0sCistICAgIHsgIkJ1cm1lc2UiLCAgICAgICAgICAgICAgICJteSIgfSwKKy0gICAgeyAiQnllbG9ydXNzaWFuIiwgICAgICAgICAgImJlIiB9LAorLSAgICB7ICJDYXRhbGFuIiwgICAgICAgICAgICAgICAiY2EiIH0sCistICAgIHsgIkNoZXdhIiwgICAgICAgICAgICAgICAgICJueSIgfSwKKy0gICAgeyAiQ2hpY2hld2EiLCAgICAgICAgICAgICAgIm55IiB9LAorLSAgICB7ICJDaGluZXNlIiwgICAgICAgICAgICAgICAiemgiIH0sCistICAgIHsgIkNoaW5lc2UsIFNpbXBsaWZpZWQiLCAgICJ6aF9DTiIgfSwKKy0gICAgeyAiQ2hpbmVzZSwgVHJhZGl0aW9uYWwiLCAgInpoX1RXIiB9LAorLSAgICB7ICJDaGluZXNlLCBUcmFkdGlvbmFsIiwgICAiemhfVFciIH0sCistICAgIHsgIkNyb2F0aWFuIiwgICAgICAgICAgICAgICJociIgfSwKKy0gICAgeyAiQ3plY2giLCAgICAgICAgICAgICAgICAgImNzIiB9LAorLSAgICB7ICJEYW5pc2giLCAgICAgICAgICAgICAgICAiZGEiIH0sCistICAgIHsgIkR1dGNoIiwgICAgICAgICAgICAgICAgICJubCIgfSwKKy0gICAgeyAiRHpvbmdraGEiLCAgICAgICAgICAgICAgImR6IiB9LAorLSAgICB7ICJFbmdsaXNoIiwgICAgICAgICAgICAgICAiZW4iIH0sCistICAgIHsgIkVzcGVyYW50byIsICAgICAgICAgICAgICJlbyIgfSwKKy0gICAgeyAiRXN0b25pYW4iLCAgICAgICAgICAgICAgImV0IiB9LAorLSAgICB7ICJGYXJvZXNlIiwgICAgICAgICAgICAgICAiZm8iIH0sCistICAgIHsgIkZhcnNpIiwgICAgICAgICAgICAgICAgICJmYSIgfSwKKy0gICAgeyAiRmlubmlzaCIsICAgICAgICAgICAgICAgImZpIiB9LAorLSAgICB7ICJGbGVtaXNoIiwgICAgICAgICAgICAgICAibmxfQkUiIH0sCistICAgIHsgIkZyZW5jaCIsICAgICAgICAgICAgICAgICJmciIgfSwKKy0gICAgeyAiR2FsaWNpYW4iLCAgICAgICAgICAgICAgImdsIiB9LAorLSAgICB7ICJHYWxsZWdhbiIsICAgICAgICAgICAgICAiZ2wiIH0sCistICAgIHsgIkdlb3JnaWFuIiwgICAgICAgICAgICAgICJrYSIgfSwKKy0gICAgeyAiR2VybWFuIiwgICAgICAgICAgICAgICAgImRlIiB9LAorLSAgICB7ICJHcmVlayIsICAgICAgICAgICAgICAgICAiZWwiIH0sCistICAgIHsgIkdyZWVubGFuZGljIiwgICAgICAgICAgICJrbCIgfSwKKy0gICAgeyAiR3VhcmFuaSIsICAgICAgICAgICAgICAgImduIiB9LAorLSAgICB7ICJHdWphcmF0aSIsICAgICAgICAgICAgICAiZ3UiIH0sCistICAgIHsgIkhhd2FpaWFuIiwgICAgICAgICAgICAgICJoYXciIH0sIC8qIFllcywgImhhdyIsIG5vdCAiY3BlIi4gICovCistICAgIHsgIkhlYnJldyIsICAgICAgICAgICAgICAgICJoZSIgfSwKKy0gICAgeyAiSGluZGkiLCAgICAgICAgICAgICAgICAgImhpIiB9LAorLSAgICB7ICJIdW5nYXJpYW4iLCAgICAgICAgICAgICAiaHUiIH0sCistICAgIHsgIkljZWxhbmRpYyIsICAgICAgICAgICAgICJpcyIgfSwKKy0gICAgeyAiSW5kb25lc2lhbiIsICAgICAgICAgICAgImlkIiB9LAorLSAgICB7ICJJbnVrdGl0dXQiLCAgICAgICAgICAgICAiaXUiIH0sCistICAgIHsgIklyaXNoIiwgICAgICAgICAgICAgICAgICJnYSIgfSwKKy0gICAgeyAiSXRhbGlhbiIsICAgICAgICAgICAgICAgIml0IiB9LAorLSAgICB7ICJKYXBhbmVzZSIsICAgICAgICAgICAgICAiamEiIH0sCistICAgIHsgIkphdmFuZXNlIiwgICAgICAgICAgICAgICJqdiIgfSwKKy0gICAgeyAiS2FsYWFsbGlzdXQiLCAgICAgICAgICAgImtsIiB9LAorLSAgICB7ICJLYW5uYWRhIiwgICAgICAgICAgICAgICAia24iIH0sCistICAgIHsgIkthc2htaXJpIiwgICAgICAgICAgICAgICJrcyIgfSwKKy0gICAgeyAiS2F6YWtoIiwgICAgICAgICAgICAgICAgImtrIiB9LAorLSAgICB7ICJLaG1lciIsICAgICAgICAgICAgICAgICAia20iIH0sCistICAgIHsgIktpbnlhcndhbmRhIiwgICAgICAgICAgICJydyIgfSwKKy0gICAgeyAiS2lyZ2hpeiIsICAgICAgICAgICAgICAgImt5IiB9LAorLSAgICB7ICJLb3JlYW4iLCAgICAgICAgICAgICAgICAia28iIH0sCistICAgIHsgIkt1cmRpc2giLCAgICAgICAgICAgICAgICJrdSIgfSwKKy0gICAgeyAiTGF0aW4iLCAgICAgICAgICAgICAgICAgImxhIiB9LAorLSAgICB7ICJMYXR2aWFuIiwgICAgICAgICAgICAgICAibHYiIH0sCistICAgIHsgIkxpdGh1YW5pYW4iLCAgICAgICAgICAgICJsdCIgfSwKKy0gICAgeyAiTWFjZWRvbmlhbiIsICAgICAgICAgICAgIm1rIiB9LAorLSAgICB7ICJNYWxhZ2FzeSIsICAgICAgICAgICAgICAibWciIH0sCistICAgIHsgIk1hbGF5IiwgICAgICAgICAgICAgICAgICJtcyIgfSwKKy0gICAgeyAiTWFsYXlhbGFtIiwgICAgICAgICAgICAgIm1sIiB9LAorLSAgICB7ICJNYWx0ZXNlIiwgICAgICAgICAgICAgICAibXQiIH0sCistICAgIHsgIk1hbngiLCAgICAgICAgICAgICAgICAgICJndiIgfSwKKy0gICAgeyAiTWFyYXRoaSIsICAgICAgICAgICAgICAgIm1yIiB9LAorLSAgICB7ICJNb2xkYXZpYW4iLCAgICAgICAgICAgICAibW8iIH0sCistICAgIHsgIk1vbmdvbGlhbiIsICAgICAgICAgICAgICJtbiIgfSwKKy0gICAgeyAiTmVwYWxpIiwgICAgICAgICAgICAgICAgIm5lIiB9LAorLSAgICB7ICJOb3J3ZWdpYW4iLCAgICAgICAgICAgICAibmIiIH0sIC8qIFllcywgIm5iIiwgbm90IHRoZSBvYnNvbGV0ZSAibm8iLiAgKi8KKy0gICAgeyAiTnlhbmphIiwgICAgICAgICAgICAgICAgIm55IiB9LAorLSAgICB7ICJOeW5vcnNrIiwgICAgICAgICAgICAgICAibm4iIH0sCistICAgIHsgIk9yaXlhIiwgICAgICAgICAgICAgICAgICJvciIgfSwKKy0gICAgeyAiT3JvbW8iLCAgICAgICAgICAgICAgICAgIm9tIiB9LAorLSAgICB7ICJQYW5qYWJpIiwgICAgICAgICAgICAgICAicGEiIH0sCistICAgIHsgIlBhc2h0byIsICAgICAgICAgICAgICAgICJwcyIgfSwKKy0gICAgeyAiUGVyc2lhbiIsICAgICAgICAgICAgICAgImZhIiB9LAorLSAgICB7ICJQb2xpc2giLCAgICAgICAgICAgICAgICAicGwiIH0sCistICAgIHsgIlBvcnR1Z3Vlc2UiLCAgICAgICAgICAgICJwdCIgfSwKKy0gICAgeyAiUG9ydHVndWVzZSwgQnJhemlsaWFuIiwgInB0X0JSIiB9LAorLSAgICB7ICJQdW5qYWJpIiwgICAgICAgICAgICAgICAicGEiIH0sCistICAgIHsgIlB1c2h0byIsICAgICAgICAgICAgICAgICJwcyIgfSwKKy0gICAgeyAiUXVlY2h1YSIsICAgICAgICAgICAgICAgInF1IiB9LAorLSAgICB7ICJSb21hbmlhbiIsICAgICAgICAgICAgICAicm8iIH0sCistICAgIHsgIlJ1YW5kYSIsICAgICAgICAgICAgICAgICJydyIgfSwKKy0gICAgeyAiUnVuZGkiLCAgICAgICAgICAgICAgICAgInJuIiB9LAorLSAgICB7ICJSdXNzaWFuIiwgICAgICAgICAgICAgICAicnUiIH0sCistICAgIHsgIlNhbWkiLCAgICAgICAgICAgICAgICAgICJzZV9OTyIgfSwgLyogTm90IGp1c3QgInNlIi4gICovCistICAgIHsgIlNhbnNrcml0IiwgICAgICAgICAgICAgICJzYSIgfSwKKy0gICAgeyAiU2NvdHRpc2giLCAgICAgICAgICAgICAgImdkIiB9LAorLSAgICB7ICJTZXJiaWFuIiwgICAgICAgICAgICAgICAic3IiIH0sCistICAgIHsgIlNpbXBsaWZpZWQgQ2hpbmVzZSIsICAgICJ6aF9DTiIgfSwKKy0gICAgeyAiU2luZGhpIiwgICAgICAgICAgICAgICAgInNkIiB9LAorLSAgICB7ICJTaW5oYWxlc2UiLCAgICAgICAgICAgICAic2kiIH0sCistICAgIHsgIlNsb3ZhayIsICAgICAgICAgICAgICAgICJzayIgfSwKKy0gICAgeyAiU2xvdmVuaWFuIiwgICAgICAgICAgICAgInNsIiB9LAorLSAgICB7ICJTb21hbGkiLCAgICAgICAgICAgICAgICAic28iIH0sCistICAgIHsgIlNwYW5pc2giLCAgICAgICAgICAgICAgICJlcyIgfSwKKy0gICAgeyAiU3VuZGFuZXNlIiwgICAgICAgICAgICAgInN1IiB9LAorLSAgICB7ICJTd2FoaWxpIiwgICAgICAgICAgICAgICAic3ciIH0sCistICAgIHsgIlN3ZWRpc2giLCAgICAgICAgICAgICAgICJzdiIgfSwKKy0gICAgeyAiVGFnYWxvZyIsICAgICAgICAgICAgICAgInRsIiB9LAorLSAgICB7ICJUYWppayIsICAgICAgICAgICAgICAgICAidGciIH0sCistICAgIHsgIlRhamlraSIsICAgICAgICAgICAgICAgICJ0ZyIgfSwKKy0gICAgeyAiVGFtaWwiLCAgICAgICAgICAgICAgICAgInRhIiB9LAorLSAgICB7ICJUYXRhciIsICAgICAgICAgICAgICAgICAidHQiIH0sCistICAgIHsgIlRlbHVndSIsICAgICAgICAgICAgICAgICJ0ZSIgfSwKKy0gICAgeyAiVGhhaSIsICAgICAgICAgICAgICAgICAgInRoIiB9LAorLSAgICB7ICJUaWJldGFuIiwgICAgICAgICAgICAgICAiYm8iIH0sCistICAgIHsgIlRpZ3JpbnlhIiwgICAgICAgICAgICAgICJ0aSIgfSwKKy0gICAgeyAiVG9uZ2FuIiwgICAgICAgICAgICAgICAgInRvIiB9LAorLSAgICB7ICJUcmFkaXRpb25hbCBDaGluZXNlIiwgICAiemhfVFciIH0sCistICAgIHsgIlR1cmtpc2giLCAgICAgICAgICAgICAgICJ0ciIgfSwKKy0gICAgeyAiVHVya21lbiIsICAgICAgICAgICAgICAgInRrIiB9LAorLSAgICB7ICJVaWdodXIiLCAgICAgICAgICAgICAgICAidWciIH0sCistICAgIHsgIlVrcmFpbmlhbiIsICAgICAgICAgICAgICJ1ayIgfSwKKy0gICAgeyAiVXJkdSIsICAgICAgICAgICAgICAgICAgInVyIiB9LAorLSAgICB7ICJVemJlayIsICAgICAgICAgICAgICAgICAidXoiIH0sCistICAgIHsgIlZpZXRuYW1lc2UiLCAgICAgICAgICAgICJ2aSIgfSwKKy0gICAgeyAiV2Vsc2giLCAgICAgICAgICAgICAgICAgImN5IiB9LAorLSAgICB7ICJZaWRkaXNoIiwgICAgICAgICAgICAgICAieWkiIH0KKy0gIH07CistCistICAvKiBDb252ZXJ0IG5ldy1zdHlsZSBsb2NhbGUgbmFtZXMgd2l0aCBsYW5ndWFnZSB0YWdzIChJU08gNjM5IGFuZCBJU08gMTU5MjQpCistICAgICB0byBVbml4IChJU08gNjM5IGFuZCBJU08gMzE2NikgbmFtZXMuICAqLworLSAgdHlwZWRlZiBzdHJ1Y3QgeyBjb25zdCBjaGFyIGxhbmd0YWdbNysxXTsgY29uc3QgY2hhciB1bml4eVsxMisxXTsgfQorLQkgIGxhbmd0YWdfZW50cnk7CistICBzdGF0aWMgY29uc3QgbGFuZ3RhZ19lbnRyeSBsYW5ndGFnX3RhYmxlW10gPSB7CistICAgIC8qIE1hY09TIFggaGFzICJhei1BcmFiIiwgImF6LUN5cmwiLCAiYXotTGF0biIuCistICAgICAgIFRoZSBkZWZhdWx0IHNjcmlwdCBmb3IgYXogb24gVW5peCBpcyBMYXRpbi4gICovCistICAgIHsgImF6LUxhdG4iLCAiYXoiIH0sCistICAgIC8qIE1hY09TIFggaGFzICJnYS1kb3RzIi4gIERvZXMgbm90IHlldCBleGlzdCBvbiBVbml4LiAgKi8KKy0gICAgeyAiZ2EtZG90cyIsICJnYSIgfSwKKy0gICAgLyogTWFjT1MgWCBoYXMgImtrLUN5cmwiLiAgRG9lcyBub3QgeWV0IGV4aXN0IG9uIFVuaXguICAqLworLSAgICAvKiBNYWNPUyBYIGhhcyAibW4tQ3lybCIsICJtbi1Nb25nIi4KKy0gICAgICAgVGhlIGRlZmF1bHQgc2NyaXB0IGZvciBtbiBvbiBVbml4IGlzIEN5cmlsbGljLiAgKi8KKy0gICAgeyAibW4tQ3lybCIsICJtbiIgfSwKKy0gICAgLyogTWFjT1MgWCBoYXMgIm1zLUFyYWIiLCAibXMtTGF0biIuCistICAgICAgIFRoZSBkZWZhdWx0IHNjcmlwdCBmb3IgbXMgb24gVW5peCBpcyBMYXRpbi4gICovCistICAgIHsgIm1zLUxhdG4iLCAibXMiIH0sCistICAgIC8qIE1hY09TIFggaGFzICJ0Zy1DeXJsIi4KKy0gICAgICAgVGhlIGRlZmF1bHQgc2NyaXB0IGZvciB0ZyBvbiBVbml4IGlzIEN5cmlsbGljLiAgKi8KKy0gICAgeyAidGctQ3lybCIsICJ0ZyIgfSwKKy0gICAgLyogTWFjT1MgWCBoYXMgInRrLUN5cmwiLiAgRG9lcyBub3QgeWV0IGV4aXN0IG9uIFVuaXguICAqLworLSAgICAvKiBNYWNPUyBYIGhhcyAidHQtQ3lybCIuCistICAgICAgIFRoZSBkZWZhdWx0IHNjcmlwdCBmb3IgdHQgb24gVW5peCBpcyBDeXJpbGxpYy4gICovCistICAgIHsgInR0LUN5cmwiLCAidHQiIH0sCistICAgIC8qIE1hY09TIFggaGFzICJ6aC1IYW5zIiwgInpoLUhhbnQiLgorLSAgICAgICBDb3VudHJ5IGNvZGVzIGFyZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIG9uIFVuaXguICAqLworLSAgICB7ICJ6aC1IYW5zIiwgInpoX0NOIiB9LAorLSAgICB7ICJ6aC1IYW50IiwgInpoX1RXIiB9CistICB9OworLQorLSAgLyogQ29udmVydCBzY3JpcHQgbmFtZXMgKElTTyAxNTkyNCkgdG8gVW5peCBjb252ZW50aW9ucy4KKy0gICAgIFNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2lzbzE1OTI0L2lzbzE1OTI0LWNvZGVzLmh0bWwgICovCistICB0eXBlZGVmIHN0cnVjdCB7IGNvbnN0IGNoYXIgc2NyaXB0WzQrMV07IGNvbnN0IGNoYXIgdW5peHlbOSsxXTsgfQorLQkgIHNjcmlwdF9lbnRyeTsKKy0gIHN0YXRpYyBjb25zdCBzY3JpcHRfZW50cnkgc2NyaXB0X3RhYmxlW10gPSB7CistICAgIHsgIkFyYWIiLCAiYXJhYmljIiB9LAorLSAgICB7ICJDeXJsIiwgImN5cmlsbGljIiB9LAorLSAgICB7ICJNb25nIiwgIm1vbmdvbGlhbiIgfQorLSAgfTsKKy0KKy0gIC8qIFN0ZXAgMTogQ29udmVydCB1c2luZyBsZWdhY3lfdGFibGUuICAqLworLSAgaWYgKG5hbWVbMF0gPj0gJ0EnICYmIG5hbWVbMF0gPD0gJ1onKQorLSAgICB7CistICAgICAgdW5zaWduZWQgaW50IGkxLCBpMjsKKy0gICAgICBpMSA9IDA7CistICAgICAgaTIgPSBzaXplb2YgKGxlZ2FjeV90YWJsZSkgLyBzaXplb2YgKGxlZ2FjeV9lbnRyeSk7CistICAgICAgd2hpbGUgKGkyIC0gaTEgPiAxKQorLQl7CistCSAgLyogQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgaWYgbmFtZSBvY2N1cnMgaW4gbGVnYWN5X3RhYmxlLAorLQkgICAgIGl0cyBpbmRleCBtdXN0IGJlID49IGkxIGFuZCA8IGkyLiAgKi8KKy0JICB1bnNpZ25lZCBpbnQgaSA9IChpMSArIGkyKSA+PiAxOworLQkgIGNvbnN0IGxlZ2FjeV9lbnRyeSAqcCA9ICZsZWdhY3lfdGFibGVbaV07CistCSAgaWYgKHN0cmNtcCAobmFtZSwgcC0+bGVnYWN5KSA8IDApCistCSAgICBpMiA9IGk7CistCSAgZWxzZQorLQkgICAgaTEgPSBpOworLQl9CistICAgICAgaWYgKHN0cmNtcCAobmFtZSwgbGVnYWN5X3RhYmxlW2kxXS5sZWdhY3kpID09IDApCistCXsKKy0JICBzdHJjcHkgKG5hbWUsIGxlZ2FjeV90YWJsZVtpMV0udW5peHkpOworLQkgIHJldHVybjsKKy0JfQorLSAgICB9CistCistICAvKiBTdGVwIDI6IENvbnZlcnQgdXNpbmcgbGFuZ3RhZ190YWJsZSBhbmQgc2NyaXB0X3RhYmxlLiAgKi8KKy0gIGlmIChzdHJsZW4gKG5hbWUpID09IDcgJiYgbmFtZVsyXSA9PSAnLScpCistICAgIHsKKy0gICAgICB1bnNpZ25lZCBpbnQgaTEsIGkyOworLSAgICAgIGkxID0gMDsKKy0gICAgICBpMiA9IHNpemVvZiAobGFuZ3RhZ190YWJsZSkgLyBzaXplb2YgKGxhbmd0YWdfZW50cnkpOworLSAgICAgIHdoaWxlIChpMiAtIGkxID4gMSkKKy0JeworLQkgIC8qIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IGlmIG5hbWUgb2NjdXJzIGluIGxhbmd0YWdfdGFibGUsCistCSAgICAgaXRzIGluZGV4IG11c3QgYmUgPj0gaTEgYW5kIDwgaTIuICAqLworLQkgIHVuc2lnbmVkIGludCBpID0gKGkxICsgaTIpID4+IDE7CistCSAgY29uc3QgbGFuZ3RhZ19lbnRyeSAqcCA9ICZsYW5ndGFnX3RhYmxlW2ldOworLQkgIGlmIChzdHJjbXAgKG5hbWUsIHAtPmxhbmd0YWcpIDwgMCkKKy0JICAgIGkyID0gaTsKKy0JICBlbHNlCistCSAgICBpMSA9IGk7CistCX0KKy0gICAgICBpZiAoc3RyY21wIChuYW1lLCBsYW5ndGFnX3RhYmxlW2kxXS5sYW5ndGFnKSA9PSAwKQorLQl7CistCSAgc3RyY3B5IChuYW1lLCBsYW5ndGFnX3RhYmxlW2kxXS51bml4eSk7CistCSAgcmV0dXJuOworLQl9CistCistICAgICAgaTEgPSAwOworLSAgICAgIGkyID0gc2l6ZW9mIChzY3JpcHRfdGFibGUpIC8gc2l6ZW9mIChzY3JpcHRfZW50cnkpOworLSAgICAgIHdoaWxlIChpMiAtIGkxID4gMSkKKy0JeworLQkgIC8qIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IGlmIChuYW1lICsgMykgb2NjdXJzIGluIHNjcmlwdF90YWJsZSwKKy0JICAgICBpdHMgaW5kZXggbXVzdCBiZSA+PSBpMSBhbmQgPCBpMi4gICovCistCSAgdW5zaWduZWQgaW50IGkgPSAoaTEgKyBpMikgPj4gMTsKKy0JICBjb25zdCBzY3JpcHRfZW50cnkgKnAgPSAmc2NyaXB0X3RhYmxlW2ldOworLQkgIGlmIChzdHJjbXAgKG5hbWUgKyAzLCBwLT5zY3JpcHQpIDwgMCkKKy0JICAgIGkyID0gaTsKKy0JICBlbHNlCistCSAgICBpMSA9IGk7CistCX0KKy0gICAgICBpZiAoc3RyY21wIChuYW1lICsgMywgc2NyaXB0X3RhYmxlW2kxXS5zY3JpcHQpID09IDApCistCXsKKy0JICBuYW1lWzJdID0gJ0AnOworLQkgIHN0cmNweSAobmFtZSArIDMsIHNjcmlwdF90YWJsZVtpMV0udW5peHkpOworLQkgIHJldHVybjsKKy0JfQorLSAgICB9CistCistICAvKiBTdGVwIDM6IENvbnZlcnQgbmV3LXN0eWxlIGRhc2ggdG8gVW5peCB1bmRlcnNjb3JlLiAqLworLSAgeworLSAgICBjaGFyICpwOworLSAgICBmb3IgKHAgPSBuYW1lOyAqcCAhPSAnXDAnOyBwKyspCistICAgICAgaWYgKCpwID09ICctJykKKy0JKnAgPSAnXyc7CistICB9CistfQorLQorLSNlbmRpZgorLQorLS8qIFhQRzMgZGVmaW5lcyB0aGUgcmVzdWx0IG9mICdzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKScgYXM6CistICAgIkRpcmVjdHMgJ3NldGxvY2FsZSgpJyB0byBxdWVyeSAnY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKy0gICAgc2V0dGluZyBvZiAnbG9jYWwnLiIKKy0gICBIb3dldmVyIGl0IGRvZXMgbm90IHNwZWNpZnkgdGhlIGV4YWN0IGZvcm1hdC4gIE5laXRoZXIgZG8gU1VTVjIgYW5kCistICAgSVNPIEMgOTkuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkIHN5c3RlbXMgKGUuZy4KKy0gICB0aG9zZSB1c2luZyBHTlUgQyBMaWJyYXJ5KS4gICovCistI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgX19HTElCQ19fICYmIF9fR0xJQkNfXyA+PSAyKQorLSMgZGVmaW5lIEhBVkVfTE9DQUxFX05VTEwKKy0jZW5kaWYKKy0KKy0vKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgbmFtZSwgYW5kIGNhbm9uaWNhbGl6ZSBpdCBpbnRvIFhQRyBzeW50YXgKKy0gICAgIGxhbmd1YWdlW190ZXJyaXRvcnldWy5jb2Rlc2V0XVtAbW9kaWZpZXJdCistICAgVGhlIGNvZGVzZXQgcGFydCBpbiB0aGUgcmVzdWx0IGlzIG5vdCByZWxpYWJsZTsgdGhlIGxvY2FsZV9jaGFyc2V0KCkKKy0gICBzaG91bGQgYmUgdXNlZCBmb3IgY29kZXNldCBpbmZvcm1hdGlvbiBpbnN0ZWFkLgorLSAgIFRoZSByZXN1bHQgbXVzdCBub3QgYmUgZnJlZWQ7IGl0IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLiAgKi8KKy0KKy1jb25zdCBjaGFyICoKKy1nbF9sb2NhbGVfbmFtZV9wb3NpeCAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisteworLSAgLyogVXNlIHRoZSBQT1NJWCBtZXRob2RzIG9mIGxvb2tpbmcgdG8gJ0xDX0FMTCcsICdMQ194eHgnLCBhbmQgJ0xBTkcnLgorLSAgICAgT24gc29tZSBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlICdzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCistI2lmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorLSAgcmV0dXJuIHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpOworLSNlbHNlCistICBjb25zdCBjaGFyICpyZXR2YWw7CistCistICAvKiBTZXR0aW5nIG9mIExDX0FMTCBvdmVycmlkZXMgYWxsIG90aGVyLiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworLSAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorLSAgICByZXR1cm4gcmV0dmFsOworLSAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCistICByZXR2YWwgPSBnZXRlbnYgKGNhdGVnb3J5bmFtZSk7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistICAvKiBMYXN0IHBvc3NpYmlsaXR5IGlzIHRoZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKy0gIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKy0gICAgcmV0dXJuIHJldHZhbDsKKy0KKy0gIHJldHVybiBOVUxMOworLSNlbmRpZgorLX0KKy0KKy1jb25zdCBjaGFyICoKKy1nbF9sb2NhbGVfbmFtZV9kZWZhdWx0ICh2b2lkKQorLXsKKy0gIC8qIFBPU0lYOjIwMDEgc2F5czoKKy0gICAgICJBbGwgaW1wbGVtZW50YXRpb25zIHNoYWxsIGRlZmluZSBhIGxvY2FsZSBhcyB0aGUgZGVmYXVsdCBsb2NhbGUsIHRvIGJlCistICAgICAgaW52b2tlZCB3aGVuIG5vIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc2V0LCBvciBzZXQgdG8gdGhlIGVtcHR5CistICAgICAgc3RyaW5nLiAgVGhpcyBkZWZhdWx0IGxvY2FsZSBjYW4gYmUgdGhlIFBPU0lYIGxvY2FsZSBvciBhbnkgb3RoZXIKKy0gICAgICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGxvY2FsZS4gIFNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBwcm92aWRlCistICAgICAgZmFjaWxpdGllcyBmb3IgbG9jYWwgaW5zdGFsbGF0aW9uIGFkbWluaXN0cmF0b3JzIHRvIHNldCB0aGUgZGVmYXVsdAorLSAgICAgIGxvY2FsZSwgY3VzdG9taXppbmcgaXQgZm9yIGVhY2ggbG9jYXRpb24uICBQT1NJWDoyMDAxIGRvZXMgbm90IHJlcXVpcmUKKy0gICAgICBzdWNoIGEgZmFjaWxpdHkuICAqLworLQorLSNpZiAhKEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVCB8fCBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUgfHwgZGVmaW5lZChXSU4zMl9OQVRJVkUpKQorLQorLSAgLyogVGhlIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgd2F5IG9mIHNldHRpbmcgdGhlIGxvY2FsZSwgb3RoZXIgdGhhbiB0aGUKKy0gICAgIFBPU0lYIHNwZWNpZmllZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBXZSB1c2UgQyBhcyBkZWZhdWx0IGxvY2FsZS4gICovCistICByZXR1cm4gIkMiOworLQorLSNlbHNlCistCistICAvKiBSZXR1cm4gYW4gWFBHIHN0eWxlIGxvY2FsZSBuYW1lIGxhbmd1YWdlW190ZXJyaXRvcnldW0Btb2RpZmllcl0uCistICAgICBEb24ndCBldmVuIGJvdGhlciBkZXRlcm1pbmluZyB0aGUgY29kZXNldDsgaXQncyBub3QgdXNlZnVsIGluIHRoaXMKKy0gICAgIGNvbnRleHQsIGJlY2F1c2UgbWVzc2FnZSBjYXRhbG9ncyBhcmUgbm90IHNwZWNpZmljIHRvIGEgc2luZ2xlCistICAgICBjb2Rlc2V0LiAgKi8KKy0KKy0jIGlmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVCB8fCBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUKKy0gIC8qIE1hY09TIFggMTAuMiBvciBuZXdlciAqLworLSAgeworLSAgICAvKiBDYWNoZSB0aGUgbG9jYWxlIG5hbWUsIHNpbmNlIENvcmVGb3VuZGF0aW9uIGNhbGxzIGFyZSBleHBlbnNpdmUuICAqLworLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY2FjaGVkX2xvY2FsZW5hbWU7CistCistICAgIGlmIChjYWNoZWRfbG9jYWxlbmFtZSA9PSBOVUxMKQorLSAgICAgIHsKKy0JY2hhciBuYW1lYnVmWzI1Nl07CistIyAgaWYgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UIC8qIE1hY09TIFggMTAuMyBvciBuZXdlciAqLworLQlDRkxvY2FsZVJlZiBsb2NhbGUgPSBDRkxvY2FsZUNvcHlDdXJyZW50ICgpOworLQlDRlN0cmluZ1JlZiBuYW1lID0gQ0ZMb2NhbGVHZXRJZGVudGlmaWVyIChsb2NhbGUpOworLQorLQlpZiAoQ0ZTdHJpbmdHZXRDU3RyaW5nIChuYW1lLCBuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksCistCQkJCWtDRlN0cmluZ0VuY29kaW5nQVNDSUkpKQorLQkgIHsKKy0JICAgIGdsX2xvY2FsZV9uYW1lX2Nhbm9uaWNhbGl6ZSAobmFtZWJ1Zik7CistCSAgICBjYWNoZWRfbG9jYWxlbmFtZSA9IHN0cmR1cCAobmFtZWJ1Zik7CistCSAgfQorLQlDRlJlbGVhc2UgKGxvY2FsZSk7CistIyAgZWxpZiBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUgLyogTWFjT1MgWCAxMC4yIG9yIG5ld2VyICovCistCUNGVHlwZVJlZiB2YWx1ZSA9CistCSAgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSAoQ0ZTVFIgKCJBcHBsZUxvY2FsZSIpLAorLQkJCQkgICAgIGtDRlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uKTsKKy0JaWYgKHZhbHVlICE9IE5VTEwKKy0JICAgICYmIENGR2V0VHlwZUlEICh2YWx1ZSkgPT0gQ0ZTdHJpbmdHZXRUeXBlSUQgKCkKKy0JICAgICYmIENGU3RyaW5nR2V0Q1N0cmluZyAoKENGU3RyaW5nUmVmKXZhbHVlLCBuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksCistCQkJCSAgIGtDRlN0cmluZ0VuY29kaW5nQVNDSUkpKQorLQkgIHsKKy0JICAgIGdsX2xvY2FsZV9uYW1lX2Nhbm9uaWNhbGl6ZSAobmFtZWJ1Zik7CistCSAgICBjYWNoZWRfbG9jYWxlbmFtZSA9IHN0cmR1cCAobmFtZWJ1Zik7CistCSAgfQorLSMgIGVuZGlmCistCWlmIChjYWNoZWRfbG9jYWxlbmFtZSA9PSBOVUxMKQorLQkgIGNhY2hlZF9sb2NhbGVuYW1lID0gIkMiOworLSAgICAgIH0KKy0gICAgcmV0dXJuIGNhY2hlZF9sb2NhbGVuYW1lOworLSAgfQorLQorLSMgZW5kaWYKKy0KKy0jIGlmIGRlZmluZWQoV0lOMzJfTkFUSVZFKSAvKiBXSU4zMiwgbm90IEN5Z3dpbiAqLworLSAgeworLSAgICBMQ0lEIGxjaWQ7CistICAgIExBTkdJRCBsYW5naWQ7CistICAgIGludCBwcmltYXJ5LCBzdWI7CistCistICAgIC8qIFVzZSBuYXRpdmUgV2luMzIgQVBJIGxvY2FsZSBJRC4gICovCistICAgIGxjaWQgPSBHZXRUaHJlYWRMb2NhbGUgKCk7CistCistICAgIC8qIFN0cmlwIG9mZiB0aGUgc29ydGluZyBydWxlcywga2VlcCBvbmx5IHRoZSBsYW5ndWFnZSBwYXJ0LiAgKi8KKy0gICAgbGFuZ2lkID0gTEFOR0lERlJPTUxDSUQgKGxjaWQpOworLQorLSAgICAvKiBTcGxpdCBpbnRvIGxhbmd1YWdlIGFuZCB0ZXJyaXRvcnkgcGFydC4gICovCistICAgIHByaW1hcnkgPSBQUklNQVJZTEFOR0lEIChsYW5naWQpOworLSAgICBzdWIgPSBTVUJMQU5HSUQgKGxhbmdpZCk7CistCistICAgIC8qIERpc3BhdGNoIG9uIGxhbmd1YWdlLgorLSAgICAgICBTZWUgYWxzbyBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvb25saW5lZGF0L2xhbmd1YWdlcy5odG1sIC4KKy0gICAgICAgRm9yIGRldGFpbHMgYWJvdXQgbGFuZ3VhZ2VzLCBzZWUgaHR0cDovL3d3dy5ldGhub2xvZ3VlLmNvbS8gLiAgKi8KKy0gICAgc3dpdGNoIChwcmltYXJ5KQorLSAgICAgIHsKKy0gICAgICBjYXNlIExBTkdfQUZSSUtBQU5TOiByZXR1cm4gImFmX1pBIjsKKy0gICAgICBjYXNlIExBTkdfQUxCQU5JQU46IHJldHVybiAic3FfQUwiOworLSAgICAgIGNhc2UgTEFOR19BTUhBUklDOiByZXR1cm4gImFtX0VUIjsKKy0gICAgICBjYXNlIExBTkdfQVJBQklDOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUE6IHJldHVybiAiYXJfU0EiOworLQkgIGNhc2UgU1VCTEFOR19BUkFCSUNfSVJBUTogcmV0dXJuICJhcl9JUSI7CistCSAgY2FzZSBTVUJMQU5HX0FSQUJJQ19FR1lQVDogcmV0dXJuICJhcl9FRyI7CistCSAgY2FzZSBTVUJMQU5HX0FSQUJJQ19MSUJZQTogcmV0dXJuICJhcl9MWSI7CistCSAgY2FzZSBTVUJMQU5HX0FSQUJJQ19BTEdFUklBOiByZXR1cm4gImFyX0RaIjsKKy0JICBjYXNlIFNVQkxBTkdfQVJBQklDX01PUk9DQ086IHJldHVybiAiYXJfTUEiOworLQkgIGNhc2UgU1VCTEFOR19BUkFCSUNfVFVOSVNJQTogcmV0dXJuICJhcl9UTiI7CistCSAgY2FzZSBTVUJMQU5HX0FSQUJJQ19PTUFOOiByZXR1cm4gImFyX09NIjsKKy0JICBjYXNlIFNVQkxBTkdfQVJBQklDX1lFTUVOOiByZXR1cm4gImFyX1lFIjsKKy0JICBjYXNlIFNVQkxBTkdfQVJBQklDX1NZUklBOiByZXR1cm4gImFyX1NZIjsKKy0JICBjYXNlIFNVQkxBTkdfQVJBQklDX0pPUkRBTjogcmV0dXJuICJhcl9KTyI7CistCSAgY2FzZSBTVUJMQU5HX0FSQUJJQ19MRUJBTk9OOiByZXR1cm4gImFyX0xCIjsKKy0JICBjYXNlIFNVQkxBTkdfQVJBQklDX0tVV0FJVDogcmV0dXJuICJhcl9LVyI7CistCSAgY2FzZSBTVUJMQU5HX0FSQUJJQ19VQUU6IHJldHVybiAiYXJfQUUiOworLQkgIGNhc2UgU1VCTEFOR19BUkFCSUNfQkFIUkFJTjogcmV0dXJuICJhcl9CSCI7CistCSAgY2FzZSBTVUJMQU5HX0FSQUJJQ19RQVRBUjogcmV0dXJuICJhcl9RQSI7CistCSAgfQorLQlyZXR1cm4gImFyIjsKKy0gICAgICBjYXNlIExBTkdfQVJNRU5JQU46IHJldHVybiAiaHlfQU0iOworLSAgICAgIGNhc2UgTEFOR19BU1NBTUVTRTogcmV0dXJuICJhc19JTiI7CistICAgICAgY2FzZSBMQU5HX0FaRVJJOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gQXplcmJhaWphbmkgbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCistCSAgY2FzZSBTVUJMQU5HX0FaRVJJX0xBVElOOiByZXR1cm4gImF6X0FaQGxhdGluIjsKKy0JICBjYXNlIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUM6IHJldHVybiAiYXpfQVpAY3lyaWxsaWMiOworLQkgIH0KKy0JcmV0dXJuICJheiI7CistICAgICAgY2FzZSBMQU5HX0JBU1FVRToKKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIGNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gImV1X0VTIjsKKy0JICB9CistCXJldHVybiAiZXUiOyAvKiBBbWJpZ3VvdXM6IGNvdWxkIGJlICJldV9FUyIgb3IgImV1X0ZSIi4gICovCistICAgICAgY2FzZSBMQU5HX0JFTEFSVVNJQU46IHJldHVybiAiYmVfQlkiOworLSAgICAgIGNhc2UgTEFOR19CRU5HQUxJOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSBTVUJMQU5HX0JFTkdBTElfSU5ESUE6IHJldHVybiAiYm5fSU4iOworLQkgIGNhc2UgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0g6IHJldHVybiAiYm5fQkQiOworLQkgIH0KKy0JcmV0dXJuICJibiI7CistICAgICAgY2FzZSBMQU5HX0JVTEdBUklBTjogcmV0dXJuICJiZ19CRyI7CistICAgICAgY2FzZSBMQU5HX0JVUk1FU0U6IHJldHVybiAibXlfTU0iOworLSAgICAgIGNhc2UgTEFOR19DQU1CT0RJQU46IHJldHVybiAia21fS0giOworLSAgICAgIGNhc2UgTEFOR19DQVRBTEFOOiByZXR1cm4gImNhX0VTIjsKKy0gICAgICBjYXNlIExBTkdfQ0hFUk9LRUU6IHJldHVybiAiY2hyX1VTIjsKKy0gICAgICBjYXNlIExBTkdfQ0hJTkVTRToKKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIGNhc2UgU1VCTEFOR19DSElORVNFX1RSQURJVElPTkFMOiByZXR1cm4gInpoX1RXIjsKKy0JICBjYXNlIFNVQkxBTkdfQ0hJTkVTRV9TSU1QTElGSUVEOiByZXR1cm4gInpoX0NOIjsKKy0JICBjYXNlIFNVQkxBTkdfQ0hJTkVTRV9IT05HS09ORzogcmV0dXJuICJ6aF9ISyI7CistCSAgY2FzZSBTVUJMQU5HX0NISU5FU0VfU0lOR0FQT1JFOiByZXR1cm4gInpoX1NHIjsKKy0JICBjYXNlIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVTogcmV0dXJuICJ6aF9NTyI7CistCSAgfQorLQlyZXR1cm4gInpoIjsKKy0gICAgICBjYXNlIExBTkdfQ1JPQVRJQU46ICAgICAgIC8qIExBTkdfQ1JPQVRJQU4gPT0gTEFOR19TRVJCSUFOCistCQkJCSAqIFdoYXQgdXNlZCB0byBiZSBjYWxsZWQgU2VyYm8tQ3JvYXRpYW4KKy0JCQkJICogc2hvdWxkIHJlYWxseSBub3cgYmUgdHdvIHNlcGFyYXRlCistCQkJCSAqIGxhbmd1YWdlcyBiZWNhdXNlIG9mIHBvbGl0aWNhbCByZWFzb25zLgorLQkJCQkgKiAoU2F5cyB0bWwsIHdobyBrbm93cyBub3RoaW5nIGFib3V0IFNlcmJpYW4KKy0JCQkJICogb3IgQ3JvYXRpYW4uKQorLQkJCQkgKiAoSSBjYW4gZmVlbCB0aG9zZSBmbGFtZXMgY29taW5nIGFscmVhZHkuKQorLQkJCQkgKi8KKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIGNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gImhyX0hSIjsKKy0JICBjYXNlIFNVQkxBTkdfU0VSQklBTl9MQVRJTjogcmV0dXJuICJzcl9DUyI7CistCSAgY2FzZSBTVUJMQU5HX1NFUkJJQU5fQ1lSSUxMSUM6IHJldHVybiAic3JfQ1NAY3lyaWxsaWMiOworLQkgIH0KKy0JcmV0dXJuICJociI7CistICAgICAgY2FzZSBMQU5HX0NaRUNIOiByZXR1cm4gImNzX0NaIjsKKy0gICAgICBjYXNlIExBTkdfREFOSVNIOiByZXR1cm4gImRhX0RLIjsKKy0gICAgICBjYXNlIExBTkdfRElWRUhJOiByZXR1cm4gImR2X01WIjsKKy0gICAgICBjYXNlIExBTkdfRFVUQ0g6CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfRFVUQ0g6IHJldHVybiAibmxfTkwiOworLQkgIGNhc2UgU1VCTEFOR19EVVRDSF9CRUxHSUFOOiAvKiBGTEVNSVNILCBWTEFBTVMgKi8gcmV0dXJuICJubF9CRSI7CistCSAgfQorLQlyZXR1cm4gIm5sIjsKKy0gICAgICBjYXNlIExBTkdfRURPOiByZXR1cm4gImJpbl9ORyI7CistICAgICAgY2FzZSBMQU5HX0VOR0xJU0g6CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICAvKiBTVUJMQU5HX0VOR0xJU0hfVVMgPT0gU1VCTEFOR19ERUZBVUxULiBIZWguIEkgdGhvdWdodAorLQkgICAqIEVuZ2xpc2ggd2FzIHRoZSBsYW5ndWFnZSBzcG9rZW4gaW4gRW5nbGFuZC4KKy0JICAgKiBPaCB3ZWxsLgorLQkgICAqLworLQkgIGNhc2UgU1VCTEFOR19FTkdMSVNIX1VTOiByZXR1cm4gImVuX1VTIjsKKy0JICBjYXNlIFNVQkxBTkdfRU5HTElTSF9VSzogcmV0dXJuICJlbl9HQiI7CistCSAgY2FzZSBTVUJMQU5HX0VOR0xJU0hfQVVTOiByZXR1cm4gImVuX0FVIjsKKy0JICBjYXNlIFNVQkxBTkdfRU5HTElTSF9DQU46IHJldHVybiAiZW5fQ0EiOworLQkgIGNhc2UgU1VCTEFOR19FTkdMSVNIX05aOiByZXR1cm4gImVuX05aIjsKKy0JICBjYXNlIFNVQkxBTkdfRU5HTElTSF9FSVJFOiByZXR1cm4gImVuX0lFIjsKKy0JICBjYXNlIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0E6IHJldHVybiAiZW5fWkEiOworLQkgIGNhc2UgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0E6IHJldHVybiAiZW5fSk0iOworLQkgIGNhc2UgU1VCTEFOR19FTkdMSVNIX0NBUklCQkVBTjogcmV0dXJuICJlbl9HRCI7IC8qIEdyZW5hZGE/ICovCistCSAgY2FzZSBTVUJMQU5HX0VOR0xJU0hfQkVMSVpFOiByZXR1cm4gImVuX0JaIjsKKy0JICBjYXNlIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRDogcmV0dXJuICJlbl9UVCI7CistCSAgY2FzZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0U6IHJldHVybiAiZW5fWlciOworLQkgIGNhc2UgU1VCTEFOR19FTkdMSVNIX1BISUxJUFBJTkVTOiByZXR1cm4gImVuX1BIIjsKKy0JICBjYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUE6IHJldHVybiAiZW5fSUQiOworLQkgIGNhc2UgU1VCTEFOR19FTkdMSVNIX0hPTkdLT05HOiByZXR1cm4gImVuX0hLIjsKKy0JICBjYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRJQTogcmV0dXJuICJlbl9JTiI7CistCSAgY2FzZSBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUE6IHJldHVybiAiZW5fTVkiOworLQkgIGNhc2UgU1VCTEFOR19FTkdMSVNIX1NJTkdBUE9SRTogcmV0dXJuICJlbl9TRyI7CistCSAgfQorLQlyZXR1cm4gImVuIjsKKy0gICAgICBjYXNlIExBTkdfRVNUT05JQU46IHJldHVybiAiZXRfRUUiOworLSAgICAgIGNhc2UgTEFOR19GQUVST0VTRTogcmV0dXJuICJmb19GTyI7CistICAgICAgY2FzZSBMQU5HX0ZBUlNJOiByZXR1cm4gImZhX0lSIjsKKy0gICAgICBjYXNlIExBTkdfRklOTklTSDogcmV0dXJuICJmaV9GSSI7CistICAgICAgY2FzZSBMQU5HX0ZSRU5DSDoKKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIGNhc2UgU1VCTEFOR19GUkVOQ0g6IHJldHVybiAiZnJfRlIiOworLQkgIGNhc2UgU1VCTEFOR19GUkVOQ0hfQkVMR0lBTjogLyogV0FMTE9PTiAqLyByZXR1cm4gImZyX0JFIjsKKy0JICBjYXNlIFNVQkxBTkdfRlJFTkNIX0NBTkFESUFOOiByZXR1cm4gImZyX0NBIjsKKy0JICBjYXNlIFNVQkxBTkdfRlJFTkNIX1NXSVNTOiByZXR1cm4gImZyX0NIIjsKKy0JICBjYXNlIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkc6IHJldHVybiAiZnJfTFUiOworLQkgIGNhc2UgU1VCTEFOR19GUkVOQ0hfTU9OQUNPOiByZXR1cm4gImZyX01DIjsKKy0JICBjYXNlIFNVQkxBTkdfRlJFTkNIX1dFU1RJTkRJRVM6IHJldHVybiAiZnIiOyAvKiBDYXJpYmJlYW4/ICovCistCSAgY2FzZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OOiByZXR1cm4gImZyX1JFIjsKKy0JICBjYXNlIFNVQkxBTkdfRlJFTkNIX0NPTkdPOiByZXR1cm4gImZyX0NHIjsKKy0JICBjYXNlIFNVQkxBTkdfRlJFTkNIX1NFTkVHQUw6IHJldHVybiAiZnJfU04iOworLQkgIGNhc2UgU1VCTEFOR19GUkVOQ0hfQ0FNRVJPT046IHJldHVybiAiZnJfQ00iOworLQkgIGNhc2UgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkU6IHJldHVybiAiZnJfQ0kiOworLQkgIGNhc2UgU1VCTEFOR19GUkVOQ0hfTUFMSTogcmV0dXJuICJmcl9NTCI7CistCSAgY2FzZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPOiByZXR1cm4gImZyX01BIjsKKy0JICBjYXNlIFNVQkxBTkdfRlJFTkNIX0hBSVRJOiByZXR1cm4gImZyX0hUIjsKKy0JICB9CistCXJldHVybiAiZnIiOworLSAgICAgIGNhc2UgTEFOR19GUklTSUFOOiByZXR1cm4gImZ5X05MIjsKKy0gICAgICBjYXNlIExBTkdfRlVMRlVMREU6CistCS8qIFNwb2tlbiBpbiBOaWdlcmlhLCBHdWluZWEsIFNlbmVnYWwsIE1hbGksIE5pZ2VyLCBDYW1lcm9vbiwgQmVuaW4uICAqLworLQlyZXR1cm4gImZmX05HIjsKKy0gICAgICBjYXNlIExBTkdfR0FFTElDOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSAweDAxOiAvKiBTQ09UVElTSCAqLyByZXR1cm4gImdkX0dCIjsKKy0JICBjYXNlIDB4MDI6IC8qIElSSVNIICovIHJldHVybiAiZ2FfSUUiOworLQkgIH0KKy0JcmV0dXJuICJDIjsKKy0gICAgICBjYXNlIExBTkdfR0FMSUNJQU46IHJldHVybiAiZ2xfRVMiOworLSAgICAgIGNhc2UgTEFOR19HRU9SR0lBTjogcmV0dXJuICJrYV9HRSI7CistICAgICAgY2FzZSBMQU5HX0dFUk1BTjoKKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIGNhc2UgU1VCTEFOR19HRVJNQU46IHJldHVybiAiZGVfREUiOworLQkgIGNhc2UgU1VCTEFOR19HRVJNQU5fU1dJU1M6IHJldHVybiAiZGVfQ0giOworLQkgIGNhc2UgU1VCTEFOR19HRVJNQU5fQVVTVFJJQU46IHJldHVybiAiZGVfQVQiOworLQkgIGNhc2UgU1VCTEFOR19HRVJNQU5fTFVYRU1CT1VSRzogcmV0dXJuICJkZV9MVSI7CistCSAgY2FzZSBTVUJMQU5HX0dFUk1BTl9MSUVDSFRFTlNURUlOOiByZXR1cm4gImRlX0xJIjsKKy0JICB9CistCXJldHVybiAiZGUiOworLSAgICAgIGNhc2UgTEFOR19HUkVFSzogcmV0dXJuICJlbF9HUiI7CistICAgICAgY2FzZSBMQU5HX0dVQVJBTkk6IHJldHVybiAiZ25fUFkiOworLSAgICAgIGNhc2UgTEFOR19HVUpBUkFUSTogcmV0dXJuICJndV9JTiI7CistICAgICAgY2FzZSBMQU5HX0hBVVNBOiByZXR1cm4gImhhX05HIjsKKy0gICAgICBjYXNlIExBTkdfSEFXQUlJQU46CistCS8qIEZJWE1FOiBEbyB0aGV5IG1lYW4gSGF3YWlpYW4gKCJoYXdfVVMiLCAxMDAwIHNwZWFrZXJzKQorLQkgICBvciBIYXdhaWkgQ3Jlb2xlIEVuZ2xpc2ggKCJjcGVfVVMiLCA2MDAwMDAgc3BlYWtlcnMpPyAgKi8KKy0JcmV0dXJuICJjcGVfVVMiOworLSAgICAgIGNhc2UgTEFOR19IRUJSRVc6IHJldHVybiAiaGVfSUwiOworLSAgICAgIGNhc2UgTEFOR19ISU5ESTogcmV0dXJuICJoaV9JTiI7CistICAgICAgY2FzZSBMQU5HX0hVTkdBUklBTjogcmV0dXJuICJodV9IVSI7CistICAgICAgY2FzZSBMQU5HX0lCSUJJTzogcmV0dXJuICJuaWNfTkciOworLSAgICAgIGNhc2UgTEFOR19JQ0VMQU5ESUM6IHJldHVybiAiaXNfSVMiOworLSAgICAgIGNhc2UgTEFOR19JR0JPOiByZXR1cm4gImlnX05HIjsKKy0gICAgICBjYXNlIExBTkdfSU5ET05FU0lBTjogcmV0dXJuICJpZF9JRCI7CistICAgICAgY2FzZSBMQU5HX0lOVUtUSVRVVDogcmV0dXJuICJpdV9DQSI7CistICAgICAgY2FzZSBMQU5HX0lUQUxJQU46CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfSVRBTElBTjogcmV0dXJuICJpdF9JVCI7CistCSAgY2FzZSBTVUJMQU5HX0lUQUxJQU5fU1dJU1M6IHJldHVybiAiaXRfQ0giOworLQkgIH0KKy0JcmV0dXJuICJpdCI7CistICAgICAgY2FzZSBMQU5HX0pBUEFORVNFOiByZXR1cm4gImphX0pQIjsKKy0gICAgICBjYXNlIExBTkdfS0FOTkFEQTogcmV0dXJuICJrbl9JTiI7CistICAgICAgY2FzZSBMQU5HX0tBTlVSSTogcmV0dXJuICJrcl9ORyI7CistICAgICAgY2FzZSBMQU5HX0tBU0hNSVJJOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAia3NfUEsiOworLQkgIGNhc2UgU1VCTEFOR19LQVNITUlSSV9JTkRJQTogcmV0dXJuICJrc19JTiI7CistCSAgfQorLQlyZXR1cm4gImtzIjsKKy0gICAgICBjYXNlIExBTkdfS0FaQUs6IHJldHVybiAia2tfS1oiOworLSAgICAgIGNhc2UgTEFOR19LT05LQU5JOgorLQkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworLQlyZXR1cm4gImtva19JTiI7CistICAgICAgY2FzZSBMQU5HX0tPUkVBTjogcmV0dXJuICJrb19LUiI7CistICAgICAgY2FzZSBMQU5HX0tZUkdZWjogcmV0dXJuICJreV9LRyI7CistICAgICAgY2FzZSBMQU5HX0xBTzogcmV0dXJuICJsb19MQSI7CistICAgICAgY2FzZSBMQU5HX0xBVElOOiByZXR1cm4gImxhX1ZBIjsKKy0gICAgICBjYXNlIExBTkdfTEFUVklBTjogcmV0dXJuICJsdl9MViI7CistICAgICAgY2FzZSBMQU5HX0xJVEhVQU5JQU46IHJldHVybiAibHRfTFQiOworLSAgICAgIGNhc2UgTEFOR19NQUNFRE9OSUFOOiByZXR1cm4gIm1rX01LIjsKKy0gICAgICBjYXNlIExBTkdfTUFMQVk6CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfTUFMQVlfTUFMQVlTSUE6IHJldHVybiAibXNfTVkiOworLQkgIGNhc2UgU1VCTEFOR19NQUxBWV9CUlVORUlfREFSVVNTQUxBTTogcmV0dXJuICJtc19CTiI7CistCSAgfQorLQlyZXR1cm4gIm1zIjsKKy0gICAgICBjYXNlIExBTkdfTUFMQVlBTEFNOiByZXR1cm4gIm1sX0lOIjsKKy0gICAgICBjYXNlIExBTkdfTUFMVEVTRTogcmV0dXJuICJtdF9NVCI7CistICAgICAgY2FzZSBMQU5HX01BTklQVVJJOgorLQkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworLQlyZXR1cm4gIm1uaV9JTiI7CistICAgICAgY2FzZSBMQU5HX01BUkFUSEk6IHJldHVybiAibXJfSU4iOworLSAgICAgIGNhc2UgTEFOR19NT05HT0xJQU46CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJtbl9NTiI7CistCSAgfQorLQlyZXR1cm4gIm1uIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAibW5fQ04iIG9yICJtbl9NTiIuICAqLworLSAgICAgIGNhc2UgTEFOR19ORVBBTEk6CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJuZV9OUCI7CistCSAgY2FzZSBTVUJMQU5HX05FUEFMSV9JTkRJQTogcmV0dXJuICJuZV9JTiI7CistCSAgfQorLQlyZXR1cm4gIm5lIjsKKy0gICAgICBjYXNlIExBTkdfTk9SV0VHSUFOOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUw6IHJldHVybiAibmJfTk8iOworLQkgIGNhc2UgU1VCTEFOR19OT1JXRUdJQU5fTllOT1JTSzogcmV0dXJuICJubl9OTyI7CistCSAgfQorLQlyZXR1cm4gIm5vIjsKKy0gICAgICBjYXNlIExBTkdfT1JJWUE6IHJldHVybiAib3JfSU4iOworLSAgICAgIGNhc2UgTEFOR19PUk9NTzogcmV0dXJuICJvbV9FVCI7CistICAgICAgY2FzZSBMQU5HX1BBUElBTUVOVFU6IHJldHVybiAicGFwX0FOIjsKKy0gICAgICBjYXNlIExBTkdfUEFTSFRPOgorLQlyZXR1cm4gInBzIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAicHNfUEsiIG9yICJwc19BRiIuICAqLworLSAgICAgIGNhc2UgTEFOR19QT0xJU0g6IHJldHVybiAicGxfUEwiOworLSAgICAgIGNhc2UgTEFOR19QT1JUVUdVRVNFOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0U6IHJldHVybiAicHRfUFQiOworLQkgIC8qIEhtbS4gU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTiA9PSBTVUJMQU5HX0RFRkFVTFQuCistCSAgICAgU2FtZSBwaGVub21lbm9uIGFzIFNVQkxBTkdfRU5HTElTSF9VUyA9PSBTVUJMQU5HX0RFRkFVTFQuICovCistCSAgY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOOiByZXR1cm4gInB0X0JSIjsKKy0JICB9CistCXJldHVybiAicHQiOworLSAgICAgIGNhc2UgTEFOR19QVU5KQUJJOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSBTVUJMQU5HX1BVTkpBQklfSU5ESUE6IHJldHVybiAicGFfSU4iOyAvKiBHdXJtdWtoaSBzY3JpcHQgKi8KKy0JICBjYXNlIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTjogcmV0dXJuICJwYV9QSyI7IC8qIEFyYWJpYyBzY3JpcHQgKi8KKy0JICB9CistCXJldHVybiAicGEiOworLSAgICAgIGNhc2UgTEFOR19SSEFFVE9fUk9NQU5DRTogcmV0dXJuICJybV9DSCI7CistICAgICAgY2FzZSBMQU5HX1JPTUFOSUFOOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUE6IHJldHVybiAicm9fUk8iOworLQkgIGNhc2UgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBOiByZXR1cm4gInJvX01EIjsKKy0JICB9CistCXJldHVybiAicm8iOworLSAgICAgIGNhc2UgTEFOR19SVVNTSUFOOgorLQlzd2l0Y2ggKHN1YikKKy0JICB7CistCSAgY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAicnVfUlUiOworLQkgIH0KKy0JcmV0dXJuICJydSI7IC8qIEFtYmlndW91czogY291bGQgYmUgInJ1X1JVIiBvciAicnVfVUEiIG9yICJydV9NRCIuICAqLworLSAgICAgIGNhc2UgTEFOR19TQUFNSTogLyogYWN0dWFsbHkgTm9ydGhlcm4gU2FtaSAqLyByZXR1cm4gInNlX05PIjsKKy0gICAgICBjYXNlIExBTkdfU0FOU0tSSVQ6IHJldHVybiAic2FfSU4iOworLSAgICAgIGNhc2UgTEFOR19TSU5ESEk6CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfU0lOREhJX1BBS0lTVEFOOiByZXR1cm4gInNkX1BLIjsKKy0JICBjYXNlIFNVQkxBTkdfU0lOREhJX0FGR0hBTklTVEFOOiByZXR1cm4gInNkX0FGIjsKKy0JICB9CistCXJldHVybiAic2QiOworLSAgICAgIGNhc2UgTEFOR19TSU5IQUxFU0U6IHJldHVybiAic2lfTEsiOworLSAgICAgIGNhc2UgTEFOR19TTE9WQUs6IHJldHVybiAic2tfU0siOworLSAgICAgIGNhc2UgTEFOR19TTE9WRU5JQU46IHJldHVybiAic2xfU0kiOworLSAgICAgIGNhc2UgTEFOR19TT01BTEk6IHJldHVybiAic29fU08iOworLSAgICAgIGNhc2UgTEFOR19TT1JCSUFOOgorLQkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworLQlyZXR1cm4gIndlbl9ERSI7CistICAgICAgY2FzZSBMQU5HX1NQQU5JU0g6CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfU1BBTklTSDogcmV0dXJuICJlc19FUyI7CistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfTUVYSUNBTjogcmV0dXJuICJlc19NWCI7CistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfTU9ERVJOOgorLQkgICAgcmV0dXJuICJlc19FU0Btb2Rlcm4iOwkvKiBub3Qgc2VlbiBvbiBVbml4ICovCistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBOiByZXR1cm4gImVzX0dUIjsKKy0JICBjYXNlIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBOiByZXR1cm4gImVzX0NSIjsKKy0JICBjYXNlIFNVQkxBTkdfU1BBTklTSF9QQU5BTUE6IHJldHVybiAiZXNfUEEiOworLQkgIGNhc2UgU1VCTEFOR19TUEFOSVNIX0RPTUlOSUNBTl9SRVBVQkxJQzogcmV0dXJuICJlc19ETyI7CistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBOiByZXR1cm4gImVzX1ZFIjsKKy0JICBjYXNlIFNVQkxBTkdfU1BBTklTSF9DT0xPTUJJQTogcmV0dXJuICJlc19DTyI7CistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEVSVTogcmV0dXJuICJlc19QRSI7CistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BOiByZXR1cm4gImVzX0FSIjsKKy0JICBjYXNlIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SOiByZXR1cm4gImVzX0VDIjsKKy0JICBjYXNlIFNVQkxBTkdfU1BBTklTSF9DSElMRTogcmV0dXJuICJlc19DTCI7CistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWTogcmV0dXJuICJlc19VWSI7CistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEFSQUdVQVk6IHJldHVybiAiZXNfUFkiOworLQkgIGNhc2UgU1VCTEFOR19TUEFOSVNIX0JPTElWSUE6IHJldHVybiAiZXNfQk8iOworLQkgIGNhc2UgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SOiByZXR1cm4gImVzX1NWIjsKKy0JICBjYXNlIFNVQkxBTkdfU1BBTklTSF9IT05EVVJBUzogcmV0dXJuICJlc19ITiI7CistCSAgY2FzZSBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBOiByZXR1cm4gImVzX05JIjsKKy0JICBjYXNlIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTzogcmV0dXJuICJlc19QUiI7CistCSAgfQorLQlyZXR1cm4gImVzIjsKKy0gICAgICBjYXNlIExBTkdfU1VUVTogcmV0dXJuICJibnRfVFoiOyAvKiBvciAic3RfTFMiIG9yICJuc29fWkEiPyAqLworLSAgICAgIGNhc2UgTEFOR19TV0FISUxJOiByZXR1cm4gInN3X0tFIjsKKy0gICAgICBjYXNlIExBTkdfU1dFRElTSDoKKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIGNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gInN2X1NFIjsKKy0JICBjYXNlIFNVQkxBTkdfU1dFRElTSF9GSU5MQU5EOiByZXR1cm4gInN2X0ZJIjsKKy0JICB9CistCXJldHVybiAic3YiOworLSAgICAgIGNhc2UgTEFOR19TWVJJQUM6IHJldHVybiAic3lyX1RSIjsgLyogQW4gZXh0aW5jdCBsYW5ndWFnZS4gICovCistICAgICAgY2FzZSBMQU5HX1RBR0FMT0c6IHJldHVybiAidGxfUEgiOworLSAgICAgIGNhc2UgTEFOR19UQUpJSzogcmV0dXJuICJ0Z19USiI7CistICAgICAgY2FzZSBMQU5HX1RBTUFaSUdIVDoKKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIC8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIFRhbWF6aWdodCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKy0JICBjYXNlIFNVQkxBTkdfVEFNQVpJR0hUX0FSQUJJQzogcmV0dXJuICJiZXJfTUFAYXJhYmljIjsKKy0JICBjYXNlIFNVQkxBTkdfVEFNQVpJR0hUX0FMR0VSSUFfTEFUSU46IHJldHVybiAiYmVyX0RaQGxhdGluIjsKKy0JICB9CistCXJldHVybiAiYmVyX01BIjsKKy0gICAgICBjYXNlIExBTkdfVEFNSUw6CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJ0YV9JTiI7CistCSAgfQorLQlyZXR1cm4gInRhIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAidGFfSU4iIG9yICJ0YV9MSyIgb3IgInRhX1NHIi4gICovCistICAgICAgY2FzZSBMQU5HX1RBVEFSOiByZXR1cm4gInR0X1JVIjsKKy0gICAgICBjYXNlIExBTkdfVEVMVUdVOiByZXR1cm4gInRlX0lOIjsKKy0gICAgICBjYXNlIExBTkdfVEhBSTogcmV0dXJuICJ0aF9USCI7CistICAgICAgY2FzZSBMQU5HX1RJQkVUQU46IHJldHVybiAiYm9fQ04iOworLSAgICAgIGNhc2UgTEFOR19USUdSSU5ZQToKKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIGNhc2UgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQTogcmV0dXJuICJ0aV9FVCI7CistCSAgY2FzZSBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUE6IHJldHVybiAidGlfRVIiOworLQkgIH0KKy0JcmV0dXJuICJ0aSI7CistICAgICAgY2FzZSBMQU5HX1RTT05HQTogcmV0dXJuICJ0c19aQSI7CistICAgICAgY2FzZSBMQU5HX1RTV0FOQTogcmV0dXJuICJ0bl9CVyI7CistICAgICAgY2FzZSBMQU5HX1RVUktJU0g6IHJldHVybiAidHJfVFIiOworLSAgICAgIGNhc2UgTEFOR19UVVJLTUVOOiByZXR1cm4gInRrX1RNIjsKKy0gICAgICBjYXNlIExBTkdfVUtSQUlOSUFOOiByZXR1cm4gInVrX1VBIjsKKy0gICAgICBjYXNlIExBTkdfVVJEVToKKy0Jc3dpdGNoIChzdWIpCistCSAgeworLQkgIGNhc2UgU1VCTEFOR19VUkRVX1BBS0lTVEFOOiByZXR1cm4gInVyX1BLIjsKKy0JICBjYXNlIFNVQkxBTkdfVVJEVV9JTkRJQTogcmV0dXJuICJ1cl9JTiI7CistCSAgfQorLQlyZXR1cm4gInVyIjsKKy0gICAgICBjYXNlIExBTkdfVVpCRUs6CistCXN3aXRjaCAoc3ViKQorLQkgIHsKKy0JICBjYXNlIFNVQkxBTkdfVVpCRUtfTEFUSU46IHJldHVybiAidXpfVVoiOworLQkgIGNhc2UgU1VCTEFOR19VWkJFS19DWVJJTExJQzogcmV0dXJuICJ1el9VWkBjeXJpbGxpYyI7CistCSAgfQorLQlyZXR1cm4gInV6IjsKKy0gICAgICBjYXNlIExBTkdfVkVOREE6IHJldHVybiAidmVfWkEiOworLSAgICAgIGNhc2UgTEFOR19WSUVUTkFNRVNFOiByZXR1cm4gInZpX1ZOIjsKKy0gICAgICBjYXNlIExBTkdfV0VMU0g6IHJldHVybiAiY3lfR0IiOworLSAgICAgIGNhc2UgTEFOR19YSE9TQTogcmV0dXJuICJ4aF9aQSI7CistICAgICAgY2FzZSBMQU5HX1lJOiByZXR1cm4gInNpdF9DTiI7CistICAgICAgY2FzZSBMQU5HX1lJRERJU0g6IHJldHVybiAieWlfSUwiOworLSAgICAgIGNhc2UgTEFOR19ZT1JVQkE6IHJldHVybiAieW9fTkciOworLSAgICAgIGNhc2UgTEFOR19aVUxVOiByZXR1cm4gInp1X1pBIjsKKy0gICAgICBkZWZhdWx0OiByZXR1cm4gIkMiOworLSAgICAgIH0KKy0gIH0KKy0jIGVuZGlmCistI2VuZGlmCistfQorLQorLWNvbnN0IGNoYXIgKgorLWdsX2xvY2FsZV9uYW1lIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKy17CistICBjb25zdCBjaGFyICpyZXR2YWw7CistCistICByZXR2YWwgPSBnbF9sb2NhbGVfbmFtZV9wb3NpeCAoY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSk7CistICBpZiAocmV0dmFsICE9IE5VTEwpCistICAgIHJldHVybiByZXR2YWw7CistCistICByZXR1cm4gZ2xfbG9jYWxlX25hbWVfZGVmYXVsdCAoKTsKKy19CistLS0gYS9pbnRsL2xvY2suYworKysrIC9kZXYvbnVsbAorQEAgLTEsOTIyICswLDAgQEAKKy0vKiBMb2NraW5nIGluIG11bHRpdGhyZWFkZWQgc2l0dWF0aW9ucy4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLS8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDA1LgorLSAgIEJhc2VkIG9uIEdDQydzIGd0aHItcG9zaXguaCwgZ3Roci1wb3NpeDk1LmgsIGd0aHItc29sYXJpcy5oLAorLSAgIGd0aHItd2luMzIuaC4gICovCistCistI2luY2x1ZGUgPGNvbmZpZy5oPgorLQorLSNpbmNsdWRlICJsb2NrLmgiCistCistLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLQorLSNpZiBVU0VfUE9TSVhfVEhSRUFEUworLQorLS8qIFVzZSB0aGUgUE9TSVggdGhyZWFkcyBsaWJyYXJ5LiAgKi8KKy0KKy0jIGlmIFBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJECistCistLyogVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJ5IGEgZHVtbXkgdGhyZWFkLiAgKi8KKy1zdGF0aWMgdm9pZCAqCistZHVtbXlfdGhyZWFkX2Z1bmMgKHZvaWQgKmFyZykKKy17CistICByZXR1cm4gYXJnOworLX0KKy0KKy1pbnQKKy1nbHRocmVhZF9pbl91c2UgKHZvaWQpCisteworLSAgc3RhdGljIGludCB0ZXN0ZWQ7CistICBzdGF0aWMgaW50IHJlc3VsdDsgLyogMTogbGlua2VkIHdpdGggLWxwdGhyZWFkLCAwOiBvbmx5IHdpdGggbGliYyAqLworLQorLSAgaWYgKCF0ZXN0ZWQpCistICAgIHsKKy0gICAgICBwdGhyZWFkX3QgdGhyZWFkOworLQorLSAgICAgIGlmIChwdGhyZWFkX2NyZWF0ZSAoJnRocmVhZCwgTlVMTCwgZHVtbXlfdGhyZWFkX2Z1bmMsIE5VTEwpICE9IDApCistCS8qIFRocmVhZCBjcmVhdGlvbiBmYWlsZWQuICAqLworLQlyZXN1bHQgPSAwOworLSAgICAgIGVsc2UKKy0JeworLQkgIC8qIFRocmVhZCBjcmVhdGlvbiB3b3Jrcy4gICovCistCSAgdm9pZCAqcmV0dmFsOworLQkgIGlmIChwdGhyZWFkX2pvaW4gKHRocmVhZCwgJnJldHZhbCkgIT0gMCkKKy0JICAgIGFib3J0ICgpOworLQkgIHJlc3VsdCA9IDE7CistCX0KKy0gICAgICB0ZXN0ZWQgPSAxOworLSAgICB9CistICByZXR1cm4gcmVzdWx0OworLX0KKy0KKy0jIGVuZGlmCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistIyBpZiBIQVZFX1BUSFJFQURfUldMT0NLCistCistIyAgaWYgIWRlZmluZWQgUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIKKy0KKy12b2lkCistZ2x0aHJlYWRfcndsb2NrX2luaXQgKGdsX3J3bG9ja190ICpsb2NrKQorLXsKKy0gIGlmIChwdGhyZWFkX3J3bG9ja19pbml0ICgmbG9jay0+cndsb2NrLCBOVUxMKSAhPSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIGxvY2stPmluaXRpYWxpemVkID0gMTsKKy19CistCistdm9pZAorLWdsdGhyZWFkX3J3bG9ja19yZGxvY2sgKGdsX3J3bG9ja190ICpsb2NrKQorLXsKKy0gIGlmICghbG9jay0+aW5pdGlhbGl6ZWQpCistICAgIHsKKy0gICAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrICgmbG9jay0+Z3VhcmQpICE9IDApCistCWFib3J0ICgpOworLSAgICAgIGlmICghbG9jay0+aW5pdGlhbGl6ZWQpCistCWdsdGhyZWFkX3J3bG9ja19pbml0IChsb2NrKTsKKy0gICAgICBpZiAocHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5ndWFyZCkgIT0gMCkKKy0JYWJvcnQgKCk7CistICAgIH0KKy0gIGlmIChwdGhyZWFkX3J3bG9ja19yZGxvY2sgKCZsb2NrLT5yd2xvY2spICE9IDApCistICAgIGFib3J0ICgpOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcndsb2NrX3dybG9jayAoZ2xfcndsb2NrX3QgKmxvY2spCisteworLSAgaWYgKCFsb2NrLT5pbml0aWFsaXplZCkKKy0gICAgeworLSAgICAgIGlmIChwdGhyZWFkX211dGV4X2xvY2sgKCZsb2NrLT5ndWFyZCkgIT0gMCkKKy0JYWJvcnQgKCk7CistICAgICAgaWYgKCFsb2NrLT5pbml0aWFsaXplZCkKKy0JZ2x0aHJlYWRfcndsb2NrX2luaXQgKGxvY2spOworLSAgICAgIGlmIChwdGhyZWFkX211dGV4X3VubG9jayAoJmxvY2stPmd1YXJkKSAhPSAwKQorLQlhYm9ydCAoKTsKKy0gICAgfQorLSAgaWYgKHB0aHJlYWRfcndsb2NrX3dybG9jayAoJmxvY2stPnJ3bG9jaykgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yd2xvY2tfdW5sb2NrIChnbF9yd2xvY2tfdCAqbG9jaykKKy17CistICBpZiAoIWxvY2stPmluaXRpYWxpemVkKQorLSAgICBhYm9ydCAoKTsKKy0gIGlmIChwdGhyZWFkX3J3bG9ja191bmxvY2sgKCZsb2NrLT5yd2xvY2spICE9IDApCistICAgIGFib3J0ICgpOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKGdsX3J3bG9ja190ICpsb2NrKQorLXsKKy0gIGlmICghbG9jay0+aW5pdGlhbGl6ZWQpCistICAgIGFib3J0ICgpOworLSAgaWYgKHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKCZsb2NrLT5yd2xvY2spICE9IDApCistICAgIGFib3J0ICgpOworLSAgbG9jay0+aW5pdGlhbGl6ZWQgPSAwOworLX0KKy0KKy0jICBlbmRpZgorLQorLSMgZWxzZQorLQorLXZvaWQKKy1nbHRocmVhZF9yd2xvY2tfaW5pdCAoZ2xfcndsb2NrX3QgKmxvY2spCisteworLSAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdCAoJmxvY2stPmxvY2ssIE5VTEwpICE9IDApCistICAgIGFib3J0ICgpOworLSAgaWYgKHB0aHJlYWRfY29uZF9pbml0ICgmbG9jay0+d2FpdGluZ19yZWFkZXJzLCBOVUxMKSAhPSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIGlmIChwdGhyZWFkX2NvbmRfaW5pdCAoJmxvY2stPndhaXRpbmdfd3JpdGVycywgTlVMTCkgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistICBsb2NrLT53YWl0aW5nX3dyaXRlcnNfY291bnQgPSAwOworLSAgbG9jay0+cnVuY291bnQgPSAwOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcndsb2NrX3JkbG9jayAoZ2xfcndsb2NrX3QgKmxvY2spCisteworLSAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jayAoJmxvY2stPmxvY2spICE9IDApCistICAgIGFib3J0ICgpOworLSAgLyogVGVzdCB3aGV0aGVyIG9ubHkgcmVhZGVycyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsIGFuZCB3aGV0aGVyIHRoZSBydW5jb3VudAorLSAgICAgZmllbGQgd2lsbCBub3Qgb3ZlcmZsb3cuICAqLworLSAgLyogUE9TSVggc2F5czogIkl0IGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgd2hldGhlciB0aGUgY2FsbGluZyB0aHJlYWQKKy0gICAgIGFjcXVpcmVzIHRoZSBsb2NrIHdoZW4gYSB3cml0ZXIgZG9lcyBub3QgaG9sZCB0aGUgbG9jayBhbmQgdGhlcmUgYXJlCistICAgICB3cml0ZXJzIGJsb2NrZWQgb24gdGhlIGxvY2suIiAgTGV0J3Mgc2F5LCBubzogZ2l2ZSB0aGUgd3JpdGVycyBhIGhpZ2hlcgorLSAgICAgcHJpb3JpdHkuICAqLworLSAgd2hpbGUgKCEobG9jay0+cnVuY291bnQgKyAxID4gMCAmJiBsb2NrLT53YWl0aW5nX3dyaXRlcnNfY291bnQgPT0gMCkpCistICAgIHsKKy0gICAgICAvKiBUaGlzIHRocmVhZCBoYXMgdG8gd2FpdCBmb3IgYSB3aGlsZS4gIEVucXVldWUgaXQgYW1vbmcgdGhlCistCSB3YWl0aW5nX3JlYWRlcnMuICAqLworLSAgICAgIGlmIChwdGhyZWFkX2NvbmRfd2FpdCAoJmxvY2stPndhaXRpbmdfcmVhZGVycywgJmxvY2stPmxvY2spICE9IDApCistCWFib3J0ICgpOworLSAgICB9CistICBsb2NrLT5ydW5jb3VudCsrOworLSAgaWYgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+bG9jaykgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yd2xvY2tfd3Jsb2NrIChnbF9yd2xvY2tfdCAqbG9jaykKKy17CistICBpZiAocHRocmVhZF9tdXRleF9sb2NrICgmbG9jay0+bG9jaykgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistICAvKiBUZXN0IHdoZXRoZXIgbm8gcmVhZGVycyBvciB3cml0ZXJzIGFyZSBjdXJyZW50bHkgcnVubmluZy4gICovCistICB3aGlsZSAoIShsb2NrLT5ydW5jb3VudCA9PSAwKSkKKy0gICAgeworLSAgICAgIC8qIFRoaXMgdGhyZWFkIGhhcyB0byB3YWl0IGZvciBhIHdoaWxlLiAgRW5xdWV1ZSBpdCBhbW9uZyB0aGUKKy0JIHdhaXRpbmdfd3JpdGVycy4gICovCistICAgICAgbG9jay0+d2FpdGluZ193cml0ZXJzX2NvdW50Kys7CistICAgICAgaWYgKHB0aHJlYWRfY29uZF93YWl0ICgmbG9jay0+d2FpdGluZ193cml0ZXJzLCAmbG9jay0+bG9jaykgIT0gMCkKKy0JYWJvcnQgKCk7CistICAgICAgbG9jay0+d2FpdGluZ193cml0ZXJzX2NvdW50LS07CistICAgIH0KKy0gIGxvY2stPnJ1bmNvdW50LS07IC8qIHJ1bmNvdW50IGJlY29tZXMgLTEgKi8KKy0gIGlmIChwdGhyZWFkX211dGV4X3VubG9jayAoJmxvY2stPmxvY2spICE9IDApCistICAgIGFib3J0ICgpOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcndsb2NrX3VubG9jayAoZ2xfcndsb2NrX3QgKmxvY2spCisteworLSAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jayAoJmxvY2stPmxvY2spICE9IDApCistICAgIGFib3J0ICgpOworLSAgaWYgKGxvY2stPnJ1bmNvdW50IDwgMCkKKy0gICAgeworLSAgICAgIC8qIERyb3AgYSB3cml0ZXIgbG9jay4gICovCistICAgICAgaWYgKCEobG9jay0+cnVuY291bnQgPT0gLTEpKQorLQlhYm9ydCAoKTsKKy0gICAgICBsb2NrLT5ydW5jb3VudCA9IDA7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIC8qIERyb3AgYSByZWFkZXIgbG9jay4gICovCistICAgICAgaWYgKCEobG9jay0+cnVuY291bnQgPiAwKSkKKy0JYWJvcnQgKCk7CistICAgICAgbG9jay0+cnVuY291bnQtLTsKKy0gICAgfQorLSAgaWYgKGxvY2stPnJ1bmNvdW50ID09IDApCistICAgIHsKKy0gICAgICAvKiBQT1NJWCByZWNvbW1lbmRzIHRoYXQgIndyaXRlIGxvY2tzIHNoYWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIHJlYWQKKy0JIGxvY2tzIiwgdG8gYXZvaWQgIndyaXRlciBzdGFydmF0aW9uIi4gICovCistICAgICAgaWYgKGxvY2stPndhaXRpbmdfd3JpdGVyc19jb3VudCA+IDApCistCXsKKy0JICAvKiBXYWtlIHVwIG9uZSBvZiB0aGUgd2FpdGluZyB3cml0ZXJzLiAgKi8KKy0JICBpZiAocHRocmVhZF9jb25kX3NpZ25hbCAoJmxvY2stPndhaXRpbmdfd3JpdGVycykgIT0gMCkKKy0JICAgIGFib3J0ICgpOworLQl9CistICAgICAgZWxzZQorLQl7CistCSAgLyogV2FrZSB1cCBhbGwgd2FpdGluZyByZWFkZXJzLiAgKi8KKy0JICBpZiAocHRocmVhZF9jb25kX2Jyb2FkY2FzdCAoJmxvY2stPndhaXRpbmdfcmVhZGVycykgIT0gMCkKKy0JICAgIGFib3J0ICgpOworLQl9CistICAgIH0KKy0gIGlmIChwdGhyZWFkX211dGV4X3VubG9jayAoJmxvY2stPmxvY2spICE9IDApCistICAgIGFib3J0ICgpOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKGdsX3J3bG9ja190ICpsb2NrKQorLXsKKy0gIGlmIChwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKCZsb2NrLT5sb2NrKSAhPSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIGlmIChwdGhyZWFkX2NvbmRfZGVzdHJveSAoJmxvY2stPndhaXRpbmdfcmVhZGVycykgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistICBpZiAocHRocmVhZF9jb25kX2Rlc3Ryb3kgKCZsb2NrLT53YWl0aW5nX3dyaXRlcnMpICE9IDApCistICAgIGFib3J0ICgpOworLX0KKy0KKy0jIGVuZGlmCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistIyBpZiBIQVZFX1BUSFJFQURfTVVURVhfUkVDVVJTSVZFCistCistIyAgaWYgIShkZWZpbmVkIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSIHx8IGRlZmluZWQgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlApCistCistdm9pZAorLWdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCisteworLSAgcHRocmVhZF9tdXRleGF0dHJfdCBhdHRyaWJ1dGVzOworLQorLSAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKCZhdHRyaWJ1dGVzKSAhPSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIGlmIChwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlICgmYXR0cmlidXRlcywgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpICE9IDApCistICAgIGFib3J0ICgpOworLSAgaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdCAoJmxvY2stPnJlY211dGV4LCAmYXR0cmlidXRlcykgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistICBpZiAocHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAoJmF0dHJpYnV0ZXMpICE9IDApCistICAgIGFib3J0ICgpOworLSAgbG9jay0+aW5pdGlhbGl6ZWQgPSAxOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKKy17CistICBpZiAoIWxvY2stPmluaXRpYWxpemVkKQorLSAgICB7CistICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jayAoJmxvY2stPmd1YXJkKSAhPSAwKQorLQlhYm9ydCAoKTsKKy0gICAgICBpZiAoIWxvY2stPmluaXRpYWxpemVkKQorLQlnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0IChsb2NrKTsKKy0gICAgICBpZiAocHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5ndWFyZCkgIT0gMCkKKy0JYWJvcnQgKCk7CistICAgIH0KKy0gIGlmIChwdGhyZWFkX211dGV4X2xvY2sgKCZsb2NrLT5yZWNtdXRleCkgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2sgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCisteworLSAgaWYgKCFsb2NrLT5pbml0aWFsaXplZCkKKy0gICAgYWJvcnQgKCk7CistICBpZiAocHRocmVhZF9tdXRleF91bmxvY2sgKCZsb2NrLT5yZWNtdXRleCkgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95IChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQorLXsKKy0gIGlmICghbG9jay0+aW5pdGlhbGl6ZWQpCistICAgIGFib3J0ICgpOworLSAgaWYgKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAoJmxvY2stPnJlY211dGV4KSAhPSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIGxvY2stPmluaXRpYWxpemVkID0gMDsKKy19CistCistIyAgZW5kaWYKKy0KKy0jIGVsc2UKKy0KKy12b2lkCistZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKKy17CistICBpZiAocHRocmVhZF9tdXRleF9pbml0ICgmbG9jay0+bXV0ZXgsIE5VTEwpICE9IDApCistICAgIGFib3J0ICgpOworLSAgbG9jay0+b3duZXIgPSAocHRocmVhZF90KSAwOworLSAgbG9jay0+ZGVwdGggPSAwOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKKy17CistICBwdGhyZWFkX3Qgc2VsZiA9IHB0aHJlYWRfc2VsZiAoKTsKKy0gIGlmIChsb2NrLT5vd25lciAhPSBzZWxmKQorLSAgICB7CistICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jayAoJmxvY2stPm11dGV4KSAhPSAwKQorLQlhYm9ydCAoKTsKKy0gICAgICBsb2NrLT5vd25lciA9IHNlbGY7CistICAgIH0KKy0gIGlmICgrKyhsb2NrLT5kZXB0aCkgPT0gMCkgLyogd3JhcGFyb3VuZD8gKi8KKy0gICAgYWJvcnQgKCk7CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2sgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCisteworLSAgaWYgKGxvY2stPm93bmVyICE9IHB0aHJlYWRfc2VsZiAoKSkKKy0gICAgYWJvcnQgKCk7CistICBpZiAobG9jay0+ZGVwdGggPT0gMCkKKy0gICAgYWJvcnQgKCk7CistICBpZiAoLS0obG9jay0+ZGVwdGgpID09IDApCistICAgIHsKKy0gICAgICBsb2NrLT5vd25lciA9IChwdGhyZWFkX3QpIDA7CistICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmbG9jay0+bXV0ZXgpICE9IDApCistCWFib3J0ICgpOworLSAgICB9CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95IChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQorLXsKKy0gIGlmIChsb2NrLT5vd25lciAhPSAocHRocmVhZF90KSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIGlmIChwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKCZsb2NrLT5tdXRleCkgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistfQorLQorLSMgZW5kaWYKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9vbmNlX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy1zdGF0aWMgY29uc3QgcHRocmVhZF9vbmNlX3QgZnJlc2hfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworLQorLWludAorLWdsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgKHB0aHJlYWRfb25jZV90ICpvbmNlX2NvbnRyb2wpCisteworLSAgLyogV2UgZG9uJ3Qga25vdyB3aGV0aGVyIHB0aHJlYWRfb25jZV90IGlzIGFuIGludGVnZXIgdHlwZSwgYSBmbG9hdGluZy1wb2ludAorLSAgICAgdHlwZSwgYSBwb2ludGVyIHR5cGUsIG9yIGEgc3RydWN0dXJlIHR5cGUuICAqLworLSAgY2hhciAqZmlyc3RieXRlID0gKGNoYXIgKilvbmNlX2NvbnRyb2w7CistICBpZiAoKmZpcnN0Ynl0ZSA9PSAqKGNvbnN0IGNoYXIgKikmZnJlc2hfb25jZSkKKy0gICAgeworLSAgICAgIC8qIEZpcnN0IHRpbWUgdXNlIG9mIG9uY2VfY29udHJvbC4gIEludmVydCB0aGUgZmlyc3QgYnl0ZS4gICovCistICAgICAgKmZpcnN0Ynl0ZSA9IH4gKihjb25zdCBjaGFyICopJmZyZXNoX29uY2U7CistICAgICAgcmV0dXJuIDE7CistICAgIH0KKy0gIGVsc2UKKy0gICAgcmV0dXJuIDA7CistfQorLQorLSNlbmRpZgorLQorLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy0KKy0jaWYgVVNFX1BUSF9USFJFQURTCistCistLyogVXNlIHRoZSBHTlUgUHRoIHRocmVhZHMgbGlicmFyeS4gICovCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfb25jZV90IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistdm9pZAorLWdsdGhyZWFkX29uY2VfY2FsbCAodm9pZCAqYXJnKQorLXsKKy0gIHZvaWQgKCoqZ2xfb25jZV90ZW1wX2FkZHIpICh2b2lkKSA9ICh2b2lkICgqKikgKHZvaWQpKSBhcmc7CistICB2b2lkICgqaW5pdGZ1bmN0aW9uKSAodm9pZCkgPSAqZ2xfb25jZV90ZW1wX2FkZHI7CistICBpbml0ZnVuY3Rpb24gKCk7CistfQorLQorLWludAorLWdsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgKHB0aF9vbmNlX3QgKm9uY2VfY29udHJvbCkKKy17CistICAvKiBXZSBrbm93IHRoYXQgcHRoX29uY2VfdCBpcyBhbiBpbnRlZ2VyIHR5cGUuICAqLworLSAgaWYgKCpvbmNlX2NvbnRyb2wgPT0gUFRIX09OQ0VfSU5JVCkKKy0gICAgeworLSAgICAgIC8qIEZpcnN0IHRpbWUgdXNlIG9mIG9uY2VfY29udHJvbC4gIEludmVydCB0aGUgbWFya2VyLiAgKi8KKy0gICAgICAqb25jZV9jb250cm9sID0gfiBQVEhfT05DRV9JTklUOworLSAgICAgIHJldHVybiAxOworLSAgICB9CistICBlbHNlCistICAgIHJldHVybiAwOworLX0KKy0KKy0jZW5kaWYKKy0KKy0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCistCistI2lmIFVTRV9TT0xBUklTX1RIUkVBRFMKKy0KKy0vKiBVc2UgdGhlIG9sZCBTb2xhcmlzIHRocmVhZHMgbGlicmFyeS4gICovCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistdm9pZAorLWdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCisteworLSAgaWYgKG11dGV4X2luaXQgKCZsb2NrLT5tdXRleCwgVVNZTkNfVEhSRUFELCBOVUxMKSAhPSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIGxvY2stPm93bmVyID0gKHRocmVhZF90KSAwOworLSAgbG9jay0+ZGVwdGggPSAwOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKKy17CistICB0aHJlYWRfdCBzZWxmID0gdGhyX3NlbGYgKCk7CistICBpZiAobG9jay0+b3duZXIgIT0gc2VsZikKKy0gICAgeworLSAgICAgIGlmIChtdXRleF9sb2NrICgmbG9jay0+bXV0ZXgpICE9IDApCistCWFib3J0ICgpOworLSAgICAgIGxvY2stPm93bmVyID0gc2VsZjsKKy0gICAgfQorLSAgaWYgKCsrKGxvY2stPmRlcHRoKSA9PSAwKSAvKiB3cmFwYXJvdW5kPyAqLworLSAgICBhYm9ydCAoKTsKKy19CistCistdm9pZAorLWdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKKy17CistICBpZiAobG9jay0+b3duZXIgIT0gdGhyX3NlbGYgKCkpCistICAgIGFib3J0ICgpOworLSAgaWYgKGxvY2stPmRlcHRoID09IDApCistICAgIGFib3J0ICgpOworLSAgaWYgKC0tKGxvY2stPmRlcHRoKSA9PSAwKQorLSAgICB7CistICAgICAgbG9jay0+b3duZXIgPSAodGhyZWFkX3QpIDA7CistICAgICAgaWYgKG11dGV4X3VubG9jayAoJmxvY2stPm11dGV4KSAhPSAwKQorLQlhYm9ydCAoKTsKKy0gICAgfQorLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveSAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKKy17CistICBpZiAobG9jay0+b3duZXIgIT0gKHRocmVhZF90KSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIGlmIChtdXRleF9kZXN0cm95ICgmbG9jay0+bXV0ZXgpICE9IDApCistICAgIGFib3J0ICgpOworLX0KKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9vbmNlX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy12b2lkCistZ2x0aHJlYWRfb25jZSAoZ2xfb25jZV90ICpvbmNlX2NvbnRyb2wsIHZvaWQgKCppbml0ZnVuY3Rpb24pICh2b2lkKSkKKy17CistICBpZiAoIW9uY2VfY29udHJvbC0+aW5pdGVkKQorLSAgICB7CistICAgICAgLyogVXNlIHRoZSBtdXRleCB0byBndWFyYW50ZWUgdGhhdCBpZiBhbm90aGVyIHRocmVhZCBpcyBhbHJlYWR5IGNhbGxpbmcKKy0JIHRoZSBpbml0ZnVuY3Rpb24sIHRoaXMgdGhyZWFkIHdhaXRzIHVudGlsIGl0J3MgZmluaXNoZWQuICAqLworLSAgICAgIGlmIChtdXRleF9sb2NrICgmb25jZV9jb250cm9sLT5tdXRleCkgIT0gMCkKKy0JYWJvcnQgKCk7CistICAgICAgaWYgKCFvbmNlX2NvbnRyb2wtPmluaXRlZCkKKy0JeworLQkgIG9uY2VfY29udHJvbC0+aW5pdGVkID0gMTsKKy0JICBpbml0ZnVuY3Rpb24gKCk7CistCX0KKy0gICAgICBpZiAobXV0ZXhfdW5sb2NrICgmb25jZV9jb250cm9sLT5tdXRleCkgIT0gMCkKKy0JYWJvcnQgKCk7CistICAgIH0KKy19CistCistaW50CistZ2x0aHJlYWRfb25jZV9zaW5nbGV0aHJlYWRlZCAoZ2xfb25jZV90ICpvbmNlX2NvbnRyb2wpCisteworLSAgLyogV2Uga25vdyB0aGF0IGdsX29uY2VfdCBjb250YWlucyBhbiBpbnRlZ2VyIHR5cGUuICAqLworLSAgaWYgKCFvbmNlX2NvbnRyb2wtPmluaXRlZCkKKy0gICAgeworLSAgICAgIC8qIEZpcnN0IHRpbWUgdXNlIG9mIG9uY2VfY29udHJvbC4gIEludmVydCB0aGUgbWFya2VyLiAgKi8KKy0gICAgICBvbmNlX2NvbnRyb2wtPmluaXRlZCA9IH4gMDsKKy0gICAgICByZXR1cm4gMTsKKy0gICAgfQorLSAgZWxzZQorLSAgICByZXR1cm4gMDsKKy19CistCistI2VuZGlmCistCistLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLQorLSNpZiBVU0VfV0lOMzJfVEhSRUFEUworLQorLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLQorLXZvaWQKKy1nbHRocmVhZF9sb2NrX2luaXQgKGdsX2xvY2tfdCAqbG9jaykKKy17CistICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CistICBsb2NrLT5ndWFyZC5kb25lID0gMTsKKy19CistCistdm9pZAorLWdsdGhyZWFkX2xvY2tfbG9jayAoZ2xfbG9ja190ICpsb2NrKQorLXsKKy0gIGlmICghbG9jay0+Z3VhcmQuZG9uZSkKKy0gICAgeworLSAgICAgIGlmIChJbnRlcmxvY2tlZEluY3JlbWVudCAoJmxvY2stPmd1YXJkLnN0YXJ0ZWQpID09IDApCistCS8qIFRoaXMgdGhyZWFkIGlzIHRoZSBmaXJzdCBvbmUgdG8gbmVlZCB0aGlzIGxvY2suICBJbml0aWFsaXplIGl0LiAgKi8KKy0JZ2x0aHJlYWRfbG9ja19pbml0IChsb2NrKTsKKy0gICAgICBlbHNlCistCS8qIFlpZWxkIHRoZSBDUFUgd2hpbGUgd2FpdGluZyBmb3IgYW5vdGhlciB0aHJlYWQgdG8gZmluaXNoCistCSAgIGluaXRpYWxpemluZyB0aGlzIGxvY2suICAqLworLQl3aGlsZSAoIWxvY2stPmd1YXJkLmRvbmUpCistCSAgU2xlZXAgKDApOworLSAgICB9CistICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfbG9ja191bmxvY2sgKGdsX2xvY2tfdCAqbG9jaykKKy17CistICBpZiAoIWxvY2stPmd1YXJkLmRvbmUpCistICAgIGFib3J0ICgpOworLSAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy19CistCistdm9pZAorLWdsdGhyZWFkX2xvY2tfZGVzdHJveSAoZ2xfbG9ja190ICpsb2NrKQorLXsKKy0gIGlmICghbG9jay0+Z3VhcmQuZG9uZSkKKy0gICAgYWJvcnQgKCk7CistICBEZWxldGVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy0gIGxvY2stPmd1YXJkLmRvbmUgPSAwOworLX0KKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3J3bG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy1zdGF0aWMgaW5saW5lIHZvaWQKKy1nbF93YWl0cXVldWVfaW5pdCAoZ2xfd2FpdHF1ZXVlX3QgKndxKQorLXsKKy0gIHdxLT5hcnJheSA9IE5VTEw7CistICB3cS0+Y291bnQgPSAwOworLSAgd3EtPmFsbG9jID0gMDsKKy0gIHdxLT5vZmZzZXQgPSAwOworLX0KKy0KKy0vKiBFbnF1ZXVlcyB0aGUgY3VycmVudCB0aHJlYWQsIHJlcHJlc2VudGVkIGJ5IGFuIGV2ZW50LCBpbiBhIHdhaXQgcXVldWUuCistICAgUmV0dXJucyBJTlZBTElEX0hBTkRMRV9WQUxVRSBpZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgb2NjdXJzLiAgKi8KKy1zdGF0aWMgSEFORExFCistZ2xfd2FpdHF1ZXVlX2FkZCAoZ2xfd2FpdHF1ZXVlX3QgKndxKQorLXsKKy0gIEhBTkRMRSBldmVudDsKKy0gIHVuc2lnbmVkIGludCBpbmRleDsKKy0KKy0gIGlmICh3cS0+Y291bnQgPT0gd3EtPmFsbG9jKQorLSAgICB7CistICAgICAgdW5zaWduZWQgaW50IG5ld19hbGxvYyA9IDIgKiB3cS0+YWxsb2MgKyAxOworLSAgICAgIEhBTkRMRSAqbmV3X2FycmF5ID0KKy0JKEhBTkRMRSAqKSByZWFsbG9jICh3cS0+YXJyYXksIG5ld19hbGxvYyAqIHNpemVvZiAoSEFORExFKSk7CistICAgICAgaWYgKG5ld19hcnJheSA9PSBOVUxMKQorLQkvKiBObyBtb3JlIG1lbW9yeS4gICovCistCXJldHVybiBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKy0gICAgICAvKiBOb3cgaXMgYSBnb29kIG9wcG9ydHVuaXR5IHRvIHJvdGF0ZSB0aGUgYXJyYXkgc28gdGhhdCBpdHMgY29udGVudHMKKy0JIHN0YXJ0cyBhdCBvZmZzZXQgMC4gICovCistICAgICAgaWYgKHdxLT5vZmZzZXQgPiAwKQorLQl7CistCSAgdW5zaWduZWQgaW50IG9sZF9jb3VudCA9IHdxLT5jb3VudDsKKy0JICB1bnNpZ25lZCBpbnQgb2xkX2FsbG9jID0gd3EtPmFsbG9jOworLQkgIHVuc2lnbmVkIGludCBvbGRfb2Zmc2V0ID0gd3EtPm9mZnNldDsKKy0JICB1bnNpZ25lZCBpbnQgaTsKKy0JICBpZiAob2xkX29mZnNldCArIG9sZF9jb3VudCA+IG9sZF9hbGxvYykKKy0JICAgIHsKKy0JICAgICAgdW5zaWduZWQgaW50IGxpbWl0ID0gb2xkX29mZnNldCArIG9sZF9jb3VudCAtIG9sZF9hbGxvYzsKKy0JICAgICAgZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspCistCQluZXdfYXJyYXlbb2xkX2FsbG9jICsgaV0gPSBuZXdfYXJyYXlbaV07CistCSAgICB9CistCSAgZm9yIChpID0gMDsgaSA8IG9sZF9jb3VudDsgaSsrKQorLQkgICAgbmV3X2FycmF5W2ldID0gbmV3X2FycmF5W29sZF9vZmZzZXQgKyBpXTsKKy0JICB3cS0+b2Zmc2V0ID0gMDsKKy0JfQorLSAgICAgIHdxLT5hcnJheSA9IG5ld19hcnJheTsKKy0gICAgICB3cS0+YWxsb2MgPSBuZXdfYWxsb2M7CistICAgIH0KKy0gIGV2ZW50ID0gQ3JlYXRlRXZlbnQgKE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKy0gIGlmIChldmVudCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKy0gICAgLyogTm8gd2F5IHRvIGFsbG9jYXRlIGFuIGV2ZW50LiAgKi8KKy0gICAgcmV0dXJuIElOVkFMSURfSEFORExFX1ZBTFVFOworLSAgaW5kZXggPSB3cS0+b2Zmc2V0ICsgd3EtPmNvdW50OworLSAgaWYgKGluZGV4ID49IHdxLT5hbGxvYykKKy0gICAgaW5kZXggLT0gd3EtPmFsbG9jOworLSAgd3EtPmFycmF5W2luZGV4XSA9IGV2ZW50OworLSAgd3EtPmNvdW50Kys7CistICByZXR1cm4gZXZlbnQ7CistfQorLQorLS8qIE5vdGlmaWVzIHRoZSBmaXJzdCB0aHJlYWQgZnJvbSBhIHdhaXQgcXVldWUgYW5kIGRlcXVldWVzIGl0LiAgKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQKKy1nbF93YWl0cXVldWVfbm90aWZ5X2ZpcnN0IChnbF93YWl0cXVldWVfdCAqd3EpCisteworLSAgU2V0RXZlbnQgKHdxLT5hcnJheVt3cS0+b2Zmc2V0ICsgMF0pOworLSAgd3EtPm9mZnNldCsrOworLSAgd3EtPmNvdW50LS07CistICBpZiAod3EtPmNvdW50ID09IDAgfHwgd3EtPm9mZnNldCA9PSB3cS0+YWxsb2MpCistICAgIHdxLT5vZmZzZXQgPSAwOworLX0KKy0KKy0vKiBOb3RpZmllcyBhbGwgdGhyZWFkcyBmcm9tIGEgd2FpdCBxdWV1ZSBhbmQgZGVxdWV1ZXMgdGhlbSBhbGwuICAqLworLXN0YXRpYyBpbmxpbmUgdm9pZAorLWdsX3dhaXRxdWV1ZV9ub3RpZnlfYWxsIChnbF93YWl0cXVldWVfdCAqd3EpCisteworLSAgdW5zaWduZWQgaW50IGk7CistCistICBmb3IgKGkgPSAwOyBpIDwgd3EtPmNvdW50OyBpKyspCistICAgIHsKKy0gICAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSB3cS0+b2Zmc2V0ICsgaTsKKy0gICAgICBpZiAoaW5kZXggPj0gd3EtPmFsbG9jKQorLQlpbmRleCAtPSB3cS0+YWxsb2M7CistICAgICAgU2V0RXZlbnQgKHdxLT5hcnJheVtpbmRleF0pOworLSAgICB9CistICB3cS0+Y291bnQgPSAwOworLSAgd3EtPm9mZnNldCA9IDA7CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yd2xvY2tfaW5pdCAoZ2xfcndsb2NrX3QgKmxvY2spCisteworLSAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworLSAgZ2xfd2FpdHF1ZXVlX2luaXQgKCZsb2NrLT53YWl0aW5nX3JlYWRlcnMpOworLSAgZ2xfd2FpdHF1ZXVlX2luaXQgKCZsb2NrLT53YWl0aW5nX3dyaXRlcnMpOworLSAgbG9jay0+cnVuY291bnQgPSAwOworLSAgbG9jay0+Z3VhcmQuZG9uZSA9IDE7CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yd2xvY2tfcmRsb2NrIChnbF9yd2xvY2tfdCAqbG9jaykKKy17CistICBpZiAoIWxvY2stPmd1YXJkLmRvbmUpCistICAgIHsKKy0gICAgICBpZiAoSW50ZXJsb2NrZWRJbmNyZW1lbnQgKCZsb2NrLT5ndWFyZC5zdGFydGVkKSA9PSAwKQorLQkvKiBUaGlzIHRocmVhZCBpcyB0aGUgZmlyc3Qgb25lIHRvIG5lZWQgdGhpcyBsb2NrLiAgSW5pdGlhbGl6ZSBpdC4gICovCistCWdsdGhyZWFkX3J3bG9ja19pbml0IChsb2NrKTsKKy0gICAgICBlbHNlCistCS8qIFlpZWxkIHRoZSBDUFUgd2hpbGUgd2FpdGluZyBmb3IgYW5vdGhlciB0aHJlYWQgdG8gZmluaXNoCistCSAgIGluaXRpYWxpemluZyB0aGlzIGxvY2suICAqLworLQl3aGlsZSAoIWxvY2stPmd1YXJkLmRvbmUpCistCSAgU2xlZXAgKDApOworLSAgICB9CistICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworLSAgLyogVGVzdCB3aGV0aGVyIG9ubHkgcmVhZGVycyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsIGFuZCB3aGV0aGVyIHRoZSBydW5jb3VudAorLSAgICAgZmllbGQgd2lsbCBub3Qgb3ZlcmZsb3cuICAqLworLSAgaWYgKCEobG9jay0+cnVuY291bnQgKyAxID4gMCkpCistICAgIHsKKy0gICAgICAvKiBUaGlzIHRocmVhZCBoYXMgdG8gd2FpdCBmb3IgYSB3aGlsZS4gIEVucXVldWUgaXQgYW1vbmcgdGhlCistCSB3YWl0aW5nX3JlYWRlcnMuICAqLworLSAgICAgIEhBTkRMRSBldmVudCA9IGdsX3dhaXRxdWV1ZV9hZGQgKCZsb2NrLT53YWl0aW5nX3JlYWRlcnMpOworLSAgICAgIGlmIChldmVudCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKy0JeworLQkgIERXT1JEIHJlc3VsdDsKKy0JICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworLQkgIC8qIFdhaXQgdW50aWwgYW5vdGhlciB0aHJlYWQgc2lnbmFscyB0aGlzIGV2ZW50LiAgKi8KKy0JICByZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChldmVudCwgSU5GSU5JVEUpOworLQkgIGlmIChyZXN1bHQgPT0gV0FJVF9GQUlMRUQgfHwgcmVzdWx0ID09IFdBSVRfVElNRU9VVCkKKy0JICAgIGFib3J0ICgpOworLQkgIENsb3NlSGFuZGxlIChldmVudCk7CistCSAgLyogVGhlIHRocmVhZCB3aGljaCBzaWduYWxsZWQgdGhlIGV2ZW50IGFscmVhZHkgZGlkIHRoZSBib29ra2VlcGluZzoKKy0JICAgICByZW1vdmVkIHVzIGZyb20gdGhlIHdhaXRpbmdfcmVhZGVycywgaW5jcmVtZW50ZWQgbG9jay0+cnVuY291bnQuICAqLworLQkgIGlmICghKGxvY2stPnJ1bmNvdW50ID4gMCkpCistCSAgICBhYm9ydCAoKTsKKy0JICByZXR1cm47CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICAvKiBBbGxvY2F0aW9uIGZhaWx1cmUuICBXZWlyZC4gICovCistCSAgZG8KKy0JICAgIHsKKy0JICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy0JICAgICAgU2xlZXAgKDEpOworLQkgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworLQkgICAgfQorLQkgIHdoaWxlICghKGxvY2stPnJ1bmNvdW50ICsgMSA+IDApKTsKKy0JfQorLSAgICB9CistICBsb2NrLT5ydW5jb3VudCsrOworLSAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy19CistCistdm9pZAorLWdsdGhyZWFkX3J3bG9ja193cmxvY2sgKGdsX3J3bG9ja190ICpsb2NrKQorLXsKKy0gIGlmICghbG9jay0+Z3VhcmQuZG9uZSkKKy0gICAgeworLSAgICAgIGlmIChJbnRlcmxvY2tlZEluY3JlbWVudCAoJmxvY2stPmd1YXJkLnN0YXJ0ZWQpID09IDApCistCS8qIFRoaXMgdGhyZWFkIGlzIHRoZSBmaXJzdCBvbmUgdG8gbmVlZCB0aGlzIGxvY2suICBJbml0aWFsaXplIGl0LiAgKi8KKy0JZ2x0aHJlYWRfcndsb2NrX2luaXQgKGxvY2spOworLSAgICAgIGVsc2UKKy0JLyogWWllbGQgdGhlIENQVSB3aGlsZSB3YWl0aW5nIGZvciBhbm90aGVyIHRocmVhZCB0byBmaW5pc2gKKy0JICAgaW5pdGlhbGl6aW5nIHRoaXMgbG9jay4gICovCistCXdoaWxlICghbG9jay0+Z3VhcmQuZG9uZSkKKy0JICBTbGVlcCAoMCk7CistICAgIH0KKy0gIEVudGVyQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CistICAvKiBUZXN0IHdoZXRoZXIgbm8gcmVhZGVycyBvciB3cml0ZXJzIGFyZSBjdXJyZW50bHkgcnVubmluZy4gICovCistICBpZiAoIShsb2NrLT5ydW5jb3VudCA9PSAwKSkKKy0gICAgeworLSAgICAgIC8qIFRoaXMgdGhyZWFkIGhhcyB0byB3YWl0IGZvciBhIHdoaWxlLiAgRW5xdWV1ZSBpdCBhbW9uZyB0aGUKKy0JIHdhaXRpbmdfd3JpdGVycy4gICovCistICAgICAgSEFORExFIGV2ZW50ID0gZ2xfd2FpdHF1ZXVlX2FkZCAoJmxvY2stPndhaXRpbmdfd3JpdGVycyk7CistICAgICAgaWYgKGV2ZW50ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQorLQl7CistCSAgRFdPUkQgcmVzdWx0OworLQkgIExlYXZlQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CistCSAgLyogV2FpdCB1bnRpbCBhbm90aGVyIHRocmVhZCBzaWduYWxzIHRoaXMgZXZlbnQuICAqLworLQkgIHJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKGV2ZW50LCBJTkZJTklURSk7CistCSAgaWYgKHJlc3VsdCA9PSBXQUlUX0ZBSUxFRCB8fCByZXN1bHQgPT0gV0FJVF9USU1FT1VUKQorLQkgICAgYWJvcnQgKCk7CistCSAgQ2xvc2VIYW5kbGUgKGV2ZW50KTsKKy0JICAvKiBUaGUgdGhyZWFkIHdoaWNoIHNpZ25hbGxlZCB0aGUgZXZlbnQgYWxyZWFkeSBkaWQgdGhlIGJvb2trZWVwaW5nOgorLQkgICAgIHJlbW92ZWQgdXMgZnJvbSB0aGUgd2FpdGluZ193cml0ZXJzLCBzZXQgbG9jay0+cnVuY291bnQgPSAtMS4gICovCistCSAgaWYgKCEobG9jay0+cnVuY291bnQgPT0gLTEpKQorLQkgICAgYWJvcnQgKCk7CistCSAgcmV0dXJuOworLQl9CistICAgICAgZWxzZQorLQl7CistCSAgLyogQWxsb2NhdGlvbiBmYWlsdXJlLiAgV2VpcmQuICAqLworLQkgIGRvCistCSAgICB7CistCSAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CistCSAgICAgIFNsZWVwICgxKTsKKy0JICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy0JICAgIH0KKy0JICB3aGlsZSAoIShsb2NrLT5ydW5jb3VudCA9PSAwKSk7CistCX0KKy0gICAgfQorLSAgbG9jay0+cnVuY291bnQtLTsgLyogcnVuY291bnQgYmVjb21lcyAtMSAqLworLSAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy19CistCistdm9pZAorLWdsdGhyZWFkX3J3bG9ja191bmxvY2sgKGdsX3J3bG9ja190ICpsb2NrKQorLXsKKy0gIGlmICghbG9jay0+Z3VhcmQuZG9uZSkKKy0gICAgYWJvcnQgKCk7CistICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworLSAgaWYgKGxvY2stPnJ1bmNvdW50IDwgMCkKKy0gICAgeworLSAgICAgIC8qIERyb3AgYSB3cml0ZXIgbG9jay4gICovCistICAgICAgaWYgKCEobG9jay0+cnVuY291bnQgPT0gLTEpKQorLQlhYm9ydCAoKTsKKy0gICAgICBsb2NrLT5ydW5jb3VudCA9IDA7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIC8qIERyb3AgYSByZWFkZXIgbG9jay4gICovCistICAgICAgaWYgKCEobG9jay0+cnVuY291bnQgPiAwKSkKKy0JYWJvcnQgKCk7CistICAgICAgbG9jay0+cnVuY291bnQtLTsKKy0gICAgfQorLSAgaWYgKGxvY2stPnJ1bmNvdW50ID09IDApCistICAgIHsKKy0gICAgICAvKiBQT1NJWCByZWNvbW1lbmRzIHRoYXQgIndyaXRlIGxvY2tzIHNoYWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIHJlYWQKKy0JIGxvY2tzIiwgdG8gYXZvaWQgIndyaXRlciBzdGFydmF0aW9uIi4gICovCistICAgICAgaWYgKGxvY2stPndhaXRpbmdfd3JpdGVycy5jb3VudCA+IDApCistCXsKKy0JICAvKiBXYWtlIHVwIG9uZSBvZiB0aGUgd2FpdGluZyB3cml0ZXJzLiAgKi8KKy0JICBsb2NrLT5ydW5jb3VudC0tOworLQkgIGdsX3dhaXRxdWV1ZV9ub3RpZnlfZmlyc3QgKCZsb2NrLT53YWl0aW5nX3dyaXRlcnMpOworLQl9CistICAgICAgZWxzZQorLQl7CistCSAgLyogV2FrZSB1cCBhbGwgd2FpdGluZyByZWFkZXJzLiAgKi8KKy0JICBsb2NrLT5ydW5jb3VudCArPSBsb2NrLT53YWl0aW5nX3JlYWRlcnMuY291bnQ7CistCSAgZ2xfd2FpdHF1ZXVlX25vdGlmeV9hbGwgKCZsb2NrLT53YWl0aW5nX3JlYWRlcnMpOworLQl9CistICAgIH0KKy0gIExlYXZlQ3JpdGljYWxTZWN0aW9uICgmbG9jay0+bG9jayk7CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yd2xvY2tfZGVzdHJveSAoZ2xfcndsb2NrX3QgKmxvY2spCisteworLSAgaWYgKCFsb2NrLT5ndWFyZC5kb25lKQorLSAgICBhYm9ydCAoKTsKKy0gIGlmIChsb2NrLT5ydW5jb3VudCAhPSAwKQorLSAgICBhYm9ydCAoKTsKKy0gIERlbGV0ZUNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworLSAgaWYgKGxvY2stPndhaXRpbmdfcmVhZGVycy5hcnJheSAhPSBOVUxMKQorLSAgICBmcmVlIChsb2NrLT53YWl0aW5nX3JlYWRlcnMuYXJyYXkpOworLSAgaWYgKGxvY2stPndhaXRpbmdfd3JpdGVycy5hcnJheSAhPSBOVUxMKQorLSAgICBmcmVlIChsb2NrLT53YWl0aW5nX3dyaXRlcnMuYXJyYXkpOworLSAgbG9jay0+Z3VhcmQuZG9uZSA9IDA7CistfQorLQorLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yZWN1cnNpdmVfbG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLQorLXZvaWQKKy1nbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0IChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKQorLXsKKy0gIGxvY2stPm93bmVyID0gMDsKKy0gIGxvY2stPmRlcHRoID0gMDsKKy0gIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy0gIGxvY2stPmd1YXJkLmRvbmUgPSAxOworLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKKy17CistICBpZiAoIWxvY2stPmd1YXJkLmRvbmUpCistICAgIHsKKy0gICAgICBpZiAoSW50ZXJsb2NrZWRJbmNyZW1lbnQgKCZsb2NrLT5ndWFyZC5zdGFydGVkKSA9PSAwKQorLQkvKiBUaGlzIHRocmVhZCBpcyB0aGUgZmlyc3Qgb25lIHRvIG5lZWQgdGhpcyBsb2NrLiAgSW5pdGlhbGl6ZSBpdC4gICovCistCWdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKGxvY2spOworLSAgICAgIGVsc2UKKy0JLyogWWllbGQgdGhlIENQVSB3aGlsZSB3YWl0aW5nIGZvciBhbm90aGVyIHRocmVhZCB0byBmaW5pc2gKKy0JICAgaW5pdGlhbGl6aW5nIHRoaXMgbG9jay4gICovCistCXdoaWxlICghbG9jay0+Z3VhcmQuZG9uZSkKKy0JICBTbGVlcCAoMCk7CistICAgIH0KKy0gIHsKKy0gICAgRFdPUkQgc2VsZiA9IEdldEN1cnJlbnRUaHJlYWRJZCAoKTsKKy0gICAgaWYgKGxvY2stPm93bmVyICE9IHNlbGYpCistICAgICAgeworLQlFbnRlckNyaXRpY2FsU2VjdGlvbiAoJmxvY2stPmxvY2spOworLQlsb2NrLT5vd25lciA9IHNlbGY7CistICAgICAgfQorLSAgICBpZiAoKysobG9jay0+ZGVwdGgpID09IDApIC8qIHdyYXBhcm91bmQ/ICovCistICAgICAgYWJvcnQgKCk7CistICB9CistfQorLQorLXZvaWQKKy1nbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2sgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spCisteworLSAgaWYgKGxvY2stPm93bmVyICE9IEdldEN1cnJlbnRUaHJlYWRJZCAoKSkKKy0gICAgYWJvcnQgKCk7CistICBpZiAobG9jay0+ZGVwdGggPT0gMCkKKy0gICAgYWJvcnQgKCk7CistICBpZiAoLS0obG9jay0+ZGVwdGgpID09IDApCistICAgIHsKKy0gICAgICBsb2NrLT5vd25lciA9IDA7CistICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy0gICAgfQorLX0KKy0KKy12b2lkCistZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveSAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jaykKKy17CistICBpZiAobG9jay0+b3duZXIgIT0gMCkKKy0gICAgYWJvcnQgKCk7CistICBEZWxldGVDcml0aWNhbFNlY3Rpb24gKCZsb2NrLT5sb2NrKTsKKy0gIGxvY2stPmd1YXJkLmRvbmUgPSAwOworLX0KKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9vbmNlX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy12b2lkCistZ2x0aHJlYWRfb25jZSAoZ2xfb25jZV90ICpvbmNlX2NvbnRyb2wsIHZvaWQgKCppbml0ZnVuY3Rpb24pICh2b2lkKSkKKy17CistICBpZiAob25jZV9jb250cm9sLT5pbml0ZWQgPD0gMCkKKy0gICAgeworLSAgICAgIGlmIChJbnRlcmxvY2tlZEluY3JlbWVudCAoJm9uY2VfY29udHJvbC0+c3RhcnRlZCkgPT0gMCkKKy0JeworLQkgIC8qIFRoaXMgdGhyZWFkIGlzIHRoZSBmaXJzdCBvbmUgdG8gY29tZSB0byB0aGlzIG9uY2VfY29udHJvbC4gICovCistCSAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbiAoJm9uY2VfY29udHJvbC0+bG9jayk7CistCSAgRW50ZXJDcml0aWNhbFNlY3Rpb24gKCZvbmNlX2NvbnRyb2wtPmxvY2spOworLQkgIG9uY2VfY29udHJvbC0+aW5pdGVkID0gMDsKKy0JICBpbml0ZnVuY3Rpb24gKCk7CistCSAgb25jZV9jb250cm9sLT5pbml0ZWQgPSAxOworLQkgIExlYXZlQ3JpdGljYWxTZWN0aW9uICgmb25jZV9jb250cm9sLT5sb2NrKTsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIC8qIFVuZG8gbGFzdCBvcGVyYXRpb24uICAqLworLQkgIEludGVybG9ja2VkRGVjcmVtZW50ICgmb25jZV9jb250cm9sLT5zdGFydGVkKTsKKy0JICAvKiBTb21lIG90aGVyIHRocmVhZCBoYXMgYWxyZWFkeSBzdGFydGVkIHRoZSBpbml0aWFsaXphdGlvbi4KKy0JICAgICBZaWVsZCB0aGUgQ1BVIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBvdGhlciB0aHJlYWQgdG8gZmluaXNoCistCSAgICAgaW5pdGlhbGl6aW5nIGFuZCB0YWtpbmcgdGhlIGxvY2suICAqLworLQkgIHdoaWxlIChvbmNlX2NvbnRyb2wtPmluaXRlZCA8IDApCistCSAgICBTbGVlcCAoMCk7CistCSAgaWYgKG9uY2VfY29udHJvbC0+aW5pdGVkIDw9IDApCistCSAgICB7CistCSAgICAgIC8qIFRha2UgdGhlIGxvY2suICBUaGlzIGJsb2NrcyB1bnRpbCB0aGUgb3RoZXIgdGhyZWFkIGhhcworLQkJIGZpbmlzaGVkIGNhbGxpbmcgdGhlIGluaXRmdW5jdGlvbi4gICovCistCSAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uICgmb25jZV9jb250cm9sLT5sb2NrKTsKKy0JICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24gKCZvbmNlX2NvbnRyb2wtPmxvY2spOworLQkgICAgICBpZiAoIShvbmNlX2NvbnRyb2wtPmluaXRlZCA+IDApKQorLQkJYWJvcnQgKCk7CistCSAgICB9CistCX0KKy0gICAgfQorLX0KKy0KKy0jZW5kaWYKKy0KKy0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCistLS0gYS9pbnRsL2xvY2suaAorKysrIC9kZXYvbnVsbAorQEAgLTEsMTEwNSArMCwwIEBACistLyogTG9ja2luZyBpbiBtdWx0aXRocmVhZGVkIHNpdHVhdGlvbnMuCistICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0vKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwNS4KKy0gICBCYXNlZCBvbiBHQ0MncyBndGhyLXBvc2l4LmgsIGd0aHItcG9zaXg5NS5oLCBndGhyLXNvbGFyaXMuaCwKKy0gICBndGhyLXdpbjMyLmguICAqLworLQorLS8qIFRoaXMgZmlsZSBjb250YWlucyBsb2NraW5nIHByaW1pdGl2ZXMgZm9yIHVzZSB3aXRoIGEgZ2l2ZW4gdGhyZWFkIGxpYnJhcnkuCistICAgSXQgZG9lcyBub3QgY29udGFpbiBwcmltaXRpdmVzIGZvciBjcmVhdGluZyB0aHJlYWRzIG9yIGZvciBvdGhlcgorLSAgIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLgorLQorLSAgIE5vcm1hbCAobm9uLXJlY3Vyc2l2ZSkgbG9ja3M6CistICAgICBUeXBlOiAgICAgICAgICAgICAgICBnbF9sb2NrX3QKKy0gICAgIERlY2xhcmF0aW9uOiAgICAgICAgIGdsX2xvY2tfZGVmaW5lKGV4dGVybiwgbmFtZSkKKy0gICAgIEluaXRpYWxpemVyOiAgICAgICAgIGdsX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKCwgbmFtZSkKKy0gICAgIEluaXRpYWxpemF0aW9uOiAgICAgIGdsX2xvY2tfaW5pdCAobmFtZSk7CistICAgICBUYWtpbmcgdGhlIGxvY2s6ICAgICBnbF9sb2NrX2xvY2sgKG5hbWUpOworLSAgICAgUmVsZWFzaW5nIHRoZSBsb2NrOiAgZ2xfbG9ja191bmxvY2sgKG5hbWUpOworLSAgICAgRGUtaW5pdGlhbGl6YXRpb246ICAgZ2xfbG9ja19kZXN0cm95IChuYW1lKTsKKy0KKy0gICBSZWFkLVdyaXRlIChub24tcmVjdXJzaXZlKSBsb2NrczoKKy0gICAgIFR5cGU6ICAgICAgICAgICAgICAgIGdsX3J3bG9ja190CistICAgICBEZWNsYXJhdGlvbjogICAgICAgICBnbF9yd2xvY2tfZGVmaW5lKGV4dGVybiwgbmFtZSkKKy0gICAgIEluaXRpYWxpemVyOiAgICAgICAgIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoLCBuYW1lKQorLSAgICAgSW5pdGlhbGl6YXRpb246ICAgICAgZ2xfcndsb2NrX2luaXQgKG5hbWUpOworLSAgICAgVGFraW5nIHRoZSBsb2NrOiAgICAgZ2xfcndsb2NrX3JkbG9jayAobmFtZSk7CistICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9yd2xvY2tfd3Jsb2NrIChuYW1lKTsKKy0gICAgIFJlbGVhc2luZyB0aGUgbG9jazogIGdsX3J3bG9ja191bmxvY2sgKG5hbWUpOworLSAgICAgRGUtaW5pdGlhbGl6YXRpb246ICAgZ2xfcndsb2NrX2Rlc3Ryb3kgKG5hbWUpOworLQorLSAgIFJlY3Vyc2l2ZSBsb2NrczoKKy0gICAgIFR5cGU6ICAgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3QKKy0gICAgIERlY2xhcmF0aW9uOiAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZShleHRlcm4sIG5hbWUpCistICAgICBJbml0aWFsaXplcjogICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoLCBuYW1lKQorLSAgICAgSW5pdGlhbGl6YXRpb246ICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdCAobmFtZSk7CistICAgICBUYWtpbmcgdGhlIGxvY2s6ICAgICBnbF9yZWN1cnNpdmVfbG9ja19sb2NrIChuYW1lKTsKKy0gICAgIFJlbGVhc2luZyB0aGUgbG9jazogIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayAobmFtZSk7CistICAgICBEZS1pbml0aWFsaXphdGlvbjogICBnbF9yZWN1cnNpdmVfbG9ja19kZXN0cm95IChuYW1lKTsKKy0KKy0gIE9uY2Utb25seSBleGVjdXRpb246CistICAgICBUeXBlOiAgICAgICAgICAgICAgICBnbF9vbmNlX3QKKy0gICAgIEluaXRpYWxpemVyOiAgICAgICAgIGdsX29uY2VfZGVmaW5lKGV4dGVybiwgbmFtZSkKKy0gICAgIEV4ZWN1dGlvbjogICAgICAgICAgIGdsX29uY2UgKG5hbWUsIGluaXRmdW5jdGlvbik7CistKi8KKy0KKy0KKy0jaWZuZGVmIF9MT0NLX0gKKy0jZGVmaW5lIF9MT0NLX0gKKy0KKy0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCistCistI2lmIFVTRV9QT1NJWF9USFJFQURTCistCistLyogVXNlIHRoZSBQT1NJWCB0aHJlYWRzIGxpYnJhcnkuICAqLworLQorLSMgaW5jbHVkZSA8cHRocmVhZC5oPgorLSMgaW5jbHVkZSA8c3RkbGliLmg+CistCistIyBpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeworLSMgZW5kaWYKKy0KKy0jIGlmIFBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJECistCistLyogVGhlIHB0aHJlYWRfaW5fdXNlKCkgZGV0ZWN0aW9uIG5lZWRzIHRvIGJlIGRvbmUgYXQgcnVudGltZS4gICovCistIyAgZGVmaW5lIHB0aHJlYWRfaW5fdXNlKCkgXAorLSAgICAgZ2x0aHJlYWRfaW5fdXNlICgpCistZXh0ZXJuIGludCBnbHRocmVhZF9pbl91c2UgKHZvaWQpOworLQorLSMgZW5kaWYKKy0KKy0jIGlmIFVTRV9QT1NJWF9USFJFQURTX1dFQUsKKy0KKy0vKiBVc2Ugd2VhayByZWZlcmVuY2VzIHRvIHRoZSBQT1NJWCB0aHJlYWRzIGxpYnJhcnkuICAqLworLQorLS8qIFdlYWsgcmVmZXJlbmNlcyBhdm9pZCBkcmFnZ2luZyBpbiBleHRlcm5hbCBsaWJyYXJpZXMgaWYgdGhlIG90aGVyIHBhcnRzCistICAgb2YgdGhlIHByb2dyYW0gZG9uJ3QgdXNlIHRoZW0uICBIZXJlIHdlIHVzZSB0aGVtLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQKKy0gICBldmVyeSBwcm9ncmFtIHRoYXQgdXNlcyBsaWJpbnRsIHRvIGRlcGVuZCBvbiBsaWJwdGhyZWFkLiAgVGhpcyBhc3N1bWVzCistICAgdGhhdCBsaWJwdGhyZWFkIHdvdWxkIG5vdCBiZSBsb2FkZWQgYWZ0ZXIgbGliaW50bDsgaS5lLiBpZiBsaWJpbnRsIGlzCistICAgbG9hZGVkIGZpcnN0LCBieSBhbiBleGVjdXRhYmxlIHRoYXQgZG9lcyBub3QgZGVwZW5kIG9uIGxpYnB0aHJlYWQsIGFuZAorLSAgIHRoZW4gYSBtb2R1bGUgaXMgZHluYW1pY2FsbHkgbG9hZGVkIHRoYXQgZGVwZW5kcyBvbiBsaWJwdGhyZWFkLCBsaWJpbnRsCistICAgd2lsbCBub3QgYmUgbXVsdGl0aHJlYWQtc2FmZS4gICovCistCistLyogVGhlIHdheSB0byB0ZXN0IGF0IHJ1bnRpbWUgd2hldGhlciBsaWJwdGhyZWFkIGlzIHByZXNlbnQgaXMgdG8gdGVzdAorLSAgIHdoZXRoZXIgYSBmdW5jdGlvbiBwb2ludGVyJ3MgdmFsdWUsIHN1Y2ggYXMgJnB0aHJlYWRfbXV0ZXhfaW5pdCwgaXMKKy0gICBub24tTlVMTC4gIEhvd2V2ZXIsIHNvbWUgdmVyc2lvbnMgb2YgR0NDIGhhdmUgYSBidWcgdGhyb3VnaCB3aGljaCwgaW4KKy0gICBQSUMgbW9kZSwgJmZvbyAhPSBOVUxMIGFsd2F5cyBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGVyZSBpcyBhIGRpcmVjdAorLSAgIGNhbGwgdG8gZm9vKC4uLikgaW4gdGhlIHNhbWUgZnVuY3Rpb24uICBUbyBhdm9pZCB0aGlzLCB3ZSB0ZXN0IHRoZQorLSAgIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiBpbiBsaWJwdGhyZWFkIHRoYXQgd2UgZG9uJ3QgdXNlLiAgKi8KKy0KKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2luaXQKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jaworLSMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfZGVzdHJveQorLSMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfcndsb2NrX2luaXQKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX3J3bG9ja19yZGxvY2sKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX3J3bG9ja193cmxvY2sKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX3J3bG9ja191bmxvY2sKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX3J3bG9ja19kZXN0cm95CistIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCistIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9jb25kX2luaXQKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX2NvbmRfd2FpdAorLSMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfY29uZF9zaWduYWwKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0CistIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9jb25kX2Rlc3Ryb3kKKy0jICBwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4YXR0cl9pbml0CistIyAgcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZQorLSMgIHByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kKKy0jICBpZm5kZWYgcHRocmVhZF9zZWxmCistIyAgIHByYWdtYSB3ZWFrIHB0aHJlYWRfc2VsZgorLSMgIGVuZGlmCistCistIyAgaWYgIVBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJECistIyAgIHByYWdtYSB3ZWFrIHB0aHJlYWRfY2FuY2VsCistIyAgIGRlZmluZSBwdGhyZWFkX2luX3VzZSgpIChwdGhyZWFkX2NhbmNlbCAhPSBOVUxMKQorLSMgIGVuZGlmCistCistIyBlbHNlCistCistIyAgaWYgIVBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJECistIyAgIGRlZmluZSBwdGhyZWFkX2luX3VzZSgpIDEKKy0jICBlbmRpZgorLQorLSMgZW5kaWYKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBnbF9sb2NrX3Q7CistIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBwdGhyZWFkX211dGV4X3QgTkFNRTsKKy0jIGRlZmluZSBnbF9sb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgU1RPUkFHRUNMQVNTIHB0aHJlYWRfbXV0ZXhfdCBOQU1FID0gZ2xfbG9ja19pbml0aWFsaXplcjsKKy0jIGRlZmluZSBnbF9sb2NrX2luaXRpYWxpemVyIFwKKy0gICAgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUgorLSMgZGVmaW5lIGdsX2xvY2tfaW5pdChOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSAmJiBwdGhyZWFkX211dGV4X2luaXQgKCZOQU1FLCBOVUxMKSAhPSAwKSBcCistICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistIyBkZWZpbmUgZ2xfbG9ja19sb2NrKE5BTUUpIFwKKy0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKHB0aHJlYWRfaW5fdXNlICgpICYmIHB0aHJlYWRfbXV0ZXhfbG9jayAoJk5BTUUpICE9IDApIFwKKy0gICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB3aGlsZSAoMCkKKy0jIGRlZmluZSBnbF9sb2NrX3VubG9jayhOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkgJiYgcHRocmVhZF9tdXRleF91bmxvY2sgKCZOQU1FKSAhPSAwKSBcCistICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLSMgZGVmaW5lIGdsX2xvY2tfZGVzdHJveShOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSAmJiBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKCZOQU1FKSAhPSAwKSBcCistICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9yd2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistIyBpZiBIQVZFX1BUSFJFQURfUldMT0NLCistCistIyAgaWZkZWYgUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIKKy0KKy10eXBlZGVmIHB0aHJlYWRfcndsb2NrX3QgZ2xfcndsb2NrX3Q7CistIyAgIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICAgIFNUT1JBR0VDTEFTUyBwdGhyZWFkX3J3bG9ja190IE5BTUU7CistIyAgIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICAgIFNUT1JBR0VDTEFTUyBwdGhyZWFkX3J3bG9ja190IE5BTUUgPSBnbF9yd2xvY2tfaW5pdGlhbGl6ZXI7CistIyAgIGRlZmluZSBnbF9yd2xvY2tfaW5pdGlhbGl6ZXIgXAorLSAgICAgIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSCistIyAgIGRlZmluZSBnbF9yd2xvY2tfaW5pdChOQU1FKSBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKHB0aHJlYWRfaW5fdXNlICgpICYmIHB0aHJlYWRfcndsb2NrX2luaXQgKCZOQU1FLCBOVUxMKSAhPSAwKSBcCistICAgICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB3aGlsZSAoMCkKKy0jICAgZGVmaW5lIGdsX3J3bG9ja19yZGxvY2soTkFNRSkgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkgJiYgcHRocmVhZF9yd2xvY2tfcmRsb2NrICgmTkFNRSkgIT0gMCkgXAorLSAgICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHdoaWxlICgwKQorLSMgICBkZWZpbmUgZ2xfcndsb2NrX3dybG9jayhOQU1FKSBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSAmJiBwdGhyZWFkX3J3bG9ja193cmxvY2sgKCZOQU1FKSAhPSAwKSBcCistICAgICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgd2hpbGUgKDApCistIyAgIGRlZmluZSBnbF9yd2xvY2tfdW5sb2NrKE5BTUUpIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKHB0aHJlYWRfaW5fdXNlICgpICYmIHB0aHJlYWRfcndsb2NrX3VubG9jayAoJk5BTUUpICE9IDApIFwKKy0gICAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB3aGlsZSAoMCkKKy0jICAgZGVmaW5lIGdsX3J3bG9ja19kZXN0cm95KE5BTUUpIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkgJiYgcHRocmVhZF9yd2xvY2tfZGVzdHJveSAoJk5BTUUpICE9IDApIFwKKy0gICAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHdoaWxlICgwKQorLQorLSMgIGVsc2UKKy0KKy10eXBlZGVmIHN0cnVjdAorLSAgICAgICAgeworLSAgICAgICAgICBpbnQgaW5pdGlhbGl6ZWQ7CistICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCBndWFyZDsgICAvKiBwcm90ZWN0cyB0aGUgaW5pdGlhbGl6YXRpb24gKi8KKy0gICAgICAgICAgcHRocmVhZF9yd2xvY2tfdCByd2xvY2s7IC8qIHJlYWQtd3JpdGUgbG9jayAqLworLSAgICAgICAgfQorLSAgICAgICAgZ2xfcndsb2NrX3Q7CistIyAgIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICAgIFNUT1JBR0VDTEFTUyBnbF9yd2xvY2tfdCBOQU1FOworLSMgICBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgICBTVE9SQUdFQ0xBU1MgZ2xfcndsb2NrX3QgTkFNRSA9IGdsX3J3bG9ja19pbml0aWFsaXplcjsKKy0jICAgZGVmaW5lIGdsX3J3bG9ja19pbml0aWFsaXplciBcCistICAgICAgeyAwLCBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSIH0KKy0jICAgZGVmaW5lIGdsX3J3bG9ja19pbml0KE5BTUUpIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgIFwKKy0gICAgICAgICAgICBnbHRocmVhZF9yd2xvY2tfaW5pdCAoJk5BTUUpOyBcCistICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHdoaWxlICgwKQorLSMgICBkZWZpbmUgZ2xfcndsb2NrX3JkbG9jayhOQU1FKSBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSkgICAgICAgICAgICBcCistICAgICAgICAgICAgZ2x0aHJlYWRfcndsb2NrX3JkbG9jayAoJk5BTUUpOyBcCistICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgd2hpbGUgKDApCistIyAgIGRlZmluZSBnbF9yd2xvY2tfd3Jsb2NrKE5BTUUpIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKHB0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgIFwKKy0gICAgICAgICAgICBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrICgmTkFNRSk7IFwKKy0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB3aGlsZSAoMCkKKy0jICAgZGVmaW5lIGdsX3J3bG9ja191bmxvY2soTkFNRSkgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgXAorLSAgICAgICAgICAgIGdsdGhyZWFkX3J3bG9ja191bmxvY2sgKCZOQU1FKTsgXAorLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHdoaWxlICgwKQorLSMgICBkZWZpbmUgZ2xfcndsb2NrX2Rlc3Ryb3koTkFNRSkgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSkgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIGdsdGhyZWFkX3J3bG9ja19kZXN0cm95ICgmTkFNRSk7IFwKKy0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgd2hpbGUgKDApCistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcndsb2NrX2luaXQgKGdsX3J3bG9ja190ICpsb2NrKTsKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yd2xvY2tfcmRsb2NrIChnbF9yd2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcndsb2NrX3dybG9jayAoZ2xfcndsb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3J3bG9ja191bmxvY2sgKGdsX3J3bG9ja190ICpsb2NrKTsKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yd2xvY2tfZGVzdHJveSAoZ2xfcndsb2NrX3QgKmxvY2spOworLQorLSMgIGVuZGlmCistCistIyBlbHNlCistCistdHlwZWRlZiBzdHJ1Y3QKKy0gICAgICAgIHsKKy0gICAgICAgICAgcHRocmVhZF9tdXRleF90IGxvY2s7IC8qIHByb3RlY3RzIHRoZSByZW1haW5pbmcgZmllbGRzICovCistICAgICAgICAgIHB0aHJlYWRfY29uZF90IHdhaXRpbmdfcmVhZGVyczsgLyogd2FpdGluZyByZWFkZXJzICovCistICAgICAgICAgIHB0aHJlYWRfY29uZF90IHdhaXRpbmdfd3JpdGVyczsgLyogd2FpdGluZyB3cml0ZXJzICovCistICAgICAgICAgIHVuc2lnbmVkIGludCB3YWl0aW5nX3dyaXRlcnNfY291bnQ7IC8qIG51bWJlciBvZiB3YWl0aW5nIHdyaXRlcnMgKi8KKy0gICAgICAgICAgaW50IHJ1bmNvdW50OyAvKiBudW1iZXIgb2YgcmVhZGVycyBydW5uaW5nLCBvciAtMSB3aGVuIGEgd3JpdGVyIHJ1bnMgKi8KKy0gICAgICAgIH0KKy0gICAgICAgIGdsX3J3bG9ja190OworLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBnbF9yd2xvY2tfdCBOQU1FOworLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBnbF9yd2xvY2tfdCBOQU1FID0gZ2xfcndsb2NrX2luaXRpYWxpemVyOworLSMgZGVmaW5lIGdsX3J3bG9ja19pbml0aWFsaXplciBcCistICAgIHsgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwgUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSLCBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIsIDAsIDAgfQorLSMgZGVmaW5lIGdsX3J3bG9ja19pbml0KE5BTUUpIFwKKy0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgIFwKKy0gICAgICAgICAgZ2x0aHJlYWRfcndsb2NrX2luaXQgKCZOQU1FKTsgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLSMgZGVmaW5lIGdsX3J3bG9ja19yZGxvY2soTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgXAorLSAgICAgICAgICBnbHRocmVhZF9yd2xvY2tfcmRsb2NrICgmTkFNRSk7IFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLSMgZGVmaW5lIGdsX3J3bG9ja193cmxvY2soTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgXAorLSAgICAgICAgICBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrICgmTkFNRSk7IFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLSMgZGVmaW5lIGdsX3J3bG9ja191bmxvY2soTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgXAorLSAgICAgICAgICBnbHRocmVhZF9yd2xvY2tfdW5sb2NrICgmTkFNRSk7IFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLSMgZGVmaW5lIGdsX3J3bG9ja19kZXN0cm95KE5BTUUpIFwKKy0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgIFwKKy0gICAgICAgICAgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKCZOQU1FKTsgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLWV4dGVybiB2b2lkIGdsdGhyZWFkX3J3bG9ja19pbml0IChnbF9yd2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcndsb2NrX3JkbG9jayAoZ2xfcndsb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3J3bG9ja193cmxvY2sgKGdsX3J3bG9ja190ICpsb2NrKTsKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yd2xvY2tfdW5sb2NrIChnbF9yd2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKGdsX3J3bG9ja190ICpsb2NrKTsKKy0KKy0jIGVuZGlmCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistIyBpZiBIQVZFX1BUSFJFQURfTVVURVhfUkVDVVJTSVZFCistCistIyAgaWYgZGVmaW5lZCBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUiB8fCBkZWZpbmVkIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QCistCistdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgZ2xfcmVjdXJzaXZlX2xvY2tfdDsKKy0jICAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgICBTVE9SQUdFQ0xBU1MgcHRocmVhZF9tdXRleF90IE5BTUU7CistIyAgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgICAgU1RPUkFHRUNMQVNTIHB0aHJlYWRfbXV0ZXhfdCBOQU1FID0gZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdGlhbGl6ZXI7CistIyAgIGlmZGVmIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSCistIyAgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdGlhbGl6ZXIgXAorLSAgICAgICBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUgorLSMgICBlbHNlCistIyAgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdGlhbGl6ZXIgXAorLSAgICAgICBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUl9OUAorLSMgICBlbmRpZgorLSMgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdChOQU1FKSBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSAmJiBwdGhyZWFkX211dGV4X2luaXQgKCZOQU1FLCBOVUxMKSAhPSAwKSBcCistICAgICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgd2hpbGUgKDApCistIyAgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19sb2NrKE5BTUUpIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKHB0aHJlYWRfaW5fdXNlICgpICYmIHB0aHJlYWRfbXV0ZXhfbG9jayAoJk5BTUUpICE9IDApIFwKKy0gICAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB3aGlsZSAoMCkKKy0jICAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayhOQU1FKSBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkgJiYgcHRocmVhZF9tdXRleF91bmxvY2sgKCZOQU1FKSAhPSAwKSBcCistICAgICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHdoaWxlICgwKQorLSMgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVzdHJveShOQU1FKSBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSAmJiBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKCZOQU1FKSAhPSAwKSBcCistICAgICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgd2hpbGUgKDApCistCistIyAgZWxzZQorLQorLXR5cGVkZWYgc3RydWN0CistICAgICAgICB7CistICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCByZWNtdXRleDsgLyogcmVjdXJzaXZlIG11dGV4ICovCistICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCBndWFyZDsgICAgLyogcHJvdGVjdHMgdGhlIGluaXRpYWxpemF0aW9uICovCistICAgICAgICAgIGludCBpbml0aWFsaXplZDsKKy0gICAgICAgIH0KKy0gICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3Q7CistIyAgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRTsKKy0jICAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgICBTVE9SQUdFQ0xBU1MgZ2xfcmVjdXJzaXZlX2xvY2tfdCBOQU1FID0gZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdGlhbGl6ZXI7CistIyAgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplciBcCistICAgICAgeyBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLCBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLCAwIH0KKy0jICAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXQoTkFNRSkgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKCZOQU1FKTsgXAorLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHdoaWxlICgwKQorLSMgICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfbG9jayhOQU1FKSBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSkgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayAoJk5BTUUpOyBcCistICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgd2hpbGUgKDApCistIyAgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja191bmxvY2soTkFNRSkgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKHB0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayAoJk5BTUUpOyBcCistICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB3aGlsZSAoMCkKKy0jICAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3koTkFNRSkgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kgKCZOQU1FKTsgXAorLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHdoaWxlICgwKQorLWV4dGVybiB2b2lkIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2sgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveSAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CistCistIyAgZW5kaWYKKy0KKy0jIGVsc2UKKy0KKy0vKiBPbGQgdmVyc2lvbnMgb2YgUE9TSVggdGhyZWFkcyBvbiBTb2xhcmlzIGRpZCBub3QgaGF2ZSByZWN1cnNpdmUgbG9ja3MuCistICAgV2UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlbSBvdXJzZWx2ZXMuICAqLworLQorLXR5cGVkZWYgc3RydWN0CistICAgICAgICB7CistICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKKy0gICAgICAgICAgcHRocmVhZF90IG93bmVyOworLSAgICAgICAgICB1bnNpZ25lZCBsb25nIGRlcHRoOworLSAgICAgICAgfQorLSAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfdDsKKy0jICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRTsKKy0jICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRSA9IGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXRpYWxpemVyOworLSMgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplciBcCistICAgICB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIChwdGhyZWFkX3QpIDAsIDAgfQorLSMgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19pbml0KE5BTUUpIFwKKy0gICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgaWYgKHB0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKCZOQU1FKTsgXAorLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICB3aGlsZSAoMCkKKy0jICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfbG9jayhOQU1FKSBcCistICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgIGlmIChwdGhyZWFkX2luX3VzZSAoKSkgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrICgmTkFNRSk7IFwKKy0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgd2hpbGUgKDApCistIyAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayhOQU1FKSBcCistICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2sgKCZOQU1FKTsgXAorLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgIHdoaWxlICgwKQorLSMgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZXN0cm95KE5BTUUpIFwKKy0gICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgaWYgKHB0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kgKCZOQU1FKTsgXAorLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICB3aGlsZSAoMCkKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19pbml0IChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKTsKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19sb2NrIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKTsKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2sgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworLQorLSMgZW5kaWYKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9vbmNlX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIHB0aHJlYWRfb25jZV90IGdsX29uY2VfdDsKKy0jIGRlZmluZSBnbF9vbmNlX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgU1RPUkFHRUNMQVNTIHB0aHJlYWRfb25jZV90IE5BTUUgPSBQVEhSRUFEX09OQ0VfSU5JVDsKKy0jIGRlZmluZSBnbF9vbmNlKE5BTUUsIElOSVRGVU5DVElPTikgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAocHRocmVhZF9pbl91c2UgKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICBpZiAocHRocmVhZF9vbmNlICgmTkFNRSwgSU5JVEZVTkNUSU9OKSAhPSAwKSBcCistICAgICAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIGlmIChnbHRocmVhZF9vbmNlX3NpbmdsZXRocmVhZGVkICgmTkFNRSkpICAgIFwKKy0gICAgICAgICAgICAgIElOSVRGVU5DVElPTiAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistZXh0ZXJuIGludCBnbHRocmVhZF9vbmNlX3NpbmdsZXRocmVhZGVkIChwdGhyZWFkX29uY2VfdCAqb25jZV9jb250cm9sKTsKKy0KKy0jIGlmZGVmIF9fY3BsdXNwbHVzCistfQorLSMgZW5kaWYKKy0KKy0jZW5kaWYKKy0KKy0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCistCistI2lmIFVTRV9QVEhfVEhSRUFEUworLQorLS8qIFVzZSB0aGUgR05VIFB0aCB0aHJlYWRzIGxpYnJhcnkuICAqLworLQorLSMgaW5jbHVkZSA8cHRoLmg+CistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0KKy0jIGlmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistIyBlbmRpZgorLQorLSMgaWYgVVNFX1BUSF9USFJFQURTX1dFQUsKKy0KKy0vKiBVc2Ugd2VhayByZWZlcmVuY2VzIHRvIHRoZSBHTlUgUHRoIHRocmVhZHMgbGlicmFyeS4gICovCistCistIyAgcHJhZ21hIHdlYWsgcHRoX211dGV4X2luaXQKKy0jICBwcmFnbWEgd2VhayBwdGhfbXV0ZXhfYWNxdWlyZQorLSMgIHByYWdtYSB3ZWFrIHB0aF9tdXRleF9yZWxlYXNlCistIyAgcHJhZ21hIHdlYWsgcHRoX3J3bG9ja19pbml0CistIyAgcHJhZ21hIHdlYWsgcHRoX3J3bG9ja19hY3F1aXJlCistIyAgcHJhZ21hIHdlYWsgcHRoX3J3bG9ja19yZWxlYXNlCistIyAgcHJhZ21hIHdlYWsgcHRoX29uY2UKKy0KKy0jICBwcmFnbWEgd2VhayBwdGhfY2FuY2VsCistIyAgZGVmaW5lIHB0aF9pbl91c2UoKSAocHRoX2NhbmNlbCAhPSBOVUxMKQorLQorLSMgZWxzZQorLQorLSMgIGRlZmluZSBwdGhfaW5fdXNlKCkgMQorLQorLSMgZW5kaWYKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIHB0aF9tdXRleF90IGdsX2xvY2tfdDsKKy0jIGRlZmluZSBnbF9sb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgU1RPUkFHRUNMQVNTIHB0aF9tdXRleF90IE5BTUU7CistIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBwdGhfbXV0ZXhfdCBOQU1FID0gZ2xfbG9ja19pbml0aWFsaXplcjsKKy0jIGRlZmluZSBnbF9sb2NrX2luaXRpYWxpemVyIFwKKy0gICAgUFRIX01VVEVYX0lOSVQKKy0jIGRlZmluZSBnbF9sb2NrX2luaXQoTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKHB0aF9pbl91c2UoKSAmJiAhcHRoX211dGV4X2luaXQgKCZOQU1FKSkgXAorLSAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB3aGlsZSAoMCkKKy0jIGRlZmluZSBnbF9sb2NrX2xvY2soTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKHB0aF9pbl91c2UoKSAmJiAhcHRoX211dGV4X2FjcXVpcmUgKCZOQU1FLCAwLCBOVUxMKSkgXAorLSAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB3aGlsZSAoMCkKKy0jIGRlZmluZSBnbF9sb2NrX3VubG9jayhOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAocHRoX2luX3VzZSgpICYmICFwdGhfbXV0ZXhfcmVsZWFzZSAoJk5BTUUpKSBcCistICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLSMgZGVmaW5lIGdsX2xvY2tfZGVzdHJveShOQU1FKSBcCistICAgICh2b2lkKSgmTkFNRSkKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3J3bG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIHB0aF9yd2xvY2tfdCBnbF9yd2xvY2tfdDsKKy0jICBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgIFNUT1JBR0VDTEFTUyBwdGhfcndsb2NrX3QgTkFNRTsKKy0jICBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgIFNUT1JBR0VDTEFTUyBwdGhfcndsb2NrX3QgTkFNRSA9IGdsX3J3bG9ja19pbml0aWFsaXplcjsKKy0jICBkZWZpbmUgZ2xfcndsb2NrX2luaXRpYWxpemVyIFwKKy0gICAgIFBUSF9SV0xPQ0tfSU5JVAorLSMgIGRlZmluZSBnbF9yd2xvY2tfaW5pdChOQU1FKSBcCistICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgIGlmIChwdGhfaW5fdXNlKCkgJiYgIXB0aF9yd2xvY2tfaW5pdCAoJk5BTUUpKSBcCistICAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgd2hpbGUgKDApCistIyAgZGVmaW5lIGdsX3J3bG9ja19yZGxvY2soTkFNRSkgXAorLSAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgaWYgKHB0aF9pbl91c2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAmJiAhcHRoX3J3bG9ja19hY3F1aXJlICgmTkFNRSwgUFRIX1JXTE9DS19SRCwgMCwgTlVMTCkpIFwKKy0gICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgd2hpbGUgKDApCistIyAgZGVmaW5lIGdsX3J3bG9ja193cmxvY2soTkFNRSkgXAorLSAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgaWYgKHB0aF9pbl91c2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAmJiAhcHRoX3J3bG9ja19hY3F1aXJlICgmTkFNRSwgUFRIX1JXTE9DS19SVywgMCwgTlVMTCkpIFwKKy0gICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgd2hpbGUgKDApCistIyAgZGVmaW5lIGdsX3J3bG9ja191bmxvY2soTkFNRSkgXAorLSAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICBpZiAocHRoX2luX3VzZSgpICYmICFwdGhfcndsb2NrX3JlbGVhc2UgKCZOQU1FKSkgXAorLSAgICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgIHdoaWxlICgwKQorLSMgIGRlZmluZSBnbF9yd2xvY2tfZGVzdHJveShOQU1FKSBcCistICAgICAodm9pZCkoJk5BTUUpCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogSW4gUHRoLCBtdXRleGVzIGFyZSByZWN1cnNpdmUgYnkgZGVmYXVsdC4gICovCistdHlwZWRlZiBwdGhfbXV0ZXhfdCBnbF9yZWN1cnNpdmVfbG9ja190OworLSMgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgICBTVE9SQUdFQ0xBU1MgcHRoX211dGV4X3QgTkFNRTsKKy0jICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICAgU1RPUkFHRUNMQVNTIHB0aF9tdXRleF90IE5BTUUgPSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplcjsKKy0jICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdGlhbGl6ZXIgXAorLSAgICAgUFRIX01VVEVYX0lOSVQKKy0jICBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdChOQU1FKSBcCistICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICBpZiAocHRoX2luX3VzZSgpICYmICFwdGhfbXV0ZXhfaW5pdCAoJk5BTUUpKSBcCistICAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgIHdoaWxlICgwKQorLSMgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19sb2NrKE5BTUUpIFwKKy0gICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgIGlmIChwdGhfaW5fdXNlKCkgJiYgIXB0aF9tdXRleF9hY3F1aXJlICgmTkFNRSwgMCwgTlVMTCkpIFwKKy0gICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgd2hpbGUgKDApCistIyAgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayhOQU1FKSBcCistICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICBpZiAocHRoX2luX3VzZSgpICYmICFwdGhfbXV0ZXhfcmVsZWFzZSAoJk5BTUUpKSBcCistICAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgIHdoaWxlICgwKQorLSMgIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZXN0cm95KE5BTUUpIFwKKy0gICAgICh2b2lkKSgmTkFNRSkKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9vbmNlX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIHB0aF9vbmNlX3QgZ2xfb25jZV90OworLSMgZGVmaW5lIGdsX29uY2VfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICBTVE9SQUdFQ0xBU1MgcHRoX29uY2VfdCBOQU1FID0gUFRIX09OQ0VfSU5JVDsKKy0jIGRlZmluZSBnbF9vbmNlKE5BTUUsIElOSVRGVU5DVElPTikgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmIChwdGhfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgdm9pZCAoKmdsX29uY2VfdGVtcCkgKHZvaWQpID0gSU5JVEZVTkNUSU9OOyAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICBpZiAoIXB0aF9vbmNlICgmTkFNRSwgZ2x0aHJlYWRfb25jZV9jYWxsLCAmZ2xfb25jZV90ZW1wKSkgXAorLSAgICAgICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgaWYgKGdsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgKCZOQU1FKSkgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIElOSVRGVU5DVElPTiAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfb25jZV9jYWxsICh2b2lkICphcmcpOworLWV4dGVybiBpbnQgZ2x0aHJlYWRfb25jZV9zaW5nbGV0aHJlYWRlZCAocHRoX29uY2VfdCAqb25jZV9jb250cm9sKTsKKy0KKy0jIGlmZGVmIF9fY3BsdXNwbHVzCistfQorLSMgZW5kaWYKKy0KKy0jZW5kaWYKKy0KKy0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCistCistI2lmIFVTRV9TT0xBUklTX1RIUkVBRFMKKy0KKy0vKiBVc2UgdGhlIG9sZCBTb2xhcmlzIHRocmVhZHMgbGlicmFyeS4gICovCistCistIyBpbmNsdWRlIDx0aHJlYWQuaD4KKy0jIGluY2x1ZGUgPHN5bmNoLmg+CistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0KKy0jIGlmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistIyBlbmRpZgorLQorLSMgaWYgVVNFX1NPTEFSSVNfVEhSRUFEU19XRUFLCistCistLyogVXNlIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgb2xkIFNvbGFyaXMgdGhyZWFkcyBsaWJyYXJ5LiAgKi8KKy0KKy0jICBwcmFnbWEgd2VhayBtdXRleF9pbml0CistIyAgcHJhZ21hIHdlYWsgbXV0ZXhfbG9jaworLSMgIHByYWdtYSB3ZWFrIG11dGV4X3VubG9jaworLSMgIHByYWdtYSB3ZWFrIG11dGV4X2Rlc3Ryb3kKKy0jICBwcmFnbWEgd2VhayByd2xvY2tfaW5pdAorLSMgIHByYWdtYSB3ZWFrIHJ3X3JkbG9jaworLSMgIHByYWdtYSB3ZWFrIHJ3X3dybG9jaworLSMgIHByYWdtYSB3ZWFrIHJ3X3VubG9jaworLSMgIHByYWdtYSB3ZWFrIHJ3bG9ja19kZXN0cm95CistIyAgcHJhZ21hIHdlYWsgdGhyX3NlbGYKKy0KKy0jICBwcmFnbWEgd2VhayB0aHJfc3VzcGVuZAorLSMgIGRlZmluZSB0aHJlYWRfaW5fdXNlKCkgKHRocl9zdXNwZW5kICE9IE5VTEwpCistCistIyBlbHNlCistCistIyAgZGVmaW5lIHRocmVhZF9pbl91c2UoKSAxCistCistIyBlbmRpZgorLQorLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLQorLXR5cGVkZWYgbXV0ZXhfdCBnbF9sb2NrX3Q7CistIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBtdXRleF90IE5BTUU7CistIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBtdXRleF90IE5BTUUgPSBnbF9sb2NrX2luaXRpYWxpemVyOworLSMgZGVmaW5lIGdsX2xvY2tfaW5pdGlhbGl6ZXIgXAorLSAgICBERUZBVUxUTVVURVgKKy0jIGRlZmluZSBnbF9sb2NrX2luaXQoTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKHRocmVhZF9pbl91c2UgKCkgJiYgbXV0ZXhfaW5pdCAoJk5BTUUsIFVTWU5DX1RIUkVBRCwgTlVMTCkgIT0gMCkgXAorLSAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB3aGlsZSAoMCkKKy0jIGRlZmluZSBnbF9sb2NrX2xvY2soTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAodGhyZWFkX2luX3VzZSAoKSAmJiBtdXRleF9sb2NrICgmTkFNRSkgIT0gMCkgXAorLSAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLSMgZGVmaW5lIGdsX2xvY2tfdW5sb2NrKE5BTUUpIFwKKy0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpICYmIG11dGV4X3VubG9jayAoJk5BTUUpICE9IDApIFwKKy0gICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistIyBkZWZpbmUgZ2xfbG9ja19kZXN0cm95KE5BTUUpIFwKKy0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKHRocmVhZF9pbl91c2UgKCkgJiYgbXV0ZXhfZGVzdHJveSAoJk5BTUUpICE9IDApIFwKKy0gICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB3aGlsZSAoMCkKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3J3bG9ja190IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIHJ3bG9ja190IGdsX3J3bG9ja190OworLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyByd2xvY2tfdCBOQU1FOworLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyByd2xvY2tfdCBOQU1FID0gZ2xfcndsb2NrX2luaXRpYWxpemVyOworLSMgZGVmaW5lIGdsX3J3bG9ja19pbml0aWFsaXplciBcCistICAgIERFRkFVTFRSV0xPQ0sKKy0jIGRlZmluZSBnbF9yd2xvY2tfaW5pdChOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpICYmIHJ3bG9ja19pbml0ICgmTkFNRSwgVVNZTkNfVEhSRUFELCBOVUxMKSAhPSAwKSBcCistICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistIyBkZWZpbmUgZ2xfcndsb2NrX3JkbG9jayhOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBpZiAodGhyZWFkX2luX3VzZSAoKSAmJiByd19yZGxvY2sgKCZOQU1FKSAhPSAwKSBcCistICAgICAgICAgIGFib3J0ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLSMgZGVmaW5lIGdsX3J3bG9ja193cmxvY2soTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKHRocmVhZF9pbl91c2UgKCkgJiYgcndfd3Jsb2NrICgmTkFNRSkgIT0gMCkgXAorLSAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB3aGlsZSAoMCkKKy0jIGRlZmluZSBnbF9yd2xvY2tfdW5sb2NrKE5BTUUpIFwKKy0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpICYmIHJ3X3VubG9jayAoJk5BTUUpICE9IDApIFwKKy0gICAgICAgICAgYWJvcnQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistIyBkZWZpbmUgZ2xfcndsb2NrX2Rlc3Ryb3koTkFNRSkgXAorLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpICYmIHJ3bG9ja19kZXN0cm95ICgmTkFNRSkgIT0gMCkgXAorLSAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogT2xkIFNvbGFyaXMgdGhyZWFkcyBkaWQgbm90IGhhdmUgcmVjdXJzaXZlIGxvY2tzLgorLSAgIFdlIGhhdmUgdG8gaW1wbGVtZW50IHRoZW0gb3Vyc2VsdmVzLiAgKi8KKy0KKy10eXBlZGVmIHN0cnVjdAorLSAgICAgICAgeworLSAgICAgICAgICBtdXRleF90IG11dGV4OworLSAgICAgICAgICB0aHJlYWRfdCBvd25lcjsKKy0gICAgICAgICAgdW5zaWduZWQgbG9uZyBkZXB0aDsKKy0gICAgICAgIH0KKy0gICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3Q7CistIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICBTVE9SQUdFQ0xBU1MgZ2xfcmVjdXJzaXZlX2xvY2tfdCBOQU1FOworLSMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRSA9IGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXRpYWxpemVyOworLSMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2luaXRpYWxpemVyIFwKKy0gICAgeyBERUZBVUxUTVVURVgsICh0aHJlYWRfdCkgMCwgMCB9CistIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdChOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKCZOQU1FKTsgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfbG9jayhOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2sgKCZOQU1FKTsgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfdW5sb2NrKE5BTUUpIFwKKy0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrICgmTkFNRSk7IFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVzdHJveShOQU1FKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kgKCZOQU1FKTsgXAorLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdCAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfbG9jayAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfdW5sb2NrIChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKTsKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95IChnbF9yZWN1cnNpdmVfbG9ja190ICpsb2NrKTsKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9vbmNlX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIHN0cnVjdAorLSAgICAgICAgeworLSAgICAgICAgICB2b2xhdGlsZSBpbnQgaW5pdGVkOworLSAgICAgICAgICBtdXRleF90IG11dGV4OworLSAgICAgICAgfQorLSAgICAgICAgZ2xfb25jZV90OworLSMgZGVmaW5lIGdsX29uY2VfZGVmaW5lKFNUT1JBR0VDTEFTUywgTkFNRSkgXAorLSAgICBTVE9SQUdFQ0xBU1MgZ2xfb25jZV90IE5BTUUgPSB7IDAsIERFRkFVTFRNVVRFWCB9OworLSMgZGVmaW5lIGdsX29uY2UoTkFNRSwgSU5JVEZVTkNUSU9OKSBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmICh0aHJlYWRfaW5fdXNlICgpKSAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIGdsdGhyZWFkX29uY2UgKCZOQU1FLCBJTklURlVOQ1RJT04pOyAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICBpZiAoZ2x0aHJlYWRfb25jZV9zaW5nbGV0aHJlYWRlZCAoJk5BTUUpKSBcCistICAgICAgICAgICAgICBJTklURlVOQ1RJT04gKCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHdoaWxlICgwKQorLWV4dGVybiB2b2lkIGdsdGhyZWFkX29uY2UgKGdsX29uY2VfdCAqb25jZV9jb250cm9sLCB2b2lkICgqaW5pdGZ1bmN0aW9uKSAodm9pZCkpOworLWV4dGVybiBpbnQgZ2x0aHJlYWRfb25jZV9zaW5nbGV0aHJlYWRlZCAoZ2xfb25jZV90ICpvbmNlX2NvbnRyb2wpOworLQorLSMgaWZkZWYgX19jcGx1c3BsdXMKKy19CistIyBlbmRpZgorLQorLSNlbmRpZgorLQorLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy0KKy0jaWYgVVNFX1dJTjMyX1RIUkVBRFMKKy0KKy0jIGluY2x1ZGUgPHdpbmRvd3MuaD4KKy0KKy0jIGlmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistIyBlbmRpZgorLQorLS8qIFdlIGNhbiB1c2UgQ1JJVElDQUxfU0VDVElPTiBkaXJlY3RseSwgcmF0aGVyIHRoYW4gdGhlIFdpbjMyIEV2ZW50LCBNdXRleCwKKy0gICBTZW1hcGhvcmUgdHlwZXMsIGJlY2F1c2UKKy0gICAgIC0gd2UgbmVlZCBvbmx5IHRvIHN5bmNocm9uaXplIGluc2lkZSBhIHNpbmdsZSBwcm9jZXNzIChhZGRyZXNzIHNwYWNlKSwKKy0gICAgICAgbm90IGludGVyLXByb2Nlc3MgbG9ja2luZywKKy0gICAgIC0gd2UgZG9uJ3QgbmVlZCB0byBzdXBwb3J0IHRyeWxvY2sgb3BlcmF0aW9ucy4gIChUcnlFbnRlckNyaXRpY2FsU2VjdGlvbgorLSAgICAgICBkb2VzIG5vdCB3b3JrIG9uIFdpbmRvd3MgOTUvOTgvTUUuICBQYWNrYWdlcyB0aGF0IG5lZWQgdHJ5bG9jayB1c3VhbGx5CistICAgICAgIGRlZmluZSB0aGVpciBvd24gbXV0ZXggdHlwZS4pICAqLworLQorLS8qIFRoZXJlIGlzIG5vIHdheSB0byBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBDUklUSUNBTF9TRUNUSU9OLiAgSXQgbmVlZHMKKy0gICB0byBiZSBkb25lIGxhemlseSwgb25jZSBvbmx5LiAgRm9yIHRoaXMgd2UgbmVlZCBzcGlubG9ja3MuICAqLworLQorLXR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGRvbmU7IHZvbGF0aWxlIGxvbmcgc3RhcnRlZDsgfSBnbF9zcGlubG9ja190OworLQorLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX2xvY2tfdCBkYXRhdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLQorLXR5cGVkZWYgc3RydWN0CistICAgICAgICB7CistICAgICAgICAgIGdsX3NwaW5sb2NrX3QgZ3VhcmQ7IC8qIHByb3RlY3RzIHRoZSBpbml0aWFsaXphdGlvbiAqLworLSAgICAgICAgICBDUklUSUNBTF9TRUNUSU9OIGxvY2s7CistICAgICAgICB9CistICAgICAgICBnbF9sb2NrX3Q7CistIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBnbF9sb2NrX3QgTkFNRTsKKy0jIGRlZmluZSBnbF9sb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgU1RPUkFHRUNMQVNTIGdsX2xvY2tfdCBOQU1FID0gZ2xfbG9ja19pbml0aWFsaXplcjsKKy0jIGRlZmluZSBnbF9sb2NrX2luaXRpYWxpemVyIFwKKy0gICAgeyB7IDAsIC0xIH0gfQorLSMgZGVmaW5lIGdsX2xvY2tfaW5pdChOQU1FKSBcCistICAgIGdsdGhyZWFkX2xvY2tfaW5pdCAoJk5BTUUpCistIyBkZWZpbmUgZ2xfbG9ja19sb2NrKE5BTUUpIFwKKy0gICAgZ2x0aHJlYWRfbG9ja19sb2NrICgmTkFNRSkKKy0jIGRlZmluZSBnbF9sb2NrX3VubG9jayhOQU1FKSBcCistICAgIGdsdGhyZWFkX2xvY2tfdW5sb2NrICgmTkFNRSkKKy0jIGRlZmluZSBnbF9sb2NrX2Rlc3Ryb3koTkFNRSkgXAorLSAgICBnbHRocmVhZF9sb2NrX2Rlc3Ryb3kgKCZOQU1FKQorLWV4dGVybiB2b2lkIGdsdGhyZWFkX2xvY2tfaW5pdCAoZ2xfbG9ja190ICpsb2NrKTsKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9sb2NrX2xvY2sgKGdsX2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfbG9ja191bmxvY2sgKGdsX2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfbG9ja19kZXN0cm95IChnbF9sb2NrX3QgKmxvY2spOworLQorLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfcndsb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLQorLS8qIEl0IGlzIGltcG9zc2libGUgdG8gaW1wbGVtZW50IHJlYWQtd3JpdGUgbG9ja3MgdXNpbmcgcGxhaW4gbG9ja3MsIHdpdGhvdXQKKy0gICBpbnRyb2R1Y2luZyBhbiBleHRyYSB0aHJlYWQgZGVkaWNhdGVkIHRvIG1hbmFnaW5nIHJlYWQtd3JpdGUgbG9ja3MuCistICAgVGhlcmVmb3JlIGhlcmUgd2UgbmVlZCB0byB1c2UgdGhlIGxvdy1sZXZlbCBFdmVudCB0eXBlLiAgKi8KKy0KKy10eXBlZGVmIHN0cnVjdAorLSAgICAgICAgeworLSAgICAgICAgICBIQU5ETEUgKmFycmF5OyAvKiBhcnJheSBvZiB3YWl0aW5nIHRocmVhZHMsIGVhY2ggcmVwcmVzZW50ZWQgYnkgYW4gZXZlbnQgKi8KKy0gICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50OyAvKiBudW1iZXIgb2Ygd2FpdGluZyB0aHJlYWRzICovCistICAgICAgICAgIHVuc2lnbmVkIGludCBhbGxvYzsgLyogbGVuZ3RoIG9mIGFsbG9jYXRlZCBhcnJheSAqLworLSAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OyAvKiBpbmRleCBvZiBmaXJzdCB3YWl0aW5nIHRocmVhZCBpbiBhcnJheSAqLworLSAgICAgICAgfQorLSAgICAgICAgZ2xfd2FpdHF1ZXVlX3Q7CistdHlwZWRlZiBzdHJ1Y3QKKy0gICAgICAgIHsKKy0gICAgICAgICAgZ2xfc3BpbmxvY2tfdCBndWFyZDsgLyogcHJvdGVjdHMgdGhlIGluaXRpYWxpemF0aW9uICovCistICAgICAgICAgIENSSVRJQ0FMX1NFQ1RJT04gbG9jazsgLyogcHJvdGVjdHMgdGhlIHJlbWFpbmluZyBmaWVsZHMgKi8KKy0gICAgICAgICAgZ2xfd2FpdHF1ZXVlX3Qgd2FpdGluZ19yZWFkZXJzOyAvKiB3YWl0aW5nIHJlYWRlcnMgKi8KKy0gICAgICAgICAgZ2xfd2FpdHF1ZXVlX3Qgd2FpdGluZ193cml0ZXJzOyAvKiB3YWl0aW5nIHdyaXRlcnMgKi8KKy0gICAgICAgICAgaW50IHJ1bmNvdW50OyAvKiBudW1iZXIgb2YgcmVhZGVycyBydW5uaW5nLCBvciAtMSB3aGVuIGEgd3JpdGVyIHJ1bnMgKi8KKy0gICAgICAgIH0KKy0gICAgICAgIGdsX3J3bG9ja190OworLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBnbF9yd2xvY2tfdCBOQU1FOworLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBnbF9yd2xvY2tfdCBOQU1FID0gZ2xfcndsb2NrX2luaXRpYWxpemVyOworLSMgZGVmaW5lIGdsX3J3bG9ja19pbml0aWFsaXplciBcCistICAgIHsgeyAwLCAtMSB9IH0KKy0jIGRlZmluZSBnbF9yd2xvY2tfaW5pdChOQU1FKSBcCistICAgIGdsdGhyZWFkX3J3bG9ja19pbml0ICgmTkFNRSkKKy0jIGRlZmluZSBnbF9yd2xvY2tfcmRsb2NrKE5BTUUpIFwKKy0gICAgZ2x0aHJlYWRfcndsb2NrX3JkbG9jayAoJk5BTUUpCistIyBkZWZpbmUgZ2xfcndsb2NrX3dybG9jayhOQU1FKSBcCistICAgIGdsdGhyZWFkX3J3bG9ja193cmxvY2sgKCZOQU1FKQorLSMgZGVmaW5lIGdsX3J3bG9ja191bmxvY2soTkFNRSkgXAorLSAgICBnbHRocmVhZF9yd2xvY2tfdW5sb2NrICgmTkFNRSkKKy0jIGRlZmluZSBnbF9yd2xvY2tfZGVzdHJveShOQU1FKSBcCistICAgIGdsdGhyZWFkX3J3bG9ja19kZXN0cm95ICgmTkFNRSkKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yd2xvY2tfaW5pdCAoZ2xfcndsb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3J3bG9ja19yZGxvY2sgKGdsX3J3bG9ja190ICpsb2NrKTsKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrIChnbF9yd2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcndsb2NrX3VubG9jayAoZ2xfcndsb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3J3bG9ja19kZXN0cm95IChnbF9yd2xvY2tfdCAqbG9jayk7CistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistLyogVGhlIFdpbjMyIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IENSSVRJQ0FMX1NFQ1RJT04gYWxyZWFkeSBpbXBsZW1lbnRzIGEKKy0gICByZWN1cnNpdmUgbG9jay4gIEJ1dCB3ZSBuZWVkIG5vdCByZWx5IG9uIGl0OiBJdCdzIGVhc3kgdG8gaW1wbGVtZW50IGEKKy0gICByZWN1cnNpdmUgbG9jayB3aXRob3V0IHRoaXMgYXNzdW1wdGlvbi4gICovCistCistdHlwZWRlZiBzdHJ1Y3QKKy0gICAgICAgIHsKKy0gICAgICAgICAgZ2xfc3BpbmxvY2tfdCBndWFyZDsgLyogcHJvdGVjdHMgdGhlIGluaXRpYWxpemF0aW9uICovCistICAgICAgICAgIERXT1JEIG93bmVyOworLSAgICAgICAgICB1bnNpZ25lZCBsb25nIGRlcHRoOworLSAgICAgICAgICBDUklUSUNBTF9TRUNUSU9OIGxvY2s7CistICAgICAgICB9CistICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja190OworLSMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZShTVE9SQUdFQ0xBU1MsIE5BTUUpIFwKKy0gICAgU1RPUkFHRUNMQVNTIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgTkFNRTsKKy0jIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBnbF9yZWN1cnNpdmVfbG9ja190IE5BTUUgPSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplcjsKKy0jIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19pbml0aWFsaXplciBcCistICAgIHsgeyAwLCAtMSB9LCAwLCAwIH0KKy0jIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19pbml0KE5BTUUpIFwKKy0gICAgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdCAoJk5BTUUpCistIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfbG9jayhOQU1FKSBcCistICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2sgKCZOQU1FKQorLSMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayhOQU1FKSBcCistICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayAoJk5BTUUpCistIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfZGVzdHJveShOQU1FKSBcCistICAgIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kgKCZOQU1FKQorLWV4dGVybiB2b2lkIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2luaXQgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2sgKGdsX3JlY3Vyc2l2ZV9sb2NrX3QgKmxvY2spOworLWV4dGVybiB2b2lkIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX3VubG9jayAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CistZXh0ZXJuIHZvaWQgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfZGVzdHJveSAoZ2xfcmVjdXJzaXZlX2xvY2tfdCAqbG9jayk7CistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfb25jZV90IGRhdGF0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistdHlwZWRlZiBzdHJ1Y3QKKy0gICAgICAgIHsKKy0gICAgICAgICAgdm9sYXRpbGUgaW50IGluaXRlZDsKKy0gICAgICAgICAgdm9sYXRpbGUgbG9uZyBzdGFydGVkOworLSAgICAgICAgICBDUklUSUNBTF9TRUNUSU9OIGxvY2s7CistICAgICAgICB9CistICAgICAgICBnbF9vbmNlX3Q7CistIyBkZWZpbmUgZ2xfb25jZV9kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBnbF9vbmNlX3QgTkFNRSA9IHsgLTEsIC0xIH07CistIyBkZWZpbmUgZ2xfb25jZShOQU1FLCBJTklURlVOQ1RJT04pIFwKKy0gICAgZ2x0aHJlYWRfb25jZSAoJk5BTUUsIElOSVRGVU5DVElPTikKKy1leHRlcm4gdm9pZCBnbHRocmVhZF9vbmNlIChnbF9vbmNlX3QgKm9uY2VfY29udHJvbCwgdm9pZCAoKmluaXRmdW5jdGlvbikgKHZvaWQpKTsKKy0KKy0jIGlmZGVmIF9fY3BsdXNwbHVzCistfQorLSMgZW5kaWYKKy0KKy0jZW5kaWYKKy0KKy0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCistCistI2lmICEoVVNFX1BPU0lYX1RIUkVBRFMgfHwgVVNFX1BUSF9USFJFQURTIHx8IFVTRV9TT0xBUklTX1RIUkVBRFMgfHwgVVNFX1dJTjMyX1RIUkVBRFMpCistCistLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aHJlYWRzIGFyZSBub3Qgc3VwcG9ydGVkLiAgKi8KKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIGludCBnbF9sb2NrX3Q7CistIyBkZWZpbmUgZ2xfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKQorLSMgZGVmaW5lIGdsX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkKFNUT1JBR0VDTEFTUywgTkFNRSkKKy0jIGRlZmluZSBnbF9sb2NrX2luaXQoTkFNRSkKKy0jIGRlZmluZSBnbF9sb2NrX2xvY2soTkFNRSkKKy0jIGRlZmluZSBnbF9sb2NrX3VubG9jayhOQU1FKQorLQorLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xfcndsb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLQorLXR5cGVkZWYgaW50IGdsX3J3bG9ja190OworLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKQorLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoU1RPUkFHRUNMQVNTLCBOQU1FKQorLSMgZGVmaW5lIGdsX3J3bG9ja19pbml0KE5BTUUpCistIyBkZWZpbmUgZ2xfcndsb2NrX3JkbG9jayhOQU1FKQorLSMgZGVmaW5lIGdsX3J3bG9ja193cmxvY2soTkFNRSkKKy0jIGRlZmluZSBnbF9yd2xvY2tfdW5sb2NrKE5BTUUpCistCistLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsX3JlY3Vyc2l2ZV9sb2NrX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCistCistdHlwZWRlZiBpbnQgZ2xfcmVjdXJzaXZlX2xvY2tfdDsKKy0jIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKQorLSMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZV9pbml0aWFsaXplZChTVE9SQUdFQ0xBU1MsIE5BTUUpCistIyBkZWZpbmUgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdChOQU1FKQorLSMgZGVmaW5lIGdsX3JlY3Vyc2l2ZV9sb2NrX2xvY2soTkFNRSkKKy0jIGRlZmluZSBnbF9yZWN1cnNpdmVfbG9ja191bmxvY2soTkFNRSkKKy0KKy0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbF9vbmNlX3QgZGF0YXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy0KKy10eXBlZGVmIGludCBnbF9vbmNlX3Q7CistIyBkZWZpbmUgZ2xfb25jZV9kZWZpbmUoU1RPUkFHRUNMQVNTLCBOQU1FKSBcCistICAgIFNUT1JBR0VDTEFTUyBnbF9vbmNlX3QgTkFNRSA9IDA7CistIyBkZWZpbmUgZ2xfb25jZShOQU1FLCBJTklURlVOQ1RJT04pIFwKKy0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIGlmIChOQU1FID09IDApICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICBOQU1FID0gfiAwOyAgICAgIFwKKy0gICAgICAgICAgICBJTklURlVOQ1RJT04gKCk7IFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgd2hpbGUgKDApCistCistI2VuZGlmCistCistLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLQorLSNlbmRpZiAvKiBfTE9DS19IICovCistLS0gYS9pbnRsL2xvZy5jCisrKysgL2Rldi9udWxsCitAQCAtMSwxMTYgKzAsMCBAQAorLS8qIExvZyBmaWxlIG91dHB1dC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0vKiBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistCistLyogSGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorLSNlbHNlCistIyBpbmNsdWRlICJsb2NrLmgiCistI2VuZGlmCistCistLyogUHJpbnQgYW4gQVNDSUkgc3RyaW5nIHdpdGggcXVvdGVzIGFuZCBlc2NhcGUgc2VxdWVuY2VzIHdoZXJlIG5lZWRlZC4gICovCistc3RhdGljIHZvaWQKKy1wcmludF9lc2NhcGVkIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnN0cikKKy17CistICBwdXRjICgnIicsIHN0cmVhbSk7CistICBmb3IgKDsgKnN0ciAhPSAnXDAnOyBzdHIrKykKKy0gICAgaWYgKCpzdHIgPT0gJ1xuJykKKy0gICAgICB7CistCWZwdXRzICgiXFxuXCIiLCBzdHJlYW0pOworLQlpZiAoc3RyWzFdID09ICdcMCcpCistCSAgcmV0dXJuOworLQlmcHV0cyAoIlxuXCIiLCBzdHJlYW0pOworLSAgICAgIH0KKy0gICAgZWxzZQorLSAgICAgIHsKKy0JaWYgKCpzdHIgPT0gJyInIHx8ICpzdHIgPT0gJ1xcJykKKy0JICBwdXRjICgnXFwnLCBzdHJlYW0pOworLQlwdXRjICgqc3RyLCBzdHJlYW0pOworLSAgICAgIH0KKy0gIHB1dGMgKCciJywgc3RyZWFtKTsKKy19CistCistc3RhdGljIGNoYXIgKmxhc3RfbG9nZmlsZW5hbWUgPSBOVUxMOworLXN0YXRpYyBGSUxFICpsYXN0X2xvZ2ZpbGUgPSBOVUxMOworLV9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKQorLQorLXN0YXRpYyBpbmxpbmUgdm9pZAorLV9ubF9sb2dfdW50cmFuc2xhdGVkX2xvY2tlZCAoY29uc3QgY2hhciAqbG9nZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgaW50IHBsdXJhbCkKKy17CistICBGSUxFICpsb2dmaWxlOworLQorLSAgLyogQ2FuIHdlIHJldXNlIHRoZSBsYXN0IG9wZW5lZCBsb2dmaWxlPyAgKi8KKy0gIGlmIChsYXN0X2xvZ2ZpbGVuYW1lID09IE5VTEwgfHwgc3RyY21wIChsb2dmaWxlbmFtZSwgbGFzdF9sb2dmaWxlbmFtZSkgIT0gMCkKKy0gICAgeworLSAgICAgIC8qIENsb3NlIHRoZSBsYXN0IHVzZWQgbG9nZmlsZS4gICovCistICAgICAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgIT0gTlVMTCkKKy0JeworLQkgIGlmIChsYXN0X2xvZ2ZpbGUgIT0gTlVMTCkKKy0JICAgIHsKKy0JICAgICAgZmNsb3NlIChsYXN0X2xvZ2ZpbGUpOworLQkgICAgICBsYXN0X2xvZ2ZpbGUgPSBOVUxMOworLQkgICAgfQorLQkgIGZyZWUgKGxhc3RfbG9nZmlsZW5hbWUpOworLQkgIGxhc3RfbG9nZmlsZW5hbWUgPSBOVUxMOworLQl9CistICAgICAgLyogT3BlbiB0aGUgbG9nZmlsZS4gICovCistICAgICAgbGFzdF9sb2dmaWxlbmFtZSA9IChjaGFyICopIG1hbGxvYyAoc3RybGVuIChsb2dmaWxlbmFtZSkgKyAxKTsKKy0gICAgICBpZiAobGFzdF9sb2dmaWxlbmFtZSA9PSBOVUxMKQorLQlyZXR1cm47CistICAgICAgc3RyY3B5IChsYXN0X2xvZ2ZpbGVuYW1lLCBsb2dmaWxlbmFtZSk7CistICAgICAgbGFzdF9sb2dmaWxlID0gZm9wZW4gKGxvZ2ZpbGVuYW1lLCAiYSIpOworLSAgICAgIGlmIChsYXN0X2xvZ2ZpbGUgPT0gTlVMTCkKKy0JcmV0dXJuOworLSAgICB9CistICBsb2dmaWxlID0gbGFzdF9sb2dmaWxlOworLQorLSAgZnByaW50ZiAobG9nZmlsZSwgImRvbWFpbiAiKTsKKy0gIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIGRvbWFpbm5hbWUpOworLSAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnaWQgIik7CistICBwcmludF9lc2NhcGVkIChsb2dmaWxlLCBtc2dpZDEpOworLSAgaWYgKHBsdXJhbCkKKy0gICAgeworLSAgICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ2lkX3BsdXJhbCAiKTsKKy0gICAgICBwcmludF9lc2NhcGVkIChsb2dmaWxlLCBtc2dpZDIpOworLSAgICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ3N0clswXSBcIlwiXG4iKTsKKy0gICAgfQorLSAgZWxzZQorLSAgICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dzdHIgXCJcIlxuIik7CistICBwdXRjICgnXG4nLCBsb2dmaWxlKTsKKy19CistCistLyogQWRkIHRvIHRoZSBsb2cgZmlsZSBhbiBlbnRyeSBkZW5vdGluZyBhIGZhaWxlZCB0cmFuc2xhdGlvbi4gICovCistdm9pZAorLV9ubF9sb2dfdW50cmFuc2xhdGVkIChjb25zdCBjaGFyICpsb2dmaWxlbmFtZSwgY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCSAgICAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCBpbnQgcGx1cmFsKQorLXsKKy0gIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworLSAgX25sX2xvZ191bnRyYW5zbGF0ZWRfbG9ja2VkIChsb2dmaWxlbmFtZSwgZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIHBsdXJhbCk7CistICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworLX0KKy0tLSBhL2ludGwvbmdldHRleHQuYworKysrIC9kZXYvbnVsbAorQEAgLTEsNjUgKzAsMCBAQAorLS8qIEltcGxlbWVudGF0aW9uIG9mIG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpZmRlZiBfTElCQworLSMgZGVmaW5lIF9fbmVlZF9OVUxMCistIyBpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKy0jaWZkZWYgX0xJQkMKKy0jIGluY2x1ZGUgPGxpYmludGwuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSAibGliZ251aW50bC5oIgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxsb2NhbGUuaD4KKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorLSAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKy0gICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKy0gICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworLSNpZmRlZiBfTElCQworLSMgZGVmaW5lIE5HRVRURVhUIF9fbmdldHRleHQKKy0jIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorLSNlbHNlCistIyBkZWZpbmUgTkdFVFRFWFQgbGliaW50bF9uZ2V0dGV4dAorLSMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CistI2VuZGlmCistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKy0gICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorLSAgIHRleHQpLiAgKi8KKy1jaGFyICoKKy1OR0VUVEVYVCAoY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisteworLSAgcmV0dXJuIERDTkdFVFRFWFQgKE5VTEwsIG1zZ2lkMSwgbXNnaWQyLCBuLCBMQ19NRVNTQUdFUyk7CistfQorLQorLSNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworLXdlYWtfYWxpYXMgKF9fbmdldHRleHQsIG5nZXR0ZXh0KTsKKy0jZW5kaWYKKy0tLSBhL2ludGwvb3MyY29tcGF0LmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDk4ICswLDAgQEAKKy0vKiBPUy8yIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zLgorLSAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistI2RlZmluZSBPUzJfQVdBUkUKKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSNpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy0KKy0vKiBBIHZlcnNpb24gb2YgZ2V0ZW52KCkgdGhhdCB3b3JrcyBmcm9tIERMTHMgKi8KKy1leHRlcm4gdW5zaWduZWQgbG9uZyBEb3NTY2FuRW52IChjb25zdCB1bnNpZ25lZCBjaGFyICpwc3pOYW1lLCB1bnNpZ25lZCBjaGFyICoqcHBzelZhbHVlKTsKKy0KKy1jaGFyICoKKy1fbmxfZ2V0ZW52IChjb25zdCBjaGFyICpuYW1lKQorLXsKKy0gIHVuc2lnbmVkIGNoYXIgKnZhbHVlOworLSAgaWYgKERvc1NjYW5FbnYgKG5hbWUsICZ2YWx1ZSkpCistICAgIHJldHVybiBOVUxMOworLSAgZWxzZQorLSAgICByZXR1cm4gdmFsdWU7CistfQorLQorLS8qIEEgZml4ZWQgc2l6ZSBidWZmZXIuICAqLworLWNoYXIgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWVbTUFYUEFUSExFTisxXTsKKy0KKy1jaGFyICpfbmxvczJfbGliZGlyID0gTlVMTDsKKy1jaGFyICpfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gTlVMTDsKKy1jaGFyICpfbmxvczJfbG9jYWxlZGlyID0gTlVMTDsKKy0KKy1zdGF0aWMgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSB2b2lkCistbmxvczJfaW5pdGlhbGl6ZSAoKQorLXsKKy0gIGNoYXIgKnJvb3QgPSBnZXRlbnYgKCJVTklYUk9PVCIpOworLSAgY2hhciAqZ251bG9jYWxlZGlyID0gZ2V0ZW52ICgiR05VTE9DQUxFRElSIik7CistCistICBfbmxvczJfbGliZGlyID0gZ251bG9jYWxlZGlyOworLSAgaWYgKCFfbmxvczJfbGliZGlyKQorLSAgICB7CistICAgICAgaWYgKHJvb3QpCistICAgICAgICB7CistICAgICAgICAgIHNpemVfdCBzbCA9IHN0cmxlbiAocm9vdCk7CistICAgICAgICAgIF9ubG9zMl9saWJkaXIgPSAoY2hhciAqKSBtYWxsb2MgKHNsICsgc3RybGVuIChMSUJESVIpICsgMSk7CistICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xpYmRpciwgcm9vdCwgc2wpOworLSAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9saWJkaXIgKyBzbCwgTElCRElSLCBzdHJsZW4gKExJQkRJUikgKyAxKTsKKy0gICAgICAgIH0KKy0gICAgICBlbHNlCistICAgICAgICBfbmxvczJfbGliZGlyID0gTElCRElSOworLSAgICB9CistCistICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gZ251bG9jYWxlZGlyOworLSAgaWYgKCFfbmxvczJfbG9jYWxlYWxpYXNwYXRoKQorLSAgICB7CistICAgICAgaWYgKHJvb3QpCistICAgICAgICB7CistICAgICAgICAgIHNpemVfdCBzbCA9IHN0cmxlbiAocm9vdCk7CistICAgICAgICAgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSAoY2hhciAqKSBtYWxsb2MgKHNsICsgc3RybGVuIChMT0NBTEVfQUxJQVNfUEFUSCkgKyAxKTsKKy0gICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlYWxpYXNwYXRoLCByb290LCBzbCk7CistICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCArIHNsLCBMT0NBTEVfQUxJQVNfUEFUSCwgc3RybGVuIChMT0NBTEVfQUxJQVNfUEFUSCkgKyAxKTsKKy0gICAgICAgIH0KKy0gICAgIGVsc2UKKy0gICAgICAgIF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKy0gICAgfQorLQorLSAgX25sb3MyX2xvY2FsZWRpciA9IGdudWxvY2FsZWRpcjsKKy0gIGlmICghX25sb3MyX2xvY2FsZWRpcikKKy0gICAgeworLSAgICAgIGlmIChyb290KQorLSAgICAgICAgeworLSAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworLSAgICAgICAgICBfbmxvczJfbG9jYWxlZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworLSAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9sb2NhbGVkaXIsIHJvb3QsIHNsKTsKKy0gICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlZGlyICsgc2wsIExPQ0FMRURJUiwgc3RybGVuIChMT0NBTEVESVIpICsgMSk7CistICAgICAgICB9CistICAgICAgZWxzZQorLSAgICAgICAgX25sb3MyX2xvY2FsZWRpciA9IExPQ0FMRURJUjsKKy0gICAgfQorLQorLSAgaWYgKHN0cmxlbiAoX25sb3MyX2xvY2FsZWRpcikgPD0gTUFYUEFUSExFTikKKy0gICAgc3RyY3B5IChsaWJpbnRsX25sX2RlZmF1bHRfZGlybmFtZSwgX25sb3MyX2xvY2FsZWRpcik7CistfQorLS0tIGEvaW50bC9vczJjb21wYXQuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsNDYgKzAsMCBAQAorLS8qIE9TLzIgY29tcGF0aWJpbGl0eSBkZWZpbmVzLgorLSAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBmcm9tIGNvbmZpZy5oCistICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0vKiBXaGVuIGluY2x1ZGVkIGZyb20gb3MyY29tcGF0Lmggd2UgbmVlZCBhbGwgdGhlIG9yaWdpbmFsIGRlZmluaXRpb25zICovCistI2lmbmRlZiBPUzJfQVdBUkUKKy0KKy0jdW5kZWYgTElCRElSCistI2RlZmluZSBMSUJESVIJCQlfbmxvczJfbGliZGlyCistZXh0ZXJuIGNoYXIgKl9ubG9zMl9saWJkaXI7CistCistI3VuZGVmIExPQ0FMRURJUgorLSNkZWZpbmUgTE9DQUxFRElSCQlfbmxvczJfbG9jYWxlZGlyCistZXh0ZXJuIGNoYXIgKl9ubG9zMl9sb2NhbGVkaXI7CistCistI3VuZGVmIExPQ0FMRV9BTElBU19QQVRICistI2RlZmluZSBMT0NBTEVfQUxJQVNfUEFUSAlfbmxvczJfbG9jYWxlYWxpYXNwYXRoCistZXh0ZXJuIGNoYXIgKl9ubG9zMl9sb2NhbGVhbGlhc3BhdGg7CistCistI2VuZGlmCistCistI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorLSNkZWZpbmUgSEFWRV9TVFJDQVNFQ01QIDEKKy0jZGVmaW5lIHN0cmNhc2VjbXAgc3RyaWNtcAorLSNkZWZpbmUgc3RybmNhc2VjbXAgc3RybmljbXAKKy0KKy0vKiBXZSBoYXZlIG91ciBvd24gZ2V0ZW52KCkgd2hpY2ggd29ya3MgZXZlbiBpZiBsaWJyYXJ5IGlzIGNvbXBpbGVkIGFzIERMTCAqLworLSNkZWZpbmUgZ2V0ZW52IF9ubF9nZXRlbnYKKy0KKy0vKiBPbGRlciB2ZXJzaW9ucyBvZiBnZXR0ZXh0IHVzZWQgLTEgYXMgdGhlIHZhbHVlIG9mIExDX01FU1NBR0VTICovCistI2RlZmluZSBMQ19NRVNTQUdFU19DT01QQVQgKC0xKQorLS0tIGEvaW50bC9vc2RlcC5jCisrKysgL2Rldi9udWxsCitAQCAtMSwyNiArMCwwIEBACistLyogT1MgZGVwZW5kZW50IHBhcnRzIG9mIGxpYmludGwuCistICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWYgZGVmaW5lZCBfX0NZR1dJTl9fCistIyBpbmNsdWRlICJpbnRsLWV4cG9ydHMuYyIKKy0jZWxpZiBkZWZpbmVkIF9fRU1YX18KKy0jIGluY2x1ZGUgIm9zMmNvbXBhdC5jIgorLSNlbHNlCistLyogQXZvaWQgQUlYIGNvbXBpbGVyIHdhcm5pbmcuICAqLworLXR5cGVkZWYgaW50IGR1bW15OworLSNlbmRpZgorLS0tIGEvaW50bC9wbHVyYWwtZXhwLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDE1NSArMCwwIEBACistLyogRXhwcmVzc2lvbiBwYXJzaW5nIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEsIDIwMDMsIDIwMDUtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAyMDAwLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxjdHlwZS5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistCistI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKy0KKy0jaWYgKGRlZmluZWQgX19HTlVDX18gJiYgIShfX0FQUExFX0NDX18gPiAxKSAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cykgXAorLSAgICB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKy0KKy0vKiBUaGVzZSBzdHJ1Y3RzIGFyZSB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiBmb3IgdGhlIGdlcm1hbmljIHBsdXJhbAorLSAgIGZvcm0gZGV0ZXJtaW5hdGlvbi4gIEl0IHJlcHJlc2VudHMgdGhlIGV4cHJlc3Npb24gICJuICE9IDEiLiAgKi8KKy1zdGF0aWMgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gcGx2YXIgPQorLXsKKy0gIC5uYXJncyA9IDAsCistICAub3BlcmF0aW9uID0gdmFyLAorLX07Cistc3RhdGljIGNvbnN0IHN0cnVjdCBleHByZXNzaW9uIHBsb25lID0KKy17CistICAubmFyZ3MgPSAwLAorLSAgLm9wZXJhdGlvbiA9IG51bSwKKy0gIC52YWwgPQorLSAgeworLSAgICAubnVtID0gMQorLSAgfQorLX07Cistc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMID0KKy17CistICAubmFyZ3MgPSAyLAorLSAgLm9wZXJhdGlvbiA9IG5vdF9lcXVhbCwKKy0gIC52YWwgPQorLSAgeworLSAgICAuYXJncyA9CistICAgIHsKKy0gICAgICBbMF0gPSAoc3RydWN0IGV4cHJlc3Npb24gKikgJnBsdmFyLAorLSAgICAgIFsxXSA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSAmcGxvbmUKKy0gICAgfQorLSAgfQorLX07CistCistIyBkZWZpbmUgSU5JVF9HRVJNQU5JQ19QTFVSQUwoKQorLQorLSNlbHNlCistCistLyogRm9yIGNvbXBpbGVycyB3aXRob3V0IHN1cHBvcnQgZm9yIElTTyBDIDk5IHN0cnVjdC91bmlvbiBpbml0aWFsaXplcnM6CistICAgSW5pdGlhbGl6YXRpb24gYXQgcnVuLXRpbWUuICAqLworLQorLXN0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiBwbHZhcjsKKy1zdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGxvbmU7Cistc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMOworLQorLXN0YXRpYyB2b2lkCistaW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKy17CistICBpZiAocGxvbmUudmFsLm51bSA9PSAwKQorLSAgICB7CistICAgICAgcGx2YXIubmFyZ3MgPSAwOworLSAgICAgIHBsdmFyLm9wZXJhdGlvbiA9IHZhcjsKKy0KKy0gICAgICBwbG9uZS5uYXJncyA9IDA7CistICAgICAgcGxvbmUub3BlcmF0aW9uID0gbnVtOworLSAgICAgIHBsb25lLnZhbC5udW0gPSAxOworLQorLSAgICAgIEdFUk1BTklDX1BMVVJBTC5uYXJncyA9IDI7CistICAgICAgR0VSTUFOSUNfUExVUkFMLm9wZXJhdGlvbiA9IG5vdF9lcXVhbDsKKy0gICAgICBHRVJNQU5JQ19QTFVSQUwudmFsLmFyZ3NbMF0gPSAmcGx2YXI7CistICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzFdID0gJnBsb25lOworLSAgICB9CistfQorLQorLSMgZGVmaW5lIElOSVRfR0VSTUFOSUNfUExVUkFMKCkgaW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKy0KKy0jZW5kaWYKKy0KKy12b2lkCistaW50ZXJuYWxfZnVuY3Rpb24KKy1FWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksCistCQkJICAgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gKipwbHVyYWxwLAorLQkJCSAgIHVuc2lnbmVkIGxvbmcgaW50ICpucGx1cmFsc3ApCisteworLSAgaWYgKG51bGxlbnRyeSAhPSBOVUxMKQorLSAgICB7CistICAgICAgY29uc3QgY2hhciAqcGx1cmFsOworLSAgICAgIGNvbnN0IGNoYXIgKm5wbHVyYWxzOworLQorLSAgICAgIHBsdXJhbCA9IHN0cnN0ciAobnVsbGVudHJ5LCAicGx1cmFsPSIpOworLSAgICAgIG5wbHVyYWxzID0gc3Ryc3RyIChudWxsZW50cnksICJucGx1cmFscz0iKTsKKy0gICAgICBpZiAocGx1cmFsID09IE5VTEwgfHwgbnBsdXJhbHMgPT0gTlVMTCkKKy0JZ290byBub19wbHVyYWw7CistICAgICAgZWxzZQorLQl7CistCSAgY2hhciAqZW5kcDsKKy0JICB1bnNpZ25lZCBsb25nIGludCBuOworLQkgIHN0cnVjdCBwYXJzZV9hcmdzIGFyZ3M7CistCistCSAgLyogRmlyc3QgZ2V0IHRoZSBudW1iZXIuICAqLworLQkgIG5wbHVyYWxzICs9IDk7CistCSAgd2hpbGUgKCpucGx1cmFscyAhPSAnXDAnICYmIGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSAqbnBsdXJhbHMpKQorLQkgICAgKytucGx1cmFsczsKKy0JICBpZiAoISgqbnBsdXJhbHMgPj0gJzAnICYmICpucGx1cmFscyA8PSAnOScpKQorLQkgICAgZ290byBub19wbHVyYWw7CistI2lmIGRlZmluZWQgSEFWRV9TVFJUT1VMIHx8IGRlZmluZWQgX0xJQkMKKy0JICBuID0gc3RydG91bCAobnBsdXJhbHMsICZlbmRwLCAxMCk7CistI2Vsc2UKKy0JICBmb3IgKGVuZHAgPSBucGx1cmFscywgbiA9IDA7ICplbmRwID49ICcwJyAmJiAqZW5kcCA8PSAnOSc7IGVuZHArKykKKy0JICAgIG4gPSBuICogMTAgKyAoKmVuZHAgLSAnMCcpOworLSNlbmRpZgorLQkgIGlmIChucGx1cmFscyA9PSBlbmRwKQorLQkgICAgZ290byBub19wbHVyYWw7CistCSAgKm5wbHVyYWxzcCA9IG47CistCistCSAgLyogRHVlIHRvIHRoZSByZXN0cmljdGlvbnMgYmlzb24gaW1wb3NlcyBvbnRvIHRoZSBpbnRlcmZhY2Ugb2YgdGhlCistCSAgICAgc2Nhbm5lciBmdW5jdGlvbiB3ZSBoYXZlIHRvIHB1dCB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgcmVzdWx0CistCSAgICAgcGFzc2VkIHVwIGZyb20gdGhlIHBhcnNlciBpbnRvIHRoZSBzYW1lIHN0cnVjdHVyZSB3aGljaCBhZGRyZXNzCistCSAgICAgaXMgcGFzc2VkIGRvd24gdG8gdGhlIHBhcnNlci4gICovCistCSAgcGx1cmFsICs9IDc7CistCSAgYXJncy5jcCA9IHBsdXJhbDsKKy0JICBpZiAoUExVUkFMX1BBUlNFICgmYXJncykgIT0gMCkKKy0JICAgIGdvdG8gbm9fcGx1cmFsOworLQkgICpwbHVyYWxwID0gYXJncy5yZXM7CistCX0KKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgLyogQnkgZGVmYXVsdCB3ZSBhcmUgdXNpbmcgdGhlIEdlcm1hbmljIGZvcm06IHNpbmd1bGFyIGZvcm0gb25seQorLSAgICAgICAgIGZvciBgb25lJywgdGhlIHBsdXJhbCBmb3JtIG90aGVyd2lzZS4gIFllcywgdGhpcyBpcyBhbHNvIHdoYXQKKy0gICAgICAgICBFbmdsaXNoIGlzIHVzaW5nIHNpbmNlIEVuZ2xpc2ggaXMgYSBHZXJtYW5pYyBsYW5ndWFnZS4gICovCistICAgIG5vX3BsdXJhbDoKKy0gICAgICBJTklUX0dFUk1BTklDX1BMVVJBTCAoKTsKKy0gICAgICAqcGx1cmFscCA9ICZHRVJNQU5JQ19QTFVSQUw7CistICAgICAgKm5wbHVyYWxzcCA9IDI7CistICAgIH0KKy19CistLS0gYS9pbnRsL3BsdXJhbC1leHAuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsMTI5ICswLDAgQEAKKy0vKiBFeHByZXNzaW9uIHBhcnNpbmcgYW5kIGV2YWx1YXRpb24gZm9yIHBsdXJhbCBmb3JtIHNlbGVjdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMywgMjAwNS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9QTFVSQUxfRVhQX0gKKy0jZGVmaW5lIF9QTFVSQUxfRVhQX0gKKy0KKy0jaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCistIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKy0jZW5kaWYKKy0KKy0jaWZuZGVmIGF0dHJpYnV0ZV9oaWRkZW4KKy0jIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCistI2VuZGlmCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistCistZW51bSBleHByZXNzaW9uX29wZXJhdG9yCisteworLSAgLyogV2l0aG91dCBhcmd1bWVudHM6ICAqLworLSAgdmFyLAkJCQkvKiBUaGUgdmFyaWFibGUgIm4iLiAgKi8KKy0gIG51bSwJCQkJLyogRGVjaW1hbCBudW1iZXIuICAqLworLSAgLyogVW5hcnkgb3BlcmF0b3JzOiAgKi8KKy0gIGxub3QsCQkJCS8qIExvZ2ljYWwgTk9ULiAgKi8KKy0gIC8qIEJpbmFyeSBvcGVyYXRvcnM6ICAqLworLSAgbXVsdCwJCQkJLyogTXVsdGlwbGljYXRpb24uICAqLworLSAgZGl2aWRlLAkJCS8qIERpdmlzaW9uLiAgKi8KKy0gIG1vZHVsZSwJCQkvKiBNb2R1bG8gb3BlcmF0aW9uLiAgKi8KKy0gIHBsdXMsCQkJCS8qIEFkZGl0aW9uLiAgKi8KKy0gIG1pbnVzLAkJCS8qIFN1YnRyYWN0aW9uLiAgKi8KKy0gIGxlc3NfdGhhbiwJCQkvKiBDb21wYXJpc29uLiAgKi8KKy0gIGdyZWF0ZXJfdGhhbiwJCQkvKiBDb21wYXJpc29uLiAgKi8KKy0gIGxlc3Nfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKy0gIGdyZWF0ZXJfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKy0gIGVxdWFsLAkJCS8qIENvbXBhcmlzb24gZm9yIGVxdWFsaXR5LiAgKi8KKy0gIG5vdF9lcXVhbCwJCQkvKiBDb21wYXJpc29uIGZvciBpbmVxdWFsaXR5LiAgKi8KKy0gIGxhbmQsCQkJCS8qIExvZ2ljYWwgQU5ELiAgKi8KKy0gIGxvciwJCQkJLyogTG9naWNhbCBPUi4gICovCistICAvKiBUZXJuYXJ5IG9wZXJhdG9yczogICovCistICBxbW9wCQkJCS8qIFF1ZXN0aW9uIG1hcmsgb3BlcmF0b3IuICAqLworLX07CistCistLyogVGhpcyBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGV4cHJlc3Npb25zIHRvIGRldGVybWluZSB0aGUKKy0gICBwbHVyYWwgZm9ybS4gICovCistc3RydWN0IGV4cHJlc3Npb24KKy17CistICBpbnQgbmFyZ3M7CQkJLyogTnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCistICBlbnVtIGV4cHJlc3Npb25fb3BlcmF0b3Igb3BlcmF0aW9uOworLSAgdW5pb24KKy0gIHsKKy0gICAgdW5zaWduZWQgbG9uZyBpbnQgbnVtOwkvKiBOdW1iZXIgdmFsdWUgZm9yIGBudW0nLiAgKi8KKy0gICAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbM107CS8qIFVwIHRvIHRocmVlIGFyZ3VtZW50cy4gICovCistICB9IHZhbDsKKy19OworLQorLS8qIFRoaXMgaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRvIHBhc3MgaW5mb3JtYXRpb24gdG8gdGhlIHBhcnNlciBhbmQgZ2V0CistICAgdGhlIHJlc3VsdCBpbiBhIHRocmVhZC1zYWZlIHdheS4gICovCistc3RydWN0IHBhcnNlX2FyZ3MKKy17CistICBjb25zdCBjaGFyICpjcDsKKy0gIHN0cnVjdCBleHByZXNzaW9uICpyZXM7CistfTsKKy0KKy0KKy0vKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGlzIHNvdXJjZSBjb2RlIGlzIHVzZWQKKy0gICAxLiBpbiB0aGUgR05VIEMgTGlicmFyeSBsaWJyYXJ5LAorLSAgIDIuIGluIHRoZSBHTlUgbGliaW50bCBsaWJyYXJ5LAorLSAgIDMuIGluIHRoZSBHTlUgZ2V0dGV4dCB0b29scy4KKy0gICBUaGUgZnVuY3Rpb24gbmFtZXMgaW4gZWFjaCBzaXR1YXRpb24gbXVzdCBiZSBkaWZmZXJlbnQsIHRvIGFsbG93IGZvcgorLSAgIGJpbmFyeSBpbmNvbXBhdGlibGUgY2hhbmdlcyBpbiAnc3RydWN0IGV4cHJlc3Npb24nLiAgRnVydGhlcm1vcmUsCistICAgMS4gaW4gdGhlIEdOVSBDIExpYnJhcnkgbGlicmFyeSwgdGhlIG5hbWVzIGhhdmUgYSBfXyBwcmVmaXgsCistICAgMi4rMy4gaW4gdGhlIEdOVSBsaWJpbnRsIGxpYnJhcnkgYW5kIGluIHRoZSBHTlUgZ2V0dGV4dCB0b29scywgdGhlIG5hbWVzCistICAgICAgICAgbXVzdCBmb2xsb3cgQU5TSSBDIGFuZCBub3Qgc3RhcnQgd2l0aCBfXy4KKy0gICBTbyB3ZSBoYXZlIHRvIGRpc3Rpbmd1aXNoIHRoZSB0aHJlZSBjYXNlcy4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIF9fZ2V0dGV4dF9mcmVlX2V4cAorLSMgZGVmaW5lIFBMVVJBTF9QQVJTRSBfX2dldHRleHRwYXJzZQorLSMgZGVmaW5lIEdFUk1BTklDX1BMVVJBTCBfX2dldHRleHRfZ2VybWFuaWNfcGx1cmFsCistIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBfX2dldHRleHRfZXh0cmFjdF9wbHVyYWwKKy0jZWxpZiBkZWZpbmVkIChJTl9MSUJJTlRMKQorLSMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBsaWJpbnRsX2dldHRleHRfZnJlZV9leHAKKy0jIGRlZmluZSBQTFVSQUxfUEFSU0UgbGliaW50bF9nZXR0ZXh0cGFyc2UKKy0jIGRlZmluZSBHRVJNQU5JQ19QTFVSQUwgbGliaW50bF9nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbAorLSMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gbGliaW50bF9nZXR0ZXh0X2V4dHJhY3RfcGx1cmFsCistI2Vsc2UKKy0jIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gZnJlZV9wbHVyYWxfZXhwcmVzc2lvbgorLSMgZGVmaW5lIFBMVVJBTF9QQVJTRSBwYXJzZV9wbHVyYWxfZXhwcmVzc2lvbgorLSMgZGVmaW5lIEdFUk1BTklDX1BMVVJBTCBnZXJtYW5pY19wbHVyYWwKKy0jIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIGV4dHJhY3RfcGx1cmFsX2V4cHJlc3Npb24KKy0jZW5kaWYKKy0KKy1leHRlcm4gdm9pZCBGUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCistICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKy1leHRlcm4gaW50IFBMVVJBTF9QQVJTRSAodm9pZCAqYXJnKTsKKy1leHRlcm4gc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMIGF0dHJpYnV0ZV9oaWRkZW47CistZXh0ZXJuIHZvaWQgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiAoY29uc3QgY2hhciAqbnVsbGVudHJ5LAorLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gKipwbHVyYWxwLAorLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKm5wbHVyYWxzcCkKKy0gICAgIGludGVybmFsX2Z1bmN0aW9uOworLQorLSNpZiAhZGVmaW5lZCAoX0xJQkMpICYmICFkZWZpbmVkIChJTl9MSUJJTlRMKSAmJiAhZGVmaW5lZCAoSU5fTElCR0xPQ0FMRSkKKy1leHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgcGx1cmFsX2V2YWwgKGNvbnN0IHN0cnVjdCBleHByZXNzaW9uICpwZXhwLAorLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGludCBuKTsKKy0jZW5kaWYKKy0KKy0KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistCistI2VuZGlmIC8qIF9QTFVSQUxfRVhQX0ggKi8KKy0tLSBhL2ludGwvcGx1cmFsLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDE5ODEgKzAsMCBAQAorLQorLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjQuMS4gICovCistCistLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworLSAgIAorLSAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistICAgCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0gICAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0vKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKy0gICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yaworLSAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCistICAgYXMgYSBwYXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorLSAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMKKy0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKy0gICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorLSAgIAorLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKy0gICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCistCistLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4sIGJ5CistICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCistCistLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKy0gICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKy0gICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKy0gICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworLQorLS8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCistI2RlZmluZSBZWUJJU09OIDEKKy0KKy0vKiBCaXNvbiB2ZXJzaW9uLiAgKi8KKy0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi40LjEiCistCistLyogU2tlbGV0b24gbmFtZS4gICovCistI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKKy0KKy0vKiBQdXJlIHBhcnNlcnMuICAqLworLSNkZWZpbmUgWVlQVVJFIDEKKy0KKy0vKiBQdXNoIHBhcnNlcnMuICAqLworLSNkZWZpbmUgWVlQVVNIIDAKKy0KKy0vKiBQdWxsIHBhcnNlcnMuICAqLworLSNkZWZpbmUgWVlQVUxMIDEKKy0KKy0vKiBVc2luZyBsb2NhdGlvbnMuICAqLworLSNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKy0KKy0vKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLworLSNkZWZpbmUgeXlwYXJzZSAgICAgICAgIF9fZ2V0dGV4dHBhcnNlCistI2RlZmluZSB5eWxleCAgICAgICAgICAgX19nZXR0ZXh0bGV4CistI2RlZmluZSB5eWVycm9yICAgICAgICAgX19nZXR0ZXh0ZXJyb3IKKy0jZGVmaW5lIHl5bHZhbCAgICAgICAgICBfX2dldHRleHRsdmFsCistI2RlZmluZSB5eWNoYXIgICAgICAgICAgX19nZXR0ZXh0Y2hhcgorLSNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIF9fZ2V0dGV4dGRlYnVnCistI2RlZmluZSB5eW5lcnJzICAgICAgICAgX19nZXR0ZXh0bmVycnMKKy0KKy0KKy0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKy0KKy0vKiBMaW5lIDE4OSBvZiB5YWNjLmMgICovCistI2xpbmUgMSAicGx1cmFsLnkiCistCistLyogRXhwcmVzc2lvbiBwYXJzaW5nIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEsIDIwMDMsIDIwMDUtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAyMDAwLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistLyogRm9yIGJpc29uIDwgMi4wLCB0aGUgYmlzb24gZ2VuZXJhdGVkIHBhcnNlciB1c2VzIGFsbG9jYS4gIEFJWCAzIGZvcmNlcyB1cworLSAgIHRvIHB1dCB0aGlzIGRlY2xhcmF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBUaGUgZGVjbGFyYXRpb24gaW4KKy0gICBiaXNvbidzIHNrZWxldG9uIGZpbGUgY29tZXMgdG9vIGxhdGUuICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPgorLSAgIGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZSBhcmJpdHJhcnkgc3lzdGVtIGhlYWRlcnMuCistICAgVGhpcyBjYW4gZ28gYXdheSBvbmNlIHRoZSBBTV9JTlRMX1NVQkRJUiBtYWNybyByZXF1aXJlcyBiaXNvbiA+PSAyLjAuICAqLworLSNpZiBkZWZpbmVkIF9BSVggJiYgIWRlZmluZWQgX19HTlVDX18KKy0gI3ByYWdtYSBhbGxvY2EKKy0jZW5kaWYKKy0KKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgPHN0ZGRlZi5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKy0KKy0vKiBUaGUgbWFpbiBmdW5jdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIHBhcnNlciBpcyBjYWxsZWQgX19nZXR0ZXh0cGFyc2UsCistICAgYnV0IHdlIHdhbnQgaXQgdG8gYmUgY2FsbGVkIFBMVVJBTF9QQVJTRS4gICovCistI2lmbmRlZiBfTElCQworLSMgZGVmaW5lIF9fZ2V0dGV4dHBhcnNlIFBMVVJBTF9QQVJTRQorLSNlbmRpZgorLQorLSNkZWZpbmUgWVlMRVhfUEFSQU0JJigoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+Y3AKKy0jZGVmaW5lIFlZUEFSU0VfUEFSQU0JYXJnCistCistCistLyogTGluZSAxODkgb2YgeWFjYy5jICAqLworLSNsaW5lIDEzMCAicGx1cmFsLmMiCistCistLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKy0jaWZuZGVmIFlZREVCVUcKKy0jIGRlZmluZSBZWURFQlVHIDAKKy0jZW5kaWYKKy0KKy0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KKy0jaWZkZWYgWVlFUlJPUl9WRVJCT1NFCistIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKy0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQorLSNlbHNlCistIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKy0jZW5kaWYKKy0KKy0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQorLSMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorLSNlbmRpZgorLQorLQorLS8qIFRva2Vucy4gICovCistI2lmbmRlZiBZWVRPS0VOVFlQRQorLSMgZGVmaW5lIFlZVE9LRU5UWVBFCistICAgLyogUHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVidWdnZXJzCistICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKy0gICBlbnVtIHl5dG9rZW50eXBlIHsKKy0gICAgIEVRVU9QMiA9IDI1OCwKKy0gICAgIENNUE9QMiA9IDI1OSwKKy0gICAgIEFERE9QMiA9IDI2MCwKKy0gICAgIE1VTE9QMiA9IDI2MSwKKy0gICAgIE5VTUJFUiA9IDI2MgorLSAgIH07CistI2VuZGlmCistLyogVG9rZW5zLiAgKi8KKy0jZGVmaW5lIEVRVU9QMiAyNTgKKy0jZGVmaW5lIENNUE9QMiAyNTkKKy0jZGVmaW5lIEFERE9QMiAyNjAKKy0jZGVmaW5lIE1VTE9QMiAyNjEKKy0jZGVmaW5lIE5VTUJFUiAyNjIKKy0KKy0KKy0KKy0KKy0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKKy10eXBlZGVmIHVuaW9uIFlZU1RZUEUKKy17CistCistLyogTGluZSAyMTQgb2YgeWFjYy5jICAqLworLSNsaW5lIDUxICJwbHVyYWwueSIKKy0KKy0gIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKy0gIGVudW0gZXhwcmVzc2lvbl9vcGVyYXRvciBvcDsKKy0gIHN0cnVjdCBleHByZXNzaW9uICpleHA7CistCistCistCistLyogTGluZSAyMTQgb2YgeWFjYy5jICAqLworLSNsaW5lIDE4OCAicGx1cmFsLmMiCistfSBZWVNUWVBFOworLSMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCistIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLworLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorLSNlbmRpZgorLQorLQorLS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKy0KKy0vKiBMaW5lIDI2NCBvZiB5YWNjLmMgICovCistI2xpbmUgNTcgInBsdXJhbC55IgorLQorLS8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCistc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApOworLXN0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cik7CistCistLyogQWxsb2NhdGlvbiBvZiBleHByZXNzaW9ucy4gICovCistCistc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKy1uZXdfZXhwIChpbnQgbmFyZ3MsIGVudW0gZXhwcmVzc2lvbl9vcGVyYXRvciBvcCwKKy0JIHN0cnVjdCBleHByZXNzaW9uICogY29uc3QgKmFyZ3MpCisteworLSAgaW50IGk7CistICBzdHJ1Y3QgZXhwcmVzc2lvbiAqbmV3cDsKKy0KKy0gIC8qIElmIGFueSBvZiB0aGUgYXJndW1lbnQgY291bGQgbm90IGJlIG1hbGxvYydlZCwganVzdCByZXR1cm4gTlVMTC4gICovCistICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorLSAgICBpZiAoYXJnc1tpXSA9PSBOVUxMKQorLSAgICAgIGdvdG8gZmFpbDsKKy0KKy0gIC8qIEFsbG9jYXRlIGEgbmV3IGV4cHJlc3Npb24uICAqLworLSAgbmV3cCA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKy0gIGlmIChuZXdwICE9IE5VTEwpCistICAgIHsKKy0gICAgICBuZXdwLT5uYXJncyA9IG5hcmdzOworLSAgICAgIG5ld3AtPm9wZXJhdGlvbiA9IG9wOworLSAgICAgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCistCW5ld3AtPnZhbC5hcmdzW2ldID0gYXJnc1tpXTsKKy0gICAgICByZXR1cm4gbmV3cDsKKy0gICAgfQorLQorLSBmYWlsOgorLSAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKy0gICAgRlJFRV9FWFBSRVNTSU9OIChhcmdzW2ldKTsKKy0KKy0gIHJldHVybiBOVUxMOworLX0KKy0KKy1zdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKy1uZXdfZXhwXzAgKGVudW0gZXhwcmVzc2lvbl9vcGVyYXRvciBvcCkKKy17CistICByZXR1cm4gbmV3X2V4cCAoMCwgb3AsIE5VTEwpOworLX0KKy0KKy1zdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKy1uZXdfZXhwXzEgKGVudW0gZXhwcmVzc2lvbl9vcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorLXsKKy0gIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzFdOworLQorLSAgYXJnc1swXSA9IHJpZ2h0OworLSAgcmV0dXJuIG5ld19leHAgKDEsIG9wLCBhcmdzKTsKKy19CistCistc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKy1uZXdfZXhwXzIgKGVudW0gZXhwcmVzc2lvbl9vcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmxlZnQsCistCSAgIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKKy17CistICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1syXTsKKy0KKy0gIGFyZ3NbMF0gPSBsZWZ0OworLSAgYXJnc1sxXSA9IHJpZ2h0OworLSAgcmV0dXJuIG5ld19leHAgKDIsIG9wLCBhcmdzKTsKKy19CistCistc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCistbmV3X2V4cF8zIChlbnVtIGV4cHJlc3Npb25fb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpiZXhwLAorLQkgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqdGJyYW5jaCwgc3RydWN0IGV4cHJlc3Npb24gKmZicmFuY2gpCisteworLSAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbM107CistCistICBhcmdzWzBdID0gYmV4cDsKKy0gIGFyZ3NbMV0gPSB0YnJhbmNoOworLSAgYXJnc1syXSA9IGZicmFuY2g7CistICByZXR1cm4gbmV3X2V4cCAoMywgb3AsIGFyZ3MpOworLX0KKy0KKy0KKy0KKy0vKiBMaW5lIDI2NCBvZiB5YWNjLmMgICovCistI2xpbmUgMjc4ICJwbHVyYWwuYyIKKy0KKy0jaWZkZWYgc2hvcnQKKy0jIHVuZGVmIHNob3J0CistI2VuZGlmCistCistI2lmZGVmIFlZVFlQRV9VSU5UOAorLXR5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKKy0jZWxzZQorLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CistI2VuZGlmCistCistI2lmZGVmIFlZVFlQRV9JTlQ4CistdHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKy0jZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorLXR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7CistI2Vsc2UKKy10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsKKy0jZW5kaWYKKy0KKy0jaWZkZWYgWVlUWVBFX1VJTlQxNgorLXR5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OworLSNlbHNlCistdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKy0jZW5kaWYKKy0KKy0jaWZkZWYgWVlUWVBFX0lOVDE2CistdHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworLSNlbHNlCistdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OworLSNlbmRpZgorLQorLSNpZm5kZWYgWVlTSVpFX1QKKy0jIGlmZGVmIF9fU0laRV9UWVBFX18KKy0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworLSMgZWxpZiBkZWZpbmVkIHNpemVfdAorLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKy0jIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCistICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCistIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKy0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CistIyBlbHNlCistIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQorLQorLSNpZm5kZWYgWVlfCistIyBpZiBZWUVOQUJMRV9OTFMKKy0jICBpZiBFTkFCTEVfTkxTCistIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworLSMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBtc2dpZCkKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jIGlmbmRlZiBZWV8KKy0jICBkZWZpbmUgWVlfKG1zZ2lkKSBtc2dpZAorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKy0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXworLSMgZGVmaW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQorLSNlbHNlCistIyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KKy0jZW5kaWYKKy0KKy0vKiBJZGVudGl0eSBmdW5jdGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25zLiAgKi8KKy0jaWZuZGVmIGxpbnQKKy0jIGRlZmluZSBZWUlEKG4pIChuKQorLSNlbHNlCistI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCistICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCistc3RhdGljIGludAorLVlZSUQgKGludCB5eWkpCistI2Vsc2UKKy1zdGF0aWMgaW50CistWVlJRCAoeXlpKQorLSAgICBpbnQgeXlpOworLSNlbmRpZgorLXsKKy0gIHJldHVybiB5eWk7CistfQorLSNlbmRpZgorLQorLSNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKy0KKy0vKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCistCistIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKKy0jICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKy0jICAgaWZkZWYgX19HTlVDX18KKy0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKy0jICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdfSU5DUgorLSMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKy0jICAgZWxpZiBkZWZpbmVkIF9BSVgKKy0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhCistIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKy0jICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQorLSMgICBlbHNlCistIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKy0jICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCistIyAgICAgaWZuZGVmIF9TVERMSUJfSAorLSMgICAgICBkZWZpbmUgX1NURExJQl9IIDEKKy0jICAgICBlbmRpZgorLSMgICAgZW5kaWYKKy0jICAgZW5kaWYKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0KKy0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKy0gICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLworLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKy0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCistICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKy0gICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorLSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCistICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKy0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworLSMgIGVuZGlmCistIyBlbHNlCistIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKy0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQorLSMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKy0jICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorLSMgIGVuZGlmCistIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIF9TVERMSUJfSCBcCistICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCistCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorLSMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworLSMgICBpZm5kZWYgX1NURExJQl9ICistIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKy0jICAgZW5kaWYKKy0jICBlbmRpZgorLSMgIGlmbmRlZiBZWU1BTExPQworLSMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCistIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorLXZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCistIyAgIGVuZGlmCistIyAgZW5kaWYKKy0jICBpZm5kZWYgWVlGUkVFCistIyAgIGRlZmluZSBZWUZSRUUgZnJlZQorLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCistICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCistdm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCistIyAgIGVuZGlmCistIyAgZW5kaWYKKy0jIGVuZGlmCistI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworLQorLQorLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAorLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCistCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCistCistLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCistdW5pb24geXlhbGxvYworLXsKKy0gIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworLSAgWVlTVFlQRSB5eXZzX2FsbG9jOworLX07CistCistLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKy0jIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKy0KKy0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKy0gICBOIGVsZW1lbnRzLiAgKi8KKy0jIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKy0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAorLSAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKKy0KKy0vKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKy0gICBub3Qgb3ZlcmxhcC4gICovCistIyBpZm5kZWYgWVlDT1BZCistIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18KKy0jICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKKy0gICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCistIyAgZWxzZQorLSMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkJCVwKKy0gICAgICBkbwkJCQkJXAorLQl7CQkJCQlcCistCSAgWVlTSVpFX1QgeXlpOwkJCQlcCistCSAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAorLQkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCistCX0JCQkJCVwKKy0gICAgICB3aGlsZSAoWVlJRCAoMCkpCistIyAgZW5kaWYKKy0jIGVuZGlmCistCistLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCistICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCistICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKy0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorLSAgIHN0YWNrLiAgKi8KKy0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorLSAgICBkbwkJCQkJCQkJCVwKKy0gICAgICB7CQkJCQkJCQkJXAorLQlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKy0JWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCistCVN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKy0JeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorLQl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCistICAgICAgfQkJCQkJCQkJCVwKKy0gICAgd2hpbGUgKFlZSUQgKDApKQorLQorLSNlbmRpZgorLQorLS8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCistI2RlZmluZSBZWUZJTkFMICA5CistLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCistI2RlZmluZSBZWUxBU1QgICA1NAorLQorLS8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKy0jZGVmaW5lIFlZTlRPS0VOUyAgMTYKKy0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCistI2RlZmluZSBZWU5OVFMgIDMKKy0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworLSNkZWZpbmUgWVlOUlVMRVMgIDEzCistLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCistI2RlZmluZSBZWU5TVEFURVMgIDI3CistCistLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCistI2RlZmluZSBZWVVOREVGVE9LICAyCistI2RlZmluZSBZWU1BWFVUT0sgICAyNjIKKy0KKy0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCistICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCistCistLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCistc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KKy17CistICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgMTAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNSwgICAgIDIsCistICAgICAgMTQsICAgIDE1LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAxMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgMTMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCistICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgNiwgICAgIDcsCistICAgICAgIDgsICAgICA5LCAgICAxMQorLX07CistCistI2lmIFlZREVCVUcKKy0vKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4KKy0gICBZWVJIUy4gICovCistc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXByaHNbXSA9CisteworLSAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAxMSwgICAgMTUsICAgIDE5LCAgICAyMywgICAgMjcsICAgIDMxLAorLSAgICAgIDM1LCAgICAzOCwgICAgNDAsICAgIDQyCistfTsKKy0KKy0vKiBZWVJIUyAtLSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLworLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXJoc1tdID0KKy17CistICAgICAgMTcsICAgICAwLCAgICAtMSwgICAgMTgsICAgIC0xLCAgICAxOCwgICAgIDMsICAgIDE4LCAgICAxMiwgICAgMTgsCistICAgICAgLTEsICAgIDE4LCAgICAgNCwgICAgMTgsICAgIC0xLCAgICAxOCwgICAgIDUsICAgIDE4LCAgICAtMSwgICAgMTgsCistICAgICAgIDYsICAgIDE4LCAgICAtMSwgICAgMTgsICAgICA3LCAgICAxOCwgICAgLTEsICAgIDE4LCAgICAgOCwgICAgMTgsCistICAgICAgLTEsICAgIDE4LCAgICAgOSwgICAgMTgsICAgIC0xLCAgICAxMCwgICAgMTgsICAgIC0xLCAgICAxMywgICAgLTEsCistICAgICAgMTEsICAgIC0xLCAgICAxNCwgICAgMTgsICAgIDE1LCAgICAtMQorLX07CistCistLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCistc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5lW10gPQorLXsKKy0gICAgICAgMCwgICAxNTQsICAgMTU0LCAgIDE2MiwgICAxNjYsICAgMTcwLCAgIDE3NCwgICAxNzgsICAgMTgyLCAgIDE4NiwKKy0gICAgIDE5MCwgICAxOTQsICAgMTk4LCAgIDIwMworLX07CistI2VuZGlmCistCistI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy0vKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KKy0gICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQorLXsKKy0gICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiJz8nIiwgIid8JyIsICInJiciLCAiRVFVT1AyIiwgIkNNUE9QMiIsCistICAiQURET1AyIiwgIk1VTE9QMiIsICInISciLCAiTlVNQkVSIiwgIic6JyIsICInbiciLCAiJygnIiwgIicpJyIsCistICAiJGFjY2VwdCIsICJzdGFydCIsICJleHAiLCAwCistfTsKKy0jZW5kaWYKKy0KKy0jIGlmZGVmIFlZUFJJTlQKKy0vKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCistICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KKy1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KKy17CistICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAgNjMsICAgMTI0LCAgICAzOCwgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsCistICAgICAgMzMsICAgMjYyLCAgICA1OCwgICAxMTAsICAgIDQwLCAgICA0MQorLX07CistIyBlbmRpZgorLQorLS8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KKy17CistICAgICAgIDAsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE4LCAgICAxOCwgICAgMTgsICAgIDE4LCAgICAxOCwgICAgMTgsCistICAgICAgMTgsICAgIDE4LCAgICAxOCwgICAgMTgKKy19OworLQorLS8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KKy1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9CisteworLSAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICA1LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLAorLSAgICAgICAyLCAgICAgMSwgICAgIDEsICAgICAzCistfTsKKy0KKy0vKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUKKy0gICBTVEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KKy0gICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCistc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KKy17CistICAgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDIsICAgIDEwLCAgICAgMCwgICAgIDEsCistICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDQsCistICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgMCwgICAgIDMKKy19OworLQorLS8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KKy1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlkZWZnb3RvW10gPQorLXsKKy0gICAgICAtMSwgICAgIDUsICAgICA2CistfTsKKy0KKy0vKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKKy0gICBTVEFURS1OVU0uICAqLworLSNkZWZpbmUgWVlQQUNUX05JTkYgLTEwCistc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGFjdFtdID0KKy17CistICAgICAgLTksICAgIC05LCAgIC0xMCwgICAtMTAsICAgIC05LCAgICAgOCwgICAgMzYsICAgLTEwLCAgICAxMywgICAtMTAsCistICAgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksICAgLTEwLCAgICAyNiwgICAgNDEsCistICAgICAgNDUsICAgIDE4LCAgICAtMiwgICAgMTQsICAgLTEwLCAgICAtOSwgICAgMzYKKy19OworLQorLS8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCistc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9CisteworLSAgICAgLTEwLCAgIC0xMCwgICAgLTEKKy19OworLQorLS8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorLSAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAorLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNheXMuCistICAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLworLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xCistc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRhYmxlW10gPQorLXsKKy0gICAgICAgNywgICAgIDEsICAgICAyLCAgICAgOCwgICAgIDMsICAgICA0LCAgICAxNSwgICAgMTYsICAgICA5LCAgICAxOCwKKy0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKy0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNiwgICAgMjYsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxMCwKKy0gICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAxMCwKKy0gICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKKy0gICAgICAxNiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYKKy19OworLQorLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eWNoZWNrW10gPQorLXsKKy0gICAgICAgMSwgICAgMTAsICAgIDExLCAgICAgNCwgICAgMTMsICAgIDE0LCAgICAgOCwgICAgIDksICAgICAwLCAgICAxMCwKKy0gICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKy0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAgOSwgICAgMjUsICAgICA3LCAgICAgOCwgICAgIDksICAgIDE1LCAgICAgMywKKy0gICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAtMSwgICAgLTEsICAgIDEyLCAgICAgMywKKy0gICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKy0gICAgICAgOSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDkKKy19OworLQorLS8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCistICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCistc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CisteworLSAgICAgICAwLCAgICAxMCwgICAgMTEsICAgIDEzLCAgICAxNCwgICAgMTcsICAgIDE4LCAgICAxOCwgICAgMTgsICAgICAwLAorLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxNSwgICAgMTgsICAgIDE4LAorLSAgICAgIDE4LCAgICAxOCwgICAgMTgsICAgIDE4LCAgICAxOCwgICAgMTIsICAgIDE4CistfTsKKy0KKy0jZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCistI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCistI2RlZmluZSBZWUVNUFRZCQkoLTIpCistI2RlZmluZSBZWUVPRgkJMAorLQorLSNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorLSNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCistI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKy0KKy0KKy0vKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CistICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKy0gICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gICovCistCistI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKy0KKy0jZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKy0KKy0jZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwKKy1kbwkJCQkJCQkJXAorLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKy0gICAgewkJCQkJCQkJXAorLSAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAorLSAgICAgIHl5bHZhbCA9IChWYWx1ZSk7CQkJCQkJXAorLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsJCQkJXAorLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwKKy0gICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKy0gICAgfQkJCQkJCQkJXAorLSAgZWxzZQkJCQkJCQkJXAorLSAgICB7CQkJCQkJCQlcCistICAgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCistICAgICAgWVlFUlJPUjsJCQkJCQkJXAorLSAgICB9CQkJCQkJCQlcCistd2hpbGUgKFlZSUQgKDApKQorLQorLQorLSNkZWZpbmUgWVlURVJST1IJMQorLSNkZWZpbmUgWVlFUlJDT0RFCTI1NgorLQorLQorLS8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgorLSAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9jYXRpb24gd2hpY2ggZW5kcworLSAgIHRoZSBwcmV2aW91cyBzeW1ib2w6IFJIU1swXSAoYWx3YXlzIGRlZmluZWQpLiAgKi8KKy0KKy0jZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorLSNpZm5kZWYgWVlMTE9DX0RFRkFVTFQKKy0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pCQkJCVwKKy0gICAgZG8JCQkJCQkJCQlcCistICAgICAgaWYgKFlZSUQgKE4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistCXsJCQkJCQkJCVwKKy0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGluZTsJXAorLQkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSBZWVJIU0xPQyAoUmhzLCAxKS5maXJzdF9jb2x1bW47CVwKKy0JICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOwkJXAorLQkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAorLQl9CQkJCQkJCQlcCistICAgICAgZWxzZQkJCQkJCQkJXAorLQl7CQkJCQkJCQlcCistCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgICA9IChDdXJyZW50KS5sYXN0X2xpbmUgICA9CQlcCistCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7CQkJCVwKKy0JICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKy0JICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCistCX0JCQkJCQkJCVwKKy0gICAgd2hpbGUgKFlZSUQgKDApKQorLSNlbmRpZgorLQorLQorLS8qIFlZX0xPQ0FUSU9OX1BSSU5UIC0tIFByaW50IHRoZSBsb2NhdGlvbiBvbiB0aGUgc3RyZWFtLgorLSAgIFRoaXMgbWFjcm8gd2FzIG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CistICAgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLworLQorLSNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKy0jIGlmIFlZTFRZUEVfSVNfVFJJVklBTAorLSMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpCQkJXAorLSAgICAgZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCistCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXAorLQkgICAgICAoTG9jKS5sYXN0X2xpbmUsICAoTG9jKS5sYXN0X2NvbHVtbikKKy0jIGVsc2UKKy0jICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCistIyBlbmRpZgorLSNlbmRpZgorLQorLQorLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworLQorLSNpZmRlZiBZWUxFWF9QQVJBTQorLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKy0jZWxzZQorLSMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsKQorLSNlbmRpZgorLQorLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8KKy0jaWYgWVlERUJVRworLQorLSMgaWZuZGVmIFlZRlBSSU5URgorLSMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKy0jICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKy0jIGVuZGlmCistCistIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorLWRvIHsJCQkJCQlcCistICBpZiAoeXlkZWJ1ZykJCQkJCVwKKy0gICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKKy19IHdoaWxlIChZWUlEICgwKSkKKy0KKy0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKKy1kbyB7CQkJCQkJCQkJICBcCistICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorLSAgICB7CQkJCQkJCQkJICBcCistICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKy0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKy0JCSAgVHlwZSwgVmFsdWUpOyBcCistICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorLSAgICB9CQkJCQkJCQkJICBcCistfSB3aGlsZSAoWVlJRCAoMCkpCistCistCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCistCistLypBUkdTVVNFRCovCistI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCistICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCistc3RhdGljIHZvaWQKKy15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXApCistI2Vsc2UKKy1zdGF0aWMgdm9pZAorLXl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApCistICAgIEZJTEUgKnl5b3V0cHV0OworLSAgICBpbnQgeXl0eXBlOworLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CistI2VuZGlmCisteworLSAgaWYgKCF5eXZhbHVlcCkKKy0gICAgcmV0dXJuOworLSMgaWZkZWYgWVlQUklOVAorLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKy0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CistIyBlbHNlCistICBZWVVTRSAoeXlvdXRwdXQpOworLSMgZW5kaWYKKy0gIHN3aXRjaCAoeXl0eXBlKQorLSAgICB7CistICAgICAgZGVmYXVsdDoKKy0JYnJlYWs7CistICAgIH0KKy19CistCistCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy18IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCistCistI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCistICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCistc3RhdGljIHZvaWQKKy15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXApCistI2Vsc2UKKy1zdGF0aWMgdm9pZAorLXl5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApCistICAgIEZJTEUgKnl5b3V0cHV0OworLSAgICBpbnQgeXl0eXBlOworLSAgICBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CistI2VuZGlmCisteworLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKKy0gICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOworLSAgZWxzZQorLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAibnRlcm0gJXMgKCIsIHl5dG5hbWVbeXl0eXBlXSk7CistCistICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwKTsKKy0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7CistfQorLQorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfAorLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLQorLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorLXN0YXRpYyB2b2lkCisteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApCistI2Vsc2UKKy1zdGF0aWMgdm9pZAorLXl5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCistICAgIHl5dHlwZV9pbnQxNiAqeXlib3R0b207CistICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CistI2VuZGlmCisteworLSAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKy0gIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKy0gICAgeworLSAgICAgIGludCB5eWJvdCA9ICp5eWJvdHRvbTsKKy0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKy0gICAgfQorLSAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworLX0KKy0KKy0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorLWRvIHsJCQkJCQkJCVwKKy0gIGlmICh5eWRlYnVnKQkJCQkJCQlcCistICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCistfSB3aGlsZSAoWVlJRCAoMCkpCistCistCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCistfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCistCistI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCistICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCistc3RhdGljIHZvaWQKKy15eV9yZWR1Y2VfcHJpbnQgKFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlKQorLSNlbHNlCistc3RhdGljIHZvaWQKKy15eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUpCistICAgIFlZU1RZUEUgKnl5dnNwOworLSAgICBpbnQgeXlydWxlOworLSNlbmRpZgorLXsKKy0gIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CistICBpbnQgeXlpOworLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CistICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCistCSAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworLSAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCistICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCistICAgIHsKKy0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCistCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCistCQkgICAgICAgCQkgICAgICAgKTsKKy0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CistICAgIH0KKy19CistCistIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCistZG8gewkJCQkJXAorLSAgaWYgKHl5ZGVidWcpCQkJCVwKKy0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSk7IFwKKy19IHdoaWxlIChZWUlEICgwKSkKKy0KKy0vKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKy0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KKy1pbnQgeXlkZWJ1ZzsKKy0jZWxzZSAvKiAhWVlERUJVRyAqLworLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorLSNlbmRpZiAvKiAhWVlERUJVRyAqLworLQorLQorLS8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKy0jaWZuZGVmCVlZSU5JVERFUFRICistIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCistI2VuZGlmCistCistLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKy0gICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKy0KKy0gICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorLSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCistICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCistCistI2lmbmRlZiBZWU1BWERFUFRICistIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorLSNlbmRpZgorLQorLQwKKy0KKy0jaWYgWVlFUlJPUl9WRVJCT1NFCistCistIyBpZm5kZWYgeXlzdHJsZW4KKy0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAorLSMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCistIyAgZWxzZQorLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KKy0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKy0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKy1zdGF0aWMgWVlTSVpFX1QKKy15eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCistI2Vsc2UKKy1zdGF0aWMgWVlTSVpFX1QKKy15eXN0cmxlbiAoeXlzdHIpCistICAgIGNvbnN0IGNoYXIgKnl5c3RyOworLSNlbmRpZgorLXsKKy0gIFlZU0laRV9UIHl5bGVuOworLSAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKy0gICAgY29udGludWU7CistICByZXR1cm4geXlsZW47CistfQorLSMgIGVuZGlmCistIyBlbmRpZgorLQorLSMgaWZuZGVmIHl5c3RwY3B5CistIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQorLSMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CistIyAgZWxzZQorLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KKy0gICBZWURFU1QuICAqLworLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorLXN0YXRpYyBjaGFyICoKKy15eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKy0jZWxzZQorLXN0YXRpYyBjaGFyICoKKy15eXN0cGNweSAoeXlkZXN0LCB5eXNyYykKKy0gICAgY2hhciAqeXlkZXN0OworLSAgICBjb25zdCBjaGFyICp5eXNyYzsKKy0jZW5kaWYKKy17CistICBjaGFyICp5eWQgPSB5eWRlc3Q7CistICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKy0KKy0gIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQorLSAgICBjb250aW51ZTsKKy0KKy0gIHJldHVybiB5eWQgLSAxOworLX0KKy0jICBlbmRpZgorLSMgZW5kaWYKKy0KKy0jIGlmbmRlZiB5eXRuYW1lcnIKKy0vKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQorLSAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQorLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCistICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCistICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworLSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKKy0gICB3b3VsZCBoYXZlIGJlZW4uICAqLworLXN0YXRpYyBZWVNJWkVfVAorLXl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQorLXsKKy0gIGlmICgqeXlzdHIgPT0gJyInKQorLSAgICB7CistICAgICAgWVlTSVpFX1QgeXluID0gMDsKKy0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKKy0KKy0gICAgICBmb3IgKDs7KQorLQlzd2l0Y2ggKCorK3l5cCkKKy0JICB7CistCSAgY2FzZSAnXCcnOgorLQkgIGNhc2UgJywnOgorLQkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworLQorLQkgIGNhc2UgJ1xcJzoKKy0JICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKy0JICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworLQkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKy0JICBkZWZhdWx0OgorLQkgICAgaWYgKHl5cmVzKQorLQkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKy0JICAgIHl5bisrOworLQkgICAgYnJlYWs7CistCistCSAgY2FzZSAnIic6CistCSAgICBpZiAoeXlyZXMpCistCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworLQkgICAgcmV0dXJuIHl5bjsKKy0JICB9CistICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKy0gICAgfQorLQorLSAgaWYgKCEgeXlyZXMpCistICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOworLQorLSAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7CistfQorLSMgZW5kaWYKKy0KKy0vKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbgorLSAgIFlZQ0hBUiB3aGlsZSBpbiBzdGF0ZSBZWVNUQVRFLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLAorLSAgIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90CistICAgY29weSBhbnl0aGluZzsganVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCistICAgY29waWVkLiAgQXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybiAwIGlmIGFuIG9yZGluYXJ5ICJzeW50YXggZXJyb3IiCistICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJTVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKKy0gICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KKy1zdGF0aWMgWVlTSVpFX1QKKy15eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0YXRlLCBpbnQgeXljaGFyKQorLXsKKy0gIGludCB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CistCistICBpZiAoISAoWVlQQUNUX05JTkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCistICAgIHJldHVybiAwOworLSAgZWxzZQorLSAgICB7CistICAgICAgaW50IHl5dHlwZSA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworLSAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7CistICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKy0gICAgICBZWVNJWkVfVCB5eXNpemUxOworLSAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOworLSAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworLSAgICAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOworLSAgICAgIGludCB5eXg7CistCistIyBpZiAwCistICAgICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQorLQkgY29uc3RydWN0ZWQgb24gdGhlIGZseS4gICovCistICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKTsKKy0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIik7CistICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpOworLSAgICAgIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKTsKKy0gICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIik7CistIyBlbmRpZgorLSAgICAgIGNoYXIgKnl5Zm10OworLSAgICAgIGNoYXIgY29uc3QgKnl5ZjsKKy0gICAgICBzdGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiOworLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5ZXhwZWN0aW5nW10gPSAiLCBleHBlY3RpbmcgJXMiOworLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3IgJXMiOworLSAgICAgIGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAorLQkJICAgICsgc2l6ZW9mIHl5ZXhwZWN0aW5nIC0gMQorLQkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNIC0gMikKKy0JCSAgICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07CistICAgICAgY2hhciBjb25zdCAqeXlwcmVmaXggPSB5eWV4cGVjdGluZzsKKy0KKy0gICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCistCSBZWUNIRUNLLiAgKi8KKy0gICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CistCistICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCistICAgICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworLSAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKKy0gICAgICBpbnQgeXljb3VudCA9IDE7CistCistICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07CistICAgICAgeXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7CistCistICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKy0JaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQorLQkgIHsKKy0JICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCistCSAgICAgIHsKKy0JCXl5Y291bnQgPSAxOworLQkJeXlzaXplID0geXlzaXplMDsKKy0JCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7CistCQlicmVhazsKKy0JICAgICAgfQorLQkgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKKy0JICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl4XSk7CistCSAgICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworLQkgICAgeXlzaXplID0geXlzaXplMTsKKy0JICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7CistCSAgICB5eXByZWZpeCA9IHl5b3I7CistCSAgfQorLQorLSAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7CistICAgICAgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWYpOworLSAgICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CistICAgICAgeXlzaXplID0geXlzaXplMTsKKy0KKy0gICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorLQlyZXR1cm4gWVlTSVpFX01BWElNVU07CistCistICAgICAgaWYgKHl5cmVzdWx0KQorLQl7CistCSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorLQkgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCistCSAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKy0JICBjaGFyICp5eXAgPSB5eXJlc3VsdDsKKy0JICBpbnQgeXlpID0gMDsKKy0JICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQorLQkgICAgeworLQkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQorLQkJeworLQkJICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7CistCQkgIHl5ZiArPSAyOworLQkJfQorLQkgICAgICBlbHNlCistCQl7CistCQkgIHl5cCsrOworLQkJICB5eWYrKzsKKy0JCX0KKy0JICAgIH0KKy0JfQorLSAgICAgIHJldHVybiB5eXNpemU7CistICAgIH0KKy19CistI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworLQwKKy0KKy0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy0KKy0vKkFSR1NVU0VEKi8KKy0jaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKy0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKy1zdGF0aWMgdm9pZAorLXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCkKKy0jZWxzZQorLXN0YXRpYyB2b2lkCisteXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXApCistICAgIGNvbnN0IGNoYXIgKnl5bXNnOworLSAgICBpbnQgeXl0eXBlOworLSAgICBZWVNUWVBFICp5eXZhbHVlcDsKKy0jZW5kaWYKKy17CistICBZWVVTRSAoeXl2YWx1ZXApOworLQorLSAgaWYgKCF5eW1zZykKKy0gICAgeXltc2cgPSAiRGVsZXRpbmciOworLSAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlvbnApOworLQorLSAgc3dpdGNoICh5eXR5cGUpCistICAgIHsKKy0KKy0gICAgICBkZWZhdWx0OgorLQlicmVhazsKKy0gICAgfQorLX0KKy0KKy0vKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLworLSNpZmRlZiBZWVBBUlNFX1BBUkFNCistI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cworLWludCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKKy0jZWxzZQorLWludCB5eXBhcnNlICgpOworLSNlbmRpZgorLSNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworLSNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKKy1pbnQgeXlwYXJzZSAodm9pZCk7CistI2Vsc2UKKy1pbnQgeXlwYXJzZSAoKTsKKy0jZW5kaWYKKy0jZW5kaWYgLyogISBZWVBBUlNFX1BBUkFNICovCistCistCistCistCistCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorLXwgeXlwYXJzZSBvciB5eXB1c2hfcGFyc2UuICB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLQorLSNpZmRlZiBZWVBBUlNFX1BBUkFNCistI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCistICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCistaW50CisteXlwYXJzZSAodm9pZCAqWVlQQVJTRV9QQVJBTSkKKy0jZWxzZQorLWludAorLXl5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCistICAgIHZvaWQgKllZUEFSU0VfUEFSQU07CistI2VuZGlmCistI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCistI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCistICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCistaW50CisteXlwYXJzZSAodm9pZCkKKy0jZWxzZQorLWludAorLXl5cGFyc2UgKCkKKy0KKy0jZW5kaWYKKy0jZW5kaWYKKy17CistLyogVGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworLWludCB5eWNoYXI7CistCistLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKy1ZWVNUWVBFIHl5bHZhbDsKKy0KKy0gICAgLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KKy0gICAgaW50IHl5bmVycnM7CistCistICAgIGludCB5eXN0YXRlOworLSAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKy0gICAgaW50IHl5ZXJyc3RhdHVzOworLQorLSAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKy0gICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKy0gICAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4KKy0KKy0gICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CistICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLworLQorLSAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworLSAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOworLSAgICB5eXR5cGVfaW50MTYgKnl5c3M7CistICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CistCistICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCistICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworLSAgICBZWVNUWVBFICp5eXZzOworLSAgICBZWVNUWVBFICp5eXZzcDsKKy0KKy0gICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CistCistICBpbnQgeXluOworLSAgaW50IHl5cmVzdWx0OworLSAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworLSAgaW50IHl5dG9rZW47CistICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKy0gIFlZU1RZUEUgeXl2YWw7CistCistI2lmIFlZRVJST1JfVkVSQk9TRQorLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCistICBjaGFyIHl5bXNnYnVmWzEyOF07CistICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOworLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7CistI2VuZGlmCistCistI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQorLQorLSAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKy0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKy0gIGludCB5eWxlbiA9IDA7CistCistICB5eXRva2VuID0gMDsKKy0gIHl5c3MgPSB5eXNzYTsKKy0gIHl5dnMgPSB5eXZzYTsKKy0gIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CistCistICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworLQorLSAgeXlzdGF0ZSA9IDA7CistICB5eWVycnN0YXR1cyA9IDA7CistICB5eW5lcnJzID0gMDsKKy0gIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCistCistICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50ZXJzLgorLSAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCistICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suCistICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICovCistICB5eXNzcCA9IHl5c3M7CistICB5eXZzcCA9IHl5dnM7CistCistICBnb3RvIHl5c2V0c3RhdGU7CistCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCistfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCistIHl5bmV3c3RhdGU6CistICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCistICB5eXNzcCsrOworLQorLSB5eXNldHN0YXRlOgorLSAgKnl5c3NwID0geXlzdGF0ZTsKKy0KKy0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorLSAgICB7CistICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCistICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKKy0KKy0jaWZkZWYgeXlvdmVyZmxvdworLSAgICAgIHsKKy0JLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorLQkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCistCSAgIG1lbW9yeS4gICovCistCVlZU1RZUEUgKnl5dnMxID0geXl2czsKKy0JeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CistCistCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorLQkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCistCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKKy0JICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCistCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorLQkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorLQkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorLQkJICAgICZ5eXN0YWNrc2l6ZSk7CistCistCXl5c3MgPSB5eXNzMTsKKy0JeXl2cyA9IHl5dnMxOworLSAgICAgIH0KKy0jZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCistIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CistIyBlbHNlCistICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCistICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCistCWdvdG8geXlleGhhdXN0ZWRsYWI7CistICAgICAgeXlzdGFja3NpemUgKj0gMjsKKy0gICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQorLQl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CistCistICAgICAgeworLQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKy0JdW5pb24geXlhbGxvYyAqeXlwdHIgPQorLQkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CistCWlmICghIHl5cHRyKQorLQkgIGdvdG8geXlleGhhdXN0ZWRsYWI7CistCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOworLQlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKKy0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCistCWlmICh5eXNzMSAhPSB5eXNzYSkKKy0JICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKy0gICAgICB9CistIyBlbmRpZgorLSNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCistCistICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKy0gICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworLQorLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKy0JCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworLQorLSAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorLQlZWUFCT1JUOworLSAgICB9CistCistICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworLQorLSAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKy0gICAgWVlBQ0NFUFQ7CistCistICBnb3RvIHl5YmFja3VwOworLQorLS8qLS0tLS0tLS0tLS0uCistfCB5eWJhY2t1cC4gIHwKKy1gLS0tLS0tLS0tLS0qLworLXl5YmFja3VwOgorLQorLSAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZS4gIFJlYWQgYQorLSAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKy0KKy0gIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworLSAgeXluID0geXlwYWN0W3l5c3RhdGVdOworLSAgaWYgKHl5biA9PSBZWVBBQ1RfTklORikKKy0gICAgZ290byB5eWRlZmF1bHQ7CistCistICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworLQorLSAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCistICBpZiAoeXljaGFyID09IFlZRU1QVFkpCistICAgIHsKKy0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKKy0gICAgICB5eWNoYXIgPSBZWUxFWDsKKy0gICAgfQorLQorLSAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKy0gICAgeworLSAgICAgIHl5Y2hhciA9IHl5dG9rZW4gPSBZWUVPRjsKKy0gICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CistICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworLSAgICB9CistCistICAvKiBJZiB0aGUgcHJvcGVyIGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKy0gICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCistICB5eW4gKz0geXl0b2tlbjsKKy0gIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tlbikKKy0gICAgZ290byB5eWRlZmF1bHQ7CistICB5eW4gPSB5eXRhYmxlW3l5bl07CistICBpZiAoeXluIDw9IDApCistICAgIHsKKy0gICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKKy0JZ290byB5eWVycmxhYjsKKy0gICAgICB5eW4gPSAteXluOworLSAgICAgIGdvdG8geXlyZWR1Y2U7CistICAgIH0KKy0KKy0gIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKy0gICAgIHN0YXR1cy4gICovCistICBpZiAoeXllcnJzdGF0dXMpCistICAgIHl5ZXJyc3RhdHVzLS07CistCistICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8KKy0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CistCistICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKy0gIHl5Y2hhciA9IFlZRU1QVFk7CistCistICB5eXN0YXRlID0geXluOworLSAgKisreXl2c3AgPSB5eWx2YWw7CistCistICBnb3RvIHl5bmV3c3RhdGU7CistCistCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy18IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAgfAorLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisteXlkZWZhdWx0OgorLSAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CistICBpZiAoeXluID09IDApCistICAgIGdvdG8geXllcnJsYWI7CistICBnb3RvIHl5cmVkdWNlOworLQorLQorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCistfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlvbi4gIHwKKy1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLXl5cmVkdWNlOgorLSAgLyogeXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKy0gIHl5bGVuID0geXlyMlt5eW5dOworLQorLSAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246CistICAgICBgJCQgPSAkMScuCistCistICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCistICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKy0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCistICAgICB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKy0gICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCistICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOworLQorLQorLSAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworLSAgc3dpdGNoICh5eW4pCistICAgIHsKKy0gICAgICAgIGNhc2UgMjoKKy0KKy0vKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworLSNsaW5lIDE1NSAicGx1cmFsLnkiCistICAgIHsKKy0JICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5leHApID09IE5VTEwpCistCSAgICAgIFlZQUJPUlQ7CistCSAgICAoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPnJlcyA9ICh5eXZzcFsoMSkgLSAoMSldLmV4cCk7CistCSAgfQorLSAgICBicmVhazsKKy0KKy0gIGNhc2UgMzoKKy0KKy0vKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworLSNsaW5lIDE2MyAicGx1cmFsLnkiCistICAgIHsKKy0JICAgICh5eXZhbC5leHApID0gbmV3X2V4cF8zIChxbW9wLCAoeXl2c3BbKDEpIC0gKDUpXS5leHApLCAoeXl2c3BbKDMpIC0gKDUpXS5leHApLCAoeXl2c3BbKDUpIC0gKDUpXS5leHApKTsKKy0JICB9CistICAgIGJyZWFrOworLQorLSAgY2FzZSA0OgorLQorLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCistI2xpbmUgMTY3ICJwbHVyYWwueSIKKy0gICAgeworLQkgICAgKHl5dmFsLmV4cCkgPSBuZXdfZXhwXzIgKGxvciwgKHl5dnNwWygxKSAtICgzKV0uZXhwKSwgKHl5dnNwWygzKSAtICgzKV0uZXhwKSk7CistCSAgfQorLSAgICBicmVhazsKKy0KKy0gIGNhc2UgNToKKy0KKy0vKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworLSNsaW5lIDE3MSAicGx1cmFsLnkiCistICAgIHsKKy0JICAgICh5eXZhbC5leHApID0gbmV3X2V4cF8yIChsYW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5leHApLCAoeXl2c3BbKDMpIC0gKDMpXS5leHApKTsKKy0JICB9CistICAgIGJyZWFrOworLQorLSAgY2FzZSA2OgorLQorLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCistI2xpbmUgMTc1ICJwbHVyYWwueSIKKy0gICAgeworLQkgICAgKHl5dmFsLmV4cCkgPSBuZXdfZXhwXzIgKCh5eXZzcFsoMikgLSAoMyldLm9wKSwgKHl5dnNwWygxKSAtICgzKV0uZXhwKSwgKHl5dnNwWygzKSAtICgzKV0uZXhwKSk7CistCSAgfQorLSAgICBicmVhazsKKy0KKy0gIGNhc2UgNzoKKy0KKy0vKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworLSNsaW5lIDE3OSAicGx1cmFsLnkiCistICAgIHsKKy0JICAgICh5eXZhbC5leHApID0gbmV3X2V4cF8yICgoeXl2c3BbKDIpIC0gKDMpXS5vcCksICh5eXZzcFsoMSkgLSAoMyldLmV4cCksICh5eXZzcFsoMykgLSAoMyldLmV4cCkpOworLQkgIH0KKy0gICAgYnJlYWs7CistCistICBjYXNlIDg6CistCistLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKy0jbGluZSAxODMgInBsdXJhbC55IgorLSAgICB7CistCSAgICAoeXl2YWwuZXhwKSA9IG5ld19leHBfMiAoKHl5dnNwWygyKSAtICgzKV0ub3ApLCAoeXl2c3BbKDEpIC0gKDMpXS5leHApLCAoeXl2c3BbKDMpIC0gKDMpXS5leHApKTsKKy0JICB9CistICAgIGJyZWFrOworLQorLSAgY2FzZSA5OgorLQorLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCistI2xpbmUgMTg3ICJwbHVyYWwueSIKKy0gICAgeworLQkgICAgKHl5dmFsLmV4cCkgPSBuZXdfZXhwXzIgKCh5eXZzcFsoMikgLSAoMyldLm9wKSwgKHl5dnNwWygxKSAtICgzKV0uZXhwKSwgKHl5dnNwWygzKSAtICgzKV0uZXhwKSk7CistCSAgfQorLSAgICBicmVhazsKKy0KKy0gIGNhc2UgMTA6CistCistLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKy0jbGluZSAxOTEgInBsdXJhbC55IgorLSAgICB7CistCSAgICAoeXl2YWwuZXhwKSA9IG5ld19leHBfMSAobG5vdCwgKHl5dnNwWygyKSAtICgyKV0uZXhwKSk7CistCSAgfQorLSAgICBicmVhazsKKy0KKy0gIGNhc2UgMTE6CistCistLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKy0jbGluZSAxOTUgInBsdXJhbC55IgorLSAgICB7CistCSAgICAoeXl2YWwuZXhwKSA9IG5ld19leHBfMCAodmFyKTsKKy0JICB9CistICAgIGJyZWFrOworLQorLSAgY2FzZSAxMjoKKy0KKy0vKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworLSNsaW5lIDE5OSAicGx1cmFsLnkiCistICAgIHsKKy0JICAgIGlmICgoKHl5dmFsLmV4cCkgPSBuZXdfZXhwXzAgKG51bSkpICE9IE5VTEwpCistCSAgICAgICh5eXZhbC5leHApLT52YWwubnVtID0gKHl5dnNwWygxKSAtICgxKV0ubnVtKTsKKy0JICB9CistICAgIGJyZWFrOworLQorLSAgY2FzZSAxMzoKKy0KKy0vKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworLSNsaW5lIDIwNCAicGx1cmFsLnkiCistICAgIHsKKy0JICAgICh5eXZhbC5leHApID0gKHl5dnNwWygyKSAtICgzKV0uZXhwKTsKKy0JICB9CistICAgIGJyZWFrOworLQorLQorLQorLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCistI2xpbmUgMTU5MiAicGx1cmFsLmMiCistICAgICAgZGVmYXVsdDogYnJlYWs7CistICAgIH0KKy0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKy0KKy0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKy0gIHl5bGVuID0gMDsKKy0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CistCistICAqKyt5eXZzcCA9IHl5dmFsOworLQorLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKy0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorLSAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworLQorLSAgeXluID0geXlyMVt5eW5dOworLQorLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKKy0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCistICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworLSAgZWxzZQorLSAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107CistCistICBnb3RvIHl5bmV3c3RhdGU7CistCistCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCistfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvciB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisteXllcnJsYWI6CistICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KKy0gIGlmICgheXllcnJzdGF0dXMpCistICAgIHsKKy0gICAgICArK3l5bmVycnM7CistI2lmICEgWVlFUlJPUl9WRVJCT1NFCistICAgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3IiKSk7CistI2Vsc2UKKy0gICAgICB7CistCVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOworLQlpZiAoeXltc2dfYWxsb2MgPCB5eXNpemUgJiYgeXltc2dfYWxsb2MgPCBZWVNUQUNLX0FMTE9DX01BWElNVU0pCistCSAgeworLQkgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7CistCSAgICBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQorLQkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworLQkgICAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorLQkgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKy0JICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7CistCSAgICBpZiAoeXltc2cpCistCSAgICAgIHl5bXNnX2FsbG9jID0geXlhbGxvYzsKKy0JICAgIGVsc2UKKy0JICAgICAgeworLQkJeXltc2cgPSB5eW1zZ2J1ZjsKKy0JCXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworLQkgICAgICB9CistCSAgfQorLQorLQlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCistCSAgeworLQkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKKy0JICAgIHl5ZXJyb3IgKHl5bXNnKTsKKy0JICB9CistCWVsc2UKKy0JICB7CistCSAgICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvciIpKTsKKy0JICAgIGlmICh5eXNpemUgIT0gMCkKKy0JICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKy0JICB9CistICAgICAgfQorLSNlbmRpZgorLSAgICB9CistCistCistCistICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKy0gICAgeworLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKy0JIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKy0KKy0gICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorLQl7CistCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKy0JICBpZiAoeXljaGFyID09IFlZRU9GKQorLQkgICAgWVlBQk9SVDsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCistCQkgICAgICB5eXRva2VuLCAmeXlsdmFsKTsKKy0JICB5eWNoYXIgPSBZWUVNUFRZOworLQl9CistICAgIH0KKy0KKy0gIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorLSAgICAgdG9rZW4uICAqLworLSAgZ290byB5eWVycmxhYjE7CistCistCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCistfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBleHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisteXllcnJvcmxhYjoKKy0KKy0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKKy0gICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKy0gICAgIGNvZGUuICAqLworLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKKy0gICAgIGdvdG8geXllcnJvcmxhYjsKKy0KKy0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKy0gICAgIHRoaXMgWVlFUlJPUi4gICovCistICBZWVBPUFNUQUNLICh5eWxlbik7CistICB5eWxlbiA9IDA7CistICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworLSAgeXlzdGF0ZSA9ICp5eXNzcDsKKy0gIGdvdG8geXllcnJsYWIxOworLQorLQorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy18IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLXl5ZXJybGFiMToKKy0gIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKy0KKy0gIGZvciAoOzspCistICAgIHsKKy0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CistICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKy0JeworLQkgIHl5biArPSBZWVRFUlJPUjsKKy0JICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCistCSAgICB7CistCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKKy0JICAgICAgaWYgKDAgPCB5eW4pCistCQlicmVhazsKKy0JICAgIH0KKy0JfQorLQorLSAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KKy0gICAgICBpZiAoeXlzc3AgPT0geXlzcykKKy0JWVlBQk9SVDsKKy0KKy0KKy0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorLQkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwKTsKKy0gICAgICBZWVBPUFNUQUNLICgxKTsKKy0gICAgICB5eXN0YXRlID0gKnl5c3NwOworLSAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CistICAgIH0KKy0KKy0gICorK3l5dnNwID0geXlsdmFsOworLQorLQorLSAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8KKy0gIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7CistCistICB5eXN0YXRlID0geXluOworLSAgZ290byB5eW5ld3N0YXRlOworLQorLQorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy18IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLXl5YWNjZXB0bGFiOgorLSAgeXlyZXN1bHQgPSAwOworLSAgZ290byB5eXJldHVybjsKKy0KKy0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorLXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CistYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy15eWFib3J0bGFiOgorLSAgeXlyZXN1bHQgPSAxOworLSAgZ290byB5eXJldHVybjsKKy0KKy0jaWYgIWRlZmluZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorLXwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKKy1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisteXlleGhhdXN0ZWRsYWI6CistICB5eWVycm9yIChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CistICB5eXJlc3VsdCA9IDI7CistICAvKiBGYWxsIHRocm91Z2guICAqLworLSNlbmRpZgorLQorLXl5cmV0dXJuOgorLSAgaWYgKHl5Y2hhciAhPSBZWUVNUFRZKQorLSAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKy0JCSB5eXRva2VuLCAmeXlsdmFsKTsKKy0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQKKy0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICovCistICBZWVBPUFNUQUNLICh5eWxlbik7CistICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCistICAgIHsKKy0gICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCistCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCk7CistICAgICAgWVlQT1BTVEFDSyAoMSk7CistICAgIH0KKy0jaWZuZGVmIHl5b3ZlcmZsb3cKKy0gIGlmICh5eXNzICE9IHl5c3NhKQorLSAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworLSNlbmRpZgorLSNpZiBZWUVSUk9SX1ZFUkJPU0UKKy0gIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKy0gICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CistI2VuZGlmCistICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KKy0gIHJldHVybiBZWUlEICh5eXJlc3VsdCk7CistfQorLQorLQorLQorLS8qIExpbmUgMTY3NSBvZiB5YWNjLmMgICovCistI2xpbmUgMjA5ICJwbHVyYWwueSIKKy0KKy0KKy12b2lkCistaW50ZXJuYWxfZnVuY3Rpb24KKy1GUkVFX0VYUFJFU1NJT04gKHN0cnVjdCBleHByZXNzaW9uICpleHApCisteworLSAgaWYgKGV4cCA9PSBOVUxMKQorLSAgICByZXR1cm47CistCistICAvKiBIYW5kbGUgdGhlIHJlY3Vyc2l2ZSBjYXNlLiAgKi8KKy0gIHN3aXRjaCAoZXhwLT5uYXJncykKKy0gICAgeworLSAgICBjYXNlIDM6CistICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzJdKTsKKy0gICAgICAvKiBGQUxMVEhST1VHSCAqLworLSAgICBjYXNlIDI6CistICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzFdKTsKKy0gICAgICAvKiBGQUxMVEhST1VHSCAqLworLSAgICBjYXNlIDE6CistICAgICAgRlJFRV9FWFBSRVNTSU9OIChleHAtPnZhbC5hcmdzWzBdKTsKKy0gICAgICAvKiBGQUxMVEhST1VHSCAqLworLSAgICBkZWZhdWx0OgorLSAgICAgIGJyZWFrOworLSAgICB9CistCistICBmcmVlIChleHApOworLX0KKy0KKy0KKy1zdGF0aWMgaW50CisteXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKQorLXsKKy0gIGNvbnN0IGNoYXIgKmV4cCA9ICpwZXhwOworLSAgaW50IHJlc3VsdDsKKy0KKy0gIHdoaWxlICgxKQorLSAgICB7CistICAgICAgaWYgKGV4cFswXSA9PSAnXDAnKQorLQl7CistCSAgKnBleHAgPSBleHA7CistCSAgcmV0dXJuIFlZRU9GOworLQl9CistCistICAgICAgaWYgKGV4cFswXSAhPSAnICcgJiYgZXhwWzBdICE9ICdcdCcpCistCWJyZWFrOworLQorLSAgICAgICsrZXhwOworLSAgICB9CistCistICByZXN1bHQgPSAqZXhwKys7CistICBzd2l0Y2ggKHJlc3VsdCkKKy0gICAgeworLSAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CistICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKy0gICAgICB7CistCXVuc2lnbmVkIGxvbmcgaW50IG4gPSByZXN1bHQgLSAnMCc7CistCXdoaWxlIChleHBbMF0gPj0gJzAnICYmIGV4cFswXSA8PSAnOScpCistCSAgeworLQkgICAgbiAqPSAxMDsKKy0JICAgIG4gKz0gZXhwWzBdIC0gJzAnOworLQkgICAgKytleHA7CistCSAgfQorLQlsdmFsLT5udW0gPSBuOworLQlyZXN1bHQgPSBOVU1CRVI7CistICAgICAgfQorLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlICc9JzoKKy0gICAgICBpZiAoZXhwWzBdID09ICc9JykKKy0JeworLQkgICsrZXhwOworLQkgIGx2YWwtPm9wID0gZXF1YWw7CistCSAgcmVzdWx0ID0gRVFVT1AyOworLQl9CistICAgICAgZWxzZQorLQlyZXN1bHQgPSBZWUVSUkNPREU7CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJyEnOgorLSAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorLQl7CistCSAgKytleHA7CistCSAgbHZhbC0+b3AgPSBub3RfZXF1YWw7CistCSAgcmVzdWx0ID0gRVFVT1AyOworLQl9CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJyYnOgorLSAgICBjYXNlICd8JzoKKy0gICAgICBpZiAoZXhwWzBdID09IHJlc3VsdCkKKy0JKytleHA7CistICAgICAgZWxzZQorLQlyZXN1bHQgPSBZWUVSUkNPREU7CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJzwnOgorLSAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorLQl7CistCSAgKytleHA7CistCSAgbHZhbC0+b3AgPSBsZXNzX29yX2VxdWFsOworLQl9CistICAgICAgZWxzZQorLQlsdmFsLT5vcCA9IGxlc3NfdGhhbjsKKy0gICAgICByZXN1bHQgPSBDTVBPUDI7CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJz4nOgorLSAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorLQl7CistCSAgKytleHA7CistCSAgbHZhbC0+b3AgPSBncmVhdGVyX29yX2VxdWFsOworLQl9CistICAgICAgZWxzZQorLQlsdmFsLT5vcCA9IGdyZWF0ZXJfdGhhbjsKKy0gICAgICByZXN1bHQgPSBDTVBPUDI7CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJyonOgorLSAgICAgIGx2YWwtPm9wID0gbXVsdDsKKy0gICAgICByZXN1bHQgPSBNVUxPUDI7CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJy8nOgorLSAgICAgIGx2YWwtPm9wID0gZGl2aWRlOworLSAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKy0gICAgICBicmVhazsKKy0KKy0gICAgY2FzZSAnJSc6CistICAgICAgbHZhbC0+b3AgPSBtb2R1bGU7CistICAgICAgcmVzdWx0ID0gTVVMT1AyOworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlICcrJzoKKy0gICAgICBsdmFsLT5vcCA9IHBsdXM7CistICAgICAgcmVzdWx0ID0gQURET1AyOworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlICctJzoKKy0gICAgICBsdmFsLT5vcCA9IG1pbnVzOworLSAgICAgIHJlc3VsdCA9IEFERE9QMjsKKy0gICAgICBicmVhazsKKy0KKy0gICAgY2FzZSAnbic6CistICAgIGNhc2UgJz8nOgorLSAgICBjYXNlICc6JzoKKy0gICAgY2FzZSAnKCc6CistICAgIGNhc2UgJyknOgorLSAgICAgIC8qIE5vdGhpbmcsIGp1c3QgcmV0dXJuIHRoZSBjaGFyYWN0ZXIuICAqLworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlICc7JzoKKy0gICAgY2FzZSAnXG4nOgorLSAgICBjYXNlICdcMCc6CistICAgICAgLyogQmUgc2FmZSBhbmQgbGV0IHRoZSB1c2VyIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4gICovCistICAgICAgLS1leHA7CistICAgICAgcmVzdWx0ID0gWVlFT0Y7CistICAgICAgYnJlYWs7CistCistICAgIGRlZmF1bHQ6CistICAgICAgcmVzdWx0ID0gWVlFUlJDT0RFOworLSNpZiBZWURFQlVHICE9IDAKKy0gICAgICAtLWV4cDsKKy0jZW5kaWYKKy0gICAgICBicmVhazsKKy0gICAgfQorLQorLSAgKnBleHAgPSBleHA7CistCistICByZXR1cm4gcmVzdWx0OworLX0KKy0KKy0KKy1zdGF0aWMgdm9pZAorLXl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cikKKy17CistICAvKiBEbyBub3RoaW5nLiAgV2UgZG9uJ3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMgaGVyZS4gICovCistfQorLQorLS0tIGEvaW50bC9wbHVyYWwueQorKysrIC9kZXYvbnVsbAorQEAgLTEsMzg1ICswLDAgQEAKKy0leworLS8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLS8qIEZvciBiaXNvbiA8IDIuMCwgdGhlIGJpc29uIGdlbmVyYXRlZCBwYXJzZXIgdXNlcyBhbGxvY2EuICBBSVggMyBmb3JjZXMgdXMKKy0gICB0byBwdXQgdGhpcyBkZWNsYXJhdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlIGRlY2xhcmF0aW9uIGluCistICAgYmlzb24ncyBza2VsZXRvbiBmaWxlIGNvbWVzIHRvbyBsYXRlLiAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4KKy0gICBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUgYXJiaXRyYXJ5IHN5c3RlbSBoZWFkZXJzLgorLSAgIFRoaXMgY2FuIGdvIGF3YXkgb25jZSB0aGUgQU1fSU5UTF9TVUJESVIgbWFjcm8gcmVxdWlyZXMgYmlzb24gPj0gMi4wLiAgKi8KKy0jaWYgZGVmaW5lZCBfQUlYICYmICFkZWZpbmVkIF9fR05VQ19fCistICNwcmFnbWEgYWxsb2NhCistI2VuZGlmCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCistCistLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorLSAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworLSNpZm5kZWYgX0xJQkMKKy0jIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKy0jZW5kaWYKKy0KKy0jZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCistI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworLSV9CistJXB1cmVfcGFyc2VyCistJWV4cGVjdCA3CistCistJXVuaW9uIHsKKy0gIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKy0gIGVudW0gZXhwcmVzc2lvbl9vcGVyYXRvciBvcDsKKy0gIHN0cnVjdCBleHByZXNzaW9uICpleHA7CistfQorLQorLSV7CistLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKy1zdGF0aWMgaW50IHl5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCk7Cistc3RhdGljIHZvaWQgeXllcnJvciAoY29uc3QgY2hhciAqc3RyKTsKKy0KKy0vKiBBbGxvY2F0aW9uIG9mIGV4cHJlc3Npb25zLiAgKi8KKy0KKy1zdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorLW5ld19leHAgKGludCBuYXJncywgZW51bSBleHByZXNzaW9uX29wZXJhdG9yIG9wLAorLQkgc3RydWN0IGV4cHJlc3Npb24gKiBjb25zdCAqYXJncykKKy17CistICBpbnQgaTsKKy0gIHN0cnVjdCBleHByZXNzaW9uICpuZXdwOworLQorLSAgLyogSWYgYW55IG9mIHRoZSBhcmd1bWVudCBjb3VsZCBub3QgYmUgbWFsbG9jJ2VkLCBqdXN0IHJldHVybiBOVUxMLiAgKi8KKy0gIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCistICAgIGlmIChhcmdzW2ldID09IE5VTEwpCistICAgICAgZ290byBmYWlsOworLQorLSAgLyogQWxsb2NhdGUgYSBuZXcgZXhwcmVzc2lvbi4gICovCistICBuZXdwID0gKHN0cnVjdCBleHByZXNzaW9uICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOworLSAgaWYgKG5ld3AgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIG5ld3AtPm5hcmdzID0gbmFyZ3M7CistICAgICAgbmV3cC0+b3BlcmF0aW9uID0gb3A7CistICAgICAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKy0JbmV3cC0+dmFsLmFyZ3NbaV0gPSBhcmdzW2ldOworLSAgICAgIHJldHVybiBuZXdwOworLSAgICB9CistCistIGZhaWw6CistICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorLSAgICBGUkVFX0VYUFJFU1NJT04gKGFyZ3NbaV0pOworLQorLSAgcmV0dXJuIE5VTEw7CistfQorLQorLXN0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorLW5ld19leHBfMCAoZW51bSBleHByZXNzaW9uX29wZXJhdG9yIG9wKQorLXsKKy0gIHJldHVybiBuZXdfZXhwICgwLCBvcCwgTlVMTCk7CistfQorLQorLXN0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorLW5ld19leHBfMSAoZW51bSBleHByZXNzaW9uX29wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisteworLSAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMV07CistCistICBhcmdzWzBdID0gcmlnaHQ7CistICByZXR1cm4gbmV3X2V4cCAoMSwgb3AsIGFyZ3MpOworLX0KKy0KKy1zdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorLW5ld19leHBfMiAoZW51bSBleHByZXNzaW9uX29wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqbGVmdCwKKy0JICAgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorLXsKKy0gIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzJdOworLQorLSAgYXJnc1swXSA9IGxlZnQ7CistICBhcmdzWzFdID0gcmlnaHQ7CistICByZXR1cm4gbmV3X2V4cCAoMiwgb3AsIGFyZ3MpOworLX0KKy0KKy1zdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKy1uZXdfZXhwXzMgKGVudW0gZXhwcmVzc2lvbl9vcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmJleHAsCistCSAgIHN0cnVjdCBleHByZXNzaW9uICp0YnJhbmNoLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqZmJyYW5jaCkKKy17CistICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsKKy0KKy0gIGFyZ3NbMF0gPSBiZXhwOworLSAgYXJnc1sxXSA9IHRicmFuY2g7CistICBhcmdzWzJdID0gZmJyYW5jaDsKKy0gIHJldHVybiBuZXdfZXhwICgzLCBvcCwgYXJncyk7CistfQorLQorLSV9CistCistLyogVGhpcyBkZWNsYXJlcyB0aGF0IGFsbCBvcGVyYXRvcnMgaGF2ZSB0aGUgc2FtZSBhc3NvY2lhdGl2aXR5IGFuZCB0aGUKKy0gICBwcmVjZWRlbmNlIG9yZGVyIGFzIGluIEMuICBTZWUgW0hhcmJpc29uLCBTdGVlbGU6IEMsIEEgUmVmZXJlbmNlIE1hbnVhbF0uCistICAgVGhlcmUgaXMgbm8gdW5hcnkgbWludXMgYW5kIG5vIGJpdHdpc2Ugb3BlcmF0b3JzLgorLSAgIE9wZXJhdG9ycyB3aXRoIHRoZSBzYW1lIHN5bnRhY3RpYyBiZWhhdmlvdXIgaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIGEgc2luZ2xlCistICAgdG9rZW4sIHRvIHNhdmUgc3BhY2UgaW4gdGhlIGFycmF5IGdlbmVyYXRlZCBieSBiaXNvbi4gICovCistJXJpZ2h0ICc/JwkJLyogICA/CQkqLworLSVsZWZ0ICd8JwkJLyogICB8fAkJKi8KKy0lbGVmdCAnJicJCS8qICAgJiYJCSovCistJWxlZnQgRVFVT1AyCQkvKiAgID09ICE9CSovCistJWxlZnQgQ01QT1AyCQkvKiAgIDwgPiA8PSA+PQkqLworLSVsZWZ0IEFERE9QMgkJLyogICArIC0JKi8KKy0lbGVmdCBNVUxPUDIJCS8qICAgKiAvICUJKi8KKy0lcmlnaHQgJyEnCQkvKiAgICEJCSovCistCistJXRva2VuIDxvcD4gRVFVT1AyIENNUE9QMiBBRERPUDIgTVVMT1AyCistJXRva2VuIDxudW0+IE5VTUJFUgorLSV0eXBlIDxleHA+IGV4cAorLQorLSUlCistCistc3RhcnQ6CSAgZXhwCistCSAgeworLQkgICAgaWYgKCQxID09IE5VTEwpCistCSAgICAgIFlZQUJPUlQ7CistCSAgICAoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPnJlcyA9ICQxOworLQkgIH0KKy0JOworLQorLWV4cDoJICBleHAgJz8nIGV4cCAnOicgZXhwCistCSAgeworLQkgICAgJCQgPSBuZXdfZXhwXzMgKHFtb3AsICQxLCAkMywgJDUpOworLQkgIH0KKy0JfCBleHAgJ3wnIGV4cAorLQkgIHsKKy0JICAgICQkID0gbmV3X2V4cF8yIChsb3IsICQxLCAkMyk7CistCSAgfQorLQl8IGV4cCAnJicgZXhwCistCSAgeworLQkgICAgJCQgPSBuZXdfZXhwXzIgKGxhbmQsICQxLCAkMyk7CistCSAgfQorLQl8IGV4cCBFUVVPUDIgZXhwCistCSAgeworLQkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworLQkgIH0KKy0JfCBleHAgQ01QT1AyIGV4cAorLQkgIHsKKy0JICAgICQkID0gbmV3X2V4cF8yICgkMiwgJDEsICQzKTsKKy0JICB9CistCXwgZXhwIEFERE9QMiBleHAKKy0JICB7CistCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CistCSAgfQorLQl8IGV4cCBNVUxPUDIgZXhwCistCSAgeworLQkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworLQkgIH0KKy0JfCAnIScgZXhwCistCSAgeworLQkgICAgJCQgPSBuZXdfZXhwXzEgKGxub3QsICQyKTsKKy0JICB9CistCXwgJ24nCistCSAgeworLQkgICAgJCQgPSBuZXdfZXhwXzAgKHZhcik7CistCSAgfQorLQl8IE5VTUJFUgorLQkgIHsKKy0JICAgIGlmICgoJCQgPSBuZXdfZXhwXzAgKG51bSkpICE9IE5VTEwpCistCSAgICAgICQkLT52YWwubnVtID0gJDE7CistCSAgfQorLQl8ICcoJyBleHAgJyknCistCSAgeworLQkgICAgJCQgPSAkMjsKKy0JICB9CistCTsKKy0KKy0lJQorLQorLXZvaWQKKy1pbnRlcm5hbF9mdW5jdGlvbgorLUZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKKy17CistICBpZiAoZXhwID09IE5VTEwpCistICAgIHJldHVybjsKKy0KKy0gIC8qIEhhbmRsZSB0aGUgcmVjdXJzaXZlIGNhc2UuICAqLworLSAgc3dpdGNoIChleHAtPm5hcmdzKQorLSAgICB7CistICAgIGNhc2UgMzoKKy0gICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMl0pOworLSAgICAgIC8qIEZBTExUSFJPVUdIICovCistICAgIGNhc2UgMjoKKy0gICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMV0pOworLSAgICAgIC8qIEZBTExUSFJPVUdIICovCistICAgIGNhc2UgMToKKy0gICAgICBGUkVFX0VYUFJFU1NJT04gKGV4cC0+dmFsLmFyZ3NbMF0pOworLSAgICAgIC8qIEZBTExUSFJPVUdIICovCistICAgIGRlZmF1bHQ6CistICAgICAgYnJlYWs7CistICAgIH0KKy0KKy0gIGZyZWUgKGV4cCk7CistfQorLQorLQorLXN0YXRpYyBpbnQKKy15eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApCisteworLSAgY29uc3QgY2hhciAqZXhwID0gKnBleHA7CistICBpbnQgcmVzdWx0OworLQorLSAgd2hpbGUgKDEpCistICAgIHsKKy0gICAgICBpZiAoZXhwWzBdID09ICdcMCcpCistCXsKKy0JICAqcGV4cCA9IGV4cDsKKy0JICByZXR1cm4gWVlFT0Y7CistCX0KKy0KKy0gICAgICBpZiAoZXhwWzBdICE9ICcgJyAmJiBleHBbMF0gIT0gJ1x0JykKKy0JYnJlYWs7CistCistICAgICAgKytleHA7CistICAgIH0KKy0KKy0gIHJlc3VsdCA9ICpleHArKzsKKy0gIHN3aXRjaCAocmVzdWx0KQorLSAgICB7CistICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKy0gICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorLSAgICAgIHsKKy0JdW5zaWduZWQgbG9uZyBpbnQgbiA9IHJlc3VsdCAtICcwJzsKKy0Jd2hpbGUgKGV4cFswXSA+PSAnMCcgJiYgZXhwWzBdIDw9ICc5JykKKy0JICB7CistCSAgICBuICo9IDEwOworLQkgICAgbiArPSBleHBbMF0gLSAnMCc7CistCSAgICArK2V4cDsKKy0JICB9CistCWx2YWwtPm51bSA9IG47CistCXJlc3VsdCA9IE5VTUJFUjsKKy0gICAgICB9CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJz0nOgorLSAgICAgIGlmIChleHBbMF0gPT0gJz0nKQorLQl7CistCSAgKytleHA7CistCSAgbHZhbC0+b3AgPSBlcXVhbDsKKy0JICByZXN1bHQgPSBFUVVPUDI7CistCX0KKy0gICAgICBlbHNlCistCXJlc3VsdCA9IFlZRVJSQ09ERTsKKy0gICAgICBicmVhazsKKy0KKy0gICAgY2FzZSAnISc6CistICAgICAgaWYgKGV4cFswXSA9PSAnPScpCistCXsKKy0JICArK2V4cDsKKy0JICBsdmFsLT5vcCA9IG5vdF9lcXVhbDsKKy0JICByZXN1bHQgPSBFUVVPUDI7CistCX0KKy0gICAgICBicmVhazsKKy0KKy0gICAgY2FzZSAnJic6CistICAgIGNhc2UgJ3wnOgorLSAgICAgIGlmIChleHBbMF0gPT0gcmVzdWx0KQorLQkrK2V4cDsKKy0gICAgICBlbHNlCistCXJlc3VsdCA9IFlZRVJSQ09ERTsKKy0gICAgICBicmVhazsKKy0KKy0gICAgY2FzZSAnPCc6CistICAgICAgaWYgKGV4cFswXSA9PSAnPScpCistCXsKKy0JICArK2V4cDsKKy0JICBsdmFsLT5vcCA9IGxlc3Nfb3JfZXF1YWw7CistCX0KKy0gICAgICBlbHNlCistCWx2YWwtPm9wID0gbGVzc190aGFuOworLSAgICAgIHJlc3VsdCA9IENNUE9QMjsKKy0gICAgICBicmVhazsKKy0KKy0gICAgY2FzZSAnPic6CistICAgICAgaWYgKGV4cFswXSA9PSAnPScpCistCXsKKy0JICArK2V4cDsKKy0JICBsdmFsLT5vcCA9IGdyZWF0ZXJfb3JfZXF1YWw7CistCX0KKy0gICAgICBlbHNlCistCWx2YWwtPm9wID0gZ3JlYXRlcl90aGFuOworLSAgICAgIHJlc3VsdCA9IENNUE9QMjsKKy0gICAgICBicmVhazsKKy0KKy0gICAgY2FzZSAnKic6CistICAgICAgbHZhbC0+b3AgPSBtdWx0OworLSAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKy0gICAgICBicmVhazsKKy0KKy0gICAgY2FzZSAnLyc6CistICAgICAgbHZhbC0+b3AgPSBkaXZpZGU7CistICAgICAgcmVzdWx0ID0gTVVMT1AyOworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlICclJzoKKy0gICAgICBsdmFsLT5vcCA9IG1vZHVsZTsKKy0gICAgICByZXN1bHQgPSBNVUxPUDI7CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJysnOgorLSAgICAgIGx2YWwtPm9wID0gcGx1czsKKy0gICAgICByZXN1bHQgPSBBRERPUDI7CistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJy0nOgorLSAgICAgIGx2YWwtPm9wID0gbWludXM7CistICAgICAgcmVzdWx0ID0gQURET1AyOworLSAgICAgIGJyZWFrOworLQorLSAgICBjYXNlICduJzoKKy0gICAgY2FzZSAnPyc6CistICAgIGNhc2UgJzonOgorLSAgICBjYXNlICcoJzoKKy0gICAgY2FzZSAnKSc6CistICAgICAgLyogTm90aGluZywganVzdCByZXR1cm4gdGhlIGNoYXJhY3Rlci4gICovCistICAgICAgYnJlYWs7CistCistICAgIGNhc2UgJzsnOgorLSAgICBjYXNlICdcbic6CistICAgIGNhc2UgJ1wwJzoKKy0gICAgICAvKiBCZSBzYWZlIGFuZCBsZXQgdGhlIHVzZXIgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLiAgKi8KKy0gICAgICAtLWV4cDsKKy0gICAgICByZXN1bHQgPSBZWUVPRjsKKy0gICAgICBicmVhazsKKy0KKy0gICAgZGVmYXVsdDoKKy0gICAgICByZXN1bHQgPSBZWUVSUkNPREU7CistI2lmIFlZREVCVUcgIT0gMAorLSAgICAgIC0tZXhwOworLSNlbmRpZgorLSAgICAgIGJyZWFrOworLSAgICB9CistCistICAqcGV4cCA9IGV4cDsKKy0KKy0gIHJldHVybiByZXN1bHQ7CistfQorLQorLQorLXN0YXRpYyB2b2lkCisteXllcnJvciAoY29uc3QgY2hhciAqc3RyKQorLXsKKy0gIC8qIERvIG5vdGhpbmcuICBXZSBkb24ndCBwcmludCBlcnJvciBtZXNzYWdlcyBoZXJlLiAgKi8KKy19CistLS0gYS9pbnRsL3ByaW50Zi1hcmdzLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDE4OCArMCwwIEBACistLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMywgMjAwNS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistLyogVGhpcyBmaWxlIGNhbiBiZSBwYXJhbWV0cml6ZWQgd2l0aCB0aGUgZm9sbG93aW5nIG1hY3JvczoKKy0gICAgIEVOQUJMRV9VTklTVERJTyAgICBTZXQgdG8gMSB0byBlbmFibGUgdGhlIHVuaXN0ZGlvIGV4dGVuc2lvbnMuCistICAgICBQUklOVEZfRkVUQ0hBUkdTICAgTmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgZGVmaW5lZC4KKy0gICAgIFNUQVRJQyAgICAgICAgICAgICBTZXQgdG8gJ3N0YXRpYycgdG8gZGVjbGFyZSB0aGUgZnVuY3Rpb24gc3RhdGljLiAgKi8KKy0KKy0jaWZuZGVmIFBSSU5URl9GRVRDSEFSR1MKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLS8qIFNwZWNpZmljYXRpb24uICAqLworLSNpZm5kZWYgUFJJTlRGX0ZFVENIQVJHUworLSMgaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKy0jZW5kaWYKKy0KKy0jaWZkZWYgU1RBVElDCistU1RBVElDCistI2VuZGlmCistaW50CistUFJJTlRGX0ZFVENIQVJHUyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpCisteworLSAgc2l6ZV90IGk7CistICBhcmd1bWVudCAqYXA7CistCistICBmb3IgKGkgPSAwLCBhcCA9ICZhLT5hcmdbMF07IGkgPCBhLT5jb3VudDsgaSsrLCBhcCsrKQorLSAgICBzd2l0Y2ggKGFwLT50eXBlKQorLSAgICAgIHsKKy0gICAgICBjYXNlIFRZUEVfU0NIQVI6CistCWFwLT5hLmFfc2NoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qc2lnbmVkIGNoYXIqLyBpbnQpOworLQlicmVhazsKKy0gICAgICBjYXNlIFRZUEVfVUNIQVI6CistCWFwLT5hLmFfdWNoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgY2hhciovIGludCk7CistCWJyZWFrOworLSAgICAgIGNhc2UgVFlQRV9TSE9SVDoKKy0JYXAtPmEuYV9zaG9ydCA9IHZhX2FyZyAoYXJncywgLypzaG9ydCovIGludCk7CistCWJyZWFrOworLSAgICAgIGNhc2UgVFlQRV9VU0hPUlQ6CistCWFwLT5hLmFfdXNob3J0ID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIHNob3J0Ki8gaW50KTsKKy0JYnJlYWs7CistICAgICAgY2FzZSBUWVBFX0lOVDoKKy0JYXAtPmEuYV9pbnQgPSB2YV9hcmcgKGFyZ3MsIGludCk7CistCWJyZWFrOworLSAgICAgIGNhc2UgVFlQRV9VSU5UOgorLQlhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7CistCWJyZWFrOworLSAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorLQlhcC0+YS5hX2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50KTsKKy0JYnJlYWs7CistICAgICAgY2FzZSBUWVBFX1VMT05HSU5UOgorLQlhcC0+YS5hX3Vsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGludCk7CistCWJyZWFrOworLSNpZiBIQVZFX0xPTkdfTE9OR19JTlQKKy0gICAgICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6CistCWFwLT5hLmFfbG9uZ2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgbG9uZyBpbnQpOworLQlicmVhazsKKy0gICAgICBjYXNlIFRZUEVfVUxPTkdMT05HSU5UOgorLQlhcC0+YS5hX3Vsb25nbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgdW5zaWduZWQgbG9uZyBsb25nIGludCk7CistCWJyZWFrOworLSNlbmRpZgorLSAgICAgIGNhc2UgVFlQRV9ET1VCTEU6CistCWFwLT5hLmFfZG91YmxlID0gdmFfYXJnIChhcmdzLCBkb3VibGUpOworLQlicmVhazsKKy0gICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKy0JYXAtPmEuYV9sb25nZG91YmxlID0gdmFfYXJnIChhcmdzLCBsb25nIGRvdWJsZSk7CistCWJyZWFrOworLSAgICAgIGNhc2UgVFlQRV9DSEFSOgorLQlhcC0+YS5hX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIGludCk7CistCWJyZWFrOworLSNpZiBIQVZFX1dJTlRfVAorLSAgICAgIGNhc2UgVFlQRV9XSURFX0NIQVI6CistCS8qIEFsdGhvdWdoIElTTyBDIDk5IDcuMjQuMS4oMikgc2F5cyB0aGF0IHdpbnRfdCBpcyAidW5jaGFuZ2VkIGJ5CistCSAgIGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9ucyIsIHRoaXMgaXMgbm90IHRoZSBjYXNlIGluIG1pbmd3MzIsCistCSAgIHdoZXJlIHdpbnRfdCBpcyAndW5zaWduZWQgc2hvcnQnLiAgKi8KKy0JYXAtPmEuYV93aWRlX2NoYXIgPQorLQkgIChzaXplb2YgKHdpbnRfdCkgPCBzaXplb2YgKGludCkKKy0JICAgPyB2YV9hcmcgKGFyZ3MsIGludCkKKy0JICAgOiB2YV9hcmcgKGFyZ3MsIHdpbnRfdCkpOworLQlicmVhazsKKy0jZW5kaWYKKy0gICAgICBjYXNlIFRZUEVfU1RSSU5HOgorLQlhcC0+YS5hX3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3QgY2hhciAqKTsKKy0JLyogQSBudWxsIHBvaW50ZXIgaXMgYW4gaW52YWxpZCBhcmd1bWVudCBmb3IgIiVzIiwgYnV0IGluIHByYWN0aWNlCistCSAgIGl0IG9jY3VycyBxdWl0ZSBmcmVxdWVudGx5IGluIHByaW50ZiBzdGF0ZW1lbnRzIHRoYXQgcHJvZHVjZQorLQkgICBkZWJ1ZyBvdXRwdXQuICBVc2UgYSBmYWxsYmFjayBpbiB0aGlzIGNhc2UuICAqLworLQlpZiAoYXAtPmEuYV9zdHJpbmcgPT0gTlVMTCkKKy0JICBhcC0+YS5hX3N0cmluZyA9ICIoTlVMTCkiOworLQlicmVhazsKKy0jaWYgSEFWRV9XQ0hBUl9UCistICAgICAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorLQlhcC0+YS5hX3dpZGVfc3RyaW5nID0gdmFfYXJnIChhcmdzLCBjb25zdCB3Y2hhcl90ICopOworLQkvKiBBIG51bGwgcG9pbnRlciBpcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGZvciAiJWxzIiwgYnV0IGluIHByYWN0aWNlCistCSAgIGl0IG9jY3VycyBxdWl0ZSBmcmVxdWVudGx5IGluIHByaW50ZiBzdGF0ZW1lbnRzIHRoYXQgcHJvZHVjZQorLQkgICBkZWJ1ZyBvdXRwdXQuICBVc2UgYSBmYWxsYmFjayBpbiB0aGlzIGNhc2UuICAqLworLQlpZiAoYXAtPmEuYV93aWRlX3N0cmluZyA9PSBOVUxMKQorLQkgIHsKKy0JICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IHdpZGVfbnVsbF9zdHJpbmdbXSA9CistCSAgICAgIHsKKy0JCSh3Y2hhcl90KScoJywKKy0JCSh3Y2hhcl90KSdOJywgKHdjaGFyX3QpJ1UnLCAod2NoYXJfdCknTCcsICh3Y2hhcl90KSdMJywKKy0JCSh3Y2hhcl90KScpJywKKy0JCSh3Y2hhcl90KTAKKy0JICAgICAgfTsKKy0JICAgIGFwLT5hLmFfd2lkZV9zdHJpbmcgPSB3aWRlX251bGxfc3RyaW5nOworLQkgIH0KKy0JYnJlYWs7CistI2VuZGlmCistICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CistCWFwLT5hLmFfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgdm9pZCAqKTsKKy0JYnJlYWs7CistICAgICAgY2FzZSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI6CistCWFwLT5hLmFfY291bnRfc2NoYXJfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgc2lnbmVkIGNoYXIgKik7CistCWJyZWFrOworLSAgICAgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgorLQlhcC0+YS5hX2NvdW50X3Nob3J0X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHNob3J0ICopOworLQlicmVhazsKKy0gICAgICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CistCWFwLT5hLmFfY291bnRfaW50X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIGludCAqKTsKKy0JYnJlYWs7CistICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKy0JYXAtPmEuYV9jb3VudF9sb25naW50X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50ICopOworLQlicmVhazsKKy0jaWYgSEFWRV9MT05HX0xPTkdfSU5UCistICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CistCWFwLT5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCAqKTsKKy0JYnJlYWs7CistI2VuZGlmCistI2lmIEVOQUJMRV9VTklTVERJTworLSAgICAgIC8qIFRoZSB1bmlzdGRpbyBleHRlbnNpb25zLiAgKi8KKy0gICAgICBjYXNlIFRZUEVfVThfU1RSSU5HOgorLQlhcC0+YS5hX3U4X3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3QgdWludDhfdCAqKTsKKy0JLyogQSBudWxsIHBvaW50ZXIgaXMgYW4gaW52YWxpZCBhcmd1bWVudCBmb3IgIiVVIiwgYnV0IGluIHByYWN0aWNlCistCSAgIGl0IG9jY3VycyBxdWl0ZSBmcmVxdWVudGx5IGluIHByaW50ZiBzdGF0ZW1lbnRzIHRoYXQgcHJvZHVjZQorLQkgICBkZWJ1ZyBvdXRwdXQuICBVc2UgYSBmYWxsYmFjayBpbiB0aGlzIGNhc2UuICAqLworLQlpZiAoYXAtPmEuYV91OF9zdHJpbmcgPT0gTlVMTCkKKy0JICB7CistCSAgICBzdGF0aWMgY29uc3QgdWludDhfdCB1OF9udWxsX3N0cmluZ1tdID0KKy0JICAgICAgeyAnKCcsICdOJywgJ1UnLCAnTCcsICdMJywgJyknLCAwIH07CistCSAgICBhcC0+YS5hX3U4X3N0cmluZyA9IHU4X251bGxfc3RyaW5nOworLQkgIH0KKy0JYnJlYWs7CistICAgICAgY2FzZSBUWVBFX1UxNl9TVFJJTkc6CistCWFwLT5hLmFfdTE2X3N0cmluZyA9IHZhX2FyZyAoYXJncywgY29uc3QgdWludDE2X3QgKik7CistCS8qIEEgbnVsbCBwb2ludGVyIGlzIGFuIGludmFsaWQgYXJndW1lbnQgZm9yICIlbFUiLCBidXQgaW4gcHJhY3RpY2UKKy0JICAgaXQgb2NjdXJzIHF1aXRlIGZyZXF1ZW50bHkgaW4gcHJpbnRmIHN0YXRlbWVudHMgdGhhdCBwcm9kdWNlCistCSAgIGRlYnVnIG91dHB1dC4gIFVzZSBhIGZhbGxiYWNrIGluIHRoaXMgY2FzZS4gICovCistCWlmIChhcC0+YS5hX3UxNl9zdHJpbmcgPT0gTlVMTCkKKy0JICB7CistCSAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgdTE2X251bGxfc3RyaW5nW10gPQorLQkgICAgICB7ICcoJywgJ04nLCAnVScsICdMJywgJ0wnLCAnKScsIDAgfTsKKy0JICAgIGFwLT5hLmFfdTE2X3N0cmluZyA9IHUxNl9udWxsX3N0cmluZzsKKy0JICB9CistCWJyZWFrOworLSAgICAgIGNhc2UgVFlQRV9VMzJfU1RSSU5HOgorLQlhcC0+YS5hX3UzMl9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IHVpbnQzMl90ICopOworLQkvKiBBIG51bGwgcG9pbnRlciBpcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGZvciAiJWxsVSIsIGJ1dCBpbiBwcmFjdGljZQorLQkgICBpdCBvY2N1cnMgcXVpdGUgZnJlcXVlbnRseSBpbiBwcmludGYgc3RhdGVtZW50cyB0aGF0IHByb2R1Y2UKKy0JICAgZGVidWcgb3V0cHV0LiAgVXNlIGEgZmFsbGJhY2sgaW4gdGhpcyBjYXNlLiAgKi8KKy0JaWYgKGFwLT5hLmFfdTMyX3N0cmluZyA9PSBOVUxMKQorLQkgIHsKKy0JICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB1MzJfbnVsbF9zdHJpbmdbXSA9CistCSAgICAgIHsgJygnLCAnTicsICdVJywgJ0wnLCAnTCcsICcpJywgMCB9OworLQkgICAgYXAtPmEuYV91MzJfc3RyaW5nID0gdTMyX251bGxfc3RyaW5nOworLQkgIH0KKy0JYnJlYWs7CistI2VuZGlmCistICAgICAgZGVmYXVsdDoKKy0JLyogVW5rbm93biB0eXBlLiAgKi8KKy0JcmV0dXJuIC0xOworLSAgICAgIH0KKy0gIHJldHVybiAwOworLX0KKy0tLSBhL2ludGwvcHJpbnRmLWFyZ3MuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsMTU1ICswLDAgQEAKKy0vKiBEZWNvbXBvc2VkIHByaW50ZiBhcmd1bWVudCBsaXN0LgorLSAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzLCAyMDA2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9QUklOVEZfQVJHU19ICistI2RlZmluZSBfUFJJTlRGX0FSR1NfSAorLQorLS8qIFRoaXMgZmlsZSBjYW4gYmUgcGFyYW1ldHJpemVkIHdpdGggdGhlIGZvbGxvd2luZyBtYWNyb3M6CistICAgICBFTkFCTEVfVU5JU1RESU8gICAgU2V0IHRvIDEgdG8gZW5hYmxlIHRoZSB1bmlzdGRpbyBleHRlbnNpb25zLgorLSAgICAgUFJJTlRGX0ZFVENIQVJHUyAgIE5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGRlY2xhcmVkLgorLSAgICAgU1RBVElDICAgICAgICAgICAgIFNldCB0byAnc3RhdGljJyB0byBkZWNsYXJlIHRoZSBmdW5jdGlvbiBzdGF0aWMuICAqLworLQorLS8qIERlZmF1bHQgcGFyYW1ldGVycy4gICovCistI2lmbmRlZiBQUklOVEZfRkVUQ0hBUkdTCistIyBkZWZpbmUgUFJJTlRGX0ZFVENIQVJHUyBwcmludGZfZmV0Y2hhcmdzCistI2VuZGlmCistCistLyogR2V0IHNpemVfdC4gICovCistI2luY2x1ZGUgPHN0ZGRlZi5oPgorLQorLS8qIEdldCB3Y2hhcl90LiAgKi8KKy0jaWYgSEFWRV9XQ0hBUl9UCistIyBpbmNsdWRlIDxzdGRkZWYuaD4KKy0jZW5kaWYKKy0KKy0vKiBHZXQgd2ludF90LiAgKi8KKy0jaWYgSEFWRV9XSU5UX1QKKy0jIGluY2x1ZGUgPHdjaGFyLmg+CistI2VuZGlmCistCistLyogR2V0IHZhX2xpc3QuICAqLworLSNpbmNsdWRlIDxzdGRhcmcuaD4KKy0KKy0KKy0vKiBBcmd1bWVudCB0eXBlcyAqLworLXR5cGVkZWYgZW51bQorLXsKKy0gIFRZUEVfTk9ORSwKKy0gIFRZUEVfU0NIQVIsCistICBUWVBFX1VDSEFSLAorLSAgVFlQRV9TSE9SVCwKKy0gIFRZUEVfVVNIT1JULAorLSAgVFlQRV9JTlQsCistICBUWVBFX1VJTlQsCistICBUWVBFX0xPTkdJTlQsCistICBUWVBFX1VMT05HSU5ULAorLSNpZiBIQVZFX0xPTkdfTE9OR19JTlQKKy0gIFRZUEVfTE9OR0xPTkdJTlQsCistICBUWVBFX1VMT05HTE9OR0lOVCwKKy0jZW5kaWYKKy0gIFRZUEVfRE9VQkxFLAorLSAgVFlQRV9MT05HRE9VQkxFLAorLSAgVFlQRV9DSEFSLAorLSNpZiBIQVZFX1dJTlRfVAorLSAgVFlQRV9XSURFX0NIQVIsCistI2VuZGlmCistICBUWVBFX1NUUklORywKKy0jaWYgSEFWRV9XQ0hBUl9UCistICBUWVBFX1dJREVfU1RSSU5HLAorLSNlbmRpZgorLSAgVFlQRV9QT0lOVEVSLAorLSAgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSLAorLSAgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSLAorLSAgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUiwKKy0gIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSCistI2lmIEhBVkVfTE9OR19MT05HX0lOVAorLSwgVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSCistI2VuZGlmCistI2lmIEVOQUJMRV9VTklTVERJTworLSAgLyogVGhlIHVuaXN0ZGlvIGV4dGVuc2lvbnMuICAqLworLSwgVFlQRV9VOF9TVFJJTkcKKy0sIFRZUEVfVTE2X1NUUklORworLSwgVFlQRV9VMzJfU1RSSU5HCistI2VuZGlmCistfSBhcmdfdHlwZTsKKy0KKy0vKiBQb2x5bW9ycGhpYyBhcmd1bWVudCAqLworLXR5cGVkZWYgc3RydWN0CisteworLSAgYXJnX3R5cGUgdHlwZTsKKy0gIHVuaW9uCistICB7CistICAgIHNpZ25lZCBjaGFyCQkJYV9zY2hhcjsKKy0gICAgdW5zaWduZWQgY2hhcgkJYV91Y2hhcjsKKy0gICAgc2hvcnQJCQlhX3Nob3J0OworLSAgICB1bnNpZ25lZCBzaG9ydAkJYV91c2hvcnQ7CistICAgIGludAkJCQlhX2ludDsKKy0gICAgdW5zaWduZWQgaW50CQlhX3VpbnQ7CistICAgIGxvbmcgaW50CQkJYV9sb25naW50OworLSAgICB1bnNpZ25lZCBsb25nIGludAkJYV91bG9uZ2ludDsKKy0jaWYgSEFWRV9MT05HX0xPTkdfSU5UCistICAgIGxvbmcgbG9uZyBpbnQJCWFfbG9uZ2xvbmdpbnQ7CistICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQJYV91bG9uZ2xvbmdpbnQ7CistI2VuZGlmCistICAgIGZsb2F0CQkJYV9mbG9hdDsKKy0gICAgZG91YmxlCQkJYV9kb3VibGU7CistICAgIGxvbmcgZG91YmxlCQkJYV9sb25nZG91YmxlOworLSAgICBpbnQJCQkJYV9jaGFyOworLSNpZiBIQVZFX1dJTlRfVAorLSAgICB3aW50X3QJCQlhX3dpZGVfY2hhcjsKKy0jZW5kaWYKKy0gICAgY29uc3QgY2hhcioJCQlhX3N0cmluZzsKKy0jaWYgSEFWRV9XQ0hBUl9UCistICAgIGNvbnN0IHdjaGFyX3QqCQlhX3dpZGVfc3RyaW5nOworLSNlbmRpZgorLSAgICB2b2lkKgkJCWFfcG9pbnRlcjsKKy0gICAgc2lnbmVkIGNoYXIgKgkJYV9jb3VudF9zY2hhcl9wb2ludGVyOworLSAgICBzaG9ydCAqCQkJYV9jb3VudF9zaG9ydF9wb2ludGVyOworLSAgICBpbnQgKgkJCWFfY291bnRfaW50X3BvaW50ZXI7CistICAgIGxvbmcgaW50ICoJCQlhX2NvdW50X2xvbmdpbnRfcG9pbnRlcjsKKy0jaWYgSEFWRV9MT05HX0xPTkdfSU5UCistICAgIGxvbmcgbG9uZyBpbnQgKgkJYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyOworLSNlbmRpZgorLSNpZiBFTkFCTEVfVU5JU1RESU8KKy0gICAgLyogVGhlIHVuaXN0ZGlvIGV4dGVuc2lvbnMuICAqLworLSAgICBjb25zdCB1aW50OF90ICoJCWFfdThfc3RyaW5nOworLSAgICBjb25zdCB1aW50MTZfdCAqCQlhX3UxNl9zdHJpbmc7CistICAgIGNvbnN0IHVpbnQzMl90ICoJCWFfdTMyX3N0cmluZzsKKy0jZW5kaWYKKy0gIH0KKy0gIGE7CistfQorLWFyZ3VtZW50OworLQorLXR5cGVkZWYgc3RydWN0CisteworLSAgc2l6ZV90IGNvdW50OworLSAgYXJndW1lbnQgKmFyZzsKKy19CistYXJndW1lbnRzOworLQorLQorLS8qIEZldGNoIHRoZSBhcmd1bWVudHMsIHB1dHRpbmcgdGhlbSBpbnRvIGEuICovCistI2lmZGVmIFNUQVRJQworLVNUQVRJQworLSNlbHNlCistZXh0ZXJuCistI2VuZGlmCistaW50IFBSSU5URl9GRVRDSEFSR1MgKHZhX2xpc3QgYXJncywgYXJndW1lbnRzICphKTsKKy0KKy0jZW5kaWYgLyogX1BSSU5URl9BUkdTX0ggKi8KKy0tLSBhL2ludGwvcHJpbnRmLXBhcnNlLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDU5MCArMCwwIEBACistLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLgorLSAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwLCAyMDAyLTIwMDMsIDIwMDYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLS8qIFRoaXMgZmlsZSBjYW4gYmUgcGFyYW1ldHJpemVkIHdpdGggdGhlIGZvbGxvd2luZyBtYWNyb3M6CistICAgICBDSEFSX1QgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgZm9ybWF0IHN0cmluZy4KKy0gICAgIENIQVJfVF9PTkxZX0FTQ0lJICBTZXQgdG8gMSB0byBlbmFibGUgdmVyaWZpY2F0aW9uIHRoYXQgYWxsIGNoYXJhY3RlcnMKKy0gICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZm9ybWF0IHN0cmluZyBhcmUgQVNDSUkuCistICAgICBESVJFQ1RJVkUgICAgICAgICAgU3RydWN0dXJlIGRlbm90aW5nIGEgZm9ybWF0IGRpcmVjdGl2ZS4KKy0gICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRzIG9uIENIQVJfVC4KKy0gICAgIERJUkVDVElWRVMgICAgICAgICBTdHJ1Y3R1cmUgZGVub3RpbmcgdGhlIHNldCBvZiBmb3JtYXQgZGlyZWN0aXZlcyBvZiBhCistICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IHN0cmluZy4gIERlcGVuZHMgb24gQ0hBUl9ULgorLSAgICAgUFJJTlRGX1BBUlNFICAgICAgIEZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgZm9ybWF0IHN0cmluZy4KKy0gICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRzIG9uIENIQVJfVC4KKy0gICAgIFNUQVRJQyAgICAgICAgICAgICBTZXQgdG8gJ3N0YXRpYycgdG8gZGVjbGFyZSB0aGUgZnVuY3Rpb24gc3RhdGljLgorLSAgICAgRU5BQkxFX1VOSVNURElPICAgIFNldCB0byAxIHRvIGVuYWJsZSB0aGUgdW5pc3RkaW8gZXh0ZW5zaW9ucy4gICovCistCistI2lmbmRlZiBQUklOVEZfUEFSU0UKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLS8qIFNwZWNpZmljYXRpb24uICAqLworLSNpZm5kZWYgUFJJTlRGX1BBUlNFCistIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKy0jZW5kaWYKKy0KKy0vKiBEZWZhdWx0IHBhcmFtZXRlcnMuICAqLworLSNpZm5kZWYgUFJJTlRGX1BBUlNFCistIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHByaW50Zl9wYXJzZQorLSMgZGVmaW5lIENIQVJfVCBjaGFyCistIyBkZWZpbmUgRElSRUNUSVZFIGNoYXJfZGlyZWN0aXZlCistIyBkZWZpbmUgRElSRUNUSVZFUyBjaGFyX2RpcmVjdGl2ZXMKKy0jZW5kaWYKKy0KKy0vKiBHZXQgc2l6ZV90LCBOVUxMLiAgKi8KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistCistLyogR2V0IGludG1heF90LiAgKi8KKy0jaWYgZGVmaW5lZCBJTl9MSUJJTlRMIHx8IGRlZmluZWQgSU5fTElCQVNQUklOVEYKKy0jIGlmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYCistIyAgaW5jbHVkZSA8c3RkaW50Lmg+CistIyBlbmRpZgorLSMgaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAorLSMgIGluY2x1ZGUgPGludHR5cGVzLmg+CistIyBlbmRpZgorLSNlbHNlCistIyBpbmNsdWRlIDxzdGRpbnQuaD4KKy0jZW5kaWYKKy0KKy0vKiBtYWxsb2MoKSwgcmVhbGxvYygpLCBmcmVlKCkuICAqLworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0KKy0vKiBlcnJuby4gICovCistI2luY2x1ZGUgPGVycm5vLmg+CistCistLyogQ2hlY2tlZCBzaXplX3QgY29tcHV0YXRpb25zLiAgKi8KKy0jaW5jbHVkZSAieHNpemUuaCIKKy0KKy0jaWYgQ0hBUl9UX09OTFlfQVNDSUkKKy0vKiBjX2lzYXNjaWkoKS4gICovCistIyBpbmNsdWRlICJjLWN0eXBlLmgiCistI2VuZGlmCistCistI2lmZGVmIFNUQVRJQworLVNUQVRJQworLSNlbmRpZgorLWludAorLVBSSU5URl9QQVJTRSAoY29uc3QgQ0hBUl9UICpmb3JtYXQsIERJUkVDVElWRVMgKmQsIGFyZ3VtZW50cyAqYSkKKy17CistICBjb25zdCBDSEFSX1QgKmNwID0gZm9ybWF0OwkJLyogcG9pbnRlciBpbnRvIGZvcm1hdCAqLworLSAgc2l6ZV90IGFyZ19wb3NuID0gMDsJCS8qIG51bWJlciBvZiByZWd1bGFyIGFyZ3VtZW50cyBjb25zdW1lZCAqLworLSAgc2l6ZV90IGRfYWxsb2NhdGVkOwkJCS8qIGFsbG9jYXRlZCBlbGVtZW50cyBvZiBkLT5kaXIgKi8KKy0gIHNpemVfdCBhX2FsbG9jYXRlZDsJCQkvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgYS0+YXJnICovCistICBzaXplX3QgbWF4X3dpZHRoX2xlbmd0aCA9IDA7CistICBzaXplX3QgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAwOworLQorLSAgZC0+Y291bnQgPSAwOworLSAgZF9hbGxvY2F0ZWQgPSAxOworLSAgZC0+ZGlyID0gKERJUkVDVElWRSAqKSBtYWxsb2MgKGRfYWxsb2NhdGVkICogc2l6ZW9mIChESVJFQ1RJVkUpKTsKKy0gIGlmIChkLT5kaXIgPT0gTlVMTCkKKy0gICAgLyogT3V0IG9mIG1lbW9yeS4gICovCistICAgIGdvdG8gb3V0X29mX21lbW9yeV8xOworLQorLSAgYS0+Y291bnQgPSAwOworLSAgYV9hbGxvY2F0ZWQgPSAwOworLSAgYS0+YXJnID0gTlVMTDsKKy0KKy0jZGVmaW5lIFJFR0lTVEVSX0FSRyhfaW5kZXhfLF90eXBlXykgXAorLSAgewkJCQkJCQkJCVwKKy0gICAgc2l6ZV90IG4gPSAoX2luZGV4Xyk7CQkJCQkJXAorLSAgICBpZiAobiA+PSBhX2FsbG9jYXRlZCkJCQkJCQlcCistICAgICAgewkJCQkJCQkJCVwKKy0Jc2l6ZV90IG1lbW9yeV9zaXplOwkJCQkJCVwKKy0JYXJndW1lbnQgKm1lbW9yeTsJCQkJCQlcCistCQkJCQkJCQkJXAorLQlhX2FsbG9jYXRlZCA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIDIpOwkJCQlcCistCWlmIChhX2FsbG9jYXRlZCA8PSBuKQkJCQkJCVwKKy0JICBhX2FsbG9jYXRlZCA9IHhzdW0gKG4sIDEpOwkJCQkJXAorLQltZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIHNpemVvZiAoYXJndW1lbnQpKTsJCVwKKy0JaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQkJCQlcCistCSAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCQkJXAorLQkgIGdvdG8gb3V0X29mX21lbW9yeTsJCQkJCQlcCistCW1lbW9yeSA9IChhcmd1bWVudCAqKSAoYS0+YXJnCQkJCQlcCistCQkJICAgICAgID8gcmVhbGxvYyAoYS0+YXJnLCBtZW1vcnlfc2l6ZSkJCVwKKy0JCQkgICAgICAgOiBtYWxsb2MgKG1lbW9yeV9zaXplKSk7CQkJXAorLQlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJXAorLQkgIC8qIE91dCBvZiBtZW1vcnkuICAqLwkJCQkJCVwKKy0JICBnb3RvIG91dF9vZl9tZW1vcnk7CQkJCQkJXAorLQlhLT5hcmcgPSBtZW1vcnk7CQkJCQkJXAorLSAgICAgIH0JCQkJCQkJCQlcCistICAgIHdoaWxlIChhLT5jb3VudCA8PSBuKQkJCQkJCVwKKy0gICAgICBhLT5hcmdbYS0+Y291bnQrK10udHlwZSA9IFRZUEVfTk9ORTsJCQkJXAorLSAgICBpZiAoYS0+YXJnW25dLnR5cGUgPT0gVFlQRV9OT05FKQkJCQkJXAorLSAgICAgIGEtPmFyZ1tuXS50eXBlID0gKF90eXBlXyk7CQkJCQlcCistICAgIGVsc2UgaWYgKGEtPmFyZ1tuXS50eXBlICE9IChfdHlwZV8pKQkJCQlcCistICAgICAgLyogQW1iaWd1b3VzIHR5cGUgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLwkJCVwKKy0gICAgICBnb3RvIGVycm9yOwkJCQkJCQlcCistICB9CistCistICB3aGlsZSAoKmNwICE9ICdcMCcpCistICAgIHsKKy0gICAgICBDSEFSX1QgYyA9ICpjcCsrOworLSAgICAgIGlmIChjID09ICclJykKKy0JeworLQkgIHNpemVfdCBhcmdfaW5kZXggPSBBUkdfTk9ORTsKKy0JICBESVJFQ1RJVkUgKmRwID0gJmQtPmRpcltkLT5jb3VudF07IC8qIHBvaW50ZXIgdG8gbmV4dCBkaXJlY3RpdmUgKi8KKy0KKy0JICAvKiBJbml0aWFsaXplIHRoZSBuZXh0IGRpcmVjdGl2ZS4gICovCistCSAgZHAtPmRpcl9zdGFydCA9IGNwIC0gMTsKKy0JICBkcC0+ZmxhZ3MgPSAwOworLQkgIGRwLT53aWR0aF9zdGFydCA9IE5VTEw7CistCSAgZHAtPndpZHRoX2VuZCA9IE5VTEw7CistCSAgZHAtPndpZHRoX2FyZ19pbmRleCA9IEFSR19OT05FOworLQkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBOVUxMOworLQkgIGRwLT5wcmVjaXNpb25fZW5kID0gTlVMTDsKKy0JICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IEFSR19OT05FOworLQkgIGRwLT5hcmdfaW5kZXggPSBBUkdfTk9ORTsKKy0KKy0JICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKy0JICBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKQorLQkgICAgeworLQkgICAgICBjb25zdCBDSEFSX1QgKm5wOworLQorLQkgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKy0JCTsKKy0JICAgICAgaWYgKCpucCA9PSAnJCcpCistCQl7CistCQkgIHNpemVfdCBuID0gMDsKKy0KKy0JCSAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCistCQkgICAgbiA9IHhzdW0gKHh0aW1lcyAobiwgMTApLCAqbnAgLSAnMCcpOworLQkJICBpZiAobiA9PSAwKQorLQkJICAgIC8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCistCQkgICAgZ290byBlcnJvcjsKKy0JCSAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCistCQkgICAgLyogbiB0b28gbGFyZ2UsIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeSBsYXRlci4gICovCistCQkgICAgZ290byBlcnJvcjsKKy0JCSAgYXJnX2luZGV4ID0gbiAtIDE7CistCQkgIGNwID0gbnAgKyAxOworLQkJfQorLQkgICAgfQorLQorLQkgIC8qIFJlYWQgdGhlIGZsYWdzLiAgKi8KKy0JICBmb3IgKDs7KQorLQkgICAgeworLQkgICAgICBpZiAoKmNwID09ICdcJycpCistCQl7CistCQkgIGRwLT5mbGFncyB8PSBGTEFHX0dST1VQOworLQkJICBjcCsrOworLQkJfQorLQkgICAgICBlbHNlIGlmICgqY3AgPT0gJy0nKQorLQkJeworLQkJICBkcC0+ZmxhZ3MgfD0gRkxBR19MRUZUOworLQkJICBjcCsrOworLQkJfQorLQkgICAgICBlbHNlIGlmICgqY3AgPT0gJysnKQorLQkJeworLQkJICBkcC0+ZmxhZ3MgfD0gRkxBR19TSE9XU0lHTjsKKy0JCSAgY3ArKzsKKy0JCX0KKy0JICAgICAgZWxzZSBpZiAoKmNwID09ICcgJykKKy0JCXsKKy0JCSAgZHAtPmZsYWdzIHw9IEZMQUdfU1BBQ0U7CistCQkgIGNwKys7CistCQl9CistCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnIycpCistCQl7CistCQkgIGRwLT5mbGFncyB8PSBGTEFHX0FMVDsKKy0JCSAgY3ArKzsKKy0JCX0KKy0JICAgICAgZWxzZSBpZiAoKmNwID09ICcwJykKKy0JCXsKKy0JCSAgZHAtPmZsYWdzIHw9IEZMQUdfWkVSTzsKKy0JCSAgY3ArKzsKKy0JCX0KKy0JICAgICAgZWxzZQorLQkJYnJlYWs7CistCSAgICB9CistCistCSAgLyogUGFyc2UgdGhlIGZpZWxkIHdpZHRoLiAgKi8KKy0JICBpZiAoKmNwID09ICcqJykKKy0JICAgIHsKKy0JICAgICAgZHAtPndpZHRoX3N0YXJ0ID0gY3A7CistCSAgICAgIGNwKys7CistCSAgICAgIGRwLT53aWR0aF9lbmQgPSBjcDsKKy0JICAgICAgaWYgKG1heF93aWR0aF9sZW5ndGggPCAxKQorLQkJbWF4X3dpZHRoX2xlbmd0aCA9IDE7CistCistCSAgICAgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworLQkgICAgICBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKQorLQkJeworLQkJICBjb25zdCBDSEFSX1QgKm5wOworLQorLQkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKy0JCSAgICA7CistCQkgIGlmICgqbnAgPT0gJyQnKQorLQkJICAgIHsKKy0JCSAgICAgIHNpemVfdCBuID0gMDsKKy0KKy0JCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorLQkJCW4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKy0JCSAgICAgIGlmIChuID09IDApCistCQkJLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKy0JCQlnb3RvIGVycm9yOworLQkJICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCistCQkJLyogbiB0b28gbGFyZ2UsIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeSBsYXRlci4gICovCistCQkJZ290byBlcnJvcjsKKy0JCSAgICAgIGRwLT53aWR0aF9hcmdfaW5kZXggPSBuIC0gMTsKKy0JCSAgICAgIGNwID0gbnAgKyAxOworLQkJICAgIH0KKy0JCX0KKy0JICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggPT0gQVJHX05PTkUpCistCQl7CistCQkgIGRwLT53aWR0aF9hcmdfaW5kZXggPSBhcmdfcG9zbisrOworLQkJICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKy0JCSAgICAvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCistCQkgICAgZ290byBlcnJvcjsKKy0JCX0KKy0JICAgICAgUkVHSVNURVJfQVJHIChkcC0+d2lkdGhfYXJnX2luZGV4LCBUWVBFX0lOVCk7CistCSAgICB9CistCSAgZWxzZSBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKQorLQkgICAgeworLQkgICAgICBzaXplX3Qgd2lkdGhfbGVuZ3RoOworLQorLQkgICAgICBkcC0+d2lkdGhfc3RhcnQgPSBjcDsKKy0JICAgICAgZm9yICg7ICpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JzsgY3ArKykKKy0JCTsKKy0JICAgICAgZHAtPndpZHRoX2VuZCA9IGNwOworLQkgICAgICB3aWR0aF9sZW5ndGggPSBkcC0+d2lkdGhfZW5kIC0gZHAtPndpZHRoX3N0YXJ0OworLQkgICAgICBpZiAobWF4X3dpZHRoX2xlbmd0aCA8IHdpZHRoX2xlbmd0aCkKKy0JCW1heF93aWR0aF9sZW5ndGggPSB3aWR0aF9sZW5ndGg7CistCSAgICB9CistCistCSAgLyogUGFyc2UgdGhlIHByZWNpc2lvbi4gICovCistCSAgaWYgKCpjcCA9PSAnLicpCistCSAgICB7CistCSAgICAgIGNwKys7CistCSAgICAgIGlmICgqY3AgPT0gJyonKQorLQkJeworLQkJICBkcC0+cHJlY2lzaW9uX3N0YXJ0ID0gY3AgLSAxOworLQkJICBjcCsrOworLQkJICBkcC0+cHJlY2lzaW9uX2VuZCA9IGNwOworLQkJICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCAyKQorLQkJICAgIG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMjsKKy0KKy0JCSAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCistCQkgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCistCQkgICAgeworLQkJICAgICAgY29uc3QgQ0hBUl9UICpucDsKKy0KKy0JCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorLQkJCTsKKy0JCSAgICAgIGlmICgqbnAgPT0gJyQnKQorLQkJCXsKKy0JCQkgIHNpemVfdCBuID0gMDsKKy0KKy0JCQkgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorLQkJCSAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CistCQkJICBpZiAobiA9PSAwKQorLQkJCSAgICAvKiBQb3NpdGlvbmFsIGFyZ3VtZW50IDAuICAqLworLQkJCSAgICBnb3RvIGVycm9yOworLQkJCSAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobikpCistCQkJICAgIC8qIG4gdG9vIGxhcmdlLCB3b3VsZCBsZWFkIHRvIG91dCBvZiBtZW1vcnkKKy0JCQkgICAgICAgbGF0ZXIuICAqLworLQkJCSAgICBnb3RvIGVycm9yOworLQkJCSAgZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPSBuIC0gMTsKKy0JCQkgIGNwID0gbnAgKyAxOworLQkJCX0KKy0JCSAgICB9CistCQkgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKy0JCSAgICB7CistCQkgICAgICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IGFyZ19wb3NuKys7CistCQkgICAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPT0gQVJHX05PTkUpCistCQkJLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworLQkJCWdvdG8gZXJyb3I7CistCQkgICAgfQorLQkJICBSRUdJU1RFUl9BUkcgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4LCBUWVBFX0lOVCk7CistCQl9CistCSAgICAgIGVsc2UKKy0JCXsKKy0JCSAgc2l6ZV90IHByZWNpc2lvbl9sZW5ndGg7CistCistCQkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBjcCAtIDE7CistCQkgIGZvciAoOyAqY3AgPj0gJzAnICYmICpjcCA8PSAnOSc7IGNwKyspCistCQkgICAgOworLQkJICBkcC0+cHJlY2lzaW9uX2VuZCA9IGNwOworLQkJICBwcmVjaXNpb25fbGVuZ3RoID0gZHAtPnByZWNpc2lvbl9lbmQgLSBkcC0+cHJlY2lzaW9uX3N0YXJ0OworLQkJICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCBwcmVjaXNpb25fbGVuZ3RoKQorLQkJICAgIG1heF9wcmVjaXNpb25fbGVuZ3RoID0gcHJlY2lzaW9uX2xlbmd0aDsKKy0JCX0KKy0JICAgIH0KKy0KKy0JICB7CistCSAgICBhcmdfdHlwZSB0eXBlOworLQorLQkgICAgLyogUGFyc2UgYXJndW1lbnQgdHlwZS9zaXplIHNwZWNpZmllcnMuICAqLworLQkgICAgeworLQkgICAgICBpbnQgZmxhZ3MgPSAwOworLQorLQkgICAgICBmb3IgKDs7KQorLQkJeworLQkJICBpZiAoKmNwID09ICdoJykKKy0JCSAgICB7CistCQkgICAgICBmbGFncyB8PSAoMSA8PCAoZmxhZ3MgJiAxKSk7CistCQkgICAgICBjcCsrOworLQkJICAgIH0KKy0JCSAgZWxzZSBpZiAoKmNwID09ICdMJykKKy0JCSAgICB7CistCQkgICAgICBmbGFncyB8PSA0OworLQkJICAgICAgY3ArKzsKKy0JCSAgICB9CistCQkgIGVsc2UgaWYgKCpjcCA9PSAnbCcpCistCQkgICAgeworLQkJICAgICAgZmxhZ3MgKz0gODsKKy0JCSAgICAgIGNwKys7CistCQkgICAgfQorLQkJICBlbHNlIGlmICgqY3AgPT0gJ2onKQorLQkJICAgIHsKKy0JCSAgICAgIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAobG9uZykpCistCQkJeworLQkJCSAgLyogaW50bWF4X3QgPSBsb25nIGxvbmcgKi8KKy0JCQkgIGZsYWdzICs9IDE2OworLQkJCX0KKy0JCSAgICAgIGVsc2UgaWYgKHNpemVvZiAoaW50bWF4X3QpID4gc2l6ZW9mIChpbnQpKQorLQkJCXsKKy0JCQkgIC8qIGludG1heF90ID0gbG9uZyAqLworLQkJCSAgZmxhZ3MgKz0gODsKKy0JCQl9CistCQkgICAgICBjcCsrOworLQkJICAgIH0KKy0JCSAgZWxzZSBpZiAoKmNwID09ICd6JyB8fCAqY3AgPT0gJ1onKQorLQkJICAgIHsKKy0JCSAgICAgIC8qICd6JyBpcyBzdGFuZGFyZGl6ZWQgaW4gSVNPIEMgOTksIGJ1dCBnbGliYyB1c2VzICdaJworLQkJCSBiZWNhdXNlIHRoZSB3YXJuaW5nIGZhY2lsaXR5IGluIGdjYy0yLjk1LjIgdW5kZXJzdGFuZHMKKy0JCQkgb25seSAnWicgKHNlZSBnY2MtMi45NS4yL2djYy9jLWNvbW1vbi5jOjE3ODQpLiAgKi8KKy0JCSAgICAgIGlmIChzaXplb2YgKHNpemVfdCkgPiBzaXplb2YgKGxvbmcpKQorLQkJCXsKKy0JCQkgIC8qIHNpemVfdCA9IGxvbmcgbG9uZyAqLworLQkJCSAgZmxhZ3MgKz0gMTY7CistCQkJfQorLQkJICAgICAgZWxzZSBpZiAoc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9mIChpbnQpKQorLQkJCXsKKy0JCQkgIC8qIHNpemVfdCA9IGxvbmcgKi8KKy0JCQkgIGZsYWdzICs9IDg7CistCQkJfQorLQkJICAgICAgY3ArKzsKKy0JCSAgICB9CistCQkgIGVsc2UgaWYgKCpjcCA9PSAndCcpCistCQkgICAgeworLQkJICAgICAgaWYgKHNpemVvZiAocHRyZGlmZl90KSA+IHNpemVvZiAobG9uZykpCistCQkJeworLQkJCSAgLyogcHRyZGlmZl90ID0gbG9uZyBsb25nICovCistCQkJICBmbGFncyArPSAxNjsKKy0JCQl9CistCQkgICAgICBlbHNlIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGludCkpCistCQkJeworLQkJCSAgLyogcHRyZGlmZl90ID0gbG9uZyAqLworLQkJCSAgZmxhZ3MgKz0gODsKKy0JCQl9CistCQkgICAgICBjcCsrOworLQkJICAgIH0KKy0JCSAgZWxzZQorLQkJICAgIGJyZWFrOworLQkJfQorLQorLQkgICAgICAvKiBSZWFkIHRoZSBjb252ZXJzaW9uIGNoYXJhY3Rlci4gICovCistCSAgICAgIGMgPSAqY3ArKzsKKy0JICAgICAgc3dpdGNoIChjKQorLQkJeworLQkJY2FzZSAnZCc6IGNhc2UgJ2knOgorLSNpZiBIQVZFX0xPTkdfTE9OR19JTlQKKy0JCSAgLyogSWYgJ2xvbmcgbG9uZycgZXhpc3RzIGFuZCBpcyBsYXJnZXIgdGhhbiAnbG9uZyc6ICAqLworLQkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCistCQkgICAgdHlwZSA9IFRZUEVfTE9OR0xPTkdJTlQ7CistCQkgIGVsc2UKKy0jZW5kaWYKKy0JCSAgLyogSWYgJ2xvbmcgbG9uZycgZXhpc3RzIGFuZCBpcyB0aGUgc2FtZSBhcyAnbG9uZycsIHdlIHBhcnNlCistCQkgICAgICJsbGQiIGludG8gVFlQRV9MT05HSU5ULiAgKi8KKy0JCSAgaWYgKGZsYWdzID49IDgpCistCQkgICAgdHlwZSA9IFRZUEVfTE9OR0lOVDsKKy0JCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorLQkJICAgIHR5cGUgPSBUWVBFX1NDSEFSOworLQkJICBlbHNlIGlmIChmbGFncyAmIDEpCistCQkgICAgdHlwZSA9IFRZUEVfU0hPUlQ7CistCQkgIGVsc2UKKy0JCSAgICB0eXBlID0gVFlQRV9JTlQ7CistCQkgIGJyZWFrOworLQkJY2FzZSAnbyc6IGNhc2UgJ3UnOiBjYXNlICd4JzogY2FzZSAnWCc6CistI2lmIEhBVkVfTE9OR19MT05HX0lOVAorLQkJICAvKiBJZiAnbG9uZyBsb25nJyBleGlzdHMgYW5kIGlzIGxhcmdlciB0aGFuICdsb25nJzogICovCistCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKy0JCSAgICB0eXBlID0gVFlQRV9VTE9OR0xPTkdJTlQ7CistCQkgIGVsc2UKKy0jZW5kaWYKKy0JCSAgLyogSWYgJ3Vuc2lnbmVkIGxvbmcgbG9uZycgZXhpc3RzIGFuZCBpcyB0aGUgc2FtZSBhcworLQkJICAgICAndW5zaWduZWQgbG9uZycsIHdlIHBhcnNlICJsbHUiIGludG8gVFlQRV9VTE9OR0lOVC4gICovCistCQkgIGlmIChmbGFncyA+PSA4KQorLQkJICAgIHR5cGUgPSBUWVBFX1VMT05HSU5UOworLQkJICBlbHNlIGlmIChmbGFncyAmIDIpCistCQkgICAgdHlwZSA9IFRZUEVfVUNIQVI7CistCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKy0JCSAgICB0eXBlID0gVFlQRV9VU0hPUlQ7CistCQkgIGVsc2UKKy0JCSAgICB0eXBlID0gVFlQRV9VSU5UOworLQkJICBicmVhazsKKy0JCWNhc2UgJ2YnOiBjYXNlICdGJzogY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CistCQljYXNlICdhJzogY2FzZSAnQSc6CistCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKy0JCSAgICB0eXBlID0gVFlQRV9MT05HRE9VQkxFOworLQkJICBlbHNlCistCQkgICAgdHlwZSA9IFRZUEVfRE9VQkxFOworLQkJICBicmVhazsKKy0JCWNhc2UgJ2MnOgorLQkJICBpZiAoZmxhZ3MgPj0gOCkKKy0jaWYgSEFWRV9XSU5UX1QKKy0JCSAgICB0eXBlID0gVFlQRV9XSURFX0NIQVI7CistI2Vsc2UKKy0JCSAgICBnb3RvIGVycm9yOworLSNlbmRpZgorLQkJICBlbHNlCistCQkgICAgdHlwZSA9IFRZUEVfQ0hBUjsKKy0JCSAgYnJlYWs7CistI2lmIEhBVkVfV0lOVF9UCistCQljYXNlICdDJzoKKy0JCSAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOworLQkJICBjID0gJ2MnOworLQkJICBicmVhazsKKy0jZW5kaWYKKy0JCWNhc2UgJ3MnOgorLQkJICBpZiAoZmxhZ3MgPj0gOCkKKy0jaWYgSEFWRV9XQ0hBUl9UCistCQkgICAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CistI2Vsc2UKKy0JCSAgICBnb3RvIGVycm9yOworLSNlbmRpZgorLQkJICBlbHNlCistCQkgICAgdHlwZSA9IFRZUEVfU1RSSU5HOworLQkJICBicmVhazsKKy0jaWYgSEFWRV9XQ0hBUl9UCistCQljYXNlICdTJzoKKy0JCSAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CistCQkgIGMgPSAncyc7CistCQkgIGJyZWFrOworLSNlbmRpZgorLQkJY2FzZSAncCc6CistCQkgIHR5cGUgPSBUWVBFX1BPSU5URVI7CistCQkgIGJyZWFrOworLQkJY2FzZSAnbic6CistI2lmIEhBVkVfTE9OR19MT05HX0lOVAorLQkJICAvKiBJZiAnbG9uZyBsb25nJyBleGlzdHMgYW5kIGlzIGxhcmdlciB0aGFuICdsb25nJzogICovCistCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKy0JCSAgICB0eXBlID0gVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOworLQkJICBlbHNlCistI2VuZGlmCistCQkgIC8qIElmICdsb25nIGxvbmcnIGV4aXN0cyBhbmQgaXMgdGhlIHNhbWUgYXMgJ2xvbmcnLCB3ZSBwYXJzZQorLQkJICAgICAibGxuIiBpbnRvIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSLiAgKi8KKy0JCSAgaWYgKGZsYWdzID49IDgpCistCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSOworLQkJICBlbHNlIGlmIChmbGFncyAmIDIpCistCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjsKKy0JCSAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorLQkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVI7CistCQkgIGVsc2UKKy0JCSAgICB0eXBlID0gVFlQRV9DT1VOVF9JTlRfUE9JTlRFUjsKKy0JCSAgYnJlYWs7CistI2lmIEVOQUJMRV9VTklTVERJTworLQkJLyogVGhlIHVuaXN0ZGlvIGV4dGVuc2lvbnMuICAqLworLQkJY2FzZSAnVSc6CistCQkgIGlmIChmbGFncyA+PSAxNikKKy0JCSAgICB0eXBlID0gVFlQRV9VMzJfU1RSSU5HOworLQkJICBlbHNlIGlmIChmbGFncyA+PSA4KQorLQkJICAgIHR5cGUgPSBUWVBFX1UxNl9TVFJJTkc7CistCQkgIGVsc2UKKy0JCSAgICB0eXBlID0gVFlQRV9VOF9TVFJJTkc7CistCQkgIGJyZWFrOworLSNlbmRpZgorLQkJY2FzZSAnJSc6CistCQkgIHR5cGUgPSBUWVBFX05PTkU7CistCQkgIGJyZWFrOworLQkJZGVmYXVsdDoKKy0JCSAgLyogVW5rbm93biBjb252ZXJzaW9uIGNoYXJhY3Rlci4gICovCistCQkgIGdvdG8gZXJyb3I7CistCQl9CistCSAgICB9CistCistCSAgICBpZiAodHlwZSAhPSBUWVBFX05PTkUpCistCSAgICAgIHsKKy0JCWRwLT5hcmdfaW5kZXggPSBhcmdfaW5kZXg7CistCQlpZiAoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkKKy0JCSAgeworLQkJICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfcG9zbisrOworLQkJICAgIGlmIChkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKQorLQkJICAgICAgLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworLQkJICAgICAgZ290byBlcnJvcjsKKy0JCSAgfQorLQkJUkVHSVNURVJfQVJHIChkcC0+YXJnX2luZGV4LCB0eXBlKTsKKy0JICAgICAgfQorLQkgICAgZHAtPmNvbnZlcnNpb24gPSBjOworLQkgICAgZHAtPmRpcl9lbmQgPSBjcDsKKy0JICB9CistCistCSAgZC0+Y291bnQrKzsKKy0JICBpZiAoZC0+Y291bnQgPj0gZF9hbGxvY2F0ZWQpCistCSAgICB7CistCSAgICAgIHNpemVfdCBtZW1vcnlfc2l6ZTsKKy0JICAgICAgRElSRUNUSVZFICptZW1vcnk7CistCistCSAgICAgIGRfYWxsb2NhdGVkID0geHRpbWVzIChkX2FsbG9jYXRlZCwgMik7CistCSAgICAgIG1lbW9yeV9zaXplID0geHRpbWVzIChkX2FsbG9jYXRlZCwgc2l6ZW9mIChESVJFQ1RJVkUpKTsKKy0JICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQorLQkJLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCistCQlnb3RvIG91dF9vZl9tZW1vcnk7CistCSAgICAgIG1lbW9yeSA9IChESVJFQ1RJVkUgKikgcmVhbGxvYyAoZC0+ZGlyLCBtZW1vcnlfc2l6ZSk7CistCSAgICAgIGlmIChtZW1vcnkgPT0gTlVMTCkKKy0JCS8qIE91dCBvZiBtZW1vcnkuICAqLworLQkJZ290byBvdXRfb2ZfbWVtb3J5OworLQkgICAgICBkLT5kaXIgPSBtZW1vcnk7CistCSAgICB9CistCX0KKy0jaWYgQ0hBUl9UX09OTFlfQVNDSUkKKy0gICAgICBlbHNlIGlmICghY19pc2FzY2lpIChjKSkKKy0JeworLQkgIC8qIE5vbi1BU0NJSSBjaGFyYWN0ZXIuICBOb3Qgc3VwcG9ydGVkLiAgKi8KKy0JICBnb3RvIGVycm9yOworLQl9CistI2VuZGlmCistICAgIH0KKy0gIGQtPmRpcltkLT5jb3VudF0uZGlyX3N0YXJ0ID0gY3A7CistCistICBkLT5tYXhfd2lkdGhfbGVuZ3RoID0gbWF4X3dpZHRoX2xlbmd0aDsKKy0gIGQtPm1heF9wcmVjaXNpb25fbGVuZ3RoID0gbWF4X3ByZWNpc2lvbl9sZW5ndGg7CistICByZXR1cm4gMDsKKy0KKy1lcnJvcjoKKy0gIGlmIChhLT5hcmcpCistICAgIGZyZWUgKGEtPmFyZyk7CistICBpZiAoZC0+ZGlyKQorLSAgICBmcmVlIChkLT5kaXIpOworLSAgZXJybm8gPSBFSU5WQUw7CistICByZXR1cm4gLTE7CistCistb3V0X29mX21lbW9yeToKKy0gIGlmIChhLT5hcmcpCistICAgIGZyZWUgKGEtPmFyZyk7CistICBpZiAoZC0+ZGlyKQorLSAgICBmcmVlIChkLT5kaXIpOworLW91dF9vZl9tZW1vcnlfMToKKy0gIGVycm5vID0gRU5PTUVNOworLSAgcmV0dXJuIC0xOworLX0KKy0KKy0jdW5kZWYgUFJJTlRGX1BBUlNFCistI3VuZGVmIERJUkVDVElWRVMKKy0jdW5kZWYgRElSRUNUSVZFCistI3VuZGVmIENIQVJfVF9PTkxZX0FTQ0lJCistI3VuZGVmIENIQVJfVAorLS0tIGEvaW50bC9wcmludGYtcGFyc2UuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsNzUgKzAsMCBAQAorLS8qIFBhcnNlIHByaW50ZiBmb3JtYXQgc3RyaW5nLgorLSAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKKy0jZGVmaW5lIF9QUklOVEZfUEFSU0VfSAorLQorLSNpbmNsdWRlICJwcmludGYtYXJncy5oIgorLQorLQorLS8qIEZsYWdzICovCistI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworLSNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworLSNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKy0jZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworLSNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCistI2RlZmluZSBGTEFHX1pFUk8JMzIKKy0KKy0vKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKy0jZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorLQorLS8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCistdHlwZWRlZiBzdHJ1Y3QKKy17CistICBjb25zdCBjaGFyKiBkaXJfc3RhcnQ7CistICBjb25zdCBjaGFyKiBkaXJfZW5kOworLSAgaW50IGZsYWdzOworLSAgY29uc3QgY2hhciogd2lkdGhfc3RhcnQ7CistICBjb25zdCBjaGFyKiB3aWR0aF9lbmQ7CistICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworLSAgY29uc3QgY2hhciogcHJlY2lzaW9uX3N0YXJ0OworLSAgY29uc3QgY2hhciogcHJlY2lzaW9uX2VuZDsKKy0gIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworLSAgY2hhciBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKy0gIHNpemVfdCBhcmdfaW5kZXg7CistfQorLWNoYXJfZGlyZWN0aXZlOworLQorLS8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworLXR5cGVkZWYgc3RydWN0CisteworLSAgc2l6ZV90IGNvdW50OworLSAgY2hhcl9kaXJlY3RpdmUgKmRpcjsKKy0gIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworLSAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworLX0KKy1jaGFyX2RpcmVjdGl2ZXM7CistCistCistLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworLSAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorLSAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCistICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCistI2lmZGVmIFNUQVRJQworLVNUQVRJQworLSNlbHNlCistZXh0ZXJuCistI2VuZGlmCistaW50IHByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CistCistI2VuZGlmIC8qIF9QUklOVEZfUEFSU0VfSCAqLworLS0tIGEvaW50bC9wcmludGYuYworKysrIC9kZXYvbnVsbAorQEAgLTEsNDI3ICswLDAgQEAKKy0vKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MsIHVzaW5nIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaWZkZWYgX19HTlVDX18KKy0jIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorLSMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKy0jZWxzZQorLSMgaWZkZWYgX01TQ19WRVIKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKy0jIGVsc2UKKy0jICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworLSMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKy0jICBlbHNlCistIyAgIGlmZGVmIF9BSVgKKy0gI3ByYWdtYSBhbGxvY2EKKy0jICAgZWxzZQorLSMgICAgaWZuZGVmIGFsbG9jYQorLWNoYXIgKmFsbG9jYSAoKTsKKy0jICAgIGVuZGlmCistIyAgIGVuZGlmCistIyAgZW5kaWYKKy0jIGVuZGlmCistI2VuZGlmCistCistI2luY2x1ZGUgPHN0ZGlvLmg+CistCistI2lmICFIQVZFX1BPU0lYX1BSSU5URgorLQorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxsaW1pdHMuaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLQorLS8qIFNvbWUgc3lzdGVtcywgbGlrZSBPU0YvMSA0LjAgYW5kIFdvZTMyLCBkb24ndCBoYXZlIEVPVkVSRkxPVy4gICovCistI2lmbmRlZiBFT1ZFUkZMT1cKKy0jIGRlZmluZSBFT1ZFUkZMT1cgRTJCSUcKKy0jZW5kaWYKKy0KKy0vKiBXaGVuIGJ1aWxkaW5nIGEgRExMLCB3ZSBtdXN0IGV4cG9ydCBzb21lIGZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBiZWNhdXNlCistICAgdGhlIGZ1bmN0aW9ucyBhcmUgb25seSBkZWZpbmVkIGZvciBiaW5hcnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgd2UKKy0gICBkb24ndCBuZWVkIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgaW4gYW55IGNhc2UuICAqLworLSNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIEJVSUxESU5HX0RMTAorLSMgZGVmaW5lIERMTF9FWFBPUlRFRCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKy0jZWxzZQorLSMgZGVmaW5lIERMTF9FWFBPUlRFRAorLSNlbmRpZgorLQorLSNkZWZpbmUgU1RBVElDIHN0YXRpYworLQorLS8qIFRoaXMgbmVlZHMgdG8gYmUgY29uc2lzdGVudCB3aXRoIGxpYmdudWludGwuaC5pbi4gICovCistI2lmIGRlZmluZWQgX19OZXRCU0RfXyB8fCBkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fTUlOR1czMl9fCistLyogRG9uJ3QgYnJlYWsgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZixNLE4pKSkuCistICAgVGhpcyByZWRlZmluaXRpb24gaXMgb25seSBwb3NzaWJsZSBiZWNhdXNlIHRoZSBsaWJjIGluIE5ldEJTRCwgQ3lnd2luLAorLSAgIG1pbmd3IGRvZXMgbm90IGhhdmUgYSBmdW5jdGlvbiBfX3ByaW50Zl9fLiAgKi8KKy0jIGRlZmluZSBsaWJpbnRsX3ByaW50ZiBfX3ByaW50Zl9fCistI2VuZGlmCistCistLyogRGVmaW5lIGF1eGlsaWFyeSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInByaW50Zi1hcmdzLmgiLiAgKi8KKy0jaW5jbHVkZSAicHJpbnRmLWFyZ3MuYyIKKy0KKy0vKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAicHJpbnRmLXBhcnNlLmgiLiAgKi8KKy0jaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCistCistLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCistI2RlZmluZSB2YXNucHJpbnRmIGxpYmludGxfdmFzbnByaW50ZgorLSNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCistI2lmIDAgLyogbm90IG5lZWRlZCAqLworLSNkZWZpbmUgYXNucHJpbnRmIGxpYmludGxfYXNucHJpbnRmCistI2luY2x1ZGUgImFzbnByaW50Zi5jIgorLSNlbmRpZgorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfdmZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisteworLSAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCistICAgIHJldHVybiB2ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworLSAgZWxzZQorLSAgICB7CistICAgICAgc2l6ZV90IGxlbmd0aDsKKy0gICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CistICAgICAgaW50IHJldHZhbCA9IC0xOworLSAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKy0JeworLQkgIHNpemVfdCB3cml0dGVuID0gZndyaXRlIChyZXN1bHQsIDEsIGxlbmd0aCwgc3RyZWFtKTsKKy0JICBmcmVlIChyZXN1bHQpOworLQkgIGlmICh3cml0dGVuID09IGxlbmd0aCkKKy0JICAgIHsKKy0JICAgICAgaWYgKGxlbmd0aCA+IElOVF9NQVgpCistCQllcnJubyA9IEVPVkVSRkxPVzsKKy0JICAgICAgZWxzZQorLQkJcmV0dmFsID0gbGVuZ3RoOworLQkgICAgfQorLQl9CistICAgICAgcmV0dXJuIHJldHZhbDsKKy0gICAgfQorLX0KKy0KKy1ETExfRVhQT1JURUQKKy1pbnQKKy1saWJpbnRsX2ZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisteworLSAgdmFfbGlzdCBhcmdzOworLSAgaW50IHJldHZhbDsKKy0KKy0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworLSAgcmV0dmFsID0gbGliaW50bF92ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworLSAgdmFfZW5kIChhcmdzKTsKKy0gIHJldHVybiByZXR2YWw7CistfQorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfdnByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisteworLSAgcmV0dXJuIGxpYmludGxfdmZwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKKy19CistCistRExMX0VYUE9SVEVECistaW50CistbGliaW50bF9wcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorLXsKKy0gIHZhX2xpc3QgYXJnczsKKy0gIGludCByZXR2YWw7CistCistICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKy0gIHJldHZhbCA9IGxpYmludGxfdnByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKy0gIHZhX2VuZCAoYXJncyk7CistICByZXR1cm4gcmV0dmFsOworLX0KKy0KKy1ETExfRVhQT1JURUQKKy1pbnQKKy1saWJpbnRsX3ZzcHJpbnRmIChjaGFyICpyZXN1bHRidWYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorLXsKKy0gIGlmIChzdHJjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorLSAgICByZXR1cm4gdnNwcmludGYgKHJlc3VsdGJ1ZiwgZm9ybWF0LCBhcmdzKTsKKy0gIGVsc2UKKy0gICAgeworLSAgICAgIHNpemVfdCBsZW5ndGggPSAoc2l6ZV90KSB+MCAvICg0ICogc2l6ZW9mIChjaGFyKSk7CistICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CistICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCistCXsKKy0JICBmcmVlIChyZXN1bHQpOworLQkgIHJldHVybiAtMTsKKy0JfQorLSAgICAgIGlmIChsZW5ndGggPiBJTlRfTUFYKQorLQl7CistCSAgZXJybm8gPSBFT1ZFUkZMT1c7CistCSAgcmV0dXJuIC0xOworLQl9CistICAgICAgZWxzZQorLQlyZXR1cm4gbGVuZ3RoOworLSAgICB9CistfQorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfc3ByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKy17CistICB2YV9saXN0IGFyZ3M7CistICBpbnQgcmV0dmFsOworLQorLSAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CistICByZXR2YWwgPSBsaWJpbnRsX3ZzcHJpbnRmIChyZXN1bHRidWYsIGZvcm1hdCwgYXJncyk7CistICB2YV9lbmQgKGFyZ3MpOworLSAgcmV0dXJuIHJldHZhbDsKKy19CistCistI2lmIEhBVkVfU05QUklOVEYKKy0KKy0jIGlmIEhBVkVfREVDTF9fU05QUklOVEYKKy0gICAvKiBXaW5kb3dzLiAgKi8KKy0jICBkZWZpbmUgc3lzdGVtX3ZzbnByaW50ZiBfdnNucHJpbnRmCistIyBlbHNlCistICAgLyogVW5peC4gICovCistIyAgZGVmaW5lIHN5c3RlbV92c25wcmludGYgdnNucHJpbnRmCistIyBlbmRpZgorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfdnNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorLXsKKy0gIGlmIChzdHJjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorLSAgICByZXR1cm4gc3lzdGVtX3ZzbnByaW50ZiAocmVzdWx0YnVmLCBsZW5ndGgsIGZvcm1hdCwgYXJncyk7CistICBlbHNlCistICAgIHsKKy0gICAgICBzaXplX3QgbWF4bGVuZ3RoID0gbGVuZ3RoOworLSAgICAgIGNoYXIgKnJlc3VsdCA9IGxpYmludGxfdmFzbnByaW50ZiAocmVzdWx0YnVmLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworLSAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0YnVmKQorLQl7CistCSAgaWYgKG1heGxlbmd0aCA+IDApCistCSAgICB7CistCSAgICAgIHNpemVfdCBwcnVuZWRfbGVuZ3RoID0KKy0JCShsZW5ndGggPCBtYXhsZW5ndGggPyBsZW5ndGggOiBtYXhsZW5ndGggLSAxKTsKKy0JICAgICAgbWVtY3B5IChyZXN1bHRidWYsIHJlc3VsdCwgcHJ1bmVkX2xlbmd0aCk7CistCSAgICAgIHJlc3VsdGJ1ZltwcnVuZWRfbGVuZ3RoXSA9ICdcMCc7CistCSAgICB9CistCSAgZnJlZSAocmVzdWx0KTsKKy0JfQorLSAgICAgIGlmIChsZW5ndGggPiBJTlRfTUFYKQorLQl7CistCSAgZXJybm8gPSBFT1ZFUkZMT1c7CistCSAgcmV0dXJuIC0xOworLQl9CistICAgICAgZWxzZQorLQlyZXR1cm4gbGVuZ3RoOworLSAgICB9CistfQorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisteworLSAgdmFfbGlzdCBhcmdzOworLSAgaW50IHJldHZhbDsKKy0KKy0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworLSAgcmV0dmFsID0gbGliaW50bF92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworLSAgdmFfZW5kIChhcmdzKTsKKy0gIHJldHVybiByZXR2YWw7CistfQorLQorLSNlbmRpZgorLQorLSNpZiBIQVZFX0FTUFJJTlRGCistCistRExMX0VYUE9SVEVECistaW50CistbGliaW50bF92YXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKy17CistICBzaXplX3QgbGVuZ3RoOworLSAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworLSAgaWYgKHJlc3VsdCA9PSBOVUxMKQorLSAgICByZXR1cm4gLTE7CistICBpZiAobGVuZ3RoID4gSU5UX01BWCkKKy0gICAgeworLSAgICAgIGZyZWUgKHJlc3VsdCk7CistICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7CistICAgICAgcmV0dXJuIC0xOworLSAgICB9CistICAqcmVzdWx0cCA9IHJlc3VsdDsKKy0gIHJldHVybiBsZW5ndGg7CistfQorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfYXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKy17CistICB2YV9saXN0IGFyZ3M7CistICBpbnQgcmV0dmFsOworLQorLSAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CistICByZXR2YWwgPSBsaWJpbnRsX3Zhc3ByaW50ZiAocmVzdWx0cCwgZm9ybWF0LCBhcmdzKTsKKy0gIHZhX2VuZCAoYXJncyk7CistICByZXR1cm4gcmV0dmFsOworLX0KKy0KKy0jZW5kaWYKKy0KKy0jaWYgSEFWRV9GV1BSSU5URgorLQorLSNpbmNsdWRlIDx3Y2hhci5oPgorLQorLSNkZWZpbmUgV0lERV9DSEFSX1ZFUlNJT04gMQorLQorLSNpbmNsdWRlICJ3cHJpbnRmLXBhcnNlLmgiCistLyogRGVmaW5lIGF1eGlsaWFyeSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gIndwcmludGYtcGFyc2UuaCIuICAqLworLSNkZWZpbmUgQ0hBUl9UIHdjaGFyX3QKKy0jZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorLSNkZWZpbmUgRElSRUNUSVZFUyB3Y2hhcl90X2RpcmVjdGl2ZXMKKy0jZGVmaW5lIFBSSU5URl9QQVJTRSB3cHJpbnRmX3BhcnNlCistI2luY2x1ZGUgInByaW50Zi1wYXJzZS5jIgorLQorLS8qIERlZmluZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInZhc25wcmludGYuaCIuICAqLworLSNkZWZpbmUgdmFzbndwcmludGYgbGliaW50bF92YXNud3ByaW50ZgorLSNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCistI2lmIDAgLyogbm90IG5lZWRlZCAqLworLSNkZWZpbmUgYXNud3ByaW50ZiBsaWJpbnRsX2FzbndwcmludGYKKy0jaW5jbHVkZSAiYXNucHJpbnRmLmMiCistI2VuZGlmCistCistIyBpZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorLSAgIC8qIFdpbmRvd3MuICAqLworLSMgIGRlZmluZSBzeXN0ZW1fdnN3cHJpbnRmIF92c253cHJpbnRmCistIyBlbHNlCistICAgLyogVW5peC4gICovCistIyAgZGVmaW5lIHN5c3RlbV92c3dwcmludGYgdnN3cHJpbnRmCistIyBlbmRpZgorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfdmZ3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorLXsKKy0gIGlmICh3Y3NjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorLSAgICByZXR1cm4gdmZ3cHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CistICBlbHNlCistICAgIHsKKy0gICAgICBzaXplX3QgbGVuZ3RoOworLSAgICAgIHdjaGFyX3QgKnJlc3VsdCA9IGxpYmludGxfdmFzbndwcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CistICAgICAgaW50IHJldHZhbCA9IC0xOworLSAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKy0JeworLQkgIHNpemVfdCBpOworLQkgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKy0JICAgIGlmIChmcHV0d2MgKHJlc3VsdFtpXSwgc3RyZWFtKSA9PSBXRU9GKQorLQkgICAgICBicmVhazsKKy0JICBmcmVlIChyZXN1bHQpOworLQkgIGlmIChpID09IGxlbmd0aCkKKy0JICAgIHsKKy0JICAgICAgaWYgKGxlbmd0aCA+IElOVF9NQVgpCistCQllcnJubyA9IEVPVkVSRkxPVzsKKy0JICAgICAgZWxzZQorLQkJcmV0dmFsID0gbGVuZ3RoOworLQkgICAgfQorLQl9CistICAgICAgcmV0dXJuIHJldHZhbDsKKy0gICAgfQorLX0KKy0KKy1ETExfRVhQT1JURUQKKy1pbnQKKy1saWJpbnRsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorLXsKKy0gIHZhX2xpc3QgYXJnczsKKy0gIGludCByZXR2YWw7CistCistICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKy0gIHJldHZhbCA9IGxpYmludGxfdmZ3cHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CistICB2YV9lbmQgKGFyZ3MpOworLSAgcmV0dXJuIHJldHZhbDsKKy19CistCistRExMX0VYUE9SVEVECistaW50CistbGliaW50bF92d3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisteworLSAgcmV0dXJuIGxpYmludGxfdmZ3cHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXJncyk7CistfQorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCisteworLSAgdmFfbGlzdCBhcmdzOworLSAgaW50IHJldHZhbDsKKy0KKy0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworLSAgcmV0dmFsID0gbGliaW50bF92d3ByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKy0gIHZhX2VuZCAoYXJncyk7CistICByZXR1cm4gcmV0dmFsOworLX0KKy0KKy1ETExfRVhQT1JURUQKKy1pbnQKKy1saWJpbnRsX3Zzd3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKy17CistICBpZiAod2NzY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKy0gICAgcmV0dXJuIHN5c3RlbV92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworLSAgZWxzZQorLSAgICB7CistICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKy0gICAgICB3Y2hhcl90ICpyZXN1bHQgPSBsaWJpbnRsX3Zhc253cHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CistICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCistCXsKKy0JICBpZiAobWF4bGVuZ3RoID4gMCkKKy0JICAgIHsKKy0JICAgICAgc2l6ZV90IHBydW5lZF9sZW5ndGggPQorLQkJKGxlbmd0aCA8IG1heGxlbmd0aCA/IGxlbmd0aCA6IG1heGxlbmd0aCAtIDEpOworLQkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCBwcnVuZWRfbGVuZ3RoICogc2l6ZW9mICh3Y2hhcl90KSk7CistCSAgICAgIHJlc3VsdGJ1ZltwcnVuZWRfbGVuZ3RoXSA9IDA7CistCSAgICB9CistCSAgZnJlZSAocmVzdWx0KTsKKy0JICAvKiBVbmxpa2UgdnNucHJpbnRmLCB3aGljaCBoYXMgdG8gcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVyIHRoYXQKKy0JICAgICB3b3VsZCBoYXZlIGJlZW4gcHJvZHVjZWQgaWYgdGhlIHJlc3VsdGJ1ZiBoYWQgYmVlbiBzdWZmaWNpZW50bHkKKy0JICAgICBsYXJnZSwgdGhlIHZzd3ByaW50ZiBmdW5jdGlvbiBoYXMgdG8gcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgaWYKKy0JICAgICB0aGUgcmVzdWx0YnVmIHdhcyBub3Qgc3VmZmljaWVudGx5IGxhcmdlLiAgKi8KKy0JICBpZiAobGVuZ3RoID49IG1heGxlbmd0aCkKKy0JICAgIHJldHVybiAtMTsKKy0JfQorLSAgICAgIGlmIChsZW5ndGggPiBJTlRfTUFYKQorLQl7CistCSAgZXJybm8gPSBFT1ZFUkZMT1c7CistCSAgcmV0dXJuIC0xOworLQl9CistICAgICAgZWxzZQorLQlyZXR1cm4gbGVuZ3RoOworLSAgICB9CistfQorLQorLURMTF9FWFBPUlRFRAorLWludAorLWxpYmludGxfc3dwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCisteworLSAgdmFfbGlzdCBhcmdzOworLSAgaW50IHJldHZhbDsKKy0KKy0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworLSAgcmV0dmFsID0gbGliaW50bF92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworLSAgdmFfZW5kIChhcmdzKTsKKy0gIHJldHVybiByZXR2YWw7CistfQorLQorLSNlbmRpZgorLQorLSNlbmRpZgorLS0tIGEvaW50bC9yZWYtYWRkLnNpbgorKysrIC9kZXYvbnVsbAorQEAgLTEsMzEgKzAsMCBAQAorLSMgQWRkIHRoaXMgcGFja2FnZSB0byBhIGxpc3Qgb2YgcmVmZXJlbmNlcyBzdG9yZWQgaW4gYSB0ZXh0IGZpbGUuCistIworLSMgICBDb3B5cmlnaHQgKEMpIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIworLSMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSMgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistIyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jICAgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0jICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSMgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0jICAgVVNBLgorLSMKKy0jIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LgorLSMKKy0vXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAvIHsKKy0gIHMvIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6Ly8KKy0gIHRhCistICA6YQorLSAgcy8gQFBBQ0tBR0VAIC8gQFBBQ0tBR0VAIC8KKy0gIHRiCistICBzLyAkLyBAUEFDS0FHRUAgLworLSAgOmIKKy0gIHMvXi8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovCistfQorLS0tIGEvaW50bC9yZWYtZGVsLnNpbgorKysrIC9kZXYvbnVsbAorQEAgLTEsMjYgKzAsMCBAQAorLSMgUmVtb3ZlIHRoaXMgcGFja2FnZSBmcm9tIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKy0jCistIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jCistIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0jICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSMgICBVU0EuCistIworLSMgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4uCistIworLS9eIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6IC8geworLSAgcy8jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTovLworLSAgcy8gQFBBQ0tBR0VAIC8gLworLSAgcy9eLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8KKy19CistLS0gYS9pbnRsL3JlbG9jYXRhYmxlLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDQ2OCArMCwwIEBACistLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLQorLS8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgZ2V0bGluZSgpLgorLSAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorLSAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKy0jaWZuZGVmIF9HTlVfU09VUkNFCistIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxjb25maWcuaD4KKy0KKy0vKiBTcGVjaWZpY2F0aW9uLiAgKi8KKy0jaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKy0KKy0jaWYgRU5BQkxFX1JFTE9DQVRBQkxFCistCistI2luY2x1ZGUgPHN0ZGRlZi5oPgorLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistCistI2lmZGVmIE5PX1hNQUxMT0MKKy0jIGRlZmluZSB4bWFsbG9jIG1hbGxvYworLSNlbHNlCistIyBpbmNsdWRlICJ4YWxsb2MuaCIKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fCistIyBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorLSMgaW5jbHVkZSA8d2luZG93cy5oPgorLSNlbmRpZgorLQorLSNpZiBERVBFTkRTX09OX0xJQkNIQVJTRVQKKy0jIGluY2x1ZGUgPGxpYmNoYXJzZXQuaD4KKy0jZW5kaWYKKy0jaWYgREVQRU5EU19PTl9MSUJJQ09OViAmJiBIQVZFX0lDT05WCistIyBpbmNsdWRlIDxpY29udi5oPgorLSNlbmRpZgorLSNpZiBERVBFTkRTX09OX0xJQklOVEwgJiYgRU5BQkxFX05MUworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorLSNlbmRpZgorLQorLS8qIEZha2VkIGNoZWFwICdib29sJy4gICovCistI3VuZGVmIGJvb2wKKy0jdW5kZWYgZmFsc2UKKy0jdW5kZWYgdHJ1ZQorLSNkZWZpbmUgYm9vbCBpbnQKKy0jZGVmaW5lIGZhbHNlIDAKKy0jZGVmaW5lIHRydWUgMQorLQorLS8qIFBhdGhuYW1lIHN1cHBvcnQuCistICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCistICAgSVNfUEFUSF9XSVRIX0RJUihQKSAgdGVzdHMgd2hldGhlciBQIGNvbnRhaW5zIGEgZGlyZWN0b3J5IHNwZWNpZmljYXRpb24uCistICovCistI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKy0gIC8qIFdpbjMyLCBDeWd3aW4sIE9TLzIsIERPUyAqLworLSMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCistIyBkZWZpbmUgSEFTX0RFVklDRShQKSBcCistICAgICgoKChQKVswXSA+PSAnQScgJiYgKFApWzBdIDw9ICdaJykgfHwgKChQKVswXSA+PSAnYScgJiYgKFApWzBdIDw9ICd6JykpIFwKKy0gICAgICYmIChQKVsxXSA9PSAnOicpCistIyBkZWZpbmUgSVNfUEFUSF9XSVRIX0RJUihQKSBcCistICAgIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCB8fCBzdHJjaHIgKFAsICdcXCcpICE9IE5VTEwgfHwgSEFTX0RFVklDRSAoUCkpCistIyBkZWZpbmUgRklMRV9TWVNURU1fUFJFRklYX0xFTihQKSAoSEFTX0RFVklDRSAoUCkgPyAyIDogMCkKKy0jZWxzZQorLSAgLyogVW5peCAqLworLSMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycpCistIyBkZWZpbmUgSVNfUEFUSF9XSVRIX0RJUihQKSAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwpCistIyBkZWZpbmUgRklMRV9TWVNURU1fUFJFRklYX0xFTihQKSAwCistI2VuZGlmCistCistLyogT3JpZ2luYWwgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCistc3RhdGljIGNoYXIgKm9yaWdfcHJlZml4OworLXN0YXRpYyBzaXplX3Qgb3JpZ19wcmVmaXhfbGVuOworLS8qIEN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCistc3RhdGljIGNoYXIgKmN1cnJfcHJlZml4OworLXN0YXRpYyBzaXplX3QgY3Vycl9wcmVmaXhfbGVuOworLS8qIFRoZXNlIHByZWZpeGVzIGRvIG5vdCBlbmQgaW4gYSBzbGFzaC4gIEFueXRoaW5nIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQKKy0gICB0byB0aGVtIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoLiAgKi8KKy0KKy0vKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGlzIG1vZHVsZS4KKy0gICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorLSAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCistICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorLSAgIGluc3RlYWQgb2YgIi8iKS4gICovCistc3RhdGljIHZvaWQKKy1zZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLAorLQkJCSAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisteworLSAgaWYgKG9yaWdfcHJlZml4X2FyZyAhPSBOVUxMICYmIGN1cnJfcHJlZml4X2FyZyAhPSBOVUxMCistICAgICAgLyogT3B0aW1pemF0aW9uOiBpZiBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggYXJlIGVxdWFsLCB0aGUKKy0JIHJlbG9jYXRpb24gaXMgYSBub3AuICAqLworLSAgICAgICYmIHN0cmNtcCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpICE9IDApCistICAgIHsKKy0gICAgICAvKiBEdXBsaWNhdGUgdGhlIGFyZ3VtZW50IHN0cmluZ3MuICAqLworLSAgICAgIGNoYXIgKm1lbW9yeTsKKy0KKy0gICAgICBvcmlnX3ByZWZpeF9sZW4gPSBzdHJsZW4gKG9yaWdfcHJlZml4X2FyZyk7CistICAgICAgY3Vycl9wcmVmaXhfbGVuID0gc3RybGVuIChjdXJyX3ByZWZpeF9hcmcpOworLSAgICAgIG1lbW9yeSA9IChjaGFyICopIHhtYWxsb2MgKG9yaWdfcHJlZml4X2xlbiArIDEgKyBjdXJyX3ByZWZpeF9sZW4gKyAxKTsKKy0jaWZkZWYgTk9fWE1BTExPQworLSAgICAgIGlmIChtZW1vcnkgIT0gTlVMTCkKKy0jZW5kaWYKKy0JeworLQkgIG1lbWNweSAobWVtb3J5LCBvcmlnX3ByZWZpeF9hcmcsIG9yaWdfcHJlZml4X2xlbiArIDEpOworLQkgIG9yaWdfcHJlZml4ID0gbWVtb3J5OworLQkgIG1lbW9yeSArPSBvcmlnX3ByZWZpeF9sZW4gKyAxOworLQkgIG1lbWNweSAobWVtb3J5LCBjdXJyX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2xlbiArIDEpOworLQkgIGN1cnJfcHJlZml4ID0gbWVtb3J5OworLQkgIHJldHVybjsKKy0JfQorLSAgICB9CistICBvcmlnX3ByZWZpeCA9IE5VTEw7CistICBjdXJyX3ByZWZpeCA9IE5VTEw7CistICAvKiBEb24ndCB3b3JyeSBhYm91dCB3YXN0ZWQgbWVtb3J5IGhlcmUgLSB0aGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgb25seQorLSAgICAgY2FsbGVkIG9uY2UuICAqLworLX0KKy0KKy0vKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKy0gICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorLSAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCistICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorLSAgIGluc3RlYWQgb2YgIi8iKS4gICovCistdm9pZAorLXNldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLCBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisteworLSAgc2V0X3RoaXNfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKy0KKy0gIC8qIE5vdyBub3RpZnkgYWxsIGRlcGVuZGVudCBsaWJyYXJpZXMuICAqLworLSNpZiBERVBFTkRTX09OX0xJQkNIQVJTRVQKKy0gIGxpYmNoYXJzZXRfc2V0X3JlbG9jYXRpb25fcHJlZml4IChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZyk7CistI2VuZGlmCistI2lmIERFUEVORFNfT05fTElCSUNPTlYgJiYgSEFWRV9JQ09OViAmJiBfTElCSUNPTlZfVkVSU0lPTiA+PSAweDAxMDkKKy0gIGxpYmljb252X3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworLSNlbmRpZgorLSNpZiBERVBFTkRTX09OX0xJQklOVEwgJiYgRU5BQkxFX05MUyAmJiBkZWZpbmVkIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4CistICBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworLSNlbmRpZgorLX0KKy0KKy0jaWYgIWRlZmluZWQgSU5fTElCUkFSWSB8fCAoZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSKQorLQorLS8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorLSAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorLSAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorLSAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKy0jaWZkZWYgSU5fTElCUkFSWQorLSNkZWZpbmUgY29tcHV0ZV9jdXJyX3ByZWZpeCBsb2NhbF9jb21wdXRlX2N1cnJfcHJlZml4Cistc3RhdGljCistI2VuZGlmCistY29uc3QgY2hhciAqCistY29tcHV0ZV9jdXJyX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4LAorLQkJICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCistCQkgICAgIGNvbnN0IGNoYXIgKmN1cnJfcGF0aG5hbWUpCisteworLSAgY29uc3QgY2hhciAqY3Vycl9pbnN0YWxsZGlyOworLSAgY29uc3QgY2hhciAqcmVsX2luc3RhbGxkaXI7CistCistICBpZiAoY3Vycl9wYXRobmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIC8qIERldGVybWluZSB0aGUgcmVsYXRpdmUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIHByZWZpeC4KKy0gICAgIFRoaXMgaXMgc2ltcGx5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb3JpZ19pbnN0YWxscHJlZml4IGFuZAorLSAgICAgb3JpZ19pbnN0YWxsZGlyLiAgKi8KKy0gIGlmIChzdHJuY21wIChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpKQorLSAgICAgICE9IDApCistICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gLSBub3RoaW5nIHNob3VsZCBiZSBpbnN0YWxsZWQgb3V0c2lkZSAkKHByZWZpeCkuICAqLworLSAgICByZXR1cm4gTlVMTDsKKy0gIHJlbF9pbnN0YWxsZGlyID0gb3JpZ19pbnN0YWxsZGlyICsgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpOworLQorLSAgLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICAqLworLSAgeworLSAgICBjb25zdCBjaGFyICpwX2Jhc2UgPSBjdXJyX3BhdGhuYW1lICsgRklMRV9TWVNURU1fUFJFRklYX0xFTiAoY3Vycl9wYXRobmFtZSk7CistICAgIGNvbnN0IGNoYXIgKnAgPSBjdXJyX3BhdGhuYW1lICsgc3RybGVuIChjdXJyX3BhdGhuYW1lKTsKKy0gICAgY2hhciAqcTsKKy0KKy0gICAgd2hpbGUgKHAgPiBwX2Jhc2UpCistICAgICAgeworLQlwLS07CistCWlmIChJU1NMQVNIICgqcCkpCistCSAgYnJlYWs7CistICAgICAgfQorLQorLSAgICBxID0gKGNoYXIgKikgeG1hbGxvYyAocCAtIGN1cnJfcGF0aG5hbWUgKyAxKTsKKy0jaWZkZWYgTk9fWE1BTExPQworLSAgICBpZiAocSA9PSBOVUxMKQorLSAgICAgIHJldHVybiBOVUxMOworLSNlbmRpZgorLSAgICBtZW1jcHkgKHEsIGN1cnJfcGF0aG5hbWUsIHAgLSBjdXJyX3BhdGhuYW1lKTsKKy0gICAgcVtwIC0gY3Vycl9wYXRobmFtZV0gPSAnXDAnOworLSAgICBjdXJyX2luc3RhbGxkaXIgPSBxOworLSAgfQorLQorLSAgLyogQ29tcHV0ZSB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IGJ5IHJlbW92aW5nIHRoZSB0cmFpbGluZworLSAgICAgcmVsX2luc3RhbGxkaXIgZnJvbSBpdC4gICovCistICB7CistICAgIGNvbnN0IGNoYXIgKnJwID0gcmVsX2luc3RhbGxkaXIgKyBzdHJsZW4gKHJlbF9pbnN0YWxsZGlyKTsKKy0gICAgY29uc3QgY2hhciAqY3AgPSBjdXJyX2luc3RhbGxkaXIgKyBzdHJsZW4gKGN1cnJfaW5zdGFsbGRpcik7CistICAgIGNvbnN0IGNoYXIgKmNwX2Jhc2UgPQorLSAgICAgIGN1cnJfaW5zdGFsbGRpciArIEZJTEVfU1lTVEVNX1BSRUZJWF9MRU4gKGN1cnJfaW5zdGFsbGRpcik7CistCistICAgIHdoaWxlIChycCA+IHJlbF9pbnN0YWxsZGlyICYmIGNwID4gY3BfYmFzZSkKKy0gICAgICB7CistCWJvb2wgc2FtZSA9IGZhbHNlOworLQljb25zdCBjaGFyICpycGkgPSBycDsKKy0JY29uc3QgY2hhciAqY3BpID0gY3A7CistCistCXdoaWxlIChycGkgPiByZWxfaW5zdGFsbGRpciAmJiBjcGkgPiBjcF9iYXNlKQorLQkgIHsKKy0JICAgIHJwaS0tOworLQkgICAgY3BpLS07CistCSAgICBpZiAoSVNTTEFTSCAoKnJwaSkgfHwgSVNTTEFTSCAoKmNwaSkpCistCSAgICAgIHsKKy0JCWlmIChJU1NMQVNIICgqcnBpKSAmJiBJU1NMQVNIICgqY3BpKSkKKy0JCSAgc2FtZSA9IHRydWU7CistCQlicmVhazsKKy0JICAgICAgfQorLQkgICAgLyogRG8gY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uIGlmIHRoZSBmaWxlc3lzdGVtIGlzIGFsd2F5cyBvcgorLQkgICAgICAgb2Z0ZW4gY2FzZS1pbnNlbnNpdGl2ZS4gIEl0J3MgYmV0dGVyIHRvIGFjY2VwdCB0aGUgY29tcGFyaXNvbgorLQkgICAgICAgaWYgdGhlIGRpZmZlcmVuY2UgaXMgb25seSBpbiBjYXNlLCByYXRoZXIgdGhhbiB0byBmYWlsLiAgKi8KKy0jaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworLQkgICAgLyogV2luMzIsIEN5Z3dpbiwgT1MvMiwgRE9TIC0gY2FzZSBpbnNpZ25pZmljYW50IGZpbGVzeXN0ZW0gKi8KKy0JICAgIGlmICgoKnJwaSA+PSAnYScgJiYgKnJwaSA8PSAneicgPyAqcnBpIC0gJ2EnICsgJ0EnIDogKnJwaSkKKy0JCSE9ICgqY3BpID49ICdhJyAmJiAqY3BpIDw9ICd6JyA/ICpjcGkgLSAnYScgKyAnQScgOiAqY3BpKSkKKy0JICAgICAgYnJlYWs7CistI2Vsc2UKKy0JICAgIGlmICgqcnBpICE9ICpjcGkpCistCSAgICAgIGJyZWFrOworLSNlbmRpZgorLQkgIH0KKy0JaWYgKCFzYW1lKQorLQkgIGJyZWFrOworLQkvKiBUaGUgbGFzdCBwYXRobmFtZSBjb21wb25lbnQgd2FzIHRoZSBzYW1lLiAgb3BpIGFuZCBjcGkgbm93IHBvaW50CistCSAgIHRvIHRoZSBzbGFzaCBiZWZvcmUgaXQuICAqLworLQlycCA9IHJwaTsKKy0JY3AgPSBjcGk7CistICAgICAgfQorLQorLSAgICBpZiAocnAgPiByZWxfaW5zdGFsbGRpcikKKy0gICAgICAvKiBVbmV4cGVjdGVkOiBUaGUgY3Vycl9pbnN0YWxsZGlyIGRvZXMgbm90IGVuZCB3aXRoIHJlbF9pbnN0YWxsZGlyLiAgKi8KKy0gICAgICByZXR1cm4gTlVMTDsKKy0KKy0gICAgeworLSAgICAgIHNpemVfdCBjdXJyX3ByZWZpeF9sZW4gPSBjcCAtIGN1cnJfaW5zdGFsbGRpcjsKKy0gICAgICBjaGFyICpjdXJyX3ByZWZpeDsKKy0KKy0gICAgICBjdXJyX3ByZWZpeCA9IChjaGFyICopIHhtYWxsb2MgKGN1cnJfcHJlZml4X2xlbiArIDEpOworLSNpZmRlZiBOT19YTUFMTE9DCistICAgICAgaWYgKGN1cnJfcHJlZml4ID09IE5VTEwpCistCXJldHVybiBOVUxMOworLSNlbmRpZgorLSAgICAgIG1lbWNweSAoY3Vycl9wcmVmaXgsIGN1cnJfaW5zdGFsbGRpciwgY3Vycl9wcmVmaXhfbGVuKTsKKy0gICAgICBjdXJyX3ByZWZpeFtjdXJyX3ByZWZpeF9sZW5dID0gJ1wwJzsKKy0KKy0gICAgICByZXR1cm4gY3Vycl9wcmVmaXg7CistICAgIH0KKy0gIH0KKy19CistCistI2VuZGlmIC8qICFJTl9MSUJSQVJZIHx8IFBJQyAqLworLQorLSNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKy0KKy0vKiBGdWxsIHBhdGhuYW1lIG9mIHNoYXJlZCBsaWJyYXJ5LCBvciBOVUxMLiAgKi8KKy1zdGF0aWMgY2hhciAqc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CistCistI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19DWUdXSU5fXworLQorLS8qIERldGVybWluZSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgd2hlbiBpdCBpcyBsb2FkZWQuICAqLworLQorLUJPT0wgV0lOQVBJCistRGxsTWFpbiAoSElOU1RBTkNFIG1vZHVsZV9oYW5kbGUsIERXT1JEIGV2ZW50LCBMUFZPSUQgcmVzZXJ2ZWQpCisteworLSAgKHZvaWQpIHJlc2VydmVkOworLQorLSAgaWYgKGV2ZW50ID09IERMTF9QUk9DRVNTX0FUVEFDSCkKKy0gICAgeworLSAgICAgIC8qIFRoZSBETEwgaXMgYmVpbmcgbG9hZGVkIGludG8gYW4gYXBwbGljYXRpb24ncyBhZGRyZXNzIHJhbmdlLiAgKi8KKy0gICAgICBzdGF0aWMgY2hhciBsb2NhdGlvbltNQVhfUEFUSF07CistCistICAgICAgaWYgKCFHZXRNb2R1bGVGaWxlTmFtZSAobW9kdWxlX2hhbmRsZSwgbG9jYXRpb24sIHNpemVvZiAobG9jYXRpb24pKSkKKy0JLyogU2hvdWxkbid0IGhhcHBlbi4gICovCistCXJldHVybiBGQUxTRTsKKy0KKy0gICAgICBpZiAoIUlTX1BBVEhfV0lUSF9ESVIgKGxvY2F0aW9uKSkKKy0JLyogU2hvdWxkbid0IGhhcHBlbi4gICovCistCXJldHVybiBGQUxTRTsKKy0KKy0gICAgICB7CistI2lmIGRlZmluZWQgX19DWUdXSU5fXworLQkvKiBPbiBDeWd3aW4sIHdlIG5lZWQgdG8gY29udmVydCBwYXRocyBjb21pbmcgZnJvbSBXaW4zMiBzeXN0ZW0gY2FsbHMKKy0JICAgdG8gdGhlIFVuaXgtbGlrZSBzbGFzaGlmaWVkIG5vdGF0aW9uLiAgKi8KKy0Jc3RhdGljIGNoYXIgbG9jYXRpb25fYXNfcG9zaXhfcGF0aFsyICogTUFYX1BBVEhdOworLQkvKiBUaGVyZSdzIG5vIGVycm9yIHJldHVybiBkZWZpbmVkIGZvciBjeWd3aW5fY29udl90b19wb3NpeF9wYXRoLgorLQkgICBTZWUgY3lnd2luLWFwaS9mdW5jLWN5Z3dpbi1jb252LXRvLXBvc2l4LXBhdGguaHRtbC4KKy0JICAgRG9lcyBpdCBvdmVyZmxvdyB0aGUgYnVmZmVyIG9mIGV4cGVjdGVkIHNpemUgTUFYX1BBVEggb3IgZG9lcyBpdAorLQkgICB0cnVuY2F0ZSB0aGUgcGF0aD8gIEkgZG9uJ3Qga25vdy4gIExldCdzIGNhdGNoIGJvdGguICAqLworLQljeWd3aW5fY29udl90b19wb3NpeF9wYXRoIChsb2NhdGlvbiwgbG9jYXRpb25fYXNfcG9zaXhfcGF0aCk7CistCWxvY2F0aW9uX2FzX3Bvc2l4X3BhdGhbTUFYX1BBVEggLSAxXSA9ICdcMCc7CistCWlmIChzdHJsZW4gKGxvY2F0aW9uX2FzX3Bvc2l4X3BhdGgpID49IE1BWF9QQVRIIC0gMSkKKy0JICAvKiBBIHNpZ24gb2YgYnVmZmVyIG92ZXJmbG93IG9yIHBhdGggdHJ1bmNhdGlvbi4gICovCistCSAgcmV0dXJuIEZBTFNFOworLQlzaGFyZWRfbGlicmFyeV9mdWxsbmFtZSA9IHN0cmR1cCAobG9jYXRpb25fYXNfcG9zaXhfcGF0aCk7CistI2Vsc2UKKy0Jc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgPSBzdHJkdXAgKGxvY2F0aW9uKTsKKy0jZW5kaWYKKy0gICAgICB9CistICAgIH0KKy0KKy0gIHJldHVybiBUUlVFOworLX0KKy0KKy0jZWxzZSAvKiBVbml4IGV4Y2VwdCBDeWd3aW4gKi8KKy0KKy1zdGF0aWMgdm9pZAorLWZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkKKy17CistI2lmIGRlZmluZWQgX19saW51eF9fICYmIF9fR0xJQkNfXyA+PSAyCistICAvKiBMaW51eCBoYXMgL3Byb2Mvc2VsZi9tYXBzLiBnbGliYyAyIGhhcyB0aGUgZ2V0bGluZSgpIGZ1bmN0aW9uLiAgKi8KKy0gIEZJTEUgKmZwOworLQorLSAgLyogT3BlbiB0aGUgY3VycmVudCBwcm9jZXNzJyBtYXBzIGZpbGUuICBJdCBkZXNjcmliZXMgb25lIFZNQSBwZXIgbGluZS4gICovCistICBmcCA9IGZvcGVuICgiL3Byb2Mvc2VsZi9tYXBzIiwgInIiKTsKKy0gIGlmIChmcCkKKy0gICAgeworLSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSAmZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZTsKKy0gICAgICBmb3IgKDs7KQorLQl7CistCSAgdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworLQkgIGludCBjOworLQorLQkgIGlmIChmc2NhbmYgKGZwLCAiJWx4LSVseCIsICZzdGFydCwgJmVuZCkgIT0gMikKKy0JICAgIGJyZWFrOworLQkgIGlmIChhZGRyZXNzID49IHN0YXJ0ICYmIGFkZHJlc3MgPD0gZW5kIC0gMSkKKy0JICAgIHsKKy0JICAgICAgLyogRm91bmQgaXQuICBOb3cgc2VlIGlmIHRoaXMgbGluZSBjb250YWlucyBhIGZpbGVuYW1lLiAgKi8KKy0JICAgICAgd2hpbGUgKGMgPSBnZXRjIChmcCksIGMgIT0gRU9GICYmIGMgIT0gJ1xuJyAmJiBjICE9ICcvJykKKy0JCWNvbnRpbnVlOworLQkgICAgICBpZiAoYyA9PSAnLycpCistCQl7CistCQkgIHNpemVfdCBzaXplOworLQkJICBpbnQgbGVuOworLQorLQkJICB1bmdldGMgKGMsIGZwKTsKKy0JCSAgc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgPSBOVUxMOyBzaXplID0gMDsKKy0JCSAgbGVuID0gZ2V0bGluZSAoJnNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lLCAmc2l6ZSwgZnApOworLQkJICBpZiAobGVuID49IDApCistCQkgICAgeworLQkJICAgICAgLyogU3VjY2VzczogZmlsbGVkIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lLiAgKi8KKy0JCSAgICAgIGlmIChsZW4gPiAwICYmIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lW2xlbiAtIDFdID09ICdcbicpCistCQkJc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWVbbGVuIC0gMV0gPSAnXDAnOworLQkJICAgIH0KKy0JCX0KKy0JICAgICAgYnJlYWs7CistCSAgICB9CistCSAgd2hpbGUgKGMgPSBnZXRjIChmcCksIGMgIT0gRU9GICYmIGMgIT0gJ1xuJykKKy0JICAgIGNvbnRpbnVlOworLQl9CistICAgICAgZmNsb3NlIChmcCk7CistICAgIH0KKy0jZW5kaWYKKy19CistCistI2VuZGlmIC8qIChXSU4zMiBvciBDeWd3aW4pIC8gKFVuaXggZXhjZXB0IEN5Z3dpbikgKi8KKy0KKy0vKiBSZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgc2hhcmVkIGxpYnJhcnkuCistICAgUmV0dXJuIE5VTEwgaWYgdW5rbm93bi4KKy0gICBHdWFyYW50ZWVkIHRvIHdvcmsgb25seSBvbiBMaW51eCwgQ3lnd2luIGFuZCBXb2UzMi4gICovCistc3RhdGljIGNoYXIgKgorLWdldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKQorLXsKKy0jaWYgIShkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18pCistICBzdGF0aWMgYm9vbCB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworLSAgaWYgKCF0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lKQorLSAgICB7CistICAgICAgZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKTsKKy0gICAgICB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gdHJ1ZTsKKy0gICAgfQorLSNlbmRpZgorLSAgcmV0dXJuIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworLX0KKy0KKy0jZW5kaWYgLyogUElDICovCistCistLyogUmV0dXJucyB0aGUgcGF0aG5hbWUsIHJlbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uCistICAgZGlyZWN0b3J5LiAgKi8KKy1jb25zdCBjaGFyICoKKy1yZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpCisteworLSNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKy0gIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CistCistICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciBhIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKy0gIGlmICghaW5pdGlhbGl6ZWQpCistICAgIHsKKy0gICAgICAvKiBBdCB0aGlzIHBvaW50LCBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggbGlrZWx5IGhhdmUgYWxyZWFkeSBiZWVuCistCSBzZXQgdGhyb3VnaCB0aGUgbWFpbiBwcm9ncmFtJ3Mgc2V0X3Byb2dyYW1fbmFtZV9hbmRfaW5zdGFsbGRpcgorLQkgZnVuY3Rpb24uICBUaGlzIGlzIHN1ZmZpY2llbnQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgbGlicmFyeSBoYXMKKy0JIGluaXRpYWxseSBiZWVuIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBvcmlnX3ByZWZpeC4gIEJ1dCB3ZSBjYW4gZG8KKy0JIGJldHRlciwgdG8gYWxzbyBjb3ZlciB0aGUgY2FzZXMgdGhhdCAxLiBpdCBoYXMgYmVlbiBpbnN0YWxsZWQKKy0JIGluIGEgZGlmZmVyZW50IHByZWZpeCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gb3JpZ19wcmVmaXggYW5kIChsYXRlcikKKy0JIHRvIGN1cnJfcHJlZml4LCAyLiB1bmxpa2UgdGhlIHByb2dyYW0sIGl0IGhhcyBub3QgbW92ZWQgYXdheSBmcm9tCistCSBvcmlnX3ByZWZpeC4gICovCistICAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4ID0gSU5TVEFMTFBSRUZJWDsKKy0gICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIgPSBJTlNUQUxMRElSOworLSAgICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2JldHRlcjsKKy0KKy0gICAgICBjdXJyX3ByZWZpeF9iZXR0ZXIgPQorLQljb21wdXRlX2N1cnJfcHJlZml4IChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwKKy0JCQkgICAgIGdldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKSk7CistICAgICAgaWYgKGN1cnJfcHJlZml4X2JldHRlciA9PSBOVUxMKQorLQljdXJyX3ByZWZpeF9iZXR0ZXIgPSBjdXJyX3ByZWZpeDsKKy0KKy0gICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgY3Vycl9wcmVmaXhfYmV0dGVyKTsKKy0KKy0gICAgICBpbml0aWFsaXplZCA9IDE7CistICAgIH0KKy0jZW5kaWYKKy0KKy0gIC8qIE5vdGU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gaGVyZSwKKy0gICAgIGV2ZW4gZm9yIERPUy1saWtlIGZpbGVzeXN0ZW1zLCBiZWNhdXNlIHRoZSBwYXRobmFtZSBhcmd1bWVudCB3YXMKKy0gICAgIHR5cGljYWxseSBjcmVhdGVkIGZyb20gdGhlIHNhbWUgTWFrZWZpbGUgdmFyaWFibGUgYXMgb3JpZ19wcmVmaXggY2FtZQorLSAgICAgZnJvbS4gICovCistICBpZiAob3JpZ19wcmVmaXggIT0gTlVMTCAmJiBjdXJyX3ByZWZpeCAhPSBOVUxMCistICAgICAgJiYgc3RybmNtcCAocGF0aG5hbWUsIG9yaWdfcHJlZml4LCBvcmlnX3ByZWZpeF9sZW4pID09IDApCistICAgIHsKKy0gICAgICBpZiAocGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXSA9PSAnXDAnKQorLQkvKiBwYXRobmFtZSBlcXVhbHMgb3JpZ19wcmVmaXguICAqLworLQlyZXR1cm4gY3Vycl9wcmVmaXg7CistICAgICAgaWYgKElTU0xBU0ggKHBhdGhuYW1lW29yaWdfcHJlZml4X2xlbl0pKQorLQl7CistCSAgLyogcGF0aG5hbWUgc3RhcnRzIHdpdGggb3JpZ19wcmVmaXguICAqLworLQkgIGNvbnN0IGNoYXIgKnBhdGhuYW1lX3RhaWwgPSAmcGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXTsKKy0JICBjaGFyICpyZXN1bHQgPQorLQkgICAgKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgc3RybGVuIChwYXRobmFtZV90YWlsKSArIDEpOworLQorLSNpZmRlZiBOT19YTUFMTE9DCistCSAgaWYgKHJlc3VsdCAhPSBOVUxMKQorLSNlbmRpZgorLQkgICAgeworLQkgICAgICBtZW1jcHkgKHJlc3VsdCwgY3Vycl9wcmVmaXgsIGN1cnJfcHJlZml4X2xlbik7CistCSAgICAgIHN0cmNweSAocmVzdWx0ICsgY3Vycl9wcmVmaXhfbGVuLCBwYXRobmFtZV90YWlsKTsKKy0JICAgICAgcmV0dXJuIHJlc3VsdDsKKy0JICAgIH0KKy0JfQorLSAgICB9CistICAvKiBOb3RoaW5nIHRvIHJlbG9jYXRlLiAgKi8KKy0gIHJldHVybiBwYXRobmFtZTsKKy19CistCistI2VuZGlmCistLS0gYS9pbnRsL3JlbG9jYXRhYmxlLmgKKysrKyAvZGV2L251bGwKK0BAIC0xLDc5ICswLDAgQEAKKy0vKiBQcm92aWRlIHJlbG9jYXRhYmxlIHBhY2thZ2VzLgorLSAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPiwgMjAwMy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZm5kZWYgX1JFTE9DQVRBQkxFX0gKKy0jZGVmaW5lIF9SRUxPQ0FUQUJMRV9ICistCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistCistLyogVGhpcyBjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmUgLS1lbmFibGUtcmVsb2NhdGFibGUgb3B0aW9uLiAgKi8KKy0jaWYgRU5BQkxFX1JFTE9DQVRBQkxFCistCistLyogV2hlbiBidWlsZGluZyBhIERMTCwgd2UgbXVzdCBleHBvcnQgc29tZSBmdW5jdGlvbnMuICBOb3RlIHRoYXQgYmVjYXVzZQorLSAgIHRoaXMgaXMgYSBwcml2YXRlIC5oIGZpbGUsIHdlIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorLSAgIGluIGFueSBjYXNlLiAgKi8KKy0jaWYgSEFWRV9WSVNJQklMSVRZICYmIEJVSUxESU5HX0RMTAorLSMgZGVmaW5lIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRCBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiZGVmYXVsdCIpKSkKKy0jZWxpZiBkZWZpbmVkIF9NU0NfVkVSICYmIEJVSUxESU5HX0RMTAorLSMgZGVmaW5lIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKy0jZWxzZQorLSMgZGVmaW5lIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRAorLSNlbmRpZgorLQorLS8qIFNldHMgdGhlIG9yaWdpbmFsIGFuZCB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gcHJlZml4IG9mIHRoZSBwYWNrYWdlLgorLSAgIFJlbG9jYXRpb24gc2ltcGx5IHJlcGxhY2VzIGEgcGF0aG5hbWUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwgcHJlZml4CistICAgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcGF0aG5hbWUgd2l0aCB0aGUgY3VycmVudCBwcmVmaXggaW5zdGVhZC4gIEJvdGgKKy0gICBwcmVmaXhlcyBzaG91bGQgYmUgZGlyZWN0b3J5IG5hbWVzIHdpdGhvdXQgdHJhaWxpbmcgc2xhc2ggKGkuZS4gdXNlICIiCistICAgaW5zdGVhZCBvZiAiLyIpLiAgKi8KKy1leHRlcm4gUkVMT0NBVEFCTEVfRExMX0VYUE9SVEVEIHZvaWQKKy0gICAgICAgc2V0X3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeCwKKy0JCQkgICAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeCk7CistCistLyogUmV0dXJucyB0aGUgcGF0aG5hbWUsIHJlbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uCistICAgZGlyZWN0b3J5LiAgKi8KKy1leHRlcm4gY29uc3QgY2hhciAqIHJlbG9jYXRlIChjb25zdCBjaGFyICpwYXRobmFtZSk7CistCistLyogTWVtb3J5IG1hbmFnZW1lbnQ6IHJlbG9jYXRlKCkgbGVha3MgbWVtb3J5LCBiZWNhdXNlIGl0IGhhcyB0byBjb25zdHJ1Y3QKKy0gICBhIGZyZXNoIHBhdGhuYW1lLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSB5b3VyIHByb2dyYW0gY2FsbHMKKy0gICByZWxvY2F0ZSgpIGZyZXF1ZW50bHksIHRoaW5rIGFib3V0IGNhY2hpbmcgdGhlIHJlc3VsdC4gICovCistCistLyogQ29udmVuaWVuY2UgZnVuY3Rpb246CistICAgQ29tcHV0ZXMgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCwgYmFzZWQgb24gdGhlIG9yaWdpbmFsCistICAgaW5zdGFsbGF0aW9uIHByZWZpeCwgdGhlIG9yaWdpbmFsIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgYSBwYXJ0aWN1bGFyCistICAgZmlsZSwgYW5kIHRoZSBjdXJyZW50IHBhdGhuYW1lIG9mIHRoaXMgZmlsZS4gIFJldHVybnMgTlVMTCB1cG9uIGZhaWx1cmUuICAqLworLWV4dGVybiBjb25zdCBjaGFyICogY29tcHV0ZV9jdXJyX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4LAorLQkJCQkJIGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbGRpciwKKy0JCQkJCSBjb25zdCBjaGFyICpjdXJyX3BhdGhuYW1lKTsKKy0KKy0jZWxzZQorLQorLS8qIEJ5IGRlZmF1bHQsIHdlIHVzZSB0aGUgaGFyZHdpcmVkIHBhdGhuYW1lcy4gICovCistI2RlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorLQorLSNlbmRpZgorLQorLQorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKy0jZW5kaWYKKy0KKy0jZW5kaWYgLyogX1JFTE9DQVRBQkxFX0ggKi8KKy0tLSBhL2ludGwvdGV4dGRvbWFpbi5jCisrKysgL2Rldi9udWxsCitAQCAtMSwxMjcgKzAsMCBAQAorLS8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSB0ZXh0ZG9tYWluKDMpIGZ1bmN0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMsIDIwMDUtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLQorLSNpbmNsdWRlICJnZXR0ZXh0UC5oIgorLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorLSNlbHNlCistIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCistI2VuZGlmCistCistLyogSGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorLSMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmUKKy0jIGRlZmluZSBnbF9yd2xvY2tfd3Jsb2NrIF9fbGliY19yd2xvY2tfd3Jsb2NrCistIyBkZWZpbmUgZ2xfcndsb2NrX3VubG9jayBfX2xpYmNfcndsb2NrX3VubG9jaworLSNlbHNlCistIyBpbmNsdWRlICJsb2NrLmgiCistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLQorLS8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKy0gICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCistICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCistICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBURVhURE9NQUlOIF9fdGV4dGRvbWFpbgorLSMgaWZuZGVmIHN0cmR1cAorLSMgIGRlZmluZSBzdHJkdXAoc3RyKSBfX3N0cmR1cCAoc3RyKQorLSMgZW5kaWYKKy0jZWxzZQorLSMgZGVmaW5lIFRFWFRET01BSU4gbGliaW50bF90ZXh0ZG9tYWluCistI2VuZGlmCistCistLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCistZ2xfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfbmxfc3RhdGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorLQorLS8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorLSAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCistICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCistY2hhciAqCistVEVYVERPTUFJTiAoY29uc3QgY2hhciAqZG9tYWlubmFtZSkKKy17CistICBjaGFyICpuZXdfZG9tYWluOworLSAgY2hhciAqb2xkX2RvbWFpbjsKKy0KKy0gIC8qIEEgTlVMTCBwb2ludGVyIHJlcXVlc3RzIHRoZSBjdXJyZW50IHNldHRpbmcuICAqLworLSAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKy0gICAgcmV0dXJuIChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworLQorLSAgZ2xfcndsb2NrX3dybG9jayAoX25sX3N0YXRlX2xvY2spOworLQorLSAgb2xkX2RvbWFpbiA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworLQorLSAgLyogSWYgZG9tYWluIG5hbWUgaXMgdGhlIG51bGwgc3RyaW5nIHNldCB0byBkZWZhdWx0IGRvbWFpbiAibWVzc2FnZXMiLiAgKi8KKy0gIGlmIChkb21haW5uYW1lWzBdID09ICdcMCcKKy0gICAgICB8fCBzdHJjbXAgKGRvbWFpbm5hbWUsIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluKSA9PSAwKQorLSAgICB7CistICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKy0gICAgICBuZXdfZG9tYWluID0gKGNoYXIgKikgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CistICAgIH0KKy0gIGVsc2UgaWYgKHN0cmNtcCAoZG9tYWlubmFtZSwgb2xkX2RvbWFpbikgPT0gMCkKKy0gICAgLyogVGhpcyBjYW4gaGFwcGVuIGFuZCBwZW9wbGUgd2lsbCB1c2UgaXQgdG8gc2lnbmFsIHRoYXQgc29tZQorLSAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBjaGFuZ2VkLiAgKi8KKy0gICAgbmV3X2RvbWFpbiA9IG9sZF9kb21haW47CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBJZiB0aGUgZm9sbG93aW5nIG1hbGxvYyBmYWlscyBgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4nCistCSB3aWxsIGJlIE5VTEwuICBUaGlzIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQgYW5kIHNvIHNpZ25hbHMgd2UKKy0JIGFyZSBvdXQgb2YgY29yZS4gICovCistI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX1NUUkRVUAorLSAgICAgIG5ld19kb21haW4gPSBzdHJkdXAgKGRvbWFpbm5hbWUpOworLSNlbHNlCistICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZG9tYWlubmFtZSkgKyAxOworLSAgICAgIG5ld19kb21haW4gPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKy0JbWVtY3B5IChuZXdfZG9tYWluLCBkb21haW5uYW1lLCBsZW4pOworLSNlbmRpZgorLQorLSAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCistCV9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gbmV3X2RvbWFpbjsKKy0gICAgfQorLQorLSAgLyogV2UgdXNlIHRoaXMgcG9zc2liaWxpdHkgdG8gc2lnbmFsIGEgY2hhbmdlIG9mIHRoZSBsb2FkZWQgY2F0YWxvZ3MKKy0gICAgIHNpbmNlIHRoaXMgaXMgbW9zdCBsaWtlbHkgdGhlIGNhc2UgYW5kIHRoZXJlIGlzIG5vIG90aGVyIGVhc3kgd2UKKy0gICAgIHRvIGRvIGl0LiAgRG8gaXQgb25seSB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsLiAgKi8KKy0gIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCistICAgIHsKKy0gICAgICArK19ubF9tc2dfY2F0X2NudHI7CistCistICAgICAgaWYgKG9sZF9kb21haW4gIT0gbmV3X2RvbWFpbiAmJiBvbGRfZG9tYWluICE9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluKQorLQlmcmVlIChvbGRfZG9tYWluKTsKKy0gICAgfQorLQorLSAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworLQorLSAgcmV0dXJuIG5ld19kb21haW47CistfQorLQorLSNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworLXdlYWtfYWxpYXMgKF9fdGV4dGRvbWFpbiwgdGV4dGRvbWFpbik7CistI2VuZGlmCistLS0gYS9pbnRsL3RzZWFyY2guYworKysrIC9kZXYvbnVsbAorQEAgLTEsNjg0ICswLDAgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgQ29udHJpYnV0ZWQgYnkgQmVybmQgU2NobWlkdCA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+LCAxOTk3LgorLQorLSAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDCistICAgTGlicmFyeS4gIEJ1Z3MgY2FuIGJlIHJlcG9ydGVkIHRvIGJ1Zy1nbGliY0BnbnUub3JnLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistLyogVHJlZSBzZWFyY2ggZm9yIHJlZC9ibGFjayB0cmVlcy4KKy0gICBUaGUgYWxnb3JpdGhtIGZvciBhZGRpbmcgbm9kZXMgaXMgdGFrZW4gZnJvbSBvbmUgb2YgdGhlIG1hbnkgIkFsZ29yaXRobXMiCistICAgYm9va3MgYnkgUm9iZXJ0IFNlZGdld2ljaywgYWx0aG91Z2ggdGhlIGltcGxlbWVudGF0aW9uIGRpZmZlcnMuCistICAgVGhlIGFsZ29yaXRobSBmb3IgZGVsZXRpbmcgbm9kZXMgY2FuIHByb2JhYmx5IGJlIGZvdW5kIGluIGEgYm9vayBuYW1lZAorLSAgICJJbnRyb2R1Y3Rpb24gdG8gQWxnb3JpdGhtcyIgYnkgQ29ybWVuL0xlaXNlcnNvbi9SaXZlc3QuICBBdCBsZWFzdCB0aGF0J3MKKy0gICB0aGUgYm9vayB0aGF0IG15IHByb2Zlc3NvciB0b29rIG1vc3QgYWxnb3JpdGhtcyBmcm9tIGR1cmluZyB0aGUgIkRhdGEKKy0gICBTdHJ1Y3R1cmVzIiBjb3Vyc2UuLi4KKy0KKy0gICBUb3RhbGx5IHB1YmxpYyBkb21haW4uICAqLworLQorLS8qIFJlZC9ibGFjayB0cmVlcyBhcmUgYmluYXJ5IHRyZWVzIGluIHdoaWNoIHRoZSBlZGdlcyBhcmUgY29sb3JlZCBlaXRoZXIgcmVkCistICAgb3IgYmxhY2suICBUaGV5IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorLSAgIDEuIFRoZSBudW1iZXIgb2YgYmxhY2sgZWRnZXMgb24gZXZlcnkgcGF0aCBmcm9tIHRoZSByb290IHRvIGEgbGVhZiBpcworLSAgICAgIGNvbnN0YW50LgorLSAgIDIuIE5vIHR3byByZWQgZWRnZXMgYXJlIGFkamFjZW50LgorLSAgIFRoZXJlZm9yZSB0aGVyZSBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgbGVuZ3RoIG9mIGV2ZXJ5IHBhdGgsIGl0J3MKKy0gICBPKGxvZyBuKSB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIHRyZWUuICBObyBwYXRoIGNhbiBiZSBsb25nZXIKKy0gICB0aGFuIDErMipQIHdoZXJlIFAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlc3QgcGF0aCBpbiB0aGUgdHJlZS4KKy0gICBVc2VmdWwgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbjoKKy0gICAzLiBJZiBvbmUgb2YgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZSBpcyBOVUxMLCB0aGVuIHRoZSBvdGhlciBvbmUgaXMgcmVkCistICAgICAgKGlmIGl0IGV4aXN0cykuCistCistICAgSW4gdGhlIGltcGxlbWVudGF0aW9uLCBub3QgdGhlIGVkZ2VzIGFyZSBjb2xvcmVkLCBidXQgdGhlIG5vZGVzLiAgVGhlIGNvbG9yCistICAgaW50ZXJwcmV0ZWQgYXMgdGhlIGNvbG9yIG9mIHRoZSBlZGdlIGxlYWRpbmcgdG8gdGhpcyBub2RlLiAgVGhlIGNvbG9yIGlzCistICAgbWVhbmluZ2xlc3MgZm9yIHRoZSByb290IG5vZGUsIGJ1dCB3ZSBjb2xvciB0aGUgcm9vdCBub2RlIGJsYWNrIGZvcgorLSAgIGNvbnZlbmllbmNlLiAgQWxsIGFkZGVkIG5vZGVzIGFyZSByZWQgaW5pdGlhbGx5LgorLQorLSAgIEFkZGluZyB0byBhIHJlZC9ibGFjayB0cmVlIGlzIHJhdGhlciBlYXN5LiAgVGhlIHJpZ2h0IHBsYWNlIGlzIHNlYXJjaGVkCistICAgd2l0aCBhIHVzdWFsIGJpbmFyeSB0cmVlIHNlYXJjaC4gIEFkZGl0aW9uYWxseSwgd2hlbmV2ZXIgYSBub2RlIE4gaXMKKy0gICByZWFjaGVkIHRoYXQgaGFzIHR3byByZWQgc3VjY2Vzc29ycywgdGhlIHN1Y2Nlc3NvcnMgYXJlIGNvbG9yZWQgYmxhY2sgYW5kCistICAgdGhlIG5vZGUgaXRzZWxmIGNvbG9yZWQgcmVkLiAgVGhpcyBtb3ZlcyByZWQgZWRnZXMgdXAgdGhlIHRyZWUgd2hlcmUgdGhleQorLSAgIHBvc2UgbGVzcyBvZiBhIHByb2JsZW0gb25jZSB3ZSBnZXQgdG8gcmVhbGx5IGluc2VydCB0aGUgbmV3IG5vZGUuICBDaGFuZ2luZworLSAgIE4ncyBjb2xvciB0byByZWQgbWF5IHZpb2xhdGUgcnVsZSAyLCBob3dldmVyLCBzbyByb3RhdGlvbnMgbWF5IGJlY29tZQorLSAgIG5lY2Vzc2FyeSB0byByZXN0b3JlIHRoZSBpbnZhcmlhbnRzLiAgQWRkaW5nIGEgbmV3IHJlZCBsZWFmIG1heSB2aW9sYXRlCistICAgdGhlIHNhbWUgcnVsZSwgc28gYWZ0ZXJ3YXJkcyBhbiBhZGRpdGlvbmFsIGNoZWNrIGlzIHJ1biBhbmQgdGhlIHRyZWUKKy0gICBwb3NzaWJseSByb3RhdGVkLgorLQorLSAgIERlbGV0aW5nIGlzIGhhaXJ5LiAgVGhlcmUgYXJlIG1haW5seSB0d28gbm9kZXMgaW52b2x2ZWQ6IHRoZSBub2RlIHRvIGJlCistICAgZGVsZXRlZCAobjEpLCBhbmQgYW5vdGhlciBub2RlIHRoYXQgaXMgdG8gYmUgdW5jaGFpbmVkIGZyb20gdGhlIHRyZWUgKG4yKS4KKy0gICBJZiBuMSBoYXMgYSBzdWNjZXNzb3IgKHRoZSBub2RlIHdpdGggYSBzbWFsbGVzdCBrZXkgdGhhdCBpcyBsYXJnZXIgdGhhbgorLSAgIG4xKSwgdGhlbiB0aGUgc3VjY2Vzc29yIGJlY29tZXMgbjIgYW5kIGl0cyBjb250ZW50cyBhcmUgY29waWVkIGludG8gbjEsCistICAgb3RoZXJ3aXNlIG4xIGJlY29tZXMgbjIuCistICAgVW5jaGFpbmluZyBhIG5vZGUgbWF5IHZpb2xhdGUgcnVsZSAxOiBpZiBuMiBpcyBibGFjaywgb25lIHN1YnRyZWUgaXMKKy0gICBtaXNzaW5nIG9uZSBibGFjayBlZGdlIGFmdGVyd2FyZHMuICBUaGUgYWxnb3JpdGhtIG11c3QgdHJ5IHRvIG1vdmUgdGhpcworLSAgIGVycm9yIHVwd2FyZHMgdG93YXJkcyB0aGUgcm9vdCwgc28gdGhhdCB0aGUgc3VidHJlZSB0aGF0IGRvZXMgbm90IGhhdmUKKy0gICBlbm91Z2ggYmxhY2sgZWRnZXMgYmVjb21lcyB0aGUgd2hvbGUgdHJlZS4gIE9uY2UgdGhhdCBoYXBwZW5zLCB0aGUgZXJyb3IKKy0gICBoYXMgZGlzYXBwZWFyZWQuICBJdCBtYXkgbm90IGJlIG5lY2Vzc2FyeSB0byBnbyBhbGwgdGhlIHdheSB1cCwgc2luY2UgaXQKKy0gICBpcyBwb3NzaWJsZSB0aGF0IHJvdGF0aW9ucyBhbmQgcmVjb2xvcmluZyBjYW4gZml4IHRoZSBlcnJvciBiZWZvcmUgdGhhdC4KKy0KKy0gICBBbHRob3VnaCB0aGUgZGVsZXRpb24gYWxnb3JpdGhtIG11c3Qgd2FsayB1cHdhcmRzIHRocm91Z2ggdGhlIHRyZWUsIHdlCistICAgZG8gbm90IHN0b3JlIHBhcmVudCBwb2ludGVycyBpbiB0aGUgbm9kZXMuICBJbnN0ZWFkLCBkZWxldGUgYWxsb2NhdGVzIGEKKy0gICBzbWFsbCBhcnJheSBvZiBwYXJlbnQgcG9pbnRlcnMgYW5kIGZpbGxzIGl0IHdoaWxlIGRlc2NlbmRpbmcgdGhlIHRyZWUuCistICAgU2luY2Ugd2Uga25vdyB0aGF0IHRoZSBsZW5ndGggb2YgYSBwYXRoIGlzIE8obG9nIG4pLCB3aGVyZSBuIGlzIHRoZSBudW1iZXIKKy0gICBvZiBub2RlcywgdGhpcyBpcyBsaWtlbHkgdG8gdXNlIGxlc3MgbWVtb3J5LiAgKi8KKy0KKy0vKiBUcmVlIHJvdGF0aW9ucyBsb29rIGxpa2UgdGhpczoKKy0gICAgICBBICAgICAgICAgICAgICAgIEMKKy0gICAgIC8gXCAgICAgICAgICAgICAgLyBcCistICAgIEIgICBDICAgICAgICAgICAgQSAgIEcKKy0gICAvIFwgLyBcICAtLT4gICAgIC8gXAorLSAgIEQgRSBGIEcgICAgICAgICBCICAgRgorLSAgICAgICAgICAgICAgICAgIC8gXAorLSAgICAgICAgICAgICAgICAgRCAgIEUKKy0KKy0gICBJbiB0aGlzIGNhc2UsIEEgaGFzIGJlZW4gcm90YXRlZCBsZWZ0LiAgVGhpcyBwcmVzZXJ2ZXMgdGhlIG9yZGVyaW5nIG9mIHRoZQorLSAgIGJpbmFyeSB0cmVlLiAgKi8KKy0KKy0jaW5jbHVkZSA8Y29uZmlnLmg+CistCistLyogU3BlY2lmaWNhdGlvbi4gICovCistI2lmZGVmIElOX0xJQklOVEwKKy0jIGluY2x1ZGUgInRzZWFyY2guaCIKKy0jZWxzZQorLSMgaW5jbHVkZSA8c2VhcmNoLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLQorLXR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKy10eXBlZGVmIHZvaWQgKCpfX2FjdGlvbl9mbl90KSAoY29uc3Qgdm9pZCAqLCBWSVNJVCwgaW50KTsKKy0KKy0jaWZuZGVmIHdlYWtfYWxpYXMKKy0jIGRlZmluZSBfX3RzZWFyY2ggdHNlYXJjaAorLSMgZGVmaW5lIF9fdGZpbmQgdGZpbmQKKy0jIGRlZmluZSBfX3RkZWxldGUgdGRlbGV0ZQorLSMgZGVmaW5lIF9fdHdhbGsgdHdhbGsKKy0jZW5kaWYKKy0KKy0jaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCistLyogSW5zaWRlIEdOVSBsaWJjIHdlIG1hcmsgc29tZSBmdW5jdGlvbiBpbiBhIHNwZWNpYWwgd2F5LiAgSW4gb3RoZXIKKy0gICBlbnZpcm9ubWVudHMgc2ltcGx5IGlnbm9yZSB0aGUgbWFya2luZy4gICovCistIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKy0jZW5kaWYKKy0KKy10eXBlZGVmIHN0cnVjdCBub2RlX3QKKy17CistICAvKiBDYWxsZXJzIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzdHJ1Y3R1cmUgLSBkbyBub3QKKy0gICAgIG1vdmUhICAqLworLSAgY29uc3Qgdm9pZCAqa2V5OworLSAgc3RydWN0IG5vZGVfdCAqbGVmdDsKKy0gIHN0cnVjdCBub2RlX3QgKnJpZ2h0OworLSAgdW5zaWduZWQgaW50IHJlZDoxOworLX0gKm5vZGU7CistdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgbm9kZV90ICpjb25zdF9ub2RlOworLQorLSN1bmRlZiBERUJVR0dJTkcKKy0KKy0jaWZkZWYgREVCVUdHSU5HCistCistLyogUm91dGluZXMgdG8gY2hlY2sgdHJlZSBpbnZhcmlhbnRzLiAgKi8KKy0KKy0jaW5jbHVkZSA8YXNzZXJ0Lmg+CistCistI2RlZmluZSBDSEVDS19UUkVFKGEpIGNoZWNrX3RyZWUoYSkKKy0KKy1zdGF0aWMgdm9pZAorLWNoZWNrX3RyZWVfcmVjdXJzZSAobm9kZSBwLCBpbnQgZF9zb2ZhciwgaW50IGRfdG90YWwpCisteworLSAgaWYgKHAgPT0gTlVMTCkKKy0gICAgeworLSAgICAgIGFzc2VydCAoZF9zb2ZhciA9PSBkX3RvdGFsKTsKKy0gICAgICByZXR1cm47CistICAgIH0KKy0KKy0gIGNoZWNrX3RyZWVfcmVjdXJzZSAocC0+bGVmdCwgZF9zb2ZhciArIChwLT5sZWZ0ICYmICFwLT5sZWZ0LT5yZWQpLCBkX3RvdGFsKTsKKy0gIGNoZWNrX3RyZWVfcmVjdXJzZSAocC0+cmlnaHQsIGRfc29mYXIgKyAocC0+cmlnaHQgJiYgIXAtPnJpZ2h0LT5yZWQpLCBkX3RvdGFsKTsKKy0gIGlmIChwLT5sZWZ0KQorLSAgICBhc3NlcnQgKCEocC0+bGVmdC0+cmVkICYmIHAtPnJlZCkpOworLSAgaWYgKHAtPnJpZ2h0KQorLSAgICBhc3NlcnQgKCEocC0+cmlnaHQtPnJlZCAmJiBwLT5yZWQpKTsKKy19CistCistc3RhdGljIHZvaWQKKy1jaGVja190cmVlIChub2RlIHJvb3QpCisteworLSAgaW50IGNudCA9IDA7CistICBub2RlIHA7CistICBpZiAocm9vdCA9PSBOVUxMKQorLSAgICByZXR1cm47CistICByb290LT5yZWQgPSAwOworLSAgZm9yKHAgPSByb290LT5sZWZ0OyBwOyBwID0gcC0+bGVmdCkKKy0gICAgY250ICs9ICFwLT5yZWQ7CistICBjaGVja190cmVlX3JlY3Vyc2UgKHJvb3QsIDAsIGNudCk7CistfQorLQorLQorLSNlbHNlCistCistI2RlZmluZSBDSEVDS19UUkVFKGEpCistCistI2VuZGlmCistCistLyogUG9zc2libHkgInNwbGl0IiBhIG5vZGUgd2l0aCB0d28gcmVkIHN1Y2Nlc3NvcnMsIGFuZC9vciBmaXggdXAgdHdvIHJlZAorLSAgIGVkZ2VzIGluIGEgcm93LiAgUk9PVFAgaXMgYSBwb2ludGVyIHRvIHRoZSBsb3dlc3Qgbm9kZSB3ZSB2aXNpdGVkLCBQQVJFTlRQCistICAgYW5kIEdQQVJFTlRQIHBvaW50ZXJzIHRvIGl0cyBwYXJlbnQvZ3JhbmRwYXJlbnQuICBQX1IgYW5kIEdQX1IgY29udGFpbiB0aGUKKy0gICBjb21wYXJpc29uIHZhbHVlcyB0aGF0IGRldGVybWluZWQgd2hpY2ggd2F5IHdhcyB0YWtlbiBpbiB0aGUgdHJlZSB0byByZWFjaAorLSAgIFJPT1RQLiAgTU9ERSBpcyAxIGlmIHdlIG5lZWQgbm90IGRvIHRoZSBzcGxpdCwgYnV0IG11c3QgY2hlY2sgZm9yIHR3byByZWQKKy0gICBlZGdlcyBiZXR3ZWVuIEdQQVJFTlRQIGFuZCBST09UUC4gICovCistc3RhdGljIHZvaWQKKy1tYXliZV9zcGxpdF9mb3JfaW5zZXJ0IChub2RlICpyb290cCwgbm9kZSAqcGFyZW50cCwgbm9kZSAqZ3BhcmVudHAsCistCQkJaW50IHBfciwgaW50IGdwX3IsIGludCBtb2RlKQorLXsKKy0gIG5vZGUgcm9vdCA9ICpyb290cDsKKy0gIG5vZGUgKnJwLCAqbHA7CistICBycCA9ICYoKnJvb3RwKS0+cmlnaHQ7CistICBscCA9ICYoKnJvb3RwKS0+bGVmdDsKKy0KKy0gIC8qIFNlZSBpZiB3ZSBoYXZlIHRvIHNwbGl0IHRoaXMgbm9kZSAoYm90aCBzdWNjZXNzb3JzIHJlZCkuICAqLworLSAgaWYgKG1vZGUgPT0gMQorLSAgICAgIHx8ICgoKnJwKSAhPSBOVUxMICYmICgqbHApICE9IE5VTEwgJiYgKCpycCktPnJlZCAmJiAoKmxwKS0+cmVkKSkKKy0gICAgeworLSAgICAgIC8qIFRoaXMgbm9kZSBiZWNvbWVzIHJlZCwgaXRzIHN1Y2Nlc3NvcnMgYmxhY2suICAqLworLSAgICAgIHJvb3QtPnJlZCA9IDE7CistICAgICAgaWYgKCpycCkKKy0JKCpycCktPnJlZCA9IDA7CistICAgICAgaWYgKCpscCkKKy0JKCpscCktPnJlZCA9IDA7CistCistICAgICAgLyogSWYgdGhlIHBhcmVudCBvZiB0aGlzIG5vZGUgaXMgYWxzbyByZWQsIHdlIGhhdmUgdG8gZG8KKy0JIHJvdGF0aW9ucy4gICovCistICAgICAgaWYgKHBhcmVudHAgIT0gTlVMTCAmJiAoKnBhcmVudHApLT5yZWQpCistCXsKKy0JICBub2RlIGdwID0gKmdwYXJlbnRwOworLQkgIG5vZGUgcCA9ICpwYXJlbnRwOworLQkgIC8qIFRoZXJlIGFyZSB0d28gbWFpbiBjYXNlczoKKy0JICAgICAxLiBUaGUgZWRnZSB0eXBlcyAobGVmdCBvciByaWdodCkgb2YgdGhlIHR3byByZWQgZWRnZXMgZGlmZmVyLgorLQkgICAgIDIuIEJvdGggcmVkIGVkZ2VzIGFyZSBvZiB0aGUgc2FtZSB0eXBlLgorLQkgICAgIFRoZXJlIGV4aXN0IHR3byBzeW1tZXRyaWVzIG9mIGVhY2ggY2FzZSwgc28gdGhlcmUgaXMgYSB0b3RhbCBvZgorLQkgICAgIDQgY2FzZXMuICAqLworLQkgIGlmICgocF9yID4gMCkgIT0gKGdwX3IgPiAwKSkKKy0JICAgIHsKKy0JICAgICAgLyogUHV0IHRoZSBjaGlsZCBhdCB0aGUgdG9wIG9mIHRoZSB0cmVlLCB3aXRoIGl0cyBwYXJlbnQKKy0JCSBhbmQgZ3JhbmRwYXJlbnQgYXMgc3VjY2Vzc29ycy4gICovCistCSAgICAgIHAtPnJlZCA9IDE7CistCSAgICAgIGdwLT5yZWQgPSAxOworLQkgICAgICByb290LT5yZWQgPSAwOworLQkgICAgICBpZiAocF9yIDwgMCkKKy0JCXsKKy0JCSAgLyogQ2hpbGQgaXMgbGVmdCBvZiBwYXJlbnQuICAqLworLQkJICBwLT5sZWZ0ID0gKnJwOworLQkJICAqcnAgPSBwOworLQkJICBncC0+cmlnaHQgPSAqbHA7CistCQkgICpscCA9IGdwOworLQkJfQorLQkgICAgICBlbHNlCistCQl7CistCQkgIC8qIENoaWxkIGlzIHJpZ2h0IG9mIHBhcmVudC4gICovCistCQkgIHAtPnJpZ2h0ID0gKmxwOworLQkJICAqbHAgPSBwOworLQkJICBncC0+bGVmdCA9ICpycDsKKy0JCSAgKnJwID0gZ3A7CistCQl9CistCSAgICAgICpncGFyZW50cCA9IHJvb3Q7CistCSAgICB9CistCSAgZWxzZQorLQkgICAgeworLQkgICAgICAqZ3BhcmVudHAgPSAqcGFyZW50cDsKKy0JICAgICAgLyogUGFyZW50IGJlY29tZXMgdGhlIHRvcCBvZiB0aGUgdHJlZSwgZ3JhbmRwYXJlbnQgYW5kCistCQkgY2hpbGQgYXJlIGl0cyBzdWNjZXNzb3JzLiAgKi8KKy0JICAgICAgcC0+cmVkID0gMDsKKy0JICAgICAgZ3AtPnJlZCA9IDE7CistCSAgICAgIGlmIChwX3IgPCAwKQorLQkJeworLQkJICAvKiBMZWZ0IGVkZ2VzLiAgKi8KKy0JCSAgZ3AtPmxlZnQgPSBwLT5yaWdodDsKKy0JCSAgcC0+cmlnaHQgPSBncDsKKy0JCX0KKy0JICAgICAgZWxzZQorLQkJeworLQkJICAvKiBSaWdodCBlZGdlcy4gICovCistCQkgIGdwLT5yaWdodCA9IHAtPmxlZnQ7CistCQkgIHAtPmxlZnQgPSBncDsKKy0JCX0KKy0JICAgIH0KKy0JfQorLSAgICB9CistfQorLQorLS8qIEZpbmQgb3IgaW5zZXJ0IGRhdHVtIGludG8gc2VhcmNoIHRyZWUuCistICAgS0VZIGlzIHRoZSBrZXkgdG8gYmUgbG9jYXRlZCwgUk9PVFAgaXMgdGhlIGFkZHJlc3Mgb2YgdHJlZSByb290LAorLSAgIENPTVBBUiB0aGUgb3JkZXJpbmcgZnVuY3Rpb24uICAqLworLXZvaWQgKgorLV9fdHNlYXJjaCAoY29uc3Qgdm9pZCAqa2V5LCB2b2lkICoqdnJvb3RwLCBfX2NvbXBhcl9mbl90IGNvbXBhcikKKy17CistICBub2RlIHE7CistICBub2RlICpwYXJlbnRwID0gTlVMTCwgKmdwYXJlbnRwID0gTlVMTDsKKy0gIG5vZGUgKnJvb3RwID0gKG5vZGUgKikgdnJvb3RwOworLSAgbm9kZSAqbmV4dHA7CistICBpbnQgciA9IDAsIHBfciA9IDAsIGdwX3IgPSAwOyAvKiBObyB0aGV5IG1pZ2h0IG5vdCwgTXIgQ29tcGlsZXIuICAqLworLQorLSAgaWYgKHJvb3RwID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogVGhpcyBzYXZlcyBzb21lIGFkZGl0aW9uYWwgdGVzdHMgYmVsb3cuICAqLworLSAgaWYgKCpyb290cCAhPSBOVUxMKQorLSAgICAoKnJvb3RwKS0+cmVkID0gMDsKKy0KKy0gIENIRUNLX1RSRUUgKCpyb290cCk7CistCistICBuZXh0cCA9IHJvb3RwOworLSAgd2hpbGUgKCpuZXh0cCAhPSBOVUxMKQorLSAgICB7CistICAgICAgbm9kZSByb290ID0gKnJvb3RwOworLSAgICAgIHIgPSAoKmNvbXBhcikgKGtleSwgcm9vdC0+a2V5KTsKKy0gICAgICBpZiAociA9PSAwKQorLQlyZXR1cm4gcm9vdDsKKy0KKy0gICAgICBtYXliZV9zcGxpdF9mb3JfaW5zZXJ0IChyb290cCwgcGFyZW50cCwgZ3BhcmVudHAsIHBfciwgZ3BfciwgMCk7CistICAgICAgLyogSWYgdGhhdCBkaWQgYW55IHJvdGF0aW9ucywgcGFyZW50cCBhbmQgZ3BhcmVudHAgYXJlIG5vdyBnYXJiYWdlLgorLQkgVGhhdCBkb2Vzbid0IG1hdHRlciwgYmVjYXVzZSB0aGUgdmFsdWVzIHRoZXkgY29udGFpbiBhcmUgbmV2ZXIKKy0JIHVzZWQgYWdhaW4gaW4gdGhhdCBjYXNlLiAgKi8KKy0KKy0gICAgICBuZXh0cCA9IHIgPCAwID8gJnJvb3QtPmxlZnQgOiAmcm9vdC0+cmlnaHQ7CistICAgICAgaWYgKCpuZXh0cCA9PSBOVUxMKQorLQlicmVhazsKKy0KKy0gICAgICBncGFyZW50cCA9IHBhcmVudHA7CistICAgICAgcGFyZW50cCA9IHJvb3RwOworLSAgICAgIHJvb3RwID0gbmV4dHA7CistCistICAgICAgZ3BfciA9IHBfcjsKKy0gICAgICBwX3IgPSByOworLSAgICB9CistCistICBxID0gKHN0cnVjdCBub2RlX3QgKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBub2RlX3QpKTsKKy0gIGlmIChxICE9IE5VTEwpCistICAgIHsKKy0gICAgICAqbmV4dHAgPSBxOwkJCS8qIGxpbmsgbmV3IG5vZGUgdG8gb2xkICovCistICAgICAgcS0+a2V5ID0ga2V5OwkJCS8qIGluaXRpYWxpemUgbmV3IG5vZGUgKi8KKy0gICAgICBxLT5yZWQgPSAxOworLSAgICAgIHEtPmxlZnQgPSBxLT5yaWdodCA9IE5VTEw7CistCistICAgICAgaWYgKG5leHRwICE9IHJvb3RwKQorLQkvKiBUaGVyZSBtYXkgYmUgdHdvIHJlZCBlZGdlcyBpbiBhIHJvdyBub3csIHdoaWNoIHdlIG11c3QgYXZvaWQgYnkKKy0JICAgcm90YXRpbmcgdGhlIHRyZWUuICAqLworLQltYXliZV9zcGxpdF9mb3JfaW5zZXJ0IChuZXh0cCwgcm9vdHAsIHBhcmVudHAsIHIsIHBfciwgMSk7CistICAgIH0KKy0KKy0gIHJldHVybiBxOworLX0KKy0jaWZkZWYgd2Vha19hbGlhcworLXdlYWtfYWxpYXMgKF9fdHNlYXJjaCwgdHNlYXJjaCkKKy0jZW5kaWYKKy0KKy0KKy0vKiBGaW5kIGRhdHVtIGluIHNlYXJjaCB0cmVlLgorLSAgIEtFWSBpcyB0aGUga2V5IHRvIGJlIGxvY2F0ZWQsIFJPT1RQIGlzIHRoZSBhZGRyZXNzIG9mIHRyZWUgcm9vdCwKKy0gICBDT01QQVIgdGhlIG9yZGVyaW5nIGZ1bmN0aW9uLiAgKi8KKy12b2lkICoKKy1fX3RmaW5kIChrZXksIHZyb290cCwgY29tcGFyKQorLSAgICAgY29uc3Qgdm9pZCAqa2V5OworLSAgICAgdm9pZCAqY29uc3QgKnZyb290cDsKKy0gICAgIF9fY29tcGFyX2ZuX3QgY29tcGFyOworLXsKKy0gIG5vZGUgKnJvb3RwID0gKG5vZGUgKikgdnJvb3RwOworLQorLSAgaWYgKHJvb3RwID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgQ0hFQ0tfVFJFRSAoKnJvb3RwKTsKKy0KKy0gIHdoaWxlICgqcm9vdHAgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIG5vZGUgcm9vdCA9ICpyb290cDsKKy0gICAgICBpbnQgcjsKKy0KKy0gICAgICByID0gKCpjb21wYXIpIChrZXksIHJvb3QtPmtleSk7CistICAgICAgaWYgKHIgPT0gMCkKKy0JcmV0dXJuIHJvb3Q7CistCistICAgICAgcm9vdHAgPSByIDwgMCA/ICZyb290LT5sZWZ0IDogJnJvb3QtPnJpZ2h0OworLSAgICB9CistICByZXR1cm4gTlVMTDsKKy19CistI2lmZGVmIHdlYWtfYWxpYXMKKy13ZWFrX2FsaWFzIChfX3RmaW5kLCB0ZmluZCkKKy0jZW5kaWYKKy0KKy0KKy0vKiBEZWxldGUgbm9kZSB3aXRoIGdpdmVuIGtleS4KKy0gICBLRVkgaXMgdGhlIGtleSB0byBiZSBkZWxldGVkLCBST09UUCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcm9vdCBvZiB0cmVlLAorLSAgIENPTVBBUiB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbi4gICovCistdm9pZCAqCistX190ZGVsZXRlIChjb25zdCB2b2lkICprZXksIHZvaWQgKip2cm9vdHAsIF9fY29tcGFyX2ZuX3QgY29tcGFyKQorLXsKKy0gIG5vZGUgcCwgcSwgciwgcmV0dmFsOworLSAgaW50IGNtcDsKKy0gIG5vZGUgKnJvb3RwID0gKG5vZGUgKikgdnJvb3RwOworLSAgbm9kZSByb290LCB1bmNoYWluZWQ7CistICAvKiBTdGFjayBvZiBub2RlcyBzbyB3ZSByZW1lbWJlciB0aGUgcGFyZW50cyB3aXRob3V0IHJlY3Vyc2lvbi4gIEl0J3MKKy0gICAgIF92ZXJ5XyB1bmxpa2VseSB0aGF0IHRoZXJlIGFyZSBwYXRocyBsb25nZXIgdGhhbiA0MCBub2Rlcy4gIFRoZSB0cmVlCistICAgICB3b3VsZCBuZWVkIHRvIGhhdmUgYXJvdW5kIDI1MC4wMDAgbm9kZXMuICAqLworLSAgaW50IHN0YWNrc2l6ZSA9IDEwMDsKKy0gIGludCBzcCA9IDA7CistICBub2RlICpub2Rlc3RhY2tbMTAwXTsKKy0KKy0gIGlmIChyb290cCA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0gIHAgPSAqcm9vdHA7CistICBpZiAocCA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIENIRUNLX1RSRUUgKHApOworLQorLSAgd2hpbGUgKChjbXAgPSAoKmNvbXBhcikgKGtleSwgKCpyb290cCktPmtleSkpICE9IDApCistICAgIHsKKy0gICAgICBpZiAoc3AgPT0gc3RhY2tzaXplKQorLQlhYm9ydCAoKTsKKy0KKy0gICAgICBub2Rlc3RhY2tbc3ArK10gPSByb290cDsKKy0gICAgICBwID0gKnJvb3RwOworLSAgICAgIHJvb3RwID0gKChjbXAgPCAwKQorLQkgICAgICAgPyAmKCpyb290cCktPmxlZnQKKy0JICAgICAgIDogJigqcm9vdHApLT5yaWdodCk7CistICAgICAgaWYgKCpyb290cCA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKy0gICAgfQorLQorLSAgLyogVGhpcyBpcyBib2d1cyBpZiB0aGUgbm9kZSB0byBiZSBkZWxldGVkIGlzIHRoZSByb290Li4uIHRoaXMgcm91dGluZQorLSAgICAgcmVhbGx5IHNob3VsZCByZXR1cm4gYW4gaW50ZWdlciB3aXRoIDAgZm9yIHN1Y2Nlc3MsIC0xIGZvciBmYWlsdXJlCistICAgICBhbmQgZXJybm8gPSBFU1JDSCBvciBzb21ldGhpbmcuICAqLworLSAgcmV0dmFsID0gcDsKKy0KKy0gIC8qIFdlIGRvbid0IHVuY2hhaW4gdGhlIG5vZGUgd2Ugd2FudCB0byBkZWxldGUuIEluc3RlYWQsIHdlIG92ZXJ3cml0ZQorLSAgICAgaXQgd2l0aCBpdHMgc3VjY2Vzc29yIGFuZCB1bmNoYWluIHRoZSBzdWNjZXNzb3IuICBJZiB0aGVyZSBpcyBubworLSAgICAgc3VjY2Vzc29yLCB3ZSByZWFsbHkgdW5jaGFpbiB0aGUgbm9kZSB0byBiZSBkZWxldGVkLiAgKi8KKy0KKy0gIHJvb3QgPSAqcm9vdHA7CistCistICByID0gcm9vdC0+cmlnaHQ7CistICBxID0gcm9vdC0+bGVmdDsKKy0KKy0gIGlmIChxID09IE5VTEwgfHwgciA9PSBOVUxMKQorLSAgICB1bmNoYWluZWQgPSByb290OworLSAgZWxzZQorLSAgICB7CistICAgICAgbm9kZSAqcGFyZW50ID0gcm9vdHAsICp1cCA9ICZyb290LT5yaWdodDsKKy0gICAgICBmb3IgKDs7KQorLQl7CistCSAgaWYgKHNwID09IHN0YWNrc2l6ZSkKKy0JICAgIGFib3J0ICgpOworLQkgIG5vZGVzdGFja1tzcCsrXSA9IHBhcmVudDsKKy0JICBwYXJlbnQgPSB1cDsKKy0JICBpZiAoKCp1cCktPmxlZnQgPT0gTlVMTCkKKy0JICAgIGJyZWFrOworLQkgIHVwID0gJigqdXApLT5sZWZ0OworLQl9CistICAgICAgdW5jaGFpbmVkID0gKnVwOworLSAgICB9CistCistICAvKiBXZSBrbm93IHRoYXQgZWl0aGVyIHRoZSBsZWZ0IG9yIHJpZ2h0IHN1Y2Nlc3NvciBvZiBVTkNIQUlORUQgaXMgTlVMTC4KKy0gICAgIFIgYmVjb21lcyB0aGUgb3RoZXIgb25lLCBpdCBpcyBjaGFpbmVkIGludG8gdGhlIHBhcmVudCBvZiBVTkNIQUlORUQuICAqLworLSAgciA9IHVuY2hhaW5lZC0+bGVmdDsKKy0gIGlmIChyID09IE5VTEwpCistICAgIHIgPSB1bmNoYWluZWQtPnJpZ2h0OworLSAgaWYgKHNwID09IDApCistICAgICpyb290cCA9IHI7CistICBlbHNlCistICAgIHsKKy0gICAgICBxID0gKm5vZGVzdGFja1tzcC0xXTsKKy0gICAgICBpZiAodW5jaGFpbmVkID09IHEtPnJpZ2h0KQorLQlxLT5yaWdodCA9IHI7CistICAgICAgZWxzZQorLQlxLT5sZWZ0ID0gcjsKKy0gICAgfQorLQorLSAgaWYgKHVuY2hhaW5lZCAhPSByb290KQorLSAgICByb290LT5rZXkgPSB1bmNoYWluZWQtPmtleTsKKy0gIGlmICghdW5jaGFpbmVkLT5yZWQpCistICAgIHsKKy0gICAgICAvKiBOb3cgd2UgbG9zdCBhIGJsYWNrIGVkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG51bWJlciBvZiBibGFjaworLQkgZWRnZXMgb24gZXZlcnkgcGF0aCBpcyBubyBsb25nZXIgY29uc3RhbnQuICBXZSBtdXN0IGJhbGFuY2UgdGhlCistCSB0cmVlLiAgKi8KKy0gICAgICAvKiBOT0RFU1RBQ0sgbm93IGNvbnRhaW5zIGFsbCBwYXJlbnRzIG9mIFIuICBSIGlzIGxpa2VseSB0byBiZSBOVUxMCistCSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLiAgKi8KKy0gICAgICAvKiBOVUxMIG5vZGVzIGFyZSBjb25zaWRlcmVkIGJsYWNrIHRocm91Z2hvdXQgLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IKKy0JIGNvcnJlY3RuZXNzLiAgKi8KKy0gICAgICB3aGlsZSAoc3AgPiAwICYmIChyID09IE5VTEwgfHwgIXItPnJlZCkpCistCXsKKy0JICBub2RlICpwcCA9IG5vZGVzdGFja1tzcCAtIDFdOworLQkgIHAgPSAqcHA7CistCSAgLyogVHdvIHN5bW1ldHJpYyBjYXNlcy4gICovCistCSAgaWYgKHIgPT0gcC0+bGVmdCkKKy0JICAgIHsKKy0JICAgICAgLyogUSBpcyBSJ3MgYnJvdGhlciwgUCBpcyBSJ3MgcGFyZW50LiAgVGhlIHN1YnRyZWUgd2l0aCByb290CistCQkgUiBoYXMgb25lIGJsYWNrIGVkZ2UgbGVzcyB0aGFuIHRoZSBzdWJ0cmVlIHdpdGggcm9vdCBRLiAgKi8KKy0JICAgICAgcSA9IHAtPnJpZ2h0OworLQkgICAgICBpZiAocS0+cmVkKQorLQkJeworLQkJICAvKiBJZiBRIGlzIHJlZCwgd2Uga25vdyB0aGF0IFAgaXMgYmxhY2suIFdlIHJvdGF0ZSBQIGxlZnQKKy0JCSAgICAgc28gdGhhdCBRIGJlY29tZXMgdGhlIHRvcCBub2RlIGluIHRoZSB0cmVlLCB3aXRoIFAgYmVsb3cKKy0JCSAgICAgaXQuICBQIGlzIGNvbG9yZWQgcmVkLCBRIGlzIGNvbG9yZWQgYmxhY2suCistCQkgICAgIFRoaXMgYWN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgYmxhY2sgZWRnZSBjb3VudCBmb3IgYW55CistCQkgICAgIGxlYWYgaW4gdGhlIHRyZWUsIGJ1dCB3ZSB3aWxsIGJlIGFibGUgdG8gcmVjb2duaXplIG9uZQorLQkJICAgICBvZiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnMsIHdoaWNoIGFsbCByZXF1aXJlIHRoYXQgUQorLQkJICAgICBpcyBibGFjay4gICovCistCQkgIHEtPnJlZCA9IDA7CistCQkgIHAtPnJlZCA9IDE7CistCQkgIC8qIExlZnQgcm90YXRlIHAuICAqLworLQkJICBwLT5yaWdodCA9IHEtPmxlZnQ7CistCQkgIHEtPmxlZnQgPSBwOworLQkJICAqcHAgPSBxOworLQkJICAvKiBNYWtlIHN1cmUgcHAgaXMgcmlnaHQgaWYgdGhlIGNhc2UgYmVsb3cgdHJpZXMgdG8gdXNlCistCQkgICAgIGl0LiAgKi8KKy0JCSAgbm9kZXN0YWNrW3NwKytdID0gcHAgPSAmcS0+bGVmdDsKKy0JCSAgcSA9IHAtPnJpZ2h0OworLQkJfQorLQkgICAgICAvKiBXZSBrbm93IHRoYXQgUSBjYW4ndCBiZSBOVUxMIGhlcmUuICBXZSBhbHNvIGtub3cgdGhhdCBRIGlzCistCQkgYmxhY2suICAqLworLQkgICAgICBpZiAoKHEtPmxlZnQgPT0gTlVMTCB8fCAhcS0+bGVmdC0+cmVkKQorLQkJICAmJiAocS0+cmlnaHQgPT0gTlVMTCB8fCAhcS0+cmlnaHQtPnJlZCkpCistCQl7CistCQkgIC8qIFEgaGFzIHR3byBibGFjayBzdWNjZXNzb3JzLiAgV2UgY2FuIHNpbXBseSBjb2xvciBRIHJlZC4KKy0JCSAgICAgVGhlIHdob2xlIHN1YnRyZWUgd2l0aCByb290IFAgaXMgbm93IG1pc3Npbmcgb25lIGJsYWNrCistCQkgICAgIGVkZ2UuICBOb3RlIHRoYXQgdGhpcyBhY3Rpb24gY2FuIHRlbXBvcmFyaWx5IG1ha2UgdGhlCistCQkgICAgIHRyZWUgaW52YWxpZCAoaWYgUCBpcyByZWQpLiAgQnV0IHdlIHdpbGwgZXhpdCB0aGUgbG9vcAorLQkJICAgICBpbiB0aGF0IGNhc2UgYW5kIHNldCBQIGJsYWNrLCB3aGljaCBib3RoIG1ha2VzIHRoZSB0cmVlCistCQkgICAgIHZhbGlkIGFuZCBhbHNvIG1ha2VzIHRoZSBibGFjayBlZGdlIGNvdW50IGNvbWUgb3V0CistCQkgICAgIHJpZ2h0LiAgSWYgUCBpcyBibGFjaywgd2UgYXJlIGF0IGxlYXN0IG9uZSBzdGVwIGNsb3NlcgorLQkJICAgICB0byB0aGUgcm9vdCBhbmQgd2UnbGwgdHJ5IGFnYWluIHRoZSBuZXh0IGl0ZXJhdGlvbi4gICovCistCQkgIHEtPnJlZCA9IDE7CistCQkgIHIgPSBwOworLQkJfQorLQkgICAgICBlbHNlCistCQl7CistCQkgIC8qIFEgaXMgYmxhY2ssIG9uZSBvZiBRJ3Mgc3VjY2Vzc29ycyBpcyByZWQuICBXZSBjYW4KKy0JCSAgICAgcmVwYWlyIHRoZSB0cmVlIHdpdGggb25lIG9wZXJhdGlvbiBhbmQgd2lsbCBleGl0IHRoZQorLQkJICAgICBsb29wIGFmdGVyd2FyZHMuICAqLworLQkJICBpZiAocS0+cmlnaHQgPT0gTlVMTCB8fCAhcS0+cmlnaHQtPnJlZCkKKy0JCSAgICB7CistCQkgICAgICAvKiBUaGUgbGVmdCBvbmUgaXMgcmVkLiAgV2UgcGVyZm9ybSB0aGUgc2FtZSBhY3Rpb24gYXMKKy0JCQkgaW4gbWF5YmVfc3BsaXRfZm9yX2luc2VydCB3aGVyZSB0d28gcmVkIGVkZ2VzIGFyZQorLQkJCSBhZGphY2VudCBidXQgcG9pbnQgaW4gZGlmZmVyZW50IGRpcmVjdGlvbnM6CistCQkJIFEncyBsZWZ0IHN1Y2Nlc3NvciAobGV0J3MgY2FsbCBpdCBRMikgYmVjb21lcyB0aGUKKy0JCQkgdG9wIG9mIHRoZSBzdWJ0cmVlIHdlIGFyZSBsb29raW5nIGF0LCBpdHMgcGFyZW50IChRKQorLQkJCSBhbmQgZ3JhbmRwYXJlbnQgKFApIGJlY29tZSBpdHMgc3VjY2Vzc29ycy4gVGhlIGZvcm1lcgorLQkJCSBzdWNjZXNzb3JzIG9mIFEyIGFyZSBwbGFjZWQgYmVsb3cgUCBhbmQgUS4KKy0JCQkgUCBiZWNvbWVzIGJsYWNrLCBhbmQgUTIgZ2V0cyB0aGUgY29sb3IgdGhhdCBQIGhhZC4KKy0JCQkgVGhpcyBjaGFuZ2VzIHRoZSBibGFjayBlZGdlIGNvdW50IG9ubHkgZm9yIG5vZGUgUiBhbmQKKy0JCQkgaXRzIHN1Y2Nlc3NvcnMuICAqLworLQkJICAgICAgbm9kZSBxMiA9IHEtPmxlZnQ7CistCQkgICAgICBxMi0+cmVkID0gcC0+cmVkOworLQkJICAgICAgcC0+cmlnaHQgPSBxMi0+bGVmdDsKKy0JCSAgICAgIHEtPmxlZnQgPSBxMi0+cmlnaHQ7CistCQkgICAgICBxMi0+cmlnaHQgPSBxOworLQkJICAgICAgcTItPmxlZnQgPSBwOworLQkJICAgICAgKnBwID0gcTI7CistCQkgICAgICBwLT5yZWQgPSAwOworLQkJICAgIH0KKy0JCSAgZWxzZQorLQkJICAgIHsKKy0JCSAgICAgIC8qIEl0J3MgdGhlIHJpZ2h0IG9uZS4gIFJvdGF0ZSBQIGxlZnQuIFAgYmVjb21lcyBibGFjaywKKy0JCQkgYW5kIFEgZ2V0cyB0aGUgY29sb3IgdGhhdCBQIGhhZC4gIFEncyByaWdodCBzdWNjZXNzb3IKKy0JCQkgYWxzbyBiZWNvbWVzIGJsYWNrLiAgVGhpcyBjaGFuZ2VzIHRoZSBibGFjayBlZGdlCistCQkJIGNvdW50IG9ubHkgZm9yIG5vZGUgUiBhbmQgaXRzIHN1Y2Nlc3NvcnMuICAqLworLQkJICAgICAgcS0+cmVkID0gcC0+cmVkOworLQkJICAgICAgcC0+cmVkID0gMDsKKy0KKy0JCSAgICAgIHEtPnJpZ2h0LT5yZWQgPSAwOworLQorLQkJICAgICAgLyogbGVmdCByb3RhdGUgcCAqLworLQkJICAgICAgcC0+cmlnaHQgPSBxLT5sZWZ0OworLQkJICAgICAgcS0+bGVmdCA9IHA7CistCQkgICAgICAqcHAgPSBxOworLQkJICAgIH0KKy0KKy0JCSAgLyogV2UncmUgZG9uZS4gICovCistCQkgIHNwID0gMTsKKy0JCSAgciA9IE5VTEw7CistCQl9CistCSAgICB9CistCSAgZWxzZQorLQkgICAgeworLQkgICAgICAvKiBDb21tZW50czogc2VlIGFib3ZlLiAgKi8KKy0JICAgICAgcSA9IHAtPmxlZnQ7CistCSAgICAgIGlmIChxLT5yZWQpCistCQl7CistCQkgIHEtPnJlZCA9IDA7CistCQkgIHAtPnJlZCA9IDE7CistCQkgIHAtPmxlZnQgPSBxLT5yaWdodDsKKy0JCSAgcS0+cmlnaHQgPSBwOworLQkJICAqcHAgPSBxOworLQkJICBub2Rlc3RhY2tbc3ArK10gPSBwcCA9ICZxLT5yaWdodDsKKy0JCSAgcSA9IHAtPmxlZnQ7CistCQl9CistCSAgICAgIGlmICgocS0+cmlnaHQgPT0gTlVMTCB8fCAhcS0+cmlnaHQtPnJlZCkKKy0JCSAgICAgICAmJiAocS0+bGVmdCA9PSBOVUxMIHx8ICFxLT5sZWZ0LT5yZWQpKQorLQkJeworLQkJICBxLT5yZWQgPSAxOworLQkJICByID0gcDsKKy0JCX0KKy0JICAgICAgZWxzZQorLQkJeworLQkJICBpZiAocS0+bGVmdCA9PSBOVUxMIHx8ICFxLT5sZWZ0LT5yZWQpCistCQkgICAgeworLQkJICAgICAgbm9kZSBxMiA9IHEtPnJpZ2h0OworLQkJICAgICAgcTItPnJlZCA9IHAtPnJlZDsKKy0JCSAgICAgIHAtPmxlZnQgPSBxMi0+cmlnaHQ7CistCQkgICAgICBxLT5yaWdodCA9IHEyLT5sZWZ0OworLQkJICAgICAgcTItPmxlZnQgPSBxOworLQkJICAgICAgcTItPnJpZ2h0ID0gcDsKKy0JCSAgICAgICpwcCA9IHEyOworLQkJICAgICAgcC0+cmVkID0gMDsKKy0JCSAgICB9CistCQkgIGVsc2UKKy0JCSAgICB7CistCQkgICAgICBxLT5yZWQgPSBwLT5yZWQ7CistCQkgICAgICBwLT5yZWQgPSAwOworLQkJICAgICAgcS0+bGVmdC0+cmVkID0gMDsKKy0JCSAgICAgIHAtPmxlZnQgPSBxLT5yaWdodDsKKy0JCSAgICAgIHEtPnJpZ2h0ID0gcDsKKy0JCSAgICAgICpwcCA9IHE7CistCQkgICAgfQorLQkJICBzcCA9IDE7CistCQkgIHIgPSBOVUxMOworLQkJfQorLQkgICAgfQorLQkgIC0tc3A7CistCX0KKy0gICAgICBpZiAociAhPSBOVUxMKQorLQlyLT5yZWQgPSAwOworLSAgICB9CistCistICBmcmVlICh1bmNoYWluZWQpOworLSAgcmV0dXJuIHJldHZhbDsKKy19CistI2lmZGVmIHdlYWtfYWxpYXMKKy13ZWFrX2FsaWFzIChfX3RkZWxldGUsIHRkZWxldGUpCistI2VuZGlmCistCistCistLyogV2FsayB0aGUgbm9kZXMgb2YgYSB0cmVlLgorLSAgIFJPT1QgaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgdG8gYmUgd2Fsa2VkLCBBQ1RJT04gdGhlIGZ1bmN0aW9uIHRvIGJlCistICAgY2FsbGVkIGF0IGVhY2ggbm9kZS4gIExFVkVMIGlzIHRoZSBsZXZlbCBvZiBST09UIGluIHRoZSB3aG9sZSB0cmVlLiAgKi8KKy1zdGF0aWMgdm9pZAorLWludGVybmFsX2Z1bmN0aW9uCistdHJlY3Vyc2UgKGNvbnN0IHZvaWQgKnZyb290LCBfX2FjdGlvbl9mbl90IGFjdGlvbiwgaW50IGxldmVsKQorLXsKKy0gIGNvbnN0X25vZGUgcm9vdCA9IChjb25zdF9ub2RlKSB2cm9vdDsKKy0KKy0gIGlmIChyb290LT5sZWZ0ID09IE5VTEwgJiYgcm9vdC0+cmlnaHQgPT0gTlVMTCkKKy0gICAgKCphY3Rpb24pIChyb290LCBsZWFmLCBsZXZlbCk7CistICBlbHNlCistICAgIHsKKy0gICAgICAoKmFjdGlvbikgKHJvb3QsIHByZW9yZGVyLCBsZXZlbCk7CistICAgICAgaWYgKHJvb3QtPmxlZnQgIT0gTlVMTCkKKy0JdHJlY3Vyc2UgKHJvb3QtPmxlZnQsIGFjdGlvbiwgbGV2ZWwgKyAxKTsKKy0gICAgICAoKmFjdGlvbikgKHJvb3QsIHBvc3RvcmRlciwgbGV2ZWwpOworLSAgICAgIGlmIChyb290LT5yaWdodCAhPSBOVUxMKQorLQl0cmVjdXJzZSAocm9vdC0+cmlnaHQsIGFjdGlvbiwgbGV2ZWwgKyAxKTsKKy0gICAgICAoKmFjdGlvbikgKHJvb3QsIGVuZG9yZGVyLCBsZXZlbCk7CistICAgIH0KKy19CistCistCistLyogV2FsayB0aGUgbm9kZXMgb2YgYSB0cmVlLgorLSAgIFJPT1QgaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgdG8gYmUgd2Fsa2VkLCBBQ1RJT04gdGhlIGZ1bmN0aW9uIHRvIGJlCistICAgY2FsbGVkIGF0IGVhY2ggbm9kZS4gICovCistdm9pZAorLV9fdHdhbGsgKGNvbnN0IHZvaWQgKnZyb290LCBfX2FjdGlvbl9mbl90IGFjdGlvbikKKy17CistICBjb25zdF9ub2RlIHJvb3QgPSAoY29uc3Rfbm9kZSkgdnJvb3Q7CistCistICBDSEVDS19UUkVFIChyb290KTsKKy0KKy0gIGlmIChyb290ICE9IE5VTEwgJiYgYWN0aW9uICE9IE5VTEwpCistICAgIHRyZWN1cnNlIChyb290LCBhY3Rpb24sIDApOworLX0KKy0jaWZkZWYgd2Vha19hbGlhcworLXdlYWtfYWxpYXMgKF9fdHdhbGssIHR3YWxrKQorLSNlbmRpZgorLQorLQorLSNpZmRlZiBfTElCQworLQorLS8qIFRoZSBzdGFuZGFyZGl6ZWQgZnVuY3Rpb25zIG1pc3MgYW4gaW1wb3J0YW50IGZ1bmN0aW9uYWxpdHk6IHRoZQorLSAgIHRyZWUgY2Fubm90IGJlIHJlbW92ZWQgZWFzaWx5LiAgV2UgcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGRvIHRoaXMuICAqLworLXN0YXRpYyB2b2lkCistaW50ZXJuYWxfZnVuY3Rpb24KKy10ZGVzdHJveV9yZWN1cnNlIChub2RlIHJvb3QsIF9fZnJlZV9mbl90IGZyZWVmY3QpCisteworLSAgaWYgKHJvb3QtPmxlZnQgIT0gTlVMTCkKKy0gICAgdGRlc3Ryb3lfcmVjdXJzZSAocm9vdC0+bGVmdCwgZnJlZWZjdCk7CistICBpZiAocm9vdC0+cmlnaHQgIT0gTlVMTCkKKy0gICAgdGRlc3Ryb3lfcmVjdXJzZSAocm9vdC0+cmlnaHQsIGZyZWVmY3QpOworLSAgKCpmcmVlZmN0KSAoKHZvaWQgKikgcm9vdC0+a2V5KTsKKy0gIC8qIEZyZWUgdGhlIG5vZGUgaXRzZWxmLiAgKi8KKy0gIGZyZWUgKHJvb3QpOworLX0KKy0KKy12b2lkCistX190ZGVzdHJveSAodm9pZCAqdnJvb3QsIF9fZnJlZV9mbl90IGZyZWVmY3QpCisteworLSAgbm9kZSByb290ID0gKG5vZGUpIHZyb290OworLQorLSAgQ0hFQ0tfVFJFRSAocm9vdCk7CistCistICBpZiAocm9vdCAhPSBOVUxMKQorLSAgICB0ZGVzdHJveV9yZWN1cnNlIChyb290LCBmcmVlZmN0KTsKKy19Cistd2Vha19hbGlhcyAoX190ZGVzdHJveSwgdGRlc3Ryb3kpCistCistI2VuZGlmIC8qIF9MSUJDICovCistLS0gYS9pbnRsL3RzZWFyY2guaAorKysrIC9kZXYvbnVsbAorQEAgLTEsODMgKzAsMCBAQAorLS8qIEJpbmFyeSB0cmVlIGRhdGEgc3RydWN0dXJlLgorLSAgIENvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZm5kZWYgX1RTRUFSQ0hfSAorLSNkZWZpbmUgX1RTRUFSQ0hfSAorLQorLSNpZiBIQVZFX1RTRUFSQ0gKKy0KKy0vKiBHZXQgdHNlYWNoKCksIHRmaW5kKCksIHRkZWxldGUoKSwgdHdhbGsoKSBkZWNsYXJhdGlvbnMuICAqLworLSNpbmNsdWRlIDxzZWFyY2guaD4KKy0KKy0jZWxzZQorLQorLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeworLSNlbmRpZgorLQorLS8qIFNlZSA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL3NlYXJjaC5oLmh0bWw+LAorLSAgICAgICA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3RzZWFyY2guaHRtbD4KKy0gICBmb3IgZGV0YWlscy4gICovCistCistdHlwZWRlZiBlbnVtCisteyAKKy0gIHByZW9yZGVyLAorLSAgcG9zdG9yZGVyLCAKKy0gIGVuZG9yZGVyLAorLSAgbGVhZgorLX0KKy1WSVNJVDsKKy0KKy0vKiBTZWFyY2hlcyBhbiBlbGVtZW50IGluIHRoZSB0cmVlICpWUk9PVFAgdGhhdCBjb21wYXJlcyBlcXVhbCB0byBLRVkuCistICAgSWYgb25lIGlzIGZvdW5kLCBpdCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSwgYSBuZXcgZWxlbWVudCBlcXVhbCB0byBLRVkKKy0gICBpcyBpbnNlcnRlZCBpbiB0aGUgdHJlZSBhbmQgaXMgcmV0dXJuZWQuICAqLworLWV4dGVybiB2b2lkICogdHNlYXJjaCAoY29uc3Qgdm9pZCAqa2V5LCB2b2lkICoqdnJvb3RwLAorLQkJICAgICAgIGludCAoKmNvbXBhcikgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CistCistLyogU2VhcmNoZXMgYW4gZWxlbWVudCBpbiB0aGUgdHJlZSAqVlJPT1RQIHRoYXQgY29tcGFyZXMgZXF1YWwgdG8gS0VZLgorLSAgIElmIG9uZSBpcyBmb3VuZCwgaXQgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UsIE5VTEwgaXMgcmV0dXJuZWQuICAqLworLWV4dGVybiB2b2lkICogdGZpbmQgKGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqY29uc3QgKnZyb290cCwKKy0JCSAgICAgaW50ICgqY29tcGFyKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKy0KKy0vKiBTZWFyY2hlcyBhbiBlbGVtZW50IGluIHRoZSB0cmVlICpWUk9PVFAgdGhhdCBjb21wYXJlcyBlcXVhbCB0byBLRVkuCistICAgSWYgb25lIGlzIGZvdW5kLCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUsIGFuZCBpdHMgcGFyZW50IG5vZGUgaXMKKy0gICByZXR1cm5lZC4gIE90aGVyd2lzZSwgTlVMTCBpcyByZXR1cm5lZC4gICovCistZXh0ZXJuIHZvaWQgKiB0ZGVsZXRlIChjb25zdCB2b2lkICprZXksIHZvaWQgKip2cm9vdHAsCistCQkgICAgICAgaW50ICgqY29tcGFyKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKy0KKy0vKiBQZXJmb3JtIGEgZGVwdGgtZmlyc3QsIGxlZnQtdG8tcmlnaHQgdHJhdmVyc2FsIG9mIHRoZSB0cmVlIFZST09ULgorLSAgIFRoZSBBQ1RJT04gZnVuY3Rpb24gaXMgY2FsbGVkOgorLSAgICAgLSBmb3Igbm9uLWxlYWYgbm9kZXM6IDMgdGltZXMsIGJlZm9yZSB0aGUgbGVmdCBzdWJ0cmVlIHRyYXZlcnNhbCwKKy0gICAgICAgYWZ0ZXIgdGhlIGxlZnQgc3VidHJlZSB0cmF2ZXJzYWwgYnV0IGJlZm9yZSB0aGUgcmlnaHQgc3VidHJlZSB0cmF2ZXJzYWwsCistICAgICAgIGFuZCBhZnRlciB0aGUgcmlnaHQgc3VidHJlZSB0cmF2ZXJzYWwsCistICAgICAtIGZvciBsZWFmIG5vZGVzOiBvbmNlLgorLSAgIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIEFDVElPTiBhcmU6CistICAgICAxLiB0aGUgbm9kZTsgaXQgY2FuIGJlIGNhc3RlZCB0byBhICdjb25zdCB2b2lkICogY29uc3QgKicsIGkuZS4gaW50byBhCistICAgICAgICBwb2ludGVyIHRvIHRoZSBrZXksCistICAgICAyLiBhbiBpbmRpY2F0b3Igd2hpY2ggdmlzaXQgb2YgdGhlIG5vZGUgdGhpcyBpcywKKy0gICAgIDMuIHRoZSBsZXZlbCBvZiB0aGUgbm9kZSBpbiB0aGUgdHJlZSAoMCBmb3IgdGhlIHJvb3QpLiAgKi8KKy1leHRlcm4gdm9pZCB0d2FsayAoY29uc3Qgdm9pZCAqdnJvb3QsCistCQkgICB2b2lkICgqYWN0aW9uKSAoY29uc3Qgdm9pZCAqLCBWSVNJVCwgaW50KSk7CistCistI2lmZGVmIF9fY3BsdXNwbHVzCistfQorLSNlbmRpZgorLQorLSNlbmRpZgorLQorLSNlbmRpZiAvKiBfVFNFQVJDSF9IICovCistLS0gYS9pbnRsL3Zhc25wcmludGYuYworKysrIC9kZXYvbnVsbAorQEAgLTEsNDY3NyArMCwwIEBACistLyogdnNwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0vKiBUaGlzIGZpbGUgY2FuIGJlIHBhcmFtZXRyaXplZCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFjcm9zOgorLSAgICAgVkFTTlBSSU5URiAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBkZWZpbmVkLgorLSAgICAgRkNIQVJfVCAgICAgICAgICAgIFRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIGZvcm1hdCBzdHJpbmcuCistICAgICBEQ0hBUl9UICAgICAgICAgICAgVGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgZGVzdGluYXRpb24gKHJlc3VsdCkgc3RyaW5nLgorLSAgICAgRkNIQVJfVF9PTkxZX0FTQ0lJIFNldCB0byAxIHRvIGVuYWJsZSB2ZXJpZmljYXRpb24gdGhhdCBhbGwgY2hhcmFjdGVycworLSAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmb3JtYXQgc3RyaW5nIGFyZSBBU0NJSS4gTVVTVCBiZSBzZXQgaWYKKy0gICAgICAgICAgICAgICAgICAgICAgICBGQ0hBUl9UIGFuZCBEQ0hBUl9UIGFyZSBub3QgdGhlIHNhbWUgdHlwZS4KKy0gICAgIERJUkVDVElWRSAgICAgICAgICBTdHJ1Y3R1cmUgZGVub3RpbmcgYSBmb3JtYXQgZGlyZWN0aXZlLgorLSAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZHMgb24gRkNIQVJfVC4KKy0gICAgIERJUkVDVElWRVMgICAgICAgICBTdHJ1Y3R1cmUgZGVub3RpbmcgdGhlIHNldCBvZiBmb3JtYXQgZGlyZWN0aXZlcyBvZiBhCistICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IHN0cmluZy4gIERlcGVuZHMgb24gRkNIQVJfVC4KKy0gICAgIFBSSU5URl9QQVJTRSAgICAgICBGdW5jdGlvbiB0aGF0IHBhcnNlcyBhIGZvcm1hdCBzdHJpbmcuCistICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kcyBvbiBGQ0hBUl9ULgorLSAgICAgRENIQVJfQ1BZICAgICAgICAgIG1lbWNweSBsaWtlIGZ1bmN0aW9uIGZvciBEQ0hBUl9UW10gYXJyYXlzLgorLSAgICAgRENIQVJfU0VUICAgICAgICAgIG1lbXNldCBsaWtlIGZ1bmN0aW9uIGZvciBEQ0hBUl9UW10gYXJyYXlzLgorLSAgICAgRENIQVJfTUJTTkxFTiAgICAgIG1ic25sZW4gbGlrZSBmdW5jdGlvbiBmb3IgRENIQVJfVFtdIGFycmF5cy4KKy0gICAgIFNOUFJJTlRGICAgICAgICAgICBUaGUgc3lzdGVtJ3Mgc25wcmludGYgKG9yIHNpbWlsYXIpIGZ1bmN0aW9uLgorLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWF5IGJlIGVpdGhlciBzbnByaW50ZiBvciBzd3ByaW50Zi4KKy0gICAgIFRDSEFSX1QgICAgICAgICAgICBUaGUgZWxlbWVudCB0eXBlIG9mIHRoZSBhcmd1bWVudCBhbmQgcmVzdWx0IHN0cmluZworLSAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYWlkIFNOUFJJTlRGIGZ1bmN0aW9uLiAgVGhpcyBtYXkgYmUgZWl0aGVyCistICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBvciB3Y2hhcl90LiAgVGhlIGNvZGUgZXhwbG9pdHMgdGhhdAorLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoVENIQVJfVCkgfCBzaXplb2YgKERDSEFSX1QpIGFuZAorLSAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdub2YgKFRDSEFSX1QpIDw9IGFsaWdub2YgKERDSEFSX1QpLgorLSAgICAgRENIQVJfSVNfVENIQVIgICAgIFNldCB0byAxIGlmIERDSEFSX1QgYW5kIFRDSEFSX1QgYXJlIHRoZSBzYW1lIHR5cGUuCistICAgICBEQ0hBUl9DT05WX0ZST01fRU5DT0RJTkcgQSBmdW5jdGlvbiB0byBjb252ZXJ0IGZyb20gY2hhcltdIHRvIERDSEFSW10uCistICAgICBEQ0hBUl9JU19VSU5UOF9UICAgU2V0IHRvIDEgaWYgRENIQVJfVCBpcyB1aW50OF90LgorLSAgICAgRENIQVJfSVNfVUlOVDE2X1QgIFNldCB0byAxIGlmIERDSEFSX1QgaXMgdWludDE2X3QuCistICAgICBEQ0hBUl9JU19VSU5UMzJfVCAgU2V0IHRvIDEgaWYgRENIQVJfVCBpcyB1aW50MzJfdC4gICovCistCistLyogVGVsbCBnbGliYydzIDxzdGRpby5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBzbnByaW50ZigpLgorLSAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorLSAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKy0jaWZuZGVmIF9HTlVfU09VUkNFCistIyBkZWZpbmUgX0dOVV9TT1VSQ0UgICAgMQorLSNlbmRpZgorLQorLSNpZm5kZWYgVkFTTlBSSU5URgorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCistI2lmbmRlZiBJTl9MSUJJTlRMCistIyBpbmNsdWRlIDxhbGxvY2EuaD4KKy0jZW5kaWYKKy0KKy0vKiBTcGVjaWZpY2F0aW9uLiAgKi8KKy0jaWZuZGVmIFZBU05QUklOVEYKKy0jIGlmIFdJREVfQ0hBUl9WRVJTSU9OCistIyAgaW5jbHVkZSAidmFzbndwcmludGYuaCIKKy0jIGVsc2UKKy0jICBpbmNsdWRlICJ2YXNucHJpbnRmLmgiCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxsb2NhbGUuaD4JLyogbG9jYWxlY29udigpICovCistI2luY2x1ZGUgPHN0ZGlvLmg+CS8qIHNucHJpbnRmKCksIHNwcmludGYoKSAqLworLSNpbmNsdWRlIDxzdGRsaWIuaD4JLyogYWJvcnQoKSwgbWFsbG9jKCksIHJlYWxsb2MoKSwgZnJlZSgpICovCistI2luY2x1ZGUgPHN0cmluZy5oPgkvKiBtZW1jcHkoKSwgc3RybGVuKCkgKi8KKy0jaW5jbHVkZSA8ZXJybm8uaD4JLyogZXJybm8gKi8KKy0jaW5jbHVkZSA8bGltaXRzLmg+CS8qIENIQVJfQklUICovCistI2luY2x1ZGUgPGZsb2F0Lmg+CS8qIERCTF9NQVhfRVhQLCBMREJMX01BWF9FWFAgKi8KKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworLSMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKy0jZW5kaWYKKy0jaWZuZGVmIFZBU05QUklOVEYKKy0jIGlmIFdJREVfQ0hBUl9WRVJTSU9OCistIyAgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorLSMgZWxzZQorLSMgIGluY2x1ZGUgInByaW50Zi1wYXJzZS5oIgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuICAqLworLSNpbmNsdWRlICJ4c2l6ZS5oIgorLQorLSNpZiAoTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFKSAmJiAhZGVmaW5lZCBJTl9MSUJJTlRMCistIyBpbmNsdWRlIDxtYXRoLmg+CistIyBpbmNsdWRlICJmbG9hdCsuaCIKKy0jZW5kaWYKKy0KKy0jaWYgKE5FRURfUFJJTlRGX0RPVUJMRSB8fCBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUpICYmICFkZWZpbmVkIElOX0xJQklOVEwKKy0jIGluY2x1ZGUgPG1hdGguaD4KKy0jIGluY2x1ZGUgImlzbmFuLmgiCistI2VuZGlmCistCistI2lmIChORUVEX1BSSU5URl9MT05HX0RPVUJMRSB8fCBORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorLSMgaW5jbHVkZSA8bWF0aC5oPgorLSMgaW5jbHVkZSAiaXNuYW5sLW5vbGlibS5oIgorLSMgaW5jbHVkZSAiZnB1Y3cuaCIKKy0jZW5kaWYKKy0KKy0jaWYgKE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IE5FRURfUFJJTlRGX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorLSMgaW5jbHVkZSA8bWF0aC5oPgorLSMgaW5jbHVkZSAiaXNuYW4uaCIKKy0jIGluY2x1ZGUgInByaW50Zi1mcmV4cC5oIgorLSNlbmRpZgorLQorLSNpZiAoTkVFRF9QUklOVEZfRElSRUNUSVZFX0EgfHwgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUpICYmICFkZWZpbmVkIElOX0xJQklOVEwKKy0jIGluY2x1ZGUgPG1hdGguaD4KKy0jIGluY2x1ZGUgImlzbmFubC1ub2xpYm0uaCIKKy0jIGluY2x1ZGUgInByaW50Zi1mcmV4cGwuaCIKKy0jIGluY2x1ZGUgImZwdWN3LmgiCistI2VuZGlmCistCistLyogU29tZSBzeXN0ZW1zLCBsaWtlIE9TRi8xIDQuMCBhbmQgV29lMzIsIGRvbid0IGhhdmUgRU9WRVJGTE9XLiAgKi8KKy0jaWZuZGVmIEVPVkVSRkxPVworLSMgZGVmaW5lIEVPVkVSRkxPVyBFMkJJRworLSNlbmRpZgorLQorLSNpZiBIQVZFX1dDSEFSX1QKKy0jIGlmIEhBVkVfV0NTTEVOCistIyAgZGVmaW5lIGxvY2FsX3djc2xlbiB3Y3NsZW4KKy0jIGVsc2UKKy0gICAvKiBTb2xhcmlzIDIuNS4xIGhhcyB3Y3NsZW4oKSBpbiBhIHNlcGFyYXRlIGxpYnJhcnkgbGlidy5zby4gVG8gYXZvaWQKKy0gICAgICBhIGRlcGVuZGVuY3kgdG93YXJkcyB0aGlzIGxpYnJhcnksIGhlcmUgaXMgYSBsb2NhbCBzdWJzdGl0dXRlLgorLSAgICAgIERlZmluZSB0aGlzIHN1YnN0aXR1dGUgb25seSBvbmNlLCBldmVuIGlmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZAorLSAgICAgIHR3aWNlIGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuICAqLworLSMgIGlmbmRlZiBsb2NhbF93Y3NsZW5fZGVmaW5lZAorLSMgICBkZWZpbmUgbG9jYWxfd2NzbGVuX2RlZmluZWQgMQorLXN0YXRpYyBzaXplX3QKKy1sb2NhbF93Y3NsZW4gKGNvbnN0IHdjaGFyX3QgKnMpCisteworLSAgY29uc3Qgd2NoYXJfdCAqcHRyOworLQorLSAgZm9yIChwdHIgPSBzOyAqcHRyICE9ICh3Y2hhcl90KSAwOyBwdHIrKykKKy0gICAgOworLSAgcmV0dXJuIHB0ciAtIHM7CistfQorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIERlZmF1bHQgcGFyYW1ldGVycy4gICovCistI2lmbmRlZiBWQVNOUFJJTlRGCistIyBpZiBXSURFX0NIQVJfVkVSU0lPTgorLSMgIGRlZmluZSBWQVNOUFJJTlRGIHZhc253cHJpbnRmCistIyAgZGVmaW5lIEZDSEFSX1Qgd2NoYXJfdAorLSMgIGRlZmluZSBEQ0hBUl9UIHdjaGFyX3QKKy0jICBkZWZpbmUgVENIQVJfVCB3Y2hhcl90CistIyAgZGVmaW5lIERDSEFSX0lTX1RDSEFSIDEKKy0jICBkZWZpbmUgRElSRUNUSVZFIHdjaGFyX3RfZGlyZWN0aXZlCistIyAgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCistIyAgZGVmaW5lIFBSSU5URl9QQVJTRSB3cHJpbnRmX3BhcnNlCistIyAgZGVmaW5lIERDSEFSX0NQWSB3bWVtY3B5CistIyBlbHNlCistIyAgZGVmaW5lIFZBU05QUklOVEYgdmFzbnByaW50ZgorLSMgIGRlZmluZSBGQ0hBUl9UIGNoYXIKKy0jICBkZWZpbmUgRENIQVJfVCBjaGFyCistIyAgZGVmaW5lIFRDSEFSX1QgY2hhcgorLSMgIGRlZmluZSBEQ0hBUl9JU19UQ0hBUiAxCistIyAgZGVmaW5lIERJUkVDVElWRSBjaGFyX2RpcmVjdGl2ZQorLSMgIGRlZmluZSBESVJFQ1RJVkVTIGNoYXJfZGlyZWN0aXZlcworLSMgIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCistIyAgZGVmaW5lIERDSEFSX0NQWSBtZW1jcHkKKy0jIGVuZGlmCistI2VuZGlmCistI2lmIFdJREVfQ0hBUl9WRVJTSU9OCistICAvKiBUQ0hBUl9UIGlzIHdjaGFyX3QuICAqLworLSMgZGVmaW5lIFVTRV9TTlBSSU5URiAxCistIyBpZiBIQVZFX0RFQ0xfX1NOV1BSSU5URgorLSAgIC8qIE9uIFdpbmRvd3MsIHRoZSBmdW5jdGlvbiBzd3ByaW50ZigpIGhhcyBhIGRpZmZlcmVudCBzaWduYXR1cmUgdGhhbgorLSAgICAgIG9uIFVuaXg7IHdlIHVzZSB0aGUgX3Nud3ByaW50ZigpIGZ1bmN0aW9uIGluc3RlYWQuICAqLworLSMgIGRlZmluZSBTTlBSSU5URiBfc253cHJpbnRmCistIyBlbHNlCistICAgLyogVW5peC4gICovCistIyAgZGVmaW5lIFNOUFJJTlRGIHN3cHJpbnRmCistIyBlbmRpZgorLSNlbHNlCistICAvKiBUQ0hBUl9UIGlzIGNoYXIuICAqLworLSMgLyogVXNlIHNucHJpbnRmIGlmIGl0IGV4aXN0cyB1bmRlciB0aGUgbmFtZSAnc25wcmludGYnIG9yICdfc25wcmludGYnLgorLSAgICAgQnV0IGRvbid0IHVzZSBpdCBvbiBCZU9TLCBzaW5jZSBCZU9TIHNucHJpbnRmIHByb2R1Y2VzIG5vIG91dHB1dCBpZiB0aGUKKy0gICAgIHNpemUgYXJndW1lbnQgaXMgPj0gMHgzMDAwMDAwLiAgKi8KKy0jIGlmIChIQVZFX0RFQ0xfX1NOUFJJTlRGIHx8IEhBVkVfU05QUklOVEYpICYmICFkZWZpbmVkIF9fQkVPU19fCistIyAgZGVmaW5lIFVTRV9TTlBSSU5URiAxCistIyBlbHNlCistIyAgZGVmaW5lIFVTRV9TTlBSSU5URiAwCistIyBlbmRpZgorLSMgaWYgSEFWRV9ERUNMX19TTlBSSU5URgorLSAgIC8qIFdpbmRvd3MuICAqLworLSMgIGRlZmluZSBTTlBSSU5URiBfc25wcmludGYKKy0jIGVsc2UKKy0gICAvKiBVbml4LiAgKi8KKy0jICBkZWZpbmUgU05QUklOVEYgc25wcmludGYKKy0gICAvKiBIZXJlIHdlIG5lZWQgdG8gY2FsbCB0aGUgbmF0aXZlIHNucHJpbnRmLCBub3QgcnBsX3NucHJpbnRmLiAgKi8KKy0jICB1bmRlZiBzbnByaW50ZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0vKiBIZXJlIHdlIG5lZWQgdG8gY2FsbCB0aGUgbmF0aXZlIHNwcmludGYsIG5vdCBycGxfc3ByaW50Zi4gICovCistI3VuZGVmIHNwcmludGYKKy0KKy0jaWYgKE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0RPVUJMRSB8fCBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUpICYmICFkZWZpbmVkIElOX0xJQklOVEwKKy0vKiBEZXRlcm1pbmUgdGhlIGRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUuICAqLworLSMgaWZuZGVmIGRlY2ltYWxfcG9pbnRfY2hhcl9kZWZpbmVkCistIyAgZGVmaW5lIGRlY2ltYWxfcG9pbnRfY2hhcl9kZWZpbmVkIDEKKy1zdGF0aWMgY2hhcgorLWRlY2ltYWxfcG9pbnRfY2hhciAoKQorLXsKKy0gIGNvbnN0IGNoYXIgKnBvaW50OworLSAgLyogRGV0ZXJtaW5lIGl0IGluIGEgbXVsdGl0aHJlYWQtc2FmZSB3YXkuICBXZSBrbm93IG5sX2xhbmdpbmZvIGlzCistICAgICBtdWx0aXRocmVhZC1zYWZlIG9uIGdsaWJjIHN5c3RlbXMsIGJ1dCBpcyBub3QgcmVxdWlyZWQgdG8gYmUgbXVsdGl0aHJlYWQtCistICAgICBzYWZlIGJ5IFBPU0lYLiAgc3ByaW50ZigpLCBob3dldmVyLCBpcyBtdWx0aXRocmVhZC1zYWZlLiAgbG9jYWxlY29udigpCistICAgICBpcyByYXJlbHkgbXVsdGl0aHJlYWQtc2FmZS4gICovCistIyAgaWYgSEFWRV9OTF9MQU5HSU5GTyAmJiBfX0dMSUJDX18KKy0gIHBvaW50ID0gbmxfbGFuZ2luZm8gKFJBRElYQ0hBUik7CistIyAgZWxpZiAxCistICBjaGFyIHBvaW50YnVmWzVdOworLSAgc3ByaW50ZiAocG9pbnRidWYsICIlIy4wZiIsIDEuMCk7CistICBwb2ludCA9ICZwb2ludGJ1ZlsxXTsKKy0jICBlbHNlCistICBwb2ludCA9IGxvY2FsZWNvbnYgKCkgLT4gZGVjaW1hbF9wb2ludDsKKy0jICBlbmRpZgorLSAgLyogVGhlIGRlY2ltYWwgcG9pbnQgaXMgYWx3YXlzIGEgc2luZ2xlIGJ5dGU6IGVpdGhlciAnLicgb3IgJywnLiAgKi8KKy0gIHJldHVybiAocG9pbnRbMF0gIT0gJ1wwJyA/IHBvaW50WzBdIDogJy4nKTsKKy19CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUgJiYgIU5FRURfUFJJTlRGX0RPVUJMRSAmJiAhZGVmaW5lZCBJTl9MSUJJTlRMCistCistLyogRXF1aXZhbGVudCB0byAhaXNmaW5pdGUoeCkgfHwgeCA9PSAwLCBidXQgZG9lcyBub3QgcmVxdWlyZSBsaWJtLiAgKi8KKy1zdGF0aWMgaW50CistaXNfaW5maW5pdGVfb3JfemVybyAoZG91YmxlIHgpCisteworLSAgcmV0dXJuIGlzbmFuICh4KSB8fCB4ICsgeCA9PSB4OworLX0KKy0KKy0jZW5kaWYKKy0KKy0jaWYgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUgJiYgIU5FRURfUFJJTlRGX0xPTkdfRE9VQkxFICYmICFkZWZpbmVkIElOX0xJQklOVEwKKy0KKy0vKiBFcXVpdmFsZW50IHRvICFpc2Zpbml0ZSh4KSwgYnV0IGRvZXMgbm90IHJlcXVpcmUgbGlibS4gICovCistc3RhdGljIGludAorLWlzX2luZmluaXRlbCAobG9uZyBkb3VibGUgeCkKKy17CistICByZXR1cm4gaXNuYW5sICh4KSB8fCAoeCArIHggPT0geCAmJiB4ICE9IDAuMEwpOworLX0KKy0KKy0jZW5kaWYKKy0KKy0jaWYgKE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorLQorLS8qIENvbnZlcnRpbmcgJ2xvbmcgZG91YmxlJyB0byBkZWNpbWFsIHdpdGhvdXQgcmFyZSByb3VuZGluZyBidWdzIHJlcXVpcmVzCistICAgcmVhbCBiaWdudW1zLiAgV2UgdXNlIHRoZSBuYW1pbmcgY29udmVudGlvbnMgb2YgR05VIGdtcCwgYnV0IHZhc3RseSBzaW1wbGVyCistICAgKGFuZCBzbG93ZXIpIGFsZ29yaXRobXMuICAqLworLQorLXR5cGVkZWYgdW5zaWduZWQgaW50IG1wX2xpbWJfdDsKKy0jIGRlZmluZSBHTVBfTElNQl9CSVRTIDMyCistdHlwZWRlZiBpbnQgbXBfbGltYl92ZXJpZnlbMiAqIChzaXplb2YgKG1wX2xpbWJfdCkgKiBDSEFSX0JJVCA9PSBHTVBfTElNQl9CSVRTKSAtIDFdOworLQorLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIG1wX3R3b2xpbWJfdDsKKy0jIGRlZmluZSBHTVBfVFdPTElNQl9CSVRTIDY0CistdHlwZWRlZiBpbnQgbXBfdHdvbGltYl92ZXJpZnlbMiAqIChzaXplb2YgKG1wX3R3b2xpbWJfdCkgKiBDSEFSX0JJVCA9PSBHTVBfVFdPTElNQl9CSVRTKSAtIDFdOworLQorLS8qIFJlcHJlc2VudGF0aW9uIG9mIGEgYmlnbnVtID49IDAuICAqLworLXR5cGVkZWYgc3RydWN0CisteworLSAgc2l6ZV90IG5saW1iczsKKy0gIG1wX2xpbWJfdCAqbGltYnM7IC8qIEJpdHMgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciwgYWxsb2NhdGVkIHdpdGggbWFsbG9jKCkuICAqLworLX0gbXBuX3Q7CistCistLyogQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiB0d28gYmlnbnVtcyA+PSAwLgorLSAgIFJldHVybiB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIE5VTEwgaW4gY2FzZSBvZiBtZW1vcnkKKy0gICBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworLXN0YXRpYyB2b2lkICoKKy1tdWx0aXBseSAobXBuX3Qgc3JjMSwgbXBuX3Qgc3JjMiwgbXBuX3QgKmRlc3QpCisteworLSAgY29uc3QgbXBfbGltYl90ICpwMTsKKy0gIGNvbnN0IG1wX2xpbWJfdCAqcDI7CistICBzaXplX3QgbGVuMTsKKy0gIHNpemVfdCBsZW4yOworLQorLSAgaWYgKHNyYzEubmxpbWJzIDw9IHNyYzIubmxpbWJzKQorLSAgICB7CistICAgICAgbGVuMSA9IHNyYzEubmxpbWJzOworLSAgICAgIHAxID0gc3JjMS5saW1iczsKKy0gICAgICBsZW4yID0gc3JjMi5ubGltYnM7CistICAgICAgcDIgPSBzcmMyLmxpbWJzOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICBsZW4xID0gc3JjMi5ubGltYnM7CistICAgICAgcDEgPSBzcmMyLmxpbWJzOworLSAgICAgIGxlbjIgPSBzcmMxLm5saW1iczsKKy0gICAgICBwMiA9IHNyYzEubGltYnM7CistICAgIH0KKy0gIC8qIE5vdyAwIDw9IGxlbjEgPD0gbGVuMi4gICovCistICBpZiAobGVuMSA9PSAwKQorLSAgICB7CistICAgICAgLyogc3JjMSBvciBzcmMyIGlzIHplcm8uICAqLworLSAgICAgIGRlc3QtPm5saW1icyA9IDA7CistICAgICAgZGVzdC0+bGltYnMgPSAobXBfbGltYl90ICopIG1hbGxvYyAoMSk7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIC8qIEhlcmUgMSA8PSBsZW4xIDw9IGxlbjIuICAqLworLSAgICAgIHNpemVfdCBkbGVuOworLSAgICAgIG1wX2xpbWJfdCAqZHA7CistICAgICAgc2l6ZV90IGssIGksIGo7CistCistICAgICAgZGxlbiA9IGxlbjEgKyBsZW4yOworLSAgICAgIGRwID0gKG1wX2xpbWJfdCAqKSBtYWxsb2MgKGRsZW4gKiBzaXplb2YgKG1wX2xpbWJfdCkpOworLSAgICAgIGlmIChkcCA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKy0gICAgICBmb3IgKGsgPSBsZW4yOyBrID4gMDsgKQorLQlkcFstLWtdID0gMDsKKy0gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuMTsgaSsrKQorLQl7CistCSAgbXBfbGltYl90IGRpZ2l0MSA9IHAxW2ldOworLQkgIG1wX3R3b2xpbWJfdCBjYXJyeSA9IDA7CistCSAgZm9yIChqID0gMDsgaiA8IGxlbjI7IGorKykKKy0JICAgIHsKKy0JICAgICAgbXBfbGltYl90IGRpZ2l0MiA9IHAyW2pdOworLQkgICAgICBjYXJyeSArPSAobXBfdHdvbGltYl90KSBkaWdpdDEgKiAobXBfdHdvbGltYl90KSBkaWdpdDI7CistCSAgICAgIGNhcnJ5ICs9IGRwW2kgKyBqXTsKKy0JICAgICAgZHBbaSArIGpdID0gKG1wX2xpbWJfdCkgY2Fycnk7CistCSAgICAgIGNhcnJ5ID0gY2FycnkgPj4gR01QX0xJTUJfQklUUzsKKy0JICAgIH0KKy0JICBkcFtpICsgbGVuMl0gPSAobXBfbGltYl90KSBjYXJyeTsKKy0JfQorLSAgICAgIC8qIE5vcm1hbGlzZS4gICovCistICAgICAgd2hpbGUgKGRsZW4gPiAwICYmIGRwW2RsZW4gLSAxXSA9PSAwKQorLQlkbGVuLS07CistICAgICAgZGVzdC0+bmxpbWJzID0gZGxlbjsKKy0gICAgICBkZXN0LT5saW1icyA9IGRwOworLSAgICB9CistICByZXR1cm4gZGVzdC0+bGltYnM7CistfQorLQorLS8qIENvbXB1dGUgdGhlIHF1b3RpZW50IG9mIGEgYmlnbnVtIGEgPj0gMCBhbmQgYSBiaWdudW0gYiA+IDAuCistICAgYSBpcyB3cml0dGVuIGFzICBhID0gcSAqIGIgKyByICB3aXRoIDAgPD0gciA8IGIuICBxIGlzIHRoZSBxdW90aWVudCwgcgorLSAgIHRoZSByZW1haW5kZXIuCistICAgRmluYWxseSwgcm91bmQtdG8tZXZlbiBpcyBwZXJmb3JtZWQ6IElmIHIgPiBiLzIgb3IgaWYgciA9IGIvMiBhbmQgcSBpcyBvZGQsCistICAgcSBpcyBpbmNyZW1lbnRlZC4KKy0gICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2Ugb2YgbWVtb3J5CistICAgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KKy1zdGF0aWMgdm9pZCAqCistZGl2aWRlIChtcG5fdCBhLCBtcG5fdCBiLCBtcG5fdCAqcSkKKy17CistICAvKiBBbGdvcml0aG06CistICAgICBGaXJzdCBub3JtYWxpc2UgYSBhbmQgYjogYT1bYVttLTFdLC4uLixhWzBdXSwgYj1bYltuLTFdLC4uLixiWzBdXQorLSAgICAgd2l0aCBtPj0wIGFuZCBuPjAgKGluIGJhc2UgYmV0YSA9IDJeR01QX0xJTUJfQklUUykuCistICAgICBJZiBtPG4sIHRoZW4gcTo9MCBhbmQgcjo9YS4KKy0gICAgIElmIG0+PW49MSwgcGVyZm9ybSBhIHNpbmdsZS1wcmVjaXNpb24gZGl2aXNpb246CistICAgICAgIHI6PTAsIGo6PW0sCistICAgICAgIHdoaWxlIGo+MCBkbworLSAgICAgICAgIHtIZXJlIChxW20tMV0qYmV0YV4obS0xKSsuLi4rcVtqXSpiZXRhXmopICogYlswXSArIHIqYmV0YV5qID0KKy0gICAgICAgICAgICAgICA9IGFbbS0xXSpiZXRhXihtLTEpKy4uLithW2pdKmJldGFeaiB1bmQgMDw9cjxiWzBdPGJldGF9CistICAgICAgICAgajo9ai0xLCByOj1yKmJldGErYVtqXSwgcVtqXTo9Zmxvb3Ioci9iWzBdKSwgcjo9ci1iWzBdKnFbal0uCistICAgICAgIE5vcm1hbGlzZSBbcVttLTFdLC4uLixxWzBdXSwgeWllbGRzIHEuCistICAgICBJZiBtPj1uPjEsIHBlcmZvcm0gYSBtdWx0aXBsZS1wcmVjaXNpb24gZGl2aXNpb246CistICAgICAgIFdlIGhhdmUgYS9iIDwgYmV0YV4obS1uKzEpLgorLSAgICAgICBzOj1pbnREc2l6ZS0xLShoaWdodGVzdCBiaXQgaW4gYltuLTFdKSwgMDw9czxpbnREc2l6ZS4KKy0gICAgICAgU2hpZnQgYSBhbmQgYiBsZWZ0IGJ5IHMgYml0cywgY29weWluZyB0aGVtLiByOj1hLgorLSAgICAgICByPVtyW21dLC4uLixyWzBdXSwgYj1bYltuLTFdLC4uLixiWzBdXSB3aXRoIGJbbi0xXT49YmV0YS8yLgorLSAgICAgICBGb3Igaj1tLW4sLi4uLDA6IHtIZXJlIDAgPD0gciA8IGIqYmV0YV4oaisxKS59CistICAgICAgICAgQ29tcHV0ZSBxKiA6CistICAgICAgICAgICBxKiA6PSBmbG9vcigocltqK25dKmJldGErcltqK24tMV0pL2Jbbi0xXSkuCistICAgICAgICAgICBJbiBjYXNlIG9mIG92ZXJmbG93IChxKiA+PSBiZXRhKSBzZXQgcSogOj0gYmV0YS0xLgorLSAgICAgICAgICAgQ29tcHV0ZSBjMiA6PSAoKHJbaituXSpiZXRhK3JbaituLTFdKSAtIHEqICogYltuLTFdKSpiZXRhICsgcltqK24tMl0KKy0gICAgICAgICAgIGFuZCBjMyA6PSBiW24tMl0gKiBxKi4KKy0gICAgICAgICAgIHtXZSBoYXZlIDAgPD0gYzIgPCAyKmJldGFeMiwgZXZlbiAwIDw9IGMyIDwgYmV0YV4yIGlmIG5vIG92ZXJmbG93CistICAgICAgICAgICAgb2NjdXJyZWQuICBGdXJ0aGVybW9yZSAwIDw9IGMzIDwgYmV0YV4yLgorLSAgICAgICAgICAgIElmIHRoZXJlIHdhcyBvdmVyZmxvdyBhbmQKKy0gICAgICAgICAgICByW2orbl0qYmV0YStyW2orbi0xXSAtIHEqICogYltuLTFdID49IGJldGEsIGkuZS4gYzIgPj0gYmV0YV4yLAorLSAgICAgICAgICAgIHRoZSBuZXh0IHRlc3QgY2FuIGJlIHNraXBwZWQufQorLSAgICAgICAgICAgV2hpbGUgYzMgPiBjMiwge0hlcmUgMCA8PSBjMiA8IGMzIDwgYmV0YV4yfQorLSAgICAgICAgICAgICBQdXQgcSogOj0gcSogLSAxLCBjMiA6PSBjMiArIGJbbi0xXSpiZXRhLCBjMyA6PSBjMyAtIGJbbi0yXS4KKy0gICAgICAgICAgIElmIHEqID4gMDoKKy0gICAgICAgICAgICAgUHV0IHIgOj0gciAtIGIgKiBxKiAqIGJldGFeai4gSW4gZGV0YWlsOgorLSAgICAgICAgICAgICAgIFtyW24ral0sLi4uLHJbal1dIDo9IFtyW24ral0sLi4uLHJbal1dIC0gcSogKiBbYltuLTFdLC4uLixiWzBdXS4KKy0gICAgICAgICAgICAgICBoZW5jZTogdTo9MCwgZm9yIGk6PTAgdG8gbi0xIGRvCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA6PSB1ICsgcSogKiBiW2ldLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbaitpXTo9cltqK2ldLSh1IG1vZCBiZXRhKSAoKyBiZXRhLCBpZiBjYXJyeSksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTo9dSBkaXYgYmV0YSAoKyAxLCBpZiBjYXJyeSBpbiBzdWJ0cmFjdGlvbikKKy0gICAgICAgICAgICAgICAgICAgICAgcltuK2pdOj1yW24ral0tdS4KKy0gICAgICAgICAgICAgICB7U2luY2UgYWx3YXlzIHUgPSAocSogKiBbYltpLTFdLC4uLixiWzBdXSBkaXYgYmV0YV5pKSArIDEKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCBxKiArIDEgPD0gYmV0YSwKKy0gICAgICAgICAgICAgICAgdGhlIGNhcnJ5IHUgZG9lcyBub3Qgb3ZlcmZsb3cufQorLSAgICAgICAgICAgICBJZiBhIG5lZ2F0aXZlIGNhcnJ5IG9jY3VycywgcHV0IHEqIDo9IHEqIC0gMQorLSAgICAgICAgICAgICAgIGFuZCBbcltuK2pdLC4uLixyW2pdXSA6PSBbcltuK2pdLC4uLixyW2pdXSArIFswLGJbbi0xXSwuLi4sYlswXV0uCistICAgICAgICAgU2V0IHFbal0gOj0gcSouCistICAgICAgIE5vcm1hbGlzZSBbcVttLW5dLC4uLHFbMF1dOyB0aGlzIHlpZWxkcyB0aGUgcXVvdGllbnQgcS4KKy0gICAgICAgU2hpZnQgW3Jbbi0xXSwuLi4sclswXV0gcmlnaHQgYnkgcyBiaXRzIGFuZCBub3JtYWxpc2U7IHRoaXMgeWllbGRzIHRoZQorLSAgICAgICByZXN0IHIuCistICAgICAgIFRoZSByb29tIGZvciBxW2pdIGNhbiBiZSBhbGxvY2F0ZWQgYXQgdGhlIG1lbW9yeSBsb2NhdGlvbiBvZiByW24ral0uCistICAgICBGaW5hbGx5LCByb3VuZC10by1ldmVuOgorLSAgICAgICBTaGlmdCByIGxlZnQgYnkgMSBiaXQuCistICAgICAgIElmIHIgPiBiIG9yIGlmIHIgPSBiIGFuZCBxWzBdIGlzIG9kZCwgcSA6PSBxKzEuCistICAgKi8KKy0gIGNvbnN0IG1wX2xpbWJfdCAqYV9wdHIgPSBhLmxpbWJzOworLSAgc2l6ZV90IGFfbGVuID0gYS5ubGltYnM7CistICBjb25zdCBtcF9saW1iX3QgKmJfcHRyID0gYi5saW1iczsKKy0gIHNpemVfdCBiX2xlbiA9IGIubmxpbWJzOworLSAgbXBfbGltYl90ICpyb29tcHRyOworLSAgbXBfbGltYl90ICp0bXBfcm9vbXB0ciA9IE5VTEw7CistICBtcF9saW1iX3QgKnFfcHRyOworLSAgc2l6ZV90IHFfbGVuOworLSAgbXBfbGltYl90ICpyX3B0cjsKKy0gIHNpemVfdCByX2xlbjsKKy0KKy0gIC8qIEFsbG9jYXRlIHJvb20gZm9yIGFfbGVuKzIgZGlnaXRzLgorLSAgICAgKE5lZWQgYV9sZW4rMSBkaWdpdHMgZm9yIHRoZSByZWFsIGRpdmlzaW9uIGFuZCAxIG1vcmUgZGlnaXQgZm9yIHRoZQorLSAgICAgZmluYWwgcm91bmRpbmcgb2YgcS4pICAqLworLSAgcm9vbXB0ciA9IChtcF9saW1iX3QgKikgbWFsbG9jICgoYV9sZW4gKyAyKSAqIHNpemVvZiAobXBfbGltYl90KSk7CistICBpZiAocm9vbXB0ciA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIC8qIE5vcm1hbGlzZSBhLiAgKi8KKy0gIHdoaWxlIChhX2xlbiA+IDAgJiYgYV9wdHJbYV9sZW4gLSAxXSA9PSAwKQorLSAgICBhX2xlbi0tOworLQorLSAgLyogTm9ybWFsaXNlIGIuICAqLworLSAgZm9yICg7OykKKy0gICAgeworLSAgICAgIGlmIChiX2xlbiA9PSAwKQorLQkvKiBEaXZpc2lvbiBieSB6ZXJvLiAgKi8KKy0JYWJvcnQgKCk7CistICAgICAgaWYgKGJfcHRyW2JfbGVuIC0gMV0gPT0gMCkKKy0JYl9sZW4tLTsKKy0gICAgICBlbHNlCistCWJyZWFrOworLSAgICB9CistCistICAvKiBIZXJlIG0gPSBhX2xlbiA+PSAwIGFuZCBuID0gYl9sZW4gPiAwLiAgKi8KKy0KKy0gIGlmIChhX2xlbiA8IGJfbGVuKQorLSAgICB7CistICAgICAgLyogbTxuOiB0cml2aWFsIGNhc2UuICBxPTAsIHIgOj0gY29weSBvZiBhLiAgKi8KKy0gICAgICByX3B0ciA9IHJvb21wdHI7CistICAgICAgcl9sZW4gPSBhX2xlbjsKKy0gICAgICBtZW1jcHkgKHJfcHRyLCBhX3B0ciwgYV9sZW4gKiBzaXplb2YgKG1wX2xpbWJfdCkpOworLSAgICAgIHFfcHRyID0gcm9vbXB0ciArIGFfbGVuOworLSAgICAgIHFfbGVuID0gMDsKKy0gICAgfQorLSAgZWxzZSBpZiAoYl9sZW4gPT0gMSkKKy0gICAgeworLSAgICAgIC8qIG49MTogc2luZ2xlIHByZWNpc2lvbiBkaXZpc2lvbi4KKy0JIGJldGFeKG0tMSkgPD0gYSA8IGJldGFebSAgPT0+ICBiZXRhXihtLTIpIDw9IGEvYiA8IGJldGFebSAgKi8KKy0gICAgICByX3B0ciA9IHJvb21wdHI7CistICAgICAgcV9wdHIgPSByb29tcHRyICsgMTsKKy0gICAgICB7CistCW1wX2xpbWJfdCBkZW4gPSBiX3B0clswXTsKKy0JbXBfbGltYl90IHJlbWFpbmRlciA9IDA7CistCWNvbnN0IG1wX2xpbWJfdCAqc291cmNlcHRyID0gYV9wdHIgKyBhX2xlbjsKKy0JbXBfbGltYl90ICpkZXN0cHRyID0gcV9wdHIgKyBhX2xlbjsKKy0Jc2l6ZV90IGNvdW50OworLQlmb3IgKGNvdW50ID0gYV9sZW47IGNvdW50ID4gMDsgY291bnQtLSkKKy0JICB7CistCSAgICBtcF90d29saW1iX3QgbnVtID0KKy0JICAgICAgKChtcF90d29saW1iX3QpIHJlbWFpbmRlciA8PCBHTVBfTElNQl9CSVRTKSB8ICotLXNvdXJjZXB0cjsKKy0JICAgICotLWRlc3RwdHIgPSBudW0gLyBkZW47CistCSAgICByZW1haW5kZXIgPSBudW0gJSBkZW47CistCSAgfQorLQkvKiBOb3JtYWxpc2UgYW5kIHN0b3JlIHIuICAqLworLQlpZiAocmVtYWluZGVyID4gMCkKKy0JICB7CistCSAgICByX3B0clswXSA9IHJlbWFpbmRlcjsKKy0JICAgIHJfbGVuID0gMTsKKy0JICB9CistCWVsc2UKKy0JICByX2xlbiA9IDA7CistCS8qIE5vcm1hbGlzZSBxLiAgKi8KKy0JcV9sZW4gPSBhX2xlbjsKKy0JaWYgKHFfcHRyW3FfbGVuIC0gMV0gPT0gMCkKKy0JICBxX2xlbi0tOworLSAgICAgIH0KKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgLyogbj4xOiBtdWx0aXBsZSBwcmVjaXNpb24gZGl2aXNpb24uCistCSBiZXRhXihtLTEpIDw9IGEgPCBiZXRhXm0sIGJldGFeKG4tMSkgPD0gYiA8IGJldGFebiAgPT0+CistCSBiZXRhXihtLW4tMSkgPD0gYS9iIDwgYmV0YV4obS1uKzEpLiAgKi8KKy0gICAgICAvKiBEZXRlcm1pbmUgcy4gICovCistICAgICAgc2l6ZV90IHM7CistICAgICAgeworLQltcF9saW1iX3QgbXNkID0gYl9wdHJbYl9sZW4gLSAxXTsgLyogPSBiW24tMV0sID4gMCAqLworLQlzID0gMzE7CistCWlmIChtc2QgPj0gMHgxMDAwMCkKKy0JICB7CistCSAgICBtc2QgPSBtc2QgPj4gMTY7CistCSAgICBzIC09IDE2OworLQkgIH0KKy0JaWYgKG1zZCA+PSAweDEwMCkKKy0JICB7CistCSAgICBtc2QgPSBtc2QgPj4gODsKKy0JICAgIHMgLT0gODsKKy0JICB9CistCWlmIChtc2QgPj0gMHgxMCkKKy0JICB7CistCSAgICBtc2QgPSBtc2QgPj4gNDsKKy0JICAgIHMgLT0gNDsKKy0JICB9CistCWlmIChtc2QgPj0gMHg0KQorLQkgIHsKKy0JICAgIG1zZCA9IG1zZCA+PiAyOworLQkgICAgcyAtPSAyOworLQkgIH0KKy0JaWYgKG1zZCA+PSAweDIpCistCSAgeworLQkgICAgbXNkID0gbXNkID4+IDE7CistCSAgICBzIC09IDE7CistCSAgfQorLSAgICAgIH0KKy0gICAgICAvKiAwIDw9IHMgPCBHTVBfTElNQl9CSVRTLgorLQkgQ29weSBiLCBzaGlmdGluZyBpdCBsZWZ0IGJ5IHMgYml0cy4gICovCistICAgICAgaWYgKHMgPiAwKQorLQl7CistCSAgdG1wX3Jvb21wdHIgPSAobXBfbGltYl90ICopIG1hbGxvYyAoYl9sZW4gKiBzaXplb2YgKG1wX2xpbWJfdCkpOworLQkgIGlmICh0bXBfcm9vbXB0ciA9PSBOVUxMKQorLQkgICAgeworLQkgICAgICBmcmVlIChyb29tcHRyKTsKKy0JICAgICAgcmV0dXJuIE5VTEw7CistCSAgICB9CistCSAgeworLQkgICAgY29uc3QgbXBfbGltYl90ICpzb3VyY2VwdHIgPSBiX3B0cjsKKy0JICAgIG1wX2xpbWJfdCAqZGVzdHB0ciA9IHRtcF9yb29tcHRyOworLQkgICAgbXBfdHdvbGltYl90IGFjY3UgPSAwOworLQkgICAgc2l6ZV90IGNvdW50OworLQkgICAgZm9yIChjb3VudCA9IGJfbGVuOyBjb3VudCA+IDA7IGNvdW50LS0pCistCSAgICAgIHsKKy0JCWFjY3UgKz0gKG1wX3R3b2xpbWJfdCkgKnNvdXJjZXB0cisrIDw8IHM7CistCQkqZGVzdHB0cisrID0gKG1wX2xpbWJfdCkgYWNjdTsKKy0JCWFjY3UgPSBhY2N1ID4+IEdNUF9MSU1CX0JJVFM7CistCSAgICAgIH0KKy0JICAgIC8qIGFjY3UgbXVzdCBiZSB6ZXJvLCBzaW5jZSB0aGF0IHdhcyBob3cgcyB3YXMgZGV0ZXJtaW5lZC4gICovCistCSAgICBpZiAoYWNjdSAhPSAwKQorLQkgICAgICBhYm9ydCAoKTsKKy0JICB9CistCSAgYl9wdHIgPSB0bXBfcm9vbXB0cjsKKy0JfQorLSAgICAgIC8qIENvcHkgYSwgc2hpZnRpbmcgaXQgbGVmdCBieSBzIGJpdHMsIHlpZWxkcyByLgorLQkgTWVtb3J5IGxheW91dDoKKy0JIEF0IHRoZSBiZWdpbm5pbmc6IHIgPSByb29tcHRyWzAuLmFfbGVuXSwKKy0JIGF0IHRoZSBlbmQ6IHIgPSByb29tcHRyWzAuLmJfbGVuLTFdLCBxID0gcm9vbXB0cltiX2xlbi4uYV9sZW5dICAqLworLSAgICAgIHJfcHRyID0gcm9vbXB0cjsKKy0gICAgICBpZiAocyA9PSAwKQorLQl7CistCSAgbWVtY3B5IChyX3B0ciwgYV9wdHIsIGFfbGVuICogc2l6ZW9mIChtcF9saW1iX3QpKTsKKy0JICByX3B0clthX2xlbl0gPSAwOworLQl9CistICAgICAgZWxzZQorLQl7CistCSAgY29uc3QgbXBfbGltYl90ICpzb3VyY2VwdHIgPSBhX3B0cjsKKy0JICBtcF9saW1iX3QgKmRlc3RwdHIgPSByX3B0cjsKKy0JICBtcF90d29saW1iX3QgYWNjdSA9IDA7CistCSAgc2l6ZV90IGNvdW50OworLQkgIGZvciAoY291bnQgPSBhX2xlbjsgY291bnQgPiAwOyBjb3VudC0tKQorLQkgICAgeworLQkgICAgICBhY2N1ICs9IChtcF90d29saW1iX3QpICpzb3VyY2VwdHIrKyA8PCBzOworLQkgICAgICAqZGVzdHB0cisrID0gKG1wX2xpbWJfdCkgYWNjdTsKKy0JICAgICAgYWNjdSA9IGFjY3UgPj4gR01QX0xJTUJfQklUUzsKKy0JICAgIH0KKy0JICAqZGVzdHB0cisrID0gKG1wX2xpbWJfdCkgYWNjdTsKKy0JfQorLSAgICAgIHFfcHRyID0gcm9vbXB0ciArIGJfbGVuOworLSAgICAgIHFfbGVuID0gYV9sZW4gLSBiX2xlbiArIDE7IC8qIHEgd2lsbCBoYXZlIG0tbisxIGxpbWJzICovCistICAgICAgeworLQlzaXplX3QgaiA9IGFfbGVuIC0gYl9sZW47IC8qIG0tbiAqLworLQltcF9saW1iX3QgYl9tc2QgPSBiX3B0cltiX2xlbiAtIDFdOyAvKiBiW24tMV0gKi8KKy0JbXBfbGltYl90IGJfMm1zZCA9IGJfcHRyW2JfbGVuIC0gMl07IC8qIGJbbi0yXSAqLworLQltcF90d29saW1iX3QgYl9tc2RkID0gLyogYltuLTFdKmJldGErYltuLTJdICovCistCSAgKChtcF90d29saW1iX3QpIGJfbXNkIDw8IEdNUF9MSU1CX0JJVFMpIHwgYl8ybXNkOworLQkvKiBEaXZpc2lvbiBsb29wLCB0cmF2ZXJzZWQgbS1uKzEgdGltZXMuCistCSAgIGogY291bnRzIGRvd24sIGIgaXMgdW5jaGFuZ2VkLCBiZXRhLzIgPD0gYltuLTFdIDwgYmV0YS4gICovCistCWZvciAoOzspCistCSAgeworLQkgICAgbXBfbGltYl90IHFfc3RhcjsKKy0JICAgIG1wX2xpbWJfdCBjMTsKKy0JICAgIGlmIChyX3B0cltqICsgYl9sZW5dIDwgYl9tc2QpIC8qIHJbaituXSA8IGJbbi0xXSA/ICovCistCSAgICAgIHsKKy0JCS8qIERpdmlkZSByW2orbl0qYmV0YStyW2orbi0xXSBieSBiW24tMV0sIG5vIG92ZXJmbG93LiAgKi8KKy0JCW1wX3R3b2xpbWJfdCBudW0gPQorLQkJICAoKG1wX3R3b2xpbWJfdCkgcl9wdHJbaiArIGJfbGVuXSA8PCBHTVBfTElNQl9CSVRTKQorLQkJICB8IHJfcHRyW2ogKyBiX2xlbiAtIDFdOworLQkJcV9zdGFyID0gbnVtIC8gYl9tc2Q7CistCQljMSA9IG51bSAlIGJfbXNkOworLQkgICAgICB9CistCSAgICBlbHNlCistCSAgICAgIHsKKy0JCS8qIE92ZXJmbG93LCBoZW5jZSByW2orbl0qYmV0YStyW2orbi0xXSA+PSBiZXRhKmJbbi0xXS4gICovCistCQlxX3N0YXIgPSAobXBfbGltYl90KX4obXBfbGltYl90KTA7IC8qIHEqID0gYmV0YS0xICovCistCQkvKiBUZXN0IHdoZXRoZXIgcltqK25dKmJldGErcltqK24tMV0gLSAoYmV0YS0xKSpiW24tMV0gPj0gYmV0YQorLQkJICAgPD09PiByW2orbl0qYmV0YStyW2orbi0xXSArIGJbbi0xXSA+PSBiZXRhKmJbbi0xXStiZXRhCistCQkgICA8PT0+IGJbbi0xXSA8IGZsb29yKChyW2orbl0qYmV0YStyW2orbi0xXStiW24tMV0pL2JldGEpCistCQkgICAgICAgIHs8PSBiZXRhICF9LgorLQkJICAgSWYgeWVzLCBqdW1wIGRpcmVjdGx5IHRvIHRoZSBzdWJ0cmFjdGlvbiBsb29wLgorLQkJICAgKE90aGVyd2lzZSwgcltqK25dKmJldGErcltqK24tMV0gLSAoYmV0YS0xKSpiW24tMV0gPCBiZXRhCistCQkgICAgPD09PiBmbG9vcigocltqK25dKmJldGErcltqK24tMV0rYltuLTFdKS9iZXRhKSA9IGJbbi0xXSApICovCistCQlpZiAocl9wdHJbaiArIGJfbGVuXSA+IGJfbXNkCistCQkgICAgfHwgKGMxID0gcl9wdHJbaiArIGJfbGVuIC0gMV0gKyBiX21zZCkgPCBiX21zZCkKKy0JCSAgLyogcltqK25dID49IGJbbi0xXSsxIG9yCistCQkgICAgIHJbaituXSA9IGJbbi0xXSBhbmQgdGhlIGFkZGl0aW9uIHJbaituLTFdK2Jbbi0xXSBnaXZlcyBhCistCQkgICAgIGNhcnJ5LiAgKi8KKy0JCSAgZ290byBzdWJ0cmFjdDsKKy0JICAgICAgfQorLQkgICAgLyogcV9zdGFyID0gcSosCistCSAgICAgICBjMSA9IChyW2orbl0qYmV0YStyW2orbi0xXSkgLSBxKiAqIGJbbi0xXSAoPj0wLCA8YmV0YSkuICAqLworLQkgICAgeworLQkgICAgICBtcF90d29saW1iX3QgYzIgPSAvKiBjMSpiZXRhK3JbaituLTJdICovCistCQkoKG1wX3R3b2xpbWJfdCkgYzEgPDwgR01QX0xJTUJfQklUUykgfCByX3B0cltqICsgYl9sZW4gLSAyXTsKKy0JICAgICAgbXBfdHdvbGltYl90IGMzID0gLyogYltuLTJdICogcSogKi8KKy0JCShtcF90d29saW1iX3QpIGJfMm1zZCAqIChtcF90d29saW1iX3QpIHFfc3RhcjsKKy0JICAgICAgLyogV2hpbGUgYzIgPCBjMywgaW5jcmVhc2UgYzIgYW5kIGRlY3JlYXNlIGMzLgorLQkJIENvbnNpZGVyIGMzLWMyLiAgV2hpbGUgaXQgaXMgPiAwLCBkZWNyZWFzZSBpdCBieQorLQkJIGJbbi0xXSpiZXRhK2Jbbi0yXS4gIEJlY2F1c2Ugb2YgYltuLTFdKmJldGErYltuLTJdID49IGJldGFeMi8yCistCQkgdGhpcyBjYW4gaGFwcGVuIG9ubHkgdHdpY2UuICAqLworLQkgICAgICBpZiAoYzMgPiBjMikKKy0JCXsKKy0JCSAgcV9zdGFyID0gcV9zdGFyIC0gMTsgLyogcSogOj0gcSogLSAxICovCistCQkgIGlmIChjMyAtIGMyID4gYl9tc2RkKQorLQkJICAgIHFfc3RhciA9IHFfc3RhciAtIDE7IC8qIHEqIDo9IHEqIC0gMSAqLworLQkJfQorLQkgICAgfQorLQkgICAgaWYgKHFfc3RhciA+IDApCistCSAgICAgIHN1YnRyYWN0OgorLQkgICAgICB7CistCQkvKiBTdWJ0cmFjdCByIDo9IHIgLSBiICogcSogKiBiZXRhXmouICAqLworLQkJbXBfbGltYl90IGNyOworLQkJeworLQkJICBjb25zdCBtcF9saW1iX3QgKnNvdXJjZXB0ciA9IGJfcHRyOworLQkJICBtcF9saW1iX3QgKmRlc3RwdHIgPSByX3B0ciArIGo7CistCQkgIG1wX3R3b2xpbWJfdCBjYXJyeSA9IDA7CistCQkgIHNpemVfdCBjb3VudDsKKy0JCSAgZm9yIChjb3VudCA9IGJfbGVuOyBjb3VudCA+IDA7IGNvdW50LS0pCistCQkgICAgeworLQkJICAgICAgLyogSGVyZSAwIDw9IGNhcnJ5IDw9IHEqLiAgKi8KKy0JCSAgICAgIGNhcnJ5ID0KKy0JCQljYXJyeQorLQkJCSsgKG1wX3R3b2xpbWJfdCkgcV9zdGFyICogKG1wX3R3b2xpbWJfdCkgKnNvdXJjZXB0cisrCistCQkJKyAobXBfbGltYl90KSB+KCpkZXN0cHRyKTsKKy0JCSAgICAgIC8qIEhlcmUgMCA8PSBjYXJyeSA8PSBiZXRhKnEqICsgYmV0YS0xLiAgKi8KKy0JCSAgICAgICpkZXN0cHRyKysgPSB+KG1wX2xpbWJfdCkgY2Fycnk7CistCQkgICAgICBjYXJyeSA9IGNhcnJ5ID4+IEdNUF9MSU1CX0JJVFM7IC8qIDw9IHEqICovCistCQkgICAgfQorLQkJICBjciA9IChtcF9saW1iX3QpIGNhcnJ5OworLQkJfQorLQkJLyogU3VidHJhY3QgY3IgZnJvbSByX3B0cltqICsgYl9sZW5dLCB0aGVuIGZvcmdldCBhYm91dAorLQkJICAgcl9wdHJbaiArIGJfbGVuXS4gICovCistCQlpZiAoY3IgPiByX3B0cltqICsgYl9sZW5dKQorLQkJICB7CistCQkgICAgLyogU3VidHJhY3Rpb24gZ2F2ZSBhIGNhcnJ5LiAgKi8KKy0JCSAgICBxX3N0YXIgPSBxX3N0YXIgLSAxOyAvKiBxKiA6PSBxKiAtIDEgKi8KKy0JCSAgICAvKiBBZGQgYiBiYWNrLiAgKi8KKy0JCSAgICB7CistCQkgICAgICBjb25zdCBtcF9saW1iX3QgKnNvdXJjZXB0ciA9IGJfcHRyOworLQkJICAgICAgbXBfbGltYl90ICpkZXN0cHRyID0gcl9wdHIgKyBqOworLQkJICAgICAgbXBfbGltYl90IGNhcnJ5ID0gMDsKKy0JCSAgICAgIHNpemVfdCBjb3VudDsKKy0JCSAgICAgIGZvciAoY291bnQgPSBiX2xlbjsgY291bnQgPiAwOyBjb3VudC0tKQorLQkJCXsKKy0JCQkgIG1wX2xpbWJfdCBzb3VyY2UxID0gKnNvdXJjZXB0cisrOworLQkJCSAgbXBfbGltYl90IHNvdXJjZTIgPSAqZGVzdHB0cjsKKy0JCQkgICpkZXN0cHRyKysgPSBzb3VyY2UxICsgc291cmNlMiArIGNhcnJ5OworLQkJCSAgY2FycnkgPQorLQkJCSAgICAoY2FycnkKKy0JCQkgICAgID8gc291cmNlMSA+PSAobXBfbGltYl90KSB+c291cmNlMgorLQkJCSAgICAgOiBzb3VyY2UxID4gKG1wX2xpbWJfdCkgfnNvdXJjZTIpOworLQkJCX0KKy0JCSAgICB9CistCQkgICAgLyogRm9yZ2V0IGFib3V0IHRoZSBjYXJyeSBhbmQgYWJvdXQgcltqK25dLiAgKi8KKy0JCSAgfQorLQkgICAgICB9CistCSAgICAvKiBxKiBpcyBkZXRlcm1pbmVkLiAgU3RvcmUgaXQgYXMgcVtqXS4gICovCistCSAgICBxX3B0cltqXSA9IHFfc3RhcjsKKy0JICAgIGlmIChqID09IDApCistCSAgICAgIGJyZWFrOworLQkgICAgai0tOworLQkgIH0KKy0gICAgICB9CistICAgICAgcl9sZW4gPSBiX2xlbjsKKy0gICAgICAvKiBOb3JtYWxpc2UgcS4gICovCistICAgICAgaWYgKHFfcHRyW3FfbGVuIC0gMV0gPT0gMCkKKy0JcV9sZW4tLTsKKy0jIGlmIDAgLyogTm90IG5lZWRlZCBoZXJlLCBzaW5jZSB3ZSBuZWVkIHIgb25seSB0byBjb21wYXJlIGl0IHdpdGggYi8yLCBhbmQKKy0JICBiIGlzIHNoaWZ0ZWQgbGVmdCBieSBzIGJpdHMuICAqLworLSAgICAgIC8qIFNoaWZ0IHIgcmlnaHQgYnkgcyBiaXRzLiAgKi8KKy0gICAgICBpZiAocyA+IDApCistCXsKKy0JICBtcF9saW1iX3QgcHRyID0gcl9wdHIgKyByX2xlbjsKKy0JICBtcF90d29saW1iX3QgYWNjdSA9IDA7CistCSAgc2l6ZV90IGNvdW50OworLQkgIGZvciAoY291bnQgPSByX2xlbjsgY291bnQgPiAwOyBjb3VudC0tKQorLQkgICAgeworLQkgICAgICBhY2N1ID0gKG1wX3R3b2xpbWJfdCkgKG1wX2xpbWJfdCkgYWNjdSA8PCBHTVBfTElNQl9CSVRTOworLQkgICAgICBhY2N1ICs9IChtcF90d29saW1iX3QpICotLXB0ciA8PCAoR01QX0xJTUJfQklUUyAtIHMpOworLQkgICAgICAqcHRyID0gKG1wX2xpbWJfdCkgKGFjY3UgPj4gR01QX0xJTUJfQklUUyk7CistCSAgICB9CistCX0KKy0jIGVuZGlmCistICAgICAgLyogTm9ybWFsaXNlIHIuICAqLworLSAgICAgIHdoaWxlIChyX2xlbiA+IDAgJiYgcl9wdHJbcl9sZW4gLSAxXSA9PSAwKQorLQlyX2xlbi0tOworLSAgICB9CistICAvKiBDb21wYXJlIHIgPDwgMSB3aXRoIGIuICAqLworLSAgaWYgKHJfbGVuID4gYl9sZW4pCistICAgIGdvdG8gaW5jcmVtZW50X3E7CistICB7CistICAgIHNpemVfdCBpOworLSAgICBmb3IgKGkgPSBiX2xlbjs7KQorLSAgICAgIHsKKy0JbXBfbGltYl90IHJfaSA9CistCSAgKGkgPD0gcl9sZW4gJiYgaSA+IDAgPyByX3B0cltpIC0gMV0gPj4gKEdNUF9MSU1CX0JJVFMgLSAxKSA6IDApCistCSAgfCAoaSA8IHJfbGVuID8gcl9wdHJbaV0gPDwgMSA6IDApOworLQltcF9saW1iX3QgYl9pID0gKGkgPCBiX2xlbiA/IGJfcHRyW2ldIDogMCk7CistCWlmIChyX2kgPiBiX2kpCistCSAgZ290byBpbmNyZW1lbnRfcTsKKy0JaWYgKHJfaSA8IGJfaSkKKy0JICBnb3RvIGtlZXBfcTsKKy0JaWYgKGkgPT0gMCkKKy0JICBicmVhazsKKy0JaS0tOworLSAgICAgIH0KKy0gIH0KKy0gIGlmIChxX2xlbiA+IDAgJiYgKChxX3B0clswXSAmIDEpICE9IDApKQorLSAgICAvKiBxIGlzIG9kZC4gICovCistICAgIGluY3JlbWVudF9xOgorLSAgICB7CistICAgICAgc2l6ZV90IGk7CistICAgICAgZm9yIChpID0gMDsgaSA8IHFfbGVuOyBpKyspCistCWlmICgrKyhxX3B0cltpXSkgIT0gMCkKKy0JICBnb3RvIGtlZXBfcTsKKy0gICAgICBxX3B0cltxX2xlbisrXSA9IDE7CistICAgIH0KKy0gIGtlZXBfcToKKy0gIGlmICh0bXBfcm9vbXB0ciAhPSBOVUxMKQorLSAgICBmcmVlICh0bXBfcm9vbXB0cik7CistICBxLT5saW1icyA9IHFfcHRyOworLSAgcS0+bmxpbWJzID0gcV9sZW47CistICByZXR1cm4gcm9vbXB0cjsKKy19CistCistLyogQ29udmVydCBhIGJpZ251bSBhID49IDAsIG11bHRpcGxpZWQgd2l0aCAxMF5leHRyYV96ZXJvZXMsIHRvIGRlY2ltYWwKKy0gICByZXByZXNlbnRhdGlvbi4KKy0gICBEZXN0cm95cyB0aGUgY29udGVudHMgb2YgYS4KKy0gICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgLSBjb250YWluaW5nIHRoZSBkZWNpbWFsIGRpZ2l0cyBpbiBsb3ctdG8taGlnaAorLSAgIG9yZGVyLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUwgY2hhcmFjdGVyIC0gaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2UKKy0gICBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KKy1zdGF0aWMgY2hhciAqCistY29udmVydF90b19kZWNpbWFsIChtcG5fdCBhLCBzaXplX3QgZXh0cmFfemVyb2VzKQorLXsKKy0gIG1wX2xpbWJfdCAqYV9wdHIgPSBhLmxpbWJzOworLSAgc2l6ZV90IGFfbGVuID0gYS5ubGltYnM7CistICAvKiAwLjAzMzQ1IGlzIHNsaWdodGx5IGxhcmdlciB0aGFuIGxvZygyKS8oOSpsb2coMTApKS4gICovCistICBzaXplX3QgY19sZW4gPSA5ICogKChzaXplX3QpKGFfbGVuICogKEdNUF9MSU1CX0JJVFMgKiAwLjAzMzQ1ZikpICsgMSk7CistICBjaGFyICpjX3B0ciA9IChjaGFyICopIG1hbGxvYyAoeHN1bSAoY19sZW4sIGV4dHJhX3plcm9lcykpOworLSAgaWYgKGNfcHRyICE9IE5VTEwpCistICAgIHsKKy0gICAgICBjaGFyICpkX3B0ciA9IGNfcHRyOworLSAgICAgIGZvciAoOyBleHRyYV96ZXJvZXMgPiAwOyBleHRyYV96ZXJvZXMtLSkKKy0JKmRfcHRyKysgPSAnMCc7CistICAgICAgd2hpbGUgKGFfbGVuID4gMCkKKy0JeworLQkgIC8qIERpdmlkZSBhIGJ5IDEwXjksIGluLXBsYWNlLiAgKi8KKy0JICBtcF9saW1iX3QgcmVtYWluZGVyID0gMDsKKy0JICBtcF9saW1iX3QgKnB0ciA9IGFfcHRyICsgYV9sZW47CistCSAgc2l6ZV90IGNvdW50OworLQkgIGZvciAoY291bnQgPSBhX2xlbjsgY291bnQgPiAwOyBjb3VudC0tKQorLQkgICAgeworLQkgICAgICBtcF90d29saW1iX3QgbnVtID0KKy0JCSgobXBfdHdvbGltYl90KSByZW1haW5kZXIgPDwgR01QX0xJTUJfQklUUykgfCAqLS1wdHI7CistCSAgICAgICpwdHIgPSBudW0gLyAxMDAwMDAwMDAwOworLQkgICAgICByZW1haW5kZXIgPSBudW0gJSAxMDAwMDAwMDAwOworLQkgICAgfQorLQkgIC8qIFN0b3JlIHRoZSByZW1haW5kZXIgYXMgOSBkZWNpbWFsIGRpZ2l0cy4gICovCistCSAgZm9yIChjb3VudCA9IDk7IGNvdW50ID4gMDsgY291bnQtLSkKKy0JICAgIHsKKy0JICAgICAgKmRfcHRyKysgPSAnMCcgKyAocmVtYWluZGVyICUgMTApOworLQkgICAgICByZW1haW5kZXIgPSByZW1haW5kZXIgLyAxMDsKKy0JICAgIH0KKy0JICAvKiBOb3JtYWxpemUgYS4gICovCistCSAgaWYgKGFfcHRyW2FfbGVuIC0gMV0gPT0gMCkKKy0JICAgIGFfbGVuLS07CistCX0KKy0gICAgICAvKiBSZW1vdmUgbGVhZGluZyB6ZXJvZXMuICAqLworLSAgICAgIHdoaWxlIChkX3B0ciA+IGNfcHRyICYmIGRfcHRyWy0xXSA9PSAnMCcpCistCWRfcHRyLS07CistICAgICAgLyogQnV0IGtlZXAgYXQgbGVhc3Qgb25lIHplcm8uICAqLworLSAgICAgIGlmIChkX3B0ciA9PSBjX3B0cikKKy0JKmRfcHRyKysgPSAnMCc7CistICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcuICAqLworLSAgICAgICpkX3B0ciA9ICdcMCc7CistICAgIH0KKy0gIHJldHVybiBjX3B0cjsKKy19CistCistIyBpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorLQorLS8qIEFzc3VtaW5nIHggaXMgZmluaXRlIGFuZCA+PSAwOgorLSAgIHdyaXRlIHggYXMgeCA9IDJeZSAqIG0sIHdoZXJlIG0gaXMgYSBiaWdudW0uCistICAgUmV0dXJuIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGluIGNhc2Ugb2Ygc3VjY2VzcywgTlVMTCBpbiBjYXNlIG9mIG1lbW9yeQorLSAgIGFsbG9jYXRpb24gZmFpbHVyZS4gICovCistc3RhdGljIHZvaWQgKgorLWRlY29kZV9sb25nX2RvdWJsZSAobG9uZyBkb3VibGUgeCwgaW50ICplcCwgbXBuX3QgKm1wKQorLXsKKy0gIG1wbl90IG07CistICBpbnQgZXhwOworLSAgbG9uZyBkb3VibGUgeTsKKy0gIHNpemVfdCBpOworLQorLSAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciByZXN1bHQuICAqLworLSAgbS5ubGltYnMgPSAoTERCTF9NQU5UX0JJVCArIEdNUF9MSU1CX0JJVFMgLSAxKSAvIEdNUF9MSU1CX0JJVFM7CistICBtLmxpbWJzID0gKG1wX2xpbWJfdCAqKSBtYWxsb2MgKG0ubmxpbWJzICogc2l6ZW9mIChtcF9saW1iX3QpKTsKKy0gIGlmIChtLmxpbWJzID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLSAgLyogU3BsaXQgaW50byBleHBvbmVudGlhbCBwYXJ0IGFuZCBtYW50aXNzYS4gICovCistICB5ID0gZnJleHBsICh4LCAmZXhwKTsKKy0gIGlmICghKHkgPj0gMC4wTCAmJiB5IDwgMS4wTCkpCistICAgIGFib3J0ICgpOworLSAgLyogeCA9IDJeZXhwICogeSA9IDJeKGV4cCAtIExEQkxfTUFOVF9CSVQpICogKHkgKiBMREJMX01BTlRfQklUKSwgYW5kIHRoZQorLSAgICAgbGF0dGVyIGlzIGFuIGludGVnZXIuICAqLworLSAgLyogQ29udmVydCB0aGUgbWFudGlzc2EgKHkgKiBMREJMX01BTlRfQklUKSB0byBhIHNlcXVlbmNlIG9mIGxpbWJzLgorLSAgICAgSSdtIG5vdCBzdXJlIHdoZXRoZXIgaXQncyBzYWZlIHRvIGNhc3QgYSAnbG9uZyBkb3VibGUnIHZhbHVlIGJldHdlZW4KKy0gICAgIDJeMzEgYW5kIDJeMzIgdG8gJ3Vuc2lnbmVkIGludCcsIHRoZXJlZm9yZSBwbGF5IHNhZmUgYW5kIGNhc3Qgb25seQorLSAgICAgJ2xvbmcgZG91YmxlJyB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyXjE2ICh0byAndW5zaWduZWQgaW50JyBvciAnaW50JywKKy0gICAgIGRvZXNuJ3QgbWF0dGVyKS4gICovCistIyAgaWYgKExEQkxfTUFOVF9CSVQgJSBHTVBfTElNQl9CSVRTKSAhPSAwCistIyAgIGlmIChMREJMX01BTlRfQklUICUgR01QX0xJTUJfQklUUykgPiBHTVBfTElNQl9CSVRTIC8gMgorLSAgICB7CistICAgICAgbXBfbGltYl90IGhpLCBsbzsKKy0gICAgICB5ICo9IChtcF9saW1iX3QpIDEgPDwgKExEQkxfTUFOVF9CSVQgJSAoR01QX0xJTUJfQklUUyAvIDIpKTsKKy0gICAgICBoaSA9IChpbnQpIHk7CistICAgICAgeSAtPSBoaTsKKy0gICAgICBpZiAoISh5ID49IDAuMEwgJiYgeSA8IDEuMEwpKQorLQlhYm9ydCAoKTsKKy0gICAgICB5ICo9IChtcF9saW1iX3QpIDEgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKTsKKy0gICAgICBsbyA9IChpbnQpIHk7CistICAgICAgeSAtPSBsbzsKKy0gICAgICBpZiAoISh5ID49IDAuMEwgJiYgeSA8IDEuMEwpKQorLQlhYm9ydCAoKTsKKy0gICAgICBtLmxpbWJzW0xEQkxfTUFOVF9CSVQgLyBHTVBfTElNQl9CSVRTXSA9IChoaSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSB8IGxvOworLSAgICB9CistIyAgIGVsc2UKKy0gICAgeworLSAgICAgIG1wX2xpbWJfdCBkOworLSAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoTERCTF9NQU5UX0JJVCAlIEdNUF9MSU1CX0JJVFMpOworLSAgICAgIGQgPSAoaW50KSB5OworLSAgICAgIHkgLT0gZDsKKy0gICAgICBpZiAoISh5ID49IDAuMEwgJiYgeSA8IDEuMEwpKQorLQlhYm9ydCAoKTsKKy0gICAgICBtLmxpbWJzW0xEQkxfTUFOVF9CSVQgLyBHTVBfTElNQl9CSVRTXSA9IGQ7CistICAgIH0KKy0jICAgZW5kaWYKKy0jICBlbmRpZgorLSAgZm9yIChpID0gTERCTF9NQU5UX0JJVCAvIEdNUF9MSU1CX0JJVFM7IGkgPiAwOyApCistICAgIHsKKy0gICAgICBtcF9saW1iX3QgaGksIGxvOworLSAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpOworLSAgICAgIGhpID0gKGludCkgeTsKKy0gICAgICB5IC09IGhpOworLSAgICAgIGlmICghKHkgPj0gMC4wTCAmJiB5IDwgMS4wTCkpCistCWFib3J0ICgpOworLSAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpOworLSAgICAgIGxvID0gKGludCkgeTsKKy0gICAgICB5IC09IGxvOworLSAgICAgIGlmICghKHkgPj0gMC4wTCAmJiB5IDwgMS4wTCkpCistCWFib3J0ICgpOworLSAgICAgIG0ubGltYnNbLS1pXSA9IChoaSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSB8IGxvOworLSAgICB9CistICBpZiAoISh5ID09IDAuMEwpKQorLSAgICBhYm9ydCAoKTsKKy0gIC8qIE5vcm1hbGlzZS4gICovCistICB3aGlsZSAobS5ubGltYnMgPiAwICYmIG0ubGltYnNbbS5ubGltYnMgLSAxXSA9PSAwKQorLSAgICBtLm5saW1icy0tOworLSAgKm1wID0gbTsKKy0gICplcCA9IGV4cCAtIExEQkxfTUFOVF9CSVQ7CistICByZXR1cm4gbS5saW1iczsKKy19CistCistIyBlbmRpZgorLQorLSMgaWYgTkVFRF9QUklOVEZfRE9VQkxFCistCistLyogQXNzdW1pbmcgeCBpcyBmaW5pdGUgYW5kID49IDA6CistICAgd3JpdGUgeCBhcyB4ID0gMl5lICogbSwgd2hlcmUgbSBpcyBhIGJpZ251bS4KKy0gICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2Ugb2YgbWVtb3J5CistICAgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KKy1zdGF0aWMgdm9pZCAqCistZGVjb2RlX2RvdWJsZSAoZG91YmxlIHgsIGludCAqZXAsIG1wbl90ICptcCkKKy17CistICBtcG5fdCBtOworLSAgaW50IGV4cDsKKy0gIGRvdWJsZSB5OworLSAgc2l6ZV90IGk7CistCistICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHJlc3VsdC4gICovCistICBtLm5saW1icyA9IChEQkxfTUFOVF9CSVQgKyBHTVBfTElNQl9CSVRTIC0gMSkgLyBHTVBfTElNQl9CSVRTOworLSAgbS5saW1icyA9IChtcF9saW1iX3QgKikgbWFsbG9jIChtLm5saW1icyAqIHNpemVvZiAobXBfbGltYl90KSk7CistICBpZiAobS5saW1icyA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0gIC8qIFNwbGl0IGludG8gZXhwb25lbnRpYWwgcGFydCBhbmQgbWFudGlzc2EuICAqLworLSAgeSA9IGZyZXhwICh4LCAmZXhwKTsKKy0gIGlmICghKHkgPj0gMC4wICYmIHkgPCAxLjApKQorLSAgICBhYm9ydCAoKTsKKy0gIC8qIHggPSAyXmV4cCAqIHkgPSAyXihleHAgLSBEQkxfTUFOVF9CSVQpICogKHkgKiBEQkxfTUFOVF9CSVQpLCBhbmQgdGhlCistICAgICBsYXR0ZXIgaXMgYW4gaW50ZWdlci4gICovCistICAvKiBDb252ZXJ0IHRoZSBtYW50aXNzYSAoeSAqIERCTF9NQU5UX0JJVCkgdG8gYSBzZXF1ZW5jZSBvZiBsaW1icy4KKy0gICAgIEknbSBub3Qgc3VyZSB3aGV0aGVyIGl0J3Mgc2FmZSB0byBjYXN0IGEgJ2RvdWJsZScgdmFsdWUgYmV0d2VlbgorLSAgICAgMl4zMSBhbmQgMl4zMiB0byAndW5zaWduZWQgaW50JywgdGhlcmVmb3JlIHBsYXkgc2FmZSBhbmQgY2FzdCBvbmx5CistICAgICAnZG91YmxlJyB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyXjE2ICh0byAndW5zaWduZWQgaW50JyBvciAnaW50JywKKy0gICAgIGRvZXNuJ3QgbWF0dGVyKS4gICovCistIyAgaWYgKERCTF9NQU5UX0JJVCAlIEdNUF9MSU1CX0JJVFMpICE9IDAKKy0jICAgaWYgKERCTF9NQU5UX0JJVCAlIEdNUF9MSU1CX0JJVFMpID4gR01QX0xJTUJfQklUUyAvIDIKKy0gICAgeworLSAgICAgIG1wX2xpbWJfdCBoaSwgbG87CistICAgICAgeSAqPSAobXBfbGltYl90KSAxIDw8IChEQkxfTUFOVF9CSVQgJSAoR01QX0xJTUJfQklUUyAvIDIpKTsKKy0gICAgICBoaSA9IChpbnQpIHk7CistICAgICAgeSAtPSBoaTsKKy0gICAgICBpZiAoISh5ID49IDAuMCAmJiB5IDwgMS4wKSkKKy0JYWJvcnQgKCk7CistICAgICAgeSAqPSAobXBfbGltYl90KSAxIDw8IChHTVBfTElNQl9CSVRTIC8gMik7CistICAgICAgbG8gPSAoaW50KSB5OworLSAgICAgIHkgLT0gbG87CistICAgICAgaWYgKCEoeSA+PSAwLjAgJiYgeSA8IDEuMCkpCistCWFib3J0ICgpOworLSAgICAgIG0ubGltYnNbREJMX01BTlRfQklUIC8gR01QX0xJTUJfQklUU10gPSAoaGkgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSkgfCBsbzsKKy0gICAgfQorLSMgICBlbHNlCistICAgIHsKKy0gICAgICBtcF9saW1iX3QgZDsKKy0gICAgICB5ICo9IChtcF9saW1iX3QpIDEgPDwgKERCTF9NQU5UX0JJVCAlIEdNUF9MSU1CX0JJVFMpOworLSAgICAgIGQgPSAoaW50KSB5OworLSAgICAgIHkgLT0gZDsKKy0gICAgICBpZiAoISh5ID49IDAuMCAmJiB5IDwgMS4wKSkKKy0JYWJvcnQgKCk7CistICAgICAgbS5saW1ic1tEQkxfTUFOVF9CSVQgLyBHTVBfTElNQl9CSVRTXSA9IGQ7CistICAgIH0KKy0jICAgZW5kaWYKKy0jICBlbmRpZgorLSAgZm9yIChpID0gREJMX01BTlRfQklUIC8gR01QX0xJTUJfQklUUzsgaSA+IDA7ICkKKy0gICAgeworLSAgICAgIG1wX2xpbWJfdCBoaSwgbG87CistICAgICAgeSAqPSAobXBfbGltYl90KSAxIDw8IChHTVBfTElNQl9CSVRTIC8gMik7CistICAgICAgaGkgPSAoaW50KSB5OworLSAgICAgIHkgLT0gaGk7CistICAgICAgaWYgKCEoeSA+PSAwLjAgJiYgeSA8IDEuMCkpCistCWFib3J0ICgpOworLSAgICAgIHkgKj0gKG1wX2xpbWJfdCkgMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpOworLSAgICAgIGxvID0gKGludCkgeTsKKy0gICAgICB5IC09IGxvOworLSAgICAgIGlmICghKHkgPj0gMC4wICYmIHkgPCAxLjApKQorLQlhYm9ydCAoKTsKKy0gICAgICBtLmxpbWJzWy0taV0gPSAoaGkgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSkgfCBsbzsKKy0gICAgfQorLSAgaWYgKCEoeSA9PSAwLjApKQorLSAgICBhYm9ydCAoKTsKKy0gIC8qIE5vcm1hbGlzZS4gICovCistICB3aGlsZSAobS5ubGltYnMgPiAwICYmIG0ubGltYnNbbS5ubGltYnMgLSAxXSA9PSAwKQorLSAgICBtLm5saW1icy0tOworLSAgKm1wID0gbTsKKy0gICplcCA9IGV4cCAtIERCTF9NQU5UX0JJVDsKKy0gIHJldHVybiBtLmxpbWJzOworLX0KKy0KKy0jIGVuZGlmCistCistLyogQXNzdW1pbmcgeCA9IDJeZSAqIG0gaXMgZmluaXRlIGFuZCA+PSAwLCBhbmQgbiBpcyBhbiBpbnRlZ2VyOgorLSAgIFJldHVybnMgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygcm91bmQgKHggKiAxMF5uKS4KKy0gICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgLSBjb250YWluaW5nIHRoZSBkZWNpbWFsIGRpZ2l0cyBpbiBsb3ctdG8taGlnaAorLSAgIG9yZGVyLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUwgY2hhcmFjdGVyIC0gaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2UKKy0gICBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KKy1zdGF0aWMgY2hhciAqCistc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2RlY29kZWQgKGludCBlLCBtcG5fdCBtLCB2b2lkICptZW1vcnksIGludCBuKQorLXsKKy0gIGludCBzOworLSAgc2l6ZV90IGV4dHJhX3plcm9lczsKKy0gIHVuc2lnbmVkIGludCBhYnNfbjsKKy0gIHVuc2lnbmVkIGludCBhYnNfczsKKy0gIG1wX2xpbWJfdCAqcG93NV9wdHI7CistICBzaXplX3QgcG93NV9sZW47CistICB1bnNpZ25lZCBpbnQgc19saW1iczsKKy0gIHVuc2lnbmVkIGludCBzX2JpdHM7CistICBtcG5fdCBwb3c1OworLSAgbXBuX3QgejsKKy0gIHZvaWQgKnpfbWVtb3J5OworLSAgY2hhciAqZGlnaXRzOworLQorLSAgaWYgKG1lbW9yeSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0gIC8qIHggPSAyXmUgKiBtLCBoZW5jZQorLSAgICAgeSA9IHJvdW5kICgyXmUgKiAxMF5uICogbSkgPSByb3VuZCAoMl4oZStuKSAqIDVebiAqIG0pCistICAgICAgID0gcm91bmQgKDJecyAqIDVebiAqIG0pLiAgKi8KKy0gIHMgPSBlICsgbjsKKy0gIGV4dHJhX3plcm9lcyA9IDA7CistICAvKiBGYWN0b3Igb3V0IGEgY29tbW9uIHBvd2VyIG9mIDEwIGlmIHBvc3NpYmxlLiAgKi8KKy0gIGlmIChzID4gMCAmJiBuID4gMCkKKy0gICAgeworLSAgICAgIGV4dHJhX3plcm9lcyA9IChzIDwgbiA/IHMgOiBuKTsKKy0gICAgICBzIC09IGV4dHJhX3plcm9lczsKKy0gICAgICBuIC09IGV4dHJhX3plcm9lczsKKy0gICAgfQorLSAgLyogSGVyZSB5ID0gcm91bmQgKDJecyAqIDVebiAqIG0pICogMTBeZXh0cmFfemVyb2VzLgorLSAgICAgQmVmb3JlIGNvbnZlcnRpbmcgdG8gZGVjaW1hbCwgd2UgbmVlZCB0byBjb21wdXRlCistICAgICB6ID0gcm91bmQgKDJecyAqIDVebiAqIG0pLiAgKi8KKy0gIC8qIENvbXB1dGUgNV58bnwsIHBvc3NpYmx5IHNoaWZ0ZWQgYnkgfHN8IGJpdHMgaWYgbiBhbmQgcyBoYXZlIHRoZSBzYW1lCistICAgICBzaWduLiAgMi4zMjIgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gbG9nKDUpL2xvZygyKS4gICovCistICBhYnNfbiA9IChuID49IDAgPyBuIDogLW4pOworLSAgYWJzX3MgPSAocyA+PSAwID8gcyA6IC1zKTsKKy0gIHBvdzVfcHRyID0gKG1wX2xpbWJfdCAqKSBtYWxsb2MgKCgoaW50KShhYnNfbiAqICgyLjMyMmYgLyBHTVBfTElNQl9CSVRTKSkgKyAxCistCQkJCSAgICArIGFic19zIC8gR01QX0xJTUJfQklUUyArIDEpCistCQkJCSAgICogc2l6ZW9mIChtcF9saW1iX3QpKTsKKy0gIGlmIChwb3c1X3B0ciA9PSBOVUxMKQorLSAgICB7CistICAgICAgZnJlZSAobWVtb3J5KTsKKy0gICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLSAgLyogSW5pdGlhbGl6ZSB3aXRoIDEuICAqLworLSAgcG93NV9wdHJbMF0gPSAxOworLSAgcG93NV9sZW4gPSAxOworLSAgLyogTXVsdGlwbHkgd2l0aCA1XnxufC4gICovCistICBpZiAoYWJzX24gPiAwKQorLSAgICB7CistICAgICAgc3RhdGljIG1wX2xpbWJfdCBjb25zdCBzbWFsbF9wb3c1WzEzICsgMV0gPQorLQl7CistCSAgMSwgNSwgMjUsIDEyNSwgNjI1LCAzMTI1LCAxNTYyNSwgNzgxMjUsIDM5MDYyNSwgMTk1MzEyNSwgOTc2NTYyNSwKKy0JICA0ODgyODEyNSwgMjQ0MTQwNjI1LCAxMjIwNzAzMTI1CistCX07CistICAgICAgdW5zaWduZWQgaW50IG4xMzsKKy0gICAgICBmb3IgKG4xMyA9IDA7IG4xMyA8PSBhYnNfbjsgbjEzICs9IDEzKQorLQl7CistCSAgbXBfbGltYl90IGRpZ2l0MSA9IHNtYWxsX3BvdzVbbjEzICsgMTMgPD0gYWJzX24gPyAxMyA6IGFic19uIC0gbjEzXTsKKy0JICBzaXplX3QgajsKKy0JICBtcF90d29saW1iX3QgY2FycnkgPSAwOworLQkgIGZvciAoaiA9IDA7IGogPCBwb3c1X2xlbjsgaisrKQorLQkgICAgeworLQkgICAgICBtcF9saW1iX3QgZGlnaXQyID0gcG93NV9wdHJbal07CistCSAgICAgIGNhcnJ5ICs9IChtcF90d29saW1iX3QpIGRpZ2l0MSAqIChtcF90d29saW1iX3QpIGRpZ2l0MjsKKy0JICAgICAgcG93NV9wdHJbal0gPSAobXBfbGltYl90KSBjYXJyeTsKKy0JICAgICAgY2FycnkgPSBjYXJyeSA+PiBHTVBfTElNQl9CSVRTOworLQkgICAgfQorLQkgIGlmIChjYXJyeSA+IDApCistCSAgICBwb3c1X3B0cltwb3c1X2xlbisrXSA9IChtcF9saW1iX3QpIGNhcnJ5OworLQl9CistICAgIH0KKy0gIHNfbGltYnMgPSBhYnNfcyAvIEdNUF9MSU1CX0JJVFM7CistICBzX2JpdHMgPSBhYnNfcyAlIEdNUF9MSU1CX0JJVFM7CistICBpZiAobiA+PSAwID8gcyA+PSAwIDogcyA8PSAwKQorLSAgICB7CistICAgICAgLyogTXVsdGlwbHkgd2l0aCAyXnxzfC4gICovCistICAgICAgaWYgKHNfYml0cyA+IDApCistCXsKKy0JICBtcF9saW1iX3QgKnB0ciA9IHBvdzVfcHRyOworLQkgIG1wX3R3b2xpbWJfdCBhY2N1ID0gMDsKKy0JICBzaXplX3QgY291bnQ7CistCSAgZm9yIChjb3VudCA9IHBvdzVfbGVuOyBjb3VudCA+IDA7IGNvdW50LS0pCistCSAgICB7CistCSAgICAgIGFjY3UgKz0gKG1wX3R3b2xpbWJfdCkgKnB0ciA8PCBzX2JpdHM7CistCSAgICAgICpwdHIrKyA9IChtcF9saW1iX3QpIGFjY3U7CistCSAgICAgIGFjY3UgPSBhY2N1ID4+IEdNUF9MSU1CX0JJVFM7CistCSAgICB9CistCSAgaWYgKGFjY3UgPiAwKQorLQkgICAgeworLQkgICAgICAqcHRyID0gKG1wX2xpbWJfdCkgYWNjdTsKKy0JICAgICAgcG93NV9sZW4rKzsKKy0JICAgIH0KKy0JfQorLSAgICAgIGlmIChzX2xpbWJzID4gMCkKKy0JeworLQkgIHNpemVfdCBjb3VudDsKKy0JICBmb3IgKGNvdW50ID0gcG93NV9sZW47IGNvdW50ID4gMDspCistCSAgICB7CistCSAgICAgIGNvdW50LS07CistCSAgICAgIHBvdzVfcHRyW3NfbGltYnMgKyBjb3VudF0gPSBwb3c1X3B0cltjb3VudF07CistCSAgICB9CistCSAgZm9yIChjb3VudCA9IHNfbGltYnM7IGNvdW50ID4gMDspCistCSAgICB7CistCSAgICAgIGNvdW50LS07CistCSAgICAgIHBvdzVfcHRyW2NvdW50XSA9IDA7CistCSAgICB9CistCSAgcG93NV9sZW4gKz0gc19saW1iczsKKy0JfQorLSAgICAgIHBvdzUubGltYnMgPSBwb3c1X3B0cjsKKy0gICAgICBwb3c1Lm5saW1icyA9IHBvdzVfbGVuOworLSAgICAgIGlmIChuID49IDApCistCXsKKy0JICAvKiBNdWx0aXBseSBtIHdpdGggcG93NS4gIE5vIGRpdmlzaW9uIG5lZWRlZC4gICovCistCSAgel9tZW1vcnkgPSBtdWx0aXBseSAobSwgcG93NSwgJnopOworLQl9CistICAgICAgZWxzZQorLQl7CistCSAgLyogRGl2aWRlIG0gYnkgcG93NSBhbmQgcm91bmQuICAqLworLQkgIHpfbWVtb3J5ID0gZGl2aWRlIChtLCBwb3c1LCAmeik7CistCX0KKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgcG93NS5saW1icyA9IHBvdzVfcHRyOworLSAgICAgIHBvdzUubmxpbWJzID0gcG93NV9sZW47CistICAgICAgaWYgKG4gPj0gMCkKKy0JeworLQkgIC8qIG4gPj0gMCwgcyA8IDAuCistCSAgICAgTXVsdGlwbHkgbSB3aXRoIHBvdzUsIHRoZW4gZGl2aWRlIGJ5IDJefHN8LiAgKi8KKy0JICBtcG5fdCBudW1lcmF0b3I7CistCSAgbXBuX3QgZGVub21pbmF0b3I7CistCSAgdm9pZCAqdG1wX21lbW9yeTsKKy0JICB0bXBfbWVtb3J5ID0gbXVsdGlwbHkgKG0sIHBvdzUsICZudW1lcmF0b3IpOworLQkgIGlmICh0bXBfbWVtb3J5ID09IE5VTEwpCistCSAgICB7CistCSAgICAgIGZyZWUgKHBvdzVfcHRyKTsKKy0JICAgICAgZnJlZSAobWVtb3J5KTsKKy0JICAgICAgcmV0dXJuIE5VTEw7CistCSAgICB9CistCSAgLyogQ29uc3RydWN0IDJefHN8LiAgKi8KKy0JICB7CistCSAgICBtcF9saW1iX3QgKnB0ciA9IHBvdzVfcHRyICsgcG93NV9sZW47CistCSAgICBzaXplX3QgaTsKKy0JICAgIGZvciAoaSA9IDA7IGkgPCBzX2xpbWJzOyBpKyspCistCSAgICAgIHB0cltpXSA9IDA7CistCSAgICBwdHJbc19saW1ic10gPSAobXBfbGltYl90KSAxIDw8IHNfYml0czsKKy0JICAgIGRlbm9taW5hdG9yLmxpbWJzID0gcHRyOworLQkgICAgZGVub21pbmF0b3IubmxpbWJzID0gc19saW1icyArIDE7CistCSAgfQorLQkgIHpfbWVtb3J5ID0gZGl2aWRlIChudW1lcmF0b3IsIGRlbm9taW5hdG9yLCAmeik7CistCSAgZnJlZSAodG1wX21lbW9yeSk7CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICAvKiBuIDwgMCwgcyA+IDAuCistCSAgICAgTXVsdGlwbHkgbSB3aXRoIDJecywgdGhlbiBkaXZpZGUgYnkgcG93NS4gICovCistCSAgbXBuX3QgbnVtZXJhdG9yOworLQkgIG1wX2xpbWJfdCAqbnVtX3B0cjsKKy0JICBudW1fcHRyID0gKG1wX2xpbWJfdCAqKSBtYWxsb2MgKChtLm5saW1icyArIHNfbGltYnMgKyAxKQorLQkJCQkJICAqIHNpemVvZiAobXBfbGltYl90KSk7CistCSAgaWYgKG51bV9wdHIgPT0gTlVMTCkKKy0JICAgIHsKKy0JICAgICAgZnJlZSAocG93NV9wdHIpOworLQkgICAgICBmcmVlIChtZW1vcnkpOworLQkgICAgICByZXR1cm4gTlVMTDsKKy0JICAgIH0KKy0JICB7CistCSAgICBtcF9saW1iX3QgKmRlc3RwdHIgPSBudW1fcHRyOworLQkgICAgeworLQkgICAgICBzaXplX3QgaTsKKy0JICAgICAgZm9yIChpID0gMDsgaSA8IHNfbGltYnM7IGkrKykKKy0JCSpkZXN0cHRyKysgPSAwOworLQkgICAgfQorLQkgICAgaWYgKHNfYml0cyA+IDApCistCSAgICAgIHsKKy0JCWNvbnN0IG1wX2xpbWJfdCAqc291cmNlcHRyID0gbS5saW1iczsKKy0JCW1wX3R3b2xpbWJfdCBhY2N1ID0gMDsKKy0JCXNpemVfdCBjb3VudDsKKy0JCWZvciAoY291bnQgPSBtLm5saW1iczsgY291bnQgPiAwOyBjb3VudC0tKQorLQkJICB7CistCQkgICAgYWNjdSArPSAobXBfdHdvbGltYl90KSAqc291cmNlcHRyKysgPDwgc19iaXRzOworLQkJICAgICpkZXN0cHRyKysgPSAobXBfbGltYl90KSBhY2N1OworLQkJICAgIGFjY3UgPSBhY2N1ID4+IEdNUF9MSU1CX0JJVFM7CistCQkgIH0KKy0JCWlmIChhY2N1ID4gMCkKKy0JCSAgKmRlc3RwdHIrKyA9IChtcF9saW1iX3QpIGFjY3U7CistCSAgICAgIH0KKy0JICAgIGVsc2UKKy0JICAgICAgeworLQkJY29uc3QgbXBfbGltYl90ICpzb3VyY2VwdHIgPSBtLmxpbWJzOworLQkJc2l6ZV90IGNvdW50OworLQkJZm9yIChjb3VudCA9IG0ubmxpbWJzOyBjb3VudCA+IDA7IGNvdW50LS0pCistCQkgICpkZXN0cHRyKysgPSAqc291cmNlcHRyKys7CistCSAgICAgIH0KKy0JICAgIG51bWVyYXRvci5saW1icyA9IG51bV9wdHI7CistCSAgICBudW1lcmF0b3IubmxpbWJzID0gZGVzdHB0ciAtIG51bV9wdHI7CistCSAgfQorLQkgIHpfbWVtb3J5ID0gZGl2aWRlIChudW1lcmF0b3IsIHBvdzUsICZ6KTsKKy0JICBmcmVlIChudW1fcHRyKTsKKy0JfQorLSAgICB9CistICBmcmVlIChwb3c1X3B0cik7CistICBmcmVlIChtZW1vcnkpOworLQorLSAgLyogSGVyZSB5ID0gcm91bmQgKHggKiAxMF5uKSA9IHogKiAxMF5leHRyYV96ZXJvZXMuICAqLworLQorLSAgaWYgKHpfbWVtb3J5ID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLSAgZGlnaXRzID0gY29udmVydF90b19kZWNpbWFsICh6LCBleHRyYV96ZXJvZXMpOworLSAgZnJlZSAoel9tZW1vcnkpOworLSAgcmV0dXJuIGRpZ2l0czsKKy19CistCistIyBpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorLQorLS8qIEFzc3VtaW5nIHggaXMgZmluaXRlIGFuZCA+PSAwLCBhbmQgbiBpcyBhbiBpbnRlZ2VyOgorLSAgIFJldHVybnMgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygcm91bmQgKHggKiAxMF5uKS4KKy0gICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgLSBjb250YWluaW5nIHRoZSBkZWNpbWFsIGRpZ2l0cyBpbiBsb3ctdG8taGlnaAorLSAgIG9yZGVyLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUwgY2hhcmFjdGVyIC0gaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2UKKy0gICBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KKy1zdGF0aWMgY2hhciAqCistc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2xvbmdfZG91YmxlIChsb25nIGRvdWJsZSB4LCBpbnQgbikKKy17CistICBpbnQgZTsKKy0gIG1wbl90IG07CistICB2b2lkICptZW1vcnkgPSBkZWNvZGVfbG9uZ19kb3VibGUgKHgsICZlLCAmbSk7CistICByZXR1cm4gc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2RlY29kZWQgKGUsIG0sIG1lbW9yeSwgbik7CistfQorLQorLSMgZW5kaWYKKy0KKy0jIGlmIE5FRURfUFJJTlRGX0RPVUJMRQorLQorLS8qIEFzc3VtaW5nIHggaXMgZmluaXRlIGFuZCA+PSAwLCBhbmQgbiBpcyBhbiBpbnRlZ2VyOgorLSAgIFJldHVybnMgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygcm91bmQgKHggKiAxMF5uKS4KKy0gICBSZXR1cm4gdGhlIGFsbG9jYXRlZCBtZW1vcnkgLSBjb250YWluaW5nIHRoZSBkZWNpbWFsIGRpZ2l0cyBpbiBsb3ctdG8taGlnaAorLSAgIG9yZGVyLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUwgY2hhcmFjdGVyIC0gaW4gY2FzZSBvZiBzdWNjZXNzLCBOVUxMIGluIGNhc2UKKy0gICBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiAgKi8KKy1zdGF0aWMgY2hhciAqCistc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2RvdWJsZSAoZG91YmxlIHgsIGludCBuKQorLXsKKy0gIGludCBlOworLSAgbXBuX3QgbTsKKy0gIHZvaWQgKm1lbW9yeSA9IGRlY29kZV9kb3VibGUgKHgsICZlLCAmbSk7CistICByZXR1cm4gc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2RlY29kZWQgKGUsIG0sIG1lbW9yeSwgbik7CistfQorLQorLSMgZW5kaWYKKy0KKy0jIGlmIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFCistCistLyogQXNzdW1pbmcgeCBpcyBmaW5pdGUgYW5kID4gMDoKKy0gICBSZXR1cm4gYW4gYXBwcm94aW1hdGlvbiBmb3IgbiB3aXRoIDEwXm4gPD0geCA8IDEwXihuKzEpLgorLSAgIFRoZSBhcHByb3hpbWF0aW9uIGlzIHVzdWFsbHkgdGhlIHJpZ2h0IG4sIGJ1dCBtYXkgYmUgb2ZmIGJ5IDEgc29tZXRpbWVzLiAgKi8KKy1zdGF0aWMgaW50CistZmxvb3Jsb2cxMGwgKGxvbmcgZG91YmxlIHgpCisteworLSAgaW50IGV4cDsKKy0gIGxvbmcgZG91YmxlIHk7CistICBkb3VibGUgejsKKy0gIGRvdWJsZSBsOworLQorLSAgLyogU3BsaXQgaW50byBleHBvbmVudGlhbCBwYXJ0IGFuZCBtYW50aXNzYS4gICovCistICB5ID0gZnJleHBsICh4LCAmZXhwKTsKKy0gIGlmICghKHkgPj0gMC4wTCAmJiB5IDwgMS4wTCkpCistICAgIGFib3J0ICgpOworLSAgaWYgKHkgPT0gMC4wTCkKKy0gICAgcmV0dXJuIElOVF9NSU47CistICBpZiAoeSA8IDAuNUwpCistICAgIHsKKy0gICAgICB3aGlsZSAoeSA8ICgxLjBMIC8gKDEgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSkgLyAoMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSkpCistCXsKKy0JICB5ICo9IDEuMEwgKiAoMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSAqICgxIDw8IChHTVBfTElNQl9CSVRTIC8gMikpOworLQkgIGV4cCAtPSBHTVBfTElNQl9CSVRTOworLQl9CistICAgICAgaWYgKHkgPCAoMS4wTCAvICgxIDw8IDE2KSkpCistCXsKKy0JICB5ICo9IDEuMEwgKiAoMSA8PCAxNik7CistCSAgZXhwIC09IDE2OworLQl9CistICAgICAgaWYgKHkgPCAoMS4wTCAvICgxIDw8IDgpKSkKKy0JeworLQkgIHkgKj0gMS4wTCAqICgxIDw8IDgpOworLQkgIGV4cCAtPSA4OworLQl9CistICAgICAgaWYgKHkgPCAoMS4wTCAvICgxIDw8IDQpKSkKKy0JeworLQkgIHkgKj0gMS4wTCAqICgxIDw8IDQpOworLQkgIGV4cCAtPSA0OworLQl9CistICAgICAgaWYgKHkgPCAoMS4wTCAvICgxIDw8IDIpKSkKKy0JeworLQkgIHkgKj0gMS4wTCAqICgxIDw8IDIpOworLQkgIGV4cCAtPSAyOworLQl9CistICAgICAgaWYgKHkgPCAoMS4wTCAvICgxIDw8IDEpKSkKKy0JeworLQkgIHkgKj0gMS4wTCAqICgxIDw8IDEpOworLQkgIGV4cCAtPSAxOworLQl9CistICAgIH0KKy0gIGlmICghKHkgPj0gMC41TCAmJiB5IDwgMS4wTCkpCistICAgIGFib3J0ICgpOworLSAgLyogQ29tcHV0ZSBhbiBhcHByb3hpbWF0aW9uIGZvciBsID0gbG9nMih4KSA9IGV4cCArIGxvZzIoeSkuICAqLworLSAgbCA9IGV4cDsKKy0gIHogPSB5OworLSAgaWYgKHogPCAwLjcwNzEwNjc4MTE4NjU0NzUyNDQ0KQorLSAgICB7CistICAgICAgeiAqPSAxLjQxNDIxMzU2MjM3MzA5NTA0ODg7CistICAgICAgbCAtPSAwLjU7CistICAgIH0KKy0gIGlmICh6IDwgMC44NDA4OTY0MTUyNTM3MTQ1NDMxKQorLSAgICB7CistICAgICAgeiAqPSAxLjE4OTIwNzExNTAwMjcyMTA2Njc7CistICAgICAgbCAtPSAwLjI1OworLSAgICB9CistICBpZiAoeiA8IDAuOTE3MDA0MDQzMjA0NjcxMjMxNzUpCistICAgIHsKKy0gICAgICB6ICo9IDEuMDkwNTA3NzMyNjY1MjU3NjU5MjsKKy0gICAgICBsIC09IDAuMTI1OworLSAgICB9CistICBpZiAoeiA8IDAuOTU3NjAzMjgwNjk4NTczNjQ2OSkKKy0gICAgeworLSAgICAgIHogKj0gMS4wNDQyNzM3ODI0Mjc0MTM4NDAzOworLSAgICAgIGwgLT0gMC4wNjI1OworLSAgICB9CistICAvKiBOb3cgMC45NSA8PSB6IDw9IDEuMDEuICAqLworLSAgeiA9IDEgLSB6OworLSAgLyogbG9nKDEteikgPSAtIHogLSB6XjIvMiAtIHpeMy8zIC0gel40LzQgLSAuLi4KKy0gICAgIEZvdXIgdGVybXMgYXJlIGVub3VnaCB0byBnZXQgYW4gYXBwcm94aW1hdGlvbiB3aXRoIGVycm9yIDwgMTBeLTcuICAqLworLSAgbCAtPSB6ICogKDEuMCArIHogKiAoMC41ICsgeiAqICgoMS4wIC8gMykgKyB6ICogMC4yNSkpKTsKKy0gIC8qIEZpbmFsbHkgbXVsdGlwbHkgd2l0aCBsb2coMikvbG9nKDEwKSwgeWllbGRzIGFuIGFwcHJveGltYXRpb24gZm9yCistICAgICBsb2cxMCh4KS4gICovCistICBsICo9IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjM7CistICAvKiBSb3VuZCBkb3duIHRvIHRoZSBuZXh0IGludGVnZXIuICAqLworLSAgcmV0dXJuIChpbnQpIGwgKyAobCA8IDAgPyAtMSA6IDApOworLX0KKy0KKy0jIGVuZGlmCistCistIyBpZiBORUVEX1BSSU5URl9ET1VCTEUKKy0KKy0vKiBBc3N1bWluZyB4IGlzIGZpbml0ZSBhbmQgPiAwOgorLSAgIFJldHVybiBhbiBhcHByb3hpbWF0aW9uIGZvciBuIHdpdGggMTBebiA8PSB4IDwgMTBeKG4rMSkuCistICAgVGhlIGFwcHJveGltYXRpb24gaXMgdXN1YWxseSB0aGUgcmlnaHQgbiwgYnV0IG1heSBiZSBvZmYgYnkgMSBzb21ldGltZXMuICAqLworLXN0YXRpYyBpbnQKKy1mbG9vcmxvZzEwIChkb3VibGUgeCkKKy17CistICBpbnQgZXhwOworLSAgZG91YmxlIHk7CistICBkb3VibGUgejsKKy0gIGRvdWJsZSBsOworLQorLSAgLyogU3BsaXQgaW50byBleHBvbmVudGlhbCBwYXJ0IGFuZCBtYW50aXNzYS4gICovCistICB5ID0gZnJleHAgKHgsICZleHApOworLSAgaWYgKCEoeSA+PSAwLjAgJiYgeSA8IDEuMCkpCistICAgIGFib3J0ICgpOworLSAgaWYgKHkgPT0gMC4wKQorLSAgICByZXR1cm4gSU5UX01JTjsKKy0gIGlmICh5IDwgMC41KQorLSAgICB7CistICAgICAgd2hpbGUgKHkgPCAoMS4wIC8gKDEgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSkgLyAoMSA8PCAoR01QX0xJTUJfQklUUyAvIDIpKSkpCistCXsKKy0JICB5ICo9IDEuMCAqICgxIDw8IChHTVBfTElNQl9CSVRTIC8gMikpICogKDEgPDwgKEdNUF9MSU1CX0JJVFMgLyAyKSk7CistCSAgZXhwIC09IEdNUF9MSU1CX0JJVFM7CistCX0KKy0gICAgICBpZiAoeSA8ICgxLjAgLyAoMSA8PCAxNikpKQorLQl7CistCSAgeSAqPSAxLjAgKiAoMSA8PCAxNik7CistCSAgZXhwIC09IDE2OworLQl9CistICAgICAgaWYgKHkgPCAoMS4wIC8gKDEgPDwgOCkpKQorLQl7CistCSAgeSAqPSAxLjAgKiAoMSA8PCA4KTsKKy0JICBleHAgLT0gODsKKy0JfQorLSAgICAgIGlmICh5IDwgKDEuMCAvICgxIDw8IDQpKSkKKy0JeworLQkgIHkgKj0gMS4wICogKDEgPDwgNCk7CistCSAgZXhwIC09IDQ7CistCX0KKy0gICAgICBpZiAoeSA8ICgxLjAgLyAoMSA8PCAyKSkpCistCXsKKy0JICB5ICo9IDEuMCAqICgxIDw8IDIpOworLQkgIGV4cCAtPSAyOworLQl9CistICAgICAgaWYgKHkgPCAoMS4wIC8gKDEgPDwgMSkpKQorLQl7CistCSAgeSAqPSAxLjAgKiAoMSA8PCAxKTsKKy0JICBleHAgLT0gMTsKKy0JfQorLSAgICB9CistICBpZiAoISh5ID49IDAuNSAmJiB5IDwgMS4wKSkKKy0gICAgYWJvcnQgKCk7CistICAvKiBDb21wdXRlIGFuIGFwcHJveGltYXRpb24gZm9yIGwgPSBsb2cyKHgpID0gZXhwICsgbG9nMih5KS4gICovCistICBsID0gZXhwOworLSAgeiA9IHk7CistICBpZiAoeiA8IDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDQpCistICAgIHsKKy0gICAgICB6ICo9IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODsKKy0gICAgICBsIC09IDAuNTsKKy0gICAgfQorLSAgaWYgKHogPCAwLjg0MDg5NjQxNTI1MzcxNDU0MzEpCistICAgIHsKKy0gICAgICB6ICo9IDEuMTg5MjA3MTE1MDAyNzIxMDY2NzsKKy0gICAgICBsIC09IDAuMjU7CistICAgIH0KKy0gIGlmICh6IDwgMC45MTcwMDQwNDMyMDQ2NzEyMzE3NSkKKy0gICAgeworLSAgICAgIHogKj0gMS4wOTA1MDc3MzI2NjUyNTc2NTkyOworLSAgICAgIGwgLT0gMC4xMjU7CistICAgIH0KKy0gIGlmICh6IDwgMC45NTc2MDMyODA2OTg1NzM2NDY5KQorLSAgICB7CistICAgICAgeiAqPSAxLjA0NDI3Mzc4MjQyNzQxMzg0MDM7CistICAgICAgbCAtPSAwLjA2MjU7CistICAgIH0KKy0gIC8qIE5vdyAwLjk1IDw9IHogPD0gMS4wMS4gICovCistICB6ID0gMSAtIHo7CistICAvKiBsb2coMS16KSA9IC0geiAtIHpeMi8yIC0gel4zLzMgLSB6XjQvNCAtIC4uLgorLSAgICAgRm91ciB0ZXJtcyBhcmUgZW5vdWdoIHRvIGdldCBhbiBhcHByb3hpbWF0aW9uIHdpdGggZXJyb3IgPCAxMF4tNy4gICovCistICBsIC09IHogKiAoMS4wICsgeiAqICgwLjUgKyB6ICogKCgxLjAgLyAzKSArIHogKiAwLjI1KSkpOworLSAgLyogRmluYWxseSBtdWx0aXBseSB3aXRoIGxvZygyKS9sb2coMTApLCB5aWVsZHMgYW4gYXBwcm94aW1hdGlvbiBmb3IKKy0gICAgIGxvZzEwKHgpLiAgKi8KKy0gIGwgKj0gMC4zMDEwMjk5OTU2NjM5ODExOTUyMzsKKy0gIC8qIFJvdW5kIGRvd24gdG8gdGhlIG5leHQgaW50ZWdlci4gICovCistICByZXR1cm4gKGludCkgbCArIChsIDwgMCA/IC0xIDogMCk7CistfQorLQorLSMgZW5kaWYKKy0KKy0jZW5kaWYKKy0KKy1EQ0hBUl9UICoKKy1WQVNOUFJJTlRGIChEQ0hBUl9UICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwKKy0JICAgIGNvbnN0IEZDSEFSX1QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorLXsKKy0gIERJUkVDVElWRVMgZDsKKy0gIGFyZ3VtZW50cyBhOworLQorLSAgaWYgKFBSSU5URl9QQVJTRSAoZm9ybWF0LCAmZCwgJmEpIDwgMCkKKy0gICAgLyogZXJybm8gaXMgYWxyZWFkeSBzZXQuICAqLworLSAgICByZXR1cm4gTlVMTDsKKy0KKy0jZGVmaW5lIENMRUFOVVAoKSBcCistICBmcmVlIChkLmRpcik7CQkJCQkJCQlcCistICBpZiAoYS5hcmcpCQkJCQkJCQlcCistICAgIGZyZWUgKGEuYXJnKTsKKy0KKy0gIGlmIChQUklOVEZfRkVUQ0hBUkdTIChhcmdzLCAmYSkgPCAwKQorLSAgICB7CistICAgICAgQ0xFQU5VUCAoKTsKKy0gICAgICBlcnJubyA9IEVJTlZBTDsKKy0gICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLQorLSAgeworLSAgICBzaXplX3QgYnVmX25lZWRlZGxlbmd0aDsKKy0gICAgVENIQVJfVCAqYnVmOworLSAgICBUQ0hBUl9UICpidWZfbWFsbG9jZWQ7CistICAgIGNvbnN0IEZDSEFSX1QgKmNwOworLSAgICBzaXplX3QgaTsKKy0gICAgRElSRUNUSVZFICpkcDsKKy0gICAgLyogT3V0cHV0IHN0cmluZyBhY2N1bXVsYXRvci4gICovCistICAgIERDSEFSX1QgKnJlc3VsdDsKKy0gICAgc2l6ZV90IGFsbG9jYXRlZDsKKy0gICAgc2l6ZV90IGxlbmd0aDsKKy0KKy0gICAgLyogQWxsb2NhdGUgYSBzbWFsbCBidWZmZXIgdGhhdCB3aWxsIGhvbGQgYSBkaXJlY3RpdmUgcGFzc2VkIHRvCistICAgICAgIHNwcmludGYgb3Igc25wcmludGYuICAqLworLSAgICBidWZfbmVlZGVkbGVuZ3RoID0KKy0gICAgICB4c3VtNCAoNywgZC5tYXhfd2lkdGhfbGVuZ3RoLCBkLm1heF9wcmVjaXNpb25fbGVuZ3RoLCA2KTsKKy0jaWYgSEFWRV9BTExPQ0EKKy0gICAgaWYgKGJ1Zl9uZWVkZWRsZW5ndGggPCA0MDAwIC8gc2l6ZW9mIChUQ0hBUl9UKSkKKy0gICAgICB7CistCWJ1ZiA9IChUQ0hBUl9UICopIGFsbG9jYSAoYnVmX25lZWRlZGxlbmd0aCAqIHNpemVvZiAoVENIQVJfVCkpOworLQlidWZfbWFsbG9jZWQgPSBOVUxMOworLSAgICAgIH0KKy0gICAgZWxzZQorLSNlbmRpZgorLSAgICAgIHsKKy0Jc2l6ZV90IGJ1Zl9tZW1zaXplID0geHRpbWVzIChidWZfbmVlZGVkbGVuZ3RoLCBzaXplb2YgKFRDSEFSX1QpKTsKKy0JaWYgKHNpemVfb3ZlcmZsb3dfcCAoYnVmX21lbXNpemUpKQorLQkgIGdvdG8gb3V0X29mX21lbW9yeV8xOworLQlidWYgPSAoVENIQVJfVCAqKSBtYWxsb2MgKGJ1Zl9tZW1zaXplKTsKKy0JaWYgKGJ1ZiA9PSBOVUxMKQorLQkgIGdvdG8gb3V0X29mX21lbW9yeV8xOworLQlidWZfbWFsbG9jZWQgPSBidWY7CistICAgICAgfQorLQorLSAgICBpZiAocmVzdWx0YnVmICE9IE5VTEwpCistICAgICAgeworLQlyZXN1bHQgPSByZXN1bHRidWY7CistCWFsbG9jYXRlZCA9ICpsZW5ndGhwOworLSAgICAgIH0KKy0gICAgZWxzZQorLSAgICAgIHsKKy0JcmVzdWx0ID0gTlVMTDsKKy0JYWxsb2NhdGVkID0gMDsKKy0gICAgICB9CistICAgIGxlbmd0aCA9IDA7CistICAgIC8qIEludmFyaWFudHM6CistICAgICAgIHJlc3VsdCBpcyBlaXRoZXIgPT0gcmVzdWx0YnVmIG9yID09IE5VTEwgb3IgbWFsbG9jLWFsbG9jYXRlZC4KKy0gICAgICAgSWYgbGVuZ3RoID4gMCwgdGhlbiByZXN1bHQgIT0gTlVMTC4gICovCistCistICAgIC8qIEVuc3VyZXMgdGhhdCBhbGxvY2F0ZWQgPj0gbmVlZGVkLiAgQWJvcnRzIHRocm91Z2ggYSBqdW1wIHRvCistICAgICAgIG91dF9vZl9tZW1vcnkgaWYgbmVlZGVkIGlzIFNJWkVfTUFYIG9yIG90aGVyd2lzZSB0b28gYmlnLiAgKi8KKy0jZGVmaW5lIEVOU1VSRV9BTExPQ0FUSU9OKG5lZWRlZCkgXAorLSAgICBpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkJICAgICBcCistICAgICAgewkJCQkJCQkJCSAgICAgXAorLQlzaXplX3QgbWVtb3J5X3NpemU7CQkJCQkJICAgICBcCistCURDSEFSX1QgKm1lbW9yeTsJCQkJCQkgICAgIFwKKy0JCQkJCQkJCQkgICAgIFwKKy0JYWxsb2NhdGVkID0gKGFsbG9jYXRlZCA+IDAgPyB4dGltZXMgKGFsbG9jYXRlZCwgMikgOiAxMik7CSAgICAgXAorLQlpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkgICAgIFwKKy0JICBhbGxvY2F0ZWQgPSAobmVlZGVkKTsJCQkJCQkgICAgIFwKKy0JbWVtb3J5X3NpemUgPSB4dGltZXMgKGFsbG9jYXRlZCwgc2l6ZW9mIChEQ0hBUl9UKSk7CQkgICAgIFwKKy0JaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQkJCQkgICAgIFwKKy0JICBnb3RvIG91dF9vZl9tZW1vcnk7CQkJCQkJICAgICBcCistCWlmIChyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKQkJCSAgICAgXAorLQkgIG1lbW9yeSA9IChEQ0hBUl9UICopIG1hbGxvYyAobWVtb3J5X3NpemUpOwkJCSAgICAgXAorLQllbHNlCQkJCQkJCQkgICAgIFwKKy0JICBtZW1vcnkgPSAoRENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIG1lbW9yeV9zaXplKTsJCSAgICAgXAorLQlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJICAgICBcCistCSAgZ290byBvdXRfb2ZfbWVtb3J5OwkJCQkJCSAgICAgXAorLQlpZiAocmVzdWx0ID09IHJlc3VsdGJ1ZiAmJiBsZW5ndGggPiAwKQkJCQkgICAgIFwKKy0JICBEQ0hBUl9DUFkgKG1lbW9yeSwgcmVzdWx0LCBsZW5ndGgpOwkJCQkgICAgIFwKKy0JcmVzdWx0ID0gbWVtb3J5OwkJCQkJCSAgICAgXAorLSAgICAgIH0KKy0KKy0gICAgZm9yIChjcCA9IGZvcm1hdCwgaSA9IDAsIGRwID0gJmQuZGlyWzBdOyA7IGNwID0gZHAtPmRpcl9lbmQsIGkrKywgZHArKykKKy0gICAgICB7CistCWlmIChjcCAhPSBkcC0+ZGlyX3N0YXJ0KQorLQkgIHsKKy0JICAgIHNpemVfdCBuID0gZHAtPmRpcl9zdGFydCAtIGNwOworLQkgICAgc2l6ZV90IGF1Z21lbnRlZF9sZW5ndGggPSB4c3VtIChsZW5ndGgsIG4pOworLQorLQkgICAgRU5TVVJFX0FMTE9DQVRJT04gKGF1Z21lbnRlZF9sZW5ndGgpOworLQkgICAgLyogVGhpcyBjb3BpZXMgYSBwaWVjZSBvZiBGQ0hBUl9UW10gaW50byBhIERDSEFSX1RbXS4gIEhlcmUgd2UKKy0JICAgICAgIG5lZWQgdGhhdCB0aGUgZm9ybWF0IHN0cmluZyBjb250YWlucyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMKKy0JICAgICAgIGlmIEZDSEFSX1QgYW5kIERDSEFSX1QgYXJlIG5vdCB0aGUgc2FtZSB0eXBlLiAgKi8KKy0JICAgIGlmIChzaXplb2YgKEZDSEFSX1QpID09IHNpemVvZiAoRENIQVJfVCkpCistCSAgICAgIHsKKy0JCURDSEFSX0NQWSAocmVzdWx0ICsgbGVuZ3RoLCAoY29uc3QgRENIQVJfVCAqKSBjcCwgbik7CistCQlsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworLQkgICAgICB9CistCSAgICBlbHNlCistCSAgICAgIHsKKy0JCWRvCistCQkgIHJlc3VsdFtsZW5ndGgrK10gPSAodW5zaWduZWQgY2hhcikgKmNwKys7CistCQl3aGlsZSAoLS1uID4gMCk7CistCSAgICAgIH0KKy0JICB9CistCWlmIChpID09IGQuY291bnQpCistCSAgYnJlYWs7CistCistCS8qIEV4ZWN1dGUgYSBzaW5nbGUgZGlyZWN0aXZlLiAgKi8KKy0JaWYgKGRwLT5jb252ZXJzaW9uID09ICclJykKKy0JICB7CistCSAgICBzaXplX3QgYXVnbWVudGVkX2xlbmd0aDsKKy0KKy0JICAgIGlmICghKGRwLT5hcmdfaW5kZXggPT0gQVJHX05PTkUpKQorLQkgICAgICBhYm9ydCAoKTsKKy0JICAgIGF1Z21lbnRlZF9sZW5ndGggPSB4c3VtIChsZW5ndGgsIDEpOworLQkgICAgRU5TVVJFX0FMTE9DQVRJT04gKGF1Z21lbnRlZF9sZW5ndGgpOworLQkgICAgcmVzdWx0W2xlbmd0aF0gPSAnJSc7CistCSAgICBsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworLQkgIH0KKy0JZWxzZQorLQkgIHsKKy0JICAgIGlmICghKGRwLT5hcmdfaW5kZXggIT0gQVJHX05PTkUpKQorLQkgICAgICBhYm9ydCAoKTsKKy0KKy0JICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnbicpCistCSAgICAgIHsKKy0JCXN3aXRjaCAoYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZSkKKy0JCSAgeworLQkJICBjYXNlIFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjoKKy0JCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X3NjaGFyX3BvaW50ZXIgPSBsZW5ndGg7CistCQkgICAgYnJlYWs7CistCQkgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgorLQkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfc2hvcnRfcG9pbnRlciA9IGxlbmd0aDsKKy0JCSAgICBicmVhazsKKy0JCSAgY2FzZSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOgorLQkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfaW50X3BvaW50ZXIgPSBsZW5ndGg7CistCQkgICAgYnJlYWs7CistCQkgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6CistCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9sb25naW50X3BvaW50ZXIgPSBsZW5ndGg7CistCQkgICAgYnJlYWs7CistI2lmIEhBVkVfTE9OR19MT05HX0lOVAorLQkJICBjYXNlIFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUjoKKy0JCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXIgPSBsZW5ndGg7CistCQkgICAgYnJlYWs7CistI2VuZGlmCistCQkgIGRlZmF1bHQ6CistCQkgICAgYWJvcnQgKCk7CistCQkgIH0KKy0JICAgICAgfQorLSNpZiBFTkFCTEVfVU5JU1RESU8KKy0JICAgIC8qIFRoZSB1bmlzdGRpbyBleHRlbnNpb25zLiAgKi8KKy0JICAgIGVsc2UgaWYgKGRwLT5jb252ZXJzaW9uID09ICdVJykKKy0JICAgICAgeworLQkJYXJnX3R5cGUgdHlwZSA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGU7CistCQlpbnQgZmxhZ3MgPSBkcC0+ZmxhZ3M7CistCQlpbnQgaGFzX3dpZHRoOworLQkJc2l6ZV90IHdpZHRoOworLQkJaW50IGhhc19wcmVjaXNpb247CistCQlzaXplX3QgcHJlY2lzaW9uOworLQorLQkJaGFzX3dpZHRoID0gMDsKKy0JCXdpZHRoID0gMDsKKy0JCWlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKy0JCSAgeworLQkJICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorLQkJICAgICAgeworLQkJCWludCBhcmc7CistCistCQkJaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCistCQkJICBhYm9ydCAoKTsKKy0JCQlhcmcgPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworLQkJCWlmIChhcmcgPCAwKQorLQkJCSAgeworLQkJCSAgICAvKiAiQSBuZWdhdGl2ZSBmaWVsZCB3aWR0aCBpcyB0YWtlbiBhcyBhICctJyBmbGFnCistCQkJICAgICAgICBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLiIgICovCistCQkJICAgIGZsYWdzIHw9IEZMQUdfTEVGVDsKKy0JCQkgICAgd2lkdGggPSAodW5zaWduZWQgaW50KSAoLWFyZyk7CistCQkJICB9CistCQkJZWxzZQorLQkJCSAgd2lkdGggPSBhcmc7CistCQkgICAgICB9CistCQkgICAgZWxzZQorLQkJICAgICAgeworLQkJCWNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKKy0KKy0JCQlkbworLQkJCSAgd2lkdGggPSB4c3VtICh4dGltZXMgKHdpZHRoLCAxMCksICpkaWdpdHArKyAtICcwJyk7CistCQkJd2hpbGUgKGRpZ2l0cCAhPSBkcC0+d2lkdGhfZW5kKTsKKy0JCSAgICAgIH0KKy0JCSAgICBoYXNfd2lkdGggPSAxOworLQkJICB9CistCistCQloYXNfcHJlY2lzaW9uID0gMDsKKy0JCXByZWNpc2lvbiA9IDA7CistCQlpZiAoZHAtPnByZWNpc2lvbl9zdGFydCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKKy0JCSAgeworLQkJICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKy0JCSAgICAgIHsKKy0JCQlpbnQgYXJnOworLQorLQkJCWlmICghKGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKKy0JCQkgIGFib3J0ICgpOworLQkJCWFyZyA9IGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS5hLmFfaW50OworLQkJCS8qICJBIG5lZ2F0aXZlIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBpZiB0aGUgcHJlY2lzaW9uCistCQkJICAgIHdlcmUgb21pdHRlZC4iICAqLworLQkJCWlmIChhcmcgPj0gMCkKKy0JCQkgIHsKKy0JCQkgICAgcHJlY2lzaW9uID0gYXJnOworLQkJCSAgICBoYXNfcHJlY2lzaW9uID0gMTsKKy0JCQkgIH0KKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlCistCQkgICAgICB7CistCQkJY29uc3QgRkNIQVJfVCAqZGlnaXRwID0gZHAtPnByZWNpc2lvbl9zdGFydCArIDE7CistCistCQkJcHJlY2lzaW9uID0gMDsKKy0JCQl3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKQorLQkJCSAgcHJlY2lzaW9uID0geHN1bSAoeHRpbWVzIChwcmVjaXNpb24sIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKy0JCQloYXNfcHJlY2lzaW9uID0gMTsKKy0JCSAgICAgIH0KKy0JCSAgfQorLQorLQkJc3dpdGNoICh0eXBlKQorLQkJICB7CistCQkgIGNhc2UgVFlQRV9VOF9TVFJJTkc6CistCQkgICAgeworLQkJICAgICAgY29uc3QgdWludDhfdCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3U4X3N0cmluZzsKKy0JCSAgICAgIGNvbnN0IHVpbnQ4X3QgKmFyZ19lbmQ7CistCQkgICAgICBzaXplX3QgY2hhcmFjdGVyczsKKy0KKy0JCSAgICAgIGlmIChoYXNfcHJlY2lzaW9uKQorLQkJCXsKKy0JCQkgIC8qIFVzZSBvbmx5IFBSRUNJU0lPTiBjaGFyYWN0ZXJzLCBmcm9tIHRoZSBsZWZ0LiAgKi8KKy0JCQkgIGFyZ19lbmQgPSBhcmc7CistCQkJICBjaGFyYWN0ZXJzID0gMDsKKy0JCQkgIGZvciAoOyBwcmVjaXNpb24gPiAwOyBwcmVjaXNpb24tLSkKKy0JCQkgICAgeworLQkJCSAgICAgIGludCBjb3VudCA9IHU4X3N0cm1ibGVuIChhcmdfZW5kKTsKKy0JCQkgICAgICBpZiAoY291bnQgPT0gMCkKKy0JCQkJYnJlYWs7CistCQkJICAgICAgaWYgKGNvdW50IDwgMCkKKy0JCQkJeworLQkJCQkgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorLQkJCQkgICAgZnJlZSAocmVzdWx0KTsKKy0JCQkJICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCistCQkJCSAgICBmcmVlIChidWZfbWFsbG9jZWQpOworLQkJCQkgIENMRUFOVVAgKCk7CistCQkJCSAgZXJybm8gPSBFSUxTRVE7CistCQkJCSAgcmV0dXJuIE5VTEw7CistCQkJCX0KKy0JCQkgICAgICBhcmdfZW5kICs9IGNvdW50OworLQkJCSAgICAgIGNoYXJhY3RlcnMrKzsKKy0JCQkgICAgfQorLQkJCX0KKy0JCSAgICAgIGVsc2UgaWYgKGhhc193aWR0aCkKKy0JCQl7CistCQkJICAvKiBVc2UgdGhlIGVudGlyZSBzdHJpbmcsIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mCistCQkJICAgICBjaGFyYWN0ZXJzLiAgKi8KKy0JCQkgIGFyZ19lbmQgPSBhcmc7CistCQkJICBjaGFyYWN0ZXJzID0gMDsKKy0JCQkgIGZvciAoOzspCistCQkJICAgIHsKKy0JCQkgICAgICBpbnQgY291bnQgPSB1OF9zdHJtYmxlbiAoYXJnX2VuZCk7CistCQkJICAgICAgaWYgKGNvdW50ID09IDApCistCQkJCWJyZWFrOworLQkJCSAgICAgIGlmIChjb3VudCA8IDApCistCQkJCXsKKy0JCQkJICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKy0JCQkJICAgIGZyZWUgKHJlc3VsdCk7CistCQkJCSAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorLQkJCQkgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKy0JCQkJICBDTEVBTlVQICgpOworLQkJCQkgIGVycm5vID0gRUlMU0VROworLQkJCQkgIHJldHVybiBOVUxMOworLQkJCQl9CistCQkJICAgICAgYXJnX2VuZCArPSBjb3VudDsKKy0JCQkgICAgICBjaGFyYWN0ZXJzKys7CistCQkJICAgIH0KKy0JCQl9CistCQkgICAgICBlbHNlCistCQkJeworLQkJCSAgLyogVXNlIHRoZSBlbnRpcmUgc3RyaW5nLiAgKi8KKy0JCQkgIGFyZ19lbmQgPSBhcmcgKyB1OF9zdHJsZW4gKGFyZyk7CistCQkJICAvKiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZG9lc24ndCBtYXR0ZXIuICAqLworLQkJCSAgY2hhcmFjdGVycyA9IDA7CistCQkJfQorLQorLQkJICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKy0JCQkgICYmICEoZHAtPmZsYWdzICYgRkxBR19MRUZUKSkKKy0JCQl7CistCQkJICBzaXplX3QgbiA9IHdpZHRoIC0gY2hhcmFjdGVyczsKKy0JCQkgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIG4pKTsKKy0JCQkgIERDSEFSX1NFVCAocmVzdWx0ICsgbGVuZ3RoLCAnICcsIG4pOworLQkJCSAgbGVuZ3RoICs9IG47CistCQkJfQorLQorLSMgaWYgRENIQVJfSVNfVUlOVDhfVAorLQkJICAgICAgeworLQkJCXNpemVfdCBuID0gYXJnX2VuZCAtIGFyZzsKKy0JCQlFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CistCQkJRENIQVJfQ1BZIChyZXN1bHQgKyBsZW5ndGgsIGFyZywgbik7CistCQkJbGVuZ3RoICs9IG47CistCQkgICAgICB9CistIyBlbHNlCistCQkgICAgICB7IC8qIENvbnZlcnQuICAqLworLQkJCURDSEFSX1QgKmNvbnZlcnRlZCA9IHJlc3VsdCArIGxlbmd0aDsKKy0JCQlzaXplX3QgY29udmVydGVkX2xlbiA9IGFsbG9jYXRlZCAtIGxlbmd0aDsKKy0jICBpZiBEQ0hBUl9JU19UQ0hBUgorLQkJCS8qIENvbnZlcnQgZnJvbSBVVEYtOCB0byBsb2NhbGUgZW5jb2RpbmcuICAqLworLQkJCWlmICh1OF9jb252X3RvX2VuY29kaW5nIChsb2NhbGVfY2hhcnNldCAoKSwKKy0JCQkJCQkgaWNvbnZlaF9xdWVzdGlvbl9tYXJrLAorLQkJCQkJCSBhcmcsIGFyZ19lbmQgLSBhcmcsIE5VTEwsCistCQkJCQkJICZjb252ZXJ0ZWQsICZjb252ZXJ0ZWRfbGVuKQorLQkJCSAgICA8IDApCistIyAgZWxzZQorLQkJCS8qIENvbnZlcnQgZnJvbSBVVEYtOCB0byBVVEYtMTYvVVRGLTMyLiAgKi8KKy0JCQljb252ZXJ0ZWQgPQorLQkJCSAgVThfVE9fRENIQVIgKGFyZywgYXJnX2VuZCAtIGFyZywKKy0JCQkJICAgICAgIGNvbnZlcnRlZCwgJmNvbnZlcnRlZF9sZW4pOworLQkJCWlmIChjb252ZXJ0ZWQgPT0gTlVMTCkKKy0jICBlbmRpZgorLQkJCSAgeworLQkJCSAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKy0JCQkgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCistCQkJICAgICAgZnJlZSAocmVzdWx0KTsKKy0JCQkgICAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorLQkJCSAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CistCQkJICAgIENMRUFOVVAgKCk7CistCQkJICAgIGVycm5vID0gc2F2ZWRfZXJybm87CistCQkJICAgIHJldHVybiBOVUxMOworLQkJCSAgfQorLQkJCWlmIChjb252ZXJ0ZWQgIT0gcmVzdWx0ICsgbGVuZ3RoKQorLQkJCSAgeworLQkJCSAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBjb252ZXJ0ZWRfbGVuKSk7CistCQkJICAgIERDSEFSX0NQWSAocmVzdWx0ICsgbGVuZ3RoLCBjb252ZXJ0ZWQsIGNvbnZlcnRlZF9sZW4pOworLQkJCSAgICBmcmVlIChjb252ZXJ0ZWQpOworLQkJCSAgfQorLQkJCWxlbmd0aCArPSBjb252ZXJ0ZWRfbGVuOworLQkJICAgICAgfQorLSMgZW5kaWYKKy0KKy0JCSAgICAgIGlmIChoYXNfd2lkdGggJiYgd2lkdGggPiBjaGFyYWN0ZXJzCistCQkJICAmJiAoZHAtPmZsYWdzICYgRkxBR19MRUZUKSkKKy0JCQl7CistCQkJICBzaXplX3QgbiA9IHdpZHRoIC0gY2hhcmFjdGVyczsKKy0JCQkgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIG4pKTsKKy0JCQkgIERDSEFSX1NFVCAocmVzdWx0ICsgbGVuZ3RoLCAnICcsIG4pOworLQkJCSAgbGVuZ3RoICs9IG47CistCQkJfQorLQkJICAgIH0KKy0JCSAgICBicmVhazsKKy0KKy0JCSAgY2FzZSBUWVBFX1UxNl9TVFJJTkc6CistCQkgICAgeworLQkJICAgICAgY29uc3QgdWludDE2X3QgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91MTZfc3RyaW5nOworLQkJICAgICAgY29uc3QgdWludDE2X3QgKmFyZ19lbmQ7CistCQkgICAgICBzaXplX3QgY2hhcmFjdGVyczsKKy0KKy0JCSAgICAgIGlmIChoYXNfcHJlY2lzaW9uKQorLQkJCXsKKy0JCQkgIC8qIFVzZSBvbmx5IFBSRUNJU0lPTiBjaGFyYWN0ZXJzLCBmcm9tIHRoZSBsZWZ0LiAgKi8KKy0JCQkgIGFyZ19lbmQgPSBhcmc7CistCQkJICBjaGFyYWN0ZXJzID0gMDsKKy0JCQkgIGZvciAoOyBwcmVjaXNpb24gPiAwOyBwcmVjaXNpb24tLSkKKy0JCQkgICAgeworLQkJCSAgICAgIGludCBjb3VudCA9IHUxNl9zdHJtYmxlbiAoYXJnX2VuZCk7CistCQkJICAgICAgaWYgKGNvdW50ID09IDApCistCQkJCWJyZWFrOworLQkJCSAgICAgIGlmIChjb3VudCA8IDApCistCQkJCXsKKy0JCQkJICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKy0JCQkJICAgIGZyZWUgKHJlc3VsdCk7CistCQkJCSAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorLQkJCQkgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKy0JCQkJICBDTEVBTlVQICgpOworLQkJCQkgIGVycm5vID0gRUlMU0VROworLQkJCQkgIHJldHVybiBOVUxMOworLQkJCQl9CistCQkJICAgICAgYXJnX2VuZCArPSBjb3VudDsKKy0JCQkgICAgICBjaGFyYWN0ZXJzKys7CistCQkJICAgIH0KKy0JCQl9CistCQkgICAgICBlbHNlIGlmIChoYXNfd2lkdGgpCistCQkJeworLQkJCSAgLyogVXNlIHRoZSBlbnRpcmUgc3RyaW5nLCBhbmQgY291bnQgdGhlIG51bWJlciBvZgorLQkJCSAgICAgY2hhcmFjdGVycy4gICovCistCQkJICBhcmdfZW5kID0gYXJnOworLQkJCSAgY2hhcmFjdGVycyA9IDA7CistCQkJICBmb3IgKDs7KQorLQkJCSAgICB7CistCQkJICAgICAgaW50IGNvdW50ID0gdTE2X3N0cm1ibGVuIChhcmdfZW5kKTsKKy0JCQkgICAgICBpZiAoY291bnQgPT0gMCkKKy0JCQkJYnJlYWs7CistCQkJICAgICAgaWYgKGNvdW50IDwgMCkKKy0JCQkJeworLQkJCQkgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorLQkJCQkgICAgZnJlZSAocmVzdWx0KTsKKy0JCQkJICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCistCQkJCSAgICBmcmVlIChidWZfbWFsbG9jZWQpOworLQkJCQkgIENMRUFOVVAgKCk7CistCQkJCSAgZXJybm8gPSBFSUxTRVE7CistCQkJCSAgcmV0dXJuIE5VTEw7CistCQkJCX0KKy0JCQkgICAgICBhcmdfZW5kICs9IGNvdW50OworLQkJCSAgICAgIGNoYXJhY3RlcnMrKzsKKy0JCQkgICAgfQorLQkJCX0KKy0JCSAgICAgIGVsc2UKKy0JCQl7CistCQkJICAvKiBVc2UgdGhlIGVudGlyZSBzdHJpbmcuICAqLworLQkJCSAgYXJnX2VuZCA9IGFyZyArIHUxNl9zdHJsZW4gKGFyZyk7CistCQkJICAvKiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZG9lc24ndCBtYXR0ZXIuICAqLworLQkJCSAgY2hhcmFjdGVycyA9IDA7CistCQkJfQorLQorLQkJICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKy0JCQkgICYmICEoZHAtPmZsYWdzICYgRkxBR19MRUZUKSkKKy0JCQl7CistCQkJICBzaXplX3QgbiA9IHdpZHRoIC0gY2hhcmFjdGVyczsKKy0JCQkgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIG4pKTsKKy0JCQkgIERDSEFSX1NFVCAocmVzdWx0ICsgbGVuZ3RoLCAnICcsIG4pOworLQkJCSAgbGVuZ3RoICs9IG47CistCQkJfQorLQorLSMgaWYgRENIQVJfSVNfVUlOVDE2X1QKKy0JCSAgICAgIHsKKy0JCQlzaXplX3QgbiA9IGFyZ19lbmQgLSBhcmc7CistCQkJRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgbikpOworLQkJCURDSEFSX0NQWSAocmVzdWx0ICsgbGVuZ3RoLCBhcmcsIG4pOworLQkJCWxlbmd0aCArPSBuOworLQkJICAgICAgfQorLSMgZWxzZQorLQkJICAgICAgeyAvKiBDb252ZXJ0LiAgKi8KKy0JCQlEQ0hBUl9UICpjb252ZXJ0ZWQgPSByZXN1bHQgKyBsZW5ndGg7CistCQkJc2l6ZV90IGNvbnZlcnRlZF9sZW4gPSBhbGxvY2F0ZWQgLSBsZW5ndGg7CistIyAgaWYgRENIQVJfSVNfVENIQVIKKy0JCQkvKiBDb252ZXJ0IGZyb20gVVRGLTE2IHRvIGxvY2FsZSBlbmNvZGluZy4gICovCistCQkJaWYgKHUxNl9jb252X3RvX2VuY29kaW5nIChsb2NhbGVfY2hhcnNldCAoKSwKKy0JCQkJCQkgIGljb252ZWhfcXVlc3Rpb25fbWFyaywKKy0JCQkJCQkgIGFyZywgYXJnX2VuZCAtIGFyZywgTlVMTCwKKy0JCQkJCQkgICZjb252ZXJ0ZWQsICZjb252ZXJ0ZWRfbGVuKQorLQkJCSAgICA8IDApCistIyAgZWxzZQorLQkJCS8qIENvbnZlcnQgZnJvbSBVVEYtMTYgdG8gVVRGLTgvVVRGLTMyLiAgKi8KKy0JCQljb252ZXJ0ZWQgPQorLQkJCSAgVTE2X1RPX0RDSEFSIChhcmcsIGFyZ19lbmQgLSBhcmcsCistCQkJCQljb252ZXJ0ZWQsICZjb252ZXJ0ZWRfbGVuKTsKKy0JCQlpZiAoY29udmVydGVkID09IE5VTEwpCistIyAgZW5kaWYKKy0JCQkgIHsKKy0JCQkgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CistCQkJICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorLQkJCSAgICAgIGZyZWUgKHJlc3VsdCk7CistCQkJICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKy0JCQkgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworLQkJCSAgICBDTEVBTlVQICgpOworLQkJCSAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworLQkJCSAgICByZXR1cm4gTlVMTDsKKy0JCQkgIH0KKy0JCQlpZiAoY29udmVydGVkICE9IHJlc3VsdCArIGxlbmd0aCkKKy0JCQkgIHsKKy0JCQkgICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgY29udmVydGVkX2xlbikpOworLQkJCSAgICBEQ0hBUl9DUFkgKHJlc3VsdCArIGxlbmd0aCwgY29udmVydGVkLCBjb252ZXJ0ZWRfbGVuKTsKKy0JCQkgICAgZnJlZSAoY29udmVydGVkKTsKKy0JCQkgIH0KKy0JCQlsZW5ndGggKz0gY29udmVydGVkX2xlbjsKKy0JCSAgICAgIH0KKy0jIGVuZGlmCistCistCQkgICAgICBpZiAoaGFzX3dpZHRoICYmIHdpZHRoID4gY2hhcmFjdGVycworLQkJCSAgJiYgKGRwLT5mbGFncyAmIEZMQUdfTEVGVCkpCistCQkJeworLQkJCSAgc2l6ZV90IG4gPSB3aWR0aCAtIGNoYXJhY3RlcnM7CistCQkJICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CistCQkJICBEQ0hBUl9TRVQgKHJlc3VsdCArIGxlbmd0aCwgJyAnLCBuKTsKKy0JCQkgIGxlbmd0aCArPSBuOworLQkJCX0KKy0JCSAgICB9CistCQkgICAgYnJlYWs7CistCistCQkgIGNhc2UgVFlQRV9VMzJfU1RSSU5HOgorLQkJICAgIHsKKy0JCSAgICAgIGNvbnN0IHVpbnQzMl90ICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdTMyX3N0cmluZzsKKy0JCSAgICAgIGNvbnN0IHVpbnQzMl90ICphcmdfZW5kOworLQkJICAgICAgc2l6ZV90IGNoYXJhY3RlcnM7CistCistCQkgICAgICBpZiAoaGFzX3ByZWNpc2lvbikKKy0JCQl7CistCQkJICAvKiBVc2Ugb25seSBQUkVDSVNJT04gY2hhcmFjdGVycywgZnJvbSB0aGUgbGVmdC4gICovCistCQkJICBhcmdfZW5kID0gYXJnOworLQkJCSAgY2hhcmFjdGVycyA9IDA7CistCQkJICBmb3IgKDsgcHJlY2lzaW9uID4gMDsgcHJlY2lzaW9uLS0pCistCQkJICAgIHsKKy0JCQkgICAgICBpbnQgY291bnQgPSB1MzJfc3RybWJsZW4gKGFyZ19lbmQpOworLQkJCSAgICAgIGlmIChjb3VudCA9PSAwKQorLQkJCQlicmVhazsKKy0JCQkgICAgICBpZiAoY291bnQgPCAwKQorLQkJCQl7CistCQkJCSAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCistCQkJCSAgICBmcmVlIChyZXN1bHQpOworLQkJCQkgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKy0JCQkJICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CistCQkJCSAgQ0xFQU5VUCAoKTsKKy0JCQkJICBlcnJubyA9IEVJTFNFUTsKKy0JCQkJICByZXR1cm4gTlVMTDsKKy0JCQkJfQorLQkJCSAgICAgIGFyZ19lbmQgKz0gY291bnQ7CistCQkJICAgICAgY2hhcmFjdGVycysrOworLQkJCSAgICB9CistCQkJfQorLQkJICAgICAgZWxzZSBpZiAoaGFzX3dpZHRoKQorLQkJCXsKKy0JCQkgIC8qIFVzZSB0aGUgZW50aXJlIHN0cmluZywgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YKKy0JCQkgICAgIGNoYXJhY3RlcnMuICAqLworLQkJCSAgYXJnX2VuZCA9IGFyZzsKKy0JCQkgIGNoYXJhY3RlcnMgPSAwOworLQkJCSAgZm9yICg7OykKKy0JCQkgICAgeworLQkJCSAgICAgIGludCBjb3VudCA9IHUzMl9zdHJtYmxlbiAoYXJnX2VuZCk7CistCQkJICAgICAgaWYgKGNvdW50ID09IDApCistCQkJCWJyZWFrOworLQkJCSAgICAgIGlmIChjb3VudCA8IDApCistCQkJCXsKKy0JCQkJICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKy0JCQkJICAgIGZyZWUgKHJlc3VsdCk7CistCQkJCSAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorLQkJCQkgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKy0JCQkJICBDTEVBTlVQICgpOworLQkJCQkgIGVycm5vID0gRUlMU0VROworLQkJCQkgIHJldHVybiBOVUxMOworLQkJCQl9CistCQkJICAgICAgYXJnX2VuZCArPSBjb3VudDsKKy0JCQkgICAgICBjaGFyYWN0ZXJzKys7CistCQkJICAgIH0KKy0JCQl9CistCQkgICAgICBlbHNlCistCQkJeworLQkJCSAgLyogVXNlIHRoZSBlbnRpcmUgc3RyaW5nLiAgKi8KKy0JCQkgIGFyZ19lbmQgPSBhcmcgKyB1MzJfc3RybGVuIChhcmcpOworLQkJCSAgLyogVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGRvZXNuJ3QgbWF0dGVyLiAgKi8KKy0JCQkgIGNoYXJhY3RlcnMgPSAwOworLQkJCX0KKy0KKy0JCSAgICAgIGlmIChoYXNfd2lkdGggJiYgd2lkdGggPiBjaGFyYWN0ZXJzCistCQkJICAmJiAhKGRwLT5mbGFncyAmIEZMQUdfTEVGVCkpCistCQkJeworLQkJCSAgc2l6ZV90IG4gPSB3aWR0aCAtIGNoYXJhY3RlcnM7CistCQkJICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBuKSk7CistCQkJICBEQ0hBUl9TRVQgKHJlc3VsdCArIGxlbmd0aCwgJyAnLCBuKTsKKy0JCQkgIGxlbmd0aCArPSBuOworLQkJCX0KKy0KKy0jIGlmIERDSEFSX0lTX1VJTlQzMl9UCistCQkgICAgICB7CistCQkJc2l6ZV90IG4gPSBhcmdfZW5kIC0gYXJnOworLQkJCUVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIG4pKTsKKy0JCQlEQ0hBUl9DUFkgKHJlc3VsdCArIGxlbmd0aCwgYXJnLCBuKTsKKy0JCQlsZW5ndGggKz0gbjsKKy0JCSAgICAgIH0KKy0jIGVsc2UKKy0JCSAgICAgIHsgLyogQ29udmVydC4gICovCistCQkJRENIQVJfVCAqY29udmVydGVkID0gcmVzdWx0ICsgbGVuZ3RoOworLQkJCXNpemVfdCBjb252ZXJ0ZWRfbGVuID0gYWxsb2NhdGVkIC0gbGVuZ3RoOworLSMgIGlmIERDSEFSX0lTX1RDSEFSCistCQkJLyogQ29udmVydCBmcm9tIFVURi0zMiB0byBsb2NhbGUgZW5jb2RpbmcuICAqLworLQkJCWlmICh1MzJfY29udl90b19lbmNvZGluZyAobG9jYWxlX2NoYXJzZXQgKCksCistCQkJCQkJICBpY29udmVoX3F1ZXN0aW9uX21hcmssCistCQkJCQkJICBhcmcsIGFyZ19lbmQgLSBhcmcsIE5VTEwsCistCQkJCQkJICAmY29udmVydGVkLCAmY29udmVydGVkX2xlbikKKy0JCQkgICAgPCAwKQorLSMgIGVsc2UKKy0JCQkvKiBDb252ZXJ0IGZyb20gVVRGLTMyIHRvIFVURi04L1VURi0xNi4gICovCistCQkJY29udmVydGVkID0KKy0JCQkgIFUzMl9UT19EQ0hBUiAoYXJnLCBhcmdfZW5kIC0gYXJnLAorLQkJCQkJY29udmVydGVkLCAmY29udmVydGVkX2xlbik7CistCQkJaWYgKGNvbnZlcnRlZCA9PSBOVUxMKQorLSMgIGVuZGlmCistCQkJICB7CistCQkJICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworLQkJCSAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKy0JCQkgICAgICBmcmVlIChyZXN1bHQpOworLQkJCSAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCistCQkJICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKy0JCQkgICAgQ0xFQU5VUCAoKTsKKy0JCQkgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKy0JCQkgICAgcmV0dXJuIE5VTEw7CistCQkJICB9CistCQkJaWYgKGNvbnZlcnRlZCAhPSByZXN1bHQgKyBsZW5ndGgpCistCQkJICB7CistCQkJICAgIEVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIGNvbnZlcnRlZF9sZW4pKTsKKy0JCQkgICAgRENIQVJfQ1BZIChyZXN1bHQgKyBsZW5ndGgsIGNvbnZlcnRlZCwgY29udmVydGVkX2xlbik7CistCQkJICAgIGZyZWUgKGNvbnZlcnRlZCk7CistCQkJICB9CistCQkJbGVuZ3RoICs9IGNvbnZlcnRlZF9sZW47CistCQkgICAgICB9CistIyBlbmRpZgorLQorLQkJICAgICAgaWYgKGhhc193aWR0aCAmJiB3aWR0aCA+IGNoYXJhY3RlcnMKKy0JCQkgICYmIChkcC0+ZmxhZ3MgJiBGTEFHX0xFRlQpKQorLQkJCXsKKy0JCQkgIHNpemVfdCBuID0gd2lkdGggLSBjaGFyYWN0ZXJzOworLQkJCSAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgbikpOworLQkJCSAgRENIQVJfU0VUIChyZXN1bHQgKyBsZW5ndGgsICcgJywgbik7CistCQkJICBsZW5ndGggKz0gbjsKKy0JCQl9CistCQkgICAgfQorLQkJICAgIGJyZWFrOworLQorLQkJICBkZWZhdWx0OgorLQkJICAgIGFib3J0ICgpOworLQkJICB9CistCSAgICAgIH0KKy0jZW5kaWYKKy0jaWYgKE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0RPVUJMRSkgJiYgIWRlZmluZWQgSU5fTElCSU5UTAorLQkgICAgZWxzZSBpZiAoKGRwLT5jb252ZXJzaW9uID09ICdhJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnQScpCistIyBpZiAhKE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IChORUVEX1BSSU5URl9MT05HX0RPVUJMRSAmJiBORUVEX1BSSU5URl9ET1VCTEUpKQorLQkJICAgICAmJiAoMAorLSMgIGlmIE5FRURfUFJJTlRGX0RPVUJMRQorLQkJCSB8fCBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlID09IFRZUEVfRE9VQkxFCistIyAgZW5kaWYKKy0jICBpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorLQkJCSB8fCBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlID09IFRZUEVfTE9OR0RPVUJMRQorLSMgIGVuZGlmCistCQkJKQorLSMgZW5kaWYKKy0JCSAgICApCistCSAgICAgIHsKKy0JCWFyZ190eXBlIHR5cGUgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlOworLQkJaW50IGZsYWdzID0gZHAtPmZsYWdzOworLQkJaW50IGhhc193aWR0aDsKKy0JCXNpemVfdCB3aWR0aDsKKy0JCWludCBoYXNfcHJlY2lzaW9uOworLQkJc2l6ZV90IHByZWNpc2lvbjsKKy0JCXNpemVfdCB0bXBfbGVuZ3RoOworLQkJRENIQVJfVCB0bXBidWZbNzAwXTsKKy0JCURDSEFSX1QgKnRtcDsKKy0JCURDSEFSX1QgKnBhZF9wdHI7CistCQlEQ0hBUl9UICpwOworLQorLQkJaGFzX3dpZHRoID0gMDsKKy0JCXdpZHRoID0gMDsKKy0JCWlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKy0JCSAgeworLQkJICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorLQkJICAgICAgeworLQkJCWludCBhcmc7CistCistCQkJaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCistCQkJICBhYm9ydCAoKTsKKy0JCQlhcmcgPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworLQkJCWlmIChhcmcgPCAwKQorLQkJCSAgeworLQkJCSAgICAvKiAiQSBuZWdhdGl2ZSBmaWVsZCB3aWR0aCBpcyB0YWtlbiBhcyBhICctJyBmbGFnCistCQkJICAgICAgICBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLiIgICovCistCQkJICAgIGZsYWdzIHw9IEZMQUdfTEVGVDsKKy0JCQkgICAgd2lkdGggPSAodW5zaWduZWQgaW50KSAoLWFyZyk7CistCQkJICB9CistCQkJZWxzZQorLQkJCSAgd2lkdGggPSBhcmc7CistCQkgICAgICB9CistCQkgICAgZWxzZQorLQkJICAgICAgeworLQkJCWNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKKy0KKy0JCQlkbworLQkJCSAgd2lkdGggPSB4c3VtICh4dGltZXMgKHdpZHRoLCAxMCksICpkaWdpdHArKyAtICcwJyk7CistCQkJd2hpbGUgKGRpZ2l0cCAhPSBkcC0+d2lkdGhfZW5kKTsKKy0JCSAgICAgIH0KKy0JCSAgICBoYXNfd2lkdGggPSAxOworLQkJICB9CistCistCQloYXNfcHJlY2lzaW9uID0gMDsKKy0JCXByZWNpc2lvbiA9IDA7CistCQlpZiAoZHAtPnByZWNpc2lvbl9zdGFydCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKKy0JCSAgeworLQkJICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCAhPSBBUkdfTk9ORSkKKy0JCSAgICAgIHsKKy0JCQlpbnQgYXJnOworLQorLQkJCWlmICghKGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKKy0JCQkgIGFib3J0ICgpOworLQkJCWFyZyA9IGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS5hLmFfaW50OworLQkJCS8qICJBIG5lZ2F0aXZlIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBpZiB0aGUgcHJlY2lzaW9uCistCQkJICAgIHdlcmUgb21pdHRlZC4iICAqLworLQkJCWlmIChhcmcgPj0gMCkKKy0JCQkgIHsKKy0JCQkgICAgcHJlY2lzaW9uID0gYXJnOworLQkJCSAgICBoYXNfcHJlY2lzaW9uID0gMTsKKy0JCQkgIH0KKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlCistCQkgICAgICB7CistCQkJY29uc3QgRkNIQVJfVCAqZGlnaXRwID0gZHAtPnByZWNpc2lvbl9zdGFydCArIDE7CistCistCQkJcHJlY2lzaW9uID0gMDsKKy0JCQl3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKQorLQkJCSAgcHJlY2lzaW9uID0geHN1bSAoeHRpbWVzIChwcmVjaXNpb24sIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKy0JCQloYXNfcHJlY2lzaW9uID0gMTsKKy0JCSAgICAgIH0KKy0JCSAgfQorLQorLQkJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZS4gICovCistCQlpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCistCQkgIHRtcF9sZW5ndGggPQorLQkJICAgICh1bnNpZ25lZCBpbnQpICgoTERCTF9ESUcgKyAxKQorLQkJCQkgICAgKiAwLjgzMSAvKiBkZWNpbWFsIC0+IGhleGFkZWNpbWFsICovCistCQkJCSAgICkKKy0JCSAgICArIDE7IC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCistCQllbHNlCistCQkgIHRtcF9sZW5ndGggPQorLQkJICAgICh1bnNpZ25lZCBpbnQpICgoREJMX0RJRyArIDEpCistCQkJCSAgICAqIDAuODMxIC8qIGRlY2ltYWwgLT4gaGV4YWRlY2ltYWwgKi8KKy0JCQkJICAgKQorLQkJICAgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCWlmICh0bXBfbGVuZ3RoIDwgcHJlY2lzaW9uKQorLQkJICB0bXBfbGVuZ3RoID0gcHJlY2lzaW9uOworLQkJLyogQWNjb3VudCBmb3Igc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCistCQl0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgMTIpOworLQorLQkJaWYgKHRtcF9sZW5ndGggPCB3aWR0aCkKKy0JCSAgdG1wX2xlbmd0aCA9IHdpZHRoOworLQorLQkJdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEpOyAvKiBhY2NvdW50IGZvciB0cmFpbGluZyBOVUwgKi8KKy0KKy0JCWlmICh0bXBfbGVuZ3RoIDw9IHNpemVvZiAodG1wYnVmKSAvIHNpemVvZiAoRENIQVJfVCkpCistCQkgIHRtcCA9IHRtcGJ1ZjsKKy0JCWVsc2UKKy0JCSAgeworLQkJICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChEQ0hBUl9UKSk7CistCistCQkgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAodG1wX21lbXNpemUpKQorLQkJICAgICAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCistCQkgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CistCQkgICAgdG1wID0gKERDSEFSX1QgKikgbWFsbG9jICh0bXBfbWVtc2l6ZSk7CistCQkgICAgaWYgKHRtcCA9PSBOVUxMKQorLQkJICAgICAgLyogT3V0IG9mIG1lbW9yeS4gICovCistCQkgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CistCQkgIH0KKy0KKy0JCXBhZF9wdHIgPSBOVUxMOworLQkJcCA9IHRtcDsKKy0JCWlmICh0eXBlID09IFRZUEVfTE9OR0RPVUJMRSkKKy0JCSAgeworLSMgaWYgTkVFRF9QUklOVEZfRElSRUNUSVZFX0EgfHwgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUKKy0JCSAgICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKKy0KKy0JCSAgICBpZiAoaXNuYW5sIChhcmcpKQorLQkJICAgICAgeworLQkJCWlmIChkcC0+Y29udmVyc2lvbiA9PSAnQScpCistCQkJICB7CistCQkJICAgICpwKysgPSAnTic7ICpwKysgPSAnQSc7ICpwKysgPSAnTic7CistCQkJICB9CistCQkJZWxzZQorLQkJCSAgeworLQkJCSAgICAqcCsrID0gJ24nOyAqcCsrID0gJ2EnOyAqcCsrID0gJ24nOworLQkJCSAgfQorLQkJICAgICAgfQorLQkJICAgIGVsc2UKKy0JCSAgICAgIHsKKy0JCQlpbnQgc2lnbiA9IDA7CistCQkJREVDTF9MT05HX0RPVUJMRV9ST1VORElORworLQorLQkJCUJFR0lOX0xPTkdfRE9VQkxFX1JPVU5ESU5HICgpOworLQorLQkJCWlmIChzaWduYml0IChhcmcpKSAvKiBhcmcgPCAwLjBMIG9yIG5lZ2F0aXZlIHplcm8gKi8KKy0JCQkgIHsKKy0JCQkgICAgc2lnbiA9IC0xOworLQkJCSAgICBhcmcgPSAtYXJnOworLQkJCSAgfQorLQorLQkJCWlmIChzaWduIDwgMCkKKy0JCQkgICpwKysgPSAnLSc7CistCQkJZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1NIT1dTSUdOKQorLQkJCSAgKnArKyA9ICcrJzsKKy0JCQllbHNlIGlmIChmbGFncyAmIEZMQUdfU1BBQ0UpCistCQkJICAqcCsrID0gJyAnOworLQorLQkJCWlmIChhcmcgPiAwLjBMICYmIGFyZyArIGFyZyA9PSBhcmcpCistCQkJICB7CistCQkJICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnQScpCistCQkJICAgICAgeworLQkJCQkqcCsrID0gJ0knOyAqcCsrID0gJ04nOyAqcCsrID0gJ0YnOworLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZQorLQkJCSAgICAgIHsKKy0JCQkJKnArKyA9ICdpJzsgKnArKyA9ICduJzsgKnArKyA9ICdmJzsKKy0JCQkgICAgICB9CistCQkJICB9CistCQkJZWxzZQorLQkJCSAgeworLQkJCSAgICBpbnQgZXhwb25lbnQ7CistCQkJICAgIGxvbmcgZG91YmxlIG1hbnRpc3NhOworLQorLQkJCSAgICBpZiAoYXJnID4gMC4wTCkKKy0JCQkgICAgICBtYW50aXNzYSA9IHByaW50Zl9mcmV4cGwgKGFyZywgJmV4cG9uZW50KTsKKy0JCQkgICAgZWxzZQorLQkJCSAgICAgIHsKKy0JCQkJZXhwb25lbnQgPSAwOworLQkJCQltYW50aXNzYSA9IDAuMEw7CistCQkJICAgICAgfQorLQorLQkJCSAgICBpZiAoaGFzX3ByZWNpc2lvbgorLQkJCQkmJiBwcmVjaXNpb24gPCAodW5zaWduZWQgaW50KSAoKExEQkxfRElHICsgMSkgKiAwLjgzMSkgKyAxKQorLQkJCSAgICAgIHsKKy0JCQkJLyogUm91bmQgdGhlIG1hbnRpc3NhLiAgKi8KKy0JCQkJbG9uZyBkb3VibGUgdGFpbCA9IG1hbnRpc3NhOworLQkJCQlzaXplX3QgcTsKKy0KKy0JCQkJZm9yIChxID0gcHJlY2lzaW9uOyA7IHEtLSkKKy0JCQkJICB7CistCQkJCSAgICBpbnQgZGlnaXQgPSAoaW50KSB0YWlsOworLQkJCQkgICAgdGFpbCAtPSBkaWdpdDsKKy0JCQkJICAgIGlmIChxID09IDApCistCQkJCSAgICAgIHsKKy0JCQkJCWlmIChkaWdpdCAmIDEgPyB0YWlsID49IDAuNUwgOiB0YWlsID4gMC41TCkKKy0JCQkJCSAgdGFpbCA9IDEgLSB0YWlsOworLQkJCQkJZWxzZQorLQkJCQkJICB0YWlsID0gLSB0YWlsOworLQkJCQkJYnJlYWs7CistCQkJCSAgICAgIH0KKy0JCQkJICAgIHRhaWwgKj0gMTYuMEw7CistCQkJCSAgfQorLQkJCQlpZiAodGFpbCAhPSAwLjBMKQorLQkJCQkgIGZvciAocSA9IHByZWNpc2lvbjsgcSA+IDA7IHEtLSkKKy0JCQkJICAgIHRhaWwgKj0gMC4wNjI1TDsKKy0JCQkJbWFudGlzc2EgKz0gdGFpbDsKKy0JCQkgICAgICB9CistCistCQkJICAgICpwKysgPSAnMCc7CistCQkJICAgICpwKysgPSBkcC0+Y29udmVyc2lvbiAtICdBJyArICdYJzsKKy0JCQkgICAgcGFkX3B0ciA9IHA7CistCQkJICAgIHsKKy0JCQkgICAgICBpbnQgZGlnaXQ7CistCistCQkJICAgICAgZGlnaXQgPSAoaW50KSBtYW50aXNzYTsKKy0JCQkgICAgICBtYW50aXNzYSAtPSBkaWdpdDsKKy0JCQkgICAgICAqcCsrID0gJzAnICsgZGlnaXQ7CistCQkJICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKQorLQkJCQkgIHx8IG1hbnRpc3NhID4gMC4wTCB8fCBwcmVjaXNpb24gPiAwKQorLQkJCQl7CistCQkJCSAgKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKy0JCQkJICAvKiBUaGlzIGxvb3AgdGVybWluYXRlcyBiZWNhdXNlIHdlIGFzc3VtZQorLQkJCQkgICAgIHRoYXQgRkxUX1JBRElYIGlzIGEgcG93ZXIgb2YgMi4gICovCistCQkJCSAgd2hpbGUgKG1hbnRpc3NhID4gMC4wTCkKKy0JCQkJICAgIHsKKy0JCQkJICAgICAgbWFudGlzc2EgKj0gMTYuMEw7CistCQkJCSAgICAgIGRpZ2l0ID0gKGludCkgbWFudGlzc2E7CistCQkJCSAgICAgIG1hbnRpc3NhIC09IGRpZ2l0OworLQkJCQkgICAgICAqcCsrID0gZGlnaXQKKy0JCQkJCSAgICAgKyAoZGlnaXQgPCAxMAorLQkJCQkJCT8gJzAnCistCQkJCQkJOiBkcC0+Y29udmVyc2lvbiAtIDEwKTsKKy0JCQkJICAgICAgaWYgKHByZWNpc2lvbiA+IDApCistCQkJCQlwcmVjaXNpb24tLTsKKy0JCQkJICAgIH0KKy0JCQkJICB3aGlsZSAocHJlY2lzaW9uID4gMCkKKy0JCQkJICAgIHsKKy0JCQkJICAgICAgKnArKyA9ICcwJzsKKy0JCQkJICAgICAgcHJlY2lzaW9uLS07CistCQkJCSAgICB9CistCQkJCX0KKy0JCQkgICAgICB9CistCQkJICAgICAgKnArKyA9IGRwLT5jb252ZXJzaW9uIC0gJ0EnICsgJ1AnOworLSMgIGlmIFdJREVfQ0hBUl9WRVJTSU9OCistCQkJICAgICAgeworLQkJCQlzdGF0aWMgY29uc3Qgd2NoYXJfdCBkZWNpbWFsX2Zvcm1hdFtdID0KKy0JCQkJICB7ICclJywgJysnLCAnZCcsICdcMCcgfTsKKy0JCQkJU05QUklOVEYgKHAsIDYgKyAxLCBkZWNpbWFsX2Zvcm1hdCwgZXhwb25lbnQpOworLQkJCSAgICAgIH0KKy0JCQkgICAgICB3aGlsZSAoKnAgIT0gJ1wwJykKKy0JCQkJcCsrOworLSMgIGVsc2UKKy0JCQkgICAgICBpZiAoc2l6ZW9mIChEQ0hBUl9UKSA9PSAxKQorLQkJCQl7CistCQkJCSAgc3ByaW50ZiAoKGNoYXIgKikgcCwgIiUrZCIsIGV4cG9uZW50KTsKKy0JCQkJICB3aGlsZSAoKnAgIT0gJ1wwJykKKy0JCQkJICAgIHArKzsKKy0JCQkJfQorLQkJCSAgICAgIGVsc2UKKy0JCQkJeworLQkJCQkgIGNoYXIgZXhwYnVmWzYgKyAxXTsKKy0JCQkJICBjb25zdCBjaGFyICplcDsKKy0JCQkJICBzcHJpbnRmIChleHBidWYsICIlK2QiLCBleHBvbmVudCk7CistCQkJCSAgZm9yIChlcCA9IGV4cGJ1ZjsgKCpwID0gKmVwKSAhPSAnXDAnOyBlcCsrKQorLQkJCQkgICAgcCsrOworLQkJCQl9CistIyAgZW5kaWYKKy0JCQkgIH0KKy0KKy0JCQlFTkRfTE9OR19ET1VCTEVfUk9VTkRJTkcgKCk7CistCQkgICAgICB9CistIyBlbHNlCistCQkgICAgYWJvcnQgKCk7CistIyBlbmRpZgorLQkJICB9CistCQllbHNlCistCQkgIHsKKy0jIGlmIE5FRURfUFJJTlRGX0RJUkVDVElWRV9BIHx8IE5FRURfUFJJTlRGX0RPVUJMRQorLQkJICAgIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfZG91YmxlOworLQorLQkJICAgIGlmIChpc25hbiAoYXJnKSkKKy0JCSAgICAgIHsKKy0JCQlpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ0EnKQorLQkJCSAgeworLQkJCSAgICAqcCsrID0gJ04nOyAqcCsrID0gJ0EnOyAqcCsrID0gJ04nOworLQkJCSAgfQorLQkJCWVsc2UKKy0JCQkgIHsKKy0JCQkgICAgKnArKyA9ICduJzsgKnArKyA9ICdhJzsgKnArKyA9ICduJzsKKy0JCQkgIH0KKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlCistCQkgICAgICB7CistCQkJaW50IHNpZ24gPSAwOworLQorLQkJCWlmIChzaWduYml0IChhcmcpKSAvKiBhcmcgPCAwLjAgb3IgbmVnYXRpdmUgemVybyAqLworLQkJCSAgeworLQkJCSAgICBzaWduID0gLTE7CistCQkJICAgIGFyZyA9IC1hcmc7CistCQkJICB9CistCistCQkJaWYgKHNpZ24gPCAwKQorLQkJCSAgKnArKyA9ICctJzsKKy0JCQllbHNlIGlmIChmbGFncyAmIEZMQUdfU0hPV1NJR04pCistCQkJICAqcCsrID0gJysnOworLQkJCWVsc2UgaWYgKGZsYWdzICYgRkxBR19TUEFDRSkKKy0JCQkgICpwKysgPSAnICc7CistCistCQkJaWYgKGFyZyA+IDAuMCAmJiBhcmcgKyBhcmcgPT0gYXJnKQorLQkJCSAgeworLQkJCSAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ0EnKQorLQkJCSAgICAgIHsKKy0JCQkJKnArKyA9ICdJJzsgKnArKyA9ICdOJzsgKnArKyA9ICdGJzsKKy0JCQkgICAgICB9CistCQkJICAgIGVsc2UKKy0JCQkgICAgICB7CistCQkJCSpwKysgPSAnaSc7ICpwKysgPSAnbic7ICpwKysgPSAnZic7CistCQkJICAgICAgfQorLQkJCSAgfQorLQkJCWVsc2UKKy0JCQkgIHsKKy0JCQkgICAgaW50IGV4cG9uZW50OworLQkJCSAgICBkb3VibGUgbWFudGlzc2E7CistCistCQkJICAgIGlmIChhcmcgPiAwLjApCistCQkJICAgICAgbWFudGlzc2EgPSBwcmludGZfZnJleHAgKGFyZywgJmV4cG9uZW50KTsKKy0JCQkgICAgZWxzZQorLQkJCSAgICAgIHsKKy0JCQkJZXhwb25lbnQgPSAwOworLQkJCQltYW50aXNzYSA9IDAuMDsKKy0JCQkgICAgICB9CistCistCQkJICAgIGlmIChoYXNfcHJlY2lzaW9uCistCQkJCSYmIHByZWNpc2lvbiA8ICh1bnNpZ25lZCBpbnQpICgoREJMX0RJRyArIDEpICogMC44MzEpICsgMSkKKy0JCQkgICAgICB7CistCQkJCS8qIFJvdW5kIHRoZSBtYW50aXNzYS4gICovCistCQkJCWRvdWJsZSB0YWlsID0gbWFudGlzc2E7CistCQkJCXNpemVfdCBxOworLQorLQkJCQlmb3IgKHEgPSBwcmVjaXNpb247IDsgcS0tKQorLQkJCQkgIHsKKy0JCQkJICAgIGludCBkaWdpdCA9IChpbnQpIHRhaWw7CistCQkJCSAgICB0YWlsIC09IGRpZ2l0OworLQkJCQkgICAgaWYgKHEgPT0gMCkKKy0JCQkJICAgICAgeworLQkJCQkJaWYgKGRpZ2l0ICYgMSA/IHRhaWwgPj0gMC41IDogdGFpbCA+IDAuNSkKKy0JCQkJCSAgdGFpbCA9IDEgLSB0YWlsOworLQkJCQkJZWxzZQorLQkJCQkJICB0YWlsID0gLSB0YWlsOworLQkJCQkJYnJlYWs7CistCQkJCSAgICAgIH0KKy0JCQkJICAgIHRhaWwgKj0gMTYuMDsKKy0JCQkJICB9CistCQkJCWlmICh0YWlsICE9IDAuMCkKKy0JCQkJICBmb3IgKHEgPSBwcmVjaXNpb247IHEgPiAwOyBxLS0pCistCQkJCSAgICB0YWlsICo9IDAuMDYyNTsKKy0JCQkJbWFudGlzc2EgKz0gdGFpbDsKKy0JCQkgICAgICB9CistCistCQkJICAgICpwKysgPSAnMCc7CistCQkJICAgICpwKysgPSBkcC0+Y29udmVyc2lvbiAtICdBJyArICdYJzsKKy0JCQkgICAgcGFkX3B0ciA9IHA7CistCQkJICAgIHsKKy0JCQkgICAgICBpbnQgZGlnaXQ7CistCistCQkJICAgICAgZGlnaXQgPSAoaW50KSBtYW50aXNzYTsKKy0JCQkgICAgICBtYW50aXNzYSAtPSBkaWdpdDsKKy0JCQkgICAgICAqcCsrID0gJzAnICsgZGlnaXQ7CistCQkJICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKQorLQkJCQkgIHx8IG1hbnRpc3NhID4gMC4wIHx8IHByZWNpc2lvbiA+IDApCistCQkJCXsKKy0JCQkJICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworLQkJCQkgIC8qIFRoaXMgbG9vcCB0ZXJtaW5hdGVzIGJlY2F1c2Ugd2UgYXNzdW1lCistCQkJCSAgICAgdGhhdCBGTFRfUkFESVggaXMgYSBwb3dlciBvZiAyLiAgKi8KKy0JCQkJICB3aGlsZSAobWFudGlzc2EgPiAwLjApCistCQkJCSAgICB7CistCQkJCSAgICAgIG1hbnRpc3NhICo9IDE2LjA7CistCQkJCSAgICAgIGRpZ2l0ID0gKGludCkgbWFudGlzc2E7CistCQkJCSAgICAgIG1hbnRpc3NhIC09IGRpZ2l0OworLQkJCQkgICAgICAqcCsrID0gZGlnaXQKKy0JCQkJCSAgICAgKyAoZGlnaXQgPCAxMAorLQkJCQkJCT8gJzAnCistCQkJCQkJOiBkcC0+Y29udmVyc2lvbiAtIDEwKTsKKy0JCQkJICAgICAgaWYgKHByZWNpc2lvbiA+IDApCistCQkJCQlwcmVjaXNpb24tLTsKKy0JCQkJICAgIH0KKy0JCQkJICB3aGlsZSAocHJlY2lzaW9uID4gMCkKKy0JCQkJICAgIHsKKy0JCQkJICAgICAgKnArKyA9ICcwJzsKKy0JCQkJICAgICAgcHJlY2lzaW9uLS07CistCQkJCSAgICB9CistCQkJCX0KKy0JCQkgICAgICB9CistCQkJICAgICAgKnArKyA9IGRwLT5jb252ZXJzaW9uIC0gJ0EnICsgJ1AnOworLSMgIGlmIFdJREVfQ0hBUl9WRVJTSU9OCistCQkJICAgICAgeworLQkJCQlzdGF0aWMgY29uc3Qgd2NoYXJfdCBkZWNpbWFsX2Zvcm1hdFtdID0KKy0JCQkJICB7ICclJywgJysnLCAnZCcsICdcMCcgfTsKKy0JCQkJU05QUklOVEYgKHAsIDYgKyAxLCBkZWNpbWFsX2Zvcm1hdCwgZXhwb25lbnQpOworLQkJCSAgICAgIH0KKy0JCQkgICAgICB3aGlsZSAoKnAgIT0gJ1wwJykKKy0JCQkJcCsrOworLSMgIGVsc2UKKy0JCQkgICAgICBpZiAoc2l6ZW9mIChEQ0hBUl9UKSA9PSAxKQorLQkJCQl7CistCQkJCSAgc3ByaW50ZiAoKGNoYXIgKikgcCwgIiUrZCIsIGV4cG9uZW50KTsKKy0JCQkJICB3aGlsZSAoKnAgIT0gJ1wwJykKKy0JCQkJICAgIHArKzsKKy0JCQkJfQorLQkJCSAgICAgIGVsc2UKKy0JCQkJeworLQkJCQkgIGNoYXIgZXhwYnVmWzYgKyAxXTsKKy0JCQkJICBjb25zdCBjaGFyICplcDsKKy0JCQkJICBzcHJpbnRmIChleHBidWYsICIlK2QiLCBleHBvbmVudCk7CistCQkJCSAgZm9yIChlcCA9IGV4cGJ1ZjsgKCpwID0gKmVwKSAhPSAnXDAnOyBlcCsrKQorLQkJCQkgICAgcCsrOworLQkJCQl9CistIyAgZW5kaWYKKy0JCQkgIH0KKy0JCSAgICAgIH0KKy0jIGVsc2UKKy0JCSAgICBhYm9ydCAoKTsKKy0jIGVuZGlmCistCQkgIH0KKy0JCS8qIFRoZSBnZW5lcmF0ZWQgc3RyaW5nIG5vdyBleHRlbmRzIGZyb20gdG1wIHRvIHAsIHdpdGggdGhlCistCQkgICB6ZXJvIHBhZGRpbmcgaW5zZXJ0aW9uIHBvaW50IGJlaW5nIGF0IHBhZF9wdHIuICAqLworLQkJaWYgKGhhc193aWR0aCAmJiBwIC0gdG1wIDwgd2lkdGgpCistCQkgIHsKKy0JCSAgICBzaXplX3QgcGFkID0gd2lkdGggLSAocCAtIHRtcCk7CistCQkgICAgRENIQVJfVCAqZW5kID0gcCArIHBhZDsKKy0KKy0JCSAgICBpZiAoZmxhZ3MgJiBGTEFHX0xFRlQpCistCQkgICAgICB7CistCQkJLyogUGFkIHdpdGggc3BhY2VzIG9uIHRoZSByaWdodC4gICovCistCQkJZm9yICg7IHBhZCA+IDA7IHBhZC0tKQorLQkJCSAgKnArKyA9ICcgJzsKKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlIGlmICgoZmxhZ3MgJiBGTEFHX1pFUk8pICYmIHBhZF9wdHIgIT0gTlVMTCkKKy0JCSAgICAgIHsKKy0JCQkvKiBQYWQgd2l0aCB6ZXJvZXMuICAqLworLQkJCURDSEFSX1QgKnEgPSBlbmQ7CistCistCQkJd2hpbGUgKHAgPiBwYWRfcHRyKQorLQkJCSAgKi0tcSA9ICotLXA7CistCQkJZm9yICg7IHBhZCA+IDA7IHBhZC0tKQorLQkJCSAgKnArKyA9ICcwJzsKKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlCistCQkgICAgICB7CistCQkJLyogUGFkIHdpdGggc3BhY2VzIG9uIHRoZSBsZWZ0LiAgKi8KKy0JCQlEQ0hBUl9UICpxID0gZW5kOworLQorLQkJCXdoaWxlIChwID4gdG1wKQorLQkJCSAgKi0tcSA9ICotLXA7CistCQkJZm9yICg7IHBhZCA+IDA7IHBhZC0tKQorLQkJCSAgKnArKyA9ICcgJzsKKy0JCSAgICAgIH0KKy0KKy0JCSAgICBwID0gZW5kOworLQkJICB9CistCistCQl7CistCQkgIHNpemVfdCBjb3VudCA9IHAgLSB0bXA7CistCistCQkgIGlmIChjb3VudCA+PSB0bXBfbGVuZ3RoKQorLQkJICAgIC8qIHRtcF9sZW5ndGggd2FzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQgLSBmaXggdGhlCistCQkgICAgICAgY29kZSBhYm92ZSEgICovCistCQkgICAgYWJvcnQgKCk7CistCistCQkgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIHJlc3VsdC4gICovCistCQkgIGlmIChjb3VudCA+PSBhbGxvY2F0ZWQgLSBsZW5ndGgpCistCQkgICAgeworLQkJICAgICAgc2l6ZV90IG4gPSB4c3VtIChsZW5ndGgsIGNvdW50KTsKKy0KKy0JCSAgICAgIEVOU1VSRV9BTExPQ0FUSU9OIChuKTsKKy0JCSAgICB9CistCistCQkgIC8qIEFwcGVuZCB0aGUgcmVzdWx0LiAgKi8KKy0JCSAgbWVtY3B5IChyZXN1bHQgKyBsZW5ndGgsIHRtcCwgY291bnQgKiBzaXplb2YgKERDSEFSX1QpKTsKKy0JCSAgaWYgKHRtcCAhPSB0bXBidWYpCistCQkgICAgZnJlZSAodG1wKTsKKy0JCSAgbGVuZ3RoICs9IGNvdW50OworLQkJfQorLQkgICAgICB9CistI2VuZGlmCistI2lmIChORUVEX1BSSU5URl9JTkZJTklURV9ET1VCTEUgfHwgTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFKSAmJiAhZGVmaW5lZCBJTl9MSUJJTlRMCistCSAgICBlbHNlIGlmICgoZHAtPmNvbnZlcnNpb24gPT0gJ2YnIHx8IGRwLT5jb252ZXJzaW9uID09ICdGJworLQkJICAgICAgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ2UnIHx8IGRwLT5jb252ZXJzaW9uID09ICdFJworLQkJICAgICAgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ2cnIHx8IGRwLT5jb252ZXJzaW9uID09ICdHJworLQkJICAgICAgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ2EnIHx8IGRwLT5jb252ZXJzaW9uID09ICdBJykKKy0JCSAgICAgJiYgKDAKKy0jIGlmIE5FRURfUFJJTlRGX0RPVUJMRQorLQkJCSB8fCBhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlID09IFRZUEVfRE9VQkxFCistIyBlbGlmIE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRQorLQkJCSB8fCAoYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZSA9PSBUWVBFX0RPVUJMRQorLQkJCSAgICAgLyogVGhlIHN5c3RlbXMgKG1pbmd3KSB3aGljaCBwcm9kdWNlIHdyb25nIG91dHB1dAorLQkJCQlmb3IgSW5mLCAtSW5mLCBhbmQgTmFOIGFsc28gZG8gc28gZm9yIC0wLjAuCistCQkJCVRoZXJlZm9yZSB3ZSB0cmVhdCB0aGlzIGNhc2UgaGVyZSBhcyB3ZWxsLiAgKi8KKy0JCQkgICAgICYmIGlzX2luZmluaXRlX29yX3plcm8gKGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGUpKQorLSMgZW5kaWYKKy0jIGlmIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFCistCQkJIHx8IGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9MT05HRE9VQkxFCistIyBlbGlmIE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFCistCQkJIHx8IChhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlID09IFRZUEVfTE9OR0RPVUJMRQorLQkJCSAgICAgLyogU29tZSBzeXN0ZW1zIHByb2R1Y2Ugd3Jvbmcgb3V0cHV0IGZvciBJbmYsCistCQkJCS1JbmYsIGFuZCBOYU4uICAqLworLQkJCSAgICAgJiYgaXNfaW5maW5pdGVsIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZSkpCistIyBlbmRpZgorLQkJCSkpCistCSAgICAgIHsKKy0jIGlmIChORUVEX1BSSU5URl9ET1VCTEUgfHwgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFKSAmJiAoTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgfHwgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUpCistCQlhcmdfdHlwZSB0eXBlID0gYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZTsKKy0jIGVuZGlmCistCQlpbnQgZmxhZ3MgPSBkcC0+ZmxhZ3M7CistCQlpbnQgaGFzX3dpZHRoOworLQkJc2l6ZV90IHdpZHRoOworLQkJaW50IGhhc19wcmVjaXNpb247CistCQlzaXplX3QgcHJlY2lzaW9uOworLQkJc2l6ZV90IHRtcF9sZW5ndGg7CistCQlEQ0hBUl9UIHRtcGJ1Zls3MDBdOworLQkJRENIQVJfVCAqdG1wOworLQkJRENIQVJfVCAqcGFkX3B0cjsKKy0JCURDSEFSX1QgKnA7CistCistCQloYXNfd2lkdGggPSAwOworLQkJd2lkdGggPSAwOworLQkJaWYgKGRwLT53aWR0aF9zdGFydCAhPSBkcC0+d2lkdGhfZW5kKQorLQkJICB7CistCQkgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCistCQkgICAgICB7CistCQkJaW50IGFyZzsKKy0KKy0JCQlpZiAoIShhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKKy0JCQkgIGFib3J0ICgpOworLQkJCWFyZyA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CistCQkJaWYgKGFyZyA8IDApCistCQkJICB7CistCQkJICAgIC8qICJBIG5lZ2F0aXZlIGZpZWxkIHdpZHRoIGlzIHRha2VuIGFzIGEgJy0nIGZsYWcKKy0JCQkgICAgICAgIGZvbGxvd2VkIGJ5IGEgcG9zaXRpdmUgZmllbGQgd2lkdGguIiAgKi8KKy0JCQkgICAgZmxhZ3MgfD0gRkxBR19MRUZUOworLQkJCSAgICB3aWR0aCA9ICh1bnNpZ25lZCBpbnQpICgtYXJnKTsKKy0JCQkgIH0KKy0JCQllbHNlCistCQkJICB3aWR0aCA9IGFyZzsKKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlCistCQkgICAgICB7CistCQkJY29uc3QgRkNIQVJfVCAqZGlnaXRwID0gZHAtPndpZHRoX3N0YXJ0OworLQorLQkJCWRvCistCQkJICB3aWR0aCA9IHhzdW0gKHh0aW1lcyAod2lkdGgsIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKy0JCQl3aGlsZSAoZGlnaXRwICE9IGRwLT53aWR0aF9lbmQpOworLQkJICAgICAgfQorLQkJICAgIGhhc193aWR0aCA9IDE7CistCQkgIH0KKy0KKy0JCWhhc19wcmVjaXNpb24gPSAwOworLQkJcHJlY2lzaW9uID0gMDsKKy0JCWlmIChkcC0+cHJlY2lzaW9uX3N0YXJ0ICE9IGRwLT5wcmVjaXNpb25fZW5kKQorLQkJICB7CistCQkgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ICE9IEFSR19OT05FKQorLQkJICAgICAgeworLQkJCWludCBhcmc7CistCistCQkJaWYgKCEoYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorLQkJCSAgYWJvcnQgKCk7CistCQkJYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CistCQkJLyogIkEgbmVnYXRpdmUgcHJlY2lzaW9uIGlzIHRha2VuIGFzIGlmIHRoZSBwcmVjaXNpb24KKy0JCQkgICAgd2VyZSBvbWl0dGVkLiIgICovCistCQkJaWYgKGFyZyA+PSAwKQorLQkJCSAgeworLQkJCSAgICBwcmVjaXNpb24gPSBhcmc7CistCQkJICAgIGhhc19wcmVjaXNpb24gPSAxOworLQkJCSAgfQorLQkJICAgICAgfQorLQkJICAgIGVsc2UKKy0JCSAgICAgIHsKKy0JCQljb25zdCBGQ0hBUl9UICpkaWdpdHAgPSBkcC0+cHJlY2lzaW9uX3N0YXJ0ICsgMTsKKy0KKy0JCQlwcmVjaXNpb24gPSAwOworLQkJCXdoaWxlIChkaWdpdHAgIT0gZHAtPnByZWNpc2lvbl9lbmQpCistCQkJICBwcmVjaXNpb24gPSB4c3VtICh4dGltZXMgKHByZWNpc2lvbiwgMTApLCAqZGlnaXRwKysgLSAnMCcpOworLQkJCWhhc19wcmVjaXNpb24gPSAxOworLQkJICAgICAgfQorLQkJICB9CistCistCQkvKiBQT1NJWCBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIHRvIGJlIDYgZm9yICVmLCAlRiwKKy0JCSAgICVlLCAlRSwgYnV0IG5vdCBmb3IgJWcsICVHLiAgSW1wbGVtZW50YXRpb25zIGFwcGVhciB0byB1c2UKKy0JCSAgIHRoZSBzYW1lIGRlZmF1bHQgcHJlY2lzaW9uIGFsc28gZm9yICVnLCAlRy4gICovCistCQlpZiAoIWhhc19wcmVjaXNpb24pCistCQkgIHByZWNpc2lvbiA9IDY7CistCistCQkvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplLiAgKi8KKy0jIGlmIE5FRURfUFJJTlRGX0RPVUJMRSAmJiBORUVEX1BSSU5URl9MT05HX0RPVUJMRQorLQkJdG1wX2xlbmd0aCA9ICh0eXBlID09IFRZUEVfTE9OR0RPVUJMRSA/IExEQkxfRElHICsgMSA6IERCTF9ESUcgKyAxKTsKKy0jIGVsaWYgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFICYmIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFCistCQl0bXBfbGVuZ3RoID0gKHR5cGUgPT0gVFlQRV9MT05HRE9VQkxFID8gTERCTF9ESUcgKyAxIDogMCk7CistIyBlbGlmIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFCistCQl0bXBfbGVuZ3RoID0gTERCTF9ESUcgKyAxOworLSMgZWxpZiBORUVEX1BSSU5URl9ET1VCTEUKKy0JCXRtcF9sZW5ndGggPSBEQkxfRElHICsgMTsKKy0jIGVsc2UKKy0JCXRtcF9sZW5ndGggPSAwOworLSMgZW5kaWYKKy0JCWlmICh0bXBfbGVuZ3RoIDwgcHJlY2lzaW9uKQorLQkJICB0bXBfbGVuZ3RoID0gcHJlY2lzaW9uOworLSMgaWYgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUKKy0jICBpZiBORUVEX1BSSU5URl9ET1VCTEUgfHwgTkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFCistCQlpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCistIyAgZW5kaWYKKy0JCSAgaWYgKGRwLT5jb252ZXJzaW9uID09ICdmJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRicpCistCQkgICAgeworLQkJICAgICAgbG9uZyBkb3VibGUgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdkb3VibGU7CistCQkgICAgICBpZiAoIShpc25hbmwgKGFyZykgfHwgYXJnICsgYXJnID09IGFyZykpCistCQkJeworLQkJCSAgLyogYXJnIGlzIGZpbml0ZSBhbmQgbm9uemVyby4gICovCistCQkJICBpbnQgZXhwb25lbnQgPSBmbG9vcmxvZzEwbCAoYXJnIDwgMCA/IC1hcmcgOiBhcmcpOworLQkJCSAgaWYgKGV4cG9uZW50ID49IDAgJiYgdG1wX2xlbmd0aCA8IGV4cG9uZW50ICsgcHJlY2lzaW9uKQorLQkJCSAgICB0bXBfbGVuZ3RoID0gZXhwb25lbnQgKyBwcmVjaXNpb247CistCQkJfQorLQkJICAgIH0KKy0jIGVuZGlmCistIyBpZiBORUVEX1BSSU5URl9ET1VCTEUKKy0jICBpZiBORUVEX1BSSU5URl9MT05HX0RPVUJMRSB8fCBORUVEX1BSSU5URl9JTkZJTklURV9MT05HX0RPVUJMRQorLQkJaWYgKHR5cGUgPT0gVFlQRV9ET1VCTEUpCistIyAgZW5kaWYKKy0JCSAgaWYgKGRwLT5jb252ZXJzaW9uID09ICdmJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRicpCistCQkgICAgeworLQkJICAgICAgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGU7CistCQkgICAgICBpZiAoIShpc25hbiAoYXJnKSB8fCBhcmcgKyBhcmcgPT0gYXJnKSkKKy0JCQl7CistCQkJICAvKiBhcmcgaXMgZmluaXRlIGFuZCBub256ZXJvLiAgKi8KKy0JCQkgIGludCBleHBvbmVudCA9IGZsb29ybG9nMTAgKGFyZyA8IDAgPyAtYXJnIDogYXJnKTsKKy0JCQkgIGlmIChleHBvbmVudCA+PSAwICYmIHRtcF9sZW5ndGggPCBleHBvbmVudCArIHByZWNpc2lvbikKKy0JCQkgICAgdG1wX2xlbmd0aCA9IGV4cG9uZW50ICsgcHJlY2lzaW9uOworLQkJCX0KKy0JCSAgICB9CistIyBlbmRpZgorLQkJLyogQWNjb3VudCBmb3Igc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCistCQl0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgMTIpOworLQorLQkJaWYgKHRtcF9sZW5ndGggPCB3aWR0aCkKKy0JCSAgdG1wX2xlbmd0aCA9IHdpZHRoOworLQorLQkJdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEpOyAvKiBhY2NvdW50IGZvciB0cmFpbGluZyBOVUwgKi8KKy0KKy0JCWlmICh0bXBfbGVuZ3RoIDw9IHNpemVvZiAodG1wYnVmKSAvIHNpemVvZiAoRENIQVJfVCkpCistCQkgIHRtcCA9IHRtcGJ1ZjsKKy0JCWVsc2UKKy0JCSAgeworLQkJICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChEQ0hBUl9UKSk7CistCistCQkgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAodG1wX21lbXNpemUpKQorLQkJICAgICAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCistCQkgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CistCQkgICAgdG1wID0gKERDSEFSX1QgKikgbWFsbG9jICh0bXBfbWVtc2l6ZSk7CistCQkgICAgaWYgKHRtcCA9PSBOVUxMKQorLQkJICAgICAgLyogT3V0IG9mIG1lbW9yeS4gICovCistCQkgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CistCQkgIH0KKy0KKy0JCXBhZF9wdHIgPSBOVUxMOworLQkJcCA9IHRtcDsKKy0KKy0jIGlmIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFCistIyAgaWYgTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRQorLQkJaWYgKHR5cGUgPT0gVFlQRV9MT05HRE9VQkxFKQorLSMgIGVuZGlmCistCQkgIHsKKy0JCSAgICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKKy0KKy0JCSAgICBpZiAoaXNuYW5sIChhcmcpKQorLQkJICAgICAgeworLQkJCWlmIChkcC0+Y29udmVyc2lvbiA+PSAnQScgJiYgZHAtPmNvbnZlcnNpb24gPD0gJ1onKQorLQkJCSAgeworLQkJCSAgICAqcCsrID0gJ04nOyAqcCsrID0gJ0EnOyAqcCsrID0gJ04nOworLQkJCSAgfQorLQkJCWVsc2UKKy0JCQkgIHsKKy0JCQkgICAgKnArKyA9ICduJzsgKnArKyA9ICdhJzsgKnArKyA9ICduJzsKKy0JCQkgIH0KKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlCistCQkgICAgICB7CistCQkJaW50IHNpZ24gPSAwOworLQkJCURFQ0xfTE9OR19ET1VCTEVfUk9VTkRJTkcKKy0KKy0JCQlCRUdJTl9MT05HX0RPVUJMRV9ST1VORElORyAoKTsKKy0KKy0JCQlpZiAoc2lnbmJpdCAoYXJnKSkgLyogYXJnIDwgMC4wTCBvciBuZWdhdGl2ZSB6ZXJvICovCistCQkJICB7CistCQkJICAgIHNpZ24gPSAtMTsKKy0JCQkgICAgYXJnID0gLWFyZzsKKy0JCQkgIH0KKy0KKy0JCQlpZiAoc2lnbiA8IDApCistCQkJICAqcCsrID0gJy0nOworLQkJCWVsc2UgaWYgKGZsYWdzICYgRkxBR19TSE9XU0lHTikKKy0JCQkgICpwKysgPSAnKyc7CistCQkJZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1NQQUNFKQorLQkJCSAgKnArKyA9ICcgJzsKKy0KKy0JCQlpZiAoYXJnID4gMC4wTCAmJiBhcmcgKyBhcmcgPT0gYXJnKQorLQkJCSAgeworLQkJCSAgICBpZiAoZHAtPmNvbnZlcnNpb24gPj0gJ0EnICYmIGRwLT5jb252ZXJzaW9uIDw9ICdaJykKKy0JCQkgICAgICB7CistCQkJCSpwKysgPSAnSSc7ICpwKysgPSAnTic7ICpwKysgPSAnRic7CistCQkJICAgICAgfQorLQkJCSAgICBlbHNlCistCQkJICAgICAgeworLQkJCQkqcCsrID0gJ2knOyAqcCsrID0gJ24nOyAqcCsrID0gJ2YnOworLQkJCSAgICAgIH0KKy0JCQkgIH0KKy0JCQllbHNlCistCQkJICB7CistIyAgaWYgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUKKy0JCQkgICAgcGFkX3B0ciA9IHA7CistCistCQkJICAgIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnZicgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0YnKQorLQkJCSAgICAgIHsKKy0JCQkJY2hhciAqZGlnaXRzOworLQkJCQlzaXplX3QgbmRpZ2l0czsKKy0KKy0JCQkJZGlnaXRzID0KKy0JCQkJICBzY2FsZTEwX3JvdW5kX2RlY2ltYWxfbG9uZ19kb3VibGUgKGFyZywgcHJlY2lzaW9uKTsKKy0JCQkJaWYgKGRpZ2l0cyA9PSBOVUxMKQorLQkJCQkgIHsKKy0JCQkJICAgIEVORF9MT05HX0RPVUJMRV9ST1VORElORyAoKTsKKy0JCQkJICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKy0JCQkJICB9CistCQkJCW5kaWdpdHMgPSBzdHJsZW4gKGRpZ2l0cyk7CistCistCQkJCWlmIChuZGlnaXRzID4gcHJlY2lzaW9uKQorLQkJCQkgIGRvCistCQkJCSAgICB7CistCQkJCSAgICAgIC0tbmRpZ2l0czsKKy0JCQkJICAgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKy0JCQkJICAgIH0KKy0JCQkJICB3aGlsZSAobmRpZ2l0cyA+IHByZWNpc2lvbik7CistCQkJCWVsc2UKKy0JCQkJICAqcCsrID0gJzAnOworLQkJCQkvKiBIZXJlIG5kaWdpdHMgPD0gcHJlY2lzaW9uLiAgKi8KKy0JCQkJaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBwcmVjaXNpb24gPiAwKQorLQkJCQkgIHsKKy0JCQkJICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CistCQkJCSAgICBmb3IgKDsgcHJlY2lzaW9uID4gbmRpZ2l0czsgcHJlY2lzaW9uLS0pCistCQkJCSAgICAgICpwKysgPSAnMCc7CistCQkJCSAgICB3aGlsZSAobmRpZ2l0cyA+IDApCistCQkJCSAgICAgIHsKKy0JCQkJCS0tbmRpZ2l0czsKKy0JCQkJCSpwKysgPSBkaWdpdHNbbmRpZ2l0c107CistCQkJCSAgICAgIH0KKy0JCQkJICB9CistCistCQkJCWZyZWUgKGRpZ2l0cyk7CistCQkJICAgICAgfQorLQkJCSAgICBlbHNlIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnZScgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0UnKQorLQkJCSAgICAgIHsKKy0JCQkJaW50IGV4cG9uZW50OworLQorLQkJCQlpZiAoYXJnID09IDAuMEwpCistCQkJCSAgeworLQkJCQkgICAgZXhwb25lbnQgPSAwOworLQkJCQkgICAgKnArKyA9ICcwJzsKKy0JCQkJICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgcHJlY2lzaW9uID4gMCkKKy0JCQkJICAgICAgeworLQkJCQkJKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKy0JCQkJCWZvciAoOyBwcmVjaXNpb24gPiAwOyBwcmVjaXNpb24tLSkKKy0JCQkJCSAgKnArKyA9ICcwJzsKKy0JCQkJICAgICAgfQorLQkJCQkgIH0KKy0JCQkJZWxzZQorLQkJCQkgIHsKKy0JCQkJICAgIC8qIGFyZyA+IDAuMEwuICAqLworLQkJCQkgICAgaW50IGFkanVzdGVkOworLQkJCQkgICAgY2hhciAqZGlnaXRzOworLQkJCQkgICAgc2l6ZV90IG5kaWdpdHM7CistCistCQkJCSAgICBleHBvbmVudCA9IGZsb29ybG9nMTBsIChhcmcpOworLQkJCQkgICAgYWRqdXN0ZWQgPSAwOworLQkJCQkgICAgZm9yICg7OykKKy0JCQkJICAgICAgeworLQkJCQkJZGlnaXRzID0KKy0JCQkJCSAgc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2xvbmdfZG91YmxlIChhcmcsCistCQkJCQkJCQkJICAgICAoaW50KXByZWNpc2lvbiAtIGV4cG9uZW50KTsKKy0JCQkJCWlmIChkaWdpdHMgPT0gTlVMTCkKKy0JCQkJCSAgeworLQkJCQkJICAgIEVORF9MT05HX0RPVUJMRV9ST1VORElORyAoKTsKKy0JCQkJCSAgICBnb3RvIG91dF9vZl9tZW1vcnk7CistCQkJCQkgIH0KKy0JCQkJCW5kaWdpdHMgPSBzdHJsZW4gKGRpZ2l0cyk7CistCistCQkJCQlpZiAobmRpZ2l0cyA9PSBwcmVjaXNpb24gKyAxKQorLQkJCQkJICBicmVhazsKKy0JCQkJCWlmIChuZGlnaXRzIDwgcHJlY2lzaW9uCistCQkJCQkgICAgfHwgbmRpZ2l0cyA+IHByZWNpc2lvbiArIDIpCistCQkJCQkgIC8qIFRoZSBleHBvbmVudCB3YXMgbm90IGd1ZXNzZWQKKy0JCQkJCSAgICAgcHJlY2lzZWx5IGVub3VnaC4gICovCistCQkJCQkgIGFib3J0ICgpOworLQkJCQkJaWYgKGFkanVzdGVkKQorLQkJCQkJICAvKiBOb25lIG9mIHR3byB2YWx1ZXMgb2YgZXhwb25lbnQgaXMKKy0JCQkJCSAgICAgdGhlIHJpZ2h0IG9uZS4gIFByZXZlbnQgYW4gZW5kbGVzcworLQkJCQkJICAgICBsb29wLiAgKi8KKy0JCQkJCSAgYWJvcnQgKCk7CistCQkJCQlmcmVlIChkaWdpdHMpOworLQkJCQkJaWYgKG5kaWdpdHMgPT0gcHJlY2lzaW9uKQorLQkJCQkJICBleHBvbmVudCAtPSAxOworLQkJCQkJZWxzZQorLQkJCQkJICBleHBvbmVudCArPSAxOworLQkJCQkJYWRqdXN0ZWQgPSAxOworLQkJCQkgICAgICB9CistCistCQkJCSAgICAvKiBIZXJlIG5kaWdpdHMgPSBwcmVjaXNpb24rMS4gICovCistCQkJCSAgICAqcCsrID0gZGlnaXRzWy0tbmRpZ2l0c107CistCQkJCSAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpIHx8IHByZWNpc2lvbiA+IDApCistCQkJCSAgICAgIHsKKy0JCQkJCSpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CistCQkJCQl3aGlsZSAobmRpZ2l0cyA+IDApCistCQkJCQkgIHsKKy0JCQkJCSAgICAtLW5kaWdpdHM7CistCQkJCQkgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKy0JCQkJCSAgfQorLQkJCQkgICAgICB9CistCistCQkJCSAgICBmcmVlIChkaWdpdHMpOworLQkJCQkgIH0KKy0KKy0JCQkJKnArKyA9IGRwLT5jb252ZXJzaW9uOyAvKiAnZScgb3IgJ0UnICovCistIyAgIGlmIFdJREVfQ0hBUl9WRVJTSU9OCistCQkJCXsKKy0JCQkJICBzdGF0aWMgY29uc3Qgd2NoYXJfdCBkZWNpbWFsX2Zvcm1hdFtdID0KKy0JCQkJICAgIHsgJyUnLCAnKycsICcuJywgJzInLCAnZCcsICdcMCcgfTsKKy0JCQkJICBTTlBSSU5URiAocCwgNiArIDEsIGRlY2ltYWxfZm9ybWF0LCBleHBvbmVudCk7CistCQkJCX0KKy0JCQkJd2hpbGUgKCpwICE9ICdcMCcpCistCQkJCSAgcCsrOworLSMgICBlbHNlCistCQkJCWlmIChzaXplb2YgKERDSEFSX1QpID09IDEpCistCQkJCSAgeworLQkJCQkgICAgc3ByaW50ZiAoKGNoYXIgKikgcCwgIiUrLjJkIiwgZXhwb25lbnQpOworLQkJCQkgICAgd2hpbGUgKCpwICE9ICdcMCcpCistCQkJCSAgICAgIHArKzsKKy0JCQkJICB9CistCQkJCWVsc2UKKy0JCQkJICB7CistCQkJCSAgICBjaGFyIGV4cGJ1Zls2ICsgMV07CistCQkJCSAgICBjb25zdCBjaGFyICplcDsKKy0JCQkJICAgIHNwcmludGYgKGV4cGJ1ZiwgIiUrLjJkIiwgZXhwb25lbnQpOworLQkJCQkgICAgZm9yIChlcCA9IGV4cGJ1ZjsgKCpwID0gKmVwKSAhPSAnXDAnOyBlcCsrKQorLQkJCQkgICAgICBwKys7CistCQkJCSAgfQorLSMgICBlbmRpZgorLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZSBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2cnIHx8IGRwLT5jb252ZXJzaW9uID09ICdHJykKKy0JCQkgICAgICB7CistCQkJCWlmIChwcmVjaXNpb24gPT0gMCkKKy0JCQkJICBwcmVjaXNpb24gPSAxOworLQkJCQkvKiBwcmVjaXNpb24gPj0gMS4gICovCistCistCQkJCWlmIChhcmcgPT0gMC4wTCkKKy0JCQkJICAvKiBUaGUgZXhwb25lbnQgaXMgMCwgPj0gLTQsIDwgcHJlY2lzaW9uLgorLQkJCQkgICAgIFVzZSBmaXhlZC1wb2ludCBub3RhdGlvbi4gICovCistCQkJCSAgeworLQkJCQkgICAgc2l6ZV90IG5kaWdpdHMgPSBwcmVjaXNpb247CistCQkJCSAgICAvKiBOdW1iZXIgb2YgdHJhaWxpbmcgemVyb2VzIHRoYXQgaGF2ZSB0byBiZQorLQkJCQkgICAgICAgZHJvcHBlZC4gICovCistCQkJCSAgICBzaXplX3Qgbnplcm9lcyA9CistCQkJCSAgICAgIChmbGFncyAmIEZMQUdfQUxUID8gMCA6IHByZWNpc2lvbiAtIDEpOworLQorLQkJCQkgICAgLS1uZGlnaXRzOworLQkJCQkgICAgKnArKyA9ICcwJzsKKy0JCQkJICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgbmRpZ2l0cyA+IG56ZXJvZXMpCistCQkJCSAgICAgIHsKKy0JCQkJCSpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CistCQkJCQl3aGlsZSAobmRpZ2l0cyA+IG56ZXJvZXMpCistCQkJCQkgIHsKKy0JCQkJCSAgICAtLW5kaWdpdHM7CistCQkJCQkgICAgKnArKyA9ICcwJzsKKy0JCQkJCSAgfQorLQkJCQkgICAgICB9CistCQkJCSAgfQorLQkJCQllbHNlCistCQkJCSAgeworLQkJCQkgICAgLyogYXJnID4gMC4wTC4gICovCistCQkJCSAgICBpbnQgZXhwb25lbnQ7CistCQkJCSAgICBpbnQgYWRqdXN0ZWQ7CistCQkJCSAgICBjaGFyICpkaWdpdHM7CistCQkJCSAgICBzaXplX3QgbmRpZ2l0czsKKy0JCQkJICAgIHNpemVfdCBuemVyb2VzOworLQorLQkJCQkgICAgZXhwb25lbnQgPSBmbG9vcmxvZzEwbCAoYXJnKTsKKy0JCQkJICAgIGFkanVzdGVkID0gMDsKKy0JCQkJICAgIGZvciAoOzspCistCQkJCSAgICAgIHsKKy0JCQkJCWRpZ2l0cyA9CistCQkJCQkgIHNjYWxlMTBfcm91bmRfZGVjaW1hbF9sb25nX2RvdWJsZSAoYXJnLAorLQkJCQkJCQkJCSAgICAgKGludCkocHJlY2lzaW9uIC0gMSkgLSBleHBvbmVudCk7CistCQkJCQlpZiAoZGlnaXRzID09IE5VTEwpCistCQkJCQkgIHsKKy0JCQkJCSAgICBFTkRfTE9OR19ET1VCTEVfUk9VTkRJTkcgKCk7CistCQkJCQkgICAgZ290byBvdXRfb2ZfbWVtb3J5OworLQkJCQkJICB9CistCQkJCQluZGlnaXRzID0gc3RybGVuIChkaWdpdHMpOworLQorLQkJCQkJaWYgKG5kaWdpdHMgPT0gcHJlY2lzaW9uKQorLQkJCQkJICBicmVhazsKKy0JCQkJCWlmIChuZGlnaXRzIDwgcHJlY2lzaW9uIC0gMQorLQkJCQkJICAgIHx8IG5kaWdpdHMgPiBwcmVjaXNpb24gKyAxKQorLQkJCQkJICAvKiBUaGUgZXhwb25lbnQgd2FzIG5vdCBndWVzc2VkCistCQkJCQkgICAgIHByZWNpc2VseSBlbm91Z2guICAqLworLQkJCQkJICBhYm9ydCAoKTsKKy0JCQkJCWlmIChhZGp1c3RlZCkKKy0JCQkJCSAgLyogTm9uZSBvZiB0d28gdmFsdWVzIG9mIGV4cG9uZW50IGlzCistCQkJCQkgICAgIHRoZSByaWdodCBvbmUuICBQcmV2ZW50IGFuIGVuZGxlc3MKKy0JCQkJCSAgICAgbG9vcC4gICovCistCQkJCQkgIGFib3J0ICgpOworLQkJCQkJZnJlZSAoZGlnaXRzKTsKKy0JCQkJCWlmIChuZGlnaXRzIDwgcHJlY2lzaW9uKQorLQkJCQkJICBleHBvbmVudCAtPSAxOworLQkJCQkJZWxzZQorLQkJCQkJICBleHBvbmVudCArPSAxOworLQkJCQkJYWRqdXN0ZWQgPSAxOworLQkJCQkgICAgICB9CistCQkJCSAgICAvKiBIZXJlIG5kaWdpdHMgPSBwcmVjaXNpb24uICAqLworLQorLQkJCQkgICAgLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb2VzCistCQkJCSAgICAgICB0aGF0IGhhdmUgdG8gYmUgZHJvcHBlZC4gICovCistCQkJCSAgICBuemVyb2VzID0gMDsKKy0JCQkJICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgPT0gMCkKKy0JCQkJICAgICAgd2hpbGUgKG56ZXJvZXMgPCBuZGlnaXRzCistCQkJCQkgICAgICYmIGRpZ2l0c1tuemVyb2VzXSA9PSAnMCcpCistCQkJCQluemVyb2VzKys7CistCistCQkJCSAgICAvKiBUaGUgZXhwb25lbnQgaXMgbm93IGRldGVybWluZWQuICAqLworLQkJCQkgICAgaWYgKGV4cG9uZW50ID49IC00CistCQkJCQkmJiBleHBvbmVudCA8IChsb25nKXByZWNpc2lvbikKKy0JCQkJICAgICAgeworLQkJCQkJLyogRml4ZWQtcG9pbnQgbm90YXRpb246CistCQkJCQkgICBtYXgoZXhwb25lbnQsMCkrMSBkaWdpdHMsIHRoZW4gdGhlCistCQkJCQkgICBkZWNpbWFsIHBvaW50LCB0aGVuIHRoZSByZW1haW5pbmcKKy0JCQkJCSAgIGRpZ2l0cyB3aXRob3V0IHRyYWlsaW5nIHplcm9lcy4gICovCistCQkJCQlpZiAoZXhwb25lbnQgPj0gMCkKKy0JCQkJCSAgeworLQkJCQkJICAgIHNpemVfdCBjb3VudCA9IGV4cG9uZW50ICsgMTsKKy0JCQkJCSAgICAvKiBOb3RlOiBjb3VudCA8PSBwcmVjaXNpb24gPSBuZGlnaXRzLiAgKi8KKy0JCQkJCSAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKQorLQkJCQkJICAgICAgKnArKyA9IGRpZ2l0c1stLW5kaWdpdHNdOworLQkJCQkJICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgbmRpZ2l0cyA+IG56ZXJvZXMpCistCQkJCQkgICAgICB7CistCQkJCQkJKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKy0JCQkJCQl3aGlsZSAobmRpZ2l0cyA+IG56ZXJvZXMpCistCQkJCQkJICB7CistCQkJCQkJICAgIC0tbmRpZ2l0czsKKy0JCQkJCQkgICAgKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKy0JCQkJCQkgIH0KKy0JCQkJCSAgICAgIH0KKy0JCQkJCSAgfQorLQkJCQkJZWxzZQorLQkJCQkJICB7CistCQkJCQkgICAgc2l6ZV90IGNvdW50ID0gLWV4cG9uZW50IC0gMTsKKy0JCQkJCSAgICAqcCsrID0gJzAnOworLQkJCQkJICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CistCQkJCQkgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkKKy0JCQkJCSAgICAgICpwKysgPSAnMCc7CistCQkJCQkgICAgd2hpbGUgKG5kaWdpdHMgPiBuemVyb2VzKQorLQkJCQkJICAgICAgeworLQkJCQkJCS0tbmRpZ2l0czsKKy0JCQkJCQkqcCsrID0gZGlnaXRzW25kaWdpdHNdOworLQkJCQkJICAgICAgfQorLQkJCQkJICB9CistCQkJCSAgICAgIH0KKy0JCQkJICAgIGVsc2UKKy0JCQkJICAgICAgeworLQkJCQkJLyogRXhwb25lbnRpYWwgbm90YXRpb24uICAqLworLQkJCQkJKnArKyA9IGRpZ2l0c1stLW5kaWdpdHNdOworLQkJCQkJaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBuZGlnaXRzID4gbnplcm9lcykKKy0JCQkJCSAgeworLQkJCQkJICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CistCQkJCQkgICAgd2hpbGUgKG5kaWdpdHMgPiBuemVyb2VzKQorLQkJCQkJICAgICAgeworLQkJCQkJCS0tbmRpZ2l0czsKKy0JCQkJCQkqcCsrID0gZGlnaXRzW25kaWdpdHNdOworLQkJCQkJICAgICAgfQorLQkJCQkJICB9CistCQkJCQkqcCsrID0gZHAtPmNvbnZlcnNpb24gLSAnRycgKyAnRSc7IC8qICdlJyBvciAnRScgKi8KKy0jICAgaWYgV0lERV9DSEFSX1ZFUlNJT04KKy0JCQkJCXsKKy0JCQkJCSAgc3RhdGljIGNvbnN0IHdjaGFyX3QgZGVjaW1hbF9mb3JtYXRbXSA9CistCQkJCQkgICAgeyAnJScsICcrJywgJy4nLCAnMicsICdkJywgJ1wwJyB9OworLQkJCQkJICBTTlBSSU5URiAocCwgNiArIDEsIGRlY2ltYWxfZm9ybWF0LCBleHBvbmVudCk7CistCQkJCQl9CistCQkJCQl3aGlsZSAoKnAgIT0gJ1wwJykKKy0JCQkJCSAgcCsrOworLSMgICBlbHNlCistCQkJCQlpZiAoc2l6ZW9mIChEQ0hBUl9UKSA9PSAxKQorLQkJCQkJICB7CistCQkJCQkgICAgc3ByaW50ZiAoKGNoYXIgKikgcCwgIiUrLjJkIiwgZXhwb25lbnQpOworLQkJCQkJICAgIHdoaWxlICgqcCAhPSAnXDAnKQorLQkJCQkJICAgICAgcCsrOworLQkJCQkJICB9CistCQkJCQllbHNlCistCQkJCQkgIHsKKy0JCQkJCSAgICBjaGFyIGV4cGJ1Zls2ICsgMV07CistCQkJCQkgICAgY29uc3QgY2hhciAqZXA7CistCQkJCQkgICAgc3ByaW50ZiAoZXhwYnVmLCAiJSsuMmQiLCBleHBvbmVudCk7CistCQkJCQkgICAgZm9yIChlcCA9IGV4cGJ1ZjsgKCpwID0gKmVwKSAhPSAnXDAnOyBlcCsrKQorLQkJCQkJICAgICAgcCsrOworLQkJCQkJICB9CistIyAgIGVuZGlmCistCQkJCSAgICAgIH0KKy0KKy0JCQkJICAgIGZyZWUgKGRpZ2l0cyk7CistCQkJCSAgfQorLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZQorLQkJCSAgICAgIGFib3J0ICgpOworLSMgIGVsc2UKKy0JCQkgICAgLyogYXJnIGlzIGZpbml0ZS4gICovCistCQkJICAgIGFib3J0ICgpOworLSMgIGVuZGlmCistCQkJICB9CistCistCQkJRU5EX0xPTkdfRE9VQkxFX1JPVU5ESU5HICgpOworLQkJICAgICAgfQorLQkJICB9CistIyAgaWYgTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRQorLQkJZWxzZQorLSMgIGVuZGlmCistIyBlbmRpZgorLSMgaWYgTkVFRF9QUklOVEZfRE9VQkxFIHx8IE5FRURfUFJJTlRGX0lORklOSVRFX0RPVUJMRQorLQkJICB7CistCQkgICAgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGU7CistCistCQkgICAgaWYgKGlzbmFuIChhcmcpKQorLQkJICAgICAgeworLQkJCWlmIChkcC0+Y29udmVyc2lvbiA+PSAnQScgJiYgZHAtPmNvbnZlcnNpb24gPD0gJ1onKQorLQkJCSAgeworLQkJCSAgICAqcCsrID0gJ04nOyAqcCsrID0gJ0EnOyAqcCsrID0gJ04nOworLQkJCSAgfQorLQkJCWVsc2UKKy0JCQkgIHsKKy0JCQkgICAgKnArKyA9ICduJzsgKnArKyA9ICdhJzsgKnArKyA9ICduJzsKKy0JCQkgIH0KKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlCistCQkgICAgICB7CistCQkJaW50IHNpZ24gPSAwOworLQorLQkJCWlmIChzaWduYml0IChhcmcpKSAvKiBhcmcgPCAwLjAgb3IgbmVnYXRpdmUgemVybyAqLworLQkJCSAgeworLQkJCSAgICBzaWduID0gLTE7CistCQkJICAgIGFyZyA9IC1hcmc7CistCQkJICB9CistCistCQkJaWYgKHNpZ24gPCAwKQorLQkJCSAgKnArKyA9ICctJzsKKy0JCQllbHNlIGlmIChmbGFncyAmIEZMQUdfU0hPV1NJR04pCistCQkJICAqcCsrID0gJysnOworLQkJCWVsc2UgaWYgKGZsYWdzICYgRkxBR19TUEFDRSkKKy0JCQkgICpwKysgPSAnICc7CistCistCQkJaWYgKGFyZyA+IDAuMCAmJiBhcmcgKyBhcmcgPT0gYXJnKQorLQkJCSAgeworLQkJCSAgICBpZiAoZHAtPmNvbnZlcnNpb24gPj0gJ0EnICYmIGRwLT5jb252ZXJzaW9uIDw9ICdaJykKKy0JCQkgICAgICB7CistCQkJCSpwKysgPSAnSSc7ICpwKysgPSAnTic7ICpwKysgPSAnRic7CistCQkJICAgICAgfQorLQkJCSAgICBlbHNlCistCQkJICAgICAgeworLQkJCQkqcCsrID0gJ2knOyAqcCsrID0gJ24nOyAqcCsrID0gJ2YnOworLQkJCSAgICAgIH0KKy0JCQkgIH0KKy0JCQllbHNlCistCQkJICB7CistIyAgaWYgTkVFRF9QUklOVEZfRE9VQkxFCistCQkJICAgIHBhZF9wdHIgPSBwOworLQorLQkJCSAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2YnIHx8IGRwLT5jb252ZXJzaW9uID09ICdGJykKKy0JCQkgICAgICB7CistCQkJCWNoYXIgKmRpZ2l0czsKKy0JCQkJc2l6ZV90IG5kaWdpdHM7CistCistCQkJCWRpZ2l0cyA9CistCQkJCSAgc2NhbGUxMF9yb3VuZF9kZWNpbWFsX2RvdWJsZSAoYXJnLCBwcmVjaXNpb24pOworLQkJCQlpZiAoZGlnaXRzID09IE5VTEwpCistCQkJCSAgZ290byBvdXRfb2ZfbWVtb3J5OworLQkJCQluZGlnaXRzID0gc3RybGVuIChkaWdpdHMpOworLQorLQkJCQlpZiAobmRpZ2l0cyA+IHByZWNpc2lvbikKKy0JCQkJICBkbworLQkJCQkgICAgeworLQkJCQkgICAgICAtLW5kaWdpdHM7CistCQkJCSAgICAgICpwKysgPSBkaWdpdHNbbmRpZ2l0c107CistCQkJCSAgICB9CistCQkJCSAgd2hpbGUgKG5kaWdpdHMgPiBwcmVjaXNpb24pOworLQkJCQllbHNlCistCQkJCSAgKnArKyA9ICcwJzsKKy0JCQkJLyogSGVyZSBuZGlnaXRzIDw9IHByZWNpc2lvbi4gICovCistCQkJCWlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgcHJlY2lzaW9uID4gMCkKKy0JCQkJICB7CistCQkJCSAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworLQkJCQkgICAgZm9yICg7IHByZWNpc2lvbiA+IG5kaWdpdHM7IHByZWNpc2lvbi0tKQorLQkJCQkgICAgICAqcCsrID0gJzAnOworLQkJCQkgICAgd2hpbGUgKG5kaWdpdHMgPiAwKQorLQkJCQkgICAgICB7CistCQkJCQktLW5kaWdpdHM7CistCQkJCQkqcCsrID0gZGlnaXRzW25kaWdpdHNdOworLQkJCQkgICAgICB9CistCQkJCSAgfQorLQorLQkJCQlmcmVlIChkaWdpdHMpOworLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZSBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2UnIHx8IGRwLT5jb252ZXJzaW9uID09ICdFJykKKy0JCQkgICAgICB7CistCQkJCWludCBleHBvbmVudDsKKy0KKy0JCQkJaWYgKGFyZyA9PSAwLjApCistCQkJCSAgeworLQkJCQkgICAgZXhwb25lbnQgPSAwOworLQkJCQkgICAgKnArKyA9ICcwJzsKKy0JCQkJICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgcHJlY2lzaW9uID4gMCkKKy0JCQkJICAgICAgeworLQkJCQkJKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKy0JCQkJCWZvciAoOyBwcmVjaXNpb24gPiAwOyBwcmVjaXNpb24tLSkKKy0JCQkJCSAgKnArKyA9ICcwJzsKKy0JCQkJICAgICAgfQorLQkJCQkgIH0KKy0JCQkJZWxzZQorLQkJCQkgIHsKKy0JCQkJICAgIC8qIGFyZyA+IDAuMC4gICovCistCQkJCSAgICBpbnQgYWRqdXN0ZWQ7CistCQkJCSAgICBjaGFyICpkaWdpdHM7CistCQkJCSAgICBzaXplX3QgbmRpZ2l0czsKKy0KKy0JCQkJICAgIGV4cG9uZW50ID0gZmxvb3Jsb2cxMCAoYXJnKTsKKy0JCQkJICAgIGFkanVzdGVkID0gMDsKKy0JCQkJICAgIGZvciAoOzspCistCQkJCSAgICAgIHsKKy0JCQkJCWRpZ2l0cyA9CistCQkJCQkgIHNjYWxlMTBfcm91bmRfZGVjaW1hbF9kb3VibGUgKGFyZywKKy0JCQkJCQkJCQkoaW50KXByZWNpc2lvbiAtIGV4cG9uZW50KTsKKy0JCQkJCWlmIChkaWdpdHMgPT0gTlVMTCkKKy0JCQkJCSAgZ290byBvdXRfb2ZfbWVtb3J5OworLQkJCQkJbmRpZ2l0cyA9IHN0cmxlbiAoZGlnaXRzKTsKKy0KKy0JCQkJCWlmIChuZGlnaXRzID09IHByZWNpc2lvbiArIDEpCistCQkJCQkgIGJyZWFrOworLQkJCQkJaWYgKG5kaWdpdHMgPCBwcmVjaXNpb24KKy0JCQkJCSAgICB8fCBuZGlnaXRzID4gcHJlY2lzaW9uICsgMikKKy0JCQkJCSAgLyogVGhlIGV4cG9uZW50IHdhcyBub3QgZ3Vlc3NlZAorLQkJCQkJICAgICBwcmVjaXNlbHkgZW5vdWdoLiAgKi8KKy0JCQkJCSAgYWJvcnQgKCk7CistCQkJCQlpZiAoYWRqdXN0ZWQpCistCQkJCQkgIC8qIE5vbmUgb2YgdHdvIHZhbHVlcyBvZiBleHBvbmVudCBpcworLQkJCQkJICAgICB0aGUgcmlnaHQgb25lLiAgUHJldmVudCBhbiBlbmRsZXNzCistCQkJCQkgICAgIGxvb3AuICAqLworLQkJCQkJICBhYm9ydCAoKTsKKy0JCQkJCWZyZWUgKGRpZ2l0cyk7CistCQkJCQlpZiAobmRpZ2l0cyA9PSBwcmVjaXNpb24pCistCQkJCQkgIGV4cG9uZW50IC09IDE7CistCQkJCQllbHNlCistCQkJCQkgIGV4cG9uZW50ICs9IDE7CistCQkJCQlhZGp1c3RlZCA9IDE7CistCQkJCSAgICAgIH0KKy0KKy0JCQkJICAgIC8qIEhlcmUgbmRpZ2l0cyA9IHByZWNpc2lvbisxLiAgKi8KKy0JCQkJICAgICpwKysgPSBkaWdpdHNbLS1uZGlnaXRzXTsKKy0JCQkJICAgIGlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgcHJlY2lzaW9uID4gMCkKKy0JCQkJICAgICAgeworLQkJCQkJKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKy0JCQkJCXdoaWxlIChuZGlnaXRzID4gMCkKKy0JCQkJCSAgeworLQkJCQkJICAgIC0tbmRpZ2l0czsKKy0JCQkJCSAgICAqcCsrID0gZGlnaXRzW25kaWdpdHNdOworLQkJCQkJICB9CistCQkJCSAgICAgIH0KKy0KKy0JCQkJICAgIGZyZWUgKGRpZ2l0cyk7CistCQkJCSAgfQorLQorLQkJCQkqcCsrID0gZHAtPmNvbnZlcnNpb247IC8qICdlJyBvciAnRScgKi8KKy0jICAgaWYgV0lERV9DSEFSX1ZFUlNJT04KKy0JCQkJeworLQkJCQkgIHN0YXRpYyBjb25zdCB3Y2hhcl90IGRlY2ltYWxfZm9ybWF0W10gPQorLQkJCQkgICAgLyogUHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2YgZXhwb25lbnQgZGlnaXRzCistCQkJCSAgICAgICBhcyB0aGUgbmF0aXZlIHByaW50ZiBpbXBsZW1lbnRhdGlvbi4gICovCistIyAgICBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCistCQkJCSAgICB7ICclJywgJysnLCAnLicsICczJywgJ2QnLCAnXDAnIH07CistIyAgICBlbHNlCistCQkJCSAgICB7ICclJywgJysnLCAnLicsICcyJywgJ2QnLCAnXDAnIH07CistIyAgICBlbmRpZgorLQkJCQkgIFNOUFJJTlRGIChwLCA2ICsgMSwgZGVjaW1hbF9mb3JtYXQsIGV4cG9uZW50KTsKKy0JCQkJfQorLQkJCQl3aGlsZSAoKnAgIT0gJ1wwJykKKy0JCQkJICBwKys7CistIyAgIGVsc2UKKy0JCQkJeworLQkJCQkgIHN0YXRpYyBjb25zdCBjaGFyIGRlY2ltYWxfZm9ybWF0W10gPQorLQkJCQkgICAgLyogUHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2YgZXhwb25lbnQgZGlnaXRzCistCQkJCSAgICAgICBhcyB0aGUgbmF0aXZlIHByaW50ZiBpbXBsZW1lbnRhdGlvbi4gICovCistIyAgICBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCistCQkJCSAgICAiJSsuM2QiOworLSMgICAgZWxzZQorLQkJCQkgICAgIiUrLjJkIjsKKy0jICAgIGVuZGlmCistCQkJCSAgaWYgKHNpemVvZiAoRENIQVJfVCkgPT0gMSkKKy0JCQkJICAgIHsKKy0JCQkJICAgICAgc3ByaW50ZiAoKGNoYXIgKikgcCwgZGVjaW1hbF9mb3JtYXQsIGV4cG9uZW50KTsKKy0JCQkJICAgICAgd2hpbGUgKCpwICE9ICdcMCcpCistCQkJCQlwKys7CistCQkJCSAgICB9CistCQkJCSAgZWxzZQorLQkJCQkgICAgeworLQkJCQkgICAgICBjaGFyIGV4cGJ1Zls2ICsgMV07CistCQkJCSAgICAgIGNvbnN0IGNoYXIgKmVwOworLQkJCQkgICAgICBzcHJpbnRmIChleHBidWYsIGRlY2ltYWxfZm9ybWF0LCBleHBvbmVudCk7CistCQkJCSAgICAgIGZvciAoZXAgPSBleHBidWY7ICgqcCA9ICplcCkgIT0gJ1wwJzsgZXArKykKKy0JCQkJCXArKzsKKy0JCQkJICAgIH0KKy0JCQkJfQorLSMgICBlbmRpZgorLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZSBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2cnIHx8IGRwLT5jb252ZXJzaW9uID09ICdHJykKKy0JCQkgICAgICB7CistCQkJCWlmIChwcmVjaXNpb24gPT0gMCkKKy0JCQkJICBwcmVjaXNpb24gPSAxOworLQkJCQkvKiBwcmVjaXNpb24gPj0gMS4gICovCistCistCQkJCWlmIChhcmcgPT0gMC4wKQorLQkJCQkgIC8qIFRoZSBleHBvbmVudCBpcyAwLCA+PSAtNCwgPCBwcmVjaXNpb24uCistCQkJCSAgICAgVXNlIGZpeGVkLXBvaW50IG5vdGF0aW9uLiAgKi8KKy0JCQkJICB7CistCQkJCSAgICBzaXplX3QgbmRpZ2l0cyA9IHByZWNpc2lvbjsKKy0JCQkJICAgIC8qIE51bWJlciBvZiB0cmFpbGluZyB6ZXJvZXMgdGhhdCBoYXZlIHRvIGJlCistCQkJCSAgICAgICBkcm9wcGVkLiAgKi8KKy0JCQkJICAgIHNpemVfdCBuemVyb2VzID0KKy0JCQkJICAgICAgKGZsYWdzICYgRkxBR19BTFQgPyAwIDogcHJlY2lzaW9uIC0gMSk7CistCistCQkJCSAgICAtLW5kaWdpdHM7CistCQkJCSAgICAqcCsrID0gJzAnOworLQkJCQkgICAgaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBuZGlnaXRzID4gbnplcm9lcykKKy0JCQkJICAgICAgeworLQkJCQkJKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKy0JCQkJCXdoaWxlIChuZGlnaXRzID4gbnplcm9lcykKKy0JCQkJCSAgeworLQkJCQkJICAgIC0tbmRpZ2l0czsKKy0JCQkJCSAgICAqcCsrID0gJzAnOworLQkJCQkJICB9CistCQkJCSAgICAgIH0KKy0JCQkJICB9CistCQkJCWVsc2UKKy0JCQkJICB7CistCQkJCSAgICAvKiBhcmcgPiAwLjAuICAqLworLQkJCQkgICAgaW50IGV4cG9uZW50OworLQkJCQkgICAgaW50IGFkanVzdGVkOworLQkJCQkgICAgY2hhciAqZGlnaXRzOworLQkJCQkgICAgc2l6ZV90IG5kaWdpdHM7CistCQkJCSAgICBzaXplX3Qgbnplcm9lczsKKy0KKy0JCQkJICAgIGV4cG9uZW50ID0gZmxvb3Jsb2cxMCAoYXJnKTsKKy0JCQkJICAgIGFkanVzdGVkID0gMDsKKy0JCQkJICAgIGZvciAoOzspCistCQkJCSAgICAgIHsKKy0JCQkJCWRpZ2l0cyA9CistCQkJCQkgIHNjYWxlMTBfcm91bmRfZGVjaW1hbF9kb3VibGUgKGFyZywKKy0JCQkJCQkJCQkoaW50KShwcmVjaXNpb24gLSAxKSAtIGV4cG9uZW50KTsKKy0JCQkJCWlmIChkaWdpdHMgPT0gTlVMTCkKKy0JCQkJCSAgZ290byBvdXRfb2ZfbWVtb3J5OworLQkJCQkJbmRpZ2l0cyA9IHN0cmxlbiAoZGlnaXRzKTsKKy0KKy0JCQkJCWlmIChuZGlnaXRzID09IHByZWNpc2lvbikKKy0JCQkJCSAgYnJlYWs7CistCQkJCQlpZiAobmRpZ2l0cyA8IHByZWNpc2lvbiAtIDEKKy0JCQkJCSAgICB8fCBuZGlnaXRzID4gcHJlY2lzaW9uICsgMSkKKy0JCQkJCSAgLyogVGhlIGV4cG9uZW50IHdhcyBub3QgZ3Vlc3NlZAorLQkJCQkJICAgICBwcmVjaXNlbHkgZW5vdWdoLiAgKi8KKy0JCQkJCSAgYWJvcnQgKCk7CistCQkJCQlpZiAoYWRqdXN0ZWQpCistCQkJCQkgIC8qIE5vbmUgb2YgdHdvIHZhbHVlcyBvZiBleHBvbmVudCBpcworLQkJCQkJICAgICB0aGUgcmlnaHQgb25lLiAgUHJldmVudCBhbiBlbmRsZXNzCistCQkJCQkgICAgIGxvb3AuICAqLworLQkJCQkJICBhYm9ydCAoKTsKKy0JCQkJCWZyZWUgKGRpZ2l0cyk7CistCQkJCQlpZiAobmRpZ2l0cyA8IHByZWNpc2lvbikKKy0JCQkJCSAgZXhwb25lbnQgLT0gMTsKKy0JCQkJCWVsc2UKKy0JCQkJCSAgZXhwb25lbnQgKz0gMTsKKy0JCQkJCWFkanVzdGVkID0gMTsKKy0JCQkJICAgICAgfQorLQkJCQkgICAgLyogSGVyZSBuZGlnaXRzID0gcHJlY2lzaW9uLiAgKi8KKy0KKy0JCQkJICAgIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9lcworLQkJCQkgICAgICAgdGhhdCBoYXZlIHRvIGJlIGRyb3BwZWQuICAqLworLQkJCQkgICAgbnplcm9lcyA9IDA7CistCQkJCSAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpID09IDApCistCQkJCSAgICAgIHdoaWxlIChuemVyb2VzIDwgbmRpZ2l0cworLQkJCQkJICAgICAmJiBkaWdpdHNbbnplcm9lc10gPT0gJzAnKQorLQkJCQkJbnplcm9lcysrOworLQorLQkJCQkgICAgLyogVGhlIGV4cG9uZW50IGlzIG5vdyBkZXRlcm1pbmVkLiAgKi8KKy0JCQkJICAgIGlmIChleHBvbmVudCA+PSAtNAorLQkJCQkJJiYgZXhwb25lbnQgPCAobG9uZylwcmVjaXNpb24pCistCQkJCSAgICAgIHsKKy0JCQkJCS8qIEZpeGVkLXBvaW50IG5vdGF0aW9uOgorLQkJCQkJICAgbWF4KGV4cG9uZW50LDApKzEgZGlnaXRzLCB0aGVuIHRoZQorLQkJCQkJICAgZGVjaW1hbCBwb2ludCwgdGhlbiB0aGUgcmVtYWluaW5nCistCQkJCQkgICBkaWdpdHMgd2l0aG91dCB0cmFpbGluZyB6ZXJvZXMuICAqLworLQkJCQkJaWYgKGV4cG9uZW50ID49IDApCistCQkJCQkgIHsKKy0JCQkJCSAgICBzaXplX3QgY291bnQgPSBleHBvbmVudCArIDE7CistCQkJCQkgICAgLyogTm90ZTogY291bnQgPD0gcHJlY2lzaW9uID0gbmRpZ2l0cy4gICovCistCQkJCQkgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkKKy0JCQkJCSAgICAgICpwKysgPSBkaWdpdHNbLS1uZGlnaXRzXTsKKy0JCQkJCSAgICBpZiAoKGZsYWdzICYgRkxBR19BTFQpIHx8IG5kaWdpdHMgPiBuemVyb2VzKQorLQkJCQkJICAgICAgeworLQkJCQkJCSpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CistCQkJCQkJd2hpbGUgKG5kaWdpdHMgPiBuemVyb2VzKQorLQkJCQkJCSAgeworLQkJCQkJCSAgICAtLW5kaWdpdHM7CistCQkJCQkJICAgICpwKysgPSBkaWdpdHNbbmRpZ2l0c107CistCQkJCQkJICB9CistCQkJCQkgICAgICB9CistCQkJCQkgIH0KKy0JCQkJCWVsc2UKKy0JCQkJCSAgeworLQkJCQkJICAgIHNpemVfdCBjb3VudCA9IC1leHBvbmVudCAtIDE7CistCQkJCQkgICAgKnArKyA9ICcwJzsKKy0JCQkJCSAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworLQkJCQkJICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pCistCQkJCQkgICAgICAqcCsrID0gJzAnOworLQkJCQkJICAgIHdoaWxlIChuZGlnaXRzID4gbnplcm9lcykKKy0JCQkJCSAgICAgIHsKKy0JCQkJCQktLW5kaWdpdHM7CistCQkJCQkJKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKy0JCQkJCSAgICAgIH0KKy0JCQkJCSAgfQorLQkJCQkgICAgICB9CistCQkJCSAgICBlbHNlCistCQkJCSAgICAgIHsKKy0JCQkJCS8qIEV4cG9uZW50aWFsIG5vdGF0aW9uLiAgKi8KKy0JCQkJCSpwKysgPSBkaWdpdHNbLS1uZGlnaXRzXTsKKy0JCQkJCWlmICgoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgbmRpZ2l0cyA+IG56ZXJvZXMpCistCQkJCQkgIHsKKy0JCQkJCSAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworLQkJCQkJICAgIHdoaWxlIChuZGlnaXRzID4gbnplcm9lcykKKy0JCQkJCSAgICAgIHsKKy0JCQkJCQktLW5kaWdpdHM7CistCQkJCQkJKnArKyA9IGRpZ2l0c1tuZGlnaXRzXTsKKy0JCQkJCSAgICAgIH0KKy0JCQkJCSAgfQorLQkJCQkJKnArKyA9IGRwLT5jb252ZXJzaW9uIC0gJ0cnICsgJ0UnOyAvKiAnZScgb3IgJ0UnICovCistIyAgIGlmIFdJREVfQ0hBUl9WRVJTSU9OCistCQkJCQl7CistCQkJCQkgIHN0YXRpYyBjb25zdCB3Y2hhcl90IGRlY2ltYWxfZm9ybWF0W10gPQorLQkJCQkJICAgIC8qIFByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9mIGV4cG9uZW50IGRpZ2l0cworLQkJCQkJICAgICAgIGFzIHRoZSBuYXRpdmUgcHJpbnRmIGltcGxlbWVudGF0aW9uLiAgKi8KKy0jICAgIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKy0JCQkJCSAgICB7ICclJywgJysnLCAnLicsICczJywgJ2QnLCAnXDAnIH07CistIyAgICBlbHNlCistCQkJCQkgICAgeyAnJScsICcrJywgJy4nLCAnMicsICdkJywgJ1wwJyB9OworLSMgICAgZW5kaWYKKy0JCQkJCSAgU05QUklOVEYgKHAsIDYgKyAxLCBkZWNpbWFsX2Zvcm1hdCwgZXhwb25lbnQpOworLQkJCQkJfQorLQkJCQkJd2hpbGUgKCpwICE9ICdcMCcpCistCQkJCQkgIHArKzsKKy0jICAgZWxzZQorLQkJCQkJeworLQkJCQkJICBzdGF0aWMgY29uc3QgY2hhciBkZWNpbWFsX2Zvcm1hdFtdID0KKy0JCQkJCSAgICAvKiBQcm9kdWNlIHRoZSBzYW1lIG51bWJlciBvZiBleHBvbmVudCBkaWdpdHMKKy0JCQkJCSAgICAgICBhcyB0aGUgbmF0aXZlIHByaW50ZiBpbXBsZW1lbnRhdGlvbi4gICovCistIyAgICBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCistCQkJCQkgICAgIiUrLjNkIjsKKy0jICAgIGVsc2UKKy0JCQkJCSAgICAiJSsuMmQiOworLSMgICAgZW5kaWYKKy0JCQkJCSAgaWYgKHNpemVvZiAoRENIQVJfVCkgPT0gMSkKKy0JCQkJCSAgICB7CistCQkJCQkgICAgICBzcHJpbnRmICgoY2hhciAqKSBwLCBkZWNpbWFsX2Zvcm1hdCwgZXhwb25lbnQpOworLQkJCQkJICAgICAgd2hpbGUgKCpwICE9ICdcMCcpCistCQkJCQkJcCsrOworLQkJCQkJICAgIH0KKy0JCQkJCSAgZWxzZQorLQkJCQkJICAgIHsKKy0JCQkJCSAgICAgIGNoYXIgZXhwYnVmWzYgKyAxXTsKKy0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKmVwOworLQkJCQkJICAgICAgc3ByaW50ZiAoZXhwYnVmLCBkZWNpbWFsX2Zvcm1hdCwgZXhwb25lbnQpOworLQkJCQkJICAgICAgZm9yIChlcCA9IGV4cGJ1ZjsgKCpwID0gKmVwKSAhPSAnXDAnOyBlcCsrKQorLQkJCQkJCXArKzsKKy0JCQkJCSAgICB9CistCQkJCQl9CistIyAgIGVuZGlmCistCQkJCSAgICAgIH0KKy0KKy0JCQkJICAgIGZyZWUgKGRpZ2l0cyk7CistCQkJCSAgfQorLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZQorLQkJCSAgICAgIGFib3J0ICgpOworLSMgIGVsc2UKKy0JCQkgICAgLyogYXJnIGlzIGZpbml0ZS4gICovCistCQkJICAgIGlmICghKGFyZyA9PSAwLjApKQorLQkJCSAgICAgIGFib3J0ICgpOworLQorLQkJCSAgICBwYWRfcHRyID0gcDsKKy0KKy0JCQkgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICdmJyB8fCBkcC0+Y29udmVyc2lvbiA9PSAnRicpCistCQkJICAgICAgeworLQkJCQkqcCsrID0gJzAnOworLQkJCQlpZiAoKGZsYWdzICYgRkxBR19BTFQpIHx8IHByZWNpc2lvbiA+IDApCistCQkJCSAgeworLQkJCQkgICAgKnArKyA9IGRlY2ltYWxfcG9pbnRfY2hhciAoKTsKKy0JCQkJICAgIGZvciAoOyBwcmVjaXNpb24gPiAwOyBwcmVjaXNpb24tLSkKKy0JCQkJICAgICAgKnArKyA9ICcwJzsKKy0JCQkJICB9CistCQkJICAgICAgfQorLQkJCSAgICBlbHNlIGlmIChkcC0+Y29udmVyc2lvbiA9PSAnZScgfHwgZHAtPmNvbnZlcnNpb24gPT0gJ0UnKQorLQkJCSAgICAgIHsKKy0JCQkJKnArKyA9ICcwJzsKKy0JCQkJaWYgKChmbGFncyAmIEZMQUdfQUxUKSB8fCBwcmVjaXNpb24gPiAwKQorLQkJCQkgIHsKKy0JCQkJICAgICpwKysgPSBkZWNpbWFsX3BvaW50X2NoYXIgKCk7CistCQkJCSAgICBmb3IgKDsgcHJlY2lzaW9uID4gMDsgcHJlY2lzaW9uLS0pCistCQkJCSAgICAgICpwKysgPSAnMCc7CistCQkJCSAgfQorLQkJCQkqcCsrID0gZHAtPmNvbnZlcnNpb247IC8qICdlJyBvciAnRScgKi8KKy0JCQkJKnArKyA9ICcrJzsKKy0JCQkJLyogUHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2YgZXhwb25lbnQgZGlnaXRzIGFzCistCQkJCSAgIHRoZSBuYXRpdmUgcHJpbnRmIGltcGxlbWVudGF0aW9uLiAgKi8KKy0jICAgaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19DWUdXSU5fXworLQkJCQkqcCsrID0gJzAnOworLSMgICBlbmRpZgorLQkJCQkqcCsrID0gJzAnOworLQkJCQkqcCsrID0gJzAnOworLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZSBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2cnIHx8IGRwLT5jb252ZXJzaW9uID09ICdHJykKKy0JCQkgICAgICB7CistCQkJCSpwKysgPSAnMCc7CistCQkJCWlmIChmbGFncyAmIEZMQUdfQUxUKQorLQkJCQkgIHsKKy0JCQkJICAgIHNpemVfdCBuZGlnaXRzID0KKy0JCQkJICAgICAgKHByZWNpc2lvbiA+IDAgPyBwcmVjaXNpb24gLSAxIDogMCk7CistCQkJCSAgICAqcCsrID0gZGVjaW1hbF9wb2ludF9jaGFyICgpOworLQkJCQkgICAgZm9yICg7IG5kaWdpdHMgPiAwOyAtLW5kaWdpdHMpCistCQkJCSAgICAgICpwKysgPSAnMCc7CistCQkJCSAgfQorLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZQorLQkJCSAgICAgIGFib3J0ICgpOworLSMgIGVuZGlmCistCQkJICB9CistCQkgICAgICB9CistCQkgIH0KKy0jIGVuZGlmCistCistCQkvKiBUaGUgZ2VuZXJhdGVkIHN0cmluZyBub3cgZXh0ZW5kcyBmcm9tIHRtcCB0byBwLCB3aXRoIHRoZQorLQkJICAgemVybyBwYWRkaW5nIGluc2VydGlvbiBwb2ludCBiZWluZyBhdCBwYWRfcHRyLiAgKi8KKy0JCWlmIChoYXNfd2lkdGggJiYgcCAtIHRtcCA8IHdpZHRoKQorLQkJICB7CistCQkgICAgc2l6ZV90IHBhZCA9IHdpZHRoIC0gKHAgLSB0bXApOworLQkJICAgIERDSEFSX1QgKmVuZCA9IHAgKyBwYWQ7CistCistCQkgICAgaWYgKGZsYWdzICYgRkxBR19MRUZUKQorLQkJICAgICAgeworLQkJCS8qIFBhZCB3aXRoIHNwYWNlcyBvbiB0aGUgcmlnaHQuICAqLworLQkJCWZvciAoOyBwYWQgPiAwOyBwYWQtLSkKKy0JCQkgICpwKysgPSAnICc7CistCQkgICAgICB9CistCQkgICAgZWxzZSBpZiAoKGZsYWdzICYgRkxBR19aRVJPKSAmJiBwYWRfcHRyICE9IE5VTEwpCistCQkgICAgICB7CistCQkJLyogUGFkIHdpdGggemVyb2VzLiAgKi8KKy0JCQlEQ0hBUl9UICpxID0gZW5kOworLQorLQkJCXdoaWxlIChwID4gcGFkX3B0cikKKy0JCQkgICotLXEgPSAqLS1wOworLQkJCWZvciAoOyBwYWQgPiAwOyBwYWQtLSkKKy0JCQkgICpwKysgPSAnMCc7CistCQkgICAgICB9CistCQkgICAgZWxzZQorLQkJICAgICAgeworLQkJCS8qIFBhZCB3aXRoIHNwYWNlcyBvbiB0aGUgbGVmdC4gICovCistCQkJRENIQVJfVCAqcSA9IGVuZDsKKy0KKy0JCQl3aGlsZSAocCA+IHRtcCkKKy0JCQkgICotLXEgPSAqLS1wOworLQkJCWZvciAoOyBwYWQgPiAwOyBwYWQtLSkKKy0JCQkgICpwKysgPSAnICc7CistCQkgICAgICB9CistCistCQkgICAgcCA9IGVuZDsKKy0JCSAgfQorLQorLQkJeworLQkJICBzaXplX3QgY291bnQgPSBwIC0gdG1wOworLQorLQkJICBpZiAoY291bnQgPj0gdG1wX2xlbmd0aCkKKy0JCSAgICAvKiB0bXBfbGVuZ3RoIHdhcyBpbmNvcnJlY3RseSBjYWxjdWxhdGVkIC0gZml4IHRoZQorLQkJICAgICAgIGNvZGUgYWJvdmUhICAqLworLQkJICAgIGFib3J0ICgpOworLQorLQkJICAvKiBNYWtlIHJvb20gZm9yIHRoZSByZXN1bHQuICAqLworLQkJICBpZiAoY291bnQgPj0gYWxsb2NhdGVkIC0gbGVuZ3RoKQorLQkJICAgIHsKKy0JCSAgICAgIHNpemVfdCBuID0geHN1bSAobGVuZ3RoLCBjb3VudCk7CistCistCQkgICAgICBFTlNVUkVfQUxMT0NBVElPTiAobik7CistCQkgICAgfQorLQorLQkJICAvKiBBcHBlbmQgdGhlIHJlc3VsdC4gICovCistCQkgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCB0bXAsIGNvdW50ICogc2l6ZW9mIChEQ0hBUl9UKSk7CistCQkgIGlmICh0bXAgIT0gdG1wYnVmKQorLQkJICAgIGZyZWUgKHRtcCk7CistCQkgIGxlbmd0aCArPSBjb3VudDsKKy0JCX0KKy0JICAgICAgfQorLSNlbmRpZgorLQkgICAgZWxzZQorLQkgICAgICB7CistCQlhcmdfdHlwZSB0eXBlID0gYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZTsKKy0JCWludCBmbGFncyA9IGRwLT5mbGFnczsKKy0jaWYgIVVTRV9TTlBSSU5URiB8fCAhRENIQVJfSVNfVENIQVIgfHwgRU5BQkxFX1VOSVNURElPIHx8IE5FRURfUFJJTlRGX0ZMQUdfWkVSTyB8fCBORUVEX1BSSU5URl9VTkJPVU5ERURfUFJFQ0lTSU9OCistCQlpbnQgaGFzX3dpZHRoOworLQkJc2l6ZV90IHdpZHRoOworLSNlbmRpZgorLSNpZiAhVVNFX1NOUFJJTlRGIHx8IE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04KKy0JCWludCBoYXNfcHJlY2lzaW9uOworLQkJc2l6ZV90IHByZWNpc2lvbjsKKy0jZW5kaWYKKy0jaWYgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTgorLQkJaW50IHByZWNfb3Vyc2VsdmVzOworLSNlbHNlCistIwkJZGVmaW5lIHByZWNfb3Vyc2VsdmVzIDAKKy0jZW5kaWYKKy0jaWYgIURDSEFSX0lTX1RDSEFSIHx8IEVOQUJMRV9VTklTVERJTyB8fCBORUVEX1BSSU5URl9GTEFHX1pFUk8gfHwgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTgorLQkJaW50IHBhZF9vdXJzZWx2ZXM7CistI2Vsc2UKKy0jCQlkZWZpbmUgcGFkX291cnNlbHZlcyAwCistI2VuZGlmCistCQlUQ0hBUl9UICpmYnA7CistCQl1bnNpZ25lZCBpbnQgcHJlZml4X2NvdW50OworLQkJaW50IHByZWZpeGVzWzJdOworLSNpZiAhVVNFX1NOUFJJTlRGCistCQlzaXplX3QgdG1wX2xlbmd0aDsKKy0JCVRDSEFSX1QgdG1wYnVmWzcwMF07CistCQlUQ0hBUl9UICp0bXA7CistI2VuZGlmCistCistI2lmICFVU0VfU05QUklOVEYgfHwgIURDSEFSX0lTX1RDSEFSIHx8IEVOQUJMRV9VTklTVERJTyB8fCBORUVEX1BSSU5URl9GTEFHX1pFUk8gfHwgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTgorLQkJaGFzX3dpZHRoID0gMDsKKy0JCXdpZHRoID0gMDsKKy0JCWlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKy0JCSAgeworLQkJICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorLQkJICAgICAgeworLQkJCWludCBhcmc7CistCistCQkJaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCistCQkJICBhYm9ydCAoKTsKKy0JCQlhcmcgPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworLQkJCWlmIChhcmcgPCAwKQorLQkJCSAgeworLQkJCSAgICAvKiAiQSBuZWdhdGl2ZSBmaWVsZCB3aWR0aCBpcyB0YWtlbiBhcyBhICctJyBmbGFnCistCQkJICAgICAgICBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLiIgICovCistCQkJICAgIGZsYWdzIHw9IEZMQUdfTEVGVDsKKy0JCQkgICAgd2lkdGggPSAodW5zaWduZWQgaW50KSAoLWFyZyk7CistCQkJICB9CistCQkJZWxzZQorLQkJCSAgd2lkdGggPSBhcmc7CistCQkgICAgICB9CistCQkgICAgZWxzZQorLQkJICAgICAgeworLQkJCWNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKKy0KKy0JCQlkbworLQkJCSAgd2lkdGggPSB4c3VtICh4dGltZXMgKHdpZHRoLCAxMCksICpkaWdpdHArKyAtICcwJyk7CistCQkJd2hpbGUgKGRpZ2l0cCAhPSBkcC0+d2lkdGhfZW5kKTsKKy0JCSAgICAgIH0KKy0JCSAgICBoYXNfd2lkdGggPSAxOworLQkJICB9CistI2VuZGlmCistCistI2lmICFVU0VfU05QUklOVEYgfHwgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTgorLQkJaGFzX3ByZWNpc2lvbiA9IDA7CistCQlwcmVjaXNpb24gPSA2OworLQkJaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCistCQkgIHsKKy0JCSAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCistCQkgICAgICB7CistCQkJaW50IGFyZzsKKy0KKy0JCQlpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCistCQkJICBhYm9ydCAoKTsKKy0JCQlhcmcgPSBhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0uYS5hX2ludDsKKy0JCQkvKiAiQSBuZWdhdGl2ZSBwcmVjaXNpb24gaXMgdGFrZW4gYXMgaWYgdGhlIHByZWNpc2lvbgorLQkJCSAgICB3ZXJlIG9taXR0ZWQuIiAgKi8KKy0JCQlpZiAoYXJnID49IDApCistCQkJICB7CistCQkJICAgIHByZWNpc2lvbiA9IGFyZzsKKy0JCQkgICAgaGFzX3ByZWNpc2lvbiA9IDE7CistCQkJICB9CistCQkgICAgICB9CistCQkgICAgZWxzZQorLQkJICAgICAgeworLQkJCWNvbnN0IEZDSEFSX1QgKmRpZ2l0cCA9IGRwLT5wcmVjaXNpb25fc3RhcnQgKyAxOworLQorLQkJCXByZWNpc2lvbiA9IDA7CistCQkJd2hpbGUgKGRpZ2l0cCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKKy0JCQkgIHByZWNpc2lvbiA9IHhzdW0gKHh0aW1lcyAocHJlY2lzaW9uLCAxMCksICpkaWdpdHArKyAtICcwJyk7CistCQkJaGFzX3ByZWNpc2lvbiA9IDE7CistCQkgICAgICB9CistCQkgIH0KKy0jZW5kaWYKKy0KKy0jaWYgIVVTRV9TTlBSSU5URgorLQkJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSBmb3IgY2FsbGluZworLQkJICAgc3ByaW50Zi4gICovCistCQl7CistCQkgIHN3aXRjaCAoZHAtPmNvbnZlcnNpb24pCistCQkgICAgeworLQorLQkJICAgIGNhc2UgJ2QnOiBjYXNlICdpJzogY2FzZSAndSc6CistIyBpZiBIQVZFX0xPTkdfTE9OR19JTlQKKy0JCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKy0JCQl0bXBfbGVuZ3RoID0KKy0JCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorLQkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKy0JCQkJCSApCistCQkJICArIDE7IC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCistCQkgICAgICBlbHNlCistIyBlbmRpZgorLQkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0lOVCkKKy0JCQl0bXBfbGVuZ3RoID0KKy0JCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogQ0hBUl9CSVQKKy0JCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCistCQkJCQkgKQorLQkJCSAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworLQkJICAgICAgZWxzZQorLQkJCXRtcF9sZW5ndGggPQorLQkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCistCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworLQkJCQkJICkKKy0JCQkgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCSAgICAgIGlmICh0bXBfbGVuZ3RoIDwgcHJlY2lzaW9uKQorLQkJCXRtcF9sZW5ndGggPSBwcmVjaXNpb247CistCQkgICAgICAvKiBNdWx0aXBseSBieSAyLCBhcyBhbiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUC4gICovCistCQkgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgdG1wX2xlbmd0aCk7CistCQkgICAgICAvKiBBZGQgMSwgdG8gYWNjb3VudCBmb3IgYSBsZWFkaW5nIHNpZ24uICAqLworLQkJICAgICAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEpOworLQkJICAgICAgYnJlYWs7CistCistCQkgICAgY2FzZSAnbyc6CistIyBpZiBIQVZFX0xPTkdfTE9OR19JTlQKKy0JCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKy0JCQl0bXBfbGVuZ3RoID0KKy0JCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorLQkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworLQkJCQkJICkKKy0JCQkgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCSAgICAgIGVsc2UKKy0jIGVuZGlmCistCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorLQkJCXRtcF9sZW5ndGggPQorLQkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorLQkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworLQkJCQkJICkKKy0JCQkgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCSAgICAgIGVsc2UKKy0JCQl0bXBfbGVuZ3RoID0KKy0JCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorLQkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworLQkJCQkJICkKKy0JCQkgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCSAgICAgIGlmICh0bXBfbGVuZ3RoIDwgcHJlY2lzaW9uKQorLQkJCXRtcF9sZW5ndGggPSBwcmVjaXNpb247CistCQkgICAgICAvKiBBZGQgMSwgdG8gYWNjb3VudCBmb3IgYSBsZWFkaW5nIHNpZ24uICAqLworLQkJICAgICAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEpOworLQkJICAgICAgYnJlYWs7CistCistCQkgICAgY2FzZSAneCc6IGNhc2UgJ1gnOgorLSMgaWYgSEFWRV9MT05HX0xPTkdfSU5UCistCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCistCQkJdG1wX2xlbmd0aCA9CistCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKy0JCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworLQkJCQkJICkKKy0JCQkgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCSAgICAgIGVsc2UKKy0jIGVuZGlmCistCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorLQkJCXRtcF9sZW5ndGggPQorLQkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorLQkJCQkJICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCistCQkJCQkgKQorLQkJCSAgKyAxOyAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworLQkJICAgICAgZWxzZQorLQkJCXRtcF9sZW5ndGggPQorLQkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCistCQkJCQkgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKy0JCQkJCSApCistCQkJICArIDE7IC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCistCQkgICAgICBpZiAodG1wX2xlbmd0aCA8IHByZWNpc2lvbikKKy0JCQl0bXBfbGVuZ3RoID0gcHJlY2lzaW9uOworLQkJICAgICAgLyogQWRkIDIsIHRvIGFjY291bnQgZm9yIGEgbGVhZGluZyBzaWduIG9yIGFsdGVybmF0ZSBmb3JtLiAgKi8KKy0JCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAyKTsKKy0JCSAgICAgIGJyZWFrOworLQorLQkJICAgIGNhc2UgJ2YnOiBjYXNlICdGJzoKKy0JCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0RPVUJMRSkKKy0JCQl0bXBfbGVuZ3RoID0KKy0JCQkgICh1bnNpZ25lZCBpbnQpIChMREJMX01BWF9FWFAKKy0JCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCistCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworLQkJCQkJICkKKy0JCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworLQkJCSAgKyAxMDsgLyogc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCistCQkgICAgICBlbHNlCistCQkJdG1wX2xlbmd0aCA9CistCQkJICAodW5zaWduZWQgaW50KSAoREJMX01BWF9FWFAKKy0JCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCistCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworLQkJCQkJICkKKy0JCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworLQkJCSAgKyAxMDsgLyogc2lnbiwgZGVjaW1hbCBwb2ludCBldGMuICovCistCQkgICAgICB0bXBfbGVuZ3RoID0geHN1bSAodG1wX2xlbmd0aCwgcHJlY2lzaW9uKTsKKy0JCSAgICAgIGJyZWFrOworLQorLQkJICAgIGNhc2UgJ2UnOiBjYXNlICdFJzogY2FzZSAnZyc6IGNhc2UgJ0cnOgorLQkJICAgICAgdG1wX2xlbmd0aCA9CistCQkJMTI7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQsIGV4cG9uZW50IGV0Yy4gKi8KKy0JCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworLQkJICAgICAgYnJlYWs7CistCistCQkgICAgY2FzZSAnYSc6IGNhc2UgJ0EnOgorLQkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HRE9VQkxFKQorLQkJCXRtcF9sZW5ndGggPQorLQkJCSAgKHVuc2lnbmVkIGludCkgKExEQkxfRElHCistCQkJCQkgICogMC44MzEgLyogZGVjaW1hbCAtPiBoZXhhZGVjaW1hbCAqLworLQkJCQkJICkKKy0JCQkgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCSAgICAgIGVsc2UKKy0JCQl0bXBfbGVuZ3RoID0KKy0JCQkgICh1bnNpZ25lZCBpbnQpIChEQkxfRElHCistCQkJCQkgICogMC44MzEgLyogZGVjaW1hbCAtPiBoZXhhZGVjaW1hbCAqLworLQkJCQkJICkKKy0JCQkgICsgMTsgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCSAgICAgIGlmICh0bXBfbGVuZ3RoIDwgcHJlY2lzaW9uKQorLQkJCXRtcF9sZW5ndGggPSBwcmVjaXNpb247CistCQkgICAgICAvKiBBY2NvdW50IGZvciBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKy0JCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAxMik7CistCQkgICAgICBicmVhazsKKy0KKy0JCSAgICBjYXNlICdjJzoKKy0jIGlmIEhBVkVfV0lOVF9UICYmICFXSURFX0NIQVJfVkVSU0lPTgorLQkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9XSURFX0NIQVIpCistCQkJdG1wX2xlbmd0aCA9IE1CX0NVUl9NQVg7CistCQkgICAgICBlbHNlCistIyBlbmRpZgorLQkJCXRtcF9sZW5ndGggPSAxOworLQkJICAgICAgYnJlYWs7CistCistCQkgICAgY2FzZSAncyc6CistIyBpZiBIQVZFX1dDSEFSX1QKKy0JCSAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9TVFJJTkcpCistCQkJeworLQkJCSAgdG1wX2xlbmd0aCA9CistCQkJICAgIGxvY2FsX3djc2xlbiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nKTsKKy0KKy0jICBpZiAhV0lERV9DSEFSX1ZFUlNJT04KKy0JCQkgIHRtcF9sZW5ndGggPSB4dGltZXMgKHRtcF9sZW5ndGgsIE1CX0NVUl9NQVgpOworLSMgIGVuZGlmCistCQkJfQorLQkJICAgICAgZWxzZQorLSMgZW5kaWYKKy0JCQl0bXBfbGVuZ3RoID0gc3RybGVuIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc3RyaW5nKTsKKy0JCSAgICAgIGJyZWFrOworLQorLQkJICAgIGNhc2UgJ3AnOgorLQkJICAgICAgdG1wX2xlbmd0aCA9CistCQkJKHVuc2lnbmVkIGludCkgKHNpemVvZiAodm9pZCAqKSAqIENIQVJfQklUCistCQkJCQkqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCistCQkJCSAgICAgICApCistCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKy0JCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyAweCAqLworLQkJICAgICAgYnJlYWs7CistCistCQkgICAgZGVmYXVsdDoKKy0JCSAgICAgIGFib3J0ICgpOworLQkJICAgIH0KKy0KKy0jIGlmIEVOQUJMRV9VTklTVERJTworLQkJICAvKiBQYWRkaW5nIGNvbnNpZGVycyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIHRoZXJlZm9yZSB0aGUKKy0JCSAgICAgbnVtYmVyIG9mIGVsZW1lbnRzIGFmdGVyIHBhZGRpbmcgbWF5IGJlCistCQkgICAgICAgPiBtYXggKHRtcF9sZW5ndGgsIHdpZHRoKQorLQkJICAgICBidXQgaXMgY2VydGFpbmx5CistCQkgICAgICAgPD0gdG1wX2xlbmd0aCArIHdpZHRoLiAgKi8KKy0JCSAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIHdpZHRoKTsKKy0jIGVsc2UKKy0JCSAgLyogUGFkZGluZyBjb25zaWRlcnMgdGhlIG51bWJlciBvZiBlbGVtZW50cywgc2F5cyBQT1NJWC4gICovCistCQkgIGlmICh0bXBfbGVuZ3RoIDwgd2lkdGgpCistCQkgICAgdG1wX2xlbmd0aCA9IHdpZHRoOworLSMgZW5kaWYKKy0KKy0JCSAgdG1wX2xlbmd0aCA9IHhzdW0gKHRtcF9sZW5ndGgsIDEpOyAvKiBhY2NvdW50IGZvciB0cmFpbGluZyBOVUwgKi8KKy0JCX0KKy0KKy0JCWlmICh0bXBfbGVuZ3RoIDw9IHNpemVvZiAodG1wYnVmKSAvIHNpemVvZiAoVENIQVJfVCkpCistCQkgIHRtcCA9IHRtcGJ1ZjsKKy0JCWVsc2UKKy0JCSAgeworLQkJICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChUQ0hBUl9UKSk7CistCistCQkgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAodG1wX21lbXNpemUpKQorLQkJICAgICAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCistCQkgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CistCQkgICAgdG1wID0gKFRDSEFSX1QgKikgbWFsbG9jICh0bXBfbWVtc2l6ZSk7CistCQkgICAgaWYgKHRtcCA9PSBOVUxMKQorLQkJICAgICAgLyogT3V0IG9mIG1lbW9yeS4gICovCistCQkgICAgICBnb3RvIG91dF9vZl9tZW1vcnk7CistCQkgIH0KKy0jZW5kaWYKKy0KKy0JCS8qIERlY2lkZSB3aGV0aGVyIHRvIGhhbmRsZSB0aGUgcHJlY2lzaW9uIG91cnNlbHZlcy4gICovCistI2lmIE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04KKy0JCXN3aXRjaCAoZHAtPmNvbnZlcnNpb24pCistCQkgIHsKKy0JCSAgY2FzZSAnZCc6IGNhc2UgJ2knOiBjYXNlICd1JzoKKy0JCSAgY2FzZSAnbyc6CistCQkgIGNhc2UgJ3gnOiBjYXNlICdYJzogY2FzZSAncCc6CistCQkgICAgcHJlY19vdXJzZWx2ZXMgPSBoYXNfcHJlY2lzaW9uICYmIChwcmVjaXNpb24gPiAwKTsKKy0JCSAgICBicmVhazsKKy0JCSAgZGVmYXVsdDoKKy0JCSAgICBwcmVjX291cnNlbHZlcyA9IDA7CistCQkgICAgYnJlYWs7CistCQkgIH0KKy0jZW5kaWYKKy0KKy0JCS8qIERlY2lkZSB3aGV0aGVyIHRvIHBlcmZvcm0gdGhlIHBhZGRpbmcgb3Vyc2VsdmVzLiAgKi8KKy0jaWYgIURDSEFSX0lTX1RDSEFSIHx8IEVOQUJMRV9VTklTVERJTyB8fCBORUVEX1BSSU5URl9GTEFHX1pFUk8gfHwgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTgorLQkJc3dpdGNoIChkcC0+Y29udmVyc2lvbikKKy0JCSAgeworLSMgaWYgIURDSEFSX0lTX1RDSEFSIHx8IEVOQUJMRV9VTklTVERJTworLQkJICAvKiBJZiB3ZSBuZWVkIGNvbnZlcnNpb24gZnJvbSBUQ0hBUl9UW10gdG8gRENIQVJfVFtdLCB3ZSBuZWVkCistCQkgICAgIHRvIHBlcmZvcm0gdGhlIHBhZGRpbmcgYWZ0ZXIgdGhpcyBjb252ZXJzaW9uLiAgRnVuY3Rpb25zCistCQkgICAgIHdpdGggdW5pc3RkaW8gZXh0ZW5zaW9ucyBwZXJmb3JtIHRoZSBwYWRkaW5nIGJhc2VkIG9uCistCQkgICAgIGNoYXJhY3RlciBjb3VudCByYXRoZXIgdGhhbiBlbGVtZW50IGNvdW50LiAgKi8KKy0JCSAgY2FzZSAnYyc6IGNhc2UgJ3MnOgorLSMgZW5kaWYKKy0jIGlmIE5FRURfUFJJTlRGX0ZMQUdfWkVSTworLQkJICBjYXNlICdmJzogY2FzZSAnRic6IGNhc2UgJ2UnOiBjYXNlICdFJzogY2FzZSAnZyc6IGNhc2UgJ0cnOgorLQkJICBjYXNlICdhJzogY2FzZSAnQSc6CistIyBlbmRpZgorLQkJICAgIHBhZF9vdXJzZWx2ZXMgPSAxOworLQkJICAgIGJyZWFrOworLQkJICBkZWZhdWx0OgorLQkJICAgIHBhZF9vdXJzZWx2ZXMgPSBwcmVjX291cnNlbHZlczsKKy0JCSAgICBicmVhazsKKy0JCSAgfQorLSNlbmRpZgorLQorLQkJLyogQ29uc3RydWN0IHRoZSBmb3JtYXQgc3RyaW5nIGZvciBjYWxsaW5nIHNucHJpbnRmIG9yCistCQkgICBzcHJpbnRmLiAgKi8KKy0JCWZicCA9IGJ1ZjsKKy0JCSpmYnArKyA9ICclJzsKKy0jaWYgTkVFRF9QUklOVEZfRkxBR19HUk9VUElORworLQkJLyogVGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0IHRoZSAnIGZsYWcuCistCQkgICBQcm9kdWNlIG5vIGdyb3VwaW5nIGNoYXJhY3RlcnMgaW4gdGhpcyBjYXNlOyB0aGlzIGlzCistCQkgICBhY2NlcHRhYmxlIGJlY2F1c2UgdGhlIGdyb3VwaW5nIGlzIGxvY2FsZSBkZXBlbmRlbnQuICAqLworLSNlbHNlCistCQlpZiAoZmxhZ3MgJiBGTEFHX0dST1VQKQorLQkJICAqZmJwKysgPSAnXCcnOworLSNlbmRpZgorLQkJaWYgKGZsYWdzICYgRkxBR19MRUZUKQorLQkJICAqZmJwKysgPSAnLSc7CistCQlpZiAoZmxhZ3MgJiBGTEFHX1NIT1dTSUdOKQorLQkJICAqZmJwKysgPSAnKyc7CistCQlpZiAoZmxhZ3MgJiBGTEFHX1NQQUNFKQorLQkJICAqZmJwKysgPSAnICc7CistCQlpZiAoZmxhZ3MgJiBGTEFHX0FMVCkKKy0JCSAgKmZicCsrID0gJyMnOworLQkJaWYgKCFwYWRfb3Vyc2VsdmVzKQorLQkJICB7CistCQkgICAgaWYgKGZsYWdzICYgRkxBR19aRVJPKQorLQkJICAgICAgKmZicCsrID0gJzAnOworLQkJICAgIGlmIChkcC0+d2lkdGhfc3RhcnQgIT0gZHAtPndpZHRoX2VuZCkKKy0JCSAgICAgIHsKKy0JCQlzaXplX3QgbiA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CistCQkJLyogVGhlIHdpZHRoIHNwZWNpZmljYXRpb24gaXMga25vd24gdG8gY29uc2lzdCBvbmx5CistCQkJICAgb2Ygc3RhbmRhcmQgQVNDSUkgY2hhcmFjdGVycy4gICovCistCQkJaWYgKHNpemVvZiAoRkNIQVJfVCkgPT0gc2l6ZW9mIChUQ0hBUl9UKSkKKy0JCQkgIHsKKy0JCQkgICAgbWVtY3B5IChmYnAsIGRwLT53aWR0aF9zdGFydCwgbiAqIHNpemVvZiAoVENIQVJfVCkpOworLQkJCSAgICBmYnAgKz0gbjsKKy0JCQkgIH0KKy0JCQllbHNlCistCQkJICB7CistCQkJICAgIGNvbnN0IEZDSEFSX1QgKm1wID0gZHAtPndpZHRoX3N0YXJ0OworLQkJCSAgICBkbworLQkJCSAgICAgICpmYnArKyA9ICh1bnNpZ25lZCBjaGFyKSAqbXArKzsKKy0JCQkgICAgd2hpbGUgKC0tbiA+IDApOworLQkJCSAgfQorLQkJICAgICAgfQorLQkJICB9CistCQlpZiAoIXByZWNfb3Vyc2VsdmVzKQorLQkJICB7CistCQkgICAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCistCQkgICAgICB7CistCQkJc2l6ZV90IG4gPSBkcC0+cHJlY2lzaW9uX2VuZCAtIGRwLT5wcmVjaXNpb25fc3RhcnQ7CistCQkJLyogVGhlIHByZWNpc2lvbiBzcGVjaWZpY2F0aW9uIGlzIGtub3duIHRvIGNvbnNpc3Qgb25seQorLQkJCSAgIG9mIHN0YW5kYXJkIEFTQ0lJIGNoYXJhY3RlcnMuICAqLworLQkJCWlmIChzaXplb2YgKEZDSEFSX1QpID09IHNpemVvZiAoVENIQVJfVCkpCistCQkJICB7CistCQkJICAgIG1lbWNweSAoZmJwLCBkcC0+cHJlY2lzaW9uX3N0YXJ0LCBuICogc2l6ZW9mIChUQ0hBUl9UKSk7CistCQkJICAgIGZicCArPSBuOworLQkJCSAgfQorLQkJCWVsc2UKKy0JCQkgIHsKKy0JCQkgICAgY29uc3QgRkNIQVJfVCAqbXAgPSBkcC0+cHJlY2lzaW9uX3N0YXJ0OworLQkJCSAgICBkbworLQkJCSAgICAgICpmYnArKyA9ICh1bnNpZ25lZCBjaGFyKSAqbXArKzsKKy0JCQkgICAgd2hpbGUgKC0tbiA+IDApOworLQkJCSAgfQorLQkJICAgICAgfQorLQkJICB9CistCistCQlzd2l0Y2ggKHR5cGUpCistCQkgIHsKKy0jaWYgSEFWRV9MT05HX0xPTkdfSU5UCistCQkgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKy0JCSAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKy0jIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18KKy0JCSAgICAqZmJwKysgPSAnSSc7CistCQkgICAgKmZicCsrID0gJzYnOworLQkJICAgICpmYnArKyA9ICc0JzsKKy0JCSAgICBicmVhazsKKy0jIGVsc2UKKy0JCSAgICAqZmJwKysgPSAnbCc7CistCQkgICAgLypGQUxMVEhST1VHSCovCistIyBlbmRpZgorLSNlbmRpZgorLQkJICBjYXNlIFRZUEVfTE9OR0lOVDoKKy0JCSAgY2FzZSBUWVBFX1VMT05HSU5UOgorLSNpZiBIQVZFX1dJTlRfVAorLQkJICBjYXNlIFRZUEVfV0lERV9DSEFSOgorLSNlbmRpZgorLSNpZiBIQVZFX1dDSEFSX1QKKy0JCSAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorLSNlbmRpZgorLQkJICAgICpmYnArKyA9ICdsJzsKKy0JCSAgICBicmVhazsKKy0JCSAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CistCQkgICAgKmZicCsrID0gJ0wnOworLQkJICAgIGJyZWFrOworLQkJICBkZWZhdWx0OgorLQkJICAgIGJyZWFrOworLQkJICB9CistI2lmIE5FRURfUFJJTlRGX0RJUkVDVElWRV9GCistCQlpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ0YnKQorLQkJICAqZmJwID0gJ2YnOworLQkJZWxzZQorLSNlbmRpZgorLQkJICAqZmJwID0gZHAtPmNvbnZlcnNpb247CistI2lmIFVTRV9TTlBSSU5URgorLSMgaWYgIShfX0dMSUJDX18gPiAyIHx8IChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMykpCistCQlmYnBbMV0gPSAnJSc7CistCQlmYnBbMl0gPSAnbic7CistCQlmYnBbM10gPSAnXDAnOworLSMgZWxzZQorLQkJLyogT24gZ2xpYmMyIHN5c3RlbXMgZnJvbSBnbGliYyA+PSAyLjMgLSBwcm9iYWJseSBhbHNvIG9sZGVyCistCQkgICBvbmVzIC0gd2Uga25vdyB0aGF0IHNucHJpbnRmJ3MgcmV0dXJucyB2YWx1ZSBjb25mb3JtcyB0bworLQkJICAgSVNPIEMgOTk6IHRoZSBnbF9TTlBSSU5URl9ESVJFQ1RJVkVfTiB0ZXN0IHBhc3Nlcy4KKy0JCSAgIFRoZXJlZm9yZSB3ZSBjYW4gYXZvaWQgdXNpbmcgJW4gaW4gdGhpcyBzaXR1YXRpb24uCistCQkgICBPbiBnbGliYzIgc3lzdGVtcyBmcm9tIDIwMDQtMTAtMTggb3IgbmV3ZXIsIHRoZSB1c2Ugb2YgJW4KKy0JCSAgIGluIGZvcm1hdCBzdHJpbmdzIGluIHdyaXRhYmxlIG1lbW9yeSBtYXkgY3Jhc2ggdGhlIHByb2dyYW0KKy0JCSAgIChpZiBjb21waWxlZCB3aXRoIF9GT1JUSUZZX1NPVVJDRT0yKSwgc28gd2Ugc2hvdWxkIGF2b2lkIGl0CistCQkgICBpbiB0aGlzIHNpdHVhdGlvbi4gICovCistCQlmYnBbMV0gPSAnXDAnOworLSMgZW5kaWYKKy0jZWxzZQorLQkJZmJwWzFdID0gJ1wwJzsKKy0jZW5kaWYKKy0KKy0JCS8qIENvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGZvciBjYWxsaW5nIHNucHJpbnRmIG9yIHNwcmludGYuICAqLworLQkJcHJlZml4X2NvdW50ID0gMDsKKy0JCWlmICghcGFkX291cnNlbHZlcyAmJiBkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorLQkJICB7CistCQkgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCistCQkgICAgICBhYm9ydCAoKTsKKy0JCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworLQkJICB9CistCQlpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCistCQkgIHsKKy0JCSAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCistCQkgICAgICBhYm9ydCAoKTsKKy0JCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0uYS5hX2ludDsKKy0JCSAgfQorLQorLSNpZiBVU0VfU05QUklOVEYKKy0JCS8qIFRoZSBTTlBSSU5URiByZXN1bHQgaXMgYXBwZW5kZWQgYWZ0ZXIgcmVzdWx0WzAuLmxlbmd0aF0uCistCQkgICBUaGUgbGF0dGVyIGlzIGFuIGFycmF5IG9mIERDSEFSX1Q7IFNOUFJJTlRGIGFwcGVuZHMgYW4KKy0JCSAgIGFycmF5IG9mIFRDSEFSX1QgdG8gaXQuICBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UKKy0JCSAgIHNpemVvZiAoVENIQVJfVCkgZGl2aWRlcyBzaXplb2YgKERDSEFSX1QpIGFuZAorLQkJICAgYWxpZ25vZiAoVENIQVJfVCkgPD0gYWxpZ25vZiAoRENIQVJfVCkuICAqLworLSMgZGVmaW5lIFRDSEFSU19QRVJfRENIQVIgKHNpemVvZiAoRENIQVJfVCkgLyBzaXplb2YgKFRDSEFSX1QpKQorLQkJLyogUHJlcGFyZSBjaGVja2luZyB3aGV0aGVyIHNucHJpbnRmIHJldHVybnMgdGhlIGNvdW50CistCQkgICB2aWEgJW4uICAqLworLQkJRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgMSkpOworLQkJKihUQ0hBUl9UICopIChyZXN1bHQgKyBsZW5ndGgpID0gJ1wwJzsKKy0jZW5kaWYKKy0KKy0JCWZvciAoOzspCistCQkgIHsKKy0JCSAgICBpbnQgY291bnQgPSAtMTsKKy0KKy0jaWYgVVNFX1NOUFJJTlRGCistCQkgICAgaW50IHJldGNvdW50ID0gMDsKKy0JCSAgICBzaXplX3QgbWF4bGVuID0gYWxsb2NhdGVkIC0gbGVuZ3RoOworLQkJICAgIC8qIFNOUFJJTlRGIGNhbiBmYWlsIGlmIGl0cyBzZWNvbmQgYXJndW1lbnQgaXMKKy0JCSAgICAgICA+IElOVF9NQVguICAqLworLQkJICAgIGlmIChtYXhsZW4gPiBJTlRfTUFYIC8gVENIQVJTX1BFUl9EQ0hBUikKKy0JCSAgICAgIG1heGxlbiA9IElOVF9NQVggLyBUQ0hBUlNfUEVSX0RDSEFSOworLQkJICAgIG1heGxlbiA9IG1heGxlbiAqIFRDSEFSU19QRVJfRENIQVI7CistIyBkZWZpbmUgU05QUklOVEZfQlVGKGFyZykgXAorLQkJICAgIHN3aXRjaCAocHJlZml4X2NvdW50KQkJCQkgICAgXAorLQkJICAgICAgewkJCQkJCQkgICAgXAorLQkJICAgICAgY2FzZSAwOgkJCQkJCSAgICBcCistCQkJcmV0Y291bnQgPSBTTlBSSU5URiAoKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCksIFwKKy0JCQkJCSAgICAgbWF4bGVuLCBidWYsCQkgICAgXAorLQkJCQkJICAgICBhcmcsICZjb3VudCk7CQkgICAgXAorLQkJCWJyZWFrOwkJCQkJCSAgICBcCistCQkgICAgICBjYXNlIDE6CQkJCQkJICAgIFwKKy0JCQlyZXRjb3VudCA9IFNOUFJJTlRGICgoVENIQVJfVCAqKSAocmVzdWx0ICsgbGVuZ3RoKSwgXAorLQkJCQkJICAgICBtYXhsZW4sIGJ1ZiwJCSAgICBcCistCQkJCQkgICAgIHByZWZpeGVzWzBdLCBhcmcsICZjb3VudCk7CSAgICBcCistCQkJYnJlYWs7CQkJCQkJICAgIFwKKy0JCSAgICAgIGNhc2UgMjoJCQkJCQkgICAgXAorLQkJCXJldGNvdW50ID0gU05QUklOVEYgKChUQ0hBUl9UICopIChyZXN1bHQgKyBsZW5ndGgpLCBcCistCQkJCQkgICAgIG1heGxlbiwgYnVmLAkJICAgIFwKKy0JCQkJCSAgICAgcHJlZml4ZXNbMF0sIHByZWZpeGVzWzFdLCBhcmcsIFwKKy0JCQkJCSAgICAgJmNvdW50KTsJCQkgICAgXAorLQkJCWJyZWFrOwkJCQkJCSAgICBcCistCQkgICAgICBkZWZhdWx0OgkJCQkJCSAgICBcCistCQkJYWJvcnQgKCk7CQkJCQkgICAgXAorLQkJICAgICAgfQorLSNlbHNlCistIyBkZWZpbmUgU05QUklOVEZfQlVGKGFyZykgXAorLQkJICAgIHN3aXRjaCAocHJlZml4X2NvdW50KQkJCQkgICAgXAorLQkJICAgICAgewkJCQkJCQkgICAgXAorLQkJICAgICAgY2FzZSAwOgkJCQkJCSAgICBcCistCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgYXJnKTsJCSAgICBcCistCQkJYnJlYWs7CQkJCQkJICAgIFwKKy0JCSAgICAgIGNhc2UgMToJCQkJCQkgICAgXAorLQkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIHByZWZpeGVzWzBdLCBhcmcpOwkgICAgXAorLQkJCWJyZWFrOwkJCQkJCSAgICBcCistCQkgICAgICBjYXNlIDI6CQkJCQkJICAgIFwKKy0JCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBwcmVmaXhlc1swXSwgcHJlZml4ZXNbMV0sXAorLQkJCQkJIGFyZyk7CQkJCSAgICBcCistCQkJYnJlYWs7CQkJCQkJICAgIFwKKy0JCSAgICAgIGRlZmF1bHQ6CQkJCQkJICAgIFwKKy0JCQlhYm9ydCAoKTsJCQkJCSAgICBcCistCQkgICAgICB9CistI2VuZGlmCistCistCQkgICAgc3dpdGNoICh0eXBlKQorLQkJICAgICAgeworLQkJICAgICAgY2FzZSBUWVBFX1NDSEFSOgorLQkJCXsKKy0JCQkgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc2NoYXI7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLQkJICAgICAgY2FzZSBUWVBFX1VDSEFSOgorLQkJCXsKKy0JCQkgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWNoYXI7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLQkJICAgICAgY2FzZSBUWVBFX1NIT1JUOgorLQkJCXsKKy0JCQkgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc2hvcnQ7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLQkJICAgICAgY2FzZSBUWVBFX1VTSE9SVDoKKy0JCQl7CistCQkJICB1bnNpZ25lZCBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VzaG9ydDsKKy0JCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKy0JCQl9CistCQkJYnJlYWs7CistCQkgICAgICBjYXNlIFRZUEVfSU5UOgorLQkJCXsKKy0JCQkgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfaW50OworLQkJCSAgU05QUklOVEZfQlVGIChhcmcpOworLQkJCX0KKy0JCQlicmVhazsKKy0JCSAgICAgIGNhc2UgVFlQRV9VSU5UOgorLQkJCXsKKy0JCQkgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWludDsKKy0JCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKy0JCQl9CistCQkJYnJlYWs7CistCQkgICAgICBjYXNlIFRZUEVfTE9OR0lOVDoKKy0JCQl7CistCQkJICBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2ludDsKKy0JCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKy0JCQl9CistCQkJYnJlYWs7CistCQkgICAgICBjYXNlIFRZUEVfVUxPTkdJTlQ6CistCQkJeworLQkJCSAgdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3Vsb25naW50OworLQkJCSAgU05QUklOVEZfQlVGIChhcmcpOworLQkJCX0KKy0JCQlicmVhazsKKy0jaWYgSEFWRV9MT05HX0xPTkdfSU5UCistCQkgICAgICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6CistCQkJeworLQkJCSAgbG9uZyBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2xvbmdpbnQ7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLQkJICAgICAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKy0JCQl7CistCQkJICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91bG9uZ2xvbmdpbnQ7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLSNlbmRpZgorLQkJICAgICAgY2FzZSBUWVBFX0RPVUJMRToKKy0JCQl7CistCQkJICBkb3VibGUgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2RvdWJsZTsKKy0JCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKy0JCQl9CistCQkJYnJlYWs7CistCQkgICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKy0JCQl7CistCQkJICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKKy0JCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKy0JCQl9CistCQkJYnJlYWs7CistCQkgICAgICBjYXNlIFRZUEVfQ0hBUjoKKy0JCQl7CistCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NoYXI7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLSNpZiBIQVZFX1dJTlRfVAorLQkJICAgICAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKKy0JCQl7CistCQkJICB3aW50X3QgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfY2hhcjsKKy0JCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKy0JCQl9CistCQkJYnJlYWs7CistI2VuZGlmCistCQkgICAgICBjYXNlIFRZUEVfU1RSSU5HOgorLQkJCXsKKy0JCQkgIGNvbnN0IGNoYXIgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zdHJpbmc7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLSNpZiBIQVZFX1dDSEFSX1QKKy0JCSAgICAgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKKy0JCQl7CistCQkJICBjb25zdCB3Y2hhcl90ICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmc7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLSNlbmRpZgorLQkJICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CistCQkJeworLQkJCSAgdm9pZCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3BvaW50ZXI7CistCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CistCQkJfQorLQkJCWJyZWFrOworLQkJICAgICAgZGVmYXVsdDoKKy0JCQlhYm9ydCAoKTsKKy0JCSAgICAgIH0KKy0KKy0jaWYgVVNFX1NOUFJJTlRGCistCQkgICAgLyogUG9ydGFiaWxpdHk6IE5vdCBhbGwgaW1wbGVtZW50YXRpb25zIG9mIHNucHJpbnRmKCkKKy0JCSAgICAgICBhcmUgSVNPIEMgOTkgY29tcGxpYW50LiAgRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKKy0JCSAgICAgICBieXRlcyB0aGF0IHNucHJpbnRmKCkgaGFzIHByb2R1Y2VkIG9yIHdvdWxkIGhhdmUKKy0JCSAgICAgICBwcm9kdWNlZC4gICovCistCQkgICAgaWYgKGNvdW50ID49IDApCistCQkgICAgICB7CistCQkJLyogVmVyaWZ5IHRoYXQgc25wcmludGYoKSBoYXMgTlVMLXRlcm1pbmF0ZWQgaXRzCistCQkJICAgcmVzdWx0LiAgKi8KKy0JCQlpZiAoY291bnQgPCBtYXhsZW4KKy0JCQkgICAgJiYgKChUQ0hBUl9UICopIChyZXN1bHQgKyBsZW5ndGgpKSBbY291bnRdICE9ICdcMCcpCistCQkJICBhYm9ydCAoKTsKKy0JCQkvKiBQb3J0YWJpbGl0eSBoYWNrLiAgKi8KKy0JCQlpZiAocmV0Y291bnQgPiBjb3VudCkKKy0JCQkgIGNvdW50ID0gcmV0Y291bnQ7CistCQkgICAgICB9CistCQkgICAgZWxzZQorLQkJICAgICAgeworLQkJCS8qIHNucHJpbnRmKCkgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nCistCQkJICAgZGlyZWN0aXZlLiAgKi8KKy0JCQlpZiAoZmJwWzFdICE9ICdcMCcpCistCQkJICB7CistCQkJICAgIC8qIERvbid0IHVzZSB0aGUgJyVuJyBkaXJlY3RpdmU7IGluc3RlYWQsIGxvb2sKKy0JCQkgICAgICAgYXQgdGhlIHNucHJpbnRmKCkgcmV0dXJuIHZhbHVlLiAgKi8KKy0JCQkgICAgZmJwWzFdID0gJ1wwJzsKKy0JCQkgICAgY29udGludWU7CistCQkJICB9CistCQkJZWxzZQorLQkJCSAgeworLQkJCSAgICAvKiBMb29rIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCistCQkJICAgIGlmIChyZXRjb3VudCA8IDApCistCQkJICAgICAgeworLQkJCQkvKiBIUC1VWCAxMC4yMCBzbnByaW50ZigpIGlzIGRvdWJseSBkZWZpY2llbnQ6CistCQkJCSAgIEl0IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJyBkaXJlY3RpdmUsCistCQkJCSAgICphbmQqIGl0IHJldHVybnMgLTEgKHJhdGhlciB0aGFuIHRoZSBsZW5ndGgKKy0JCQkJICAgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmVxdWlyZWQpIHdoZW4gdGhlCistCQkJCSAgIGJ1ZmZlciBpcyB0b28gc21hbGwuICAqLworLQkJCQlzaXplX3QgYmlnZ2VyX25lZWQgPQorLQkJCQkgIHhzdW0gKHh0aW1lcyAoYWxsb2NhdGVkLCAyKSwgMTIpOworLQkJCQlFTlNVUkVfQUxMT0NBVElPTiAoYmlnZ2VyX25lZWQpOworLQkJCQljb250aW51ZTsKKy0JCQkgICAgICB9CistCQkJICAgIGVsc2UKKy0JCQkgICAgICBjb3VudCA9IHJldGNvdW50OworLQkJCSAgfQorLQkJICAgICAgfQorLSNlbmRpZgorLQorLQkJICAgIC8qIEF0dGVtcHQgdG8gaGFuZGxlIGZhaWx1cmUuICAqLworLQkJICAgIGlmIChjb3VudCA8IDApCistCQkgICAgICB7CistCQkJaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCistCQkJICBmcmVlIChyZXN1bHQpOworLQkJCWlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKy0JCQkgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CistCQkJQ0xFQU5VUCAoKTsKKy0JCQllcnJubyA9IEVJTlZBTDsKKy0JCQlyZXR1cm4gTlVMTDsKKy0JCSAgICAgIH0KKy0KKy0jaWYgVVNFX1NOUFJJTlRGCistCQkgICAgLyogSGFuZGxlIG92ZXJmbG93IG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLgorLQkJICAgICAgIElmIHN1Y2ggYW4gb3ZlcmZsb3cgb2NjdXJzLCBhIEM5OSBjb21wbGlhbnQgc25wcmludGYoKQorLQkJICAgICAgIHJldHVybnMgYSBjb3VudCA+PSBtYXhsZW4uICBIb3dldmVyLCBhIG5vbi1jb21wbGlhbnQKKy0JCSAgICAgICBzbnByaW50ZigpIGZ1bmN0aW9uIHJldHVybnMgb25seSBjb3VudCA9IG1heGxlbiAtIDEuICBUbworLQkJICAgICAgIGNvdmVyIGJvdGggY2FzZXMsIHRlc3Qgd2hldGhlciBjb3VudCA+PSBtYXhsZW4gLSAxLiAgKi8KKy0JCSAgICBpZiAoKHVuc2lnbmVkIGludCkgY291bnQgKyAxID49IG1heGxlbikKKy0JCSAgICAgIHsKKy0JCQkvKiBJZiBtYXhsZW4gYWxyZWFkeSBoYXMgYXR0YWluZWQgaXRzIGFsbG93ZWQgbWF4aW11bSwKKy0JCQkgICBhbGxvY2F0aW5nIG1vcmUgbWVtb3J5IHdpbGwgbm90IGluY3JlYXNlIG1heGxlbi4KKy0JCQkgICBJbnN0ZWFkIG9mIGxvb3BpbmcsIGJhaWwgb3V0LiAgKi8KKy0JCQlpZiAobWF4bGVuID09IElOVF9NQVggLyBUQ0hBUlNfUEVSX0RDSEFSKQorLQkJCSAgZ290byBvdmVyZmxvdzsKKy0JCQllbHNlCistCQkJICB7CistCQkJICAgIC8qIE5lZWQgYXQgbGVhc3QgY291bnQgKiBzaXplb2YgKFRDSEFSX1QpIGJ5dGVzLgorLQkJCSAgICAgICBCdXQgYWxsb2NhdGUgcHJvcG9ydGlvbmFsbHksIHRvIGF2b2lkIGxvb3BpbmcKKy0JCQkgICAgICAgZXRlcm5hbGx5IGlmIHNucHJpbnRmKCkgcmVwb3J0cyBhIHRvbyBzbWFsbAorLQkJCSAgICAgICBjb3VudC4gICovCistCQkJICAgIHNpemVfdCBuID0KKy0JCQkgICAgICB4bWF4ICh4c3VtIChsZW5ndGgsCistCQkJCQkgIChjb3VudCArIFRDSEFSU19QRVJfRENIQVIgLSAxKQorLQkJCQkJICAvIFRDSEFSU19QRVJfRENIQVIpLAorLQkJCQkgICAgeHRpbWVzIChhbGxvY2F0ZWQsIDIpKTsKKy0KKy0JCQkgICAgRU5TVVJFX0FMTE9DQVRJT04gKG4pOworLQkJCSAgICBjb250aW51ZTsKKy0JCQkgIH0KKy0JCSAgICAgIH0KKy0jZW5kaWYKKy0KKy0jaWYgTkVFRF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTgorLQkJICAgIGlmIChwcmVjX291cnNlbHZlcykKKy0JCSAgICAgIHsKKy0JCQkvKiBIYW5kbGUgdGhlIHByZWNpc2lvbi4gICovCistCQkJVENIQVJfVCAqcHJlY19wdHIgPSAKKy0jIGlmIFVTRV9TTlBSSU5URgorLQkJCSAgKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCk7CistIyBlbHNlCistCQkJICB0bXA7CistIyBlbmRpZgorLQkJCXNpemVfdCBwcmVmaXhfY291bnQ7CistCQkJc2l6ZV90IG1vdmU7CistCistCQkJcHJlZml4X2NvdW50ID0gMDsKKy0JCQkvKiBQdXQgdGhlIGFkZGl0aW9uYWwgemVyb2VzIGFmdGVyIHRoZSBzaWduLiAgKi8KKy0JCQlpZiAoY291bnQgPj0gMQorLQkJCSAgICAmJiAoKnByZWNfcHRyID09ICctJyB8fCAqcHJlY19wdHIgPT0gJysnCistCQkJCXx8ICpwcmVjX3B0ciA9PSAnICcpKQorLQkJCSAgcHJlZml4X2NvdW50ID0gMTsKKy0JCQkvKiBQdXQgdGhlIGFkZGl0aW9uYWwgemVyb2VzIGFmdGVyIHRoZSAweCBwcmVmaXggaWYKKy0JCQkgICAoZmxhZ3MgJiBGTEFHX0FMVCkgfHwgKGRwLT5jb252ZXJzaW9uID09ICdwJykuICAqLworLQkJCWVsc2UgaWYgKGNvdW50ID49IDIKKy0JCQkJICYmIHByZWNfcHRyWzBdID09ICcwJworLQkJCQkgJiYgKHByZWNfcHRyWzFdID09ICd4JyB8fCBwcmVjX3B0clsxXSA9PSAnWCcpKQorLQkJCSAgcHJlZml4X2NvdW50ID0gMjsKKy0KKy0JCQltb3ZlID0gY291bnQgLSBwcmVmaXhfY291bnQ7CistCQkJaWYgKHByZWNpc2lvbiA+IG1vdmUpCistCQkJICB7CistCQkJICAgIC8qIEluc2VydCB6ZXJvZXMuICAqLworLQkJCSAgICBzaXplX3QgaW5zZXJ0ID0gcHJlY2lzaW9uIC0gbW92ZTsKKy0JCQkgICAgVENIQVJfVCAqcHJlY19lbmQ7CistCistIyBpZiBVU0VfU05QUklOVEYKKy0JCQkgICAgc2l6ZV90IG4gPQorLQkJCSAgICAgIHhzdW0gKGxlbmd0aCwKKy0JCQkJICAgIChjb3VudCArIGluc2VydCArIFRDSEFSU19QRVJfRENIQVIgLSAxKQorLQkJCQkgICAgLyBUQ0hBUlNfUEVSX0RDSEFSKTsKKy0JCQkgICAgbGVuZ3RoICs9IChjb3VudCArIFRDSEFSU19QRVJfRENIQVIgLSAxKSAvIFRDSEFSU19QRVJfRENIQVI7CistCQkJICAgIEVOU1VSRV9BTExPQ0FUSU9OIChuKTsKKy0JCQkgICAgbGVuZ3RoIC09IChjb3VudCArIFRDSEFSU19QRVJfRENIQVIgLSAxKSAvIFRDSEFSU19QRVJfRENIQVI7CistCQkJICAgIHByZWNfcHRyID0gKFRDSEFSX1QgKikgKHJlc3VsdCArIGxlbmd0aCk7CistIyBlbmRpZgorLQorLQkJCSAgICBwcmVjX2VuZCA9IHByZWNfcHRyICsgY291bnQ7CistCQkJICAgIHByZWNfcHRyICs9IHByZWZpeF9jb3VudDsKKy0KKy0JCQkgICAgd2hpbGUgKHByZWNfZW5kID4gcHJlY19wdHIpCistCQkJICAgICAgeworLQkJCQlwcmVjX2VuZC0tOworLQkJCQlwcmVjX2VuZFtpbnNlcnRdID0gcHJlY19lbmRbMF07CistCQkJICAgICAgfQorLQorLQkJCSAgICBwcmVjX2VuZCArPSBpbnNlcnQ7CistCQkJICAgIGRvCistCQkJICAgICAgKi0tcHJlY19lbmQgPSAnMCc7CistCQkJICAgIHdoaWxlIChwcmVjX2VuZCA+IHByZWNfcHRyKTsKKy0KKy0JCQkgICAgY291bnQgKz0gaW5zZXJ0OworLQkJCSAgfQorLQkJICAgICAgfQorLSNlbmRpZgorLQorLSNpZiAhRENIQVJfSVNfVENIQVIKKy0jIGlmICFVU0VfU05QUklOVEYKKy0JCSAgICBpZiAoY291bnQgPj0gdG1wX2xlbmd0aCkKKy0JCSAgICAgIC8qIHRtcF9sZW5ndGggd2FzIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQgLSBmaXggdGhlCistCQkJIGNvZGUgYWJvdmUhICAqLworLQkJICAgICAgYWJvcnQgKCk7CistIyBlbmRpZgorLQorLQkJICAgIC8qIENvbnZlcnQgZnJvbSBUQ0hBUl9UW10gdG8gRENIQVJfVFtdLiAgKi8KKy0JCSAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ2MnIHx8IGRwLT5jb252ZXJzaW9uID09ICdzJykKKy0JCSAgICAgIHsKKy0JCQkvKiB0eXBlID0gVFlQRV9DSEFSIG9yIFRZUEVfV0lERV9DSEFSIG9yIFRZUEVfU1RSSU5HCistCQkJICAgVFlQRV9XSURFX1NUUklORy4KKy0JCQkgICBUaGUgcmVzdWx0IHN0cmluZyBpcyBub3QgY2VydGFpbmx5IEFTQ0lJLiAgKi8KKy0JCQljb25zdCBUQ0hBUl9UICp0bXBzcmM7CistCQkJRENIQVJfVCAqdG1wZHN0OworLQkJCXNpemVfdCB0bXBkc3RfbGVuOworLQkJCS8qIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgVENIQVJfVCBpcyAnY2hhcicuICAqLworLQkJCXR5cGVkZWYgaW50IFRDSEFSX1RfdmVyaWZ5CistCQkJCSAgICBbMiAqIChzaXplb2YgKFRDSEFSX1QpID09IDEpIC0gMV07CistIyBpZiBVU0VfU05QUklOVEYKKy0JCQl0bXBzcmMgPSAoVENIQVJfVCAqKSAocmVzdWx0ICsgbGVuZ3RoKTsKKy0jIGVsc2UKKy0JCQl0bXBzcmMgPSB0bXA7CistIyBlbmRpZgorLQkJCXRtcGRzdCA9IE5VTEw7CistCQkJdG1wZHN0X2xlbiA9IDA7CistCQkJaWYgKERDSEFSX0NPTlZfRlJPTV9FTkNPRElORyAobG9jYWxlX2NoYXJzZXQgKCksCistCQkJCQkJICAgICAgaWNvbnZlaF9xdWVzdGlvbl9tYXJrLAorLQkJCQkJCSAgICAgIHRtcHNyYywgY291bnQsCistCQkJCQkJICAgICAgTlVMTCwKKy0JCQkJCQkgICAgICAmdG1wZHN0LCAmdG1wZHN0X2xlbikKKy0JCQkgICAgPCAwKQorLQkJCSAgeworLQkJCSAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKy0JCQkgICAgaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCistCQkJICAgICAgZnJlZSAocmVzdWx0KTsKKy0JCQkgICAgaWYgKGJ1Zl9tYWxsb2NlZCAhPSBOVUxMKQorLQkJCSAgICAgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CistCQkJICAgIENMRUFOVVAgKCk7CistCQkJICAgIGVycm5vID0gc2F2ZWRfZXJybm87CistCQkJICAgIHJldHVybiBOVUxMOworLQkJCSAgfQorLQkJCUVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIHRtcGRzdF9sZW4pKTsKKy0JCQlEQ0hBUl9DUFkgKHJlc3VsdCArIGxlbmd0aCwgdG1wZHN0LCB0bXBkc3RfbGVuKTsKKy0JCQlmcmVlICh0bXBkc3QpOworLQkJCWNvdW50ID0gdG1wZHN0X2xlbjsKKy0JCSAgICAgIH0KKy0JCSAgICBlbHNlCistCQkgICAgICB7CistCQkJLyogVGhlIHJlc3VsdCBzdHJpbmcgaXMgQVNDSUkuCistCQkJICAgU2ltcGxlIDE6MSBjb252ZXJzaW9uLiAgKi8KKy0jIGlmIFVTRV9TTlBSSU5URgorLQkJCS8qIElmIHNpemVvZiAoRENIQVJfVCkgPT0gc2l6ZW9mIChUQ0hBUl9UKSwgaXQncyBhCistCQkJICAgbm8tb3AgY29udmVyc2lvbiwgaW4tcGxhY2Ugb24gdGhlIGFycmF5IHN0YXJ0aW5nCistCQkJICAgYXQgKHJlc3VsdCArIGxlbmd0aCkuICAqLworLQkJCWlmIChzaXplb2YgKERDSEFSX1QpICE9IHNpemVvZiAoVENIQVJfVCkpCistIyBlbmRpZgorLQkJCSAgeworLQkJCSAgICBjb25zdCBUQ0hBUl9UICp0bXBzcmM7CistCQkJICAgIERDSEFSX1QgKnRtcGRzdDsKKy0JCQkgICAgc2l6ZV90IG47CistCistIyBpZiBVU0VfU05QUklOVEYKKy0JCQkgICAgaWYgKHJlc3VsdCA9PSByZXN1bHRidWYpCistCQkJICAgICAgeworLQkJCQl0bXBzcmMgPSAoVENIQVJfVCAqKSAocmVzdWx0ICsgbGVuZ3RoKTsKKy0JCQkJLyogRU5TVVJFX0FMTE9DQVRJT04gd2lsbCBub3QgbW92ZSB0bXBzcmMKKy0JCQkJICAgKGJlY2F1c2UgaXQncyBwYXJ0IG9mIHJlc3VsdGJ1ZikuICAqLworLQkJCQlFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBjb3VudCkpOworLQkJCSAgICAgIH0KKy0JCQkgICAgZWxzZQorLQkJCSAgICAgIHsKKy0JCQkJLyogRU5TVVJFX0FMTE9DQVRJT04gd2lsbCBtb3ZlIHRoZSBhcnJheQorLQkJCQkgICAoYmVjYXVzZSBpdCB1c2VzIHJlYWxsb2MoKS4gICovCistCQkJCUVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIGNvdW50KSk7CistCQkJCXRtcHNyYyA9IChUQ0hBUl9UICopIChyZXN1bHQgKyBsZW5ndGgpOworLQkJCSAgICAgIH0KKy0jIGVsc2UKKy0JCQkgICAgdG1wc3JjID0gdG1wOworLQkJCSAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCBjb3VudCkpOworLSMgZW5kaWYKKy0JCQkgICAgdG1wZHN0ID0gcmVzdWx0ICsgbGVuZ3RoOworLQkJCSAgICAvKiBDb3B5IGJhY2t3YXJkcywgYmVjYXVzZSBvZiBvdmVybGFwcGluZy4gICovCistCQkJICAgIHRtcHNyYyArPSBjb3VudDsKKy0JCQkgICAgdG1wZHN0ICs9IGNvdW50OworLQkJCSAgICBmb3IgKG4gPSBjb3VudDsgbiA+IDA7IG4tLSkKKy0JCQkgICAgICAqLS10bXBkc3QgPSAodW5zaWduZWQgY2hhcikgKi0tdG1wc3JjOworLQkJCSAgfQorLQkJICAgICAgfQorLSNlbmRpZgorLQorLSNpZiBEQ0hBUl9JU19UQ0hBUiAmJiAhVVNFX1NOUFJJTlRGCistCQkgICAgLyogTWFrZSByb29tIGZvciB0aGUgcmVzdWx0LiAgKi8KKy0JCSAgICBpZiAoY291bnQgPiBhbGxvY2F0ZWQgLSBsZW5ndGgpCistCQkgICAgICB7CistCQkJLyogTmVlZCBhdCBsZWFzdCBjb3VudCBlbGVtZW50cy4gIEJ1dCBhbGxvY2F0ZQorLQkJCSAgIHByb3BvcnRpb25hbGx5LiAgKi8KKy0JCQlzaXplX3QgbiA9CistCQkJICB4bWF4ICh4c3VtIChsZW5ndGgsIGNvdW50KSwgeHRpbWVzIChhbGxvY2F0ZWQsIDIpKTsKKy0KKy0JCQlFTlNVUkVfQUxMT0NBVElPTiAobik7CistCQkgICAgICB9CistI2VuZGlmCistCistCQkgICAgLyogSGVyZSBjb3VudCA8PSBhbGxvY2F0ZWQgLSBsZW5ndGguICAqLworLQorLQkJICAgIC8qIFBlcmZvcm0gcGFkZGluZy4gICovCistI2lmICFEQ0hBUl9JU19UQ0hBUiB8fCBFTkFCTEVfVU5JU1RESU8gfHwgTkVFRF9QUklOVEZfRkxBR19aRVJPIHx8IE5FRURfUFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04KKy0JCSAgICBpZiAocGFkX291cnNlbHZlcyAmJiBoYXNfd2lkdGgpCistCQkgICAgICB7CistCQkJc2l6ZV90IHc7CistIyBpZiBFTkFCTEVfVU5JU1RESU8KKy0JCQkvKiBPdXRzaWRlIFBPU0lYLCBpdCdzIHByZWZlcnJhYmxlIHRvIGNvbXBhcmUgdGhlIHdpZHRoCistCQkJICAgYWdhaW5zdCB0aGUgbnVtYmVyIG9mIF9jaGFyYWN0ZXJzXyBvZiB0aGUgY29udmVydGVkCistCQkJICAgdmFsdWUuICAqLworLQkJCXcgPSBEQ0hBUl9NQlNOTEVOIChyZXN1bHQgKyBsZW5ndGgsIGNvdW50KTsKKy0jIGVsc2UKKy0JCQkvKiBUaGUgd2lkdGggaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgbnVtYmVyIG9mIF9ieXRlc18KKy0JCQkgICBvZiB0aGUgY29udmVydGVkIHZhbHVlLCBzYXlzIFBPU0lYLiAgKi8KKy0JCQl3ID0gY291bnQ7CistIyBlbmRpZgorLQkJCWlmICh3IDwgd2lkdGgpCistCQkJICB7CistCQkJICAgIHNpemVfdCBwYWQgPSB3aWR0aCAtIHc7CistIyBpZiBVU0VfU05QUklOVEYKKy0JCQkgICAgLyogTWFrZSByb29tIGZvciB0aGUgcmVzdWx0LiAgKi8KKy0JCQkgICAgaWYgKHhzdW0gKGNvdW50LCBwYWQpID4gYWxsb2NhdGVkIC0gbGVuZ3RoKQorLQkJCSAgICAgIHsKKy0JCQkJLyogTmVlZCBhdCBsZWFzdCBjb3VudCArIHBhZCBlbGVtZW50cy4gIEJ1dAorLQkJCQkgICBhbGxvY2F0ZSBwcm9wb3J0aW9uYWxseS4gICovCistCQkJCXNpemVfdCBuID0KKy0JCQkJICB4bWF4ICh4c3VtMyAobGVuZ3RoLCBjb3VudCwgcGFkKSwKKy0JCQkJCXh0aW1lcyAoYWxsb2NhdGVkLCAyKSk7CistCistCQkJCWxlbmd0aCArPSBjb3VudDsKKy0JCQkJRU5TVVJFX0FMTE9DQVRJT04gKG4pOworLQkJCQlsZW5ndGggLT0gY291bnQ7CistCQkJICAgICAgfQorLQkJCSAgICAvKiBIZXJlIGNvdW50ICsgcGFkIDw9IGFsbG9jYXRlZCAtIGxlbmd0aC4gICovCistIyBlbmRpZgorLQkJCSAgICB7CistIyBpZiAhRENIQVJfSVNfVENIQVIgfHwgVVNFX1NOUFJJTlRGCistCQkJICAgICAgRENIQVJfVCAqIGNvbnN0IHJwID0gcmVzdWx0ICsgbGVuZ3RoOworLSMgZWxzZQorLQkJCSAgICAgIERDSEFSX1QgKiBjb25zdCBycCA9IHRtcDsKKy0jIGVuZGlmCistCQkJICAgICAgRENIQVJfVCAqcCA9IHJwICsgY291bnQ7CistCQkJICAgICAgRENIQVJfVCAqZW5kID0gcCArIHBhZDsKKy0jIGlmIE5FRURfUFJJTlRGX0ZMQUdfWkVSTworLQkJCSAgICAgIERDSEFSX1QgKnBhZF9wdHI7CistIyAgaWYgIURDSEFSX0lTX1RDSEFSCistCQkJICAgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICdjJworLQkJCQkgIHx8IGRwLT5jb252ZXJzaW9uID09ICdzJykKKy0JCQkJLyogTm8gemVyby1wYWRkaW5nIGZvciBzdHJpbmcgZGlyZWN0aXZlcy4gICovCistCQkJCXBhZF9wdHIgPSBOVUxMOworLQkJCSAgICAgIGVsc2UKKy0jICBlbmRpZgorLQkJCQl7CistCQkJCSAgcGFkX3B0ciA9ICgqcnAgPT0gJy0nID8gcnAgKyAxIDogcnApOworLQkJCQkgIC8qIE5vIHplcm8tcGFkZGluZyBvZiAiaW5mIiBhbmQgIm5hbiIuICAqLworLQkJCQkgIGlmICgoKnBhZF9wdHIgPj0gJ0EnICYmICpwYWRfcHRyIDw9ICdaJykKKy0JCQkJICAgICAgfHwgKCpwYWRfcHRyID49ICdhJyAmJiAqcGFkX3B0ciA8PSAneicpKQorLQkJCQkgICAgcGFkX3B0ciA9IE5VTEw7CistCQkJCX0KKy0jIGVuZGlmCistCQkJICAgICAgLyogVGhlIGdlbmVyYXRlZCBzdHJpbmcgbm93IGV4dGVuZHMgZnJvbSBycCB0byBwLAorLQkJCQkgd2l0aCB0aGUgemVybyBwYWRkaW5nIGluc2VydGlvbiBwb2ludCBiZWluZyBhdAorLQkJCQkgcGFkX3B0ci4gICovCistCistCQkJICAgICAgY291bnQgPSBjb3VudCArIHBhZDsgLyogPSBlbmQgLSBycCAqLworLQorLQkJCSAgICAgIGlmIChmbGFncyAmIEZMQUdfTEVGVCkKKy0JCQkJeworLQkJCQkgIC8qIFBhZCB3aXRoIHNwYWNlcyBvbiB0aGUgcmlnaHQuICAqLworLQkJCQkgIGZvciAoOyBwYWQgPiAwOyBwYWQtLSkKKy0JCQkJICAgICpwKysgPSAnICc7CistCQkJCX0KKy0jIGlmIE5FRURfUFJJTlRGX0ZMQUdfWkVSTworLQkJCSAgICAgIGVsc2UgaWYgKChmbGFncyAmIEZMQUdfWkVSTykgJiYgcGFkX3B0ciAhPSBOVUxMKQorLQkJCQl7CistCQkJCSAgLyogUGFkIHdpdGggemVyb2VzLiAgKi8KKy0JCQkJICBEQ0hBUl9UICpxID0gZW5kOworLQorLQkJCQkgIHdoaWxlIChwID4gcGFkX3B0cikKKy0JCQkJICAgICotLXEgPSAqLS1wOworLQkJCQkgIGZvciAoOyBwYWQgPiAwOyBwYWQtLSkKKy0JCQkJICAgICpwKysgPSAnMCc7CistCQkJCX0KKy0jIGVuZGlmCistCQkJICAgICAgZWxzZQorLQkJCQl7CistCQkJCSAgLyogUGFkIHdpdGggc3BhY2VzIG9uIHRoZSBsZWZ0LiAgKi8KKy0JCQkJICBEQ0hBUl9UICpxID0gZW5kOworLQorLQkJCQkgIHdoaWxlIChwID4gcnApCistCQkJCSAgICAqLS1xID0gKi0tcDsKKy0JCQkJICBmb3IgKDsgcGFkID4gMDsgcGFkLS0pCistCQkJCSAgICAqcCsrID0gJyAnOworLQkJCQl9CistCQkJICAgIH0KKy0JCQkgIH0KKy0JCSAgICAgIH0KKy0jZW5kaWYKKy0KKy0jaWYgRENIQVJfSVNfVENIQVIgJiYgIVVTRV9TTlBSSU5URgorLQkJICAgIGlmIChjb3VudCA+PSB0bXBfbGVuZ3RoKQorLQkJICAgICAgLyogdG1wX2xlbmd0aCB3YXMgaW5jb3JyZWN0bHkgY2FsY3VsYXRlZCAtIGZpeCB0aGUKKy0JCQkgY29kZSBhYm92ZSEgICovCistCQkgICAgICBhYm9ydCAoKTsKKy0jZW5kaWYKKy0KKy0JCSAgICAvKiBIZXJlIHN0aWxsIGNvdW50IDw9IGFsbG9jYXRlZCAtIGxlbmd0aC4gICovCistCistI2lmICFEQ0hBUl9JU19UQ0hBUiB8fCBVU0VfU05QUklOVEYKKy0JCSAgICAvKiBUaGUgc25wcmludGYoKSByZXN1bHQgZGlkIGZpdC4gICovCistI2Vsc2UKKy0JCSAgICAvKiBBcHBlbmQgdGhlIHNwcmludGYoKSByZXN1bHQuICAqLworLQkJICAgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCB0bXAsIGNvdW50ICogc2l6ZW9mIChEQ0hBUl9UKSk7CistI2VuZGlmCistI2lmICFVU0VfU05QUklOVEYKKy0JCSAgICBpZiAodG1wICE9IHRtcGJ1ZikKKy0JCSAgICAgIGZyZWUgKHRtcCk7CistI2VuZGlmCistCistI2lmIE5FRURfUFJJTlRGX0RJUkVDVElWRV9GCistCQkgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICdGJykKKy0JCSAgICAgIHsKKy0JCQkvKiBDb252ZXJ0IHRoZSAlZiByZXN1bHQgdG8gdXBwZXIgY2FzZSBmb3IgJUYuICAqLworLQkJCURDSEFSX1QgKnJwID0gcmVzdWx0ICsgbGVuZ3RoOworLQkJCXNpemVfdCByYzsKKy0JCQlmb3IgKHJjID0gY291bnQ7IHJjID4gMDsgcmMtLSwgcnArKykKKy0JCQkgIGlmICgqcnAgPj0gJ2EnICYmICpycCA8PSAneicpCistCQkJICAgICpycCA9ICpycCAtICdhJyArICdBJzsKKy0JCSAgICAgIH0KKy0jZW5kaWYKKy0KKy0JCSAgICBsZW5ndGggKz0gY291bnQ7CistCQkgICAgYnJlYWs7CistCQkgIH0KKy0JICAgICAgfQorLQkgIH0KKy0gICAgICB9CistCistICAgIC8qIEFkZCB0aGUgZmluYWwgTlVMLiAgKi8KKy0gICAgRU5TVVJFX0FMTE9DQVRJT04gKHhzdW0gKGxlbmd0aCwgMSkpOworLSAgICByZXN1bHRbbGVuZ3RoXSA9ICdcMCc7CistCistICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0YnVmICYmIGxlbmd0aCArIDEgPCBhbGxvY2F0ZWQpCistICAgICAgeworLQkvKiBTaHJpbmsgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaWYgcG9zc2libGUuICAqLworLQlEQ0hBUl9UICptZW1vcnk7CistCistCW1lbW9yeSA9IChEQ0hBUl9UICopIHJlYWxsb2MgKHJlc3VsdCwgKGxlbmd0aCArIDEpICogc2l6ZW9mIChEQ0hBUl9UKSk7CistCWlmIChtZW1vcnkgIT0gTlVMTCkKKy0JICByZXN1bHQgPSBtZW1vcnk7CistICAgICAgfQorLQorLSAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCistICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKy0gICAgQ0xFQU5VUCAoKTsKKy0gICAgKmxlbmd0aHAgPSBsZW5ndGg7CistICAgIC8qIE5vdGUgdGhhdCB3ZSBjYW4gcHJvZHVjZSBhIGJpZyBzdHJpbmcgb2YgYSBsZW5ndGggPiBJTlRfTUFYLiAgUE9TSVgKKy0gICAgICAgc2F5cyB0aGF0IHNucHJpbnRmKCkgZmFpbHMgd2l0aCBlcnJubyA9IEVPVkVSRkxPVyBpbiB0aGlzIGNhc2UsIGJ1dAorLSAgICAgICB0aGF0J3Mgb25seSBiZWNhdXNlIHNucHJpbnRmKCkgcmV0dXJucyBhbiAnaW50Jy4gIFRoaXMgZnVuY3Rpb24gZG9lcworLSAgICAgICBub3QgaGF2ZSB0aGlzIGxpbWl0YXRpb24uICAqLworLSAgICByZXR1cm4gcmVzdWx0OworLQorLSAgb3ZlcmZsb3c6CistICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorLSAgICAgIGZyZWUgKHJlc3VsdCk7CistICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKy0gICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworLSAgICBDTEVBTlVQICgpOworLSAgICBlcnJubyA9IEVPVkVSRkxPVzsKKy0gICAgcmV0dXJuIE5VTEw7CistCistICBvdXRfb2ZfbWVtb3J5OgorLSAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKKy0gICAgICBmcmVlIChyZXN1bHQpOworLSAgICBpZiAoYnVmX21hbGxvY2VkICE9IE5VTEwpCistICAgICAgZnJlZSAoYnVmX21hbGxvY2VkKTsKKy0gIG91dF9vZl9tZW1vcnlfMToKKy0gICAgQ0xFQU5VUCAoKTsKKy0gICAgZXJybm8gPSBFTk9NRU07CistICAgIHJldHVybiBOVUxMOworLSAgfQorLX0KKy0KKy0jdW5kZWYgVENIQVJTX1BFUl9EQ0hBUgorLSN1bmRlZiBTTlBSSU5URgorLSN1bmRlZiBVU0VfU05QUklOVEYKKy0jdW5kZWYgRENIQVJfQ1BZCistI3VuZGVmIFBSSU5URl9QQVJTRQorLSN1bmRlZiBESVJFQ1RJVkVTCistI3VuZGVmIERJUkVDVElWRQorLSN1bmRlZiBEQ0hBUl9JU19UQ0hBUgorLSN1bmRlZiBUQ0hBUl9UCistI3VuZGVmIERDSEFSX1QKKy0jdW5kZWYgRkNIQVJfVAorLSN1bmRlZiBWQVNOUFJJTlRGCistLS0gYS9pbnRsL3Zhc25wcmludGYuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsNzggKzAsMCBAQAorLS8qIHZzcHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorLSAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistI2lmbmRlZiBfVkFTTlBSSU5URl9ICistI2RlZmluZSBfVkFTTlBSSU5URl9ICistCistLyogR2V0IHZhX2xpc3QuICAqLworLSNpbmNsdWRlIDxzdGRhcmcuaD4KKy0KKy0vKiBHZXQgc2l6ZV90LiAgKi8KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistCistI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCistLyogVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4gICovCistIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBfX1NUUklDVF9BTlNJX18KKy0jICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworLSMgZW5kaWYKKy0vKiBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIGBmb3JtYXQnIGFuZCBgcHJpbnRmJyBhdHRyaWJ1dGVzCistICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLworLSMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNykKKy0jICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKy0jICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKy0gICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCistICAgc2l6ZSBpbiAqTEVOR1RIUDsgb3RoZXJ3aXNlIHlvdSBwYXNzIFJFU1VMVEJVRiA9IE5VTEwuCistICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCistICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorLSAgIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgVXBvbiBlcnJvciwgc2V0CistICAgZXJybm8gYW5kIHJldHVybiBOVUxMLgorLQorLSAgIFdoZW4gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBvY2N1cnMsIHRoZSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGlzIGxlZnQKKy0gICBhbG9uZSAod2l0aCBwb3NzaWJseSBtb2RpZmllZCBjb250ZW50cykuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZQorLSAgIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgb3Igc3RhY2stYWxsb2NhdGVkIGJ1ZmZlciwgbGlrZSB0aGlzOgorLQorLSAgICAgICAgICBjaGFyIGJ1ZlsxMDBdOworLSAgICAgICAgICBzaXplX3QgbGVuID0gc2l6ZW9mIChidWYpOworLSAgICAgICAgICBjaGFyICpvdXRwdXQgPSB2YXNucHJpbnRmIChidWYsICZsZW4sIGZvcm1hdCwgYXJncyk7CistICAgICAgICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKKy0gICAgICAgICAgICAuLi4gZXJyb3IgaGFuZGxpbmcgLi4uOworLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgLi4uIHVzZSB0aGUgb3V0cHV0IHN0cmluZyAuLi47CistICAgICAgICAgICAgICBpZiAob3V0cHV0ICE9IGJ1ZikKKy0gICAgICAgICAgICAgICAgZnJlZSAob3V0cHV0KTsKKy0gICAgICAgICAgICB9CistICAqLworLWV4dGVybiBjaGFyICogYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCistICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworLWV4dGVybiBjaGFyICogdmFzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorLSAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKKy0KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistCistI2VuZGlmIC8qIF9WQVNOUFJJTlRGX0ggKi8KKy0tLSBhL2ludGwvdmFzbndwcmludGYuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsNDYgKzAsMCBAQAorLS8qIHZzd3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZm5kZWYgX1ZBU05XUFJJTlRGX0gKKy0jZGVmaW5lIF9WQVNOV1BSSU5URl9ICistCistLyogR2V0IHZhX2xpc3QuICAqLworLSNpbmNsdWRlIDxzdGRhcmcuaD4KKy0KKy0vKiBHZXQgd2NoYXJfdCwgc2l6ZV90LiAgKi8KKy0jaW5jbHVkZSA8c3RkZGVmLmg+CistCistI2lmZGVmCV9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKy0gICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCistICAgc2l6ZSBpbiAqTEVOR1RIUDsgb3RoZXJ3aXNlIHlvdSBwYXNzIFJFU1VMVEJVRiA9IE5VTEwuCistICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCistICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorLSAgIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgVXBvbiBlcnJvciwgc2V0CistICAgZXJybm8gYW5kIHJldHVybiBOVUxMLiAgKi8KKy1leHRlcm4gd2NoYXJfdCAqIGFzbndwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLik7CistZXh0ZXJuIHdjaGFyX3QgKiB2YXNud3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKKy0KKy0jaWZkZWYJX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistCistI2VuZGlmIC8qIF9WQVNOV1BSSU5URl9IICovCistLS0gYS9pbnRsL3ZlcnNpb24uYworKysrIC9kZXYvbnVsbAorQEAgLTEsMjYgKzAsMCBAQAorLS8qIGxpYmludGwgbGlicmFyeSB2ZXJzaW9uLgorLSAgIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKKy0gICBVU0EuICAqLworLQorLSNpZmRlZiBIQVZFX0NPTkZJR19ICistIyBpbmNsdWRlIDxjb25maWcuaD4KKy0jZW5kaWYKKy0KKy0jaW5jbHVkZSAibGliZ251aW50bC5oIgorLQorLS8qIFZlcnNpb24gbnVtYmVyOiAobWFqb3I8PDE2KSArIChtaW5vcjw8OCkgKyBzdWJtaW5vciAqLworLWludCBsaWJpbnRsX3ZlcnNpb24gPSBMSUJJTlRMX1ZFUlNJT047CistLS0gYS9pbnRsL3dwcmludGYtcGFyc2UuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsNzUgKzAsMCBAQAorLS8qIFBhcnNlIHByaW50ZiBmb3JtYXQgc3RyaW5nLgorLSAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKy0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLSAgIFVTQS4gICovCistCistI2lmbmRlZiBfV1BSSU5URl9QQVJTRV9ICistI2RlZmluZSBfV1BSSU5URl9QQVJTRV9ICistCistI2luY2x1ZGUgInByaW50Zi1hcmdzLmgiCistCistCistLyogRmxhZ3MgKi8KKy0jZGVmaW5lIEZMQUdfR1JPVVAJIDEJLyogJyBmbGFnICovCistI2RlZmluZSBGTEFHX0xFRlQJIDIJLyogLSBmbGFnICovCistI2RlZmluZSBGTEFHX1NIT1dTSUdOCSA0CS8qICsgZmxhZyAqLworLSNkZWZpbmUgRkxBR19TUEFDRQkgOAkvKiBzcGFjZSBmbGFnICovCistI2RlZmluZSBGTEFHX0FMVAkxNgkvKiAjIGZsYWcgKi8KKy0jZGVmaW5lIEZMQUdfWkVSTwkzMgorLQorLS8qIGFyZ19pbmRleCB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgbm8gYXJndW1lbnQgaXMgY29uc3VtZWQuICAqLworLSNkZWZpbmUgQVJHX05PTkUJKH4oc2l6ZV90KTApCistCistLyogQSBwYXJzZWQgZGlyZWN0aXZlLiAgKi8KKy10eXBlZGVmIHN0cnVjdAorLXsKKy0gIGNvbnN0IHdjaGFyX3QqIGRpcl9zdGFydDsKKy0gIGNvbnN0IHdjaGFyX3QqIGRpcl9lbmQ7CistICBpbnQgZmxhZ3M7CistICBjb25zdCB3Y2hhcl90KiB3aWR0aF9zdGFydDsKKy0gIGNvbnN0IHdjaGFyX3QqIHdpZHRoX2VuZDsKKy0gIHNpemVfdCB3aWR0aF9hcmdfaW5kZXg7CistICBjb25zdCB3Y2hhcl90KiBwcmVjaXNpb25fc3RhcnQ7CistICBjb25zdCB3Y2hhcl90KiBwcmVjaXNpb25fZW5kOworLSAgc2l6ZV90IHByZWNpc2lvbl9hcmdfaW5kZXg7CistICB3Y2hhcl90IGNvbnZlcnNpb247IC8qIGQgaSBvIHUgeCBYIGYgZSBFIGcgRyBjIHMgcCBuIFUgJSBidXQgbm90IEMgUyAqLworLSAgc2l6ZV90IGFyZ19pbmRleDsKKy19Cistd2NoYXJfdF9kaXJlY3RpdmU7CistCistLyogQSBwYXJzZWQgZm9ybWF0IHN0cmluZy4gICovCistdHlwZWRlZiBzdHJ1Y3QKKy17CistICBzaXplX3QgY291bnQ7CistICB3Y2hhcl90X2RpcmVjdGl2ZSAqZGlyOworLSAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGg7CistICBzaXplX3QgbWF4X3ByZWNpc2lvbl9sZW5ndGg7CistfQorLXdjaGFyX3RfZGlyZWN0aXZlczsKKy0KKy0KKy0vKiBQYXJzZXMgdGhlIGZvcm1hdCBzdHJpbmcuICBGaWxscyBpbiB0aGUgbnVtYmVyIE4gb2YgZGlyZWN0aXZlcywgYW5kIGZpbGxzCistICAgaW4gZGlyZWN0aXZlc1swXSwgLi4uLCBkaXJlY3RpdmVzW04tMV0sIGFuZCBzZXRzIGRpcmVjdGl2ZXNbTl0uZGlyX3N0YXJ0CistICAgdG8gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IHN0cmluZy4gIEFsc28gZmlsbHMgaW4gdGhlIGFyZ190eXBlIGZpZWxkcyBvZiB0aGUKKy0gICBhcmd1bWVudHMgYW5kIHRoZSBuZWVkZWQgY291bnQgb2YgYXJndW1lbnRzLiAgKi8KKy0jaWZkZWYgU1RBVElDCistU1RBVElDCistI2Vsc2UKKy1leHRlcm4KKy0jZW5kaWYKKy1pbnQgd3ByaW50Zl9wYXJzZSAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB3Y2hhcl90X2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CistCistI2VuZGlmIC8qIF9XUFJJTlRGX1BBUlNFX0ggKi8KKy0tLSBhL2ludGwveHNpemUuaAorKysrIC9kZXYvbnVsbAorQEAgLTEsMTA5ICswLDAgQEAKKy0vKiB4c2l6ZS5oIC0tIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4KKy0KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSAgIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCistICAgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9YU0laRV9ICistI2RlZmluZSBfWFNJWkVfSAorLQorLS8qIEdldCBzaXplX3QuICAqLworLSNpbmNsdWRlIDxzdGRkZWYuaD4KKy0KKy0vKiBHZXQgU0laRV9NQVguICAqLworLSNpbmNsdWRlIDxsaW1pdHMuaD4KKy0jaWYgSEFWRV9TVERJTlRfSAorLSMgaW5jbHVkZSA8c3RkaW50Lmg+CistI2VuZGlmCistCistLyogVGhlIHNpemUgb2YgbWVtb3J5IG9iamVjdHMgaXMgb2Z0ZW4gY29tcHV0ZWQgdGhyb3VnaCBleHByZXNzaW9ucyBvZgorLSAgIHR5cGUgc2l6ZV90LiBFeGFtcGxlOgorLSAgICAgIHZvaWQqIHAgPSBtYWxsb2MgKGhlYWRlcl9zaXplICsgbiAqIGVsZW1lbnRfc2l6ZSkuCistICAgVGhlc2UgY29tcHV0YXRpb25zIGNhbiBsZWFkIHRvIG92ZXJmbG93LiAgV2hlbiB0aGlzIGhhcHBlbnMsIG1hbGxvYygpCistICAgcmV0dXJucyBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGlzIHdheSB0b28gc21hbGwsIGFuZCB0aGUgcHJvZ3JhbSB0aGVuCistICAgY3Jhc2hlcyB3aGlsZSBhdHRlbXB0aW5nIHRvIGZpbGwgdGhlIG1lbW9yeS4KKy0gICBUbyBhdm9pZCB0aGlzLCB0aGUgZnVuY3Rpb25zIGFuZCBtYWNyb3MgaW4gdGhpcyBmaWxlIGNoZWNrIGZvciBvdmVyZmxvdy4KKy0gICBUaGUgY29udmVudGlvbiBpcyB0aGF0IFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cuCistICAgbWFsbG9jIChTSVpFX01BWCkgaXMgbm90IGd1YXJhbnRlZWQgdG8gZmFpbCAtLSB0aGluayBvZiBhIG1hbGxvYworLSAgIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyBtbWFwIC0tLCBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBzaXplX292ZXJmbG93X3AoKQorLSAgIG9yIHNpemVfaW5fYm91bmRzX3AoKSBiZWZvcmUgaW52b2tpbmcgbWFsbG9jKCkuCistICAgVGhlIGV4YW1wbGUgdGh1cyBiZWNvbWVzOgorLSAgICAgIHNpemVfdCBzaXplID0geHN1bSAoaGVhZGVyX3NpemUsIHh0aW1lcyAobiwgZWxlbWVudF9zaXplKSk7CistICAgICAgdm9pZCAqcCA9IChzaXplX2luX2JvdW5kc19wIChzaXplKSA/IG1hbGxvYyAoc2l6ZSkgOiBOVUxMKTsKKy0qLworLQorLS8qIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlID49IDAgdG8gdHlwZSBzaXplX3QuICAqLworLSNkZWZpbmUgeGNhc3Rfc2l6ZV90KE4pIFwKKy0gICgoTikgPD0gU0laRV9NQVggPyAoc2l6ZV90KSAoTikgOiBTSVpFX01BWCkKKy0KKy0vKiBTdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKy1zdGF0aWMgaW5saW5lIHNpemVfdAorLSNpZiBfX0dOVUNfXyA+PSAzCistX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKy0jZW5kaWYKKy14c3VtIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKKy17CistICBzaXplX3Qgc3VtID0gc2l6ZTEgKyBzaXplMjsKKy0gIHJldHVybiAoc3VtID49IHNpemUxID8gc3VtIDogU0laRV9NQVgpOworLX0KKy0KKy0vKiBTdW0gb2YgdGhyZWUgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworLXN0YXRpYyBpbmxpbmUgc2l6ZV90CistI2lmIF9fR05VQ19fID49IDMKKy1fX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorLSNlbmRpZgorLXhzdW0zIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMiwgc2l6ZV90IHNpemUzKQorLXsKKy0gIHJldHVybiB4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyk7CistfQorLQorLS8qIFN1bSBvZiBmb3VyIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKy1zdGF0aWMgaW5saW5lIHNpemVfdAorLSNpZiBfX0dOVUNfXyA+PSAzCistX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKy0jZW5kaWYKKy14c3VtNCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMywgc2l6ZV90IHNpemU0KQorLXsKKy0gIHJldHVybiB4c3VtICh4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyksIHNpemU0KTsKKy19CistCistLyogTWF4aW11bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworLXN0YXRpYyBpbmxpbmUgc2l6ZV90CistI2lmIF9fR05VQ19fID49IDMKKy1fX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorLSNlbmRpZgorLXhtYXggKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyKQorLXsKKy0gIC8qIE5vIGV4cGxpY2l0IGNoZWNrIGlzIG5lZWRlZCBoZXJlLCBiZWNhdXNlIGZvciBhbnkgbjoKKy0gICAgIG1heCAoU0laRV9NQVgsIG4pID09IFNJWkVfTUFYIGFuZCBtYXggKG4sIFNJWkVfTUFYKSA9PSBTSVpFX01BWC4gICovCistICByZXR1cm4gKHNpemUxID49IHNpemUyID8gc2l6ZTEgOiBzaXplMik7CistfQorLQorLS8qIE11bHRpcGxpY2F0aW9uIG9mIGEgY291bnQgd2l0aCBhbiBlbGVtZW50IHNpemUsIHdpdGggb3ZlcmZsb3cgY2hlY2suCistICAgVGhlIGNvdW50IG11c3QgYmUgPj0gMCBhbmQgdGhlIGVsZW1lbnQgc2l6ZSBtdXN0IGJlID4gMC4KKy0gICBUaGlzIGlzIGEgbWFjcm8sIG5vdCBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgd29ya3MgY29ycmVjdGx5IGV2ZW4KKy0gICB3aGVuIE4gaXMgb2YgYSB3aWRlciB0dXBlIGFuZCBOID4gU0laRV9NQVguICAqLworLSNkZWZpbmUgeHRpbWVzKE4sIEVMU0laRSkgXAorLSAgKChOKSA8PSBTSVpFX01BWCAvIChFTFNJWkUpID8gKHNpemVfdCkgKE4pICogKEVMU0laRSkgOiBTSVpFX01BWCkKKy0KKy0vKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworLSNkZWZpbmUgc2l6ZV9vdmVyZmxvd19wKFNJWkUpIFwKKy0gICgoU0laRSkgPT0gU0laRV9NQVgpCistLyogQ2hlY2sgYWdhaW5zdCBvdmVyZmxvdy4gICovCistI2RlZmluZSBzaXplX2luX2JvdW5kc19wKFNJWkUpIFwKKy0gICgoU0laRSkgIT0gU0laRV9NQVgpCistCistI2VuZGlmIC8qIF9YU0laRV9IICovCistLS0gYS9tNC9pbnRsbWFjb3N4Lm00CisrKysgYi9tNC9pbnRsbWFjb3N4Lm00CitAQCAtMSw1MCArMSw3MSBAQAorLSMgaW50bG1hY29zeC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjE3KQorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIGludGxtYWNvc3gubTQgc2VyaWFsIDYgKGdldHRleHQtMC4yMCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTQsIDIwMTYsIDIwMTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyBkbmwKKy1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCBUaGlzIGZpbGUgY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKyBkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIGRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisgZG5sIGZ1bmN0aW9uYWxpdHkuCisgZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKyBkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCistZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBnZXR0ZXh0IHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIAorLWRubCBDaGVja3MgZm9yIHNwZWNpYWwgb3B0aW9ucyBuZWVkZWQgb24gTWFjT1MgWC4KKytkbmwgQ2hlY2tzIGZvciBzcGVjaWFsIG9wdGlvbnMgbmVlZGVkIG9uIE1hYyBPUyBYLgorIGRubCBEZWZpbmVzIElOVExfTUFDT1NYX0xJQlMuCisgQUNfREVGVU4oW2d0X0lOVExfTUFDT1NYXSwKKyBbCistICBkbmwgQ2hlY2sgZm9yIEFQSSBpbnRyb2R1Y2VkIGluIE1hY09TIFggMTAuMi4KKysgIGRubCBDaGVjayBmb3IgQVBJIGludHJvZHVjZWQgaW4gTWFjIE9TIFggMTAuNC4KKyAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZV0sCistICAgIGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSwKKysgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZV0sCisgICAgIFtndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorLSAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2VzLmg+XSwKKy0gICAgICAgW0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoTlVMTCwgTlVMTCldLAorKyAgICAgQUNfTElOS19JRkVMU0UoCisrICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisrICAgICAgICAgIFtbI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD5dXSwKKysgICAgICAgICAgW1tDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKE5VTEwsIE5VTEwpXV0pXSwKKyAgICAgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT15ZXNdLAorICAgICAgICBbZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPW5vXSkKKyAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKyAgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoW0hBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRV0sIDEsCistICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4gdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay5dKQorKyAgICBBQ19ERUZJTkUoW0hBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRV0sIFsxXSwKKysgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hYyBPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4gdGhlIENvcmVGb3VuZGF0aW9uIGZyYW1ld29yay5dKQorICAgZmkKKy0gIGRubCBDaGVjayBmb3IgQVBJIGludHJvZHVjZWQgaW4gTWFjT1MgWCAxMC4zLgorLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRkxvY2FsZUNvcHlDdXJyZW50XSwgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50LAorKyAgZG5sIENoZWNrIGZvciBBUEkgaW50cm9kdWNlZCBpbiBNYWMgT1MgWCAxMC41LgorKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRkxvY2FsZUNvcHlDdXJyZW50XSwgW2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudF0sCisgICAgIFtndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorLSAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkxvY2FsZS5oPl0sIFtDRkxvY2FsZUNvcHlDdXJyZW50KCk7XSwKKysgICAgIEFDX0xJTktfSUZFTFNFKAorKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorKyAgICAgICAgICBbWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkxvY2FsZS5oPl1dLAorKyAgICAgICAgICBbW0NGTG9jYWxlQ29weUN1cnJlbnQoKTtdXSldLAorICAgICAgICBbZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PXllc10sCisgICAgICAgIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9bm9dKQorICAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQorICAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50ID0geWVzOyB0aGVuCistICAgIEFDX0RFRklORShbSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UXSwgMSwKKy0gICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hY09TIFggZnVuY3Rpb24gQ0ZMb2NhbGVDb3B5Q3VycmVudCBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCisrICAgIEFDX0RFRklORShbSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UXSwgWzFdLAorKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjIE9TIFggZnVuY3Rpb24gQ0ZMb2NhbGVDb3B5Q3VycmVudCBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCisrICBmaQorKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRkxvY2FsZUNvcHlQcmVmZXJyZWRMYW5ndWFnZXNdLCBbZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlQcmVmZXJyZWRMYW5ndWFnZXNdLAorKyAgICBbZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKKysgICAgIEFDX0xJTktfSUZFTFNFKAorKyAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorKyAgICAgICAgICBbWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkxvY2FsZS5oPl1dLAorKyAgICAgICAgICBbW0NGTG9jYWxlQ29weVByZWZlcnJlZExhbmd1YWdlcygpO11dKV0sCisrICAgICAgIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weVByZWZlcnJlZExhbmd1YWdlcz15ZXNdLAorKyAgICAgICBbZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlQcmVmZXJyZWRMYW5ndWFnZXM9bm9dKQorKyAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQorKyAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlQcmVmZXJyZWRMYW5ndWFnZXMgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKFtIQVZFX0NGTE9DQUxFQ09QWVBSRUZFUlJFRExBTkdVQUdFU10sIFsxXSwKKysgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hYyBPUyBYIGZ1bmN0aW9uIENGTG9jYWxlQ29weVByZWZlcnJlZExhbmd1YWdlcyBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCisgICBmaQorICAgSU5UTF9NQUNPU1hfTElCUz0KKy0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllcyB8fCB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KKysgIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllcyBcCisrICAgICB8fCB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXMgXAorKyAgICAgfHwgdGVzdCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlQcmVmZXJyZWRMYW5ndWFnZXMgPSB5ZXM7IHRoZW4KKyAgICAgSU5UTF9NQUNPU1hfTElCUz0iLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgorICAgZmkKKyAgIEFDX1NVQlNUKFtJTlRMX01BQ09TWF9MSUJTXSkKKy0tLSBhL3BvL0NoYW5nZUxvZworKysrIGIvcG8vQ2hhbmdlTG9nCitAQCAtMSwzICsxLDExIEBACisrMjAxOS0xMi0wNyAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorKworKwkqIGVuQGJvbGRxdW90LmhlYWRlcjogVXBncmFkZSB0byBnZXR0ZXh0LTAuMjAuMS4KKysJKiBlbkBxdW90LmhlYWRlcjogVXBncmFkZSB0byBnZXR0ZXh0LTAuMjAuMS4KKysJKiBpbnNlcnQtaGVhZGVyLnNpbjogVXBncmFkZSB0byBnZXR0ZXh0LTAuMjAuMS4KKysJKiByZW1vdmUtcG90Y2RhdGUuc2luOiBVcGdyYWRlIHRvIGdldHRleHQtMC4yMC4xLgorKwkqIFJ1bGVzLXF1b3Q6IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjIwLjEuCisrCisgMjAwOS0wOC0xMSAgU2NvdHQgSmFtZXMgUmVtbmFudCAgPHNjb3R0QG5ldHNwbGl0LmNvbT4KKyAKKyAJKiBsaWJuaWgucG90OiBEaXN0cmlidXRlIHRoZSBwb3QgZmlsZQorLS0tIGEvcG8vUnVsZXMtcXVvdAorKysrIGIvcG8vUnVsZXMtcXVvdAorQEAgLTEsNCArMSw5IEBACisgIyBTcGVjaWFsIE1ha2VmaWxlIHJ1bGVzIGZvciBFbmdsaXNoIG1lc3NhZ2UgY2F0YWxvZ3Mgd2l0aCBxdW90YXRpb24gbWFya3MuCisrIworKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBUaGlzIGZpbGUsIFJ1bGVzLXF1b3QsIGFuZCBpdHMgYXV4aWxpYXJ5IGZpbGVzIChsaXN0ZWQgdW5kZXIKKysjIERJU1RGSUxFUy5jb21tb24uZXh0cmExKSBhcmUgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBkaXN0cmlidXRlLCBhbmQgbW9kaWZ5IHRoZW0uCisgCisgRElTVEZJTEVTLmNvbW1vbi5leHRyYTEgPSBxdW90LnNlZCBib2xkcXVvdC5zZWQgZW5AcXVvdC5oZWFkZXIgZW5AYm9sZHF1b3QuaGVhZGVyIGluc2VydC1oZWFkZXIuc2luIFJ1bGVzLXF1b3QKKyAKK0BAIC0xNCwxMyArMTksMjMgQEAgZW5AYm9sZHF1b3QucG8tdXBkYXRlOiBlbkBib2xkcXVvdC5wby11cAorIAorIC5pbnNlcnQtaGVhZGVyLnBvLXVwZGF0ZS1lbjoKKyAJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUtZW4kJC8vJ2A7IFwKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyIgJiYgdGVzdCAiJChDUk9TU19DT01QSUxJTkcpIiAhPSAieWVzIjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IEdFVFRFWFRMSUJESVI9YGNkICQodG9wX3NyY2Rpcikvc3JjICYmIHB3ZGA7IGV4cG9ydCBHRVRURVhUTElCRElSOyBmaTsgXAorIAl0bXBkaXI9YHB3ZGA7IFwKKyAJZWNobyAiJCRsYW5nOiI7IFwKKyAJbGw9YGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzL0AuKi8vJ2A7IFwKKyAJTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IFwKKyAJY2QgJChzcmNkaXIpOyBcCistCWlmICQoTVNHSU5JVCkgLWkgJChET01BSU4pLnBvdCAtLW5vLXRyYW5zbGF0b3IgLWwgJCRsbCAtbyAtIDI+L2Rldi9udWxsIHwgc2VkIC1mICQkdG1wZGlyLyQkbGFuZy5pbnNlcnQtaGVhZGVyIHwgJChNU0dDT05WKSAtdCBVVEYtOCB8ICQoTVNHRklMVEVSKSBzZWQgLWYgYGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzLy4qQC8vJ2Auc2VkIDI+L2Rldi9udWxsID4gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgdGhlbiBcCisrCWlmICQoTVNHSU5JVCkgJChNU0dJTklUX09QVElPTlMpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGFuZyAtbyAtIDI+L2Rldi9udWxsIFwKKysJICAgfCAkKFNFRCkgLWYgJCR0bXBkaXIvJCRsYW5nLmluc2VydC1oZWFkZXIgfCAkKE1TR0NPTlYpIC10IFVURi04IHwgXAorKwkgICB7IGNhc2UgYCQoTVNHRklMVEVSKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKysJICAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC04XSB8IDAuMVswLThdLiopIFwKKysJICAgICAgICQoTVNHRklMVEVSKSAkKFNFRCkgLWYgYGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzLy4qQC8vJ2Auc2VkIFwKKysJICAgICAgIDs7IFwKKysJICAgICAqKSBcCisrCSAgICAgICAkKE1TR0ZJTFRFUikgYGVjaG8gJCRsYW5nIHwgc2VkIC1lICdzLy4qQC8vJ2AgXAorKwkgICAgICAgOzsgXAorKwkgICAgIGVzYWMgfSAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gXAorKwkgICAgIDsgdGhlbiBcCisgCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisgCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisgCSAgZWxzZSBcCistLS0gYS9wby9lbkBib2xkcXVvdC5oZWFkZXIKKysrKyBiL3BvL2VuQGJvbGRxdW90LmhlYWRlcgorQEAgLTIsNyArMiw3IEBACisgIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorICMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisgIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKy0jIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKysjIGh0dHBzOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisgIworICMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKyAjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCistLS0gYS9wby9lbkBxdW90LmhlYWRlcgorKysrIGIvcG8vZW5AcXVvdC5oZWFkZXIKK0BAIC0yLDcgKzIsNyBAQAorICMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKyAjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorICMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCistIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisrIyBodHRwczovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAorICMKKyAjIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCisgIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgorLS0tIGEvcG8vaW5zZXJ0LWhlYWRlci5zaW4KKysrKyBiL3BvL2luc2VydC1oZWFkZXIuc2luCitAQCAtMSw1ICsxLDEwIEBACisgIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorICMKKysjIENvcHlyaWdodCAoQykgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAxLgorKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKysjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgZGlzdHJpYnV0ZSwgYW5kIG1vZGlmeSBpdC4KKysjCisgIyBBdCBlYWNoIG9jY3VycmVuY2Ugb2YgYSBsaW5lIHN0YXJ0aW5nIHdpdGggIm1zZ2lkICIsIHdlIGV4ZWN1dGUgdGhlIGZvbGxvd2luZworICMgY29tbWFuZHMuIEF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlLCBpbnNlcnQgdGhlIGZpbGUuIEF0IHRoZSBmb2xsb3dpbmcKKyAjIG9jY3VycmVuY2VzLCBkbyBub3RoaW5nLiBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZSBmb2xsb3dpbmcKKy0tLSBhL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KKysrKyBiL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KK0BAIC0xLDYgKzEsMTIgQEAKKy0jIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorKyMgU2VkIHNjcmlwdCB0aGF0IHJlbW92ZXMgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorICMgZnJvbSBhIFBPVCBmaWxlLgorICMKKysjIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisrIyBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKysjIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLAorKyMgd2l0aG91dCBhbnkgd2FycmFudHkuCisrIworICMgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUgZm9sbG93aW5nIG9jY3VycmVuY2VzIG9mIHRoZQorICMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorIC9eIlBPVC1DcmVhdGlvbi1EYXRlOiAuKiIkL3sKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYm5paC9saWJuaWhfMS4wLjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJuaWgvbGlibmloXzEuMC4zLmJiCmluZGV4IGZjYjZiZWIuLmZmN2E0ZWQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYm5paC9saWJuaWhfMS4wLjMuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGlibmloL2xpYm5paF8xLjAuMy5iYgpAQCAtMjAsMTkgKzIwLDE5IEBACiBMSUNFTlNFID0gIkdQTC0yLjAiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKIAotREVQRU5EUyA9ICJkYnVzIGxpYm5paC1uYXRpdmUiCi1ERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJkYnVzLW5hdGl2ZSIKK0RFUEVORFMgPSAiZGJ1cyBleHBhdCIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgbGlibmloLW5hdGl2ZSIKIAogU1JDX1VSSSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvJHtCUE59LzEuMC8ke1BWfS8rZG93bmxvYWQvJHtCUH0udGFyLmd6IFwKICAgICAgICAgICAgZmlsZTovL2xpYm5paF8xLjAuMy00dWJ1bnR1MTYucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1zaWduYWwuYy1TSUdDTEQtYW5kLVNJR0NISUxELWFyZS1zYW1lLW9uLXN5dGVtLVYtc3lzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXBkYXRlLWF1dG90b29sLWZpbGVzLWFsc28tbWFrZS1pdC13b3JrLXdpdGgtbGF0ZXN0LS5wYXRjaCBcCiAgICAgICAgICAgICIKIAogU1JDX1VSSVttZDVzdW1dID0gImRiNzk5MGNlNTVlMDFkYWZmZTE5MDA2NTI0YTFjY2IwIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5NzU3MmRmNzU2NWMwYTkwYTgxNTMyNjcxZTIzYzYzZjk5YjRlZmRlMmVlY2JiZjExZTc4NTdmYmM2MWY0MDUiCiAKLWluaGVyaXQgYXV0b3Rvb2xzCi1pbmhlcml0IGdldHRleHQKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKIAogZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CiAgICAgICAgIHNlZCAtaSAtZSAncyxsaWIvcGtnY29uZmlnLCR7YmFzZWxpYn0vcGtnY29uZmlnLGcnICR7U30vbmloL01ha2VmaWxlLmluICR7U30vbmloLWRidXMvTWFrZWZpbGUuaW4KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYnJzeW5jL2xpYnJzeW5jXzIuMi4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGlicnN5bmMvbGlicnN5bmNfMi4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmMjhmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYnJzeW5jL2xpYnJzeW5jXzIuMi4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiUmVtb3RlIGRlbHRhLWNvbXByZXNzaW9uIGxpYnJhcnkuIgorQVVUSE9SID0gIk1hcnRpbiBQb29sLCBBbmRyZXcgVHJpZGdlbGwsIERvbm92YW4gQmFhcmRhLCBBZGFtIFNjaHViZXJ0IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4MDQ1ZjNiOGY5MjljMWNiMjlhMWUzZmQ3MzdiNDk5IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vbGlicnN5bmMvbGlicnN5bmMuZ2l0IgorU1JDUkVWID0gIjU5MTc2OTI0MTg2NTdkYzc4YzljYmRlM2E4ZGI0Yzg1ZjI1YjljOGQiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTID0gInBvcHQiCisKK2luaGVyaXQgY21ha2UKKworUEFDS0FHRVMgPSsgInJkaWZmIgorRklMRVNfcmRpZmYgPSAiJHtiaW5kaXJ9L3JkaWZmIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJzbWkvbGlic21pXzAuNS4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGlic21pL2xpYnNtaV8wLjUuMC5iYgppbmRleCAzNjg1YzRhLi45OGNjNjNlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJzbWkvbGlic21pXzAuNS4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYnNtaS9saWJzbWlfMC41LjAuYmIKQEAgLTEsNyArMSw3IEBACiBTVU1NQVJZID0gIkEgTGlicmFyeSB0byBBY2Nlc3MgU01JIE1JQiBJbmZvcm1hdGlvbiIKIEhPTUVQQUdFID0gImh0dHBzOi8vd3d3Lmlici5jcy50dS1icy5kZS9wcm9qZWN0cy9saWJzbWkiCiAKLUxJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlICYgVENMIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UgJiB0Y2wiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYWQzMDc2ZjkzMzIzNDNhMjE2MzZjZmQzNTFmMDViNyIKIAogU1JDX1VSSSA9ICJodHRwczovL3d3dy5pYnIuY3MudHUtYnMuZGUvcHJvamVjdHMvJHtCUE59L2Rvd25sb2FkLyR7QlB9LnRhci5neiBcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJzb2MvbGlic29jXzAuOC4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGlic29jL2xpYnNvY18wLjguMi5iYgppbmRleCAwMTcwOGRmLi44Yjc3M2FlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJzb2MvbGlic29jXzAuOC4yLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYnNvYy9saWJzb2NfMC44LjIuYmIKQEAgLTcsNyArNyw3IEBACiBMSUNFTlNFID0gIkxHUEx2Mi4xIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9ZTBiZmViZWExMmE3MTg5MjIyMjViYTk4N2IyMTI2YTUiCiAKLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob24tZGlyCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcHl0aG9uMy1kaXIKIAogU1JDUkVWID0gImZkMWFkNmU3ODIzZmE3NmQ4ZGIwZDNjNTg4NGZhZmZhOGZmZGRhZmIiCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vamFja21pdGNoL2xpYnNvYy5naXQiCkBAIC0yMSw3ICsyMSw3IEBACiBQQUNLQUdFQ09ORklHW2Rpc2FibGVkZWJ1Z10gPSAiLS1kaXNhYmxlLWRlYnVnLCwiCiBQQUNLQUdFQ09ORklHW2FsbGJvYXJkY29uZmlnc10gPSAiLS13aXRoLWJvYXJkLWNvbmZpZ3MsLCIKIFBBQ0tBR0VDT05GSUdbZW5hYmxlYm9hcmRjb25maWddID0gIi0tZW5hYmxlLWJvYXJkPSR7Qk9BUkR9LCwiCi1QQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS1lbmFibGUtcHl0aG9uPSR7UFlUSE9OX1BOfSwsJHtQWVRIT05fUE59IgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0sLCR7UFlUSE9OX1BOfSAke1BZVEhPTl9QTn0tbmF0aXZlIgogCiBQQUNLQUdFUyA9KyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHl0aG9uJywgXAogICAgICcke1BZVEhPTl9QTn0tbGlic29jLXN0YXRpY2RldiAke1BZVEhPTl9QTn0tbGlic29jJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYnNzaDIvbGlic3NoMl8xLjkuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xpYnNzaDIvbGlic3NoMl8xLjkuMC5iYgppbmRleCAxODVlYTExLi5jMWYzMzdhIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9saWJzc2gyL2xpYnNzaDJfMS45LjAuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbGlic3NoMi9saWJzc2gyXzEuOS4wLmJiCkBAIC0yNSw0ICsyNSw0IEBACiBQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1jcnlwdG89b3BlbnNzbCAtLXdpdGgtbGlic3NsLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSwgLCBvcGVuc3NsIgogUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0td2l0aC1jcnlwdG89bGliZ2NyeXB0IC0td2l0aC1saWJnY3J5cHQtcHJlZml4PSR7U1RBR0lOR19FWEVDUFJFRklYRElSfSwgLCBsaWJnY3J5cHQiCiAKLUJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbG9ja2Rldi9sb2NrZGV2L2J1aWxkLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbG9ja2Rldi9sb2NrZGV2L2J1aWxkLnBhdGNoCmluZGV4IDZlYzkxZDIuLmY5ZmU0OGIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xvY2tkZXYvbG9ja2Rldi9idWlsZC5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9sb2NrZGV2L2xvY2tkZXYvYnVpbGQucGF0Y2gKQEAgLTE4LDcgKzE4LDcgQEAKICBzb25hbWUJPSAke2xpYm5hbWV9LnNvLiR7TVZFUn0KICAKICAjIG92ZXJ3cml0dGVuIGJ5IGNhbGxlciAoZS5nLjogZGViaWFuL3J1bGVzKQotQEAgLTcyLDYgKzcyLDcgQEAgaW5zdGFsbF9kb2M6CWRvY3MvbG9ja2Rldi4zCitAQCAtNzMsNiArNzMsNyBAQCBpbnN0YWxsX2RvYzoJZG9jcy9sb2NrZGV2LjMKICBpbnN0YWxsX3J1bjoJJHtzaGFyZWR9CiAgCWluc3RhbGwgLW03NTUgLWQJJHtsaWJkaXJ9CiAgCWluc3RhbGwgLW02NDQgJHtzaGFyZWR9CSR7bGliZGlyfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbG9ja2Rldi9sb2NrZGV2L2Nyb3NzX2NvbXBpbGUucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9sb2NrZGV2L2xvY2tkZXYvY3Jvc3NfY29tcGlsZS5wYXRjaAppbmRleCBhYThmNmE0Li5hYThiMGY2IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9sb2NrZGV2L2xvY2tkZXYvY3Jvc3NfY29tcGlsZS5wYXRjaAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9sb2NrZGV2L2xvY2tkZXYvY3Jvc3NfY29tcGlsZS5wYXRjaApAQCAtMSwxNCArMSwxNiBAQAogLS0tIGEvTWFrZWZpbGUKICsrKyBiL01ha2VmaWxlCi1AQCAtMTUsMTcgKzE1LDE3IEBAIHNoYXJlZAk9ICR7bGlibmFtZX0uJHtWRVJ9LnNvCitAQCAtMTUsMTcgKzE1LDE4IEBAIHNoYXJlZAk9ICR7bGlibmFtZX0uJHtWRVJ9LnNvCiAgc29uYW1lCT0gJHtsaWJuYW1lfS5zby4ke01WRVJ9CiAgCiAgIyBvdmVyd3JpdHRlbiBieSBjYWxsZXIgKGUuZy46IGRlYmlhbi9ydWxlcykKIC1iYXNlZGlyCT0gL3Vzci9sb2NhbAogK2Jhc2VkaXIJPz0gL3Vzci9sb2NhbAorK2Jhc2VsaWIgPz0gbGliCiAgc3JjZGlyPS4KICAKLSBsaWJkaXIJPSAke2Jhc2VkaXJ9L2xpYgorLWxpYmRpcgk9ICR7YmFzZWRpcn0vbGliCisrbGliZGlyCT0gJHtiYXNlZGlyfS8ke2Jhc2VsaWJ9CiAgaW5jZGlyCT0gJHtiYXNlZGlyfS9pbmNsdWRlCiAgbWFuZGlyCT0gJHtiYXNlZGlyfS9zaGFyZS9tYW4KICAKQEAgLTE3LDcgKzE5LDcgQEAKIC1DRkxBR1MJPSAtZwogLUxETElCUwk9IC1sbG9ja2RldgogK0NDCT89IGdjYwotK0xDRkxBR1MJPz0gLWcgLU8yIC1mUElDIC1XYWxsIC1waXBlIC1EX1JFRU5UUkFOVCAKKytMQ0ZMQUdTCT89IC1nIC1PMiAtZlBJQyAtV2FsbCAtcGlwZSAtRF9SRUVOVFJBTlQKICtDRkxBR1MJPz0gLWcKICtMRExJQlMJPz0gLWxsb2NrZGV2CiAgCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9sb2NrZGV2L2xvY2tkZXZfMS4wLjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9sb2NrZGV2L2xvY2tkZXZfMS4wLjMuYmIKaW5kZXggNWI4NjJiZC4uOWQ4ODAwZSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvbG9ja2Rldi9sb2NrZGV2XzEuMC4zLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L2xvY2tkZXYvbG9ja2Rldl8xLjAuMy5iYgpAQCAtMTUsMTUgKzE1LDE1IEBACiBTUkNfVVJJW2RlYmlhbnBhdGNoLnNoYTI1NnN1bV0gPSAiYTU0MDVjNmVlNWU5N2U0NWVlYjFjODEzMzBhN2U5ZjQ0NGE1OGJkYTVlNjc3MWZhMzAwMDc1MTZjMTE1MDA3ZSIKIAogaW5oZXJpdCBsaWJfcGFja2FnZSBwZXJsbmF0aXZlCi1leHBvcnQgYmFzZWRpcj0iJHtEfSR7cHJlZml4fSIKIAogQ0ZMQUdTICs9ICIgLURfX0dOVV9MSUJSQVJZX18iCiAKIFRBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgogCitFWFRSQV9PRU1BS0UgPSAiYmFzZWRpcj0ke0R9JHtwcmVmaXh9IGJhc2VsaWI9JHtiYXNlbGlifSBMRD0nJHtDQ30nIExEPScke0NDfSciCiBkb19jb21waWxlKCkgewotICAgICAgICBvZV9ydW5tYWtlIGJhc2VkaXI9JHtEfSR7cHJlZml4fSBMRD0iJHtDQ30iIExEPSIke0NDfSIgc2hhcmVkIHN0YXRpYworICAgICAgICBvZV9ydW5tYWtlIHNoYXJlZCBzdGF0aWMKIH0KIGRvX2luc3RhbGwoKSB7Ci0gICAgICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGJhc2VkaXI9JHtEfSR7cHJlZml4fSBpbnN0YWxsCisgICAgICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwKIH0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvZmlsZXMvY29uZmlndXJlLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb25pZy9maWxlcy9jb25maWd1cmUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTcwMGYuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb25pZy9maWxlcy9jb25maWd1cmUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1JbmRleDogb25pZy01LjkuMy9jb25maWd1cmUuaW4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBvbmlnLTUuOS4zLm9yaWcvY29uZmlndXJlLmluCTIwMTItMTAtMjYgMDc6MDY6MTQuMDAwMDAwMDAwICswMDAwCi0rKysgb25pZy01LjkuMy9jb25maWd1cmUuaW4JMjAxNC0wNy0xOCAwODowMjo1Mi43MDE1NzQ0ODQgKzAwMDAKLUBAIC0zLDcgKzMsNyBAQAotIAotIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKLSAKLS1BTV9JTklUX0FVVE9NQUtFCi0rQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCi0gQUNfQ09ORklHX0hFQURFUihjb25maWcuaCkKLSAKLSAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvZmlsZXMvZG8tbm90LXVzZS1zeXN0ZW0taGVhZGVycy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvZmlsZXMvZG8tbm90LXVzZS1zeXN0ZW0taGVhZGVycy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkzNjAyYS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vbmlnL2ZpbGVzL2RvLW5vdC11c2Utc3lzdGVtLWhlYWRlcnMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1BdXRob3I6IE1hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luLmp1c3praWV3aWN6QGxpbmFyby5vcmc+Ci0KLVdoZW4gYnVpbGQgb24gaG9zdCB3aXRoIG9sZGVyIGVnbGliYyAoVWJ1bnR1IDEyLjA0KSBidWlsZCBmYWlscyB3aXRoOgotCi0vdG1wL09FL2J1aWxkL3RtcC1lZ2xpYmMvc3lzcm9vdHMvZ2VuZXJpY2FybXY4L3Vzci9pbmNsdWRlL2JpdHMvcHJlZGVmcy5oOjIzOjM6IGVycm9yOiAjZXJyb3IgIk5ldmVyIHVzZSA8Yml0cy9wcmVkZWZzLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxzdGRjLXByZWRlZi5oPiBpbnN0ZWFkLiIKLQotU2lnbmVkLW9mZi1ieTogTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW4uanVzemtpZXdpY3pAbGluYXJvLm9yZz4KLQotVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KLQotLS0tCi0gTWFrZWZpbGUuYW0gICAgICAgIHwgICAgMiArLQotIHNhbXBsZS9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KLSAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKLQotLS0tIG9uaWctNS45LjMub3JpZy9NYWtlZmlsZS5hbQotKysrIG9uaWctNS45LjMvTWFrZWZpbGUuYW0KLUBAIC00LDExICs0LDExIEBAIHNhbXBsZWRpciA9ICQodG9wX3NyY2Rpcikvc2FtcGxlCi0gbGlibmFtZSA9IGxpYm9uaWcubGEKLQotIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00Ci0gI0FNX0NGTEFHUyA9IC1ETk9UX1JVQlkKLSBBTV9DRkxBR1MgPQotLUlOQ0xVREVTICA9IC1JJCh0b3Bfc3JjZGlyKSAtSSQoaW5jbHVkZWRpcikKLStJTkNMVURFUyAgPSAtSSQodG9wX3NyY2RpcikKLQotIFNVQkRJUlMgPSAuIHNhbXBsZQotCi0gaW5jbHVkZV9IRUFERVJTID0gb25pZ3VydW1hLmggb25pZ2dudS5oIG9uaWdwb3NpeC5oCi0gbGliX0xUTElCUkFSSUVTID0gJChsaWJuYW1lKQotLS0tIG9uaWctNS45LjMub3JpZy9zYW1wbGUvTWFrZWZpbGUuYW0KLSsrKyBvbmlnLTUuOS4zL3NhbXBsZS9NYWtlZmlsZS5hbQotQEAgLTEsMTAgKzEsMTAgQEAKLSBub2luc3RfUFJPR1JBTVMgPSBlbmNvZGUgbGlzdGNhcCBuYW1lcyBwb3NpeCBzaW1wbGUgc3FsIHN5bnRheCBjcm5sCi0KLSBsaWJuYW1lID0gJCh0b3BfYnVpbGRkaXIpL2xpYm9uaWcubGEKLSBMREFERCAgID0gJChsaWJuYW1lKQotLUlOQ0xVREVTICA9IC1JJCh0b3Bfc3JjZGlyKSAtSSQoaW5jbHVkZWRpcikKLStJTkNMVURFUyAgPSAtSSQodG9wX3NyY2RpcikKLQotIGVuY29kZV9TT1VSQ0VTICA9IGVuY29kZS5jCi0gbGlzdGNhcF9TT1VSQ0VTID0gbGlzdGNhcC5jCi0gbmFtZXNfU09VUkNFUyAgID0gbmFtZXMuYwotIHBvc2l4X1NPVVJDRVMgICA9IHBvc2l4LmMKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZy8wMDAxLWJ1aWxkLWRvbi10LWxpbmstYWdhaW5zdC1ob3N0LXN5c3RlbS1saWJyYXJpZXMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vbmlnL29uaWcvMDAwMS1idWlsZC1kb24tdC1saW5rLWFnYWluc3QtaG9zdC1zeXN0ZW0tbGlicmFyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTU5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vbmlnL29uaWcvMDAwMS1idWlsZC1kb24tdC1saW5rLWFnYWluc3QtaG9zdC1zeXN0ZW0tbGlicmFyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNzgxMDNlY2QxOGVmY2QwOTY2NTMxZDg3MThmNmU5NGRjYjdhNWFiZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxnaXRAYW5kcmVkLm5ldD4KK0RhdGU6IE1vbiwgNiBKYW4gMjAyMCAxNjo1NjozMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBidWlsZDogZG9uJ3QgbGluayBhZ2FpbnN0IChob3N0KSBzeXN0ZW0gbGlicmFyaWVzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgRHJhc3ppayA8Z2l0QGFuZHJlZC5uZXQ+CistLS0KKyBzYW1wbGUvTWFrZWZpbGUuYW0gfCAxIC0KKyB0ZXN0L01ha2VmaWxlLmFtICAgfCAxIC0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zYW1wbGUvTWFrZWZpbGUuYW0gYi9zYW1wbGUvTWFrZWZpbGUuYW0KK2luZGV4IDIyYTQ5ODkuLmU5MzViZjAgMTAwNjQ0CistLS0gYS9zYW1wbGUvTWFrZWZpbGUuYW0KKysrKyBiL3NhbXBsZS9NYWtlZmlsZS5hbQorQEAgLTMsNyArMyw2IEBACisgbGliX29uaWcgPSAuLi9zcmMvbGlib25pZy5sYQorIExEQUREICA9ICQobGliX29uaWcpCisgCistQU1fTERGTEFHUyAgPSAtTCQocHJlZml4KS9saWIKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9zcmMKKyAKKyBpZiBFTkFCTEVfUE9TSVhfQVBJCitkaWZmIC0tZ2l0IGEvdGVzdC9NYWtlZmlsZS5hbSBiL3Rlc3QvTWFrZWZpbGUuYW0KK2luZGV4IDRkNjI1NjguLmI3YTIxMDUgMTAwNjQ0CistLS0gYS90ZXN0L01ha2VmaWxlLmFtCisrKysgYi90ZXN0L01ha2VmaWxlLmFtCitAQCAtMSw3ICsxLDYgQEAKKyAjIyBNYWtlZmlsZS5hbSBmb3IgT25pZ3VydW1hCisgbGliX29uaWcgPSAuLi9zcmMvbGlib25pZy5sYQorIAorLUFNX0xERkxBR1MgID0gLUwkKHByZWZpeCkvbGliCisgQU1fQ0ZMQUdTID0gLVdhbGwgLVduby1pbnZhbGlkLXNvdXJjZS1lbmNvZGluZworIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL3NyYworIAorLS0gCisyLjIzLjAucmMxCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZy8wMDAxLWJ1aWxkLWVuYWJsZS1zZXJpYWwtdGVzdHMtYXV0b21ha2Utb3B0aW9uLWZvci1wdGVzdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZy8wMDAxLWJ1aWxkLWVuYWJsZS1zZXJpYWwtdGVzdHMtYXV0b21ha2Utb3B0aW9uLWZvci1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdlNWFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb25pZy9vbmlnLzAwMDEtYnVpbGQtZW5hYmxlLXNlcmlhbC10ZXN0cy1hdXRvbWFrZS1vcHRpb24tZm9yLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gOGJmODE4OWVjNGEwZDdlZTU2OWY2NmZlYjBlNTkwZTk2MDJjMzFiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyPUMzPUE5PTIwRHJhc3ppaz89IDxnaXRAYW5kcmVkLm5ldD4KK0RhdGU6IE1vbiwgNiBKYW4gMjAyMCAxNToxMDozMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBidWlsZDogZW5hYmxlIHNlcmlhbC10ZXN0cyBhdXRvbWFrZSBvcHRpb24gKGZvciBwdGVzdCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRm9yIHB0ZXN0LCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgdGVzdHMgd2l0aG91dAorcnVubmluZyB0aGVtLgorCitFbmFibGluZyB0aGUgc2VyaWFsLXRlc3RzIGF1dG9tYWtlIG9wdGlvbiB3aWxsIGFkZAorYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIG1ha2VmaWxlIHRhcmdldHMsIHRoZQorZm9ybWVyIGJlaW5nIHdoYXQgd2Ugd2FudC4KKworU2lnbmVkLW9mZi1ieTogQW5kcsOpIERyYXN6aWsgPGdpdEBhbmRyZWQubmV0PgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhYzUxZTg1Li40OGU2M2NlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zLDcgKzMsNyBAQCBBQ19JTklUKG9uaWcsIDYuOS40KQorIAorIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyAKKy1BTV9JTklUX0FVVE9NQUtFKFstV25vLXBvcnRhYmlsaXR5XSkKKytBTV9JTklUX0FVVE9NQUtFKFstV25vLXBvcnRhYmlsaXR5IHNlcmlhbC10ZXN0c10pCisgQUNfQ09ORklHX0hFQURFUlMoW3NyYy9jb25maWcuaF0pCisgCisgCistLSAKKzIuMjMuMC5yYzEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb25pZy9vbmlnL3J1bi1wdGVzdCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU3NGQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZy9ydW4tcHRlc3QKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoIC1ldQorCitteV9jbGVhbnVwKCkgeworICAgIFsgLW4gIiR7d29ya2RpcjotfSIgXSAmJiBybSAtcmYgIiR7d29ya2Rpcn0iCit9CisKK3RyYXAgIm15X2NsZWFudXAiIEVYSVQKK2ZvciBzaWcgaW4gSU5UIFRFUk0gOyBkbworICAgICMgV2Ugd2FudCBzaWcgdG8gZXhwYW5kIHJpZ2h0IGhlcmUgYW5kIG5vdywgYXMgaXQncworICAgICMgYSBsb29wIHZhcmlhYmxlLCBub3Qgd2hlbiBzaWduYWxsZWQuIEZvciAkJCBpdAorICAgICMgZG9lc24ndCBtYXR0ZXIuCisgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY0CisgICAgdHJhcCAibXlfY2xlYW51cCA7IHRyYXAgLSBFWElUIDsgdHJhcCAtICR7c2lnfSA7IGtpbGwgLXMgJHtzaWd9ICQkIiAke3NpZ30KK2RvbmUKKword29ya2Rpcj0kKG1rdGVtcCAtZCAtdCBvbmlnLnB0ZXN0LlhYWFhYWCkKK3N0YXR1cz0iJHt3b3JrZGlyfS9mYWlsZWQiCit0b3VjaCAiJHtzdGF0dXN9IgorCitmaW5kIHRlc3RzLyAtcGVybSAtMTExIC10eXBlIGYgLWV4ZWMgc2ggLWMgJworICAgIHdvcmtkaXI9IiR7MX0iCisgICAgc3RhdHVzPSIkezJ9IgorICAgIHQ9IiR7M30iCisgICAgdF9sb2c9IiR7d29ya2Rpcn0vJChiYXNlbmFtZSAke3R9KS5sb2ciCisKKyAgICByZXM9MAorICAgIC4vJHt0fSA+ICIke3RfbG9nfSIgMj4mMSBcCisgICAgICAgIHx8IHJlcz0kPworICAgIGlmIFsgJHJlcyAtZXEgMCBdIDsgdGhlbgorICAgICAgICBlY2hvICJQQVNTOiAke3R9IgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTDogJHt0fSIKKyAgICAgICAgZWNobyAiJChiYXNlbmFtZSAke3R9KTogJHt0X2xvZ30iID4+ICIke3N0YXR1c30iCisgICAgZmkKKyAgICAnIF8gIiR7d29ya2Rpcn0iICIke3N0YXR1c30iIHt9IFw7CisKK2lmIFsgJChzdGF0IC1jICclcycgIiR7c3RhdHVzfSIpIC1uZSAwIF0gOyB0aGVuCisgICAgZXhlYyA+JjIKKyAgICB3aGlsZSBJRlM9JzogJyByZWFkIC1yIHQgdF9sb2cgOyBkbworICAgICAgICBwcmludGYgIlxuPT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorICAgICAgICBwcmludGYgIkVSUk9SOiAlczpcbiIgIiR7dH0iCisgICAgICAgIHByaW50ZiAtLSAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgY2F0ICIke3RfbG9nfSIKKyAgICBkb25lIDwgIiR7c3RhdHVzfSIKK2ZpCisKK1sgJChzdGF0IC1jICclcycgIiR7c3RhdHVzfSIpIC1lcSAwIF0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZ181LjkuNi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZ181LjkuNi5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhNzFjNi4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vbmlnL29uaWdfNS45LjYuYmIKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1ERVNDUklQVElPTiA9ICJSZWd1bGFyIGV4cHJlc3Npb25zIGxpYnJhcnkuIFRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhpcyBcCi1saWJyYXJ5IGlzIHRoYXQgZGlmZmVyZW50IGNoYXJhY3RlciBlbmNvZGluZyBmb3IgZXZlcnkgcmVndWxhciBleHByZXNzaW9uIFwKLW9iamVjdCBjYW4gYmUgc3BlY2lmaWVkLiIKLUhPTUVQQUdFID0gImh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE1MDgwNzAxNDQzOS9odHRwOi8vd3d3Lmdlb2NpdGllcy5qcC9rb3Nha28zL29uaWd1cnVtYS8iCi1MSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBkNDg2MWI1YmMwYzM5MmE1YWE5MGQ5ZDc2ZWJkODZmIgotCi1TUkNfVVJJID0gImh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE1MDgwNzAxNDQzOS9odHRwOi8vd3d3Lmdlb2NpdGllcy5qcC9rb3Nha28zL29uaWd1cnVtYS9hcmNoaXZlLyR7QlB9LnRhci5neiBcCi0gICAgICAgICAgIGZpbGU6Ly9kby1ub3QtdXNlLXN5c3RlbS1oZWFkZXJzLnBhdGNoIFwKLSAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gImQwOGYxMGVhNWM5NDkxOTc4MGU2YjdiZWQxZWY5ODMwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ1NjQyMDEwMzM2YTZmNjhiN2YyZTM0YjFmMWNiMTRiZTMzM2U0ZDk1YzJhYzAyYjM4YzE2MmNhZjQ0ZTQ3YTciCi0KLUJJTkNPTkZJRyA9ICIke2JpbmRpcn0vb25pZy1jb25maWciCi0KLWluaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZAotCi1CQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZ182LjkuNC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29uaWcvb25pZ182LjkuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmE4NmYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb25pZy9vbmlnXzYuOS40LmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiUmVndWxhciBleHByZXNzaW9ucyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiT25pZ3VydW1hIGlzIGEgbW9kZXJuIGFuZCBmbGV4aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIGxpYnJhcnkuIFwKK0l0IGVuY29tcGFzc2VzIGZlYXR1cmVzIGZyb20gZGlmZmVyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBcCitpbXBsZW1lbnRhdGlvbnMgdGhhdCB0cmFkaXRpb25hbGx5IGV4aXN0IGluIGRpZmZlcmVudCBsYW5ndWFnZXMuIFwKK0NoYXJhY3RlciBlbmNvZGluZyBjYW4gYmUgc3BlY2lmaWVkIHBlciByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9ra29zL29uaWd1cnVtYSIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWVlMDQzNzg0YmRjZTc1MDNlNjE5YjJkMWE4NTc5OGIiCisKK1NSQ19VUkkgPSAiXAorICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ra29zL29uaWd1cnVtYS9yZWxlYXNlcy9kb3dubG9hZC92JHtQVn0vJHtCUH0udGFyLmd6IFwKKyAgICBmaWxlOi8vMDAwMS1idWlsZC1kb24tdC1saW5rLWFnYWluc3QtaG9zdC1zeXN0ZW0tbGlicmFyaWVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1idWlsZC1lbmFibGUtc2VyaWFsLXRlc3RzLWF1dG9tYWtlLW9wdGlvbi1mb3ItcHRlc3QucGF0Y2ggXAorICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTEyZDJmZTk5N2I3ODliZDg3Y2Y2Mzc5OWMwOTE4NzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDY2OWQyMmZmN2UwOTkyYTdlOTNlMTE2MTYxY2FjOWMwOTQ5Y2Q4OTYwZDFjNTYyOTgyMDI2NzI2ZjBlNmQ1MyIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9vbmlnLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHB0ZXN0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgLUMgdGVzdCBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICBpbnN0YWxsIC1EbTA3NTUgLXQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvICR7Qn0vdGVzdC8ubGlicy8qCit9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuLXZtLXRvb2xzL29wZW4tdm0tdG9vbHMvMDAwMS11dGlsQmFja3RyYWNlLUlnbm9yZS1XYXJyYXktYm91bmRzLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3Blbi12bS10b29scy9vcGVuLXZtLXRvb2xzLzAwMDEtdXRpbEJhY2t0cmFjZS1JZ25vcmUtV2FycmF5LWJvdW5kcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTY2NGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3Blbi12bS10b29scy9vcGVuLXZtLXRvb2xzLzAwMDEtdXRpbEJhY2t0cmFjZS1JZ25vcmUtV2FycmF5LWJvdW5kcy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGFjM2Y5M2VhMDg3ZDNhNTQ2MWZlNTdmZTAyMWQwZmU5YTk1OWUxM2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNSBEZWMgMjAxOSAxNToyNTowMiAtMDgwMAorU3ViamVjdDogW1BBVENIXSB1dGlsQmFja3RyYWNlOiBJZ25vcmUgLVdhcnJheS1ib3VuZHMKKworVGhpcyBpcyBuZXcgd2FybmluZyB3aXRoIGdjYzEwLCB1bnRpbCBpdHMgZml4ZWQgaWdub3JlIGl0IGxpa2UgZ2NjPDEwCitkaWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgb3Blbi12bS10b29scy9saWIvdXNlci91dGlsQmFja3RyYWNlLmMgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvb3Blbi12bS10b29scy9saWIvdXNlci91dGlsQmFja3RyYWNlLmMgYi9vcGVuLXZtLXRvb2xzL2xpYi91c2VyL3V0aWxCYWNrdHJhY2UuYworaW5kZXggYjcyMzQwYWQuLjk3Y2E1M2YyIDEwMDY0NAorLS0tIGEvb3Blbi12bS10b29scy9saWIvdXNlci91dGlsQmFja3RyYWNlLmMKKysrKyBiL29wZW4tdm0tdG9vbHMvbGliL3VzZXIvdXRpbEJhY2t0cmFjZS5jCitAQCAtNTE3LDYgKzUxNywxMSBAQCBVdGlsX0JhY2t0cmFjZVdpdGhGdW5jKGludCBidWdOciwgICAgICAgICAgICAgICAgLy8gSU46CisgICAgfSBlbHNlIHsKKyAgICAgICBvdXRGdW5jKG91dEZ1bmNEYXRhLCAiQmFja3RyYWNlIGZvciBidWdOcj0lZFxuIixidWdOcik7CisgICAgfQorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdhcnJheS1ib3VuZHMiCisrCisgICAgVXRpbF9CYWNrdHJhY2VGcm9tUG9pbnRlcldpdGhGdW5jKCZ4Wy0yXSwgb3V0RnVuYywgb3V0RnVuY0RhdGEpOworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgfQorKworLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3Blbi12bS10b29scy9vcGVuLXZtLXRvb2xzXzExLjAuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29wZW4tdm0tdG9vbHMvb3Blbi12bS10b29sc18xMS4wLjEuYmIKaW5kZXggOWU0YWE0OC4uZWRhNzdjMiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3Blbi12bS10b29scy9vcGVuLXZtLXRvb2xzXzExLjAuMS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuLXZtLXRvb2xzL29wZW4tdm0tdG9vbHNfMTEuMC4xLmJiCkBAIC00MSw2ICs0MSw3IEBACiAgICAgZmlsZTovLzAwMDEtR2l0SHViLUlzc3VlLTM2Ny4tUmVtb3ZlLXJlZmVyZW5jZXMtdG8tZGVwcmVjYXRlZC1HXy5wYXRjaDtwYXRjaGRpcj0uLiBcCiAgICAgZmlsZTovLzAwMDEtTWFrZS1IZ2ZzQ29udmVydEZyb21OdFRpbWVOc2VjLWF3YXJlLW9mLTY0LWJpdC10aW1lXy5wYXRjaDtwYXRjaGRpcj0uLiBcCiAgICAgZmlsZTovLzAwMDItaGdmc1NlcnZlckxpbnV4LUNvbnNpZGVyLTY0Yml0LXRpbWVfdC1wb3NzaWJpbGl0eS5wYXRjaDtwYXRjaGRpcj0uLiBcCisgICAgZmlsZTovLzAwMDEtdXRpbEJhY2t0cmFjZS1JZ25vcmUtV2FycmF5LWJvdW5kcy5wYXRjaDtwYXRjaGRpcj0uLiBcCiAiCiAKIFNSQ1JFViA9ICJkM2VkZmQxNDJhODEwOTZmOWY1OGFmZjE3ZDg0MjE5YjQ1N2Y0OTg3IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3BlbmN2L2FkZS8wMDAxLXVzZS1HTlVJbnN0YWxsRGlycy1mb3ItZGV0ZWN0aW5nLWluc3RhbGwtcGF0aHMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuY3YvYWRlLzAwMDEtdXNlLUdOVUluc3RhbGxEaXJzLWZvci1kZXRlY3RpbmctaW5zdGFsbC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDM4YjBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3BlbmN2L2FkZS8wMDAxLXVzZS1HTlVJbnN0YWxsRGlycy1mb3ItZGV0ZWN0aW5nLWluc3RhbGwtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSA2N2NjZjc3ZDk3Yjc2ZTgyNjBjOWQ3OTNhYjE3MjU3N2UyMzkzZGJjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgRGVjIDIwMTkgMjE6MzM6NDYgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNlIEdOVUluc3RhbGxEaXJzIGZvciBkZXRlY3RpbmcgaW5zdGFsbCBwYXRocworCitUaGlzIGhlbHBzIHdpdGggbXVsdGlsaWIgYnVpbGRzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vb3BlbmN2L2FkZS9wdWxsLzE5XQorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNvdXJjZXMvYWRlL0NNYWtlTGlzdHMudHh0IHwgMTAgKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zb3VyY2VzL2FkZS9DTWFrZUxpc3RzLnR4dCBiL3NvdXJjZXMvYWRlL0NNYWtlTGlzdHMudHh0CitpbmRleCAyZDFkZDIwLi40NjQxNWQxIDEwMDY0NAorLS0tIGEvc291cmNlcy9hZGUvQ01ha2VMaXN0cy50eHQKKysrKyBiL3NvdXJjZXMvYWRlL0NNYWtlTGlzdHMudHh0CitAQCAtNDcsMTIgKzQ3LDE0IEBAIGlmKEJVSUxEX0FERV9ET0NVTUVOVEFUSU9OKQorICAgICAgICAgICAgICAgICAgICAgICBWRVJCQVRJTSkKKyBlbmRpZigpCisgCisraW5jbHVkZShHTlVJbnN0YWxsRGlycykKKysKKyBpbnN0YWxsKFRBUkdFVFMgYWRlIENPTVBPTkVOVCBkZXYKKyAgICAgICAgIEVYUE9SVCBhZGVUYXJnZXRzCistICAgICAgICBBUkNISVZFIERFU1RJTkFUSU9OIGxpYgorLSAgICAgICAgTElCUkFSWSBERVNUSU5BVElPTiBsaWIKKy0gICAgICAgIFJVTlRJTUUgREVTVElOQVRJT04gbGliCistICAgICAgICBJTkNMVURFUyBERVNUSU5BVElPTiBpbmNsdWRlKQorKwlBUkNISVZFIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisrICAgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisrICAgICAgICBSVU5USU1FIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9CisrCUlOQ0xVREVTIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfSkKKyAKKyBpbnN0YWxsKEVYUE9SVCBhZGVUYXJnZXRzIERFU1RJTkFUSU9OIHNoYXJlL2FkZSBDT01QT05FTlQgZGV2KQorIAorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3BlbmN2L2FkZV8wLjEuMWYuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuY3YvYWRlXzAuMS4xZi5iYgppbmRleCAzMzI4MjBkLi4zODYxODAyIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuY3YvYWRlXzAuMS4xZi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuY3YvYWRlXzAuMS4xZi5iYgpAQCAtNSw2ICs1LDcgQEAKIEhPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuY3YvYWRlIgogCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vb3BlbmN2L2FkZS5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11c2UtR05VSW5zdGFsbERpcnMtZm9yLWRldGVjdGluZy1pbnN0YWxsLXBhdGhzLnBhdGNoIFwKICAgICAgICAgICAgIgogCiBTUkNSRVYgPSAiNThiMjU5NWExYTk1Y2M4MDdiZThiZjYyMjJmMjY2YTlhMWYzOTNhOSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29wZW5jdi9vcGVuY3YvZG93bmxvYWQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuY3Yvb3BlbmN2L2Rvd25sb2FkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOGRiODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuY3Yvb3BlbmN2L2Rvd25sb2FkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1RoaXMgQ01ha2UgbW9kdWxlIHdpbGwgZG93bmxvYWQgZmlsZXMgZHVyaW5nIGRvX2NvbmZpZ3VyZS4gIFRoaXMgaXMgYmFkIGFzIGl0CittZWFucyB3ZSBjYW4ndCBkbyBvZmZsaW5lIGJ1aWxkcy4KKworQWRkIGFuIG9wdGlvbiB0byBkaXNhbGxvdyBkb3dubG9hZHMgYnkgZW1pdHRpbmcgYSBmYXRhbCBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY21ha2UvT3BlbkNWRG93bmxvYWQuY21ha2UgYi9jbWFrZS9PcGVuQ1ZEb3dubG9hZC5jbWFrZQoraW5kZXggY2RjNDdhZDJjYi4uNzQ1NzNmNDVhMiAxMDA2NDQKKy0tLSBhL2NtYWtlL09wZW5DVkRvd25sb2FkLmNtYWtlCisrKysgYi9jbWFrZS9PcGVuQ1ZEb3dubG9hZC5jbWFrZQorQEAgLTE0LDYgKzE0LDcgQEAKKyAjICAgIFJFTEFUSVZFX1VSTCAtIGlmIHNldCwgdGhlbiBVUkwgaXMgdHJlYXRlZCBhcyBhIGJhc2UsIGFuZCBGSUxFTkFNRSB3aWxsIGJlIGFwcGVuZGVkIHRvIGl0CisgIyAgTm90ZTogdXNlcyBPUEVOQ1ZfRE9XTkxPQURfUEFUSCBmb2xkZXIgYXMgY2FjaGUsIGRlZmF1bHQgaXMgPG9wZW5jdj4vLmNhY2hlCisgCisrc2V0KE9QRU5DVl9BTExPV19ET1dOTE9BRFMgT04gQ0FDSEUgQk9PTCAiQWxsb3cgZG93bmxvYWRzIikKKyBzZXQoSEVMUF9PUEVOQ1ZfRE9XTkxPQURfUEFUSCAiQ2FjaGUgZGlyZWN0b3J5IGZvciBkb3dubG9hZGVkIGZpbGVzIikKKyBpZihERUZJTkVEIEVOVntPUEVOQ1ZfRE9XTkxPQURfUEFUSH0pCisgICBzZXQoT1BFTkNWX0RPV05MT0FEX1BBVEggIiRFTlZ7T1BFTkNWX0RPV05MT0FEX1BBVEh9IiBDQUNIRSBQQVRIICIke0hFTFBfT1BFTkNWX0RPV05MT0FEX1BBVEh9IikKK0BAIC0xNTMsNiArMTU0LDExIEBAIGZ1bmN0aW9uKG9jdl9kb3dubG9hZCkKKyAKKyAgICMgRG93bmxvYWQKKyAgIGlmKE5PVCBFWElTVFMgIiR7Q0FDSEVfQ0FORElEQVRFfSIpCisrICAgIGlmKE5PVCBPUEVOQ1ZfQUxMT1dfRE9XTkxPQURTKQorKyAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk5vdCBnb2luZyB0byBkb3dubG9hZCAke0RMX0ZJTEVOQU1FfSIpCisrICAgICAgcmV0dXJuKCkKKysgICAgZW5kaWYoKQorKworICAgICBvY3ZfZG93bmxvYWRfbG9nKCIjY21ha2VfZG93bmxvYWQgXCIke0NBQ0hFX0NBTkRJREFURX1cIiBcIiR7RExfVVJMfVwiIikKKyAgICAgZmlsZShET1dOTE9BRCAiJHtETF9VUkx9IiAiJHtDQUNIRV9DQU5ESURBVEV9IgorICAgICAgICAgIElOQUNUSVZJVFlfVElNRU9VVCA2MApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3BlbmN2L29wZW5jdl80LjEuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29wZW5jdi9vcGVuY3ZfNC4xLjAuYmIKaW5kZXggNWU4OWRiMC4uZjY3OWNjYiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvb3BlbmN2L29wZW5jdl80LjEuMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuY3Yvb3BlbmN2XzQuMS4wLmJiCkBAIC0xNSw2ICsxNSw3IEBACiBTUkNSRVZfaXBwID0gIjMyZTMxNWE1YjEwNmE3Yjg5ZGJlZDUxYzI4ZjgxMjBhNDhiMzY4YjQiCiBTUkNSRVZfYm9vc3RkZXNjID0gIjM0ZTQyMDZhZWY0NGQ1MGU2YmJjZDBhYjA2MzU0YjUyZTc0NjZkMjYiCiBTUkNSRVZfdmdnID0gImZjY2Y3Y2Q2YTRiMTIwNzlmNzNiYmZiMjE3NDVmOWJhYmNkNGViMWQiCitTUkNSRVZfZmFjZSA9ICI4YWZhNTdhYmM4MjI5ZDYxMWM0OTM3MTY1ZDIwZTJhMmQ5ZmM1YTEyIgogCiBkZWYgaXBwX2ZpbGVuYW1lKGQpOgogICAgIGltcG9ydCByZQpAQCAtNDEsMjAgKzQyLDQxIEBACiAgICAgICAgICAgIGdpdDovL2dpdGh1Yi5jb20vb3BlbmN2L29wZW5jdl8zcmRwYXJ0eS5naXQ7YnJhbmNoPWlwcGljdi9tYXN0ZXJfMjAxODA3MjM7ZGVzdHN1ZmZpeD1pcHA7bmFtZT1pcHAgXAogICAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL29wZW5jdi9vcGVuY3ZfM3JkcGFydHkuZ2l0O2JyYW5jaD1jb250cmliX3hmZWF0dXJlczJkX2Jvb3N0ZGVzY18yMDE2MTAxMjtkZXN0c3VmZml4PWJvb3N0ZGVzYztuYW1lPWJvb3N0ZGVzYyBcCiAgICAgICAgICAgIGdpdDovL2dpdGh1Yi5jb20vb3BlbmN2L29wZW5jdl8zcmRwYXJ0eS5naXQ7YnJhbmNoPWNvbnRyaWJfeGZlYXR1cmVzMmRfdmdnXzIwMTYwMzE3O2Rlc3RzdWZmaXg9dmdnO25hbWU9dmdnIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9vcGVuY3Yvb3BlbmN2XzNyZHBhcnR5LmdpdDticmFuY2g9Y29udHJpYl9mYWNlX2FsaWdubWVudF8yMDE3MDgxODtkZXN0c3VmZml4PWZhY2U7bmFtZT1mYWNlIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtM3JkcGFydHktaXBwaWN2LVVzZS1wcmUtZG93bmxvYWRlZC1pcHAucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMi1NYWtlLW9wZW5jdi10cy1jcmVhdGUtc2hhcmUtbGlicmFyeS1pbnRlYWQtb2Ytc3RhdGljLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDMtVG8tZml4LWVycm9ycy1hcy1mb2xsb3dpbmcucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1UZW1wb3JhcmxpeS13b3JrLWFyb3VuZC1kZXByZWNhdGVkLWZmbXBlZy1SQVctZnVuY3RpLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtRG9udC11c2UtaXN5c3RlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb3dubG9hZC5wYXRjaCBcCiAgICAgICAgICAgICIKIFBWID0gIjQuMS4wIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCisjIE9wZW5DViB3YW50cyB0byBkb3dubG9hZCBtb3JlIGZpbGVzIGR1cmluZyBjb25maWd1cmUuICBXZSBkb3dubG9hZCB0aGVzZSBpbgorIyBkb19mZXRjaCBhbmQgY29uc3RydWN0IGEgc291cmNlIGNhY2hlIGluIHRoZSBmb3JtYXQgaXQgZXhwZWN0cworT1BFTkNWX0RMRElSID0gIiR7V09SS0RJUn0vZG93bmxvYWRzIgorCiBkb191bnBhY2tfZXh0cmEoKSB7CiAgICAgdGFyIHh6ZiAke1dPUktESVJ9L2lwcC9pcHBpY3YvJHtJUFBfRklMRU5BTUV9IC1DICR7V09SS0RJUn0KLSAgICBjcCAke1dPUktESVJ9L3ZnZy8qLmkgJHtXT1JLRElSfS9jb250cmliL21vZHVsZXMveGZlYXR1cmVzMmQvc3JjCi0gICAgY3AgJHtXT1JLRElSfS9ib29zdGRlc2MvKi5pICR7V09SS0RJUn0vY29udHJpYi9tb2R1bGVzL3hmZWF0dXJlczJkL3NyYworCisgICAgbWQ1KCkgeworICAgICAgICAjIFJldHVybiB0aGUgTUQ1IG9mICQxCisgICAgICAgIGVjaG8gJChtZDVzdW0gJDEgfCBjdXQgLWQnICcgLWYxKQorICAgIH0KKyAgICBjYWNoZSgpIHsKKyAgICAgICAgVEFHPSQxCisgICAgICAgIHNoaWZ0CisgICAgICAgIG1rZGlyIC0tcGFyZW50cyAke09QRU5DVl9ETERJUn0vJFRBRworICAgICAgICBmb3IgRiBpbiAkKjsgZG8KKyAgICAgICAgICAgIERFU1Q9JHtPUEVOQ1ZfRExESVJ9LyRUQUcvJChtZDUgJEYpLSQoYmFzZW5hbWUgJEYpCisgICAgICAgICAgICB0ZXN0IC1lICRERVNUIHx8IGxuIC1zICRGICRERVNUCisgICAgICAgIGRvbmUKKyAgICB9CisgICAgY2FjaGUgeGZlYXR1cmVzMmQvYm9vc3RkZXNjICR7V09SS0RJUn0vYm9vc3RkZXNjLyouaQorICAgIGNhY2hlIHhmZWF0dXJlczJkL3ZnZyAke1dPUktESVJ9L3ZnZy8qLmkKKyAgICBjYWNoZSBkYXRhICR7V09SS0RJUn0vZmFjZS8qLmRhdAogfQogYWRkdGFzayB1bnBhY2tfZXh0cmEgYWZ0ZXIgZG9fdW5wYWNrIGJlZm9yZSBkb19wYXRjaAogCkBAIC02NSwxNiArODcsMTkgQEAKICAgICAtRE9QRU5DVl9JQ1ZfSEFTSD0ke0lQUF9NRDV9IFwKICAgICAtRElQUFJPT1Q9JHtXT1JLRElSfS9pcHBpY3ZfbG54IFwKICAgICAtRE9QRU5DVl9HRU5FUkFURV9QS0dDT05GSUc9T04gXAorICAgIC1ET1BFTkNWX0RPV05MT0FEX1BBVEg9JHtPUEVOQ1ZfRExESVJ9IFwKKyAgICAtRE9QRU5DVl9BTExPV19ET1dOTE9BRFM9T0ZGIFwKICAgICAke0BiYi51dGlscy5jb250YWlucygiVEFSR0VUX0NDX0FSQ0giLCAiLW1zc2UzIiwgIi1ERU5BQkxFX1NTRT0xIC1ERU5BQkxFX1NTRTI9MSAtREVOQUJMRV9TU0UzPTEgLURFTkFCTEVfU1NTRTM9MSIsICIiLCBkKX0gXAogICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUQVJHRVRfQ0NfQVJDSCIsICItbXNzZTQuMSIsICItREVOQUJMRV9TU0U9MSAtREVOQUJMRV9TU0UyPTEgLURFTkFCTEVfU1NFMz0xIC1ERU5BQkxFX1NTU0UzPTEgLURFTkFCTEVfU1NFNDE9MSIsICIiLCBkKX0gXAogICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUQVJHRVRfQ0NfQVJDSCIsICItbXNzZTQuMiIsICItREVOQUJMRV9TU0U9MSAtREVOQUJMRV9TU0UyPTEgLURFTkFCTEVfU1NFMz0xIC1ERU5BQkxFX1NTU0UzPTEgLURFTkFCTEVfU1NFNDE9MSAtREVOQUJMRV9TU0U0Mj0xIiwgIiIsIGQpfSBcCiAiCiBFWFRSQV9PRUNNQUtFX2FwcGVuZF94ODYgPSAiIC1EWDg2PU9OIgogCi1QQUNLQUdFQ09ORklHID8/PSAicHl0aG9uMyBlaWdlbiBqcGVnIHBuZyB0aWZmIHY0bCBsaWJ2NGwgZ3N0cmVhbWVyIHNhbXBsZXMgdGJiIGdwaG90bzIgXAorUEFDS0FHRUNPTkZJRyA/Pz0gImdhcGkgcHl0aG9uMyBlaWdlbiBqcGVnIHBuZyB0aWZmIHY0bCBsaWJ2NGwgZ3N0cmVhbWVyIHNhbXBsZXMgdGJiIGdwaG90bzIgXAogICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAieDExIiwgImd0ayIsICIiLCBkKX0gXAogICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCIsICJjb21tZXJjaWFsIiwgImxpYmF2IiwgIiIsIGQpfSIKIAorUEFDS0FHRUNPTkZJR1tnYXBpXSA9ICItRFdJVEhfQURFPU9OIC1EYWRlX0RJUj0ke1NUQUdJTkdfTElCRElSfSwtRFdJVEhfQURFPU9GRixhZGUiCiBQQUNLQUdFQ09ORklHW2FtZGJsYXNdID0gIi1EV0lUSF9PUEVOQ0xBTURCTEFTPU9OLC1EV0lUSF9PUEVOQ0xBTURCTEFTPU9GRixsaWJjbGFtZGJsYXMsIgogUEFDS0FHRUNPTkZJR1thbWRmZnRdID0gIi1EV0lUSF9PUEVOQ0xBTURGRlQ9T04sLURXSVRIX09QRU5DTEFNREZGVD1PRkYsbGliY2xhbWRmZnQsIgogUEFDS0FHRUNPTkZJR1tkbm5dID0gIi1EQlVJTERfb3BlbmN2X2Rubj1PTiAtRFBST1RPQlVGX1VQREFURV9GSUxFUz1PTiAtREJVSUxEX1BST1RPQlVGPU9GRiwtREJVSUxEX29wZW5jdl9kbm49T0ZGLHByb3RvYnVmIHByb3RvYnVmLW5hdGl2ZSwiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuc2Mvb3BlbnNjLzAwMDEtRml4LW1pc2xlYWRpbmctY29kZS1pbmRlbnRhdGlvbi5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29wZW5zYy9vcGVuc2MvMDAwMS1GaXgtbWlzbGVhZGluZy1jb2RlLWluZGVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzFiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuc2Mvb3BlbnNjLzAwMDEtRml4LW1pc2xlYWRpbmctY29kZS1pbmRlbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIDI4MzU3ODUxOWVjODNhODc5MmIwMjZjMTAzMjI3ODk3ODRkNjI5ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNyBEZWMgMjAxOSAxMTozMzo1NyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBGaXggbWlzbGVhZGluZyBjb2RlIGluZGVudGF0aW9uCisKK0ZpeGVzCitlcnJvcjogbWlzbGVhZGluZyBpbmRlbnRhdGlvbjsgc3RhdGVtZW50IGlzIG5vdCBwYXJ0IG9mIHRoZSBwcmV2aW91cyAnaWYnIFstV2Vycm9yLC1XbWlzbGVhZGluZy1pbmRlbnRhdGlvbl0KKyAgICAgICAgIGlmKGNpcGhlcikKKyAgICAgICAgIF4KKy4uLy4uLy4uL2dpdC9zcmMvbGlib3BlbnNjL2NhcmQtZW50ZXJzYWZlLmM6MzY5OjI6IG5vdGU6IHByZXZpb3VzIHN0YXRlbWVudCBpcyBoZXJlCisgICAgICAgIGlmKHNidWYpCisgICAgICAgIF4KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vT3BlblNDL09wZW5TQy9wdWxsLzE4OTRdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2xpYm9wZW5zYy9jYXJkLWVudGVyc2FmZS5jIHwgMTIgKysrKysrLS0tLS0tCisgc3JjL3Rvb2xzL3BrY3MxNS1pbml0LmMgICAgICAgIHwgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpYm9wZW5zYy9jYXJkLWVudGVyc2FmZS5jIGIvc3JjL2xpYm9wZW5zYy9jYXJkLWVudGVyc2FmZS5jCitpbmRleCAzZTQyYzExZi4uYWJiOWZkODEgMTAwNjQ0CistLS0gYS9zcmMvbGlib3BlbnNjL2NhcmQtZW50ZXJzYWZlLmMKKysrKyBiL3NyYy9saWJvcGVuc2MvY2FyZC1lbnRlcnNhZmUuYworQEAgLTM1MiwxMCArMzUyLDEwIEBAIHN0YXRpYyBpbnQgZW50ZXJzYWZlX3RyYW5zbWl0X2FwZHUoc2NfY2FyZF90ICpjYXJkLCBzY19hcGR1X3QgKmFwZHUsCisgCSBzaXplX3QgY2lwaGVyX2RhdGFfc2l6ZSxtYWNfZGF0YV9zaXplOworIAkgaW50IGJsb2NrczsKKyAJIGludCByPVNDX1NVQ0NFU1M7CistCXU4ICpzYnVmPU5VTEw7CistCXNpemVfdCBzc2l6ZT0wOworKwkgdTggKnNidWY9TlVMTDsKKysJIHNpemVfdCBzc2l6ZT0wOworIAorLQlTQ19GVU5DX0NBTExFRChjYXJkLT5jdHgsIFNDX0xPR19ERUJVR19WRVJCT1NFKTsKKysJIFNDX0ZVTkNfQ0FMTEVEKGNhcmQtPmN0eCwgU0NfTE9HX0RFQlVHX1ZFUkJPU0UpOworIAorIAkgYXNzZXJ0KGNhcmQpOworIAkgYXNzZXJ0KGFwZHUpOworQEAgLTM2MywxMCArMzYzLDEwIEBAIHN0YXRpYyBpbnQgZW50ZXJzYWZlX3RyYW5zbWl0X2FwZHUoc2NfY2FyZF90ICpjYXJkLCBzY19hcGR1X3QgKmFwZHUsCisgCSBpZigoY2lwaGVyfHxtYWMpICYmICgha2V5fHwoa2V5bGVuIT04ICYmIGtleWxlbiE9MTYpKSkKKyAJCSAgU0NfRlVOQ19SRVRVUk4oY2FyZC0+Y3R4LCBTQ19MT0dfREVCVUdfVkVSQk9TRSwgU0NfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFMpOworIAorLQlyID0gc2NfYXBkdV9nZXRfb2N0ZXRzKGNhcmQtPmN0eCwgYXBkdSwgJnNidWYsICZzc2l6ZSwgU0NfUFJPVE9fUkFXKTsKKy0JaWYgKHIgPT0gU0NfU1VDQ0VTUykKKysJIHIgPSBzY19hcGR1X2dldF9vY3RldHMoY2FyZC0+Y3R4LCBhcGR1LCAmc2J1ZiwgJnNzaXplLCBTQ19QUk9UT19SQVcpOworKwkgaWYgKHIgPT0gU0NfU1VDQ0VTUykKKyAJCXNjX2FwZHVfbG9nKGNhcmQtPmN0eCwgU0NfTE9HX0RFQlVHX1ZFUkJPU0UsIHNidWYsIHNzaXplLCAxKTsKKy0JaWYoc2J1ZikKKysJIGlmKHNidWYpCisgCQlmcmVlKHNidWYpOworIAorIAkgaWYoY2lwaGVyKQorZGlmZiAtLWdpdCBhL3NyYy90b29scy9wa2NzMTUtaW5pdC5jIGIvc3JjL3Rvb2xzL3BrY3MxNS1pbml0LmMKK2luZGV4IDFjZTc5ZjQ1Li45YTczMTIxYyAxMDA2NDQKKy0tLSBhL3NyYy90b29scy9wa2NzMTUtaW5pdC5jCisrKysgYi9zcmMvdG9vbHMvcGtjczE1LWluaXQuYworQEAgLTIzMTEsOCArMjMxMSw4IEBAIGRvX3JlYWRfcHJpdmF0ZV9rZXkoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAJCQlyID0gdXRpbF9nZXRwYXNzKCZwYXNzcGhyYXNlLCAmbGVuLCBzdGRpbik7CisgCQkJaWYgKHIgPCAwIHx8ICFwYXNzcGhyYXNlKQorIAkJCQlyZXR1cm4gU0NfRVJST1JfSU5URVJOQUw7CistIAkJCXIgPSBkb19yZWFkX3BrY3MxMl9wcml2YXRlX2tleShmaWxlbmFtZSwKKy0gCQkJCQlwYXNzcGhyYXNlLCBwaywgY2VydHMsIG1heF9jZXJ0cyk7CisrCQkJciA9IGRvX3JlYWRfcGtjczEyX3ByaXZhdGVfa2V5KGZpbGVuYW1lLAorKwkJCQkJcGFzc3BocmFzZSwgcGssIGNlcnRzLCBtYXhfY2VydHMpOworIAkJfQorIAl9IGVsc2UgeworIAkJdXRpbF9lcnJvcigiRXJyb3Igd2hlbiByZWFkaW5nIHByaXZhdGUga2V5LiAiCistLSAKKzIuMjQuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9vcGVuc2Mvb3BlbnNjXzAuMTkuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29wZW5zYy9vcGVuc2NfMC4xOS4wLmJiCmluZGV4IGExZTI5ZGQuLjBkNzQ0ZTIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29wZW5zYy9vcGVuc2NfMC4xOS4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L29wZW5zYy9vcGVuc2NfMC4xOS4wLmJiCkBAIC0xNSw2ICsxNSw3IEBACiBTUkNSRVYgPSAiZjE2OTFmYzkxZmMxMTMxOTFjM2E4YWFmNWZhY2Q2OTgzMzM0ZWM0NyIKIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9PcGVuU0MvT3BlblNDIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtUmVtb3ZlLXJlZHVuZGFudC1sb2dnaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LW1pc2xlYWRpbmctY29kZS1pbmRlbnRhdGlvbi5wYXRjaCBcCiAgICAgICAgICAgIgogREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmljb252IG9wZW5zc2wiCiAKQEAgLTMxLDcgKzMyLDcgQEAKIFBBQ0tBR0VDT05GSUcgPz89ICJwY3NjIgogCiBQQUNLQUdFQ09ORklHW29wZW5jdF0gPSAiLS1lbmFibGUtb3BlbmN0LC0tZGlzYWJsZS1vcGVuY3Qsb3BlbmN0IgotUEFDS0FHRUNPTkZJR1twY3NjXSA9ICItLWVuYWJsZS1wY3NjLC0tZGlzYWJsZS1wY3NjLHBjc2MtbGl0ZSIKK1BBQ0tBR0VDT05GSUdbcGNzY10gPSAiLS1lbmFibGUtcGNzYywtLWRpc2FibGUtcGNzYyxwY3NjLWxpdGUscGNzYy1saXRlIHBjc2MtbGl0ZS1saWIiCiAKIFJERVBFTkRTXyR7UE59ID0gInJlYWRsaW5lIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9wb2NvL3BvY29fMS45LjQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9wb2NvL3BvY29fMS45LjQuYmIKaW5kZXggYzg1NDQ4MS4uZjFkYWJjZDAgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3BvY28vcG9jb18xLjkuNC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9wb2NvL3BvY29fMS45LjQuYmIKQEAgLTUyLDYgKzUyLDcgQEAKIAogRVhUUkFfT0VDTUFLRSA9ICItRENNQUtFX0JVSUxEX1RZUEU9UmVsV2l0aERlYkluZm8gLURQT0NPX1VOQlVORExFRD1PTiBcCiAgICAgICAgICAgICAgICAgICAtRFpMSUJfTElCUkFSWV9SRUxFQVNFOlNUUklORz16IC1EUENSRV9MSUJSQVJZOlNUUklORz1wY3JlIFwKKyAgICAgICAgICAgICAgICAgIC1ETElCX1NVRkZJWD0ke0BkLmdldFZhcignYmFzZWxpYicpLnJlcGxhY2UoJ2xpYicsICcnKX0gXAogICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUFRFU1RfRU5BQkxFRCcsICcxJywgJy1ERU5BQkxFX1RFU1RTPU9OICcsICcnLCBkKX0iCiAKICMgRm9yIHRoZSBuYXRpdmUgYnVpbGQgd2Ugd2FudCB0byB1c2UgdGhlIGJ1bmRsZWQgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvcG9wcGxlci9wb3BwbGVyLWRhdGFfMC40LjkuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9wb3BwbGVyL3BvcHBsZXItZGF0YV8wLjQuOS5iYgppbmRleCBiMmFmMDk3Li5lZGEzZjdlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9wb3BwbGVyL3BvcHBsZXItZGF0YV8wLjQuOS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9wb3BwbGVyL3BvcHBsZXItZGF0YV8wLjQuOS5iYgpAQCAtMSw2ICsxLDcgQEAKIFNVTU1BUlkgPSAiRW5jb2RpbmcgZmlsZXMgZm9yIFBvcHBsZXIiCiBERVNDUklQVElPTiA9ICJFbmNvZGluZyBmaWxlcyBmb3IgdXNlIHdpdGggcG9wcGxlciB0aGF0IGVuYWJsZSBwb3BwbGVyIHRvIFwKICAgICAgICAgICAgICAgIGNvcnJlY3RseSByZW5kZXIgQ0pLIGFuZCBDeXJyaWxpYy4iCitIT01FUEFHRSA9ICJodHRwczovL3BvcHBsZXIuZnJlZWRlc2t0b3Aub3JnLyIKIExJQ0VOU0UgPSAiQlNEICYgR1BMdjIgJiBHUEx2MysiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ODcwYjk4MzQzZjBiYmIyNWZhNDNiOWQyYmE1OTQ0OCBcCiAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLmFkb2JlO21kNT02M2M2YThhOWRmMjA0YzAwNDYxZmE1ZjE2M2Q4YTY2MyBcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9wb3BwbGVyL3BvcHBsZXIvYmFzZW5hbWUtaW5jbHVkZS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3BvcHBsZXIvcG9wcGxlci9iYXNlbmFtZS1pbmNsdWRlLnBhdGNoCmluZGV4IGMxOGE1ZjUuLjNkNmQ3YTggMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3BvcHBsZXIvcG9wcGxlci9iYXNlbmFtZS1pbmNsdWRlLnBhdGNoCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3BvcHBsZXIvcG9wcGxlci9iYXNlbmFtZS1pbmNsdWRlLnBhdGNoCkBAIC0xNiw4ICsxNiw4IEBACiAtLS0gYS9nb28vZ2Jhc2VuYW1lLmNjCiArKysgYi9nb28vZ2Jhc2VuYW1lLmNjCiBAQCAtNDYsNiArNDYsMTAgQEAKLSAjaW5jbHVkZSA8c3RkbGliLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxjc3RkbGliPgorICNpbmNsdWRlIDxjc3RyaW5nPgogIAogKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pCiArI2RlZmluZSBiYXNlbmFtZShzcmMpIChzdHJyY2hyKHNyYywnLycpID8gc3RycmNocihzcmMsJy8nKSsxIDogc3JjKQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvcG9wcGxlci9wb3BwbGVyXzAuODIuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3BvcHBsZXIvcG9wcGxlcl8wLjg0LjAuYmIKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvcG9wcGxlci9wb3BwbGVyXzAuODIuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvcG9wcGxlci9wb3BwbGVyXzAuODQuMC5iYgppbmRleCAzN2Y4NTkzLi41MTUzODY4IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9wb3BwbGVyL3BvcHBsZXJfMC44Mi4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3BvcHBsZXIvcG9wcGxlcl8wLjg0LjAuYmIKQEAgLTEsNCArMSw1IEBACiBTVU1NQVJZID0gIlBvcHBsZXIgaXMgYSBQREYgcmVuZGVyaW5nIGxpYnJhcnkgYmFzZWQgb24gdGhlIHhwZGYtMy4wIGNvZGUgYmFzZSIKK0hPTUVQQUdFID0gImh0dHBzOi8vcG9wcGxlci5mcmVlZGVza3RvcC5vcmcvIgogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgogCkBAIC02LDggKzcsOCBAQAogICAgICAgICAgICBmaWxlOi8vMDAwMS1Eby1ub3Qtb3ZlcndyaXRlLWFsbC1vdXItYnVpbGQtZmxhZ3MucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vYmFzZW5hbWUtaW5jbHVkZS5wYXRjaCBcCiAgICAgICAgICAgICIKLVNSQ19VUklbbWQ1c3VtXSA9ICI0ZDYxMDZjMjM4MmM1ZTY2MDcyZTBiMzU1YWNjMzY0MCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyMzRmOGU1NzNlYTU3ZmI2YTAwOGU3YzFlNTZiZmFlMWFmNWQxYWRmMGU2NWY0NzU1NWUxYWUxMDM4NzRlNGRmIgorU1JDX1VSSVttZDVzdW1dID0gImUxNGE4YWNhODgwOTkwOGFkNDM2NGMzMmMxN2JjYjkyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM3YTEzMGRhNzQzYjM4YTU0OGY3YTIxZmU1OTQwNTA2ZmIxOTQ5ZjRlYmRkMzIwOWYwZTViMzAyZmExMzk3MzEiCiAKIERFUEVORFMgPSAiZm9udGNvbmZpZyB6bGliIGNhaXJvIGxjbXMgZ2xpYi0yLjAiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3NhbXN1bmctc29jLXV0aWxzL3NqZjI0MTAtbGludXgtbmF0aXZlX3N2bi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3NhbXN1bmctc29jLXV0aWxzL3NqZjI0MTAtbGludXgtbmF0aXZlX3N2bi5iYgppbmRleCA5ZTYwOWM0Li4zYTUxNzJlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9zYW1zdW5nLXNvYy11dGlscy9zamYyNDEwLWxpbnV4LW5hdGl2ZV9zdm4uYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvc2Ftc3VuZy1zb2MtdXRpbHMvc2pmMjQxMC1saW51eC1uYXRpdmVfc3ZuLmJiCkBAIC0xMyw3ICsxMyw2IEBACiBTID0gIiR7V09SS0RJUn0vc2pmMjQxMC1saW51eCIKIAogaW5oZXJpdCBuYXRpdmUgZGVwbG95Ci1kb19kZXBsb3lbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9UT09MU30iCiAKIENGTEFHUyArPSAiLURMSU5VWF9QUERFViIKIApAQCAtMzEsMyArMzAsMTEgQEAKIH0KIAogYWRkdGFzayBkZXBsb3kgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2luc3RhbGwKKworZG9fZGVwbG95W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfVE9PTFN9IgorIyBjbGVhbmRpcnMgc2hvdWxkIHBvc3NpYmx5IGJlIGluIGRlcGxveS5iYmNsYXNzIGJ1dCB3ZSBuZWVkIGl0Citkb19kZXBsb3lbY2xlYW5kaXJzXSA9ICIke0RFUExPWURJUn0iCisjIGNsZWFyIHN0YW1wLWV4dHJhLWluZm8gc2luY2UgTUFDSElORV9BUkNIIGlzIG5vcm1hbGx5IHB1dCB0aGVyZSBieQorIyBkZXBsb3kuYmJjbGFzcworZG9fZGVwbG95W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvc2hhcnV0aWxzL3NoYXJ1dGlscy8wMDAxLUZpeC1idWlsZC13aXRoLXJlY2VudC1nZXR0ZXh0LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvc2hhcnV0aWxzL3NoYXJ1dGlscy8wMDAxLUZpeC1idWlsZC13aXRoLXJlY2VudC1nZXR0ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MjRmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9zaGFydXRpbHMvc2hhcnV0aWxzLzAwMDEtRml4LWJ1aWxkLXdpdGgtcmVjZW50LWdldHRleHQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorRnJvbSA3YTJmZTkxNWRkZWQyNzYzMGEzNDU3NjI2MjhjZGQ1NDJlYTVkNThhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIERlYyAyMDE5IDEzOjU2OjE2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIHJlY2VudCBnZXR0ZXh0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDAzZDExMzEuLjY1NjA5ZTcgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xNyw1ICsxNyw1IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLgorIAorIEVYVFJBX0RJU1QgICAgICA9IGNvbmZpZy5ycGF0aCBtNCAkKERJU1RfQUxQSEEpCistU1VCRElSUyAgICAgICAgID0gaW50bCBsaWIgbGlib3B0cyBzcmMgZG9jIHBvIHRlc3RzCisrU1VCRElSUyAgICAgICAgID0gbGliIGxpYm9wdHMgc3JjIGRvYyBwbyB0ZXN0cworIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9zaGFydXRpbHMvc2hhcnV0aWxzXzQuMTUuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3NoYXJ1dGlscy9zaGFydXRpbHNfNC4xNS4yLmJiCmluZGV4IDhmMzlmZGUuLjkzMDkyMmUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3NoYXJ1dGlscy9zaGFydXRpbHNfNC4xNS4yLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3NoYXJ1dGlscy9zaGFydXRpbHNfNC4xNS4yLmJiCkBAIC05LDcgKzksOCBAQAogU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuZ3ogXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtd2l0aC1jbGFuZy5wYXRjaCBcCiAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxOC0xMDAwMDk3LnBhdGNoIFwKLSIKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdpdGgtcmVjZW50LWdldHRleHQucGF0Y2ggXAorICAgICAgICAgICAiCiBTUkNfVVJJW21kNXN1bV0gPSAiMzJhNTFiMjNlMjVhZDVlNmFmNGI4OWYyMjhiZTE4MDAiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWUzMzZlNjg1NDk2NjRlN2ExOWIxMTdhZGYwMmVkZmRlYWM2MzA3ZjIyZTViYTc4YmFjYTQ1NzExNjkxNDYzNyIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvc3BpdG9vbHMvc3BpdG9vbHNfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvc3BpdG9vbHMvc3BpdG9vbHNfZ2l0LmJiCmluZGV4IGFmMWNkNjAuLjYyNTc1NjggMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3NwaXRvb2xzL3NwaXRvb2xzX2dpdC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC9zcGl0b29scy9zcGl0b29sc19naXQuYmIKQEAgLTQsOSArNCw5IEBACiBMSUNFTlNFPSJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThjMTY2NjZhZTZjMTU5ODc2YTBiYTYzMDk5NjE0MzgxIgogCi1CUFYgPSAiMC44LjMiCitCUFYgPSAiMC44LjQiCiBQViA9ICIke0JQVn0iCi1TUkNSRVYgPSAiYTNmMWY2OGEwNDhkMGQyMzIxZWU1NjJiMzc0NGRkMTE2MmNhZDIyZiIKK1NSQ1JFViA9ICI0YTM2YTg0ZjdkZjI5MWRkYWViZDM5N2FlY2YwYzg1MTUyNTZhOGUwIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91ZGlza3MvdWRpc2tzMi9ub24tZ251LWxpYmMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91ZGlza3MvdWRpc2tzMi9ub24tZ251LWxpYmMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZTZjNzUuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvdWRpc2tzL3VkaXNrczIvbm9uLWdudS1saWJjLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotbXVzbCBkb2VzIG5vdCBkZWZpbmUgX19HTlVDX1BSRVJFUSB0aGVyZWZvcmUgY2hlY2sgZm9yIEMgbGlicmFyeSBiZWluZyBnbGliYwotaWYgbm90IHRoZW4gZGVmaW5lIHRoZSBtYWNybwotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci1JbmRleDogdWRpc2tzLTIuMS43L3VkaXNrcy91ZGlza3NjbGllbnQuYwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHVkaXNrcy0yLjEuNy5vcmlnL3VkaXNrcy91ZGlza3NjbGllbnQuYwotKysrIHVkaXNrcy0yLjEuNy91ZGlza3MvdWRpc2tzY2xpZW50LmMKLUBAIC0yNyw4ICsyNywxNSBAQAotICNpbmNsdWRlICJ1ZGlza3NvYmplY3RpbmZvLmgiCi0gCi0gLyogRm9yIF9fR05VQ19QUkVSRVEgdXNhZ2UgYmVsb3cgKi8KLS0jaWZkZWYgX19HTlVDX18KLSsjaWZkZWYgX19HTElCQ19fCi0gIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgotKyNlbHNlCi0rI2lmIGRlZmluZWQoX19HTlVDX18pCi0rI2RlZmluZQlfX0dOVUNfUFJFUkVRKF9fbWFqLCBfX21pbikJXAotKwkoX19HTlVDX18gPiAoX19tYWopIHx8IF9fR05VQ19fID09IChfX21haikgJiYgX19HTlVDX01JTk9SX18gPj0gKF9fbWluKSkKLSsjZWxzZQotKyNkZWZpbmUJX19HTlVDX1BSRVJFUShfX21haiwgX19taW4pIDAKLSsjZW5kaWYKLSAjZW5kaWYKLSAKLSAvKioKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3VkaXNrcy91ZGlza3MyX2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3VkaXNrcy91ZGlza3MyX2dpdC5iYgppbmRleCBmMGFhZDk1Li5lY2FmMDFlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91ZGlza3MvdWRpc2tzMl9naXQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvdWRpc2tzL3VkaXNrczJfZ2l0LmJiCkBAIC0xOCwxMCArMTgsOSBAQAogCiBTUkNfVVJJID0gIiBcCiAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9zdG9yYWdlZC1wcm9qZWN0L3VkaXNrcy5naXQ7YnJhbmNoPW1hc3RlciBcCi0gICAgZmlsZTovL25vbi1nbnUtbGliYy5wYXRjaCBcCiAiCi1QViA9ICIyLjguMiIKLVNSQ1JFViA9ICI3YTc4N2FhM2IzNDBmYzdmMWNhNzJkNzQ4NjM1ZDZjNTQ0NWVkYzU4IgorUFYgPSAiMi44LjQrZ2l0JHtTUkNSRVZ9IgorU1JDUkVWID0gImRiNWY0ODczNDVkYTJlYWE4Nzk3NjQ1MGVhNTFjMmM0NjVkOWI4MmUiCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiBDVkVfUFJPRFVDVCA9ICJ1ZGlza3MiCkBAIC01MCw2ICs0OSw3IEBACiAKIFBBQ0tBR0VTID0rICIke1BOfS1saWJzIgogRklMRVNfJHtQTn0tbGlicyA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59ICs9ICIke25vbmFyY2hfbGliZGlyfS90bXBmaWxlcy5kIgogCiBTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiJHtCUE59LnNlcnZpY2UiCiBTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvdXRvdWNoLWV2ZW11LzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3V0b3VjaC91dG91Y2gtZXZlbXUvMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYmY1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvdXRvdWNoLWV2ZW11LzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaApAQCAtMCwwICsxLDc2IEBACitGcm9tIDYwOTg3YTFkZjhlYjhjOTE5NjIyMjM3NTU3NGRjZDdiYzBhZDJkYWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAzMCBOb3YgMjAxOSAyMDoyMzoyNyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgb24gMzJiaXQgYXJjaGVzIHdpdGggNjRiaXQgdGltZV90CisKK3RpbWUgZWxlbWVudCBpcyBkZXByZWNhdGVkIG9uIG5ldyBpbnB1dF9ldmVudCBzdHJ1Y3R1cmUgaW4ga2VybmVsJ3MKK2lucHV0LmggWzFdCisKK1sxXSBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvY29tbWl0P2lkPTE1MjE5NGZlOWMzZgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvZXZlbXUtaW1wbC5oIHwgIDUgKysrKysKKyBzcmMvZXZlbXUuYyAgICAgIHwgMTYgKysrKysrKysrLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ldmVtdS1pbXBsLmggYi9zcmMvZXZlbXUtaW1wbC5oCitpbmRleCBhY2YyOTc2Li5jMDhkODYxIDEwMDY0NAorLS0tIGEvc3JjL2V2ZW11LWltcGwuaAorKysrIGIvc3JjL2V2ZW11LWltcGwuaAorQEAgLTIxLDYgKzIxLDExIEBACisgI2luY2x1ZGUgPGV2ZW11Lmg+CisgI2luY2x1ZGUgPGxpbnV4L3VpbnB1dC5oPgorIAorKyNpZm5kZWYgaW5wdXRfZXZlbnRfc2VjCisrI2RlZmluZSBpbnB1dF9ldmVudF9zZWMgdGltZS50dl9zZWMKKysjZGVmaW5lIGlucHV0X2V2ZW50X3VzZWMgdGltZS50dl91c2VjCisrI2VuZGlmCisrCisgI2RlZmluZSBFVlBMQVlfTkJJVFMJS0VZX0NOVAorICNkZWZpbmUgRVZQTEFZX05CWVRFUwkoKEVWUExBWV9OQklUUyArIDcpIC8gOCkKKyAKK2RpZmYgLS1naXQgYS9zcmMvZXZlbXUuYyBiL3NyYy9ldmVtdS5jCitpbmRleCAyMTE4N2FmLi4xNjBjOTE1IDEwMDY0NAorLS0tIGEvc3JjL2V2ZW11LmMKKysrKyBiL3NyYy9ldmVtdS5jCitAQCAtMzYzLDcgKzM2Myw3IEBAIGludCBldmVtdV9yZWFkKHN0cnVjdCBldmVtdV9kZXZpY2UgKmRldiwgRklMRSAqZnApCisgaW50IGV2ZW11X3dyaXRlX2V2ZW50KEZJTEUgKmZwLCBjb25zdCBzdHJ1Y3QgaW5wdXRfZXZlbnQgKmV2KQorIHsKKyAJcmV0dXJuIGZwcmludGYoZnAsICJFOiAlbHUuJTA2dSAlMDR4ICUwNHggJWRcbiIsCistCQkgICAgICAgZXYtPnRpbWUudHZfc2VjLCAodW5zaWduZWQpZXYtPnRpbWUudHZfdXNlYywKKysJCSAgICAgICBldi0+aW5wdXRfZXZlbnRfc2VjLCAodW5zaWduZWQpZXYtPmlucHV0X2V2ZW50X3VzZWMsCisgCQkgICAgICAgZXYtPnR5cGUsIGV2LT5jb2RlLCBldi0+dmFsdWUpOworIH0KKyAKK0BAIC0zOTEsOCArMzkxLDggQEAgaW50IGV2ZW11X3JlYWRfZXZlbnQoRklMRSAqZnAsIHN0cnVjdCBpbnB1dF9ldmVudCAqZXYpCisgCWludCB2YWx1ZTsKKyAJaW50IHJldCA9IGZzY2FuZihmcCwgIkU6ICVsdS4lMDZ1ICUwNHggJTA0eCAlZFxuIiwKKyAJCQkgJnNlYywgJnVzZWMsICZ0eXBlLCAmY29kZSwgJnZhbHVlKTsKKy0JZXYtPnRpbWUudHZfc2VjID0gc2VjOworLQlldi0+dGltZS50dl91c2VjID0gdXNlYzsKKysJZXYtPmlucHV0X2V2ZW50X3NlYyA9IHNlYzsKKysJZXYtPmlucHV0X2V2ZW50X3VzZWMgPSB1c2VjOworIAlldi0+dHlwZSA9IHR5cGU7CisgCWV2LT5jb2RlID0gY29kZTsKKyAJZXYtPnZhbHVlID0gdmFsdWU7CitAQCAtNDExLDEyICs0MTEsMTQgQEAgaW50IGV2ZW11X3JlYWRfZXZlbnRfcmVhbHRpbWUoRklMRSAqZnAsIHN0cnVjdCBpbnB1dF9ldmVudCAqZXYsCisgCisgCWlmIChldnRpbWUpIHsKKyAJCWlmICghZXZ0aW1lLT50dl9zZWMpCistCQkJKmV2dGltZSA9IGV2LT50aW1lOworLQkJdXNlYyA9IDEwMDAwMDBMICogKGV2LT50aW1lLnR2X3NlYyAtIGV2dGltZS0+dHZfc2VjKTsKKy0JCXVzZWMgKz0gZXYtPnRpbWUudHZfdXNlYyAtIGV2dGltZS0+dHZfdXNlYzsKKysJCQlldnRpbWUtPnR2X3NlYyA9IGV2LT5pbnB1dF9ldmVudF9zZWM7CisrCQkJZXZ0aW1lLT50dl91c2VjID0gZXYtPmlucHV0X2V2ZW50X3VzZWM7CisrCQl1c2VjID0gMTAwMDAwMEwgKiAoZXYtPmlucHV0X2V2ZW50X3NlYyAtIGV2dGltZS0+dHZfc2VjKTsKKysJCXVzZWMgKz0gZXYtPmlucHV0X2V2ZW50X3VzZWMgLSBldnRpbWUtPnR2X3VzZWM7CisgCQlpZiAodXNlYyA+IDUwMCkgeworIAkJCXVzbGVlcCh1c2VjKTsKKy0JCQkqZXZ0aW1lID0gZXYtPnRpbWU7CisrCQkJZXZ0aW1lLT50dl9zZWMgPSBldi0+aW5wdXRfZXZlbnRfc2VjOworKwkJCWV2dGltZS0+dHZfdXNlYyA9IGV2LT5pbnB1dF9ldmVudF91c2VjOworIAkJfQorIAl9CisgCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvdXRvdWNoLWV2ZW11X2dpdC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3V0b3VjaC91dG91Y2gtZXZlbXVfZ2l0LmJiCmluZGV4IDFkZDVhODYuLjQxZDFjYmYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3V0b3VjaC91dG91Y2gtZXZlbXVfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3V0b3VjaC91dG91Y2gtZXZlbXVfZ2l0LmJiCkBAIC03LDcgKzcsOSBAQAogCiBpbmhlcml0IGF1dG90b29scwogCi1TUkNfVVJJID0gImdpdDovL2JpdG1hdGgub3JnL2dpdC9ldmVtdS5naXQ7cHJvdG9jb2w9aHR0cCIKK1NSQ19VUkkgPSAiZ2l0Oi8vYml0bWF0aC5vcmcvZ2l0L2V2ZW11LmdpdDtwcm90b2NvbD1odHRwIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaCBcCisgICAgICAgICAgICIKIFNSQ1JFViA9ICI5NzUyYjUwZTkyMjU3MmU0Y2QyMTRhYzQ1ZWQ5NWU0ZWU0MTBmZTI0IgogCiBQViA9ICIxLjAuNStnaXQke1NSQ1BWfSIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3V0b3VjaC91dG91Y2gtZnJhbWUvMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvdXRvdWNoL3V0b3VjaC1mcmFtZS8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwNWQ0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3V0b3VjaC91dG91Y2gtZnJhbWUvMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gODk1YjY5OTZlMjMyNzAwZmIyYTQyODgzOGZlYWVmNDE4Y2M2NGI3MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMwIE5vdiAyMDE5IDIyOjUyOjEzIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCBvbiAzMmJpdCBhcmNoZXMgd2l0aCA2NGJpdCB0aW1lX3QKKwordGltZSBlbGVtZW50IGlzIGRlcHJlY2F0ZWQgb24gbmV3IGlucHV0X2V2ZW50IHN0cnVjdHVyZSBpbiBrZXJuZWwncworaW5wdXQuaCBbMV0KKworWzFdIGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC9jb21taXQ/aWQ9MTUyMTk0ZmU5YzNmCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9mcmFtZS1tdGRldi5jIHwgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZyYW1lLW10ZGV2LmMgYi9zcmMvZnJhbWUtbXRkZXYuYworaW5kZXggYzBmMTVkOC4uNDJhZDM4MCAxMDA2NDQKKy0tLSBhL3NyYy9mcmFtZS1tdGRldi5jCisrKysgYi9zcmMvZnJhbWUtbXRkZXYuYworQEAgLTI1LDYgKzI1LDExIEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPG1hdGguaD4KKyAKKysjaWZuZGVmIGlucHV0X2V2ZW50X3NlYworKyNkZWZpbmUgaW5wdXRfZXZlbnRfc2VjIHRpbWUudHZfc2VjCisrI2RlZmluZSBpbnB1dF9ldmVudF91c2VjIHRpbWUudHZfdXNlYworKyNlbmRpZgorKworIHN0YXRpYyBpbnQgaXNfcG9pbnRlcihjb25zdCBzdHJ1Y3QgZXZlbXVfZGV2aWNlICpkZXYpCisgeworIAlyZXR1cm4gZXZlbXVfaGFzX2V2ZW50KGRldiwgRVZfUkVMLCBSRUxfWCkgfHwKK0BAIC0yMDAsNyArMjA1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfYWJzX2V2ZW50KHV0b3VjaF9mcmFtZV9oYW5kbGUgZmgsCisgc3RhdGljIHV0b3VjaF9mcmFtZV90aW1lX3QgZ2V0X2V2dGltZV9tcyhjb25zdCBzdHJ1Y3QgaW5wdXRfZXZlbnQgKnN5bikKKyB7CisgCXN0YXRpYyBjb25zdCB1dG91Y2hfZnJhbWVfdGltZV90IG1zID0gMTAwMDsKKy0JcmV0dXJuIHN5bi0+dGltZS50dl91c2VjIC8gbXMgKyBzeW4tPnRpbWUudHZfc2VjICogbXM7CisrCXJldHVybiBzeW4tPmlucHV0X2V2ZW50X3VzZWMgLyBtcyArIHN5bi0+aW5wdXRfZXZlbnRfc2VjICogbXM7CisgfQorIAorIGNvbnN0IHN0cnVjdCB1dG91Y2hfZnJhbWUgKgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvdXRvdWNoL2ZpbGVzLzAwMDEtaW5jbHVkZS1zeXMtc3RhdC5oLWZvci1maXhpbmctYnVpbGQtaXNzdWUtb24tbXVzbC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3V0b3VjaC91dG91Y2gtZnJhbWUvMDAwMS1pbmNsdWRlLXN5cy1zdGF0LmgtZm9yLWZpeGluZy1idWlsZC1pc3N1ZS1vbi1tdXNsLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvZmlsZXMvMDAwMS1pbmNsdWRlLXN5cy1zdGF0LmgtZm9yLWZpeGluZy1idWlsZC1pc3N1ZS1vbi1tdXNsLnBhdGNoCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvdXRvdWNoLWZyYW1lLzAwMDEtaW5jbHVkZS1zeXMtc3RhdC5oLWZvci1maXhpbmctYnVpbGQtaXNzdWUtb24tbXVzbC5wYXRjaApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvdXRvdWNoL2ZpbGVzL3JlbW92ZS1tYW4tcGFnZS1jcmVhdGlvbi5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3V0b3VjaC91dG91Y2gtZnJhbWUvcmVtb3ZlLW1hbi1wYWdlLWNyZWF0aW9uLnBhdGNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvZmlsZXMvcmVtb3ZlLW1hbi1wYWdlLWNyZWF0aW9uLnBhdGNoCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvdXRvdWNoLWZyYW1lL3JlbW92ZS1tYW4tcGFnZS1jcmVhdGlvbi5wYXRjaApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvdXRvdWNoL3V0b3VjaC1mcmFtZV9naXQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvdXRvdWNoLWZyYW1lX2dpdC5iYgppbmRleCAzOWQ0NmFmLi4xZWJlYmZhIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvdXRvdWNoLWZyYW1lX2dpdC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC91dG91Y2gvdXRvdWNoLWZyYW1lX2dpdC5iYgpAQCAtMTIsNiArMTIsNyBAQAogU1JDX1VSSSA9ICJnaXQ6Ly9iaXRtYXRoLm9yZy9naXQvZnJhbWUuZ2l0O3Byb3RvY29sPWh0dHAgXAogICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLW1hbi1wYWdlLWNyZWF0aW9uLnBhdGNoIFwKICAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtc3RhdC5oLWZvci1maXhpbmctYnVpbGQtaXNzdWUtb24tbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2ggXAogICAgICAgICAgICAiCiBTUkNSRVYgPSAiOTUzNjNkNWExZjczOTRkNzExNDRiZjNiNDA4ZWY0ZTZkYjQzNTBmYyIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvdmJveGd1ZXN0ZHJpdmVycy92Ym94Z3Vlc3Rkcml2ZXJzL2V4cG9ydC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3Zib3hndWVzdGRyaXZlcnMvdmJveGd1ZXN0ZHJpdmVycy9leHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiYTMzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3Zib3hndWVzdGRyaXZlcnMvdmJveGd1ZXN0ZHJpdmVycy9leHBvcnQucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorSW5kZXg6IHNyYy9WQm94L0FkZGl0aW9ucy9saW51eC9leHBvcnRfbW9kdWxlcy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3JjL1ZCb3gvQWRkaXRpb25zL2xpbnV4L2V4cG9ydF9tb2R1bGVzLnNoCisrKysgYi9zcmMvVkJveC9BZGRpdGlvbnMvbGludXgvZXhwb3J0X21vZHVsZXMuc2gKK0BAIC00Niw3ICs0NiwxMyBAQAorIFZCT1hfVkVSU0lPTl9NQUpPUj1gc2VkIC1lICJzL14gKlZCT1hfVkVSU0lPTl9NQUpPUiAqPSBcK1woWzAtOV1cK1wpL1wxLzt0O2QiICRQQVRIX1JPT1QvVmVyc2lvbi5rbWtgCisgVkJPWF9WRVJTSU9OX01JTk9SPWBzZWQgLWUgInMvXiAqVkJPWF9WRVJTSU9OX01JTk9SICo9IFwrXChbMC05XVwrXCkvXDEvO3Q7ZCIgJFBBVEhfUk9PVC9WZXJzaW9uLmtta2AKKyBWQk9YX1ZFUlNJT05fQlVJTEQ9YHNlZCAtZSAicy9eICpWQk9YX1ZFUlNJT05fQlVJTEQgKj0gXCtcKFswLTldXCtcKS9cMS87dDtkIiAkUEFUSF9ST09UL1ZlcnNpb24ua21rYAorLVZCT1hfU1ZOX1JFVj1gc2VkIC1lICdzL14gKlZCT1hfU1ZOX1JFVl9GQUxMQkFDSyAqOj0gXCtcJChwYXRzdWJzdCAqJTosLCAqXCRSZXY6ICpcKFswLTldXCtcKSAqXCQgKikgKi9cMS87dDtkJyAkUEFUSF9ST09UL0NvbmZpZy5rbWtgCisrVkJPWF9TVk5fQ09ORklHX1JFVj1gc2VkIC1lICdzL14gKlZCT1hfU1ZOX1JFVl9DT05GSUdfRkFMTEJBQ0sgKjo9IFwrXCQocGF0c3Vic3QgKiU6LCwgKlwkUmV2OiAqXChbMC05XVwrXCkgKlwkICopICovXDEvO3Q7ZCcgJFBBVEhfUk9PVC9Db25maWcua21rYAorK1ZCT1hfU1ZOX1ZFUlNJT05fUkVWPWBzZWQgLWUgJ3MvXiAqVkJPWF9TVk5fUkVWX1ZFUlNJT05fRkFMTEJBQ0sgKjo9IFwrXCQocGF0c3Vic3QgKiU6LCwgKlwkUmV2OiAqXChbMC05XVwrXCkgKlwkICopICovXDEvO3Q7ZCcgJFBBVEhfUk9PVC9WZXJzaW9uLmtta2AKKytpZiBbICIkVkJPWF9TVk5fQ09ORklHX1JFViIgLWd0ICIkVkJPWF9TVk5fVkVSU0lPTl9SRVYiIF07IHRoZW4KKysgICAgVkJPWF9TVk5fUkVWPSRWQk9YX1NWTl9DT05GSUdfUkVWCisrZWxzZQorKyAgICBWQk9YX1NWTl9SRVY9JFZCT1hfU1ZOX1ZFUlNJT05fUkVWCisrZmkKKyBWQk9YX1ZFTkRPUj1gc2VkIC1lICdzL14gKlZCT1hfVkVORE9SICo9IFwrXCguXCtcKS9cMS87dDtkJyAkUEFUSF9ST09UL0NvbmZpZy5rbWtgCisgVkJPWF9WRU5ET1JfU0hPUlQ9YHNlZCAtZSAncy9eICpWQk9YX1ZFTkRPUl9TSE9SVCAqPSBcK1woLlwrXCkvXDEvO3Q7ZCcgJFBBVEhfUk9PVC9Db25maWcua21rYAorIFZCT1hfUFJPRFVDVD1gc2VkIC1lICdzL14gKlZCT1hfUFJPRFVDVCAqPSBcK1woLlwrXCkvXDEvO3Q7ZCcgJFBBVEhfUk9PVC9Db25maWcua21rYAorSW5kZXg6IHNyYy9WQm94L0hvc3REcml2ZXJzL2xpbnV4L2V4cG9ydF9tb2R1bGVzLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9zcmMvVkJveC9Ib3N0RHJpdmVycy9saW51eC9leHBvcnRfbW9kdWxlcy5zaAorKysrIGIvc3JjL1ZCb3gvSG9zdERyaXZlcnMvbGludXgvZXhwb3J0X21vZHVsZXMuc2gKK0BAIC0xMDAsMTIgKzEwMCwyNiBAQAorIFZCT1hfVkVSU0lPTl9NSU5PUj1gc2VkIC1lICJzL14gKlZCT1hfVkVSU0lPTl9NSU5PUiAqPSBcK1woWzAtOV1cK1wpL1wxLzt0O2QiICRQQVRIX1JPT1QvVmVyc2lvbi5rbWtgCisgVkJPWF9WRVJTSU9OX0JVSUxEPWBzZWQgLWUgInMvXiAqVkJPWF9WRVJTSU9OX0JVSUxEICo9IFwrXChbMC05XVwrXCkvXDEvO3Q7ZCIgJFBBVEhfUk9PVC9WZXJzaW9uLmtta2AKKyBWQk9YX1ZFUlNJT05fU1RSSU5HPSRWQk9YX1ZFUlNJT05fTUFKT1IuJFZCT1hfVkVSU0lPTl9NSU5PUi4kVkJPWF9WRVJTSU9OX0JVSUxECistVkJPWF9TVk5fUkVWPWBzZWQgLWUgJ3MvXiAqVkJPWF9TVk5fUkVWX0ZBTExCQUNLICo6PSBcK1wkKHBhdHN1YnN0IColOiwsICpcJFJldjogKlwoWzAtOV1cK1wpICpcJCAqKSAqL1wxLzt0O2QnICRQQVRIX1JPT1QvQ29uZmlnLmtta2AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZCT1hfVkVORE9SPWBzZWQgLWUgJ3MvXiAqVkJPWF9WRU5ET1IgKj0gXCtcKC5cK1wpL1wxLzt0O2QnICRQQVRIX1JPT1QvQ29uZmlnLmtta2AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkJPWF9WRU5ET1JfU0hPUlQ9YHNlZCAtZSAncy9eICpWQk9YX1ZFTkRPUl9TSE9SVCAqPSBcK1woLlwrXCkvXDEvO3Q7ZCcgJFBBVEhfUk9PVC9Db25maWcua21rYCAgICAgICAgICAgICAgICAgICAgICAgICBWQk9YX1BST0RVQ1Q9YHNlZCAtZSAncy9eICpWQk9YX1BST0RVQ1QgKj0gXCtcKC5cK1wpL1wxLzt0O2QnICRQQVRIX1JPT1QvQ29uZmlnLmtta2AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZCT1hfQ19ZRUFSPWBkYXRlICslWWAKKytWQk9YX1ZFUlNJT05fQlVJTEQ9YHNlZCAtZSAicy9eICpWQk9YX1ZFUlNJT05fQlVJTEQgKj0gXCtcKFswLTldXCtcKS9cMS87dDtkIiAkUEFUSF9ST09UL1ZlcnNpb24ua21rYAorK1ZCT1hfU1ZOX0NPTkZJR19SRVY9YHNlZCAtZSAncy9eICpWQk9YX1NWTl9SRVZfQ09ORklHX0ZBTExCQUNLICo6PSBcK1wkKHBhdHN1YnN0IColOiwsICpcJFJldjogKlwoWzAtOV1cK1wpICpcJCAqKSAqL1wxLzt0O2QnICRQQVRIX1JPT1QvQ29uZmlnLmtta2AKKytWQk9YX1NWTl9WRVJTSU9OX1JFVj1gc2VkIC1lICdzL14gKlZCT1hfU1ZOX1JFVl9WRVJTSU9OX0ZBTExCQUNLICo6PSBcK1wkKHBhdHN1YnN0IColOiwsICpcJFJldjogKlwoWzAtOV1cK1wpICpcJCAqKSAqL1wxLzt0O2QnICRQQVRIX1JPT1QvVmVyc2lvbi5rbWtgCisraWYgWyAiJFZCT1hfU1ZOX0NPTkZJR19SRVYiIC1ndCAiJFZCT1hfU1ZOX1ZFUlNJT05fUkVWIiBdOyB0aGVuCisrICAgIFZCT1hfU1ZOX1JFVj0kVkJPWF9TVk5fQ09ORklHX1JFVgorK2Vsc2UKKysgICAgVkJPWF9TVk5fUkVWPSRWQk9YX1NWTl9WRVJTSU9OX1JFVgorK2ZpCisrVkJPWF9WRU5ET1I9YHNlZCAtZSAncy9eICpWQk9YX1ZFTkRPUiAqPSBcK1woLlwrXCkvXDEvO3Q7ZCcgJFBBVEhfUk9PVC9Db25maWcua21rYAorK1ZCT1hfVkVORE9SX1NIT1JUPWBzZWQgLWUgJ3MvXiAqVkJPWF9WRU5ET1JfU0hPUlQgKj0gXCtcKC5cK1wpL1wxLzt0O2QnICRQQVRIX1JPT1QvQ29uZmlnLmtta2AKKytWQk9YX1BST0RVQ1Q9YHNlZCAtZSAncy9eICpWQk9YX1BST0RVQ1QgKj0gXCtcKC5cK1wpL1wxLzt0O2QnICRQQVRIX1JPT1QvQ29uZmlnLmtta2AKKytWQk9YX0NfWUVBUj1gZGF0ZSArJVlgCisrVkJPWF9XSVRIX1BDSV9QQVNTVEhST1VHSD1gc2VkIC1lICJzL14gKlZCT1hfV0lUSF9QQ0lfUEFTU1RIUk9VR0ggKj0gKlwoMVw/XCkvXDEvO3Q7ZCIgJFBBVEhfUk9PVC9Db25maWcua21rYAorIAorIC4gJFBBVEhfVkJPWERSVi9saW51eC9maWxlc192Ym94ZHJ2CisgLiAkUEFUSF9WQk9YTkVUL2xpbnV4L2ZpbGVzX3Zib3huZXRmbHQKKyAuICRQQVRIX1ZCT1hBRFAvbGludXgvZmlsZXNfdmJveG5ldGFkcAorLS4gJFBBVEhfVkJPWFBDSS9saW51eC9maWxlc192Ym94cGNpCisraWYgWyAiJFZCT1hfV0lUSF9QQ0lfUEFTU1RIUk9VR0giIC1lcSAiMSIgXTsgdGhlbgorKyAgICAuICRQQVRIX1ZCT1hQQ0kvbGludXgvZmlsZXNfdmJveHBjaQorK2ZpCisgCisgIyBUZW1wb3JhcnkgcGF0aCBmb3IgY3JlYXRpbmcgdGhlIG1vZHVsZXMsIHdpbGwgYmUgcmVtb3ZlZCBsYXRlcgorIHJtIC1yZiAiJFBBVEhfVE1QIgorQEAgLTE4NywxNCArMjAxLDE2IEBACisgZmkKKyAKKyAjIHZib3hwY2kgKFZpcnR1YWxCb3ggaG9zdCBQQ0kgYWNjZXNzIGtlcm5lbCBtb2R1bGUpCistbWtkaXIgJFBBVEhfVE1QL3Zib3hwY2kgfHwgZXhpdCAxCistZm9yIGYgaW4gJFZCT1hfVkJPWFBDSV9TT1VSQ0VTOyBkbworLSAgICBpbnN0YWxsIC1EIC1tIDA2NDQgYGVjaG8gJGZ8Y3V0IC1kJz0nIC1mMWAgIiRQQVRIX1RNUC92Ym94cGNpL2BlY2hvICRmfGN1dCAtZCc+JyAtZjJgIgorLWRvbmUKKy1pZiBbIC1uICIkVkJPWF9XSVRIX0hBUkRFTklORyIgXTsgdGhlbgorLSAgICBjYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQQVRIX1ZCT1hQQ0kvbGludXgvTWFrZWZpbGUgPiAkUEFUSF9UTVAvdmJveHBjaS9NYWtlZmlsZQorLWVsc2UKKy0gICAgc2VkIC1lICJzO1ZCT1hfV0lUSF9IQVJERU5JTkc7O2ciIDwgJFBBVEhfVkJPWFBDSS9saW51eC9NYWtlZmlsZSA+ICRQQVRIX1RNUC92Ym94cGNpL01ha2VmaWxlCisraWYgWyAiJFZCT1hfV0lUSF9QQ0lfUEFTU1RIUk9VR0giIC1lcSAiMSIgXTsgdGhlbgorKyAgICBta2RpciAkUEFUSF9UTVAvdmJveHBjaSB8fCBleGl0IDEKKysgICAgZm9yIGYgaW4gJFZCT1hfVkJPWFBDSV9TT1VSQ0VTOyBkbworKyAgICAgICAgaW5zdGFsbCAtRCAtbSAwNjQ0IGBlY2hvICRmfGN1dCAtZCc9JyAtZjFgICIkUEFUSF9UTVAvdmJveHBjaS9gZWNobyAkZnxjdXQgLWQnPicgLWYyYCIKKysgICAgZG9uZQorKyAgICBpZiBbIC1uICIkVkJPWF9XSVRIX0hBUkRFTklORyIgXTsgdGhlbgorKyAgICAgICAgY2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUEFUSF9WQk9YUENJL2xpbnV4L01ha2VmaWxlID4gJFBBVEhfVE1QL3Zib3hwY2kvTWFrZWZpbGUKKysgICAgZWxzZQorKyAgICAgICAgc2VkIC1lICJzO1ZCT1hfV0lUSF9IQVJERU5JTkc7O2ciIDwgJFBBVEhfVkJPWFBDSS9saW51eC9NYWtlZmlsZSA+ICRQQVRIX1RNUC92Ym94cGNpL01ha2VmaWxlCisrICAgIGZpCisgZmkKKyAKKyBpbnN0YWxsIC1EIC1tIDA2NDQgJFBBVEhfTElOVVgvTWFrZWZpbGUgJFBBVEhfVE1QL01ha2VmaWxlCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC92Ym94Z3Vlc3Rkcml2ZXJzL3Zib3hndWVzdGRyaXZlcnNfNS4yLjIyLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvdmJveGd1ZXN0ZHJpdmVycy92Ym94Z3Vlc3Rkcml2ZXJzXzYuMS4wLmJiCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3Zib3hndWVzdGRyaXZlcnMvdmJveGd1ZXN0ZHJpdmVyc181LjIuMjIuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3Zib3hndWVzdGRyaXZlcnMvdmJveGd1ZXN0ZHJpdmVyc182LjEuMC5iYgppbmRleCAwZjhkN2FmLi5iZTE4YjEwIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC92Ym94Z3Vlc3Rkcml2ZXJzL3Zib3hndWVzdGRyaXZlcnNfNS4yLjIyLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3Zib3hndWVzdGRyaXZlcnMvdmJveGd1ZXN0ZHJpdmVyc182LjEuMC5iYgpAQCAtMTMsMjEgKzEzLDIyIEBACiAKIFNSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLnZpcnR1YWxib3gub3JnL3ZpcnR1YWxib3gvJHtQVn0vJHtWQk9YX05BTUV9LnRhci5iejIgXAogICAgIGZpbGU6Ly9NYWtlZmlsZS51dGlscyBcCisgICAgZmlsZTovL2V4cG9ydC5wYXRjaDtwYXRjaGRpcj0ke1dPUktESVJ9LyR7VkJPWF9OQU1FfSBcCiAiCi1TUkNfVVJJW21kNXN1bV0gPSAiYzljMmYxNjJhYzVmOTlkMjhkOGMwY2E0M2IxOWVkMDEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTU4MGU4NzUzNDkzNDFhMWFhYmM2ZDVkMmY2OTdkMjQyZjI3NzQ4NzMxNmZhYWYxZmJlNjhkOTAxNGY3ODhkNCIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ODRiNTUwZjQ2OTJjOWQ2MTg5NmIwOGJiMGExYmU3ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0OTAwNWVkOTQ0NTRmODkzZmMzOTU1ZTFlMmI5NjA3ZTg1YzMwMDIzNWNiOTgzYjM5ZDFkZjJjZmNmMjlmMDM5IgogCiBTID0gIiR7V09SS0RJUn0vdmJveF9tb2R1bGUiCiAKIGV4cG9ydCBCVUlMRF9UQVJHRVRfQVJDSD0iJHtBUkNIfSIKIGV4cG9ydCBCVUlMRF9UQVJHRVRfQVJDSF94ODYtNjQ9ImFtZDY0IgogCi1FWFRSQV9PRU1BS0UgKz0gIktFUk5fRElSPScke1dPUktESVJ9LyR7S0VSTkVMX1ZFUlNJT059L2J1aWxkJyIKK0VYVFJBX09FTUFLRSArPSAiS0VSTl9ESVI9JyR7V09SS0RJUn0vJHtLRVJORUxfVkVSU0lPTn0vYnVpbGQnIEtCVUlMRF9WRVJCT1NFPTEiCiAKICMgb3RoZXJ3aXNlIDUuMi4yMiBidWlsZHMganVzdCB2Ym94Z3Vlc3QKIE1BS0VfVEFSR0VUUyA9ICJhbGwiCiAKLWFkZHRhc2sgZXhwb3J0X3NvdXJjZXMgYmVmb3JlIGRvX3BhdGNoIGFmdGVyIGRvX3VucGFjaworYWRkdGFzayBleHBvcnRfc291cmNlcyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCiAKIGRvX2V4cG9ydF9zb3VyY2VzKCkgewogICAgIG1rZGlyIC1wICIke1N9IgpAQCAtNTAsNyArNTEsOCBAQAogfQogCiAjIGNvbXBpbGUgYW5kIGluc3RhbGwgbW91bnQgdXRpbGl0eQotZG9fY29tcGlsZV9hcHBlbmQoKSB7Citkb19jb21waWxlKCkgeworICAgIG9lX3J1bm1ha2UgYWxsCiAgICAgb2VfcnVubWFrZSAnTEQ9JHtDQ30nICdMREZMQUdTPSR7TERGTEFHU30nIC1DICR7U30vdXRpbHMKICAgICBpZiAhIFsgLWUgdmJveGd1ZXN0LmtvIC1hIC1lIHZib3hzZi5rbyAtYSAtZSB2Ym94dmlkZW8ua28gXSA7IHRoZW4KICAgICAgICAgZWNobyAiRVJST1I6IE9uZSBvZiB2Ym94Ki5rbyBtb2R1bGVzIHdhc24ndCBidWlsdCIKQEAgLTc4LDYgKzgwLDMgQEAKIAogIyBhdXRvbG9hZCBpZiBpbnN0YWxsZWQKIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQgKz0gInZib3hndWVzdCB2Ym94c2YgdmJveHZpZGVvIgotCi1QTkJMQUNLTElTVFt2Ym94Z3Vlc3Rkcml2ZXJzXSA9ICJOZWVkcyBmb3J3YXJkIHBvcnRpbmcgdG8ga2VybmVsIDUuMisiCi0KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3dlYnNvY2tldHBwL3dlYnNvY2tldHBwLTAuOC4xLzAwMDEtQ29ycmVjdC1jbGFuZy1jb21waWxlci1mbGFncy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3dlYnNvY2tldHBwL3dlYnNvY2tldHBwLTAuOC4xLzAwMDEtQ29ycmVjdC1jbGFuZy1jb21waWxlci1mbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjE3ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvd2Vic29ja2V0cHAvd2Vic29ja2V0cHAtMC44LjEvMDAwMS1Db3JyZWN0LWNsYW5nLWNvbXBpbGVyLWZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNWNjYWZmMzUxMjk3YmNhMGUyNTRiYmZkNjZlM2YwM2ZlZjlkOWM3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEwIEphbiAyMDIwIDIxOjU0OjM5IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIENvcnJlY3QgY2xhbmcgY29tcGlsZXIgZmxhZ3MKKworRml4IG1pc3BsYWNlZCBxdW90ZXMsIHRoaXMgd2FzIGxlYWRpbmcgdG8gc3B1cmlvdXMgOyBpbiBjb21waWxlciBjbWRsaW5lCitSZW1vdmUgZGVtYW5kaW5nIGxpYmMrKywgY2xhbmcgY2FuIGxpbmsgd2l0aCBib3RoIGxpYmMrKyBhbmQgbGlic3RkYysrCithbmQgcGxhdGZvcm1zIGhhdmUgdGhlaXIgb3duIGRlZmF1bHRzLCB1c2VyIGNhbiBkZW1hbmQgbm9uIGRlZmF1bHRzIHZpYQorYWRkaW5nIGl0IHRvIGNtYWtlIGZsYWdzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vemFwaG95ZC93ZWJzb2NrZXRwcC9wdWxsLzg1OV0KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBDTWFrZUxpc3RzLnR4dCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKK2luZGV4IDJkMTMxMTcuLmMxNzM1NGEgMTAwNjQ0CistLS0gYS9DTWFrZUxpc3RzLnR4dAorKysrIGIvQ01ha2VMaXN0cy50eHQKK0BAIC0xNDgsNyArMTQ4LDcgQEAgaWYgKEJVSUxEX1RFU1RTIE9SIEJVSUxEX0VYQU1QTEVTKQorICAgICAgICAgZW5kaWYoKQorICAgICAgICAgc2V0IChXRUJTT0NLRVRQUF9QTEFURk9STV9UTFNfTElCUyBzc2wgY3J5cHRvKQorICAgICAgICAgc2V0IChXRUJTT0NLRVRQUF9CT09TVF9MSUJTIHN5c3RlbSB0aHJlYWQpCistICAgICAgICBzZXQgKENNQUtFX0NYWF9GTEFHUyAke0NNQUtFX0NYWF9GTEFHU30gIi1zdGQ9YysrMHggLXN0ZGxpYj1saWJjKysiKSAjIHRvZG86IGlzIGxpYmMrKyByZWFsbHkgbmVlZGVkIGhlcmU/CisrICAgICAgICBzZXQgKENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1zdGQ9YysrMHgiKQorICAgICAgICAgaWYgKE5PVCBBUFBMRSkKKyAgICAgICAgICAgICBhZGRfZGVmaW5pdGlvbnMgKC1ETkRFQlVHIC1XYWxsIC1Xbm8tcGFkZGVkKSAjIHRvZG86IHNob3VsZCB3ZSB1c2UgQ01BS0VfQ19GTEFHUyBmb3IgdGhlc2U/CisgICAgICAgICBlbmRpZiAoKQorLS0gCisyLjI0LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvd2Vic29ja2V0cHAvd2Vic29ja2V0cHAtMC44LjEvMDAwMS1jbWFrZS1Vc2UtR05VSW5zdGFsbERpcnMucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcC0wLjguMS8wMDAxLWNtYWtlLVVzZS1HTlVJbnN0YWxsRGlycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWYyZTEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvd2Vic29ja2V0cHAvd2Vic29ja2V0cHAtMC44LjEvMDAwMS1jbWFrZS1Vc2UtR05VSW5zdGFsbERpcnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA3NzFkNzllZWIwYWM1MDc5NDgyYTRiM2ExMzFiYmRhNzQ0NzkzZTdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgRGVjIDIwMTkgMjA6MDc6MTEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY21ha2U6IFVzZSBHTlVJbnN0YWxsRGlycworCitIZWxwcyBpbnN0YWxsIGNtYWtlZmlsZXMgaW4gcmlnaHQgbGliZGlyCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vemFwaG95ZC93ZWJzb2NrZXRwcC9wdWxsLzg1NF0KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBDTWFrZUxpc3RzLnR4dCB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKK2luZGV4IDI3ODZhYmEuLjA4MGJlM2UgMTAwNjQ0CistLS0gYS9DTWFrZUxpc3RzLnR4dAorKysrIGIvQ01ha2VMaXN0cy50eHQKK0BAIC0zOSwxMSArMzksMTMgQEAgZW5kaWYoKQorIAorIHNldF9wcm9wZXJ0eShHTE9CQUwgUFJPUEVSVFkgVVNFX0ZPTERFUlMgT04pCisgCisraW5jbHVkZShHTlVJbnN0YWxsRGlycykKKysKKyBzZXQoSU5TVEFMTF9JTkNMVURFX0RJUiBpbmNsdWRlIENBQ0hFIFBBVEggIkluc3RhbGxhdGlvbiBkaXJlY3RvcnkgZm9yIGhlYWRlciBmaWxlcyIpCisgaWYgKFdJTjMyIEFORCBOT1QgQ1lHV0lOKQorICAgc2V0IChERUZfSU5TVEFMTF9DTUFLRV9ESVIgY21ha2UpCisgZWxzZSAoKQorLSAgc2V0IChERUZfSU5TVEFMTF9DTUFLRV9ESVIgbGliL2NtYWtlL3dlYnNvY2tldHBwKQorKyAgc2V0IChERUZfSU5TVEFMTF9DTUFLRV9ESVIgJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0vY21ha2Uvd2Vic29ja2V0cHApCisgZW5kaWYgKCkKKyBzZXQgKElOU1RBTExfQ01BS0VfRElSICR7REVGX0lOU1RBTExfQ01BS0VfRElSfSBDQUNIRSBQQVRIICJJbnN0YWxsYXRpb24gZGlyZWN0b3J5IGZvciBDTWFrZSBmaWxlcyIpCisgCistLSAKKzIuMjQuMQorCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcC0wLjguMS83NzEucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcC0wLjguMS83NzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2NWVmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3dlYnNvY2tldHBwL3dlYnNvY2tldHBwLTAuOC4xLzc3MS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitGcm9tIDRiY2NmYjA0YTI2NDcwNGVjOWI4MGJhMzMyZWUxY2YxMTNjZTdmMWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/V29sZmdhbmc9MjBTdD1DMz1CNmdnbD89IDxjNzI1NzhAeWFob28uZGU+CitEYXRlOiBUaHUsIDEgTm92IDIwMTggMjA6NTg6MTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIHZlcnNpb24gbnVtYmVyIGluIENNYWtlTGlzdHMudHh0IHRvIDAuOC4xCisKKy0tLQorIENNYWtlTGlzdHMudHh0IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAoraW5kZXggMjc4NmFiYTkuLjJkMTMxMTdiIDEwMDY0NAorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtMjQsNyArMjQsNyBAQCBlbmRpZiAoKQorICMjIyMjIyMjIyMjIyBQcm9qZWN0IG5hbWUgYW5kIHZlcnNpb24KKyBzZXQgKFdFQlNPQ0tFVFBQX01BSk9SX1ZFUlNJT04gMCkKKyBzZXQgKFdFQlNPQ0tFVFBQX01JTk9SX1ZFUlNJT04gOCkKKy1zZXQgKFdFQlNPQ0tFVFBQX1BBVENIX1ZFUlNJT04gMCkKKytzZXQgKFdFQlNPQ0tFVFBQX1BBVENIX1ZFUlNJT04gMSkKKyBzZXQgKFdFQlNPQ0tFVFBQX1ZFUlNJT04gJHtXRUJTT0NLRVRQUF9NQUpPUl9WRVJTSU9OfS4ke1dFQlNPQ0tFVFBQX01JTk9SX1ZFUlNJT059LiR7V0VCU09DS0VUUFBfUEFUQ0hfVkVSU0lPTn0pCisgCisgaWYoUE9MSUNZIENNUDAwNDgpCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcC0wLjguMS84NDIucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcC0wLjguMS84NDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2NTFlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3dlYnNvY2tldHBwL3dlYnNvY2tldHBwLTAuOC4xLzg0Mi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDdmN2UyYmUwMWI0ZmE2NTgwY2UyN2Y2NjhlNjFhZGYzNzg1M2FkNjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTY2hyaWp2ZXJzIEx1YyA8YmVnYXN1c0BnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IFNlcCAyMDE5IDExOjM1OjQzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCAiaW5jbHVkZSIgZGlyZWN0b3J5IGluc3RhbGxhdGlvbi4gdGhlIHZhcmlhYmxlCisgSU5TVEFMTF9JTkNMVURFX0RJUiBhbHJlYWR5IGV4aXN0cywgYW5kIGRlZmF1bHRzIHRvIGluY2x1ZGUgaWYgbm90Cisgc3BlY2lmaWNpZWQgb3RoZXJ3aXNlLiBVc2luZyBpdCBhbGxvd3MgcGVvcGxlIHRvIGN1c3RvbWl6ZSB0aGUgaW5zdGFsbGF0aW9uCisgZnJvbSBvdXRzaWRlLCBmaXhpbmcgaXNzdWVzIHdpdGggb3RoZXIgT1MgbGlrZSBIYWlrdQorCitTaWduZWQtb2ZmLWJ5OiBHaWFuZnJhbmNvIENvc3RhbWFnbmEgPGNvc3RhbWFnbmFnaWFuZnJhbmNvQHlhaG9vLml0PgorU2lnbmVkLW9mZi1ieTogR2lhbmZyYW5jbyBDb3N0YW1hZ25hIDxsb2N1dHVzb2Zib3JnQGRlYmlhbi5vcmc+CistLS0KKyBjbWFrZS9DTWFrZUhlbHBlcnMuY21ha2UgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jbWFrZS9DTWFrZUhlbHBlcnMuY21ha2UgYi9jbWFrZS9DTWFrZUhlbHBlcnMuY21ha2UKK2luZGV4IDE0NzhmNGIuLmY2MDM2MzIgMTAwNjQ0CistLS0gYS9jbWFrZS9DTWFrZUhlbHBlcnMuY21ha2UKKysrKyBiL2NtYWtlL0NNYWtlSGVscGVycy5jbWFrZQorQEAgLTgwLDcgKzgwLDcgQEAgbWFjcm8gKGZpbmFsX3RhcmdldCkKKyAgICAgZW5kaWYgKCkKKyAKKyAgICAgaW5zdGFsbCAoRElSRUNUT1JZICR7Q01BS0VfU09VUkNFX0RJUn0vJHtUQVJHRVRfTkFNRX0KKy0gICAgICAgICAgICAgREVTVElOQVRJT04gaW5jbHVkZS8KKysgICAgICAgICAgICAgREVTVElOQVRJT04gJHtJTlNUQUxMX0lOQ0xVREVfRElSfS8KKyAgICAgICAgICAgICAgRklMRVNfTUFUQ0hJTkcgUEFUVEVSTiAiKi5ocHAqIikKKyBlbmRtYWNybyAoKQorIAorLS0gCisyLjE3LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvd2Vic29ja2V0cHAvd2Vic29ja2V0cHAtMC44LjEvODU1LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvd2Vic29ja2V0cHAvd2Vic29ja2V0cHAtMC44LjEvODU1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZWU2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcC0wLjguMS84NTUucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorRnJvbSAzNTkwZDc3YmI5NzUzZmJiZjA3NjAyOGUyMzk1MTgyY2VkNjQ2NmJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogR2lhbmZyYW5jbyBDb3N0YW1hZ25hIDxjb3N0YW1hZ25hZ2lhbmZyYW5jb0B5YWhvby5pdD4KK0RhdGU6IFdlZCwgOCBKYW4gMjAyMCAxNzo1OTo0OCArMDEwMAorU3ViamVjdDogW1BBVENIXSBGaXggY21ha2UgZmluZCBib29zdCB3aXRoIHZlcnNpb24gPj0gMS43MQorCitGb3Igc29tZSByZWFzb25zICJzeXN0ZW07dGhyZWFkO3JhbmRvbTt1bml0X3Rlc3RfZnJhbWV3b3JrIiB3YXMgc2VlbiBhcyBhIHNpbmdsZSBtb2R1bGUsIGJlY2F1c2Ugb2YgdGhlIHF1b3Rlcy4KKy0tLQorIENNYWtlTGlzdHMudHh0IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAoraW5kZXggMmQxMzExN2IuLjlhNDZiYzEwIDEwMDY0NAorLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrKyBiL0NNYWtlTGlzdHMudHh0CitAQCAtMjEzLDcgKzIxMyw3IEBAIGlmIChCVUlMRF9URVNUUyBPUiBCVUlMRF9FWEFNUExFUykKKyAgICAgc2V0IChCb29zdF9VU0VfTVVMVElUSFJFQURFRCBUUlVFKQorICAgICBzZXQgKEJvb3N0X0FERElUSU9OQUxfVkVSU0lPTlMgIjEuMzkuMCIgIjEuNDAuMCIgIjEuNDEuMCIgIjEuNDIuMCIgIjEuNDMuMCIgIjEuNDQuMCIgIjEuNDYuMSIpICMgdG9kbzogc29tZW9uZSB3aG8ga25vd3MgYmV0dGVyIHNwZXNpZnkgdGhlc2UhCisgCistICAgIGZpbmRfcGFja2FnZSAoQm9vc3QgMS4zOS4wIENPTVBPTkVOVFMgIiR7V0VCU09DS0VUUFBfQk9PU1RfTElCU30iKQorKyAgICBmaW5kX3BhY2thZ2UgKEJvb3N0IDEuMzkuMCBDT01QT05FTlRTICR7V0VCU09DS0VUUFBfQk9PU1RfTElCU30pCisgCisgICAgIGlmIChCb29zdF9GT1VORCkKKyAgICAgICAgICMgQm9vc3QgaXMgYSBwcm9qZWN0IHdpZGUgZ2xvYmFsIGRlcGVuZGVuY3kuCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcC0wLjguMS84NTcucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcC0wLjguMS84NTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIyMWNkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3dlYnNvY2tldHBwL3dlYnNvY2tldHBwLTAuOC4xLzg1Ny5wYXRjaApAQCAtMCwwICsxLDEzMiBAQAorRnJvbSA5MzFhNTUzNDdhMzIyZjM4ZWI4MmQ1ZjM4N2IyOTI0ZTZjN2ExNzQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogR2lhbmZyYW5jbyBDb3N0YW1hZ25hIDxjb3N0YW1hZ25hZ2lhbmZyYW5jb0B5YWhvby5pdD4KK0RhdGU6IFRodSwgOSBKYW4gMjAyMCAxMDowNzoyMCArMDEwMAorU3ViamVjdDogW1BBVENIXSBVcGRhdGUgU0NvbnN0cnVjdCB3aXRoIG5ldyBQeXRob24zIHN5bnRheDogLSBuZXcgcmFpc2UKKyBrZXl3b3JkIHN5bnRheCAtIGhhc19rZXkgZGVwcmVjYXRlZCBtZXRob2QgaXMgbm93IHJlbW92ZWQgLSBjb21tYW5kcworIGRlcHJlY2F0ZWQgbGlicmFyeSBpcyByZXBsYWNlZCBieSBzdWJwcm9jZXNzIC0gcHJpbnQgZnVuY3Rpb24gZml4ZXMKKworVGhpcyBzaG91bGQgZml4IEZUQkZTIGFnYWluc3QgbmV3IHNjb25zIDMuMS4yCitodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTk0NzU4NAorLS0tCisgU0NvbnN0cnVjdCB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1NDb25zdHJ1Y3QgYi9TQ29uc3RydWN0CitpbmRleCBhZTNkZjEwYi4uOWQxYzg5MTQgMTAwNjQ0CistLS0gYS9TQ29uc3RydWN0CisrKysgYi9TQ29uc3RydWN0CitAQCAtMSwxOCArMSwxOSBAQAorLWltcG9ydCBvcywgc3lzLCBjb21tYW5kcworK2ltcG9ydCBvcywgc3lzCisrZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjaGVja19vdXRwdXQKKyBlbnYgPSBFbnZpcm9ubWVudChFTlYgPSBvcy5lbnZpcm9uKQorIAorICMgZmlndXJlIG91dCBhIGJldHRlciB3YXkgdG8gY29uZmlndXJlIHRoaXMKKy1pZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0NYWCcpOgorK2lmICdDWFgnIGluIG9zLmVudmlyb246CisgICAgIGVudlsnQ1hYJ10gPSBvcy5lbnZpcm9uWydDWFgnXQorIAorLWlmIG9zLmVudmlyb24uaGFzX2tleSgnREVCVUcnKToKKytpZiAnREVCVUcnIGluIG9zLmVudmlyb246CisgICAgIGVudlsnREVCVUcnXSA9IG9zLmVudmlyb25bJ0RFQlVHJ10KKyAKKy1pZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0NYWEZMQUdTJyk6CisraWYgJ0NYWEZMQUdTJyBpbiBvcy5lbnZpcm9uOgorICAgICAjZW52WydDWFhGTEFHUyddID0gb3MuZW52aXJvblsnQ1hYRkxBR1MnXQorICAgICBlbnYuQXBwZW5kKENYWEZMQUdTID0gb3MuZW52aXJvblsnQ1hYRkxBR1MnXSkKKyAKKy1pZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0xJTktGTEFHUycpOgorK2lmICdMSU5LRkxBR1MnIGluIG9zLmVudmlyb246CisgICAgICNlbnZbJ0xERkxBR1MnXSA9IG9zLmVudmlyb25bJ0xERkxBR1MnXQorICAgICBlbnYuQXBwZW5kKExJTktGTEFHUyA9IG9zLmVudmlyb25bJ0xJTktGTEFHUyddKQorIAorQEAgLTIyLDI0ICsyMywyNCBAQCBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0xJTktGTEFHUycpOgorICMjIG9yIHNldCBCT09TVF9JTkNMVURFUyBhbmQgQk9PU1RfTElCUyBpZiBCb29zdCBjb21lcyB3aXRoIHlvdXIgT1MgZGlzdHJvIGUuZy4gYW5kCisgIyMgbmVlZHMgQk9PU1RfSU5DTFVERVM9L3Vzci9pbmNsdWRlL2Jvb3N0IGFuZCBCT09TVF9MSUJTPS91c3IvbGliIGxpa2UgVWJ1bnR1LgorICMjCistaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdCT09TVFJPT1QnKToKKytpZiAnQk9PU1RST09UJyBpbiBvcy5lbnZpcm9uOgorICAgICBvcy5lbnZpcm9uWydCT09TVF9ST09UJ10gPSBvcy5lbnZpcm9uWydCT09TVFJPT1QnXQorIAorLWlmIG9zLmVudmlyb24uaGFzX2tleSgnQk9PU1RfUk9PVCcpOgorK2lmICdCT09TVF9ST09UJyBpbiBvcy5lbnZpcm9uOgorICAgIGVudlsnQk9PU1RfSU5DTFVERVMnXSA9IG9zLmVudmlyb25bJ0JPT1NUX1JPT1QnXQorICAgIGVudlsnQk9PU1RfTElCUyddID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bJ0JPT1NUX1JPT1QnXSwgJ3N0YWdlJywgJ2xpYicpCistZWxpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0JPT1NUX0lOQ0xVREVTJykgYW5kIG9zLmVudmlyb24uaGFzX2tleSgnQk9PU1RfTElCUycpOgorK2VsaWYgJ0JPT1NUX0lOQ0xVREVTJyBpbiBvcy5lbnZpcm9uIGFuZCAnQk9PU1RfTElCUycgaW4gb3MuZW52aXJvbjoKKyAgICBlbnZbJ0JPT1NUX0lOQ0xVREVTJ10gPSBvcy5lbnZpcm9uWydCT09TVF9JTkNMVURFUyddCisgICAgZW52WydCT09TVF9MSUJTJ10gPSBvcy5lbnZpcm9uWydCT09TVF9MSUJTJ10KKyBlbHNlOgorLSAgIHJhaXNlIFNDb25zLkVycm9ycy5Vc2VyRXJyb3IsICJOZWl0aGVyIEJPT1NUX1JPT1QsIG5vciBCT09TVF9JTkNMVURFUyArIEJPT1NUX0xJQlMgd2FzIHNldCEiCisrICAgcmFpc2UgU0NvbnMuRXJyb3JzLlVzZXJFcnJvcigiTmVpdGhlciBCT09TVF9ST09ULCBub3IgQk9PU1RfSU5DTFVERVMgKyBCT09TVF9MSUJTIHdlcmUgc2V0ISIpCisgCisgIyMgQ3VzdG9tIE9wZW5TU0wKKy1pZiBvcy5lbnZpcm9uLmhhc19rZXkoJ09QRU5TU0xfUEFUSCcpOgorK2lmICdPUEVOU1NMX1BBVEgnIGluIG9zLmVudmlyb246CisgICAgZW52LkFwcGVuZChDUFBQQVRIID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bJ09QRU5TU0xfUEFUSCddLCAnaW5jbHVkZScpKQorICAgIGVudi5BcHBlbmQoTElCUEFUSCA9IG9zLmVudmlyb25bJ09QRU5TU0xfUEFUSCddKQorIAorLWlmIG9zLmVudmlyb24uaGFzX2tleSgnV1NQUF9FTkFCTEVfQ1BQMTEnKToKKytpZiAnV1NQUF9FTkFCTEVfQ1BQMTEnIGluIG9zLmVudmlyb246CisgICAgZW52WydXU1BQX0VOQUJMRV9DUFAxMSddID0gVHJ1ZQorIGVsc2U6CisgICAgZW52WydXU1BQX0VOQUJMRV9DUFAxMSddID0gRmFsc2UKK0BAIC03Niw3ICs3Nyw3IEBAIGlmIGVudlsnUExBVEZPUk0nXS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICBlbnZbJ0NDRkxBR1MnXSA9ICclcyAvRUhzYyAvR1IgL0dTLSAvTUQgL25vbG9nbyAlcyAlcycgJSAod2Fybl9mbGFncywgYXJjaF9mbGFncywgb3B0X2ZsYWdzKQorICAgIGVudlsnTElOS0ZMQUdTJ10gPSAnL0lOQ1JFTUVOVEFMOk5PIC9NQU5JRkVTVCAvTk9MT0dPIC9PUFQ6UkVGIC9PUFQ6SUNGIC9NQUNISU5FOlg4NicKKyBlbGlmIGVudlsnUExBVEZPUk0nXSA9PSAncG9zaXgnOgorLSAgIGlmIGVudi5oYXNfa2V5KCdERUJVRycpOgorKyAgIGlmICdERUJVRycgaW4gZW52OgorICAgICAgIGVudi5BcHBlbmQoQ0NGTEFHUyA9IFsnLWcnLCAnLU8wJ10pCisgICAgZWxzZToKKyAgICAgICBlbnYuQXBwZW5kKENQUERFRklORVMgPSBbJ05ERUJVRyddKQorQEAgLTg0LDkgKzg1LDkgQEAgZWxpZiBlbnZbJ1BMQVRGT1JNJ10gPT0gJ3Bvc2l4JzoKKyAgICBlbnYuQXBwZW5kKENDRkxBR1MgPSBbJy1XYWxsJ10pCisgICAgI2VudlsnTElOS0ZMQUdTJ10gPSAnJworIGVsaWYgZW52WydQTEFURk9STSddID09ICdkYXJ3aW4nOgorLSAgIGlmIG5vdCBvcy5lbnZpcm9uLmhhc19rZXkoJ0NYWCcpOgorKyAgIGlmIG5vdCAnQ1hYJyBpbiBvcy5lbnZpcm9uOgorICAgICAgIGVudlsnQ1hYJ10gPSAiY2xhbmcrKyIKKy0gICBpZiBlbnYuaGFzX2tleSgnREVCVUcnKToKKysgICBpZiAnREVCVUcnIGluIGVudjoKKyAgICAgICBlbnYuQXBwZW5kKENDRkxBR1MgPSBbJy1nJywgJy1PMCddKQorICAgIGVsc2U6CisgICAgICAgZW52LkFwcGVuZChDUFBERUZJTkVTID0gWydOREVCVUcnXSkKK0BAIC0xNTcsMjkgKzE1OCwyOSBAQCBlbnZfY3BwMTEgPSBlbnYuQ2xvbmUgKCkKKyAKKyBpZiBlbnZfY3BwMTFbJ0NYWCddLnN0YXJ0c3dpdGgoJ2crKycpOgorICAgICMgVE9ETzogY2hlY2sgZysrIHZlcnNpb24KKy0gICBHQ0NfVkVSU0lPTiA9IGNvbW1hbmRzLmdldG91dHB1dChlbnZfY3BwMTFbJ0NYWCddICsgJyAtZHVtcHZlcnNpb24nKQorKyAgIEdDQ19WRVJTSU9OID0gY2hlY2tfb3V0cHV0KFtlbnZfY3BwMTFbJ0NYWCddLCAnLWR1bXB2ZXJzaW9uJ10pCisgCistICAgaWYgR0NDX1ZFUlNJT04gPiAiNC40LjAiOgorLSAgICAgIHByaW50ICJDKysxMSBidWlsZCBlbnZpcm9ubWVudCBwYXJ0aWFsbHkgZW5hYmxlZCIKKysgICBpZiBHQ0NfVkVSU0lPTi5kZWNvZGUoJ3V0Zi04JykgPiAiNC40LjAiOgorKyAgICAgIHByaW50KCJDKysxMSBidWlsZCBlbnZpcm9ubWVudCBwYXJ0aWFsbHkgZW5hYmxlZCIpCisgICAgICAgZW52X2NwcDExLkFwcGVuZChXU1BQX0NQUDExX0VOQUJMRUQgPSAidHJ1ZSIsQ1hYRkxBR1MgPSBbJy1zdGQ9YysrMHgnXSxUT09MU0VUID0gWydnKysnXSxDUFBERUZJTkVTID0gWydfV0VCU09DS0VUUFBfQ1BQMTFfU1RMXyddKQorICAgIGVsc2U6CistICAgICAgcHJpbnQgIkMrKzExIGJ1aWxkIGVudmlyb25tZW50IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIEcrKyIKKysgICAgICBwcmludCgiQysrMTEgYnVpbGQgZW52aXJvbm1lbnQgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgRysrIikKKyBlbGlmIGVudl9jcHAxMVsnQ1hYJ10uc3RhcnRzd2l0aCgnY2xhbmcrKycpOgorLSAgIHByaW50ICJDKysxMSBidWlsZCBlbnZpcm9ubWVudCBlbmFibGVkIgorKyAgIHByaW50KCJDKysxMSBidWlsZCBlbnZpcm9ubWVudCBlbmFibGVkIikKKyAgICBlbnYuQXBwZW5kKENYWEZMQU5HUyA9IFsnLXN0ZGxpYj1saWJjKysnXSxMSU5LRkxBR1M9Wyctc3RkbGliPWxpYmMrKyddKQorICAgIGVudl9jcHAxMS5BcHBlbmQoV1NQUF9DUFAxMV9FTkFCTEVEID0gInRydWUiLENYWEZMQUdTID0gWyctc3RkPWMrKzB4JywnLXN0ZGxpYj1saWJjKysnXSxMSU5LRkxBR1MgPSBbJy1zdGRsaWI9bGliYysrJ10sVE9PTFNFVCA9IFsnY2xhbmcrKyddLENQUERFRklORVMgPSBbJ19XRUJTT0NLRVRQUF9DUFAxMV9TVExfJ10pCisgCisgICAgIyBsb29rIGZvciBvcHRpb25hbCBzZWNvbmQgYm9vc3Ryb290IGNvbXBpbGVkIHdpdGggY2xhbmcncyBsaWJjKysgU1RMIGxpYnJhcnkKKyAgICAjIHRoaXMgcHJldmVudHMgd2FybmluZ3MvZXJyb3JzIHdoZW4gbGlua2luZyBjb2RlIGJ1aWx0IHdpdGggdHdvIGRpZmZlcmVudAorICAgICMgaW5jb21wYXRpYmxlIFNUTCBsaWJyYXJpZXMuCistICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdCT09TVF9ST09UX0NQUDExJyk6CisrICAgaWYgJ0JPT1NUX1JPT1RfQ1BQMTEnIGluIG9zLmVudmlyb246CisgICAgICAgZW52X2NwcDExWydCT09TVF9JTkNMVURFUyddID0gb3MuZW52aXJvblsnQk9PU1RfUk9PVF9DUFAxMSddCisgICAgICAgZW52X2NwcDExWydCT09TVF9MSUJTJ10gPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnQk9PU1RfUk9PVF9DUFAxMSddLCAnc3RhZ2UnLCAnbGliJykKKy0gICBlbGlmIG9zLmVudmlyb24uaGFzX2tleSgnQk9PU1RfSU5DTFVERVNfQ1BQMTEnKSBhbmQgb3MuZW52aXJvbi5oYXNfa2V5KCdCT09TVF9MSUJTX0NQUDExJyk6CisrICAgZWxpZiAnQk9PU1RfSU5DTFVERVNfQ1BQMTEnIGluIG9zLmVudmlyb24gYW5kICdCT09TVF9MSUJTX0NQUDExJyBpbiBvcy5lbnZpcm9uOgorICAgICAgIGVudl9jcHAxMVsnQk9PU1RfSU5DTFVERVMnXSA9IG9zLmVudmlyb25bJ0JPT1NUX0lOQ0xVREVTX0NQUDExJ10KKyAgICAgICBlbnZfY3BwMTFbJ0JPT1NUX0xJQlMnXSA9IG9zLmVudmlyb25bJ0JPT1NUX0xJQlNfQ1BQMTEnXQorIGVsc2U6CistICAgcHJpbnQgIkMrKzExIGJ1aWxkIGVudmlyb25tZW50IGRpc2FibGVkIgorKyAgIHByaW50KCJDKysxMSBidWlsZCBlbnZpcm9ubWVudCBkaXNhYmxlZCIpCisgCisgIyBpZiB0aGUgYnVpbGQgc3lzdGVtIGlzIGtub3duIHRvIGFsbG93IHRoZSBpc3lzdGVtIG1vZGlmaWVyIGZvciBsaWJyYXJ5IGluY2x1ZGUKKyAjIHZhbHVlcyB0aGVuIHVzZSBpdCBmb3IgdGhlIGJvb3N0IGxpYnJhcmllcy4gT3RoZXJ3aXNlIGp1c3QgYWRkIHRoZW0gdG8gdGhlCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC93ZWJzb2NrZXRwcC93ZWJzb2NrZXRwcF8wLjguMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3dlYnNvY2tldHBwL3dlYnNvY2tldHBwXzAuOC4xLmJiCmluZGV4IDU1MTYyMTcuLmFmNmQzMGEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3dlYnNvY2tldHBwL3dlYnNvY2tldHBwXzAuOC4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3dlYnNvY2tldHBwL3dlYnNvY2tldHBwXzAuOC4xLmJiCkBAIC0zLDE2ICszLDQwIEBACiBIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vemFwaG95ZC93ZWJzb2NrZXRwcCIKIExJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtTfS9DT1BZSU5HO21kNT00ZDE2OGQ3NjNjMTExZjRmZmM2MjI0OTg3MGU0ZTBlYSIKLURFUEVORFMgPSAib3BlbnNzbCBib29zdCB6bGliIgorCitERVBFTkRTID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ29wZW5zc2wgYm9vc3QgemxpYicsICcnLCBkKX0gIgogCiBTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vemFwaG95ZC93ZWJzb2NrZXRwcC5naXQ7cHJvdG9jb2w9aHR0cHMgXAogICAgICAgICAgICBmaWxlOi8vMDAwMS1SZXBsYWNlLW1ha2Vfc2hhcmVkLXdpdGgtbmV3LWluLXNvbWUtY2FzZXMucGF0Y2ggXAogICAgICAgICAgICBmaWxlOi8vMDAwMi1GaXgtbWlzc2VkLWVudHJpZXMtZml4LXRlc3RpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jbWFrZS1Vc2UtR05VSW5zdGFsbERpcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vODQyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzc3MS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly84NTUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vODU3LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQ29ycmVjdC1jbGFuZy1jb21waWxlci1mbGFncy5wYXRjaCBcCiAgICAgICAgICAgIgogCitFWFRSQV9PRUNNQUtFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnLURCVUlMRF9FWEFNUExFUz1PTiAtREJVSUxEX1RFU1RTPU9OJywgJycsIGQpfSAiCisKKyMgdGhpcyBpcyBhbiBoZWFkZXIgb25seSBsaWJyYXJ5LCBkbyBub3QgZGVwZW5kIG9uIHRoZSBtYWluIHBhY2thZ2UKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKKyMgdG8gYWRkIHRoaXMgcGFja2FnZSB0byBhbiBTREssIHNpbmNlIGl0IGlzbid0IGEgcmV2ZXJzZS1kZXBlbmRlbmN5IG9mIGFueXRoaW5nLCBqdXN0IHVzZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorIyBUT09MQ0hBSU5fVEFSR0VUX1RBU0tfYXBwZW5kID0gIiB3ZWJzb2NrZXRwcC1kZXYiCisKICMgdGFnIDAuOC4xCiBTUkNSRVY9ICJjNmQ3ZTI5NWJmNWEwYWI5YjVmODk2NzIwY2MxYTBlMGZkYzM5N2E3IgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCiBpbmhlcml0IGNtYWtlCisKK1BBQ0tBR0VTID0rICIke1BOfS1leGFtcGxlcyIKKworRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtkb2NkaXJ9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RvY2Rpcn0vJHtCUE59CisJY3AgLVIgJHtTfS9leGFtcGxlcyAke0R9JHtkb2NkaXJ9LyR7QlBOfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQveGRlbHRhL3hkZWx0YTNfMy4wLjExLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQveGRlbHRhL3hkZWx0YTNfMy4xLjAuYmIKc2ltaWxhcml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQveGRlbHRhL3hkZWx0YTNfMy4wLjExLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC94ZGVsdGEveGRlbHRhM18zLjEuMC5iYgppbmRleCA5NjY5ZDliLi5kMTAwMDMwIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC94ZGVsdGEveGRlbHRhM18zLjAuMTEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQveGRlbHRhL3hkZWx0YTNfMy4xLjAuYmIKQEAgLTYsMTMgKzYsMTUgQEAKIAogTElDRU5TRSA9ICJHUEx2MiIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgotU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vam1hY2QveGRlbHRhLWRldmVsL3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BWfS8ke0JQTn0tJHtQVn0udGFyLmd6ICBcCi0gICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjQ0NWQ4YmUyYWM1MTIxMTNkNWNhNjAxYWU4MzU5NjI2IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBjY2M5NzUxY2VhYTRkOTBkNmIwNjkzOGE0ZGVkZGI0ODE4MTZmNWQ5Mjg0YmQwN2QyZTcyODYwOWNiMzAwYWEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9qbWFjZC94ZGVsdGEuZ2l0O2JyYW5jaD1yZWxlYXNlM18xX2FwbCIKK1NSQ1JFViA9ICI0YjRhZWQ3MWE5NTlmZTExODUyZTQ1MjQyYmI2NTI0YmU4NWQzNzA5IgorUyA9ICIke1dPUktESVJ9L2dpdC94ZGVsdGEzIgogCiBpbmhlcml0IGF1dG90b29scwogCiAjIE9wdGlvbmFsIHNlY29uZGFyeSBjb21wcmVzc2lvbgogUEFDS0FHRUNPTkZJRyA/Pz0gIiIKIFBBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS13aXRoLWxpYmx6bWEsLS13aXRob3V0LWxpYmx6bWEseHoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3hzZXJ2ZXIteG9yZy1jdnQveHNlcnZlci14b3JnLWN2dC1uYXRpdmVfMS4yMC41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQveHNlcnZlci14b3JnLWN2dC94c2VydmVyLXhvcmctY3Z0LW5hdGl2ZV8xLjIwLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3NWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3hzZXJ2ZXIteG9yZy1jdnQveHNlcnZlci14b3JnLWN2dC1uYXRpdmVfMS4yMC41LmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiWC5PcmcgWCBjdnQiCitIT01FUEFHRSA9ICJodHRwczovL2xpbnV4LmRpZS5uZXQvbWFuLzEvY3Z0IgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVkZjg3OTUwYWY1MWFjMmM1ODIyMDk0NTUzZWExODgwIgorCitERVBFTkRTICs9ICJwaXhtYW4tbmF0aXZlIHhvcmdwcm90by1uYXRpdmUgbGlieHJhbmRyLW5hdGl2ZSIKKworWE9SR19QTiA9ICJ4b3JnLXNlcnZlciIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3hzZXJ2ZXIvJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gImM5ZmM3ZTIxZTExMjg2ZGJlZGQyMmMwMGRmNjUyMTMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE4MWQ4MjQzZjM3ZTc1YTAzZDRmOGM1NWY5NmQwYmMyNTgwMmJlNmVjNDVjM2JmYTVjYjYxNGM2ZDAxYmFjOWQiCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2J1aWxkIgorCitpbmhlcml0IG5hdGl2ZSBwa2djb25maWcKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKKworZG9fY29tcGlsZSgpIHsKKyAgICBjZCAke1N9CisgICAgZm9yIGhlYWRlciBpbiBgZmluZCAtbmFtZSAnKi5oJ2A7IGRvCisgICAgICAgIHBhdGg9YGRpcm5hbWUgJGhlYWRlcmAKKyAgICAgICAgaWYgISBlY2hvICIkaW5jcGF0aHMiIHwgZ3JlcCAtcSAiJHBhdGgiIDsgdGhlbgorICAgICAgICAgICAgaW5jcGF0aHM9IiRpbmNwYXRocyAtSSRwYXRoIgorICAgICAgICBmaQorICAgIGRvbmUKKyAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRFhPUkdfVkVSU0lPTl9DVVJSRU5UPTEgJGluY3BhdGhzIGBwa2ctY29uZmlnIC0tY2ZsYWdzIHBpeG1hbi0xYCIKKyAgICBMREZMQUdTPSIke0xERkxBR1N9IC1sbSBgcGtnLWNvbmZpZyAtLWxpYnMgcGl4bWFuLTFgIgorICAgICR7Q0N9ICRDRkxBR1MgLW8gJHtCfS9jdnQgXAorICAgICAgICAke1N9L2h3L3hmcmVlODYvdXRpbHMvY3Z0L2N2dC5jIFwKKyAgICAgICAgJHtTfS9ody94ZnJlZTg2L21vZGVzL3hmODZjdnQuYyBcCisgICAgICAgICR7U30vb3MveHByaW50Zi5jIFwKKyAgICAgICAgJExERkxBR1MKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSAke0J9L2N2dCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC96YmFyL3piYXIvMDAwMS1tYWtlLXJlbGllcy1HTlUtZXh0ZW50aW9ucy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3piYXIvemJhci8wMDAxLW1ha2UtcmVsaWVzLUdOVS1leHRlbnRpb25zLnBhdGNoCmluZGV4IDA0MjM5YmEuLmM5M2FmMzIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3piYXIvemJhci8wMDAxLW1ha2UtcmVsaWVzLUdOVS1leHRlbnRpb25zLnBhdGNoCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3piYXIvemJhci8wMDAxLW1ha2UtcmVsaWVzLUdOVS1leHRlbnRpb25zLnBhdGNoCkBAIC0xNCw4ICsxNCw2IEBACiAgY29uZmlndXJlLmFjIHwgMiArLQogIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQogCi1kaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCA1NmQzZGQwLi45Zjg1ZmQ3IDEwMDY0NAogLS0tIGEvY29uZmlndXJlLmFjCiArKysgYi9jb25maWd1cmUuYWMKIEBAIC0zLDcgKzMsNyBAQCBBQ19QUkVSRVEoWzIuNjFdKQpAQCAtMjMsMTAgKzIxLDE2IEBACiAgQUNfQ09ORklHX0FVWF9ESVIoY29uZmlnKQogIEFDX0NPTkZJR19NQUNST19ESVIoY29uZmlnKQogLUFNX0lOSVRfQVVUT01BS0UoWzEuMTAgLVdhbGwgLVdlcnJvciBmb3JlaWduIHN1YmRpci1vYmplY3RzIHN0ZC1vcHRpb25zIGRpc3QtYnppcDJdKQotK0FNX0lOSVRfQVVUT01BS0UoWzEuMTAgLVdhbGwgLVdlcnJvciAtV25vLXBvcnRhYmlsaXR5IGZvcmVpZ24gc3ViZGlyLW9iamVjdHMgc3RkLW9wdGlvbnMgZGlzdC1iemlwMl0pCisrQU1fSU5JVF9BVVRPTUFLRShbMS4xMCAtV2FsbCAtV25vLWVycm9yIGZvcmVpZ24gc3ViZGlyLW9iamVjdHMgc3RkLW9wdGlvbnMgZGlzdC1iemlwMl0pCiAgQUNfQ09ORklHX0hFQURFUlMoW2luY2x1ZGUvY29uZmlnLmhdKQogIEFDX0NPTkZJR19TUkNESVIoemJhci9zY2FubmVyLmMpCiAgTFRfUFJFUkVRKFsyLjJdKQotLS0gCi0yLjEwLjIKLQorQEAgLTQ3LDcgKzQ3LDcgQEAgQUNfREVGSU5FX1VOUVVPVEVEKFtMSUJfVkVSU0lPTl9SRVZJU0lPTgorICAgW0xpYnJhcnkgcmV2aXNpb25dKQorIAorIEFNX0NQUEZMQUdTPSItSSRzcmNkaXIvaW5jbHVkZSIKKy1BTV9DRkxBR1M9Ii1XYWxsIC1Xbm8tcGFyZW50aGVzZXMgLVdlcnJvciIKKytBTV9DRkxBR1M9Ii1XYWxsIC1Xbm8tcGFyZW50aGVzZXMiCisgQU1fQ1hYRkxBR1M9IiRBTV9DRkxBR1MiCisgQUNfU1VCU1QoW0FNX0NQUEZMQUdTXSkKKyBBQ19TVUJTVChbQU1fQ0ZMQUdTXSkKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3piYXIvemJhci8wMDAxLXVuZGVmaW5lLV9fdmFfYXJnX3BhY2sucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC96YmFyL3piYXIvMDAwMS11bmRlZmluZS1fX3ZhX2FyZ19wYWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2Q4YmExLi4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy1zdXBwb3J0L3piYXIvemJhci8wMDAxLXVuZGVmaW5lLV9fdmFfYXJnX3BhY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1Gcm9tIGY4NDI4NzIyNDQyMTlkOTg4MWZiZWM3NzA1NDcwMjQxMmIxZTE2ZjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogRnJpLCAyIERlYyAyMDE2IDE2OjQxOjI3IC0wODAwCi1TdWJqZWN0OiBbUEFUQ0hdIHVuZGVmaW5lIF9fdmFfYXJnX3BhY2sKLQotZHByaW50ZigpIGlzIGFsc28gYSBsaWJjIGZ1bmN0aW9uLiBUaGlzIGZpeGVzCi10aGUgY29tcGlsZSBlcnJvcnMKLQotL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8yLmg6MTQwOjE6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgJ3snIHRva2VuCi18ICB7Ci0KLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0tLS0KLSB6YmFyL2RlYnVnLmggfCAxMCArKysrKy0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3piYXIvZGVidWcuaCBiL3piYXIvZGVidWcuaAotaW5kZXggNDgyY2E4ZC4uNjg5NDhmNiAxMDA2NDQKLS0tLSBhL3piYXIvZGVidWcuaAotKysrIGIvemJhci9kZWJ1Zy5oCi1AQCAtMjMsNiArMjMsNyBAQAotIAotIC8qIHZhcmFyZ3MgdmFyaWF0aW9ucyBvbiBjb21waWxlIHRpbWUgZGVidWcgc3BldyAqLwotIAotKyN1bmRlZiBfX3ZhX2FyZ19wYWNrCi0gI2lmbmRlZiBERUJVR19MRVZFTAotIAotICMgaWZkZWYgX19HTlVDX18KLUBAIC0zNiwxNSArMzcsMTQgQEAKLSAjZWxzZQotIAotICMgaW5jbHVkZSA8c3RkaW8uaD4KLS0KLSAjIGlmZGVmIF9fR05VQ19fCi0tIyAgZGVmaW5lIGRwcmludGYobGV2ZWwsIGFyZ3MuLi4pIFwKLSsjICBkZWZpbmUgZHByaW50ZihsZXZlbCwgZm9ybWF0LCBhcmdzLi4uKSBcCi0gICAgIGlmKChsZXZlbCkgPD0gREVCVUdfTEVWRUwpICAgIFwKLS0gICAgICAgIGZwcmludGYoc3RkZXJyLCBhcmdzKQotKyAgICAgICAgZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncykKLSAjIGVsc2UKLS0jICBkZWZpbmUgZHByaW50ZihsZXZlbCwgLi4uKSAgICAgXAotKyMgIGRlZmluZSBkcHJpbnRmKGxldmVsLCBmb3JtYXQsIC4uLikgICAgIFwKLSAgICAgaWYoKGxldmVsKSA8PSBERUJVR19MRVZFTCkgICAgXAotLSAgICAgICAgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKQotKyAgICAgICAgZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgX19WQV9BUkdTX18pCi0gIyBlbmRpZgotIAotICNlbmRpZiAvKiBERUJVR19MRVZFTCAqLwotLS0gCi0yLjEwLjIKLQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvemJhci96YmFyXzAuMTAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC96YmFyL3piYXJfMC4xMC5iYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkMWY3YS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC96YmFyL3piYXJfMC4xMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLURFU1JJUFRJT04gPSAiMkQgYmFyY29kZSBzY2FubmVyIHRvb2xraXQuIgotU0VDVElPTiA9ICJncmFwaGljcyIKLUxJQ0VOU0UgPSAiTEdQTC0yLjEiCi0KLURFUEVORFMgPSAicGtnY29uZmlnIGludGx0b29sLW5hdGl2ZSBsaWJwbmcganBlZyIKLQotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDJiYWZkZWQxYjM4MGM2ZmVmYmViNmM1Y2Q1NDQ4ZDkiCi0KLVNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuYnoyIFwKLSAgICAgICAgICAgZmlsZTovLzAwMDEtdW5kZWZpbmUtX192YV9hcmdfcGFjay5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLW1ha2UtcmVsaWVzLUdOVS1leHRlbnRpb25zLnBhdGNoIFwKLSIKLQotU1JDX1VSSVttZDVzdW1dID0gIjBmZDYxZWI1OTBhYzFiYWI2MmE3NzkxM2M4YjA4NmE1IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIzNGVmYjM5ZGJiZTVjZWY0MTg5Y2M3NmYzN2FmYmUzY2ZjZmI0NWFlNTI0OTNiZmU4ZTE5MTMxOGJkYmFkYzYiCi0KLWluaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwotCi1QQUNLQUdFQ09ORklHID0gIiR7QGJiLnV0aWxzLmZpbHRlcignRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsIGQpfSIKLQotUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14LC13aXRob3V0LXgsbGlieGNiIGxpYngxMSBsaWJzbSBsaWJ4YXUgbGlieGV4dCBsaWJ4diBsaWJpY2UgbGlieGRtY3AiCi0KLUVYVFJBX09FQ09ORiA9ICIgLS13aXRob3V0LWltYWdlbWFnaWNrIC0td2l0aG91dC1xdCAtLXdpdGhvdXQtcHl0aG9uIC0tZGlzYWJsZS12aWRlbyAtLXdpdGhvdXQtZ3RrIgotCi1kb19pbnN0YWxsX2FwcGVuZCgpIHsKLSAgICAjcmVtb3ZlIHVzci9iaW4gaWYgZW1wdHkKLSAgICBybWRpciAke0R9JHtiaW5kaXJ9Ci19CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtc3VwcG9ydC96YmFyL3piYXJfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvemJhci96YmFyX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzVlMDljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvemJhci96YmFyX2dpdC5iYgpAQCAtMCwwICsxLDMxIEBACitERVNSSVBUSU9OID0gIjJEIGJhcmNvZGUgc2Nhbm5lciB0b29sa2l0LiIKK1NFQ1RJT04gPSAiZ3JhcGhpY3MiCitMSUNFTlNFID0gIkxHUEwtMi4xIgorCitERVBFTkRTID0gInBrZ2NvbmZpZyBpbnRsdG9vbC1uYXRpdmUgbGlicG5nIGpwZWciCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQwMTU4NDAyMzdjYTdmMDE3NWNkNjI2Zjc4NzE0Y2E4IgorCitQViA9ICIwLjEwK2dpdCR7U1JDUFZ9IgorCisjICBpUGhvbmVTREstMS4zLjEgdGFnCitTUkNSRVYgPSAiNjcwMDNkMmE5ODViNWY5NjI3YmVlMmQ4ZTNlMGIyNmQwYzQ3NGI1NyIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9aQmFyL1piYXIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tYWtlLXJlbGllcy1HTlUtZXh0ZW50aW9ucy5wYXRjaCBcCisiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA9ICIke0BiYi51dGlscy5maWx0ZXIoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteCwtd2l0aG91dC14LGxpYnhjYiBsaWJ4MTEgbGlic20gbGlieGF1IGxpYnhleHQgbGlieHYgbGliaWNlIGxpYnhkbWNwIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWltYWdlbWFnaWNrIC0td2l0aG91dC1xdCAtLXdpdGhvdXQtcHl0aG9uIC0tZGlzYWJsZS12aWRlbyAtLXdpdGhvdXQtZ3RrIgorCitDUFBGTEFHUyArPSAiLVduby1lcnJvciIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgI3JlbW92ZSB1c3IvYmluIGlmIGVtcHR5CisgICAgcm1kaXIgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXRlc3QvY3BwdW5pdC9jcHB1bml0XzEuMTQuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy10ZXN0L2NwcHVuaXQvY3BwdW5pdF8xLjE1LjEuYmIKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXRlc3QvY3BwdW5pdC9jcHB1bml0XzEuMTQuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXRlc3QvY3BwdW5pdC9jcHB1bml0XzEuMTUuMS5iYgppbmRleCAwNDMyNzg2Li45MmRiMzFlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtdGVzdC9jcHB1bml0L2NwcHVuaXRfMS4xNC4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy10ZXN0L2NwcHVuaXQvY3BwdW5pdF8xLjE1LjEuYmIKQEAgLTgsNyArOCw3IEBACiAgICAgaHR0cDovL2Rldi13d3cubGlicmVvZmZpY2Uub3JnL3NyYy9jcHB1bml0LSR7UFZ9LnRhci5neiBcCiAgICAgZmlsZTovLzAwMDEtZG9jLU1ha2VmaWxlLmFtLWRvLW5vdC1wcmVzZXJ2ZS1maWxlLWZsYWdzLXdoZW4tY29weS5wYXRjaCBcCiAiCi1TUkNfVVJJW21kNXN1bV0gPSAiN2FkOTMwMjIxNzE3MTBhNTQxYmZlNGJmZDhiNGEzODEiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2Q1Njk4NjlkMjdiNDg4NjAyMTBjNzU4YzRmMzEzMDgyMTAzYTVlNTgyMTlhNzY2OWI1MmJmZDI5ZDY3NDc4MCIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZGM2NjllNjE0NWNhZGQ5Njc0ODczZTI0OTQzZTZkZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OWM1YzY2NjUzMzdmNTZmZDJkYjM2YmMzODA1YTU2MTk3MDlkNTFmYjEzNmU1MTkzNzA3MmY2M2ZjYzcxN2E3IgogCiBpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXRlc3QvZXZ0ZXN0L2V2dGVzdC8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtdGVzdC9ldnRlc3QvZXZ0ZXN0LzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDYzMjJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXRlc3QvZXZ0ZXN0L2V2dGVzdC8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSBmYTU3Yzc4YzMzZDI2MDg0Zjg1ZjFhNmI0YzI5Mzc4NjMxZGM5Mzk1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgTm92IDIwMTkgMTE6NTg6NTggLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIG9uIDMyYml0IGFyY2hlcyB3aXRoIDY0Yml0IHRpbWVfdAorCit0aW1lIGVsZW1lbnQgaXMgZGVwcmVjYXRlZCBvbiBuZXcgaW5wdXRfZXZlbnQgc3RydWN0dXJlIGluIGtlcm5lbCdzCitpbnB1dC5oIFsxXQorCitbMV0gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L2NvbW1pdD9pZD0xNTIxOTRmZTljM2YKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9saWJldmRldi9ldnRlc3QvbWVyZ2VfcmVxdWVzdHMvNl0KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBldnRlc3QuYyB8IDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2V2dGVzdC5jIGIvZXZ0ZXN0LmMKK2luZGV4IDU0OGMyMDMuLjkzMDYzY2QgMTAwNjQ0CistLS0gYS9ldnRlc3QuYworKysrIGIvZXZ0ZXN0LmMKK0BAIC02MSw2ICs2MSwxMSBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisrI2lmbmRlZiBpbnB1dF9ldmVudF9zZWMKKysjZGVmaW5lIGlucHV0X2V2ZW50X3NlYyB0aW1lLnR2X3NlYworKyNkZWZpbmUgaW5wdXRfZXZlbnRfdXNlYyB0aW1lLnR2X3VzZWMKKysjZW5kaWYKKysKKyAjZGVmaW5lIEJJVFNfUEVSX0xPTkcgKHNpemVvZihsb25nKSAqIDgpCisgI2RlZmluZSBOQklUUyh4KSAoKCgoeCktMSkvQklUU19QRVJfTE9ORykrMSkKKyAjZGVmaW5lIE9GRih4KSAgKCh4KSVCSVRTX1BFUl9MT05HKQorQEAgLTExNDAsNyArMTE0NSw3IEBAIHN0YXRpYyBpbnQgcHJpbnRfZXZlbnRzKGludCBmZCkKKyAJCQl0eXBlID0gZXZbaV0udHlwZTsKKyAJCQljb2RlID0gZXZbaV0uY29kZTsKKyAKKy0JCQlwcmludGYoIkV2ZW50OiB0aW1lICVsZC4lMDZsZCwgIiwgZXZbaV0udGltZS50dl9zZWMsIGV2W2ldLnRpbWUudHZfdXNlYyk7CisrCQkJcHJpbnRmKCJFdmVudDogdGltZSAlbGQuJTA2bGQsICIsIGV2W2ldLmlucHV0X2V2ZW50X3NlYywgZXZbaV0uaW5wdXRfZXZlbnRfc2VjKTsKKyAKKyAJCQlpZiAodHlwZSA9PSBFVl9TWU4pIHsKKyAJCQkJaWYgKGNvZGUgPT0gU1lOX01UX1JFUE9SVCkKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy10ZXN0L2V2dGVzdC9ldnRlc3RfMS4zNC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy10ZXN0L2V2dGVzdC9ldnRlc3RfMS4zNC5iYgppbmRleCAzYjZkYzYxLi5hM2EyM2M4IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtdGVzdC9ldnRlc3QvZXZ0ZXN0XzEuMzQuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXRlc3QvZXZ0ZXN0L2V2dGVzdF8xLjM0LmJiCkBAIC04LDggKzgsMTAgQEAKIERFUEVORFMgPSAibGlieG1sMiIKIAogU1JDUkVWID0gIjE2ZTUxMDQxMjdhNjIwNjg2YmRkZGM0YTlhZDYyODgxMTM0ZDZjNjkiCi1TUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2V2dGVzdDtwcm90b2NvbD1naXQgXAotICAgICAgICAgICBmaWxlOi8vYWRkX21pc3NpbmdfbGltaXRzX2hfaW5jbHVkZS5wYXRjaCIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9saWJldmRldi9ldnRlc3QuZ2l0O3Byb3RvY29sPWh0dHBzIFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9taXNzaW5nX2xpbWl0c19oX2luY2x1ZGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIFwKKyAgICAgICAgICAgIgogCiBTID0gIiR7V09SS0RJUn0vZ2l0IgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtdGVzdC9nb29nbGV0ZXN0L2dvb2dsZXRlc3RfZ2l0LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1vZS9yZWNpcGVzLXRlc3QvZ29vZ2xldGVzdC9nb29nbGV0ZXN0X2dpdC5iYgppbmRleCBiNjc1ZWEwLi4zNTRlN2RlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLW9lL3JlY2lwZXMtdGVzdC9nb29nbGV0ZXN0L2dvb2dsZXRlc3RfZ2l0LmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtb2UvcmVjaXBlcy10ZXN0L2dvb2dsZXRlc3QvZ29vZ2xldGVzdF9naXQuYmIKQEAgLTIxLDMgKzIxLDExIEBACiBSREVQRU5EU18ke1BOfS1kZXYgKz0gIiR7UE59LXN0YXRpY2RldiIKIAogQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIGV4cGxpY2l0bHkgdXNlIHB5dGhvbjMKKyAgICAjIHRoZSBzY3JpcHRzIGFyZSBhbHJlYWR5IHB5dGhvbjMgY29tcGF0aWJsZSBzaW5jZSBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2dvb2dsZXRlc3QvY29tbWl0L2Q0MDRhZjBkOTg3YTljMzhjYWZjZTgyYTdlMjZlYzg0NjhjODgzNjEgYW5kIG90aGVyIGZpeGVzIGxpa2UgdGhpcworICAgICMgYnV0IHNpbmNlIHRoaXMgb2UtY29yZSBjaGFuZ2UgaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aWQ9NWY4ZjE2YjE3ZjY2OTY2YWU5MWFlYWJjMjNlOTdkZTVlY2QxNzQ0NworICAgICMgdGhlcmUgaXNuJ3QgcHl0aG9uIGluIEhPU1RUT09MUyBzbyAiZW52IHB5dGhvbiIgZmFpbHMKKyAgICBzZWQgLWkgJ3NAXiMhL3Vzci9iaW4vZW52IHB5dGhvbiRAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uM0BnJyAke1N9L2dvb2dsZW1vY2svc2NyaXB0cy8qcHkgJHtTfS9nb29nbGVtb2NrL3NjcmlwdHMvZ2VuZXJhdG9yLypweSAke1N9L2dvb2dsZW1vY2svc2NyaXB0cy9nZW5lcmF0b3IvY3BwLypweSAke1N9L2dvb2dsZW1vY2svdGVzdC8qcHkgJHtTfS9nb29nbGV0ZXN0L3NjcmlwdHMvKnB5ICR7U30vZ29vZ2xldGVzdC90ZXN0LypweQorfQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1wZXJsL3JlY2lwZXMtcGVybC9hZGR1c2VyL2FkZHVzZXJfMy4xMTguYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXBlcmwvcmVjaXBlcy1wZXJsL2FkZHVzZXIvYWRkdXNlcl8zLjExOC5iYgppbmRleCBlNjk1YzU4Li44MGNmMTQyIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXBlcmwvcmVjaXBlcy1wZXJsL2FkZHVzZXIvYWRkdXNlcl8zLjExOC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXBlcmwvcmVjaXBlcy1wZXJsL2FkZHVzZXIvYWRkdXNlcl8zLjExOC5iYgpAQCAtOCw2ICs4LDcgQEAKIAogU1JDX1VSSSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvZGViaWFuLythcmNoaXZlL3ByaW1hcnkvK3NvdXJjZWZpbGVzL2FkZHVzZXIvJHtQVn0vJHtCUE59XyR7UFZ9LnRhci54eiBcCiAgICAgICAgICAgIGZpbGU6Ly9hZGR1c2VyLWFkZC1NLW9wdGlvbi1mb3ItdXNlcmFkZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFkZHVzZXItc2V0LWRlZmF1bHQtc2hlbGwtd2l0aC1zYmluLW5vbG9naW4ucGF0Y2ggXAogIgogCiBTUkNfVVJJW21kNXN1bV0gPSAiNDRiYTI0NzVlYmRhYWZjOTYxMzIzNmJkZGEzMjFjOTciCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXBlcmwvcmVjaXBlcy1wZXJsL2FkZHVzZXIvZmlsZXMvMDAwMS1hZGR1c2VyLXNldC1kZWZhdWx0LXNoZWxsLXdpdGgtc2Jpbi1ub2xvZ2luLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1wZXJsL3JlY2lwZXMtcGVybC9hZGR1c2VyL2ZpbGVzLzAwMDEtYWRkdXNlci1zZXQtZGVmYXVsdC1zaGVsbC13aXRoLXNiaW4tbm9sb2dpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNjNmJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1wZXJsL3JlY2lwZXMtcGVybC9hZGR1c2VyL2ZpbGVzLzAwMDEtYWRkdXNlci1zZXQtZGVmYXVsdC1zaGVsbC13aXRoLXNiaW4tbm9sb2dpbi5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDc1ZTk0OWJmODBiZjVlM2U1YmQ4ZjgxYjI1ODA5NWU2NjJiNzA1YzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgOSBKYW4gMjAyMCAxMzo1MToyOCArMDgwMAorU3ViamVjdDogW1BBVENIXSBhZGR1c2VyOiBzZXQgZGVmYXVsdCBzaGVsbCB3aXRoIC9zYmluL25vbG9naW4KKworU2hlbGwgbm9sb2dpbiB3aGV0aGVyIHByb3ZpZGVkIGJ5IHNoYWRvdyBvciB1dGlsLWxpbnV4IGlzIGluc3RhbGxlZCB0bworL3NiaW4vbm9sb2dpbiBpbiBvZS1jb3JlLiBCdXQgdGhlIGRlZmF1bHQgc2hlbGwgb2YgYWRkdXNlciBpcworL3Vzci9zYmluL25vbG9naW4gYW5kIHdpbGwgZmFpbCB0byBjcmVhdGUgYSBuZXcgdXNlci4KKworU2V0IHRoZSBkZWZhdWx0IHNoZWxsIHdpdGggL3NiaW4vbm9sb2dpbiB0byBmaXggdGhlIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFkZHVzZXIgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hZGR1c2VyIGIvYWRkdXNlcgoraW5kZXggMGYyNGNjOS4uYWI1NTRkMCAxMDA3NTUKKy0tLSBhL2FkZHVzZXIKKysrKyBiL2FkZHVzZXIKK0BAIC00MzEsNyArNDMxLDcgQEAgaWYgKCRhY3Rpb24gZXEgImFkZHN5c3VzZXIiKSB7CisgICAgIHByaW50ZiBndHgoIkFkZGluZyBuZXcgdXNlciBgJXMnIChVSUQgJWQpIHdpdGggZ3JvdXAgYCVzJyAuLi5cbiIpLCRuZXdfbmFtZSwkbmV3X3VpZCwkaW5ncm91cF9uYW1lCisgCWlmICR2ZXJib3NlOworICAgICAkaG9tZV9kaXIgPSAkc3BlY2lhbF9ob21lIHx8ICZob21lZGlyKCRuZXdfbmFtZSwgJGluZ3JvdXBfbmFtZSk7CistICAgICRzaGVsbCA9ICRzcGVjaWFsX3NoZWxsIHx8ICcvdXNyL3NiaW4vbm9sb2dpbic7CisrICAgICRzaGVsbCA9ICRzcGVjaWFsX3NoZWxsIHx8ICcvc2Jpbi9ub2xvZ2luJzsKKyAgICAgJHVuZG91c2VyID0gJG5ld19uYW1lOworICAgICBteSAkdXNlcmFkZCA9ICZ3aGljaCgndXNlcmFkZCcpOworICAgICAmc3lzdGVtY2FsbCgkdXNlcmFkZCwgJy1kJywgJGhvbWVfZGlyLCAnLWcnLCAkaW5ncm91cF9uYW1lLCAnLXMnLAorLS0gCisyLjE3LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1wZXJsL3JlY2lwZXMtcGVybC9saWJjb25maWcvbGliY29uZmlnLWF1dG9jb25mLXBlcmxfMC4zMTguYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXBlcmwvcmVjaXBlcy1wZXJsL2xpYmNvbmZpZy9saWJjb25maWctYXV0b2NvbmYtcGVybF8wLjMxOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGY4ZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1wZXJsL3JlY2lwZXMtcGVybC9saWJjb25maWcvbGliY29uZmlnLWF1dG9jb25mLXBlcmxfMC4zMTguYmIKQEAgLTAsMCArMSw0MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgSmVucyBSZWhzYWNrIDxzbm9AbmV0YnNkLm9yZz4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworU1VNTUFSWSA9ICJBIG1vZHVsZSB0byBpbXBsZW1lbnQgc29tZSBvZiBBdXRvQ29uZiBtYWNyb3MgaW4gcHVyZSBwZXJsIgorREVTQ1JJUFRJT04gPSAiQ29uZmlnOjpBdXRvQ29uZiBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHRoZSBzYW1lIG9wcG9ydHVuaXRpZXMgdG8gUGVybCBcCitkZXZlbG9wZXJzIGFzIEdOVSBBdXRvY29uZiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLz4gZG9lcyBmb3IgXAorU2hlbGwgZGV2ZWxvcGVycy4iCisKK0hPTUVQQUdFPSAgICAgICAiaHR0cHM6Ly9tZXRhY3Bhbi5vcmcvcmVsZWFzZS9Db25maWctQXV0b0NvbmYiCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9BcnRpc3RpYy0xLjA7bWQ1PWNkYTAzYmJkYzNjMTk1MTk5NjM5MmI4NzIzOTdiNzk4IFwKK2ZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTEuMDttZDU9ZTllMzZhOWRlNzM0MTk5NTY3YTRkNzY5NDk4Zjc0M2QiCisKK1NSQ19VUkkgPSAiJHtDUEFOX01JUlJPUn0vYXV0aG9ycy9pZC9SL1JFL1JFSFNBQ0svQ29uZmlnLUF1dG9Db25mLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjBiZWE3MjFhZDM5OTZlMjAzMjRiODRiM2I5MjRlYzcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMzYzkzMGZlZWMzMDAzZGUyNTFjYTIyMmFiZThiYmViNzQ2MTBhZDA3ZjY1ZmMxNmYyN2Q3NGQxOTVlZWFiMzQiCitSREVQRU5EU18ke1BOfSArPSAibGliY2FwdHVyZS10aW55LXBlcmwiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0gKz0gInBlcmwtbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0gKz0gInBlcmwtbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfSArPSAicGVybC1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0gKz0gInBlcmwtbW9kdWxlLXdhcm5pbmdzIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gImxpYmZpbGUtc2x1cnBlci1wZXJsIgorCitTID0gIiR7V09SS0RJUn0vQ29uZmlnLUF1dG9Db25mLSR7UFZ9IgorCitpbmhlcml0IGNwYW4gcHRlc3QtcGVybCBhbGxhcmNoCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcGVybC9yZWNpcGVzLXBlcmwvbGliZmlsZS9saWJmaWxlLXNsdXJwZXItcGVybF8wLjAxMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcGVybC9yZWNpcGVzLXBlcmwvbGliZmlsZS9saWJmaWxlLXNsdXJwZXItcGVybF8wLjAxMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjg0YWJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1wZXJsL3JlY2lwZXMtcGVybC9saWJmaWxlL2xpYmZpbGUtc2x1cnBlci1wZXJsXzAuMDEyLmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUsIHNhbmUgYW5kIGVmZmljaWVudCBtb2R1bGUgdG8gc2x1cnAgYSBmaWxlIgorREVTQ1JJUFRJT04gPSAiVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBmYXN0IGFuZCBjb3JyZWN0IHNsdXJwaW5nIGFuZCBzcGV3aW5nLiBcCitBbGwgZnVuY3Rpb25zIGFyZSBvcHRpb25hbGx5IGV4cG9ydGVkLiBBbGwgZnVuY3Rpb25zIHRocm93IGV4Y2VwdGlvbnMgb24gXAorZXJyb3JzLCB3cml0ZSBmdW5jdGlvbnMgZG9uJ3QgcmV0dXJuIGFueSBtZWFuaW5nZnVsIHZhbHVlLiIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworSE9NRVBBR0U9ICAgICAgICJodHRwczovL21ldGFjcGFuLm9yZy9yZWxlYXNlL0ZpbGUtU2x1cnBlciIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0FydGlzdGljLTEuMDttZDU9Y2RhMDNiYmRjM2MxOTUxOTk2MzkyYjg3MjM5N2I3OTggXAorZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9HUEwtMS4wO21kNT1lOWUzNmE5ZGU3MzQxOTk1NjdhNGQ3Njk0OThmNzQzZCIKKworU1JDX1VSSSA9ICIke0NQQU5fTUlSUk9SfS9hdXRob3JzL2lkL0wvTEUvTEVPTlQvRmlsZS1TbHVycGVyLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjU3NDJjNjMwOTYzOTJkZmVlNTBiOGRiMzE0YmNjYTE4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRlZmIyZWE0MTZiMTEwYTFiZGE2ZjgxMzM1NDljYzZlYTM2NzY0MDJlM2NhZjc1MjlmY2UwMzEzMjUwYWE1NzgiCitSREVQRU5EU18ke1BOfSA9ICIgXAorICAgIHBlcmwtbW9kdWxlLWNhcnAgXAorICAgIHBlcmwtbW9kdWxlLWVuY29kZSBcCisgICAgcGVybC1tb2R1bGUtZXhwb3J0ZXIgXAorICAgIHBlcmwtbW9kdWxlLXBlcmxpbyBcCisgICAgcGVybC1tb2R1bGUtcGVybGlvLWVuY29kaW5nIFwKKyAgICBwZXJsLW1vZHVsZS1zdHJpY3QgXAorICAgIHBlcmwtbW9kdWxlLXdhcm5pbmdzIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImxpYnRlc3Qtd2FybmluZ3MtcGVybCBcCisgICAgcGVybC1tb2R1bGUtdGVzdC1tb3JlIFwKKyAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9GaWxlLVNsdXJwZXItJHtQVn0iCisKK2luaGVyaXQgY3BhbiBhbGxhcmNoIHB0ZXN0LXBlcmwKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXBlcmwvcmVjaXBlcy1wZXJsL2xpYnN0YXRncmFiL2xpYnVuaXgtc3RhdGdyYWJfMC4xMTIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXBlcmwvcmVjaXBlcy1wZXJsL2xpYnN0YXRncmFiL2xpYnVuaXgtc3RhdGdyYWJfMC4xMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiYjRhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcGVybC9yZWNpcGVzLXBlcmwvbGlic3RhdGdyYWIvbGlidW5peC1zdGF0Z3JhYl8wLjExMi5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlBlcmwgaW50ZXJmYWNlIHRvIHRoZSBsaWJzdGF0Z3JhYiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVW5peDo6U3RhdGdyYWIgaXMgYSB3cmFwcGVyIGZvciBsaWJzdGF0Z3JhYiBhcyBhdmFpbGFibGUgZnJvbSBcCis8aHR0cDovL3d3dy5pLXNjcmVhbS5vcmcvbGlic3RhdGdyYWIvPi4gSXQgaXMgYSByZWFzb25hYmx5IHBvcnRhYmxlIGF0dGVtcHQgXAordG8gcXVlcnkgaW50ZXJlc3Rpbmcgc3RhdHMgYWJvdXQgeW91ciBjb21wdXRlci4gSXQgY292ZXJzIGluZm9ybWF0aW9uIG9uIFwKK3RoZSBvcGVyYXRpbmcgc3lzdGVtLCBDUFUsIG1lbW9yeSB1c2FnZSwgbmV0d29yayBpbnRlcmZhY2VzLCBoYXJkLWRpc2tzIFwKK2V0Yy4iCisKK0hPTUVQQUdFID0gImh0dHBzOi8vbWV0YWNwYW4ub3JnL3JlbGVhc2UvVW5peC1TdGF0Z3JhYiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsgfCBMR1BMLTIuMSsiCitERVBFTkRTICs9ICJsaWJjYXB0dXJlLXRpbnktcGVybC1uYXRpdmUiCitERVBFTkRTICs9ICJsaWJjb25maWctYXV0b2NvbmYtcGVybC1uYXRpdmUiCitERVBFTkRTICs9ICJsaWJzdGF0Z3JhYiIKK1JERVBFTkRTXyR7UE59ICs9ICJcCisgICAgbGlic3RhdGdyYWIgXAorICAgIHBlcmwtbW9kdWxlLWF1dG9sb2FkZXIgXAorICAgIHBlcmwtbW9kdWxlLWNhcnAgXAorICAgIHBlcmwtbW9kdWxlLWR5bmFsb2FkZXIgXAorICAgIHBlcmwtbW9kdWxlLWV4cG9ydGVyIFwKKyAgICBwZXJsLW1vZHVsZS1zdHJpY3QgXAorICAgIHBlcmwtbW9kdWxlLXZhcnMgXAorICAgIHBlcmwtbW9kdWxlLXdhcm5pbmdzIFwKKyIKKworU1JDX1VSSSA9ICIke0NQQU5fTUlSUk9SfS9hdXRob3JzL2lkL1IvUkUvUkVIU0FDSy9Vbml4LVN0YXRncmFiLSR7UFZ9LnRhci5neiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9BcnRpc3RpYy0xLjA7bWQ1PWNkYTAzYmJkYzNjMTk1MTk5NjM5MmI4NzIzOTdiNzk4IFwKKyAgICBmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0xLjA7bWQ1PWU5ZTM2YTlkZTczNDE5OTU2N2E0ZDc2OTQ5OGY3NDNkIFwKKyAgICBmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0xHUEwtMi4xO21kNT0xYTZkMjY4ZmQyMTg2NzVmZmVhOGJlNTU2Nzg4Yjc4MCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNmJjMDZiM2Y3NzQ5ZjdkNzdhMmIxYmQxMzQwMjgyMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNmEyOWY3YWNhZWVjMDgxYmYwZTczMDNiYTVlZTI0ZmRhMWQyMWExMTA0NjY5YjgzNzc0NWYzZWE2MWQ2YWZhIgorCitTID0gIiR7V09SS0RJUn0vVW5peC1TdGF0Z3JhYi0ke1BWfSIKKworaW5oZXJpdCBjcGFuIHBrZ2NvbmZpZyBwdGVzdC1wZXJsCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1wZXJsL3JlY2lwZXMtcGVybC9saWJ0ZXN0L2xpYnRlc3Qtd2FybmluZ3MtcGVybF8wLjAyOC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcGVybC9yZWNpcGVzLXBlcmwvbGlidGVzdC9saWJ0ZXN0LXdhcm5pbmdzLXBlcmxfMC4wMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwYTU0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcGVybC9yZWNpcGVzLXBlcmwvbGlidGVzdC9saWJ0ZXN0LXdhcm5pbmdzLXBlcmxfMC4wMjguYmIKQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgSmVucyBSZWhzYWNrIDxzbm9AbmV0YnNkLm9yZz4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworREVTQ1JJUFRJT04gPSAiSWYgeW91J3ZlIGV2ZXIgdHJpZWQgdG8gdXNlIFRlc3Q6Ok5vV2FybmluZ3MgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gXAord2FybmluZ3MgZ2VuZXJhdGVkIGJ5IHlvdXIgdGVzdHMsIGNvbWJpbmVkIHdpdGggdGhlIGNvbnZlbmllbmNlIG9mIFwKK1xcImRvbmVfdGVzdGluZ1xcIiB0byBub3QgaGF2ZSB0byBkZWNsYXJlIGEgdGVzdCBjb3VudCwgeW91J2xsIGhhdmUgZGlzY292ZXJlZCBcCit0aGF0IHRoZXNlIHR3byBmZWF0dXJlcyBkbyBub3QgcGxheSB3ZWxsIHRvZ2V0aGVyLCBhcyB0aGUgdGVzdCBjb3VudCB3aWxsIFwKK2JlIGNhbGN1bGF0ZWQgKmJlZm9yZSogdGhlIHdhcm5pbmdzIHRlc3QgaXMgcnVuLCByZXN1bHRpbmcgaW4gYSBUQVAgZXJyb3IuIFwKKyhTZWUgImV4YW1wbGVzL3Rlc3Rfbm93YXJuaW5ncy5wbCIgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIGEgXAorZGVtb25zdHJhdGlvbi4pIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitIT01FUEFHRT0gICAgICAgImh0dHBzOi8vbWV0YWNwYW4ub3JnL3JlbGVhc2UvVGVzdC1XYXJuaW5ncyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0FydGlzdGljLTEuMDttZDU9Y2RhMDNiYmRjM2MxOTUxOTk2MzkyYjg3MjM5N2I3OTggXAorZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9HUEwtMS4wO21kNT1lOWUzNmE5ZGU3MzQxOTk1NjdhNGQ3Njk0OThmNzQzZCIKKworU1JDX1VSSSA9ICJodHRwczovL2NwYW4ubWV0YWNwYW4ub3JnL2F1dGhvcnMvaWQvRS9FVC9FVEhFUi9UZXN0LVdhcm5pbmdzLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImNkMDA3MzQyMDE3ZmVkZmIwMmQ2ZmRlNzU2MDJlNDczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI2ZmRhOWY4ZDI3OWU5NDNkMjdlNDNhNGEzYTVjZWE4YTY1OTJjZDM2ZTczMDg2OTVmOGRjNjYwMjI2MmMwZTAiCisKK1MgPSAiJHtXT1JLRElSfS9UZXN0LVdhcm5pbmdzLSR7UFZ9IgorCitpbmhlcml0IGNwYW4gYWxsYXJjaCBwdGVzdC1wZXJsCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L3B5dGhvbi1weWNvbm5tYW4vcHl0aG9uLXB5Y29ubm1hbi5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWNvbm5lY3Rpdml0eS9weXRob24tcHljb25ubWFuL3B5dGhvbi1weWNvbm5tYW4uaW5jCmluZGV4IGJlYjJiYWYuLjg1MTcwNzkgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L3B5dGhvbi1weWNvbm5tYW4vcHl0aG9uLXB5Y29ubm1hbi5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXB5Y29ubm1hbi9weXRob24tcHljb25ubWFuLmluYwpAQCAtNCw4ICs0LDggQEAKIAogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9M2I4M2VmOTYzODdmMTQ2NTVmYzg1NGRkYzNjNmJkNTciCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJiN2ZhODIwMzRiMWMwZTFmYjFiNTE4ZmZlM2JiNGZjMCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI0NmM2NGMwNjkyMDYzZmQwYzlmYjAyMTZkNDlmNzg4NGJlYzlmYTk3NjBkODQ3M2RiNGIxZTJmODE2MmZhYjRhIgorU1JDX1VSSVttZDVzdW1dID0gImQ2MGJkZmZiZDljOTIwZjAwNWZkYzVlMDVhOGI5NGNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQzYTYzYTAzOWM4MmIwOGExMTcxYjAwM2VhZmE2MmM2ZjEyOGFhNGVhYTFjZTdhNTVhOTQwMWI0OGY5YWQ5MjYiCiAKIGluaGVyaXQgcHlwaQogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWNvbm5lY3Rpdml0eS9weXRob24tcHljb25ubWFuL3B5dGhvbi1weWNvbm5tYW5fMC4xLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWNvbm5lY3Rpdml0eS9weXRob24tcHljb25ubWFuL3B5dGhvbi1weWNvbm5tYW5fMC4yLjAuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L3B5dGhvbi1weWNvbm5tYW4vcHl0aG9uLXB5Y29ubm1hbl8wLjEuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXB5Y29ubm1hbi9weXRob24tcHljb25ubWFuXzAuMi4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWNvbm5lY3Rpdml0eS9weXRob24tcHljb25ubWFuL3B5dGhvbjMtcHljb25ubWFuLzAwMDEtSW1wb3J0LWxvY2FsLW1vZHVsZXMtYnktcmVsYXRpdmUtcGF0aC1mb3ItcHl0aG9uMy1zdS5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L3B5dGhvbi1weWNvbm5tYW4vcHl0aG9uMy1weWNvbm5tYW4vMDAwMS1JbXBvcnQtbG9jYWwtbW9kdWxlcy1ieS1yZWxhdGl2ZS1wYXRoLWZvci1weXRob24zLXN1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzdiNGFhLi4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L3B5dGhvbi1weWNvbm5tYW4vcHl0aG9uMy1weWNvbm5tYW4vMDAwMS1JbXBvcnQtbG9jYWwtbW9kdWxlcy1ieS1yZWxhdGl2ZS1wYXRoLWZvci1weXRob24zLXN1LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotRnJvbSAyZTg0YWRiMDQyYmZiNzQyZWIzMjgyMjBiOTdmNzlkZGIyOGRiNDRiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSGFyaXMgT2thbm92aWMgPGhhcmlzLm9rYW5vdmljQG5pLmNvbT4KLURhdGU6IFR1ZSwgMjMgT2N0IDIwMTggMjE6Mzk6NTYgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gSW1wb3J0IGxvY2FsIG1vZHVsZXMgYnkgcmVsYXRpdmUgcGF0aCBmb3IgcHl0aG9uMyBzdXBwb3J0Ci0KLVVwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCi0tLS0KLSBweWNvbm5tYW4vYWdlbnQucHkgICAgICB8IDIgKy0KLSBweWNvbm5tYW4vaW50ZXJmYWNlLnB5ICB8IDIgKy0KLSBweWNvbm5tYW4vbWFuYWdlci5weSAgICB8IDIgKy0KLSBweWNvbm5tYW4vc2VydmljZS5weSAgICB8IDIgKy0KLSBweWNvbm5tYW4vdGVjaG5vbG9neS5weSB8IDIgKy0KLSA1IGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3B5Y29ubm1hbi9hZ2VudC5weSBiL3B5Y29ubm1hbi9hZ2VudC5weQotaW5kZXggZjcyZGU4ZC4uNDUzZDc4MyAxMDA2NDQKLS0tLSBhL3B5Y29ubm1hbi9hZ2VudC5weQotKysrIGIvcHljb25ubWFuL2FnZW50LnB5Ci1AQCAtMSw1ICsxLDUgQEAKLSBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKLS1mcm9tIGV4Y2VwdGlvbnMgaW1wb3J0IENvbm5DYW5jZWxlZEV4Y2VwdGlvbgotK2Zyb20gLmV4Y2VwdGlvbnMgaW1wb3J0IENvbm5DYW5jZWxlZEV4Y2VwdGlvbgotIAotIGltcG9ydCBkYnVzLnNlcnZpY2UKLSAKLWRpZmYgLS1naXQgYS9weWNvbm5tYW4vaW50ZXJmYWNlLnB5IGIvcHljb25ubWFuL2ludGVyZmFjZS5weQotaW5kZXggN2Q4MmUwNC4uZDU0MGM4MSAxMDA2NDQKLS0tLSBhL3B5Y29ubm1hbi9pbnRlcmZhY2UucHkKLSsrKyBiL3B5Y29ubm1hbi9pbnRlcmZhY2UucHkKLUBAIC00LDcgKzQsNyBAQCBpbXBvcnQgZGJ1cwotIGltcG9ydCB0eXBlcwotIGltcG9ydCBwcHJpbnQKLSAKLS1mcm9tIGV4Y2VwdGlvbnMgaW1wb3J0IENvbm5TaWduYWxOYW1lTm90UmVjb2duaXNlZEV4Y2VwdGlvbgotK2Zyb20gLmV4Y2VwdGlvbnMgaW1wb3J0IENvbm5TaWduYWxOYW1lTm90UmVjb2duaXNlZEV4Y2VwdGlvbgotIAotIAotIGRlZiB0cmFuc2xhdGVfdG9fZGJ1c190eXBlKHR5cGVvZiwgdmFsdWUpOgotZGlmZiAtLWdpdCBhL3B5Y29ubm1hbi9tYW5hZ2VyLnB5IGIvcHljb25ubWFuL21hbmFnZXIucHkKLWluZGV4IGY2ZjQwYTguLjAzMjQ0Y2MgMTAwNjQ0Ci0tLS0gYS9weWNvbm5tYW4vbWFuYWdlci5weQotKysrIGIvcHljb25ubWFuL21hbmFnZXIucHkKLUBAIC0xLDYgKzEsNiBAQAotIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwotIAotLWZyb20gaW50ZXJmYWNlIGltcG9ydCBDb25uSW50ZXJmYWNlCi0rZnJvbSAuaW50ZXJmYWNlIGltcG9ydCBDb25uSW50ZXJmYWNlCi0gCi0gCi0gY2xhc3MgQ29ubk1hbmFnZXIoQ29ubkludGVyZmFjZSk6Ci1kaWZmIC0tZ2l0IGEvcHljb25ubWFuL3NlcnZpY2UucHkgYi9weWNvbm5tYW4vc2VydmljZS5weQotaW5kZXggYmJjY2NlZC4uYzZiOTI0MSAxMDA2NDQKLS0tLSBhL3B5Y29ubm1hbi9zZXJ2aWNlLnB5Ci0rKysgYi9weWNvbm5tYW4vc2VydmljZS5weQotQEAgLTEsNiArMSw2IEBACi0gZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCi0gCi0tZnJvbSBpbnRlcmZhY2UgaW1wb3J0IENvbm5JbnRlcmZhY2UKLStmcm9tIC5pbnRlcmZhY2UgaW1wb3J0IENvbm5JbnRlcmZhY2UKLSAKLSAKLSBjbGFzcyBDb25uU2VydmljZShDb25uSW50ZXJmYWNlKToKLWRpZmYgLS1naXQgYS9weWNvbm5tYW4vdGVjaG5vbG9neS5weSBiL3B5Y29ubm1hbi90ZWNobm9sb2d5LnB5Ci1pbmRleCA0Nzc3MjI5Li5kMjViYWQ2IDEwMDY0NAotLS0tIGEvcHljb25ubWFuL3RlY2hub2xvZ3kucHkKLSsrKyBiL3B5Y29ubm1hbi90ZWNobm9sb2d5LnB5Ci1AQCAtMSw2ICsxLDYgQEAKLSBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKLSAKLS1mcm9tIGludGVyZmFjZSBpbXBvcnQgQ29ubkludGVyZmFjZQotK2Zyb20gLmludGVyZmFjZSBpbXBvcnQgQ29ubkludGVyZmFjZQotIAotIAotIGNsYXNzIENvbm5UZWNobm9sb2d5KENvbm5JbnRlcmZhY2UpOgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXB5Y29ubm1hbi9weXRob24zLXB5Y29ubm1hbl8wLjEuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L3B5dGhvbi1weWNvbm5tYW4vcHl0aG9uMy1weWNvbm5tYW5fMC4xLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYmJlOGIuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXB5Y29ubm1hbi9weXRob24zLXB5Y29ubm1hbl8wLjEuMC5iYgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotcmVxdWlyZSBweXRob24tcHljb25ubWFuLmluYwotCi1pbmhlcml0IHNldHVwdG9vbHMzCi0KLVNSQ19VUklfYXBwZW5kID0gIiBcCi0gICAgZmlsZTovLzAwMDEtSW1wb3J0LWxvY2FsLW1vZHVsZXMtYnktcmVsYXRpdmUtcGF0aC1mb3ItcHl0aG9uMy1zdS5wYXRjaCBcCi0iCi0KLVJERVBFTkRTXyR7UE59ICs9ICJweXRob24zLWRidXMgcHl0aG9uMy1wcHJpbnQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWNvbm5lY3Rpdml0eS9weXRob24tcHljb25ubWFuL3B5dGhvbjMtcHljb25ubWFuXzAuMi4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXB5Y29ubm1hbi9weXRob24zLXB5Y29ubm1hbl8wLjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGYzZmRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXB5Y29ubm1hbi9weXRob24zLXB5Y29ubm1hbl8wLjIuMC5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgcHl0aG9uLXB5Y29ubm1hbi5pbmMKKworaW5oZXJpdCBzZXR1cHRvb2xzMworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uMy1kYnVzIHB5dGhvbjMtcHByaW50IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXRocmlmdC9weXRob24tdGhyaWZ0XzAuMTEuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L3B5dGhvbi10aHJpZnQvcHl0aG9uLXRocmlmdF8wLjEzLjAuYmIKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXRocmlmdC9weXRob24tdGhyaWZ0XzAuMTEuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1jb25uZWN0aXZpdHkvcHl0aG9uLXRocmlmdC9weXRob24tdGhyaWZ0XzAuMTMuMC5iYgppbmRleCAxMGNmZjQyLi4yZDUxNjE5IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWNvbm5lY3Rpdml0eS9weXRob24tdGhyaWZ0L3B5dGhvbi10aHJpZnRfMC4xMS4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L3B5dGhvbi10aHJpZnQvcHl0aG9uLXRocmlmdF8wLjEzLjAuYmIKQEAgLTEsOSArMSw5IEBACiBTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIEFwYWNoZSBUaHJpZnQgUlBDIHN5c3RlbSIKIExJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1BLRy1JTkZPO21kNT1lMzY0MWFlMWEyNmNmNWMxMmEzYTcxYmQzMDMwYWIwZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1BLRy1JTkZPO21kNT1lOTVjZDJmMTdjNzBkMzE4MGEyYjM2MTMzMjMxOWZlMCIKIAotU1JDX1VSSVttZDVzdW1dID0gIjM2MTY1ZDVjODBlNmIxMDFkYmU5ZmNmN2VmNTI0ZDUxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkNTlhYzRmZGNiMmM1ODAzN2ViZDRhOWRhNWY5YTQ5ZTNlMDM0YmY3NWIzZjI2ZDlmZTQ4YmEzZDg4MDZlNmIiCitTUkNfVVJJW21kNXN1bV0gPSAiYzNiYzhkOWE5MTBkMmM5Y2UyNmYyYWQxZjdjOTY3NjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWFmMWM4NmJmNzM0MzNhZmM2MDEwZWQzNzZhNmM2YWNhMmI1NDA5OWNjMGQ2MTg5NWY2NDA4NzBhOWFlN2Q4OSIKIAogaW5oZXJpdCBweXBpIHNldHVwdG9vbHMKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFsZW1iaWMuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFsZW1iaWMuaW5jCmluZGV4IDgyNDU2NzYuLmM5NGMxNDIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hbGVtYmljLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYWxlbWJpYy5pbmMKQEAgLTIsOCArMiw4IEBACiBMSUNFTlNFID0gIk1JVCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTI4YWFmMTRhNjU5MmQxNGRiZmIyZjRhYmQ1OTdhYTI3IgogCi1TUkNfVVJJW21kNXN1bV0gPSAiODFlYzNkZTllMmQ5YzM4OTY1N2Y1MWJkYzBkMjQ5ODQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTZjNmE0MjQzZTg5YzhkM2UyMzQyYTE1NjJiMjM4OGYzYjUyNGM5Y2FjMmZjY2M0ZDJjNDYxYTEzMjBjYzFjMSIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZDc1ODRhOGZiMDIwM2VjODJiOTBiYWE3MjZkMmJkOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYjBjYjE5NDg4MzNlMDYyZjQwNDg5OTJmYmM5N2VjZmFhYWFjMjRhYWEwZDgzYTEyMDJhOTlmYjU4YWY4YzZkIgogCiBQWVBJX1BBQ0tBR0UgPSAiYWxlbWJpYyIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFsZW1iaWNfMS4zLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYWxlbWJpY18xLjMuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFsZW1iaWNfMS4zLjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hbGVtYmljXzEuMy4yLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXNuMWNyeXB0by5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXNuMWNyeXB0by5pbmMKaW5kZXggOWI4YzFjYi4uZGU2ZTFhNSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzbjFjcnlwdG8uaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc24xY3J5cHRvLmluYwpAQCAtNiw4ICs2LDggQEAKIAogUFlQSV9QQUNLQUdFID0gImFzbjFjcnlwdG8iCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJmYzM4MTVjZGQ0ODEyNTA1ZTNlZTI5Nzc0MGM1ZjVkMyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4NzYyMDg4MGE0NzcxMjNlMDExNzdhMWY3M2QwZjMyNzIxMGI0M2EzY2RiZDcxNGVmY2QyZmE0OWE4ZDdiMzg0IgorU1JDX1VSSVttZDVzdW1dID0gImRhYWQxMTI5NDAxODE5MTdlM2ZmMTY5YjQ3YjliZDlhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhMjE1Y2I4ZGMxMmY4OTIyNDRlM2ExMTNmZTA1Mzk3ZWUyM2M1YzRjYTdhNjljZDZlNjk4MTE3NTVlZmM0MmQiCiAKIGluaGVyaXQgcHlwaQogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXNuMWNyeXB0b18xLjIuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc24xY3J5cHRvXzEuMy4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXNuMWNyeXB0b18xLjIuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzbjFjcnlwdG9fMS4zLjAuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1iYWNrcG9ydHMtZnVuY3Rvb2xzLWxydS1jYWNoZS5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYmFja3BvcnRzLWZ1bmN0b29scy1scnUtY2FjaGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZTQ0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYmFja3BvcnRzLWZ1bmN0b29scy1scnUtY2FjaGUuaW5jCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQmFja3BvcnQgb2YgZnVuY3Rvb2xzLmxydV9jYWNoZSBmcm9tIFB5dGhvbiAzLjMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vamFyYWNvL2JhY2twb3J0cy5mdW5jdG9vbHNfbHJ1X2NhY2hlIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NldHVwLnB5O2JlZ2lubGluZT01NztlbmRsaW5lPTU3O21kNT05OGZjMzY1OGU1OTcwZDI2ZjZiMjEwOTgwOGM3NjZiZSIKKworUFlQSV9QQUNLQUdFID0gImJhY2twb3J0cy5mdW5jdG9vbHNfbHJ1X2NhY2hlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjBmNTNmNTRjZDNmMDRiMzM0NmNlNzVhNTQ5NTk3NTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWQ5ODY5N2YwODhlYjFiMGZhNDUxMzkxZjkxYWZiNWUzZWJkZTE2YmJkYjI3MjgxOWZkMDkxMTUxZmRhNGYxYSIKKworREVQRU5EUyArPSAiJHtQWVRIT05fUE59LXNldHVwdG9vbHMtc2NtLW5hdGl2ZSIKKworaW5oZXJpdCBweXBpCisKK1JERVBFTkRTXyR7UE59ICs9ICJcCisgICAgJHtQWVRIT05fUE59LXBpY2tsZSBcCisgICAgJHtQWVRIT05fUE59LXRocmVhZGluZyBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWJhY2twb3J0cy1mdW5jdG9vbHMtbHJ1LWNhY2hlXzEuNS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1iYWNrcG9ydHMtZnVuY3Rvb2xzLWxydS1jYWNoZV8xLjUuYmIKaW5kZXggODI1NDQ0Zi4uNWUwZjJmMSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWJhY2twb3J0cy1mdW5jdG9vbHMtbHJ1LWNhY2hlXzEuNS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYmFja3BvcnRzLWZ1bmN0b29scy1scnUtY2FjaGVfMS41LmJiCkBAIC0xLDE5ICsxLDIgQEAKLVNVTU1BUlkgPSAiQmFja3BvcnQgb2YgZnVuY3Rvb2xzLmxydV9jYWNoZSBmcm9tIFB5dGhvbiAzLjMiCi1IT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vamFyYWNvL2JhY2twb3J0cy5mdW5jdG9vbHNfbHJ1X2NhY2hlIgotU0VDVElPTiA9ICJkZXZlbC9weXRob24iCi1MSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NldHVwLnB5O2JlZ2lubGluZT01NztlbmRsaW5lPTU3O21kNT05OGZjMzY1OGU1OTcwZDI2ZjZiMjEwOTgwOGM3NjZiZSIKLQotUFlQSV9QQUNLQUdFID0gImJhY2twb3J0cy5mdW5jdG9vbHNfbHJ1X2NhY2hlIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMjBmNTNmNTRjZDNmMDRiMzM0NmNlNzVhNTQ5NTk3NTQiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWQ5ODY5N2YwODhlYjFiMGZhNDUxMzkxZjkxYWZiNWUzZWJkZTE2YmJkYjI3MjgxOWZkMDkxMTUxZmRhNGYxYSIKLQotREVQRU5EUyArPSAicHl0aG9uLXNldHVwdG9vbHMtc2NtLW5hdGl2ZSIKLQotaW5oZXJpdCBzZXR1cHRvb2xzIHB5cGkKLQotUkRFUEVORFNfJHtQTn0gKz0gIlwKLSAgICAke1BZVEhPTl9QTn0tcGlja2xlIFwKLSAgICAke1BZVEhPTl9QTn0tdGhyZWFkaW5nIFwKLSAgICAiCityZXF1aXJlIHB5dGhvbi1iYWNrcG9ydHMtZnVuY3Rvb2xzLWxydS1jYWNoZS5pbmMKK2luaGVyaXQgc2V0dXB0b29scwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWJlYXV0aWZ1bHNvdXA0LmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1iZWF1dGlmdWxzb3VwNC5pbmMKaW5kZXggYWNmNTJkZC4uM2U5NWJiNyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWJlYXV0aWZ1bHNvdXA0LmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYmVhdXRpZnVsc291cDQuaW5jCkBAIC0zLDE1ICszLDE1IEBACiBMSUNFTlNFID0gIk1JVCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcudHh0O21kNT1mMmQzOGQ4YTQwYmY3M2ZkNGIzZDE2Y2EyZTU4ODJkMSIKIAotU1JDX1VSSVttZDVzdW1dID0gImJlMDNkNzc4Y2Y2MWNmNjczNGE0ODBlMjAxMGQ2NjU3IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxMzVkYjJiYTY3ODE2OGMwNzk1MGY5YTE2YzQwMzE4MjJjNmY0YWVjNzVhNjVlMGE5N2JjNWNhMDk3ODk5MzEiCitTUkNfVVJJW21kNXN1bV0gPSAiNWRiZGI1NmMwMDllNDYzMmJhZTdiZWQxYjM4NTgwNGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDVmZDgyNWViMDFjMjkwODc3NjU3YTU2ZGY0YzZlNGMzMTFiMzk2NWJkYTc5MGM2MTNhM2Q2ZmIwMWE1NDYyYSIKIAogaW5oZXJpdCBweXBpCiAKLVJERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCA9ICJcCi0gICAgJHtQWVRIT05fUE59LWNvcmUgXAorUkRFUEVORFNfJHtQTn0gPSAiXAogICAgICR7UFlUSE9OX1BOfS1odG1sNWxpYiBcCiAgICAgJHtQWVRIT05fUE59LWx4bWwgXAorICAgICR7UFlUSE9OX1BOfS1zb3Vwc2lldmUgXAogIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYmVhdXRpZnVsc291cDRfNC44LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYmVhdXRpZnVsc291cDRfNC44LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1iZWF1dGlmdWxzb3VwNF80LjguMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWJlYXV0aWZ1bHNvdXA0XzQuOC4yLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYml0YXJyYXkuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWJpdGFycmF5LmluYwppbmRleCBkYTVkMTFmLi4zMmRhMzQ4IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYml0YXJyYXkuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1iaXRhcnJheS5pbmMKQEAgLTEsMTAgKzEsMTAgQEAKIFNVTU1BUlkgPSAiQSBoaWdoLWxldmVsIFB5dGhvbiBlZmZpY2llbnQgYXJyYXlzIG9mIGJvb2xlYW5zIC0tIEMgZXh0ZW5zaW9uIgogSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2lsYW5zY2huZWxsL2JpdGFycmF5IgogTElDRU5TRSA9ICJQU0YiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTzttZDU9MDBmMGQxMmNjYWY0ZTZiMGI0ZmU1MDE2NjM2MjFmYTMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTzttZDU9ZGMzMDFhMjVlYmUyMTBkY2M1M2IwYTJkNWEwMzhlYWUiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI3NDNkMzk2YTEwMTJkNmY3ZDc5MWQ4YTUyNmRhMzAyZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZjU3ODMxNGM3ODA4ZWIxNDE2NjIwZGM3ZDc5NzdkNDc4N2E2NWE0ZjYxYjRjOTY4NTM0M2E4NjA3MTI2MTViIgorU1JDX1VSSVttZDVzdW1dID0gImE0NmJmODY5ZjZhZGYzNGY1YjBkYzgyYjQ2OTc5M2I3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJlZDY3NWY0NjBiYjBkM2Q2NmZkODA0MmE2ZjFmMGQzNmNmMjEzZTUyZTcyYTc0NTI4M2RkYjI0NWRhN2I5Y2YiCiAKIGluaGVyaXQgcHlwaQogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYml0YXJyYXlfMS4xLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYml0YXJyYXlfMS4yLjEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1iaXRhcnJheV8xLjEuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWJpdGFycmF5XzEuMi4xLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYm9vbGVhbnB5LmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ib29sZWFucHkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWQ3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYm9vbGVhbnB5LmluYwpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkRlZmluZSBib29sZWFuIGFsZ2VicmFzLCBjcmVhdGUgYW5kIHBhcnNlIGJvb2xlYW4gZXhwcmVzc2lvbnMgYW5kIGNyZWF0ZSBjdXN0b20gYm9vbGVhbiBEU0wiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vYmFzdGlrci9ib29sZWFuLnB5IgorCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT1lMzE5NzQ3YTVlYjk0Y2RkZjY0NjAzN2MwMWRkYmE0NyIKKworU1JDX1VSSVttZDVzdW1dID0gIjExODlkMTE1YTM4Zjg0ZjVkZjc0MzAxNDkyNmE5MTU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJkMTliNDEyNDM1NjExZWNjNzEyNjAzZDBmZDdkMGUyODBlMjQ2OThlN2E2ZTNkNWY2MTA0NzM4NzBjNWRkMWUiCisKK1BZUElfUEFDS0FHRSA9ICJib29sZWFuLnB5IgorCitpbmhlcml0IHB5cGkKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWNhY2hldG9vbHMuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWNhY2hldG9vbHMuaW5jCmluZGV4IDljNzkzODAuLmYzZDNiYzYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jYWNoZXRvb2xzLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY2FjaGV0b29scy5pbmMKQEAgLTEwLDcgKzEwLDcgQEAKIAogaW5oZXJpdCBweXBpCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI5MWFhOWI2MTFiNjM0NTE1NGRmODRlOGUzNzc0NmY0MSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZWEyZDNjZTk3ODUwZjMxZTRhMDhiMGUyYjVlNmMzNDk5N2Q3MjE2YTlkMmM5OGUwZjM5Nzg2MzBkNGRhNjlhIgorU1JDX1VSSVttZDVzdW1dID0gIjZhODhkZjEzNDY3ZTgwZWI2MWRkMmJlZGFkMTliODNjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhNTJkZDk3YTg1ZjI1N2Y0ZTQxMjdmMTU4MThlNzFhMGM3ODk5ZjEyMWIzNDU5MWZjYzExNzNlYTc5YTAxOTgiCiAKIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jYWNoZXRvb2xzXzMuMS4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWNhY2hldG9vbHNfNC4wLjAuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jYWNoZXRvb2xzXzMuMS4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY2FjaGV0b29sc180LjAuMC5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWNlcnRpZmkuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWNlcnRpZmkuaW5jCmluZGV4IGRlMDJkOWEuLjk4ZmExZjIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jZXJ0aWZpLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY2VydGlmaS5pbmMKQEAgLTcsNyArNyw3IEBACiBMSUNFTlNFID0gIklTQyIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWY3N2Y2MWQxNGVlNmZlYWM0MjI4ZDNlYmQyNmNjMWYxIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiY2FkZDRlMzczZmMwOGY2NDlmYTM5YjgyYWVkOWFkOTYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTRmMzYyMGNmZWE0ZjgzZWVkYzk1YjI0YWJkOWNkNTZmM2M0YjE0NmRkMDE3N2U4M2EyMWI0ZWI0OWUyMWU1MCIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZDUyMjljNGQ5ZjBhNGE3OTEwNmY5ZTJjMmNmZDM4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNWI2NGM3ZGE0Y2Q3NDc5NTk0ZDAzNWMwOGMyZDgwOWViNGFhYjNhMjZlNWE5OTBlYTk4Y2M0NTBjMzIwZjFmIgogCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY2VydGlmaV8yMDE5LjkuMTEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY2VydGlmaV8yMDE5LjExLjI4LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY2VydGlmaV8yMDE5LjkuMTEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jZXJ0aWZpXzIwMTkuMTEuMjguYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jbWQyLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jbWQyLmluYwppbmRleCAzYTZiZjU0Li5jZWFhMTgxIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY21kMi5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWNtZDIuaW5jCkBAIC0zLDggKzMsOCBAQAogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wMWFlYWJlYTdhZTE1MjlhOGU0YjY3NGI3MTA3ZDZiYyIKIAotU1JDX1VSSVttZDVzdW1dID0gIjIwZjNmNzZiMmFhZjM2YTE3MzcyNzE3YjQ2OWNhOTY5IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImM4MTI4NDA4M2Q5OTNhZjE4YjhmZWY1N2Q4OWQ4NTRkNDlkMDUxZDRjMmM4YThlMTJkMDI4MWUzNjlhYzM2ODIiCitTUkNfVVJJW21kNXN1bV0gPSAiOTBkY2NhYjNhMjAxMDZjNTQzZWY4NWQyYmVlNzIwYmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmEyNDRiMDdjMGI0NjVmZjU0YTY4MzhkYzYxOTE5NTk5MTQxZGM5MmRlMWJmMDBiYjBhNzA4NzUxODkxNTVlNiIKIAogaW5oZXJpdCBweXBpCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jbWQyXzAuOS4xOS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jbWQyXzAuOS4yMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWNtZDJfMC45LjE5LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY21kMl8wLjkuMjIuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jb2xvcmVkbG9ncy5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tY29sb3JlZGxvZ3MuaW5jCmluZGV4IGY0M2JlYTEuLmJkYjFkNzUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1jb2xvcmVkbG9ncy5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWNvbG9yZWRsb2dzLmluYwpAQCAtMTAsNyArMTAsNyBAQAogaW5oZXJpdCBweXBpCiAKIGRvX2NvbXBpbGVfcHJlcGVuZCgpIHsKLSAgICBzZWQgLWllICJzL2ZpbmRfcHRoX2RpcmVjdG9yeSgpLC8nJywvZyIgc2V0dXAucHkKKyAgICBzZWQgLWllICJzL2ZpbmRfcHRoX2RpcmVjdG9yeSgpLC8nJywvZyIgJHtTfS9zZXR1cC5weQogfQogCiBkb19pbnN0YWxsX2FwcGVuZCgpIHsKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4xMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4xNC5iYgpzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZGJ1c18xLjIuMTIuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4xNC5iYgppbmRleCBmMDhmYTIwLi5iODlkN2QyIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZGJ1c18xLjIuMTIuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRidXNfMS4yLjE0LmJiCkBAIC05LDggKzksOCBAQAogU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy1weXRob24vZGJ1cy1weXRob24tJHtQVn0udGFyLmd6IFwKICIKIAotU1JDX1VSSVttZDVzdW1dID0gIjQyOGI3YTllN2UyZDE1NGE3Y2ViM2UxMzUzNjI4M2U0IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImNkZDRkZTJjNGY1ZTU4ZjI4N2IxMjAxM2VkN2I0MWRlZTgxZDUwM2M4ZDBkMjM5N2M1YmQyZmIwMWJhZGYyNjAiCitTUkNfVVJJW21kNXN1bV0gPSAiYzg3MzkyMzRmY2E5ZmJhMjYzNjhkMWEzMzdhYmU4MzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjEwMjA2YmEzZGQ2NDFlNGU0NjQxMWFiOTE0NzFjODhlMGVlYzE3NDk4NjBlNDI4NTE5M2VlNjhkZjg0YWMzMSIKIFMgPSAiJHtXT1JLRElSfS9kYnVzLXB5dGhvbi0ke1BWfSIKIAogaW5oZXJpdCBkaXN0dXRpbHMtYmFzZSBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZW5naW5laW8uaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWVuZ2luZWlvLmluYwppbmRleCAxMzQ3MTMwLi41N2I3YjE4IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZW5naW5laW8uaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1lbmdpbmVpby5pbmMKQEAgLTksNSArOSw1IEBACiAKIFBZUElfUEFDS0FHRSA9ICJweXRob24tZW5naW5laW8iCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJiZWMzYjA2YTExMmE3ZjA5YTBhOWM5MmI2MjcyODJmZSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5YzlhNjAzNWI0YjVlNWEyMjVmNDI2Zjg0NmFmYTE0Y2Y2MjdmNzU3MWQxYWUwMjE2N2NiNzAzZmVmZDEzNGI3IgorU1JDX1VSSVttZDVzdW1dID0gIjMyN2MxNmNhMDVlOWIwY2M0Zjk5NGI5ZDM1YzdmN2Q3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUwZDEwOGZjN2ZlYjdmOTcwZTZlYmM4NjczMzc1MmViZDcxNDU0NWJiNTYyMjM4M2U2MTM1YmRhZDQ1ZmM5ZmUiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZW5naW5laW9fMy4xMC4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWVuZ2luZWlvXzMuMTEuMS5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWVuZ2luZWlvXzMuMTAuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWVuZ2luZWlvXzMuMTEuMS5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWV2ZGV2LmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ldmRldi5pbmMKaW5kZXggOTUzMDk0Yi4uYTUzNjgxNSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWV2ZGV2LmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZXZkZXYuaW5jCkBAIC0zLDYgKzMsMTAgQEAKIExJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MThkZWJkZGJiM2Y1MmM2NjFhMTI5NzI0YTg4M2E4ZTIiCiAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L3B5dGhvbi1ldmRldjoiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtb24tMzJiaXQtYXJjaGVzLXdpdGgtNjRiaXQtdGltZV90LnBhdGNoIgorCiBTUkNfVVJJW21kNXN1bV0gPSAiNTNlNDQwOTQzZGZhMjUxNGY5NWIzYzQ0OGQ2YTM2Y2IiCiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjAzZjVlMWJlNWI0YTUzMjc0OTRhOTgxYjgzMWQyNTFhMTQyYjA5ZTg3NzhlZGExYThiNTNlYmE5MTEwMDE2NiIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWV2ZGV2LzAwMDEtRml4LWJ1aWxkLW9uLTMyYml0LWFyY2hlcy13aXRoLTY0Yml0LXRpbWVfdC5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ldmRldi8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU0MTcyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ldmRldi8wMDAxLUZpeC1idWlsZC1vbi0zMmJpdC1hcmNoZXMtd2l0aC02NGJpdC10aW1lX3QucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbSA0MzVlNzhhYWY2NzQ1ZTRkYTBmZTNkNDQ1NTQ3MzAxMTYyNmM3N2QxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMzAgTm92IDIwMTkgMTE6MjE6MjAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGJ1aWxkIG9uIDMyYml0IGFyY2hlcyB3aXRoIDY0Yml0IHRpbWVfdAorCit0aW1lIGVsZW1lbnQgaXMgZGVwcmVjYXRlZCBvbiBuZXcgaW5wdXRfZXZlbnQgc3RydWN0dXJlIGluIGtlcm5lbCdzCitpbnB1dC5oIFsxXQorCitbMV0gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L2NvbW1pdD9pZD0xNTIxOTRmZTljM2YKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9ndmFsa292L3B5dGhvbi1ldmRldi9wdWxsLzExMl0KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBldmRldi9pbnB1dC5jICB8IDEzICsrKysrKysrKy0tLS0KKyBldmRldi91aW5wdXQuYyB8ICA5ICsrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V2ZGV2L2lucHV0LmMgYi9ldmRldi9pbnB1dC5jCitpbmRleCA2N2I5MzQ4Li40MzJkYjkyIDEwMDY0NAorLS0tIGEvZXZkZXYvaW5wdXQuYworKysrIGIvZXZkZXYvaW5wdXQuYworQEAgLTI0LDYgKzI0LDExIEBACisgI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisgI2VuZGlmCisgCisrI2lmbmRlZiBpbnB1dF9ldmVudF9zZWMKKysjZGVmaW5lIGlucHV0X2V2ZW50X3NlYyB0aW1lLnR2X3NlYworKyNkZWZpbmUgaW5wdXRfZXZlbnRfdXNlYyB0aW1lLnR2X3VzZWMKKysjZW5kaWYKKysKKyAjZGVmaW5lIE1BWF9OQU1FX1NJWkUgMjU2CisgCisgZXh0ZXJuIGNoYXIqICBFVl9OQU1FW0VWX0NOVF07CitAQCAtNjAsOCArNjUsOCBAQCBkZXZpY2VfcmVhZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgfQorIAorLSAgICBQeU9iamVjdCogc2VjICA9IFB5TG9uZ19Gcm9tTG9uZyhldmVudC50aW1lLnR2X3NlYyk7CistICAgIFB5T2JqZWN0KiB1c2VjID0gUHlMb25nX0Zyb21Mb25nKGV2ZW50LnRpbWUudHZfdXNlYyk7CisrICAgIFB5T2JqZWN0KiBzZWMgID0gUHlMb25nX0Zyb21Mb25nKGV2ZW50LmlucHV0X2V2ZW50X3NlYyk7CisrICAgIFB5T2JqZWN0KiB1c2VjID0gUHlMb25nX0Zyb21Mb25nKGV2ZW50LmlucHV0X2V2ZW50X3VzZWMpOworICAgICBQeU9iamVjdCogdmFsICA9IFB5TG9uZ19Gcm9tTG9uZyhldmVudC52YWx1ZSk7CisgICAgIFB5T2JqZWN0KiBweV9pbnB1dF9ldmVudCA9IE5VTEw7CisgCitAQCAtMTAyLDggKzEwNyw4IEBAIGRldmljZV9yZWFkX21hbnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorIAorICAgICAvLyBDb25zdHJ1Y3QgYSBsaXN0IG9mIGV2ZW50IHR1cGxlcywgd2hpY2ggd2UnbGwgbWFrZSBzZW5zZSBvZiBpbiBQeXRob24KKyAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBucmVhZC9ldmVudF9zaXplIDsgaSsrKSB7CistICAgICAgICBzZWMgID0gUHlMb25nX0Zyb21Mb25nKGV2ZW50W2ldLnRpbWUudHZfc2VjKTsKKy0gICAgICAgIHVzZWMgPSBQeUxvbmdfRnJvbUxvbmcoZXZlbnRbaV0udGltZS50dl91c2VjKTsKKysgICAgICAgIHNlYyAgPSBQeUxvbmdfRnJvbUxvbmcoZXZlbnRbaV0uaW5wdXRfZXZlbnRfc2VjKTsKKysgICAgICAgIHVzZWMgPSBQeUxvbmdfRnJvbUxvbmcoZXZlbnRbaV0uaW5wdXRfZXZlbnRfdXNlYyk7CisgICAgICAgICB2YWwgID0gUHlMb25nX0Zyb21Mb25nKGV2ZW50W2ldLnZhbHVlKTsKKyAKKyAgICAgICAgIHB5X2lucHV0X2V2ZW50ID0gUHlfQnVpbGRWYWx1ZSgiT09oaE8iLCBzZWMsIHVzZWMsIGV2ZW50W2ldLnR5cGUsIGV2ZW50W2ldLmNvZGUsIHZhbCk7CitkaWZmIC0tZ2l0IGEvZXZkZXYvdWlucHV0LmMgYi9ldmRldi91aW5wdXQuYworaW5kZXggMTkyNTY4ZC4uNTZmZTg2YyAxMDA2NDQKKy0tLSBhL2V2ZGV2L3VpbnB1dC5jCisrKysgYi9ldmRldi91aW5wdXQuYworQEAgLTE2LDYgKzE2LDEwIEBACisgI2luY2x1ZGUgPGxpbnV4L3VpbnB1dC5oPgorICNlbmRpZgorIAorKyNpZm5kZWYgaW5wdXRfZXZlbnRfc2VjCisrI2RlZmluZSBpbnB1dF9ldmVudF9zZWMgdGltZS50dl9zZWMKKysjZGVmaW5lIGlucHV0X2V2ZW50X3VzZWMgdGltZS50dl91c2VjCisrI2VuZGlmCisgCisgLy8gV29ya2Fyb3VuZCBmb3IgaW5zdGFsbGluZyBvbiBrZXJuZWxzIG5ld2VyIHRoYW4gNC40LgorICNpZm5kZWYgRkZfTUFYX0VGRkVDVFMKK0BAIC0yMzIsOCArMjM2LDExIEBAIHVpbnB1dF93cml0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgIGlmICghcmV0KSByZXR1cm4gTlVMTDsKKyAKKyAgICAgc3RydWN0IGlucHV0X2V2ZW50IGV2ZW50OworKyAgICBzdHJ1Y3QgdGltZXZhbCB0dmFsOworICAgICBtZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKKy0gICAgZ2V0dGltZW9mZGF5KCZldmVudC50aW1lLCAwKTsKKysgICAgZ2V0dGltZW9mZGF5KCZ0dmFsLCAwKTsKKysgICAgZXZlbnQuaW5wdXRfZXZlbnRfdXNlYyA9IHR2YWwudHZfdXNlYzsKKysgICAgZXZlbnQuaW5wdXRfZXZlbnRfc2VjID0gdHZhbC50dl9zZWM7CisgICAgIGV2ZW50LnR5cGUgPSB0eXBlOworICAgICBldmVudC5jb2RlID0gY29kZTsKKyAgICAgZXZlbnQudmFsdWUgPSB2YWx1ZTsKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1odG1sMnRleHQuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWh0bWwydGV4dC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4ZGNlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1odG1sMnRleHQuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiQ29udmVydCBIVE1MIHRvIE1hcmtkb3duLWZvcm1hdHRlZCB0ZXh0IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL0FsaXIzejQvaHRtbDJ0ZXh0IgorCitMSUNFTlNFID0gIkdQTC0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSVttZDVzdW1dID0gIjIxYWFkN2VjOTViNzA2MDYwMjRiNzgzYzgyNTM4OTljIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1MTZiOWMxMDI4NDE3NGUyYTk3NGQ4NmY5MWNhYjAyYjNjZjk4M2ExNzc1MjA3NWRhNzUxYWYwZTg5NWVmNWUiCisKK2luaGVyaXQgcHlwaQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taXBhZGRyZXNzLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pcGFkZHJlc3MuaW5jCmluZGV4IGEyMzAyMDYuLjEyOWNmMjIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pcGFkZHJlc3MuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pcGFkZHJlc3MuaW5jCkBAIC0zLDggKzMsNiBAQAogTElDRU5TRSA9ICJQeXRob24tMi4wIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9N2Y1Mzg1ODRjYzM0MDdiZjc2MDQyZGVmNzE2ODU0OGEiCiAKLURFUEVORFMgKz0gIiR7UFlUSE9OX1BOfS1waXAiCi0KIFNSQ19VUklbbWQ1c3VtXSA9ICJhYWVlNjdhODAyNjc4MmFmMTgzMTE0OGJlYjBkOTA2MCIKIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJiN2Y4ZTAzNjk1ODBiYjRhMjRkNWJhMWQ3Y2MyOTY2MGE0YTY5ODc3NjNmYWYxZDhhODA0NjgzMGUwMjBlN2UyIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tanNvbnBvaW50ZXIuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWpzb25wb2ludGVyLmluYwppbmRleCBkMzZmMDI5Li5iNmU0ODM2IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tanNvbnBvaW50ZXIuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1qc29ucG9pbnRlci5pbmMKQEAgLTExLDMgKzExLDUgQEAKIFJERVBFTkRTXyR7UE59ICs9ICIgXAogICAgICR7UFlUSE9OX1BOfS1qc29uIFwKICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWpzb25zY2hlbWEuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWpzb25zY2hlbWEuaW5jCmluZGV4IDI1OGJlYWQuLjgxMzViMGYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1qc29uc2NoZW1hLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tanNvbnNjaGVtYS5pbmMKQEAgLTcsMTAgKzcsOCBAQAogCiBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9weXRob24tanNvbnNjaGVtYToiCiAKLVNSQ19VUklfYXBwZW5kID0gIiBmaWxlOi8vMDAwMS1zZXR1cC5jZmctYWRkLW5vbi1HUEwtZm9ybWF0LW9wdGlvbi5wYXRjaCIKLQotU1JDX1VSSVttZDVzdW1dID0gImE4MDJhYjg1NjAwMDc0YTcyNmVmNmFjYzRlNmE4MTQ4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmYTA2ODQyNzZiNjMzM2ZmM2MwYjFiMjcwODFmNGIyMzA1ZjBhMzZjZjcwMmEyM2RiNTBlZGIxNDE4OTNjM2YiCitTUkNfVVJJW21kNXN1bV0gPSAiZjFhMGI1MDExZjA1YTAyYThkZWUxMDcwY2QxMGEyNmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzhhODViMjhkMzc3Y2M3NzM3ZTQ2ZTJkOWYyYjRmNDRlZTNjMGUxZGVhYzZiZjQ2ZGRlZmM3MTg3ZDMwNzk3YSIKIAogUEFDS0FHRUNPTkZJRyA/Pz0gImZvcm1hdCIKIFBBQ0tBR0VDT05GSUdbZm9ybWF0XSA9ICIsLCxcCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tanNvbnNjaGVtYS8wMDAxLXNldHVwLmNmZy1hZGQtbm9uLUdQTC1mb3JtYXQtb3B0aW9uLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWpzb25zY2hlbWEvMDAwMS1zZXR1cC5jZmctYWRkLW5vbi1HUEwtZm9ybWF0LW9wdGlvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjMzhhMy4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tanNvbnNjaGVtYS8wMDAxLXNldHVwLmNmZy1hZGQtbm9uLUdQTC1mb3JtYXQtb3B0aW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotRnJvbSA4ZGYwMzMyNDc1OTkxODg0YjhlMTgwMWQzMWY5YzNlMDZkMDZiZjlmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogTmljb2xhIEx1bmdoaSA8bmljazgzb2xhQGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTQgTm92IDIwMTkgMTg6NTg6NTYgKzAwMDAKLVN1YmplY3Q6IFtQQVRDSF0gc2V0dXAuY2ZnOiBhZGQgbm9uIEdQTCBmb3JtYXQgb3B0aW9uCi0KLVRoaXMgaXMgYSByZXdyaXRlIG9mIHRoZSBmb2xsb3dpbmcgdXBzdHJlYW0gY29tbWl0czoKLQotIC0gMTBmOGEzZSBBZGQgZm9ybWF0IHZhbGlkYXRvcnMgYXMgc2VwYXJhdGUgbW9kdWxlcwotIC0gYWYzNzcwNyBub24gR1BMIGZvcm1hdCBvcHRpb24KLQotcmVtb3ZpbmcgYWxsIHRoZSBub24gbmVjZXNzYXJ5IGJpdHMgKHRveCBpbiBwYXJ0aWN1bGFyKQotCi1PcmlnaW5hbCBhdXRob3I6IE5pY29sYXMgQWltZXR0aSA8bmFpbWV0dGlAeWFob28uY29tLmFyPgotCi1VcHN0cmVhbS1zdGF0dXM6IEJhY2twb3J0ZWQuIFsgdG8gYmUgcmVtb3ZlZCBmb3IgcmVsZWFzZXMgPiAzLjEuMSBdCi0tLS0KLSBqc29uc2NoZW1hL19mb3JtYXQucHkgfCAzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KLSBzZXR1cC5jZmcgICAgICAgICAgICAgfCAgNiArKysrKysKLSAyIGZpbGVzIGNoYW5nZWQsIDM0IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9qc29uc2NoZW1hL19mb3JtYXQucHkgYi9qc29uc2NoZW1hL19mb3JtYXQucHkKLWluZGV4IGFhMDQwOTAuLmM5NjdkOTggMTAwNjQ0Ci0tLS0gYS9qc29uc2NoZW1hL19mb3JtYXQucHkKLSsrKyBiL2pzb25zY2hlbWEvX2Zvcm1hdC5weQotQEAgLTI0OCw3ICsyNDgsMjYgQEAgZWxzZToKLSB0cnk6Ci0gICAgIGltcG9ydCByZmMzOTg3Ci0gZXhjZXB0IEltcG9ydEVycm9yOgotLSAgICBwYXNzCi0rICAgIHRyeToKLSsgICAgICAgIGZyb20gcmZjMzk4Nl92YWxpZGF0b3IgaW1wb3J0IHZhbGlkYXRlX3JmYzM5ODYKLSsgICAgZXhjZXB0IEltcG9ydEVycm9yOgotKyAgICAgICAgcGFzcwotKyAgICBlbHNlOgotKyAgICAgICAgQF9jaGVja3NfZHJhZnRzKG5hbWU9InVyaSIsKQotKyAgICAgICAgZGVmIGlzX3VyaShpbnN0YW5jZSk6Ci0rICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5zdGFuY2UsIHN0cl90eXBlcyk6Ci0rICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0rICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlX3JmYzM5ODYoaW5zdGFuY2UsIHJ1bGU9IlVSSSIpCi0rCi0rICAgICAgICBAX2NoZWNrc19kcmFmdHMoCi0rICAgICAgICAgICAgZHJhZnQ2PSJ1cmktcmVmZXJlbmNlIiwKLSsgICAgICAgICAgICBkcmFmdDc9InVyaS1yZWZlcmVuY2UiLAotKyAgICAgICAgICAgIHJhaXNlcz1WYWx1ZUVycm9yLAotKyAgICAgICAgKQotKyAgICAgICAgZGVmIGlzX3VyaV9yZWZlcmVuY2UoaW5zdGFuY2UpOgotKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGluc3RhbmNlLCBzdHJfdHlwZXMpOgotKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotKyAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZV9yZmMzOTg2KGluc3RhbmNlLCBydWxlPSJVUklfcmVmZXJlbmNlIikKLSBlbHNlOgotICAgICBAX2NoZWNrc19kcmFmdHMoZHJhZnQ3PSJpcmkiLCByYWlzZXM9VmFsdWVFcnJvcikKLSAgICAgZGVmIGlzX2lyaShpbnN0YW5jZSk6Ci1AQCAtMjgwLDE1ICsyOTksMTkgQEAgZWxzZToKLSAKLSAKLSB0cnk6Ci0tICAgIGltcG9ydCBzdHJpY3RfcmZjMzMzOQotKyAgICBmcm9tIHN0cmljdF9yZmMzMzM5IGltcG9ydCB2YWxpZGF0ZV9yZmMzMzM5Ci0gZXhjZXB0IEltcG9ydEVycm9yOgotLSAgICBwYXNzCi0tZWxzZToKLSsgICAgdHJ5OgotKyAgICAgICAgZnJvbSByZmMzMzM5X3ZhbGlkYXRvciBpbXBvcnQgdmFsaWRhdGVfcmZjMzMzOQotKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0rICAgICAgICB2YWxpZGF0ZV9yZmMzMzM5ID0gTm9uZQotKwotK2lmIHZhbGlkYXRlX3JmYzMzMzk6Ci0gICAgIEBfY2hlY2tzX2RyYWZ0cyhuYW1lPSJkYXRlLXRpbWUiKQotICAgICBkZWYgaXNfZGF0ZXRpbWUoaW5zdGFuY2UpOgotICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5zdGFuY2UsIHN0cl90eXBlcyk6Ci0gICAgICAgICAgICAgcmV0dXJuIFRydWUKLS0gICAgICAgIHJldHVybiBzdHJpY3RfcmZjMzMzOS52YWxpZGF0ZV9yZmMzMzM5KGluc3RhbmNlKQotKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlX3JmYzMzMzkoaW5zdGFuY2UpCi0gCi0gICAgIEBfY2hlY2tzX2RyYWZ0cyhkcmFmdDc9InRpbWUiKQotICAgICBkZWYgaXNfdGltZShpbnN0YW5jZSk6Ci1kaWZmIC0tZ2l0IGEvc2V0dXAuY2ZnIGIvc2V0dXAuY2ZnCi1pbmRleCA3NGJjNGE3Li44NzgyMjFjIDEwMDY0NAotLS0tIGEvc2V0dXAuY2ZnCi0rKysgYi9zZXR1cC5jZmcKLUBAIC00MCw2ICs0MCwxMiBAQCBmb3JtYXQgPQotIAlyZmMzOTg3Ci0gCXN0cmljdC1yZmMzMzM5Ci0gCXdlYmNvbG9ycwotK2Zvcm1hdF9ub25ncGwgPQotKwlpZG5hCi0rCWpzb25wb2ludGVyPjEuMTMKLSsJd2ViY29sb3JzCi0rCXJmYzM5ODYtdmFsaWRhdG9yPjAuMS4wCi0rCXJmYzMzMzktdmFsaWRhdG9yCi0gCi0gW29wdGlvbnMuZW50cnlfcG9pbnRzXQotIGNvbnNvbGVfc2NyaXB0cyA9IAotLS0gCi0yLjIwLjEKLQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWpzb25zY2hlbWFfMy4xLjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tanNvbnNjaGVtYV8zLjIuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWpzb25zY2hlbWFfMy4xLjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1qc29uc2NoZW1hXzMuMi4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbGljZW5zZS1leHByZXNzaW9uLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1saWNlbnNlLWV4cHJlc3Npb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzVlOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbGljZW5zZS1leHByZXNzaW9uLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSwgc2ltcGxpZnkgYW5kIG5vcm1hbGl6ZSBsaWNlbnNlIGV4cHJlc3Npb25zIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uIgorCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9hcGFjaGUtMi4wLkxJQ0VOU0U7bWQ1PWUyM2ZhZGQ2Y2VlZjhjNjE4ZmMxYzY1MTkxZDg0NmZhIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODE0NzdmNzc5MDk5ZjU1MDcxYzZhN2I4OGEyOWJiMDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGFhYTQ1NWM1Yjk3YzRmMjE3NDA5MDE3OGIxOTc5MmIyYTFjNjIwZTgwNTkxYWFmZDRlMGE5OWI3MTNmOWU4ZCIKKworaW5oZXJpdCBweXBpCisKK1JERVBFTkRTXyR7UE59ICs9ICJcCisgICAgJHtQWVRIT05fUE59LWJvb2xlYW5weSBcCisgICAgIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbHhtbC5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbHhtbC5pbmMKaW5kZXggYTk3MTY3Zi4uZGY5NTczYiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWx4bWwuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1seG1sLmluYwpAQCAtMTgsOCArMTgsOCBAQAogCiBERVBFTkRTICs9ICJsaWJ4bWwyIGxpYnhzbHQiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJjZTk3NmEyZDNjNjMwZDdmZGU4NmQzYTRjM2ExYzYwNiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJjODFjYjQwYmZmMzczYWI3YTc0NDZkNmJiY2EwMTkwYmNjYzViZTM0NDhiNDdiNTFkNzI5ZTM3Nzk5YmI1NjkyIgorU1JDX1VSSVttZDVzdW1dID0gIjIzNWMxYTIyZDk3YTE3NDE0NGU3NmI2NmNlNjJhZTQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVmZjY5ZGRiZjNhZDg2Mzc1YzM0NDMzOTM3MTE2ODY0MDk1MWMzMDI0NTBjNWQzZTk5MzZlOThkNjQ1OWRiMDYiCiAKIERJU1RVVElMU19CVUlMRF9BUkdTICs9ICIgXAogICAgICAgICAgICAgICAgICAgICAgLS13aXRoLXhzbHQtY29uZmlnPSdwa2ctY29uZmlnIGxpYnhzbHQnIFwKQEAgLTQ1LDExICs0NSw2IEBACiBCVUlMRF9PUFRJTUlaQVRJT05fcmVtb3ZlX21pcHNlbCA9ICIgLU9nIgogQlVJTERfT1BUSU1JWkFUSU9OX2FwcGVuZF9taXBzZWwgPSAiIC1PIgogCi1kb19jb25maWd1cmVfcHJlcGVuZCgpIHsKLSAgICBzZWQgLWkgLWUgJ3MvLS12ZXJzaW9uLy0tbW9kdmVyc2lvbi8nICR7Qn0vc2V0dXBpbmZvLnB5Ci19Ci0KIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKIAogUkRFUEVORFNfJHtQTn0gKz0gImxpYnhtbDIgbGlieHNsdCAke1BZVEhPTl9QTn0tY29tcHJlc3Npb24iCi1SREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAibGlieG1sMi1uYXRpdmUgbGlieHNsdC1uYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbHhtbF80LjQuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1seG1sXzQuNC4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbHhtbF80LjQuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWx4bWxfNC40LjIuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tMmNyeXB0by5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbTJjcnlwdG8uaW5jCmluZGV4IGEzNmFiOGEuLjVmNTQ0NGYgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tMmNyeXB0by5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW0yY3J5cHRvLmluYwpAQCAtMzIsNyArMzIsNyBAQAogIwogZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CiAgICAgJHtDUFB9IC1kTSAtIDwgL2Rldi9udWxsIHwgZ3JlcCAtdiAnX19cKFNURENcfFJFR0lTVEVSX1BSRUZJWFx8R05VQ1x8U1REQ19IT1NURURcKV9fJyBcCi0gICAgfCBzZWQgJ3MvXlwoI2RlZmluZSBcKFteIF0qXCkgLipcKSQvI3VuZGVmIFwyXG5cMS8nID4gU1dJRy9nY2NfbWFjcm9zLmgKKyAgICB8IHNlZCAncy9eXCgjZGVmaW5lIFwoW14gXSpcKSAuKlwpJC8jdW5kZWYgXDJcblwxLycgPiAke1N9L1NXSUcvZ2NjX21hY3Jvcy5oCiAKICAgICBpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTt0aGVuCiAgICAgICAgIGJpdD0iNjQiCkBAIC00MiwxMSArNDIsMTEgQEAKIAogICAgIGlmIFsgLWUgJHtTVEFHSU5HX0lOQ0RJUn0vb3BlbnNzbC9vcGVuc3NsY29uZi0ke2JpdH0uaCBdIDt0aGVuCiAgICAgICAgIGZvciBpIGluIFNXSUcvX2VjLmkgU1dJRy9fZXZwLmk7IGRvCi0gICAgICAgICAgICBzZWQgLWkgLWUgInMvb3BlbnNzbGNvbmYuKlwuL29wZW5zc2xjb25mLSR7Yml0fVwuLyIgIiRpIgorICAgICAgICAgICAgc2VkIC1pIC1lICJzL29wZW5zc2xjb25mLipcLi9vcGVuc3NsY29uZi0ke2JpdH1cLi8iICIke1N9LyRpIgogICAgICAgICBkb25lCiAgICAgZWxpZiBbIC1lICR7U1RBR0lOR19JTkNESVJ9L29wZW5zc2wvb3BlbnNzbGNvbmYtbiR7Yml0fS5oIF0gO3RoZW4KICAgICAgICAgZm9yIGkgaW4gU1dJRy9fZWMuaSBTV0lHL19ldnAuaTsgZG8KLSAgICAgICAgICAgIHNlZCAtaSAtZSAicy9vcGVuc3NsY29uZi4qXC4vb3BlbnNzbGNvbmYtbiR7Yml0fVwuLyIgIiRpIgorICAgICAgICAgICAgc2VkIC1pIC1lICJzL29wZW5zc2xjb25mLipcLi9vcGVuc3NsY29uZi1uJHtiaXR9XC4vIiAiJHtTfS8kaSIKICAgICAgICAgZG9uZQogICAgIGZpCiB9CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFyc2UuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBhcnNlLmluYwppbmRleCBjY2Q1YTkzLi41Y2U2N2YxIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFyc2UuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYXJzZS5pbmMKQEAgLTEsMTAgKzEsMTAgQEAKIFNVTU1BUlkgPSAiUGFyc2Ugc3RyaW5ncyB1c2luZyBhIHNwZWNpZmljYXRpb24gYmFzZWQgb24gdGhlIFB5dGhvbiBmb3JtYXQoKSBzeW50YXgiCiBIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vcjFjaGFyZGowbjNzL3BhcnNlIgogTElDRU5TRSA9ICJNSVQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wYXJzZS5weTtiZWdpbmxpbmU9MTMxNztlbmRsaW5lPTEzMzc7bWQ1PWZhMDNiYWUzZjUxYTJkYjI1ZTIzOWU4NjljNjQ3NDM3IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vcGFyc2UucHk7YmVnaW5saW5lPTEzMjU7ZW5kbGluZT0xMzQ1O21kNT1mYTAzYmFlM2Y1MWEyZGIyNWUyMzllODY5YzY0NzQzNyIKIAotU1JDX1VSSVttZDVzdW1dID0gIjhmYzYzNDc2OWYxZDg0MWYxNGE1MmRkNzMxY2E0NDdhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1ZmNhNzAwMGM2NTg4ZDc3YmM2NWMyOGYzZjIxYmZjZTAzYjVlNDRkYWE4ZjlmMDdjMTdmZTM2NDk5MGQ3MTciCitTUkNfVVJJW21kNXN1bV0gPSAiMDdjYmI1YmExMDI1Y2JmZTkyZmMzMzc2YzM3MmRkYTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTVhNGY0NDY5ZTM3YzU3YjVlOTI0NjI5YWM5OTkyNmYyOGJlZTdkYTU5NTE1ZGM1YjgwNzhjNGMzZTc3OTI0OSIKIAogaW5oZXJpdCBweXBpCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYXJzZV8xLjEyLjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFyc2VfMS4xNC4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFyc2VfMS4xMi4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFyc2VfMS4xNC4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFzc2xpYi5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFzc2xpYi5pbmMKaW5kZXggOGE2ZDdlOS4uOWNmMDI4MCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBhc3NsaWIuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYXNzbGliLmluYwpAQCAtNywxMCArNywxMCBAQAogaGFzaGluZyBmb3IgbXVsdGktdXNlciBhcHBsaWNhdGlvbnMuIgogSE9NRVBBR0UgPSAiaHR0cHM6Ly9iaXRidWNrZXQub3JnL2Vjb2xsaW5zL3Bhc3NsaWIiCiBMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTczZWVkMWE1NDcwYjk2OTk1MWRhYzQxMTA4NmM3MDM2IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NDRmZDdkY2Q1ZDQyYjQ4ZDZkZWE1OWFjNjQzYTAxNzkiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICIyNTQ4NjlkYWUzZmQ5ZjA5ZjA3NDZhM2NiMjlhMGIxNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIzZDk0OGY2NDEzOGMyNTYzMzYxM2YzMDNiY2M0NzExMjZlYWU2N2MwNGQ1ZTNmNmI3YjhjZTYyNDJmODY1M2UwIgorU1JDX1VSSVttZDVzdW1dID0gImI5MDg1MjljZmQ0YzMzMDU3YzI0NDMyNGM2OTJlYWU3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhkNjY2Y2VmOTM2MTk4YmMyYWI0N2VlOWIwNDEwYzk0YWRmMmJhNzk4ZTVhODRiZjIyMGJlMDc5YWU3YWI2YTgiCiAKIFJERVBFTkRTXyR7UE59ICs9ICJcCiAgICAgJHtQWVRIT05fUE59LWNyeXB0IFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYXNzbGliXzEuNy4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBhc3NsaWJfMS43LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYXNzbGliXzEuNy4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFzc2xpYl8xLjcuMi5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBhc3RlXzMuMi4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBhc3RlXzMuMi4zLmJiCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYXN0ZV8zLjIuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBhc3RlXzMuMi4zLmJiCmluZGV4IDI3NzhmYzYuLmMzZDRmZGQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYXN0ZV8zLjIuMi5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGFzdGVfMy4yLjMuYmIKQEAgLTUsOCArNSw4IEBACiAKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RvY3MvbGljZW5zZS50eHQ7bWQ1PTE3OThmMjlkNTUwODBjNjAzNjVlNjI4M2NiNDk3NzljIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiNzg4ZmNlYjE5MmJjMzM4ZjFhM2UyYThmNzhmZDQyYjYiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGIxZjRkODZmODM2NmYwZDQwOTNlNTQ0OTgxMzc5MmM5OGU3NjBlZGM2YjdjOTE4ZjBmMjlmOWVmMjJhZTk5NiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZGM2ZGJkMjBlMzU4ZGQ5NWJkNDJlZWY1YzZjYzg0YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YmRjN2Y2YmU5MDdlZWQ3Y2Q2Mzg2OGM3OWQ4OGFmMmI4N2QwMmQ4NDBmYjVhY2ZjOTNkNGJkYTU3MmIxNTY3IgogCiBQWVBJX1BBQ0tBR0UgPSAiUGFzdGUiCiBpbmhlcml0IHB5cGkgc2V0dXB0b29scwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBicl81LjQuMy5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYnJfNS40LjQuYmIKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBicl81LjQuMy5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBicl81LjQuNC5iYgppbmRleCBiMjE3MjJmLi45ZDdkOGQ3IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGJyXzUuNC4zLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYnJfNS40LjQuYmIKQEAgLTIsOCArMiw4IEBACiAjIFRoZSBpbmMgZmlsZSBpcyBpbiBvZS1jb3JlCiByZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wYnIuaW5jCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI0NzdkMmFhMjg1YWQ5NzI1MGExNzJiMTk5ZjQwNjBiNyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyYzhlNDIwY2Q0ZWQ0Y2VjNGU3OTk5ZWU0NzQwOWU4NzZhZjU3NWQ0YzM1YTQ1ODQwZDU5ZThiNWYzMTU1YWI4IgorU1JDX1VSSVttZDVzdW1dID0gIjY1Y2RjMzJlMWExZmY1NmQ0ODFmYzE1YWE4Y2FmOTg4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEzOWQyNjI1NTQ3ZGJmYTVmYjBiODFkYWViYjM5NjAxYzQ3OGMyMTk1NmRjNTdlMmUwN2I3NDQ1MGE4YzUwNmIiCiAKIGRvX2luc3RhbGxfYXBwZW5kKCkgewogICAgICAgICBpZiBbIC1mICR7RH0ke2JpbmRpcn0vcGJyIF07IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0LmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0LmluYwppbmRleCBlZmVhYjgzLi42ZDc4ZWI5IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdC5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3QuaW5jCkBAIC00LDggKzQsOCBAQAogTElDRU5TRSA9ICJJU0MiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYzdhNzI1MjUxODgwYWY4YzZhMTQ4MTgxNjY1Mzg1YiIKIAotU1JDX1VSSVttZDVzdW1dID0gImQ0ZjMzNzI5NjVhOTk2MjM4ZDU3ZDE5Yjk1ZDJlMDNhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJhOGU4ODI1OTgzOTU3MWQxMjUxZDI3ODQ3NmYzZWVjNWRiMjZkZWI3M2E3MGJlNWVkNWRjNTQzNWU0MThhYmEiCitTUkNfVVJJW21kNXN1bV0gPSAiZWQwMDMyNDJjYmYzMDhhZWUxYjFlYWVjZGVmNTllNDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWUyYzFmZDBlNmVlM2E0OWIyOGY5NWQ0YjMzYmMzODljODliMjBhZjZhMTI1NTkwNmU5MGZmMTI2MmNlNjJlYiIKIAogVVBTVFJFQU1fQ0hFQ0tfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGV4cGVjdCIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfNC42LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF80LjcuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfNC42LjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzQuNy4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGx1Z2d5LmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wbHVnZ3kuaW5jCmluZGV4IDE5MzE1MzIuLjc1ODU5ODQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wbHVnZ3kuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wbHVnZ3kuaW5jCkBAIC0zLDggKzMsOCBAQAogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYzgyMDZkMTZmZDVjYzAyZmE5YjBiYjk4OTU1ZTVjMiIKIAotU1JDX1VSSVttZDVzdW1dID0gIjRiODM4NGI2OWNkZGJjMmUxMDRmZGQzZmY1NjMxNzg4IgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImZhNWZhMTYyMmZhNmRkNWMwMzBlOWNhZDA4NmZhMTllZjZhMGNmNmQ3YTJkMTIzMThlMTBjYjQ5ZDZkNjhmMzQiCitTUkNfVVJJW21kNXN1bV0gPSAiN2Y2MTBlMjhiOGIzNDQ4NzMzNmI1ODVhM2RmYjgwM2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTViMmFjZGU2NjY1NjFlMTI5OGQ3MWI1MjMwMDdlZDczNjRkZTA3MDI5MjE5YjYwNGNmODA4YmZhMWM3NjViMCIKIAogREVQRU5EUyArPSAiJHtQWVRIT05fUE59LXNldHVwdG9vbHMtc2NtLW5hdGl2ZSIKIFJERVBFTkRTXyR7UE59ICs9ICIke1BZVEhPTl9QTn0taW1wb3J0bGliLW1ldGFkYXRhIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wbHVnZ3lfMC4xMy4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBsdWdneV8wLjEzLjEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wbHVnZ3lfMC4xMy4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGx1Z2d5XzAuMTMuMS5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBzdXRpbC5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHN1dGlsLmluYwppbmRleCA5MzEyMjY2Li5iZjQ5ZDk4IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHN1dGlsLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHN1dGlsLmluYwpAQCAtMiw4ICsyLDggQEAKIExJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTM1ZmQ5ZjI3MWQxOWQ1Zjc0MmYyMGE5ZDFmOGJiOGIiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI1NTYxZGZlNjFiNTg4OGZiMWIzZjE3ZmJlNGVlYjE1ZCIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkMDUxNTMyYWM5NDRmMWJlMDE3OWUwNTA2ZjY4ODk4MzNjZjk2ZTQ2NjI2MjUyM2U1N2E4NzFkZTY1YTE1MTQ3IgorU1JDX1VSSVttZDVzdW1dID0gImIyYzk0ZTAzNjhmYzZlNmYyMzdhNzI1MmY4ZTg1Y2EyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmYWQ4ZWIyYWM2MTQ1MThiYmUzYzBiOGViOWRmZmRiM2E4ZDJlM2E3ZDVkYTUxYzViOTc0ZmI3MjNhNWM1YWEiCiAKIFBBQ0tBR0VTID0rICIke1BOfS10ZXN0cyIKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBzdXRpbF81LjYuNS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wc3V0aWxfNS42LjcuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wc3V0aWxfNS42LjUuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wc3V0aWxfNS42LjcuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weS5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHkuaW5jCmluZGV4IGI2ZTA0MDkuLjJiNDhhYmUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weS5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5LmluYwpAQCAtMyw4ICszLDggQEAKIExJQ0VOU0UgPSAiTUlUIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YTZiYjAzMjBiMDRhMGE1MDNmMTJmNjlmZWE0NzlkZTkiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJkOWUzMDQzNmNlN2U3OWYzMDg0N2Y5YjMwYjYyZTE0OSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJkYzYzOWIwNDZhNmUyY2ZmNWJiZTQwMTk0YWQ2NTkzNmQ2YmEzNjBiNTJiM2MzZmUxZDA4YTgyZGQ1MGI1ZTUzIgorU1JDX1VSSVttZDVzdW1dID0gIjQyYzY3ZGU4NGIwN2FjOWNjODY3YjhiNzA4NDNhNDViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVlMjcwODE0MDEyNjIxNTc0NjdhZDZlN2Y4NTFiN2FhNDAyYzU4NTJkYmNiM2RhZTA2NzY4NDM0ZGU1NzUyYWEiCiAKIERFUEVORFMgKz0gIiR7UFlUSE9OX1BOfS1zZXR1cHRvb2xzLXNjbS1uYXRpdmUiCiBCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlfMS44LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlfMS44LjEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weV8xLjguMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5XzEuOC4xLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlhc24xLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWFzbjEuaW5jCmluZGV4IDAxNGZjZjkuLmQ3NGMyZmUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWFzbjEuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWFzbjEuaW5jCkBAIC0zLDggKzMsOCBAQAogTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnJzdDttZDU9YTE0NDgyZDE1YzIyNDlkZTNiNmYwZThhNDdlMDIxZmQiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI1MDI5MGU4MzMzOTUwMTZjNDk5MDNmNGY5YzdlNDdlNSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhOTQ5NTM1NmNhMWQ2NmVkMTk3YTBmNzJiNDFlYjE4MjNjZjdlYThiNWJkMDcxOTE2NzNlODE0N2FlY2Y4NjA0IgorU1JDX1VSSVttZDVzdW1dID0gImRmZmFlNGZmOWY5OTdhODMzMjRiM2YzM2ZlNjJiZTU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFlZjc3YzlmYjk0YTNhYzU4OGU4Nzg0MTIwOGJkZWM0NjQ0NzFkOTg3MWJkNTA1MGEyODdjYzlhNDc1Y2QwYmEiCiAKIFJERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAiIFwKICAgICAke1BZVEhPTl9QTn0tY29kZWNzIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWFzbjFfMC40LjcuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlhc24xXzAuNC44LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlhc24xXzAuNC43LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlhc24xXzAuNC44LmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljcnlwdG9kb21lLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNyeXB0b2RvbWUuaW5jCmluZGV4IDUwZmZkMGEuLjMxZDEzNjggMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNyeXB0b2RvbWUuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNyeXB0b2RvbWUuaW5jCkBAIC01LDggKzUsOCBAQAogTElDRU5TRSA9ICJQRCAmIEJTRC0yLUNsYXVzZSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UucnN0O21kNT02ZGMwZTJhMTNkMmYyNWQ2ZjEyM2M0MzRiNzYxZmFiYSIKIAotU1JDX1VSSVttZDVzdW1dID0gImM0ZTUzZjllZDMzY2E4ODNiMTgyNDliOWUxNTQ2MjUxIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM5ZGRjM2M0OTMxMjU0OTQ1NzJlMGJlZWZhOGU4ZTZhNDMzNjllOTNjM2MzZTE2M2NiODcxYjM3YzFjNjJmYmEiCitTUkNfVVJJW21kNXN1bV0gPSAiZjk5MDcxNmI0OWFkZDdiMTRlYThiOGE5NjFmYjM3NDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTE2OGU3Mzg3OTYxOWI0NjcwNzI1MDlhMjIzMjgyYTAyYzgwNDdkOTMyYTQ4Yjc0ZmJkNDk4ZjI3MjI0YWEwNCIKIAogaW5oZXJpdCBweXBpCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNyeXB0b2RvbWVfMy45LjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljcnlwdG9kb21lXzMuOS40LmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljcnlwdG9kb21lXzMuOS4zLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljcnlwdG9kb21lXzMuOS40LmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHltaXNwLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW1pc3AuaW5jCmluZGV4IDRjNjFkOWYuLjZjNDc0OTIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW1pc3AuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW1pc3AuaW5jCkBAIC0zLDggKzMsOCBAQAogTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hMzYzOWNmNTc4MGY3MWIxMjVkM2U5ZDFkYzEyN2MyMCIKIAotU1JDX1VSSVttZDVzdW1dID0gIjc3YWVmMzY3ZTU3YmE3ZGNjNmY5YjNkNDQ1YTk2MGVkIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImRlNjcxOTZmNmE4OTE2YjljNTJhODRhMWM0NWVhOTY3YzUzZmE5ZDJiMzc5NWIwNzBhZDJjMWNiYzI4ZDc5ZDciCitTUkNfVVJJW21kNXN1bV0gPSAiNTcxODQ3ODUzNDBlMjU0NjllNGE4MGZmOWRkY2UwOWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTk0ZWEwYTllMTUwMDUyMjMyNDI1MDA5ZWFjNmRkMTA0YTgwZjQ5NGQwZTI3M2NjNDhkZDExNGQ3ZWE4NDgyYiIKIAogUkRFUEVORFNfJHtQTn0gKz0gIiBcCiAgICAgJHtQWVRIT05fUE59LWRhdGV1dGlsIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW1pc3BfMi40LjExNy4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5bWlzcF8yLjQuMTE5LjEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW1pc3BfMi40LjExNy4yLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHltaXNwXzIuNC4xMTkuMS5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5bW9uZ28uaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5bW9uZ28uaW5jCmluZGV4IGNkMTFkOTguLmRjNzhiMTAgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW1vbmdvLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHltb25nby5pbmMKQEAgLTgsOCArOCw4IEBACiBMSUNFTlNFID0gIkFwYWNoZS0yLjAiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04NmQzZjNhOTVjMzI0Yzk0NzliZDg5ODY5NjhmNDMyNyIKIAotU1JDX1VSSVttZDVzdW1dID0gIjUzMTc4NmRmN2FkOThmMTVjNDNmMWIxN2VkZjVmODRjIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQyNDljNmJhNDU1ODdiOTU5MjkyYTcyNzUzMjgyNmM1MDMyZDU5MTcxZjkyM2Y3ZjgyMzc4OGY0MTNjMmE1YTMiCitTUkNfVVJJW21kNXN1bV0gPSAiZmI5OGQ4OTZmMGViMTRkOWI0ZmU5YmFhYzI0ZDc3MmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzQzODc5ZmU0MjdlYTZhYTZlODRkYWU5ZmJkYzVhYTE0NDI4YTRjZmU2MTNmZTBmZWUyY2MwMDRiZjNmMzA3YyIKIAogUEFDS0FHRVMgPSsgIiR7UFlUSE9OX1BOfS1ic29uIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHltb25nb18zLjkuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW1vbmdvXzMuMTAuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5bW9uZ29fMy45LjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW1vbmdvXzMuMTAuMC5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5b3BlbnNzbC5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlvcGVuc3NsLmluYwppbmRleCAwMGMxMDNmLi5jNmE0MDA1IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlvcGVuc3NsLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlvcGVuc3NsLmluYwpAQCAtNSw4ICs1LDggQEAKIAogREVQRU5EUyArPSAib3BlbnNzbCAke1BZVEhPTl9QTn0tY3J5cHRvZ3JhcGh5IgogCi1TUkNfVVJJW21kNXN1bV0gPSAiYjk4NzY2MjVkYzFkNWE1YTY2MmQ3NDg2ODkxOTE1MzciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWVjYTY2MzM4ZjZkZTE5ZDFhYTQ2ZWQ2MzRjM2I5YWU1MTlhNjRiNDU4Zjg0NjhhZWM2ODhlN2UzYzIwZjIwMCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkOTgwNGZlZGJkMWViMGM3ZDkyNDMzOTdiMWZiZjk3MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YTI0NDk0YjI2MDJhYWY0MDJiZTVjOWUzMGEwYjgyZDRhNWM2NzUyOGZlOGZiNDc1ZTNmM2JjMDBkZDY5NTA3IgogCiBQWVBJX1BBQ0tBR0UgPSAicHlPcGVuU1NMIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlvcGVuc3NsXzE5LjAuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weW9wZW5zc2xfMTkuMS4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlvcGVuc3NsXzE5LjAuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5b3BlbnNzbF8xOS4xLjAuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXBhcnNpbmcuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGFyc2luZy5pbmMKaW5kZXggYmY4OWJlNi4uMmI5OTI1ZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGFyc2luZy5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGFyc2luZy5pbmMKQEAgLTMsOCArMyw4IEBACiBMSUNFTlNFID0gIk1JVCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTY1N2E1NjYyMzM4ODg1MTNlMWYwN2JhMTNlMmY0N2YxIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiNzVkZmFkMjUwZDczOWVmYTgyYzdjMGVlYWFjYzVlNjgiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGNhNjIwMDFiZTM2N2YwMWJkM2U5MmVjYmI3OTA3MDI3MmE5ZDQ5NjRkY2U2YTQ4YTgyZmYwYjhiYzdlNjgzYSIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOTczM2VhOGNiZWUwMjkxYWFkMTIxYzY5YzZlNTFhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YzgzMDU4MmE4NGZiMDIyNDAwYjg1NDI5NzkxYmM1NTFmMWY0ODcxYzMzZjIzZTQ0ZjM1MzExOWU5MmY5NjlmIgogCiBpbmhlcml0IHB5cGkKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGFyc2luZ18yLjQuNS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXBhcnNpbmdfMi40LjYuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXBhcnNpbmdfMi40LjUuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXBhcnNpbmdfMi40LjYuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXBlcmYuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGVyZi5pbmMKaW5kZXggODE4MzdmMy4uMmU2MzA0YiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGVyZi5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGVyZi5pbmMKQEAgLTEzLDggKzEzLDggQEAKIExJQ0VOU0UgPSAiTUlUIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzhiYzJlNmU4N2M4YzYxMjcyOTM3Yjg3OWU2ZGMyZjgiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICJkNjdmZTVmNDQ3OTYzZGE4ODczZjNlOTkyM2Y3NmRlMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZDAxNDNhMjJhMTNlZTEwYzk5N2E2NDhmMzBiODJjZGM0MDE3NWQ1YTIwYjExMDU1YWUwNThhODJlNDVkMzcxIgorU1JDX1VSSVttZDVzdW1dID0gImUzMGI2N2I2MmE0ZTMwZTQ1MDQzNTJkMDc3OGM2MjJjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkMjE0YWE2NWUwODVkM2U0MTA4YTM2MTUyY2IxMmY3Y2QwZjRlN2ZkYTkzYjUxMzRiNDNhOTY4N2M5NzU3ODYiCiAKIGluaGVyaXQgcHlwaQogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlwZXJmXzEuNi4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGVyZl8xLjcuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGVyZl8xLjYuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cGVyZl8xLjcuMC5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5dGVzdC5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHl0ZXN0LmluYwppbmRleCBhMjZkNDEwLi43NTJkNjdlIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHl0ZXN0LmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHl0ZXN0LmluYwpAQCAtMyw4ICszLDggQEAKIExJQ0VOU0UgPSAiTUlUIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjQwMDYxYjhjZWU2NGIzMDhhNGQyZjlmNTU2YzEyZjIiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI4ODkzNDQyOTljOTE4MmFmZjY3ZDZlNDYxY2I3YWYyOSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIyN2FiYzNmZWY2MThhMDFiZWJiMWYwZDZkMzAzZDI4MTZhOTlhYTg3YTU5NjhlYmMzMmZlOTcxYmU5MWViMWU2IgorU1JDX1VSSVttZDVzdW1dID0gIjcxYThlYjJhYjVlZmI3NjUxMmQ5YTY5YmQ2NDc3MDM0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZiNTcxMjE1YjVhNzkwZjliNDFmMTlmMzUzMWM1M2E0NWNmNmJiOGVmMjk4OGJjMWZmOWFmYjM4MjcwYjI1ZmEiCiAKIFNSQ19VUklfYXBwZW5kID0gIiBmaWxlOi8vMDAwMS1zZXR1cC5weS1yZW1vdmUtdGhlLXNldHVwX3JlcXVpcmVzLWZvci1zZXR1cHRvb2xzLXNjbS5wYXRjaCBcCiAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5dGVzdF81LjIuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXRlc3RfNS4zLjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXRlc3RfNS4yLjIuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXRlc3RfNS4zLjIuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXlhbWwuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5eWFtbC5pbmMKaW5kZXggZTlhZTg1ZS4uNDhlYmY3MyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5eWFtbC5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5eWFtbC5pbmMKQEAgLTgsOCArOCw4IEBACiBQWVBJX1BBQ0tBR0UgPSAiUHlZQU1MIgogaW5oZXJpdCBweXBpCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICIyMGY4N2FiNDIxYjAyNzFkYmYzNzFkYzVjMWNkZGI1YyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICIwMWFkZjBiNmM2ZjYxYmQxMWFmNmUxMGNhNTJiN2Q0MDU3ZGQwYmUwMzQzZWI5MjgzYzg3OGNmM2FmNTZhZWU0IgorU1JDX1VSSVttZDVzdW1dID0gImQ3ZTQ1ZTkzMmQ2ZTY2NDlhYzU3NGExZWQ3N2I0MjY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMwZWU4ZWNhMmM1ODJkMjljM2MyZWM2ZTJjNGY3MDNkMWI3ZjFmYjEwYmM3MjMxNzM1NWE3NDYwNTdlNzM0NmMiCiAKIFJERVBFTkRTXyR7UE59ICs9ICJcCiAgICAgJHtQWVRIT05fUE59LWRhdGV0aW1lIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXlhbWxfNS4xLjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHl5YW1sXzUuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5eWFtbF81LjEuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5eWFtbF81LjIuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zaW1wbGVqc29uLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zaW1wbGVqc29uLmluYwppbmRleCA1NTkyZWFmLi4xYThkMzkwIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2ltcGxlanNvbi5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpbXBsZWpzb24uaW5jCkBAIC00LDggKzQsOCBAQAogTElDRU5TRSA9ICJNSVQiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9YzYzMzhkN2FiZDMyMWMwYjUwYTJhNTQ3ZTQ0MWM1MmUiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI3NDRmYTk5YWVkMjA3NDc4ZjhmYmY5ZGQ5ZjA0ZmFkMyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJiMWYzMjkxMzliYTY0N2E5NTQ4YWEwNWZiOTVkMDQ2YjRhNjc3NjQzMDcwZGMyYWZjMDVmYTJlOTc1ZDA5Y2E1IgorU1JDX1VSSVttZDVzdW1dID0gIjhhNWVkNzVjMzY3YjkwZmVkYzNkNjg1NzQyZTJhMWM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJiNGIyYjczOGIzYjk5ODE5YTE3ZmVhZjExODI2NWQwNzUzZDU1MzYwNDllYTU3MGIzYzQzYjUxYzQ3MDFlODEiCiAKIGluaGVyaXQgcHlwaQogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2ltcGxlanNvbl8zLjE2LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2ltcGxlanNvbl8zLjE3LjAuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zaW1wbGVqc29uXzMuMTYuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNpbXBsZWpzb25fMy4xNy4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2xpcC1kYnVzLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbGlwLWRidXMuaW5jCmluZGV4IDllNzI2YjUuLmFiN2IxYmIgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbGlwLWRidXMuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbGlwLWRidXMuaW5jCkBAIC0yMSw3ICsyMSw3IEBACiBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzcyNmMwODZmMGRkOTNhMGFjN2EwMTc2ZjM4M2ExMmFmOTFiNjY1N2I3OGEzMDFlM2Y1YjI1ZDlmOGQ0ZDEwYiIKIAogZG9fY29tcGlsZV9wcmVwZW5kKCkgewotICAgIHNlZCAtZSAncy9AVkVSU0lPTkAvJHtQVn0vZycgc2V0dXAucHkuaW4gPiBzZXR1cC5weQorICAgIHNlZCAtZSAncy9AVkVSU0lPTkAvJHtQVn0vZycgJHtTfS9zZXR1cC5weS5pbiA+ICR7U30vc2V0dXAucHkKIH0KIAogUkRFUEVORFNfJHtQTn0gKz0gIlwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zb3Vwc2lldmUuaW5jIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNvdXBzaWV2ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiMDRmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zb3Vwc2lldmUuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiQ1NTIHNlbGVjdG9yIGxpYnJhcnkgZm9yIHB5dGhvbi1iZWF1dGlmdWxzb3VwNCIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlbGVzc3VzZXIvc291cHNpZXZlIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UubWQ7bWQ1PTVhNmZkM2IwYzI0ZmM1YTA0MWEzZDFiYmIyMmM4MWI1IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDNkOGVhMjBjNTg0OTQ0NDZhYTY1YmE1Y2M2MzIwZmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjA1Zjg5YWQ1ZmRiZmVmZTMwY2RjMjkzMzAzNjY1ZWZmMmQxODg4NjVkNGRiZTRlYjUxMGJiYTFlZGZiZmNlMyIKKworaW5oZXJpdCBweXBpCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zb3Vwc2lldmVfMS45LjQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc291cHNpZXZlXzEuOS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTY3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc291cHNpZXZlXzEuOS40LmJiCkBAIC0wLDAgKzEsNCBAQAoraW5oZXJpdCBzZXR1cHRvb2xzCityZXF1aXJlIHB5dGhvbi1zb3Vwc2lldmUuaW5jCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BZVEhPTl9QTn0tYmFja3BvcnRzLWZ1bmN0b29scy1scnUtY2FjaGUiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc3FsYWxjaGVteS5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc3FsYWxjaGVteS5pbmMKaW5kZXggMGMxOTFhZS4uMzc2M2EzOSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNxbGFsY2hlbXkuaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zcWxhbGNoZW15LmluYwpAQCAtMiwxMyArMiwxMyBAQAogYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0aGUgZnVsbCBwb3dlciBhbmQgZmxleGliaWxpdHkgb2YgU1FMIgogSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zcWxhbGNoZW15Lm9yZy8iCiBMSUNFTlNFID0gIk1JVCIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWIxYzQxMmM5ZDhkMWNlMDE4ZjdhOTM3NDQwN2MyMmJiIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MmY1ZWIwMzBjNDg5NzVkNTI5NGJhZjBmNWQwMWFmMWMiCiAKIFBZUElfUEFDS0FHRSA9ICJTUUxBbGNoZW15IgogaW5oZXJpdCBweXBpCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICIwM2RiMWM4ZjhhZTkxMTk3N2MwYmYzOTUwYTRjOWMyMSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI2YjU1ZWMzNzljMTFhZDY5NmY5MzcxY2U4ZTBkZTkzYzdmMjExMzQzMjNmNTZhNTZhMWIwZDhmYmVmMTcwMTNjIgorU1JDX1VSSVttZDVzdW1dID0gIjAyYTQ2YmU4NDE5MDNiNjBjNTJhODMzNDJkM2NlZDhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJmYjhmNDY0YTUwMDBiNTY3YWMxZDM1MGI5MDkwY2YwODExODBlYzFhYjRhYTg3ZTdiY2ExMmRhYjI1MzIwZWMiCiAKIFJERVBFTkRTXyR7UE59ICs9ICIgXAogICAgICR7UFlUSE9OX1BOfS1qc29uIFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zcWxhbGNoZW15XzEuMS4xNy5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zcWxhbGNoZW15XzEuMy4xMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNxbGFsY2hlbXlfMS4xLjE3LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc3FsYWxjaGVteV8xLjMuMTIuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi10d2lzdGVkLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi10d2lzdGVkLmluYwppbmRleCAzNGY4ODQ2Li5kMDA1YTJhIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tdHdpc3RlZC5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXR3aXN0ZWQuaW5jCkBAIC03LDYgKzcsMTEgQEAKIExJQ0VOU0UgPSAiTUlUIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MTc0M2YxMmQ4YjhmNWFlYzYyNWMwNTY5YTA1OGYwYTYiCiAKKyMgYWxsb3cgZm9yIGNvbW1vbiBwYXRjaGVzIGZvciBweXRob24tIGFuZCBweXRob24zLXR3aXN0ZWQKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L3B5dGhvbi10d2lzdGVkOiIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZml4LU1lbW9yeVJlYWN0b3ItaW1wb3J0LWluLXRlc3RfcnVubmVyLXRvLWJlLWZyb20tdC5wYXRjaCIKKwogU1JDX1VSSVtzaGEyNTZzdW1dID0gIjczOTRiYTdmMjcyYWU3MjJhNzRmM2Q5NjlkY2Y1OTliYzRlZjA5M2JjMzkyMDM4NzQ4YTQ5MGYxNzI0YTUxNWQiCiBTUkNfVVJJW21kNXN1bV0gPSAiZjJkNzBmN2E2NmVjZGY1NDE1MjMxMDE2NGNjZWFkZmUiCiAKQEAgLTU2LDkgKzYxLDkgQEAKICAgICAke1BOfS16c2ggXAogIgogCi1SREVQRU5EU18ke1BOfS1jb3JlID0gIiR7UFlUSE9OX1BOfS1jb3JlICR7UFlUSE9OX1BOfS16b3BlaW50ZXJmYWNlICR7UFlUSE9OX1BOfS1pbmNyZW1lbnRhbCAke1BZVEhPTl9QTn0tY29uc3RhbnRseSAke1BZVEhPTl9QTn0taHlwZXJsaW5rICR7UFlUSE9OX1BOfS1hdXRvbWF0IgorUkRFUEVORFNfJHtQTn0tY29yZSA9ICIke1BZVEhPTl9QTn0tY29yZSAke1BZVEhPTl9QTn0tem9wZWludGVyZmFjZSAke1BZVEhPTl9QTn0taW5jcmVtZW50YWwgJHtQWVRIT05fUE59LWNvbnN0YW50bHkgJHtQWVRIT05fUE59LWh5cGVybGluayAke1BZVEhPTl9QTn0tYXV0b21hdCAke1BZVEhPTl9QTn0tcHlzZXJpYWwiCiBSREVQRU5EU18ke1BOfS10ZXN0ID0gIiR7UE59IgotUkRFUEVORFNfJHtQTn0tY29uY2ggPSAiJHtQTn0tY29yZSAke1BOfS1wcm90b2NvbHMiCitSREVQRU5EU18ke1BOfS1jb25jaCA9ICIke1BOfS1jb3JlICR7UE59LXByb3RvY29scyAke1BZVEhPTl9QTn0tYmNyeXB0ICR7UFlUSE9OX1BOfS1jcnlwdG9ncmFwaHkgJHtQWVRIT05fUE59LXB5YXNuMSAke1BZVEhPTl9QTn0tcGlja2xlIgogUkRFUEVORFNfJHtQTn0tbWFpbCA9ICIke1BOfS1jb3JlICR7UE59LXByb3RvY29scyIKIFJERVBFTkRTXyR7UE59LW5hbWVzID0gIiR7UE59LWNvcmUiCiBSREVQRU5EU18ke1BOfS1uZXdzID0gIiR7UE59LWNvcmUgJHtQTn0tcHJvdG9jb2xzIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXR3aXN0ZWQvMDAwMS1maXgtTWVtb3J5UmVhY3Rvci1pbXBvcnQtaW4tdGVzdF9ydW5uZXItdG8tYmUtZnJvbS10LnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXR3aXN0ZWQvMDAwMS1maXgtTWVtb3J5UmVhY3Rvci1pbXBvcnQtaW4tdGVzdF9ydW5uZXItdG8tYmUtZnJvbS10LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZmM3ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tdHdpc3RlZC8wMDAxLWZpeC1NZW1vcnlSZWFjdG9yLWltcG9ydC1pbi10ZXN0X3J1bm5lci10by1iZS1mcm9tLXQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSA3NTRmMjEyODJhZDI3NzVkYjhmZjUwMWQ0MGJiYzQ5N2ZhZWIxN2JhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVHJldm9yIEdhbWJsaW4gPHRyZXZvci5nYW1ibGluQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IERlYyAyMDE5IDE1OjA5OjIyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBNZW1vcnlSZWFjdG9yIGltcG9ydCBpbiB0ZXN0X3J1bm5lciB0byBiZSBmcm9tCisgdHdpc3RlZC5pbnRlcm5ldC50ZXN0aW5nCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2h0dHBzOi8vZ2l0aHViLmNvbS90d2lzdGVkL3R3aXN0ZWQvY29tbWl0Lzc1NGYyMTI4MmFkMjc3NWRiOGZmNTAxZDQwYmJjNDk3ZmFlYjE3YmFdCisKK1NpZ25lZC1vZmYtYnk6IFRyZXZvciBHYW1ibGluIDx0cmV2b3IuZ2FtYmxpbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3R3aXN0ZWQvYXBwbGljYXRpb24vbmV3c2ZyYWdtZW50cy85NzQ2Lm1pc2MgICAgfCAxICsKKyBzcmMvdHdpc3RlZC9hcHBsaWNhdGlvbi9ydW5uZXIvdGVzdC90ZXN0X3J1bm5lci5weSB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdHdpc3RlZC9hcHBsaWNhdGlvbi9uZXdzZnJhZ21lbnRzLzk3NDYubWlzYworCitkaWZmIC0tZ2l0IGEvc3JjL3R3aXN0ZWQvYXBwbGljYXRpb24vbmV3c2ZyYWdtZW50cy85NzQ2Lm1pc2MgYi9zcmMvdHdpc3RlZC9hcHBsaWNhdGlvbi9uZXdzZnJhZ21lbnRzLzk3NDYubWlzYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uOGIxMzc4OTE3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvdHdpc3RlZC9hcHBsaWNhdGlvbi9uZXdzZnJhZ21lbnRzLzk3NDYubWlzYworQEAgLTAsMCArMSBAQAorKworZGlmZiAtLWdpdCBhL3NyYy90d2lzdGVkL2FwcGxpY2F0aW9uL3J1bm5lci90ZXN0L3Rlc3RfcnVubmVyLnB5IGIvc3JjL3R3aXN0ZWQvYXBwbGljYXRpb24vcnVubmVyL3Rlc3QvdGVzdF9ydW5uZXIucHkKK2luZGV4IDlhYmMzNDQ5YS4uY2NlNDk1YjEyIDEwMDY0NAorLS0tIGEvc3JjL3R3aXN0ZWQvYXBwbGljYXRpb24vcnVubmVyL3Rlc3QvdGVzdF9ydW5uZXIucHkKKysrKyBiL3NyYy90d2lzdGVkL2FwcGxpY2F0aW9uL3J1bm5lci90ZXN0L3Rlc3RfcnVubmVyLnB5CitAQCAtMTUsNyArMTUsNyBAQCBmcm9tIHR3aXN0ZWQubG9nZ2VyIGltcG9ydCAoCisgICAgIExvZ0xldmVsLCBMb2dQdWJsaXNoZXIsIExvZ0JlZ2lubmVyLAorICAgICBGaWxlTG9nT2JzZXJ2ZXIsIEZpbHRlcmluZ0xvZ09ic2VydmVyLCBMb2dMZXZlbEZpbHRlclByZWRpY2F0ZSwKKyApCistZnJvbSB0d2lzdGVkLnRlc3QucHJvdG9faGVscGVycyBpbXBvcnQgTWVtb3J5UmVhY3RvcgorK2Zyb20gdHdpc3RlZC5pbnRlcm5ldC50ZXN0aW5nIGltcG9ydCBNZW1vcnlSZWFjdG9yCisgCisgZnJvbSAuLi5ydW5uZXIgaW1wb3J0IF9ydW5uZXIKKyBmcm9tIC4uX2V4aXQgaW1wb3J0IEV4aXRTdGF0dXMKKy0tIAorMi4yNC4xCisKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi11anNvbi5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tdWpzb24uaW5jCmluZGV4IDhmMDVkZTguLjAxOGRkZjQgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi11anNvbi5pbmMKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXVqc29uLmluYwpAQCAtMTMsMyArMTMsNSBAQAogICAgICR7UFlUSE9OX1BOfS1kYXRldGltZSBcCiAgICAgJHtQWVRIT05fUE59LW51bWJlcnMgXAogICAgICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXdhaXRyZXNzLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi13YWl0cmVzcy5pbmMKaW5kZXggNzMyYzMxZC4uYThkMzM3ZiAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXdhaXRyZXNzLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24td2FpdHJlc3MuaW5jCkBAIC02LDUgKzYsNSBAQAogTElDRU5TRSA9ICJaUEwtMi4xIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTc4Y2NiMzY0MGRjODQxZTFiYWVjYjNlMjdhNjk2NmIyIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiZDkxMzJkMzEzZGUwYzVlMGZlYzM0ZWY5ZWRlNTQ0MmUiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjc4ZTA5ZDY4NDlhY2MxMzY1NDA0YmJmN2Q3OTBkMDQyM2IxNTk4MDJlODUwYzcyNmU4Y2QwYTEyNmEyZGFjNyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNmI5ZjA0MDZjYjRlNmZlZGNjM2FkZDk2NDExNzg2ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNDExOGNiY2U3NTk4NWZkNjBhZWI0ZjBkNzgxYWJhOGRjN2FlMjhjMThlNTA3NTNlOTEzZDdhN2RlZTc2YjYyIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXdhaXRyZXNzXzEuMy4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXdhaXRyZXNzXzEuNC4xLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24td2FpdHJlc3NfMS4zLjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi13YWl0cmVzc18xLjQuMS5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXh4aGFzaC5pbmMgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24teHhoYXNoLmluYwppbmRleCAxZWMzOTM3Li44MGY1ZTljIDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24teHhoYXNoLmluYworKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24teHhoYXNoLmluYwpAQCAtMyw1ICszLDUgQEAKIExJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NWE4ZDc2MjgzNTE0YTFiN2U2YTQxNGFiYTM4NjI5YjUiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI4MDQ2MWVmZjEwYWM2MjIxNGZhNzg4YTYwNDVhYWI0MyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4MmNkYzY3YjQxZGE5MDRhYTI5MjExMDdlOTg3NzgxNDA3OWQ5YjA2N2E5OWYxOTg1MmI1ZDg1ZThhNDA1NTVkIgorU1JDX1VSSVttZDVzdW1dID0gImNlOWNiYmNjODk2MjBmZDQ3YTI0NjhiYWRkMDhkY2YwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhiNmIxYWZlNzczMWQ3ZDljYmIwMzk4YjRhODExZWJiNWU2YmU1YzE3NGY3MmM2OGFiZjgxZjkxOWE0MzVkZTkiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFsZW1iaWNfMS4zLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFsZW1iaWNfMS4zLjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYWxlbWJpY18xLjMuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1hbGVtYmljXzEuMy4yLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFzbjFjcnlwdG9fMS4yLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFzbjFjcnlwdG9fMS4zLjAuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYXNuMWNyeXB0b18xLjIuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1hc24xY3J5cHRvXzEuMy4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFzdG9yL2Y4MjBmM2ZmN2FkODgxODQ3NWI2ZTEwN2U2M2FhOWE1NDI1MmQyYTkucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFzdG9yL2Y4MjBmM2ZmN2FkODgxODQ3NWI2ZTEwN2U2M2FhOWE1NDI1MmQyYTkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMzY5OTMuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1hc3Rvci9mODIwZjNmZjdhZDg4MTg0NzViNmUxMDdlNjNhYTlhNTQyNTJkMmE5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotRnJvbSBmODIwZjNmZjdhZDg4MTg0NzViNmUxMDdlNjNhYTlhNTQyNTJkMmE5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogSm9uYXRoYW4gUmluZ2VyIDxqb25yaW5nZXIxMTdAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNyBPY3QgMjAxOSAxNjo1NDoxNiAtMDcwMAotU3ViamVjdDogW1BBVENIXSBGaXggcGFja2FnaW5nIGZvciBzZXR1cHRvb2xzPj00MS40Ci0KLS0tLQotIGFzdG9yL1ZFUlNJT04gICAgIHwgIDEgKwotIGFzdG9yL19faW5pdF9fLnB5IHwgIDUgKysrKy0KLSBzZXR1cC5jZmcgICAgICAgICB8ICAzICsrLQotIHNldHVwLnB5ICAgICAgICAgIHwgMTYgKy0tLS0tLS0tLS0tLS0tLQotIDQgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgYXN0b3IvVkVSU0lPTgotCi1kaWZmIC0tZ2l0IGEvYXN0b3IvVkVSU0lPTiBiL2FzdG9yL1ZFUlNJT04KLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5hM2RmMGE2Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9hc3Rvci9WRVJTSU9OCi1AQCAtMCwwICsxIEBACi0rMC44LjAKLWRpZmYgLS1naXQgYS9hc3Rvci9fX2luaXRfXy5weSBiL2FzdG9yL19faW5pdF9fLnB5Ci1pbmRleCAzYjAyOTgzLi44ZGZjZGIxIDEwMDY0NAotLS0tIGEvYXN0b3IvX19pbml0X18ucHkKLSsrKyBiL2FzdG9yL19faW5pdF9fLnB5Ci1AQCAtOSw2ICs5LDcgQEAKLSAKLSAiIiIKLSAKLStpbXBvcnQgb3MKLSBpbXBvcnQgd2FybmluZ3MKLSAKLSBmcm9tIC5jb2RlX2dlbiBpbXBvcnQgU291cmNlR2VuZXJhdG9yLCB0b19zb3VyY2UgICMgTk9RQQotQEAgLTE5LDcgKzIwLDkgQEAKLSBmcm9tIC5vcF91dGlsIGltcG9ydCBzeW1ib2xfZGF0YSAgIyBOT1FBCi0gZnJvbSAudHJlZV93YWxrIGltcG9ydCBUcmVlV2FsayAgIyBOT1FBCi0gCi0tX192ZXJzaW9uX18gPSAnMC44LjAnCi0rUk9PVCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSt3aXRoIG9wZW4ob3MucGF0aC5qb2luKFJPT1QsICdWRVJTSU9OJykpIGFzIHZlcnNpb25fZmlsZToKLSsgICAgX192ZXJzaW9uX18gPSB2ZXJzaW9uX2ZpbGUucmVhZCgpLnN0cmlwCi0gCi0gcGFyc2VfZmlsZSA9IGNvZGVfdG9fYXN0LnBhcnNlX2ZpbGUKLSAKLWRpZmYgLS1naXQgYS9zZXR1cC5jZmcgYi9zZXR1cC5jZmcKLWluZGV4IDFiYWY2ZmMuLmE0MzYzNGYgMTAwNjQ0Ci0tLS0gYS9zZXR1cC5jZmcKLSsrKyBiL3NldHVwLmNmZwotQEAgLTIsNiArMiw3IEBACi0gbmFtZSA9IGFzdG9yCi0gZGVzY3JpcHRpb24gPSBSZWFkL3Jld3JpdGUvd3JpdGUgUHl0aG9uIEFTVHMKLSBsb25nX2Rlc2NyaXB0aW9uID0gZmlsZTpSRUFETUUucnN0Ci0rdmVyc2lvbiA9IGZpbGU6IGFzdG9yL1ZFUlNJT04KLSBhdXRob3IgPSBQYXRyaWNrIE1hdXBpbgotIGF1dGhvcl9lbWFpbCA9IHBtYXVwaW5AZ21haWwuY29tCi0gcGxhdGZvcm1zID0gSW5kZXBlbmRlbnQKLUBAIC00MCw3ICs0MSw3IEBAIHRlc3Rfc3VpdGUgPSBub3NlLmNvbGxlY3RvcgotIFtvcHRpb25zLnBhY2thZ2VzLmZpbmRdCi0gZXhjbHVkZSA9IHRlc3RzCi0gCi0tW3doZWVsXQotK1tiZGlzdF93aGVlbF0KLSB1bml2ZXJzYWwgPSAxCi0gCi0gW2J1aWxkLXN5c3RlbV0KLWRpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5Ci1pbmRleCA0YTExMWI1Li42MDY4NDkzIDEwMDY0NAotLS0tIGEvc2V0dXAucHkKLSsrKyBiL3NldHVwLnB5Ci1AQCAtMSwxNyArMSwzIEBACi0taW1wb3J0IG9zCi0taW1wb3J0IHN5cwotLQotIGZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0dXAKLS1mcm9tIHNldHVwdG9vbHMuY29uZmlnIGltcG9ydCByZWFkX2NvbmZpZ3VyYXRpb24KLS0KLS1mcm9tIHNldHVwdXRpbHMgaW1wb3J0IGZpbmRfdmVyc2lvbgotLQotLQotLWRlZiBoZXJlKCpwYXRocyk6Ci0tICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKnBhdGhzKQotLQotLWNvbmZpZyA9IHJlYWRfY29uZmlndXJhdGlvbihoZXJlKCdzZXR1cC5jZmcnKSkKLS1jb25maWdbJ21ldGFkYXRhJ11bJ3ZlcnNpb24nXSA9IGZpbmRfdmVyc2lvbihoZXJlKCdhc3RvcicsICdfX2luaXRfXy5weScpKQotLWNvbmZpZ1snb3B0aW9ucyddLnVwZGF0ZShjb25maWdbJ21ldGFkYXRhJ10pCi0gCi0tc2V0dXAoKipjb25maWdbJ29wdGlvbnMnXSkKLStzZXR1cCgpCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWFzdG9yXzAuOC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYXN0b3JfMC44LjEuYmIKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1hc3Rvcl8wLjguYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYXN0b3JfMC44LjEuYmIKaW5kZXggMTdjYzU0MC4uMTI1YTAyMyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1hc3Rvcl8wLjguYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1hc3Rvcl8wLjguMS5iYgpAQCAtNCwxMCArNCw4IEBACiBMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTU2MTIwNWZkYWJjM2VjNTJjYWUyZDMwODE1YjhhZGU3IgogCi1TUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vYmVya2VycGVrc2FnL2FzdG9yLmdpdCBcCi0gICAgICAgICAgIGZpbGU6Ly9mODIwZjNmZjdhZDg4MTg0NzViNmUxMDdlNjNhYTlhNTQyNTJkMmE5LnBhdGNoIFwKLSAgICAgICAgICAiCi1TUkNSRVYgPz0gIjNhNzYwN2UzMWYwYzE3ZTc0N2RlZDVjZmUwYjU4MmQ5OWY3Y2FlY2YiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vYmVya2VycGVrc2FnL2FzdG9yLmdpdCAiCitTUkNSRVYgPz0gImM3NTUzYzc5ZjkyMjJlMjA3ODNmZTliZDhhNTUzZjkzMmU5MTgwNzIiCiAKIGluaGVyaXQgc2V0dXB0b29sczMKIApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iYWNrcG9ydHMtZnVuY3Rvb2xzLWxydS1jYWNoZV8xLjUuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWJhY2twb3J0cy1mdW5jdG9vbHMtbHJ1LWNhY2hlXzEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWZjYzQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iYWNrcG9ydHMtZnVuY3Rvb2xzLWxydS1jYWNoZV8xLjUuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHB5dGhvbi1iYWNrcG9ydHMtZnVuY3Rvb2xzLWxydS1jYWNoZS5pbmMKK2luaGVyaXQgc2V0dXB0b29sczMKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYmFuZGl0XzEuNS4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iYW5kaXRfMS42LjIuYmIKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iYW5kaXRfMS41LjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYmFuZGl0XzEuNi4yLmJiCmluZGV4IDMwMDJkNWEuLmZhMjg4NjEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYmFuZGl0XzEuNS4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYmFuZGl0XzEuNi4yLmJiCkBAIC0yLDggKzIsOCBAQAogTElDRU5TRSA9ICJBcGFjaGUtMi4wIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MWRlY2U3ODIxYmYzZmQ3MGZlMTMwOWVhYTM3ZDUyYTIiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI4MWJhMzk3OWRlZDFiNDIxZmE4ZDY5ZTZmYWEwNmRjYiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI5NDEzZmFjZmU5ZGUxZTFiZDI5MWQ1MjVjNzg0ZTFiZWIxYTU1Yzk5MTZiNTFkYWUxMjk3OWFmNjNhNjliYTRjIgorU1JDX1VSSVttZDVzdW1dID0gImM2YTY3NzJkN2FmYTBhZjg4MjhiMzM4NGU3M2I3MDg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQxZTc1MzE1ODUzNTA3YWExNDVkNjJhNzhhMmE2YzVlMzI0MGZlMTRlZTdjNjAxNDU5ZDBkZjk0MTgxOTYwNjUiCiAKIERFUEVORFMgPSAicHl0aG9uMy1wYnItbmF0aXZlIHB5dGhvbjMtZ2l0IHB5dGhvbjMtcGJyIHB5dGhvbjMtcHl5YW1sIHB5dGhvbjMtc2l4IHB5dGhvbjMtc3RldmVkb3JlIgogCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWJlYXV0aWZ1bHNvdXA0XzQuOC4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iZWF1dGlmdWxzb3VwNF80LjguMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iZWF1dGlmdWxzb3VwNF80LjguMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iZWF1dGlmdWxzb3VwNF80LjguMi5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iaXRhcnJheV8xLjEuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYml0YXJyYXlfMS4yLjEuYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iaXRhcnJheV8xLjEuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1iaXRhcnJheV8xLjIuMS5iCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWJvb2xlYW5weV8zLjcuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWJvb2xlYW5weV8zLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4NjAyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtYm9vbGVhbnB5XzMuNy5iYgpAQCAtMCwwICsxLDIgQEAKK2luaGVyaXQgc2V0dXB0b29sczMKK3JlcXVpcmUgcHl0aG9uLWJvb2xlYW5weS5pbmMKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtY2FjaGV0b29sc18zLjEuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtY2FjaGV0b29sc180LjAuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1jYWNoZXRvb2xzXzMuMS4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWNhY2hldG9vbHNfNC4wLjAuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtY2VydGlmaV8yMDE5LjkuMTEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWNlcnRpZmlfMjAxOS4xMS4yOC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1jZXJ0aWZpXzIwMTkuOS4xMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1jZXJ0aWZpXzIwMTkuMTEuMjguYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtY21kMl8wLjkuMTkuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWNtZDJfMC45LjIyLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWNtZDJfMC45LjE5LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWNtZDJfMC45LjIyLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWVuZ2luZWlvXzMuMTAuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtZW5naW5laW9fMy4xMS4xLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWVuZ2luZWlvXzMuMTAuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1lbmdpbmVpb18zLjExLjEuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtaHRtbDJ0ZXh0XzIwMTkuOC4xMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtaHRtbDJ0ZXh0XzIwMTkuOC4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2I1YjAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1odG1sMnRleHRfMjAxOS44LjExLmJiCkBAIC0wLDAgKzEsMiBAQAoraW5oZXJpdCBzZXR1cHRvb2xzMworcmVxdWlyZSBweXRob24taHRtbDJ0ZXh0LmluYwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1qc29ucnBjc2VydmVyXzQuMC41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1qc29ucnBjc2VydmVyXzQuMS4yLmJiCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtanNvbnJwY3NlcnZlcl80LjAuNS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1qc29ucnBjc2VydmVyXzQuMS4yLmJiCmluZGV4IGJmOWViMGEuLmUyMzcyMGMgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtanNvbnJwY3NlcnZlcl80LjAuNS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWpzb25ycGNzZXJ2ZXJfNC4xLjIuYmIKQEAgLTMsOCArMyw4IEBACiBMSUNFTlNFID0gIk1JVCIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWM4OTEyMDUxNjkwMGY5NmY0YzYwZDM1ZmRjNGMzZjE1IgogCi1TUkNfVVJJW21kNXN1bV0gPSAiZDQxZTlmNmIzMTBjYjI5YjBkOGYyMTNmZjlkNTc1NjciCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjQwYzUxN2Y0OWIwZmRkM2JmYTQyOGM5YTdjYzU4MTEyNmEwYzQzZWNhNjBkMjk3NjJkYTEyNDAxN2Q5ZDlmNCIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZDQwOTFiYzE5ZWIxODU3OWMxNWI5N2FmNzA3MTRlYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3M2RiNTVkMWNmMjQ1ZWJkZmI5NmNhMDVjNGNjZTAxYzUxYjYxYmU4NDVhMmE5ODFmNTM5ZWExZTZhNGUwYzRhIgogCiBpbmhlcml0IHB5cGkgc2V0dXB0b29sczMKIApAQCAtMjAsNCArMjAsNSBAQAogICAgIHB5dGhvbjMtdHlwaW5nIFwKICIKIAotQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1qc29uc2NoZW1hXzMuMS4xLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1qc29uc2NoZW1hXzMuMi4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWpzb25zY2hlbWFfMy4xLjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtanNvbnNjaGVtYV8zLjIuMC5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1saWNlbnNlLWV4cHJlc3Npb25fMS4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1saWNlbnNlLWV4cHJlc3Npb25fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTcwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWxpY2Vuc2UtZXhwcmVzc2lvbl8xLjAuYmIKQEAgLTAsMCArMSwyIEBACitpbmhlcml0IHNldHVwdG9vbHMzCityZXF1aXJlIHB5dGhvbi1saWNlbnNlLWV4cHJlc3Npb24uaW5jCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWx4bWxfNC40LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLWx4bWxfNC40LjIuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbHhtbF80LjQuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1seG1sXzQuNC4yLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBhcnNlXzEuMTIuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGFyc2VfMS4xNC4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBhcnNlXzEuMTIuMS5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1wYXJzZV8xLjE0LjAuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGFzc2xpYl8xLjcuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGFzc2xpYl8xLjcuMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1wYXNzbGliXzEuNy4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBhc3NsaWJfMS43LjIuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGV4cGVjdF80LjYuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGV4cGVjdF80LjcuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1wZXhwZWN0XzQuNi4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBleHBlY3RfNC43LjAuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGx1Z2d5XzAuMTMuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGx1Z2d5XzAuMTMuMS5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1wbHVnZ3lfMC4xMy4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBsdWdneV8wLjEzLjEuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHN1dGlsXzUuNi41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1wc3V0aWxfNS42LjcuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHN1dGlsXzUuNi41LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBzdXRpbF81LjYuNy5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weV8xLjguMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlfMS44LjEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlfMS44LjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlfMS44LjEuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlhc24xXzAuNC43LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWFzbjFfMC40LjguYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlhc24xXzAuNC43LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5YXNuMV8wLjQuOC5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWNyeXB0b2RvbWVfMy45LjMuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5Y3J5cHRvZG9tZV8zLjkuNC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weWNyeXB0b2RvbWVfMy45LjMuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHljcnlwdG9kb21lXzMuOS40LmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5bWlzcF8yLjQuMTE3LjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5bWlzcF8yLjQuMTE5LjEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHltaXNwXzIuNC4xMTcuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weW1pc3BfMi40LjExOS4xLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5bW9uZ29fMy45LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5bW9uZ29fMy4xMC4wLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5bW9uZ29fMy45LjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHltb25nb18zLjEwLjAuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlvcGVuc3NsXzE5LjAuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlvcGVuc3NsXzE5LjEuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weW9wZW5zc2xfMTkuMC4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5b3BlbnNzbF8xOS4xLjAuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlwYXJzaW5nXzIuNC41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weXBhcnNpbmdfMi40LjYuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlwYXJzaW5nXzIuNC41LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5cGFyc2luZ18yLjQuNi5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weXBlcmZfMS42LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5cGVyZl8xLjcuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weXBlcmZfMS42LjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlwZXJmXzEuNy4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5c3RlbWRfMC42LjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5c3RlbWRfMC43LjAuYmIKc2ltaWxhcml0eSBpbmRleCA2NiUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weXN0ZW1kXzAuNi4wLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5c3RlbWRfMC43LjAuYmIKaW5kZXggMDJhNWM4Zi4uNjZmMDI2YyAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weXN0ZW1kXzAuNi4wLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHlzdGVtZF8wLjcuMC5iYgpAQCAtMiw4ICsyLDggQEAKIExJQ0VOU0UgPSAiTEdQTHYyLjEiCiBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKIAotU1JDX1VSSVttZDVzdW1dID0gImM1NDcyYmU0MTlmNTNmNTNmNWRhMDg5Y2E4Yzk4MWMwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImIxZmMwNzJjODdlMzc2NjcxMWY2NGNhZjg2ZmQ2MzNkY2EzOTNlMjBjOGEwYTM3YTUwNThkZDcwYTIxZDhhMTQiCitTUkNfVVJJW21kNXN1bV0gPSAiZjQ5M2MzZTU0NDU3ZTQ5ZmUzYzE2MDI3NGI4NjNiYWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjVkYzQ5ZDAyOTk1YWI5NjMzNWQ5ZTk0ZjlmZTAzNjY3M2Q4OWI4Y2M5OTA3ZTdhMGFjODNjMDY2NjVmMjQzMCIKIAogREVQRU5EUyA9ICJzeXN0ZW1kIgogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5dGVzdF81LjIuMi5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHl0ZXN0XzUuMy4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5dGVzdF81LjIuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weXRlc3RfNS4zLjIuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcHl5YW1sXzUuMS4yLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weXlhbWxfNS4yLmJiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXB5eWFtbF81LjEuMi5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1weXlhbWxfNS4yLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNpbXBsZWpzb25fMy4xNi4wLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zaW1wbGVqc29uXzMuMTcuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zaW1wbGVqc29uXzMuMTYuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zaW1wbGVqc29uXzMuMTcuMC5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zb3Vwc2lldmVfMS45LjQuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNvdXBzaWV2ZV8xLjkuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjk2NjM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zb3Vwc2lldmVfMS45LjQuYmIKQEAgLTAsMCArMSwyIEBACitpbmhlcml0IHNldHVwdG9vbHMzCityZXF1aXJlIHB5dGhvbi1zb3Vwc2lldmUuaW5jCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNxbGFsY2hlbXlfMS4xLjE3LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zcWxhbGNoZW15XzEuMy4xMi5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zcWxhbGNoZW15XzEuMS4xNy5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zcWxhbGNoZW15XzEuMy4xMi5iYgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy13YWl0cmVzc18xLjMuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtd2FpdHJlc3NfMS40LjEuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtd2FpdHJlc3NfMS4zLjEuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtd2FpdHJlc3NfMS40LjEuYmIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMteG1sdG9kaWN0XzAuMTIuMC5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMteG1sdG9kaWN0XzAuMTIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGFhODE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy14bWx0b2RpY3RfMC4xMi4wLmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTWFrZXMgd29ya2luZyB3aXRoIFhNTCBmZWVsIGxpa2UgeW91IGFyZSB3b3JraW5nIHdpdGggSlNPTiIKK0FVVEhPUiA9ICJNYXJ0aW4gQmxlY2giCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vbWFydGluYmxlY2gveG1sdG9kaWN0IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wMTQ0MWQ1MGRjNzQ0NzZkYjU4YTQxYWMxMGNiOWZhMiIKKworU1JDX1VSSVttZDVzdW1dID0gImRkYjJiZDA3OGNlZjRmN2UzMDIxYTU3ODAzNGFkOTQxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUwZDhjNjM4ZWQ3ZWNiODhkOTA1NjFiZWVkYmY3MjBjOWI0ZTg1MWE5ZmE2YzQ3ZWJkNjRlOTlkMTY2ZDhhMjEiCisKK1BZUElfUEFDS0FHRSA9ICJ4bWx0b2RpY3QiCisKK2luaGVyaXQgcHlwaSBzZXR1cHRvb2xzMwpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy14eGhhc2hfMS40LjIuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXh4aGFzaF8xLjQuMy5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy14eGhhc2hfMS40LjIuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMteHhoYXNoXzEuNC4zLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWV4dGVuZGVkL3B5d2JlbS9weXRob24tcHl3YmVtLmluYyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZXh0ZW5kZWQvcHl3YmVtL3B5dGhvbi1weXdiZW0uaW5jCmluZGV4IDUxNTFjMzMuLjk4NTA4YjAgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZXh0ZW5kZWQvcHl3YmVtL3B5dGhvbi1weXdiZW0uaW5jCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZXh0ZW5kZWQvcHl3YmVtL3B5dGhvbi1weXdiZW0uaW5jCkBAIC0xNCwxMiArMTQsMTUgQEAKIHdheSB0byB3cml0ZSBwcm92aWRlcnMgb24gdGhlIHBsYW5ldC4iCiBIT01FUEFHRSA9ICJodHRwOi8vcHl3YmVtLmdpdGh1Yi5pbyIKIExJQ0VOU0UgPSAiTEdQTHYyLjEiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9weXdiZW0vTElDRU5TRS50eHQ7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgotU1JDX1VSSVttZDVzdW1dID0gIjE0NjVkZmE5MmU0Y2JlNTU4Yzc3MzgzOGI5YjAwNzExIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJhMDVmMmMxYTZhYjRiMDg1NjBhNmRhNTVmZGFhYmQwZjUyZjRkMWU2ZGY2ZTI4OGI5ZWQ5MjdiZjVjMjg5ZWQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQiCiAKIGluaGVyaXQgcHlwaSAKIAorU1JDUkVWID0gImIzMzg2YjNiZWU4ODc2ZDE1ZjA3NDUxNDdjMGIwODkzN2Q4YWIxOGUiCitQWVBJX1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9weXdiZW0vcHl3YmVtO3Byb3RvY29sPWh0dHBzO2JyYW5jaD1zdGFibGVfMC4xNSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKwogREVQRU5EUyArPSAiIFwKICAgICAke1BZVEhPTl9QTn0tcGx5LW5hdGl2ZSBcCiAgICAgJHtQWVRIT05fUE59LXB5eWFtbC1uYXRpdmUgXApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1leHRlbmRlZC9weXdiZW0vcHl0aG9uLXB5d2JlbV8wLjExLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWV4dGVuZGVkL3B5d2JlbS9weXRob24tcHl3YmVtXzAuMTUuMC5iYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1leHRlbmRlZC9weXdiZW0vcHl0aG9uLXB5d2JlbV8wLjExLjAuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZXh0ZW5kZWQvcHl3YmVtL3B5dGhvbi1weXdiZW1fMC4xNS4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWV4dGVuZGVkL3B5d2JlbS9weXRob24zLXB5d2JlbV8wLjExLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXB5dGhvbi9yZWNpcGVzLWV4dGVuZGVkL3B5d2JlbS9weXRob24zLXB5d2JlbV8wLjE1LjAuYmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEtcHl0aG9uL3JlY2lwZXMtZXh0ZW5kZWQvcHl3YmVtL3B5dGhvbjMtcHl3YmVtXzAuMTEuMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS1weXRob24vcmVjaXBlcy1leHRlbmRlZC9weXdiZW0vcHl0aG9uMy1weXdiZW1fMC4xNS4wLmJiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXdlYnNlcnZlci9yZWNpcGVzLXBocC9waHBteWFkbWluL3BocG15YWRtaW5fNC45LjEuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXdlYnNlcnZlci9yZWNpcGVzLXBocC9waHBteWFkbWluL3BocG15YWRtaW5fNC45LjIuYmIKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS13ZWJzZXJ2ZXIvcmVjaXBlcy1waHAvcGhwbXlhZG1pbi9waHBteWFkbWluXzQuOS4xLmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXdlYnNlcnZlci9yZWNpcGVzLXBocC9waHBteWFkbWluL3BocG15YWRtaW5fNC45LjIuYmIKaW5kZXggM2RhMmQ5Yi4uMzQ5NDNkZSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS13ZWJzZXJ2ZXIvcmVjaXBlcy1waHAvcGhwbXlhZG1pbi9waHBteWFkbWluXzQuOS4xLmJiCisrKyBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEtd2Vic2VydmVyL3JlY2lwZXMtcGhwL3BocG15YWRtaW4vcGhwbXlhZG1pbl80LjkuMi5iYgpAQCAtMTEsOCArMTEsOCBAQAogICAgICAgICAgICBmaWxlOi8vYXBhY2hlLmNvbmYgXAogIgogCi1TUkNfVVJJW21kNXN1bV0gPSAiYTE2NTEwOTYyOTczMWY1MzExZWMzMTcxY2NlNTA5NzIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGY4OWRkNjJlM2ZkZGRhYmNhMTg3YjA5MmVlYjVhZjRhNGZiOTU2MTg5NTY0YzU2MDM4OTcwNTE5ZDA0OTZjNSIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YjVkMWQ4NGEwNTYyNDQzMGFjNjU5ZTM2YWYwMGY0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYmMzZTM3ZmVmYmRmY2FmMTJmZDU5ZDZkN2ZkYmYxMWZmY2ZmZTNlMjExMTU1YmY1YjgyMmI1NGEzYzIwNDNlIgogCiBVUFNUUkVBTV9DSEVDS19VUkkgPSAiaHR0cHM6Ly93d3cucGhwbXlhZG1pbi5uZXQvZG93bmxvYWRzLyIKIFVQU1RSRUFNX0NIRUNLX1JFR0VYID0gInBocE15QWRtaW4tKD9QPHB2ZXI+XGQrKFwuXGQrKSspLWFsbC1sYW5ndWFnZXMudGFyLnh6IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXBwcy9jYXRmaXNoL2NhdGZpc2hfMS40LjEwLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXBwcy9jYXRmaXNoL2NhdGZpc2hfMS40LjExLmJiCnNpbWlsYXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWFwcHMvY2F0ZmlzaC9jYXRmaXNoXzEuNC4xMC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXBwcy9jYXRmaXNoL2NhdGZpc2hfMS40LjExLmJiCmluZGV4IDYwMjM2OGIuLjQxNTJlMTUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWFwcHMvY2F0ZmlzaC9jYXRmaXNoXzEuNC4xMC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1hcHBzL2NhdGZpc2gvY2F0ZmlzaF8xLjQuMTEuYmIKQEAgLTksOCArOSw4IEBACiAKIEIgPSAiJHtTfSIKIAotU1JDX1VSSVttZDVzdW1dID0gIjFiOGU3YmZkOTU1MzY0Yjc5MTJmYjBhMjQ4MzI5YjNhIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI1NzNhMDA0MTA1MDMxZjg3MWM5MmZlZDIyYTBjNGIxNWJiOTZmMmRmZjZlMzZjNGYyOTU5ZjU2YjYyZTM0M2QiCitTUkNfVVJJW21kNXN1bV0gPSAiNjdlMjNkNDVmZGVkMDI2ZWYzNDQ1YmM3ZmUxZDE2NTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE3YmFmOTMwOWUzY2RmYjIwYzgzNTdhYzc4NmViMjZmMzBlNmZkNDI4MGQ0NTM0ZDNjZGQ3NDJjN2ZmY2Q4NSIKIAogRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbWV0YWluZm8iCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWFwcHMveGZjZTQtcGFuZWwtcHJvZmlsZXMveGZjZTQtcGFuZWwtcHJvZmlsZXNfMS4wLjguYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1hcHBzL3hmY2U0LXBhbmVsLXByb2ZpbGVzL3hmY2U0LXBhbmVsLXByb2ZpbGVzXzEuMC45LmJiCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWFwcHMveGZjZTQtcGFuZWwtcHJvZmlsZXMveGZjZTQtcGFuZWwtcHJvZmlsZXNfMS4wLjguYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWFwcHMveGZjZTQtcGFuZWwtcHJvZmlsZXMveGZjZTQtcGFuZWwtcHJvZmlsZXNfMS4wLjkuYmIKaW5kZXggNDY3ZTA5NS4uOWM5YWU5NCAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXBwcy94ZmNlNC1wYW5lbC1wcm9maWxlcy94ZmNlNC1wYW5lbC1wcm9maWxlc18xLjAuOC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1hcHBzL3hmY2U0LXBhbmVsLXByb2ZpbGVzL3hmY2U0LXBhbmVsLXByb2ZpbGVzXzEuMC45LmJiCkBAIC05LDkgKzksOSBAQAogCiBERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUiCiAKLVNSQ19VUkkgPSAiaHR0cDovL2FyY2hpdmUueGZjZS5vcmcvc3JjL2FwcHMvJHtCUE59LzEuMC8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJiYzc1YTE0MzQyM2ZiYTNhODJmMTE0ZjQ3ZTg2NTgwYyIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICJhNjllMjBmNWU2MzczMTllMTQ4OThiNWMxM2ZmN2JhMzFkMDAxYTZlMzhlNzUxNmQ3MGRiZmQ3NjAwYWQ3MmRiIgorU1JDX1VSSSA9ICJodHRwOi8vYXJjaGl2ZS54ZmNlLm9yZy9zcmMvYXBwcy8ke0JQTn0vMS4wLyR7QlB9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiYmVlM2UyNTFlNDVhZGUwZWEzNDkzNjY0NjFkNmUyMDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYThjMDBhZjgzOGU4NWQwMDYwMGRiZjQ0MmM4NzQxYWEyMWEzMzJmYmNlYmE4NDllMDgyMDU2MDYzMGE2ZTBjZSIKIAogZG9fY29uZmlndXJlKCkgewogICAgICMgc3BlY2lhbCBjb25maWd1cmUgLSBubyBhdXRvdG9vbHMuLi4KZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWFwcHMveGZjZTQtdGVybWluYWwveGZjZTQtdGVybWluYWxfMC44LjguYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1hcHBzL3hmY2U0LXRlcm1pbmFsL3hmY2U0LXRlcm1pbmFsXzAuOC45LjEuYmIKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXBwcy94ZmNlNC10ZXJtaW5hbC94ZmNlNC10ZXJtaW5hbF8wLjguOC5iYgpyZW5hbWUgdG8gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXBwcy94ZmNlNC10ZXJtaW5hbC94ZmNlNC10ZXJtaW5hbF8wLjguOS4xLmJiCmluZGV4IGViYzA0NmIuLjRiZGQ0Y2IgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWFwcHMveGZjZTQtdGVybWluYWwveGZjZTQtdGVybWluYWxfMC44LjguYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXBwcy94ZmNlNC10ZXJtaW5hbC94ZmNlNC10ZXJtaW5hbF8wLjguOS4xLmJiCkBAIC04LDcgKzgsNyBAQAogRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0veGZjZTQgXAogICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ25vbWUtY29udHJvbC1jZW50ZXIiCiAKLVNSQ19VUklbbWQ1c3VtXSA9ICI0Mjk1ZDRkNzgzZjZkNmRmZTkyZjViYjE1ZDk2ZjZjNiIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZmJhNmE2MGQzYTBmZWUwNzQxN2FkN2MzNmJmNzhjYzQ1YmUxYjI3ZjA3NTllMTI1MDUxYWE3M2YwODQ4N2ZkIgorU1JDX1VSSVttZDVzdW1dID0gImNiOTk1ZTQ4OTFhM2M1NDdiZjEzM2IzMWU0ODQwZDAxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkZWIwZDA2ZTUwYThhNDFmYjAwZTJjMzc3M2YwNzkzODgyY2I5ZjA3M2FlMTZlYWQ4ODdiYjk2ODFjNTE0Y2QiCiAKIFJSRUNPTU1FTkRTXyR7UE59ICs9ICJ2dGUtcHJvbXB0IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXJ0L3hmY2UtZHVzay1ndGszL3hmY2UtZHVzay1ndGszXzEuMy5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWFydC94ZmNlLWR1c2stZ3RrMy94ZmNlLWR1c2stZ3RrM18xLjMuYmIKaW5kZXggYjA1Yzc0OC4uODlkYWI0OSAxMDA2NDQKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtYXJ0L3hmY2UtZHVzay1ndGszL3hmY2UtZHVzay1ndGszXzEuMy5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1hcnQveGZjZS1kdXNrLWd0azMveGZjZS1kdXNrLWd0azNfMS4zLmJiCkBAIC00LDcgKzQsNyBAQAogCiBpbmhlcml0IGFsbGFyY2gKIAotU1JDX1VSSSA9ICJodHRwOi8veGZjZS1sb29rLm9yZy9DT05URU5UL2NvbnRlbnQtZmlsZXMvMTQxNDA0LXhmY2VfZHVza19ndGszLTFfMy50YXIuZ3o7c3ViZGlyPSR7QlBOfS0ke1BWfSIKK1NSQ19VUkkgPSAiaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8xNDE0MDQteGZjZV9kdXNrX2d0azMtMV8zLnRhci5nejtzdWJkaXI9JHtCUE59LSR7UFZ9IgogU1JDX1VSSVttZDVzdW1dID0gImIzYWQzN2FkODE3M2IxNGVjMDkwZTYwYTgwZTY1ZDhmIgogU1JDX1VSSVtzaGEyNTZzdW1dID0gImJmYThhODg2MDdkMWExZGE1YmQwYjllNGUwNzU3NjdjNTQ0MDBhM2M1YTBmYWU4OGI2MTllZDcxNTMyZjMwYjQiCiAKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWRldnRvb2xzL2dsYWRlL2dsYWRlMy8wMDAxLUFkZC1HX0dOVUNfUFJJTlRGLW9uLWZ1bmN0aW9ucy13aXRoLWZvcm1hdC1zdHJpbmdzLnBhdGNoIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtZGV2dG9vbHMvZ2xhZGUvZ2xhZGUzLzAwMDEtQWRkLUdfR05VQ19QUklOVEYtb24tZnVuY3Rpb25zLXdpdGgtZm9ybWF0LXN0cmluZ3MucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzY2I3NjIuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtZGV2dG9vbHMvZ2xhZGUvZ2xhZGUzLzAwMDEtQWRkLUdfR05VQ19QUklOVEYtb24tZnVuY3Rpb25zLXdpdGgtZm9ybWF0LXN0cmluZ3MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi1Gcm9tIGZjZjI5YWJlNTk2MDdiNTc5MWY5ZGUxOGRkYjg2YjlhZTNjOWI3Y2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgotRGF0ZTogU2F0LCAyNiBBdWcgMjAxNyAyMzo1MDowNSAtMDcwMAotU3ViamVjdDogW1BBVENIXSBBZGQgR19HTlVDX1BSSU5URiBvbiBmdW5jdGlvbnMgd2l0aCBmb3JtYXQgc3RyaW5ncwotCi1UaGlzIGFsbG93cyBjb21waWxhdGlvbiB3aXRoIGNsYW5nIHdpdGhvdXQgZXJyb3JzLCBldmVuIHdoZW4KLS1XZm9ybWF0LW5vbmxpdGVyYWwgaXMgYWN0aXZlIChhcyBsb25nIGFzIHRoZXJlIGFyZSBubyByZWFsIGNhc2VzIG9mCi1ub24gbGl0ZXJhbCBmb3JtYXR0aW5nKS4KLQotU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KLS0tLQotIGdsYWRldWkvZ2xhZGUtY29tbWFuZC5jIHwgNCArKy0tCi0gZ2xhZGV1aS9nbGFkZS11dGlscy5jICAgfCA0ICsrLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2dsYWRldWkvZ2xhZGUtY29tbWFuZC5jIGIvZ2xhZGV1aS9nbGFkZS1jb21tYW5kLmMKLWluZGV4IDk4MTk3NjYuLjRhYzQwZWUgMTAwNjQ0Ci0tLS0gYS9nbGFkZXVpL2dsYWRlLWNvbW1hbmQuYwotKysrIGIvZ2xhZGV1aS9nbGFkZS1jb21tYW5kLmMKLUBAIC0yNjYsNyArMjY2LDcgQEAgZ2xhZGVfY29tbWFuZF9jb2xsYXBzZSAoR2xhZGVDb21tYW5kICAqY29tbWFuZCwKLSAgKgotICAqIE1hcmtzIHRoZSBiZWdpbmluZyBvZiBhIGdyb3VwLgotICAqLwotLXZvaWQKLStHX0dOVUNfUFJJTlRGKDEsIDIpIHZvaWQKLSBnbGFkZV9jb21tYW5kX3B1c2hfZ3JvdXAgKGNvbnN0IGdjaGFyICpmbXQsIC4uLikKLSB7Ci0gCXZhX2xpc3QgICAgICAgICBhcmdzOwotQEAgLTY1NSw3ICs2NTUsNyBAQCBnbGFkZV9jb21tYW5kX3NldF9wcm9wZXJ0aWVzX2xpc3QgKEdsYWRlUHJvamVjdCAqcHJvamVjdCwgR0xpc3QgKnByb3BzKQotIAotIAltdWx0aXBsZSA9IGdfbGlzdF9sZW5ndGggKG1lLT5zZGF0YSkgPiAxOwotIAlpZiAobXVsdGlwbGUpCi0tCQlnbGFkZV9jb21tYW5kX3B1c2hfZ3JvdXAgKGNtZC0+ZGVzY3JpcHRpb24pOwotKwkJZ2xhZGVfY29tbWFuZF9wdXNoX2dyb3VwICgiJXMiLCBjbWQtPmRlc2NyaXB0aW9uKTsKLSAKLSAKLSAJZ2xhZGVfY29tbWFuZF9jaGVja19ncm91cCAoR0xBREVfQ09NTUFORCAobWUpKTsKLWRpZmYgLS1naXQgYS9nbGFkZXVpL2dsYWRlLXV0aWxzLmMgYi9nbGFkZXVpL2dsYWRlLXV0aWxzLmMKLWluZGV4IGFlNTI1MDEuLmM1MWFlNTkgMTAwNjQ0Ci0tLS0gYS9nbGFkZXVpL2dsYWRlLXV0aWxzLmMKLSsrKyBiL2dsYWRldWkvZ2xhZGUtdXRpbHMuYwotQEAgLTE5Nyw3ICsxOTcsNyBAQCBnbGFkZV91dGlsc19nZXRfcHNwZWNfZnJvbV9mdW5jbmFtZSAoY29uc3QgZ2NoYXIgKmZ1bmNuYW1lKQotICAqICAgICAgICAgIHNlbGVjdGVkICJPSyIsIFRydWUgaWYgdGhlIEB0eXBlIHdhcyBHTEFERV9VSV9ZRVNfT1JfTk8gYW5kCi0gICogICAgICAgICAgdGhlIHVzZXIgc2VsZWN0ZWQgIllFUyI7IEZhbHNlIG90aGVyd2lzZS4KLSAgKi8KLS1naW50Ci0rR19HTlVDX1BSSU5URig0LCA1KSBnaW50Ci0gZ2xhZGVfdXRpbF91aV9tZXNzYWdlIChHdGtXaWRnZXQgICAgICAgICAgICpwYXJlbnQsIAotIAkJICAgICAgIEdsYWRlVUlNZXNzYWdlVHlwZSAgIHR5cGUsCi0gCQkgICAgICAgR3RrV2lkZ2V0ICAgICAgICAgICAqd2lkZ2V0LAotQEAgLTMyMCw3ICszMjAsNyBAQCByZW1vdmVfbWVzc2FnZV90aW1lb3V0IChGbGFzaEluZm8gKiBmaSkKLSAgKgotICAqIEZsYXNoIGEgdGVtcG9yYXJ5IG1lc3NhZ2Ugb24gdGhlIHN0YXR1c2Jhci4KLSAgKi8KLS12b2lkCi0rR19HTlVDX1BSSU5URigzLCA0KSB2b2lkCi0gZ2xhZGVfdXRpbF9mbGFzaF9tZXNzYWdlIChHdGtXaWRnZXQgKnN0YXR1c2JhciwgZ3VpbnQgY29udGV4dF9pZCwgZ2NoYXIgKmZvcm1hdCwgLi4uKQotIHsKLSAJdmFfbGlzdCBhcmdzOwotLS0gCi0yLjE0LjEKLQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtZGV2dG9vbHMvZ2xhZGUvZ2xhZGUzLzAwMDEtZ25vbWUtZG9jLXV0aWxzLm1ha2Utc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1kZXZ0b29scy9nbGFkZS9nbGFkZTMvMDAwMS1nbm9tZS1kb2MtdXRpbHMubWFrZS1zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyNGMzOS4uMDAwMDAwMAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1kZXZ0b29scy9nbGFkZS9nbGFkZTMvMDAwMS1nbm9tZS1kb2MtdXRpbHMubWFrZS1zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLUZyb20gYWVkMDAyY2Q5ZmY5ZThmOTcyMTIwZmJhYzMzYjRhNjVhYmE5NTJlMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KLURhdGU6IFR1ZSwgMjUgU2VwIDIwMTIgMTA6Mjg6MzMgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSF0gZ25vbWUtZG9jLXV0aWxzLm1ha2U6IHN5c3Jvb3RlZCBwa2ctY29uZmlnCi1NSU1FLVZlcnNpb246IDEuMAotQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Ci1Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Ci0KLXNhbWUgYXBwcm9hY2ggYXMgdXNlZCB1c2VkIGluIGdub21lLWRpc2stdXRpbGl0eToKLQotSW4gY3Jvc3MgZW52aXJvbm1lbnQgd2UgaGF2ZSB0byBwcmVwZW5kIHRoZSBzeXNyb290IHRvIHRoZSBwYXRoIGZvdW5kIGJ5Ci1wa2djb25maWcgc2luY2UgdGhlIHBhdGggcmV0dXJuZWQgZnJvbSBwa2djb25maWcgZG9lcyBub3QgaGF2ZSBzeXNyb290IHByZWZpeGVkCi1pdCBlbmRzIHVwIHVzaW5nIHRoZSBmaWxlcyBmcm9tIGhvc3Qgc3lzdGVtLiBOb3cgdXN1YWxseSBwZW9wbGUgaGF2ZSBnbm9tZSBpbnN0YWxsZWQKLXNvIHRoZSBidWlsZCBzdWNjZWVkcyBidXQgaWYgeW91IGRvbnQgaGF2ZSBnbm9tZSBpbnN0YWxsZWQgb24gYnVpbGQgaG9zdCB0aGVuCi1pdCB3b250IGZpbmQgdGhlIGZpbGVzIG9uIGhvc3Qgc3lzdGVtIGFuZCBwYWNrYWdlcyB1c2luZyBnbm9tZS1kb2MtdXRpbHMgd29udAotY29tcGlsZS4KLQotVGhpcyBzaG91bGQgd29yayBvayB3aXRoIG5vbiBzeXNyb290ZWQgYnVpbGRzIHRvbyBzaW5jZSBpbiB0aG9zZSBjYXNlcyBQS0dfQ09ORklHX1NZU1JPT1RfRElSCi13aWxsIGJlIGVtcHR5Ci0KLVVwc3RyZWFtLVN0YXR1czogcGVuZGluZwotCi1TaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+Ci0tLS0KLSBnbm9tZS1kb2MtdXRpbHMubWFrZSB8ICAgMTAgKysrKystLS0tLQotIDEgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvZ25vbWUtZG9jLXV0aWxzLm1ha2UgYi9nbm9tZS1kb2MtdXRpbHMubWFrZQotaW5kZXggNDJkOWRmMy4uZjcxYmJmYSAxMDA2NDQKLS0tLSBhL2dub21lLWRvYy11dGlscy5tYWtlCi0rKysgYi9nbm9tZS1kb2MtdXRpbHMubWFrZQotQEAgLTEzMywxMSArMTMzLDExIEBAIF9ET0NfQUJTX1NSQ0RJUiA9IEBhYnNfc3JjZGlyQAotIF94bWwycG8gPz0gYHdoaWNoIHhtbDJwb2AKLSBfeG1sMnBvX21vZGUgPSAkKGlmICQoRE9DX0lEKSxtYWxsYXJkLGRvY2Jvb2spCi0gCi0tX2RiMmh0bWwgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSBkYjJodG1sIGdub21lLWRvYy11dGlsc2AKLS1fZGIyb21mICA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMm9tZiBnbm9tZS1kb2MtdXRpbHNgCi0tX2NodW5rcyAgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY2h1bmtzLnhzbAotLV9jcmVkaXRzID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NyZWRpdHMueHNsCi0tX2lkcyA/PSAkKHNoZWxsICQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzKS9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvaWRzLnhzbAotK19kYjJodG1sID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMmh0bWwgZ25vbWUtZG9jLXV0aWxzYAotK19kYjJvbWYgID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMm9tZiBnbm9tZS1kb2MtdXRpbHNgCi0rX2NodW5rcyAgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NodW5rcy54c2wKLStfY3JlZGl0cyA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY3JlZGl0cy54c2wKLStfaWRzID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCi0gCi0gaWYgRU5BQkxFX1NLCi0gX0VOQUJMRV9TSyA9IHRydWUKLS0tIAotMS43LjYuNQotCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1kZXZ0b29scy9nbGFkZS9nbGFkZTMvMDAwMi1maXgtZ2NjLTYtYnVpbGQucGF0Y2ggYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1kZXZ0b29scy9nbGFkZS9nbGFkZTMvMDAwMi1maXgtZ2NjLTYtYnVpbGQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MzVmZjguLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtZGV2dG9vbHMvZ2xhZGUvZ2xhZGUzLzAwMDItZml4LWdjYy02LWJ1aWxkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotRnJvbSA1YWEzZDJhYmI5MDVmYTg1OTRmNmM2NTcyYTg3ODA5ZGE1NGM5MzQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgotRGF0ZTogTW9uLCA1IFNlcCAyMDE2IDExOjI1OjI3ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0hdIGZpeCBnY2MtNiBidWlsZAotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLQotU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgotLS0tCi0gZ2xhZGV1aS9nbGFkZS1lZGl0b3ItcHJvcGVydHkuYyB8IDMgKysrCi0gMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvZ2xhZGV1aS9nbGFkZS1lZGl0b3ItcHJvcGVydHkuYyBiL2dsYWRldWkvZ2xhZGUtZWRpdG9yLXByb3BlcnR5LmMKLWluZGV4IGEwYzEwMzkuLjVlOWFjMzggMTAwNjQ0Ci0tLS0gYS9nbGFkZXVpL2dsYWRlLWVkaXRvci1wcm9wZXJ0eS5jCi0rKysgYi9nbGFkZXVpL2dsYWRlLWVkaXRvci1wcm9wZXJ0eS5jCi1AQCAtMjcwMyw2ICsyNzAzLDggQEAgZ2xhZGVfZXByb3Bfb2JqZWN0X3ZpZXcgKGdib29sZWFuICAgICAgICAgICAgIHJhZGlvKQotIH0KLSAKLSAKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwiCi0gc3RhdGljIGdjaGFyICoKLSBnbGFkZV9lcHJvcF9vYmplY3RfZGlhbG9nX3RpdGxlIChHbGFkZUVkaXRvclByb3BlcnR5ICplcHJvcCkKLSB7Ci1AQCAtMjczMSw2ICsyNzMzLDcgQEAgZ2xhZGVfZXByb3Bfb2JqZWN0X2RpYWxvZ190aXRsZSAoR2xhZGVFZGl0b3JQcm9wZXJ0eSAqZXByb3ApCi0gCXJldHVybiBnX3N0cmR1cF9wcmludGYgKGZvcm1hdCwgZ190eXBlX25hbWUgCi0gCQkJCShlcHJvcC0+a2xhc3MtPnBzcGVjLT52YWx1ZV90eXBlKSk7Ci0gfQotKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCi0gCi0gCi0gZ2Jvb2xlYW4KLS0tIAotMi41LjUKLQpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtZGV2dG9vbHMvZ2xhZGUvZ2xhZGUzXzMuOC41LmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtZGV2dG9vbHMvZ2xhZGUvZ2xhZGUzXzMuOC41LmJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGQwZDkwLi4wMDAwMDAwCi0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLWRldnRvb2xzL2dsYWRlL2dsYWRlM18zLjguNS5iYgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVNVTU1BUlkgPSAiR2xhZGUgLSBBIFVzZXIgSW50ZXJmYWNlIERlc2lnbmVyIgotSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2duYXNoIgotTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFhYmU4NzU5MWNiOGFlMGYzYzY4YmU2OTc3YmI1NTIyIFwKLSAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT05YWMyZTdjZmYxZGRhZjQ4YjZlYWI2MDI4ZjIzZWY4OCBcCi0gICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PTI1Mjg5MGQ5ZWVlMjZhYWI3YjQzMmU4YjhhNjE2NDc1IgotREVQRU5EUyA9ICJndGsrIGdub21lLWRvYy11dGlscyBnbm9tZS1jb21tb24gbGlieG1sMiBpbnRsdG9vbC1uYXRpdmUiCi0KLWluaGVyaXQgZmVhdHVyZXNfY2hlY2sgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUgZ3RrLWljb24tY2FjaGUKLQotUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKLQotU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9nbGFkZTMvMy44L2dsYWRlMy0ke1BWfS50YXIueHogXAotICAgICAgICAgICBmaWxlOi8vMDAwMS1nbm9tZS1kb2MtdXRpbHMubWFrZS1zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAyLWZpeC1nY2MtNi1idWlsZC5wYXRjaCBcCi0gICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1HX0dOVUNfUFJJTlRGLW9uLWZ1bmN0aW9ucy13aXRoLWZvcm1hdC1zdHJpbmdzLnBhdGNoIFwKLSAgICAgICAgICAgIgotU1JDX1VSSVttZDVzdW1dID0gIjRlNGI0ZjVlZTM0YTAzZTAxN2U0Y2VmOTdkNzk2YzFmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU4YTVmNmU0ZGY0MDI4MjMwZGRlY2M3NGM1NjQ4MDhiN2VjNDQ3MWIxOTI1MDU4ZTI5MzA0Zjc3OGI2YjI3MzUiCi0KLUVYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjcm9sbGtlZXBlciIKLQotRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1wYW5lbC1wbHVnaW5zL2tiZGxlZHMveGZjZTQta2JkbGVkcy1wbHVnaW5fMC4wLjYuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy1wYW5lbC1wbHVnaW5zL2tiZGxlZHMveGZjZTQta2JkbGVkcy1wbHVnaW5fMC4wLjYuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZjU1MDguLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMtcGFuZWwtcGx1Z2lucy9rYmRsZWRzL3hmY2U0LWtiZGxlZHMtcGx1Z2luXzAuMC42LmJiCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotU1VNTUFSWSA9ICJYRkNFIHBhbmVsIHBsdWdpbiBkaXNwbGF5aW5nIHN0YXR1cyBvZiBrZXlib2FyZCBMRURzIgotREVTQ1JJUFRJT04gPSAiVGhpcyBwbHVnaW4gc2hvd3MgdGhlIHN0YXRlIG9mIHlvdXIga2V5Ym9hcmQgTEVEczogQ2FwcywgU2Nyb2xsIGFuZCBOdW0gTG9jayBpbiBYZmNlIHBhbmVsIgotSE9NRVBBR0UgPSAiaHR0cDovL2dvb2RpZXMueGZjZS5vcmcvcHJvamVjdHMvcGFuZWwtcGx1Z2lucy94ZmNlNC1rYmRsZWRzLXBsdWdpbiIKLUxJQ0VOU0UgPSAiR1BMdjIiCi1MSUNfRklMRVNfQ0hLU1VNID0gIiBcCi0gICAgZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKLSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTI1Mjg5MGQ5ZWVlMjZhYWI3YjQzMmU4YjhhNjE2NDc1IFwKLSIKLQotaW5oZXJpdCB4ZmNlLXBhbmVsLXBsdWdpbgotCi1TUkNfVVJJW21kNXN1bV0gPSAiZGI2YWQ4ZTM1MDJmMzM3M2YwODdiYTIwMzQxNDE1NTIiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmQyODBhZDcyMDdiY2I5Y2M4N2MyNzlkYzNhYjkwODRmZDkzMzI1ZTg3ZjY3ODU4ZTg5MTc3MjliNTAyMDFjZCIKLQotRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS94ZmNlNC9wYW5lbC1wbHVnaW5zL3hmY2U0LWtiZGxlZHMtcGx1Z2luIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9leG8vZXhvXzAuMTIuOS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvZXhvL2V4b18wLjEyLjExLmJiCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvZXhvL2V4b18wLjEyLjkuYmIKcmVuYW1lIHRvIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvZXhvL2V4b18wLjEyLjExLmJiCmluZGV4IDhkNTliZTEuLjRjMTY2ODkgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvZXhvL2V4b18wLjEyLjkuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9leG8vZXhvXzAuMTIuMTEuYmIKQEAgLTUsNyArNSw3IEBACiBERVBFTkRTID0gImd0ayszIGxpYnhmY2U0dWkgdmlydHVhbC9saWJ4MTEgbGlidXJpLXBlcmwtbmF0aXZlIGNhaXJvIgogREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2xpYi0yLjAtbmF0aXZlIHhmY2U0LWRldi10b29scy1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIgogCi1pbmhlcml0IHhmY2UgcHl0aG9ubmF0aXZlIHBlcmxuYXRpdmUgZ3RrLWRvYyBmZWF0dXJlc19jaGVjaworaW5oZXJpdCB4ZmNlIHBlcmxuYXRpdmUgZ3RrLWRvYyBmZWF0dXJlc19jaGVjawogCiBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTX2NsYXNzLW5hdGl2ZSA9ICIiCkBAIC0yMCw4ICsyMCw4IEBACiAgICAgZmlsZTovL3JlZHVjZS1idWlsZC10by1leG8tY3NvdXJjZS1vbmx5LnBhdGNoIFwKICIKIAotU1JDX1VSSVttZDVzdW1dID0gIjk3MzBmOWQyNzBiNDk2OGE4YmJlYmU3M2U2ZGU5MzRmIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gIjliYTBiZjBmZDU5YWViMWNkMzJhZTM4NjNlN2E3ODIyMjY1NWViMTVlYjY3NWJhMDhmM2IzZmI5MzNiNmZiZmUiCitTUkNfVVJJW21kNXN1bV0gPSAiZWZlYjAzOWQ2NGIzMjU3ZTM5YTFhMzhlNzVlYjE5YjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWM4OTI1MTljMDhhNjdmM2UwYTFmMGY4ZDQzNDQ2ZTI2ODcxMTgzZTVhYTZiZTdmODJlMjE0ZjM4OGQxZTViNiIKIAogUEFDS0FHRUNPTkZJRyA/Pz0gIiIKIFBBQ0tBR0VDT05GSUdfY2xhc3MtdGFyZ2V0ID8/PSAiZ3RrIgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9ndGsteGZjZS1lbmdpbmUvZ3RrLXhmY2UtZW5naW5lL2dsaWItMi41NC1mdGJmcy5wYXRjaCBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvZ3RrLXhmY2UtZW5naW5lL2d0ay14ZmNlLWVuZ2luZS9nbGliLTIuNTQtZnRiZnMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiODkxMDIuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9ndGsteGZjZS1lbmdpbmUvZ3RrLXhmY2UtZW5naW5lL2dsaWItMi41NC1mdGJmcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLURlc2NyaXB0aW9uOiBGaXggRlRCRlMgd2l0aCBnbGliIDIuNTQKLSBnbGliLW1rZW51bXMgbm93IGV4cGVjdHMgaW5wdXQgZmlsZXMgdG8gYmUgVVRGLTgsCi0gZml4IHRoZSBlbmNvZGluZyBvZiBsaWJnbm9tZXVpL2dub21lLXNjb3Jlcy5oCi1BdXRob3I6IEFkcmlhbiBCdW5rIDxidW5rQGRlYmlhbi5vcmc+Ci0KLXBvcnRlZCBmcm9tOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTg3MDczOAotCi1VcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKLVNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+Ci0KLUluZGV4OiBndGsteGZjZS1lbmdpbmUtMy4yLjAvZ3RrLTMuMC94ZmNlX3N0eWxlX3R5cGVzLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBndGsteGZjZS1lbmdpbmUtMy4yLjAub3JpZy9ndGstMy4wL3hmY2Vfc3R5bGVfdHlwZXMuaAotKysrIGd0ay14ZmNlLWVuZ2luZS0zLjIuMC9ndGstMy4wL3hmY2Vfc3R5bGVfdHlwZXMuaAotQEAgLTE5LDcgKzE5LDcgQEAKLSAgKgotICAqICBQb3J0aW9ucyBiYXNlZCBUaGluaWNlIHBvcnQgYnkgCi0gICogICAgICAgICAgICAgICAgICAgICAgIFRpbSBHZXJsYSA8dGltZ0BycnYubmV0PiwKLS0gKiAgICAgICAgICAgICAgICAgICAgICAgVG9tYXMg1mdyZW4gPHN0cmljQGluZy51bXUuc2UsCi0rICogICAgICAgICAgICAgICAgICAgICAgIFRvbWFzIMOWZ3JlbiA8c3RyaWNAaW5nLnVtdS5zZT4sCi0gICogICAgICAgICAgICAgICAgICAgICAgIFJpY2hhcmQgSHVsdCA8cmh1bHRAY29kZWZhY3Rvcnkuc2U+Ci0gICogIFBvcnRpb25zIGJhc2VkIG9uIFNtb290aCB0aGVtZSBieQotICAqICAgICAgICAgICAgICAgICAgICAgICBBbmRyZXcgSm9obnNvbiA8YWpnZW5pdXNAYWpnZW5pdXMudXM+CmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL2d0ay14ZmNlLWVuZ2luZS9ndGsteGZjZS1lbmdpbmVfMy4yLjAuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL2d0ay14ZmNlLWVuZ2luZS9ndGsteGZjZS1lbmdpbmVfMy4yLjAuYmIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZDRhNGMuLjAwMDAwMDAKLS0tIGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9ndGsteGZjZS1lbmdpbmUvZ3RrLXhmY2UtZW5naW5lXzMuMi4wLmJiCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotU1VNTUFSWSA9ICJYRkNFIHRoZW1lIGZvciBHVEsiCi1TRUNUSU9OID0gIngxMS9saWJzIgotTElDRU5TRSA9ICJHUEx2MiIKLUxJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgotREVQRU5EUyA9ICJndGsrIHhmY2U0LWRldi10b29scy1uYXRpdmUiCi0KLWluaGVyaXQgeGZjZSBmZWF0dXJlc19jaGVjawotCi1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgotCi1TUkNfVVJJICs9ICJmaWxlOi8vZ2xpYi0yLjU0LWZ0YmZzLnBhdGNoIgotCi1TUkNfVVJJW21kNXN1bV0gPSAiMzYzZDZjMTZhNDhhMDBlMjZkNDVjNDVjMmUxZmQ3MzkiCi1TUkNfVVJJW3NoYTI1NnN1bV0gPSAiODc1YzljM2JkYTk2ZmFmMDUwYTIyMjQ2NDljYzQyMTI5ZmZiNjYyYzRkZTMzYWRkOGMwZmQxZmI4NjBiNDdlZCIKLQotUEFDS0FHRUNPTkZJRyA/Pz0gImd0azMiCi1QQUNLQUdFQ09ORklHW2d0azNdID0gIi0tZW5hYmxlLWd0azMsLS1kaXNhYmxlLWd0azMsIGd0ayszLCBndGszLXhmY2UtZW5naW5lIgotCi1QQUNLQUdFUyArPSAiJHtQTn0tdGhlbWVzIGd0azMteGZjZS1lbmdpbmUiCi1GSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLyouc28iCi1GSUxFU19ndGszLXhmY2UtZW5naW5lICs9ICIke2xpYmRpcn0vZ3RrLTMuMC8qL3RoZW1pbmctZW5naW5lcy8qLnNvIgotRklMRVNfJHtQTn0tdGhlbWVzICs9ICIke2RhdGFkaXJ9L3RoZW1lcyIKLQotRklMRVNfJHtQTn0tZGV2ICs9ICIgXAotICAgICR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLmxhIFwKLSAgICAke2xpYmRpcn0vZ3RrLTMuMC8qL3RoZW1pbmctZW5naW5lcy8qLmxhIFwKLSIKLQotUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXRoZW1lcyIKLVJERVBFTkRTX2d0azMteGZjZS1lbmdpbmUgKz0gIiR7UE59LXRoZW1lcyIKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvbGlieGZjZTR1aS9saWJ4ZmNlNHVpXzQuMTQuMS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvbGlieGZjZTR1aS9saWJ4ZmNlNHVpXzQuMTQuMS5iYgppbmRleCAwNTNlYjIwLi4zNDhiNjg1IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL2xpYnhmY2U0dWkvbGlieGZjZTR1aV80LjE0LjEuYmIKKysrIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9saWJ4ZmNlNHVpL2xpYnhmY2U0dWlfNC4xNC4xLmJiCkBAIC0xNyw3ICsxNyw2IEBACiBFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC12ZW5kb3ItaW5mbz0ke0RJU1RST30iCiAKIFBBQ0tBR0VDT05GSUcgPz89ICIiCi1QQUNLQUdFQ09ORklHW2dsYWRldWldID0gIi0tZW5hYmxlLWdsYWRldWksLS1kaXNhYmxlLWdsYWRldWksZ2xhZGUzIgogUEFDS0FHRUNPTkZJR1tnbGFkZXVpMl0gPSAiLS1lbmFibGUtZ2xhZGV1aTIsLS1kaXNhYmxlLWdsYWRldWkyLGdsYWRlIgogUEFDS0FHRUNPTkZJR1tzdGFydHVwLW5vdGlmaWNhdGlvbl0gPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sLS1kaXNhYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLHN0YXJ0dXAtbm90aWZpY2F0aW9uIgogCkBAIC0yOCw5ICsyNyw3IEBACiBQQUNLQUdFUyArPSAiJHtQTn0tZ2xhZGUiCiBGSUxFU18ke1BOfS1nbGFkZSA9ICIgXAogICAgICR7bGliZGlyfS9nbGFkZSBcCi0gICAgJHtsaWJkaXJ9L2dsYWRlMyBcCiAgICAgJHtkYXRhZGlyfS9nbGFkZSBcCi0gICAgJHtkYXRhZGlyfS9nbGFkZTMgXAogIgogCiBSREVQRU5EU18ke1BOfS1ndGsyID0gIiR7UE59IgpkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC14ZmNlLWJhc2UuYmIgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXhmY2UtYmFzZS5iYgppbmRleCA0MTJjNmFlLi43MGVmOTA5IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXhmY2UtYmFzZS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXhmY2UtYmFzZS5iYgpAQCAtMTMsNyArMTMsNiBAQAogICAgIHhmZGVza3RvcCBcCiAgICAgeGZjZTQtcGFuZWwgXAogICAgIFwKLSAgICBndGsteGZjZS1lbmdpbmUgXAogICAgIGxpYnJzdmctZ3RrIFwKICAgICBcCiAgICAgeGZjZTQtcGFuZWwtcGx1Z2luLWFjdGlvbnMgXApkaWZmIC0tZ2l0IGEvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC14ZmNlLWV4dGVuZGVkLmJiIGIvbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC14ZmNlLWV4dGVuZGVkLmJiCmluZGV4IDQyZjIwYzkuLjI1NWQyYjUgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAteGZjZS1leHRlbmRlZC5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXhmY2UtZXh0ZW5kZWQuYmIKQEAgLTQ1LDcgKzQ1LDYgQEAKICAgICB4ZmNlNC1ub3Rlcy1wbHVnaW4gXAogICAgIHhmY2U0LXdoaXNrZXJtZW51LXBsdWdpbiBcCiAgICAgeGZjZTQtbWFpbHdhdGNoLXBsdWdpbiBcCi0gICAgeGZjZTQta2JkbGVkcy1wbHVnaW4gXAogICAgIHhmY2U0LXNtYXJ0Ym9va21hcmstcGx1Z2luIFwKICAgICB4ZmNlNC1ob3Rjb3JuZXItcGx1Z2luIFwKICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAneGZjZTQtcHVsc2VhdWRpby1wbHVnaW4nLCAnJywgZCl9IFwKZGlmZiAtLWdpdCBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvdGh1bmFyL3RodW5hcl8xLjguOS5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvdGh1bmFyL3RodW5hcl8xLjguMTAuYmIKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQvbWV0YS14ZmNlL3JlY2lwZXMteGZjZS90aHVuYXIvdGh1bmFyXzEuOC45LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3RodW5hci90aHVuYXJfMS44LjEwLmJiCmluZGV4IGJjOTk2YzEuLmYyMzc2YWEgMTAwNjQ0Ci0tLSBhL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvdGh1bmFyL3RodW5hcl8xLjguOS5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3RodW5hci90aHVuYXJfMS44LjEwLmJiCkBAIC04LDExICs4LDggQEAKIAogUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKIAotU1JDX1VSSSA9ICJodHRwOi8vYXJjaGl2ZS54ZmNlLm9yZy9zcmMveGZjZS8ke0JQTn0vJHtAJyR7UFZ9J1swOjNdfS9UaHVuYXItJHtQVn0udGFyLmJ6MiIKLVNSQ19VUklbbWQ1c3VtXSA9ICJmZDExNjZlODc5Mjk0ZTQ0OTBkNWZhOWRjY2ZkZDlkYSIKLVNSQ19VUklbc2hhMjU2c3VtXSA9ICI3YTc1OGU3YWMwMzUwMWM1MjBjMzA0Zjg4NDUzNTMzMTVjOTU0ZDQyOWIxN2Q1OTFiOGVlYThiMTRmMTM1MGI5IgotCi1TID0gIiR7V09SS0RJUn0vVGh1bmFyLSR7UFZ9LyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NWM3Mzk0ZDgyNTQyZDVhMDIzZjFmNWJhZWYxMDlkOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZDQ0OGQ4MWMwZTQ5ZWZiYWE1YWU2YmYzNGFjM2M4OGE2MTQxNzhhMTEyN2FmYWVlNmIzYTFiNWVlMTJlNzA5IgogCiBQQUNLQUdFQ09ORklHID8/PSAiIgogUEFDS0FHRUNPTkZJR1twY3JlXSA9ICItLWVuYWJsZS1wY3JlLC0tZGlzYWJsZS1wY3JlLGxpYnBjcmUiCmRpZmYgLS1naXQgYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3R1bWJsZXIvdHVtYmxlcl8wLjIuNy5iYiBiL21ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvdHVtYmxlci90dW1ibGVyXzAuMi44LmJiCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkL21ldGEteGZjZS9yZWNpcGVzLXhmY2UvdHVtYmxlci90dW1ibGVyXzAuMi43LmJiCnJlbmFtZSB0byBtZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3R1bWJsZXIvdHVtYmxlcl8wLjIuOC5iYgppbmRleCA0MzRmODc0Li5lMGQ0ODQ1IDEwMDY0NAotLS0gYS9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3R1bWJsZXIvdHVtYmxlcl8wLjIuNy5iYgorKysgYi9tZXRhLW9wZW5lbWJlZGRlZC9tZXRhLXhmY2UvcmVjaXBlcy14ZmNlL3R1bWJsZXIvdHVtYmxlcl8wLjIuOC5iYgpAQCAtNiw4ICs2LDggQEAKIAogaW5oZXJpdCB4ZmNlIGd0ay1kb2MKIAotU1JDX1VSSVttZDVzdW1dID0gImE1OWIyYTU0NWM5YzEyOGRiZDJiOTYwYTc3NzlkZWMwIgotU1JDX1VSSVtzaGEyNTZzdW1dID0gImY3MDRjMzVmMTY3MTZjYmVlM2M5NDg4M2NlZTJhOGQ4NjVlOWNmMjUzNWQwZTg0ZjU3ZTFjOGNjZTAwMzE0ZTQiCitTUkNfVVJJW21kNXN1bV0gPSAiNWQ1NDE2MDhiMzk2MmZkMmIxNmUyM2EyNjZmZDdhMTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDk5OWI5YTNkZWI1NzAxMDk1NmRiNjYzMGFlNzIwNTgxMzk5OTE0NzA0MzE3MTA0OWE3YjZjMzMzYmU5M2U5NiIKIAogSU5TQU5FX1NLSVBfJHtQTn0gPSAiZGV2LXNvIgogCg==