ZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlibG9nZ2luZy50ZXggYi9Eb2MvbGliL2xpYmxvZ2dpbmcudGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYWNkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGliL2xpYmxvZ2dpbmcudGV4CkBAIC0wLDAgKzEsMTEzOSBAQAorXHNlY3Rpb257XG1vZHVsZXtsb2dnaW5nfSAtLS0KKyAgICAgICAgIExvZ2dpbmcgZmFjaWxpdHkgZm9yIFB5dGhvbn0KKworXGRlY2xhcmVtb2R1bGV7c3RhbmRhcmR9e2xvZ2dpbmd9CSUgc3RhbmRhcmQgbGlicmFyeSwgaW4gUHl0aG9uCisKKyUgVGhlc2UgYXBwbHkgdG8gYWxsIG1vZHVsZXMsIGFuZCBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2U6CisKK1xtb2R1bGVhdXRob3J7VmluYXkgU2FqaXB9e3ZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbX0KK1xzZWN0aW9uYXV0aG9ye1NraXAgTW9udGFuYXJvfXtza2lwQHBvYm94LmNvbX0KKworXG1vZHVsZXN5bm9wc2lze0xvZ2dpbmcgbW9kdWxlIGZvciBQeXRob24gYmFzZWQgb24gUEVQIDI4Mi59CisKKworVGhlcmUgaXMgYSBuZWVkIGZvciBhIHN0YW5kYXJkIGxvZ2dpbmcgc3lzdGVtIGluIFB5dGhvbiwgYXMgZG9jdW1lbnRlZCBpbgore31ccGVwezI4Mn0gYW5kIGVudGh1c2lhc3RpY2FsbHkgZW5kb3JzZWQgYnkgdGhlIEd1aWRvIHZhbiBSb3NzdW0gaW4gdGhlCit7fVxjaXRldGl0bGVbaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9lc3NheXMvcGVwcGFyYWRlLmh0bWxde1BhcmFkZSBvZiB0aGUKK1BFUHN9LiAgQnkgYSBoYXBweSBjb2luY2lkZW5jZSwgdGhlIHBhY2thZ2UgZGVzY3JpYmVkIGhlcmUgd2FzIGFscmVhZHkgaW4KK2RldmVsb3BtZW50IGFuZCBmYWlybHkgY2xvc2UgaW4gaW50ZW50IGFuZCBkZXNpZ24gdG8gdGhlIGRlc2NyaXB0aW9uIGluIHRoZQorYWZvcmVtZW50aW9uZWQgUEVQLCBib3Jyb3dpbmcgYXMgaXQgZGlkIGhlYXZpbHkgZnJvbSBKU1ItNDcgKG5vdyBKREsgMS40J3MKK2phdmEudXRpbC5sb2dnaW5nIHBhY2thZ2UpIGFuZAore31cdWxpbmt7bG9nNGp9e2h0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovfS4gVGhpcyBzZWN0aW9uIHBhZ2UKK2Rlc2NyaWJlcyBpdCBpbiBtb3JlIGRldGFpbC4KKworVGhpcyBwYWNrYWdlIG93ZXMgaXRzIGdyZWF0ZXN0IGRlYnQgdG8gQXBhY2hlCit7fVx1bGlua3tsb2c0an17aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai99LiBEdWUgbm90aWNlIHdhcyBhbHNvIHRha2VuCitvZiBsb2c0aidzIGNvbXByZWhlbnNpdmUKK3t9XHVsaW5re2NyaXRpcXVlfXtodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqL2RvY3MvY3JpdGlxdWUuaHRtbH0gb2YKK0pTUi00Ny4gIFRoaXMgcGFja2FnZSBiZWFycyBhIGNsb3NlIHJlc2VtYmxhbmNlIHRvIGxvZzRqLCBidXQgaXMgbm90IGEgY2xvc2UKK3RyYW5zbGF0aW9uIChhcywgZm9yIGV4YW1wbGUsIHt9XHVsaW5re2xvZzRwfXtodHRwOi8vbG9nNHAuc291cmNlZm9yZ2UubmV0L30KK2FwcGVhcnMgdG8gYmUpLgorCisKKworXHN1YnNlY3Rpb257RnVuY3Rpb25zfQorCitUaGUgXG1vZHVsZXtsb2dnaW5nfSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworCitcYmVnaW57ZnVuY2Rlc2N9e2dldExldmVsTmFtZX17bGV2ZWx9CisKK1JldHVybiB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBsb2dnaW5nIGxldmVsIFx2YXJ7bGV2ZWx9LgorCitJZiB0aGUgbGV2ZWwgaXMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGxldmVscyAoXHZhcntDUklUSUNBTH0sIFx2YXJ7RVJST1J9LAore31cdmFye1dBUk59LCBcdmFye0lORk99LCBcdmFye0RFQlVHfSkgdGhlbiB5b3UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nCitzdHJpbmcuIElmIHlvdSBoYXZlIGFzc29jaWF0ZWQgbGV2ZWxzIHdpdGggbmFtZXMgdXNpbmcKK3t9XGZ1bmN0aW9ue2FkZExldmVsTmFtZX0gdGhlbiB0aGUgbmFtZSB5b3UgaGF2ZSBhc3NvY2lhdGVkIHdpdGggXHZhcntsZXZlbH0KK2lzIHJldHVybmVkLiBPdGhlcndpc2UsIHRoZSBzdHJpbmcgIkxldmVsIFwlcyIgXCUgbGV2ZWwgaXMgcmV0dXJuZWQuCisKK1xlbmR7ZnVuY2Rlc2N9CisKKworXGJlZ2lue2Z1bmNkZXNjfXthZGRMZXZlbE5hbWV9e2xldmVsLCBsZXZlbE5hbWV9CisKK0Fzc29jaWF0ZSBcdmFye2xldmVsTmFtZX0gd2l0aCBcdmFye2xldmVsfS4gIFRoaXMgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcKK2xldmVscyB0byB0ZXh0IGR1cmluZyBtZXNzYWdlIGZvcm1hdHRpbmcuCisKK1xlbmR7ZnVuY2Rlc2N9CisKKworXGJlZ2lue2Z1bmNkZXNjfXtzZXRMb2dnZXJDbGFzc317a2xhc3N9CisKK1NldCB0aGUgY2xhc3MgdG8gYmUgdXNlZCB3aGVuIGluc3RhbnRpYXRpbmcgYSBsb2dnZXIuIFRoZSBjbGFzcyBzaG91bGQKK2RlZmluZSBcY29kZXtfX2luaXRfXygpfSBzdWNoIHRoYXQgb25seSBhIG5hbWUgYXJndW1lbnQgaXMgcmVxdWlyZWQsIGFuZCB0aGUKK3t9XGNvZGV7X19pbml0X18oKX0gc2hvdWxkIGNhbGwgTG9nZ2VyLl9faW5pdF9fKCkKKworXGVuZHtmdW5jZGVzY30KKworCitcYmVnaW57ZnVuY2Rlc2N9e2Jhc2ljQ29uZmlnfXt9CisKK0RvIGJhc2ljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBsb2dnaW5nIHN5c3RlbSBieSBjcmVhdGluZyBhCit7fVxjbGFzc3tTdHJlYW1IYW5kbGVyfSB3aXRoIGEgZGVmYXVsdCB7fVxjbGFzc3tGb3JtYXR0ZXJ9IGFuZCBhZGRpbmcgaXQgdG8KK3RoZSByb290IGxvZ2dlci4KKworXGVuZHtmdW5jZGVzY30KKworCitcYmVnaW57ZnVuY2Rlc2N9e2dldExvZ2dlcn17XG9wdGlvbmFse25hbWU9Tm9uZX19CisKK1JldHVybiBhIGxvZ2dlciB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LiAgSWYgbm8KK25hbWUgaXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIHJvb3QgbG9nZ2VyLgorCitcZW5ke2Z1bmNkZXNjfQorCisKK1xiZWdpbntmdW5jZGVzY317Y3JpdGljYWx9e21zZywgKmFyZ3MsICoqa3dhcmdzfQorCitMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgXGNvZGV7Q1JJVElDQUx9IG9uIHRoZSByb290IGxvZ2dlci4KKworXGVuZHtmdW5jZGVzY30KKworCitcYmVnaW57ZnVuY2Rlc2N9e2Vycm9yfXttc2csICphcmdzLCAqKmt3YXJnc30KKworTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5IFx2YXJ7RVJST1J9IG9uIHRoZSByb290IGxvZ2dlci4KKworXGVuZHtmdW5jZGVzY30KKworCitcYmVnaW57ZnVuY2Rlc2N9e2V4Y2VwdGlvbn17bXNnLCAqYXJnc30KKworTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5IFxjb2Rle0VSUk9SfSBvbiB0aGUgcm9vdCBsb2dnZXIsCit3aXRoIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KKworXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXt3YXJufXttc2csICphcmdzLCAqKmt3YXJnc30KKworTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5IFxjb2Rle1dBUk59IG9uIHRoZSByb290IGxvZ2dlci4KKworXGVuZHtmdW5jZGVzY30KKworCitcYmVnaW57ZnVuY2Rlc2N9e2luZm99e21zZywgKmFyZ3MsICoqa3dhcmdzfQorCitMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgXGNvZGV7SU5GT30gb24gdGhlIHJvb3QgbG9nZ2VyLgorCitcZW5ke2Z1bmNkZXNjfQorCisKK1xiZWdpbntmdW5jZGVzY317ZGVidWd9e21zZywgKmFyZ3MsICoqa3dhcmdzfQorCitMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgXGNvZGV7REVCVUd9IG9uIHRoZSByb290IGxvZ2dlci4KKworXGVuZHtmdW5jZGVzY30KKworCitcYmVnaW57ZnVuY2Rlc2N9e2Rpc2FibGV9e2xldmVsfQorCitEaXNhYmxlIGFsbCBsb2dnaW5nIGNhbGxzIGxlc3Mgc2V2ZXJlIHRoYW4gXGNvZGV7bGV2ZWx9LgorCitcZW5ke2Z1bmNkZXNjfQorCisKK1xiZWdpbntmdW5jZGVzY317c2h1dGRvd259e30KKworUGVyZm9ybSBhbnkgY2xlYW51cCBhY3Rpb25zIGluIHRoZSBsb2dnaW5nIHN5c3RlbSAoZS5nLiBmbHVzaGluZyBidWZmZXJzKS4KK1Nob3VsZCBiZSBjYWxsZWQgYXQgYXBwbGljYXRpb24gZXhpdC4KKworXGVuZHtmdW5jZGVzY30KKworCisKK1xzdWJzZWN0aW9ue0RhdGF9CisKK1RoZSBcbW9kdWxle2xvZ2dpbmd9IG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZGF0YSBvYmplY3RzOgorCitcYmVnaW57ZGF0YWRlc2N9e3Jvb3R9CisKK1RoZSBkZWZhdWx0IGxvZ2dlci4KKworXGVuZHtkYXRhZGVzY30KKworCitcYmVnaW57ZGF0YWRlc2N9e0JBU0lDX0ZPUk1BVH0KKworVGhlIGRlZmF1bHQgbWVzc2FnZSBmb3JtYXQuCisKK1xlbmR7ZGF0YWRlc2N9CisKKworXGJlZ2lue2RhdGFkZXNjfXtDUklUSUNBTH0KKworVGhlIFxjb2Rle0NSSVRJQ0FMfSBsZXZlbC4KKworXGVuZHtkYXRhZGVzY30KKworCitcYmVnaW57ZGF0YWRlc2N9e0ZBVEFMfQorCitUaGUgXGNvZGUge0ZBVEFMfSBsZXZlbC4gIEEgc3lub255bSBmb3IgXGNvZGV7Q1JJVElDQUx9LgorCitcZW5ke2RhdGFkZXNjfQorCisKK1xiZWdpbntkYXRhZGVzY317V0FSTn0KKworVGhlIFxjb2RlIHtXQVJOfSBsZXZlbC4KKworXGVuZHtkYXRhZGVzY30KKworCitcYmVnaW57ZGF0YWRlc2N9e0lORk99CisKK1RoZSBcY29kZXtJTkZPfSBsZXZlbC4KKworXGVuZHtkYXRhZGVzY30KKworCitcYmVnaW57ZGF0YWRlc2N9e0RFQlVHfQorCitUaGUgXGNvZGV7REVCVUd9IGxldmVsLgorCitcZW5ke2RhdGFkZXNjfQorCisKK1xiZWdpbntkYXRhZGVzY317Tk9UU0VUfQorCitUaGUgXGNvZGV7Tk9UU0VUfSBsZXZlbC4KKworXGVuZHtkYXRhZGVzY30KKworCitcYmVnaW57ZGF0YWRlc2N9e3JhaXNlRXhjZXB0aW9uc30KKworSW5kaWNhdGVzIHdoZXRoZXIgZXhjZXB0aW9ucyBkdXJpbmcgaGFuZGxpbmcgc2hvdWxkIGJlIHByb3BhZ2F0ZWQuICBUcnVlIGJ5CitkZWZhdWx0LgorCitcZW5ke2RhdGFkZXNjfQorCisKKworXHN1YnNlY3Rpb257Q2xhc3Nlc30KKworVGhlIFxtb2R1bGV7bG9nZ2luZ30gbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgorCisKK1xiZWdpbntjbGFzc2Rlc2N9e0Zvcm1hdHRlcn17XG9wdGlvbmFse2ZtdD1Ob25lXG9wdGlvbmFseywgZGF0ZWZtdD1Ob25lfX19CisKK0Zvcm1hdHRlcnMgbmVlZCB0byBrbm93IGhvdyBhIExvZ1JlY29yZCBpcyBjb25zdHJ1Y3RlZC4gVGhleSBhcmUgcmVzcG9uc2libGUKK2ZvciBjb252ZXJ0aW5nIGEgTG9nUmVjb3JkIHRvICh1c3VhbGx5KSBhIHN0cmluZyB3aGljaCBjYW4gYmUgaW50ZXJwcmV0ZWQgYnkKK2VpdGhlciBhIGh1bWFuIG9yIGFuIGV4dGVybmFsIHN5c3RlbS4gVGhlIGJhc2UgRm9ybWF0dGVyIGFsbG93cyBhIGZvcm1hdHRpbmcKK3N0cmluZyB0byBiZSBzcGVjaWZpZWQuIElmIG5vbmUgaXMgc3VwcGxpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mCitcY29kZXsiXCVzKG1lc3NhZ2UpXGUgbiJ9IGlzIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitUaGUgRm9ybWF0dGVyIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIGEgZm9ybWF0IHN0cmluZyB3aGljaCBtYWtlcyB1c2Ugb2YKK2tub3dsZWRnZSBvZiB0aGUgTG9nUmVjb3JkIGF0dHJpYnV0ZXMgLSBlLmcuIHRoZSBkZWZhdWx0IHZhbHVlIG1lbnRpb25lZAorYWJvdmUgbWFrZXMgdXNlIG9mIHRoZSBmYWN0IHRoYXQgdGhlIHVzZXIncyBtZXNzYWdlIGFuZCBhcmd1bWVudHMgYXJlIHByZS0KK2Zvcm1hdHRlZCBpbnRvIGEgTG9nUmVjb3JkJ3MgbWVzc2FnZSBhdHRyaWJ1dGUuIEN1cnJlbnRseSwgdGhlIHVzZWZ1bAorYXR0cmlidXRlcyBpbiBhIExvZ1JlY29yZCBhcmUgZGVzY3JpYmVkIGJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorXGJlZ2lue2Rlc2NyaXB0aW9ufQorCitcaXRlbVtcJShuYW1lKXNde05hbWUgb2YgdGhlIGxvZ2dlciAobG9nZ2luZyBjaGFubmVsKX0KKworXGl0ZW1bXCUobGV2ZWxubylzXXtOdW1lcmljIGxvZ2dpbmcgbGV2ZWwgZm9yIHRoZSBtZXNzYWdlIChERUJVRywgSU5GTywgICAgICAgIAorV0FSTiwgRVJST1IsIENSSVRJQ0FMKX0KKworXGl0ZW1bXCUobGV2ZWxuYW1lKXNde1RleHQgbG9nZ2luZyBsZXZlbCBmb3IgdGhlIG1lc3NhZ2UgKCJERUJVRyIsICJJTkZPIiwgICAgICAgCisiV0FSTiIsICJFUlJPUiIsICJDUklUSUNBTCIpfQorCitcaXRlbVtcJShwYXRobmFtZSlzXXtGdWxsIHBhdGhuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgbG9nZ2luZworY2FsbCB3YXMgaXNzdWVkIChpZiBhdmFpbGFibGUpfQorCitcaXRlbVtcJShmaWxlbmFtZSlzXXtGaWxlbmFtZSBwb3J0aW9uIG9mIHBhdGhuYW1lfQorCitcaXRlbVtcJShtb2R1bGUpc117TW9kdWxlIChuYW1lIHBvcnRpb24gb2YgZmlsZW5hbWUpfQorCitcaXRlbVtcJShsaW5lbm8pZF17U291cmNlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBsb2dnaW5nIGNhbGwgd2FzIGlzc3VlZAorKGlmIGF2YWlsYWJsZSl9CisKK1xpdGVtW1wlKGNyZWF0ZWQpZl17VGltZSB3aGVuIHRoZSBMb2dSZWNvcmQgd2FzIGNyZWF0ZWQgKHRpbWUudGltZSgpCityZXR1cm4gdmFsdWUpfQorCitcaXRlbVtcJShhc2N0aW1lKXNde1RleHR1YWwgdGltZSB3aGVuIHRoZSBMb2dSZWNvcmQgd2FzIGNyZWF0ZWR9CisKK1xpdGVtW1wlKG1zZWNzKWRde01pbGxpc2Vjb25kIHBvcnRpb24gb2YgdGhlIGNyZWF0aW9uIHRpbWV9CisKK1xpdGVtW1wlKHJlbGF0aXZlQ3JlYXRlZClkXXtUaW1lIGluIG1pbGxpc2Vjb25kcyB3aGVuIHRoZSBMb2dSZWNvcmQgd2FzCitjcmVhdGVkLCByZWxhdGl2ZSB0byB0aGUgdGltZSB0aGUgbG9nZ2luZyBtb2R1bGUgd2FzIGxvYWRlZCAodHlwaWNhbGx5IGF0CithcHBsaWNhdGlvbiBzdGFydHVwIHRpbWUpfQorCitcaXRlbVtcJSh0aHJlYWQpZF17VGhyZWFkIElEIChpZiBhdmFpbGFibGUpfQorCitcaXRlbVtcJShtZXNzYWdlKXNde1RoZSByZXN1bHQgb2YgcmVjb3JkLmdldE1lc3NhZ2UoKSwgY29tcHV0ZWQganVzdCBhcyB0aGUKK3JlY29yZCBpcyBlbWl0dGVkfQorCitcZW5ke2Rlc2NyaXB0aW9ufQorCitcZW5ke2NsYXNzZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2Zvcm1hdH17c2VsZiwgcmVjb3JkfQorCitUaGUgcmVjb3JkJ3MgYXR0cmlidXRlIGRpY3Rpb25hcnkgaXMgdXNlZCBhcyB0aGUgb3BlcmFuZCB0byBhIHN0cmluZworZm9ybWF0dGluZyBvcGVyYXRpb24gd2hpY2ggeWllbGRzIHRoZSByZXR1cm5lZCBzdHJpbmcuICBCZWZvcmUgZm9ybWF0dGluZwordGhlIGRpY3Rpb25hcnksIGEgY291cGxlIG9mIHByZXBhcmF0b3J5IHN0ZXBzIGFyZSBjYXJyaWVkIG91dC4gVGhlIG1lc3NhZ2UKK2F0dHJpYnV0ZSBvZiB0aGUgcmVjb3JkIGlzIGNvbXB1dGVkIHVzaW5nIFxjb2Rle0xvZ1JlY29yZC5nZXRNZXNzYWdlKCl9LiBJZgordGhlIGZvcm1hdHRpbmcgc3RyaW5nIGNvbnRhaW5zICJcJShhc2N0aW1lKSIsIFxjb2Rle2Zvcm1hdFRpbWUoKX0gaXMgY2FsbGVkCit0byBmb3JtYXQgdGhlIGV2ZW50IHRpbWUuICBJZiB0aGVyZSBpcyBleGNlcHRpb24gaW5mb3JtYXRpb24sIGl0IGlzCitmb3JtYXR0ZWQgdXNpbmcgXGNvZGV7Zm9ybWF0RXhjZXB0aW9uKCl9IGFuZCBhcHBlbmRlZCB0byB0aGUgbWVzc2FnZS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Zm9ybWF0RXhjZXB0aW9ufXtzZWxmLCBlaX0KKworRm9ybWF0IHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGFzIGEgc3RyaW5nLiBUaGlzIGRlZmF1bHQKK2ltcGxlbWVudGF0aW9uIGp1c3QgdXNlcyBcY29kZXt0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKCl9CisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2Zvcm1hdFRpbWV9e3NlbGYsIHJlY29yZFxvcHRpb25hbHssIGRhdGVmbXQ9Tm9uZX19CisKK1RoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBcY29kZXtmb3JtYXQoKX0gYnkgYSBmb3JtYXR0ZXIgd2hpY2ggd2FudHMKK3RvIG1ha2UgdXNlIG9mIGEgZm9ybWF0dGVkIHRpbWUuIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGluIGZvcm1hdHRlcnMKK3RvIHByb3ZpZGUgZm9yIGFueSBzcGVjaWZpYyByZXF1aXJlbWVudCwgYnV0IHRoZSBiYXNpYyBiZWhhdmlvdXIgaXMgYXMKK2ZvbGxvd3M6IGlmIGRhdGVmbXQgKGEgc3RyaW5nKSBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgd2l0aCB0aW1lLnN0cmZ0aW1lKCkKK3RvIGZvcm1hdCB0aGUgY3JlYXRpb24gdGltZSBvZiB0aGUgcmVjb3JkLiBPdGhlcndpc2UsIHRoZSBJU084NjAxIGZvcm1hdCBpcwordXNlZC4gVGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gdXNlcyBhCit1c2VyLWNvbmZpZ3VyYWJsZSBmdW5jdGlvbiB0byBjb252ZXJ0IHRoZSBjcmVhdGlvbiB0aW1lIHRvIGEgdHVwbGUuIEJ5CitkZWZhdWx0LCBcY29kZXt0aW1lLmxvY2FsdGltZSgpfSBpcyB1c2VkOyB0byBjaGFuZ2UgdGhpcyBmb3IgYSBwYXJ0aWN1bGFyCitmb3JtYXR0ZXIgaW5zdGFuY2UsIHNldCB0aGUgJ2NvbnZlcnRlcicgYXR0cmlidXRlIHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUKK3NhbWUgc2lnbmF0dXJlIGFzIFxjb2Rle3RpbWUubG9jYWx0aW1lKCl9IG9yIFxjb2Rle3RpbWUuZ210aW1lKCl9LiBUbyBjaGFuZ2UKK2l0IGZvciBhbGwgZm9ybWF0dGVycywgZm9yIGV4YW1wbGUgaWYgeW91IHdhbnQgYWxsIGxvZ2dpbmcgdGltZXMgdG8gYmUgc2hvd24KK2luIEdNVCwgc2V0IHRoZSAnY29udmVydGVyJyBhdHRyaWJ1dGUgaW4gdGhlIFxjbGFzc3tGb3JtYXR0ZXJ9IGNsYXNzLgorCitcZW5ke21ldGhvZGRlc2N9CisKKworXGJlZ2lue2NsYXNzZGVzY317RmlsdGVyZXJ9e30KKworQSBiYXNlIGNsYXNzIGZvciBsb2dnZXJzIGFuZCBoYW5kbGVycyB3aGljaCBhbGxvd3MgdGhlbSB0byBzaGFyZSBjb21tb24KK2NvZGUuCisKK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317YWRkRmlsdGVyfXtmaWx0ZXJ9CisKK0FkZCB0aGUgc3BlY2lmaWVkIGZpbHRlciB0byB0aGlzIGhhbmRsZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2ZpbHRlcn17c2VsZiwgcmVjb3JkfQorCitEZXRlcm1pbmUgaWYgYSByZWNvcmQgaXMgbG9nZ2FibGUgYnkgY29uc3VsdGluZyBhbGwgdGhlIGZpbHRlcnMuIFRoZSBkZWZhdWx0CitpcyB0byBhbGxvdyB0aGUgcmVjb3JkIHRvIGJlIGxvZ2dlZDsgYW55IGZpbHRlciBjYW4gdmV0byB0aGlzIGFuZCB0aGUgcmVjb3JkCitpcyB0aGVuIGRyb3BwZWQuIFJldHVybnMgYSBib29sZWFuIHZhbHVlLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtyZW1vdmVGaWx0ZXJ9e2ZpbHRlcn0KKworUmVtb3ZlIHRoZSBzcGVjaWZpZWQgZmlsdGVyIGZyb20gdGhpcyBoYW5kbGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCitcZW5ke21ldGhvZGRlc2N9CisKKworXGJlZ2lue2NsYXNzZGVzY317QnVmZmVyaW5nRm9ybWF0dGVyfXtcb3B0aW9uYWx7bGluZWZtdD1Ob25lfX0KKworQSBmb3JtYXR0ZXIgc3VpdGFibGUgZm9yIGZvcm1hdHRpbmcgYSBudW1iZXIgb2YgcmVjb3Jkcy4gIE9wdGlvbmFsbHkgc3BlY2lmeQorYSBmb3JtYXR0ZXIgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGZvcm1hdCBlYWNoIGluZGl2aWR1YWwgcmVjb3JkLgorCitcZW5ke2NsYXNzZGVzY30KKworCitcYmVnaW57bWV0aG9kZGVzY317Zm9ybWF0fXtyZWNvcmRzfQorCitGb3JtYXQgdGhlIHNwZWNpZmllZCByZWNvcmRzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHN0cmluZy4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Zm9ybWF0Rm9vdGVyfXtyZWNvcmRzfQorCitSZXR1cm4gdGhlIGZvb3RlciBzdHJpbmcgZm9yIHRoZSBzcGVjaWZpZWQgcmVjb3Jkcy4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Zm9ybWF0SGVhZGVyfXtyZWNvcmRzfQorCitSZXR1cm4gdGhlIGhlYWRlciBzdHJpbmcgZm9yIHRoZSBzcGVjaWZpZWQgcmVjb3Jkcy4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57Y2xhc3NkZXNjfXtCdWZmZXJpbmdIYW5kbGVyfXtjYXBhY2l0eX0KKworQSBoYW5kbGVyIGNsYXNzIHdoaWNoIGJ1ZmZlcnMgbG9nZ2luZyByZWNvcmRzIGluIG1lbW9yeS4gV2hlbmV2ZXIgZWFjaAorcmVjb3JkIGlzIGFkZGVkIHRvIHRoZSBidWZmZXIsIGEgY2hlY2sgaXMgbWFkZSB0byBzZWUgaWYgdGhlIGJ1ZmZlciBzaG91bGQKK2JlIGZsdXNoZWQuIElmIGl0IHNob3VsZCwgdGhlbiBcY29kZXtmbHVzaCgpfSBpcyBleHBlY3RlZCB0byBkbyB0aGUgbmVlZGZ1bC4KK1RoZSBoYW5kbGVyIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGJ1ZmZlciBzaXplLgorCitcZW5ke2NsYXNzZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2VtaXR9e3JlY29yZH0KKworQXBwZW5kIHRoZSByZWNvcmQuIElmIFxjb2Rle3Nob3VsZEZsdXNoKCl9IHRlbGxzIHVzIHRvLCBjYWxsIFxjb2Rle2ZsdXNoKCl9Cit0byBwcm9jZXNzIHRoZSBidWZmZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2ZsdXNofXt9CisKK092ZXJyaWRlIHRvIGltcGxlbWVudCBjdXN0b20gZmx1c2hpbmcgYmVoYXZpb3VyLiBUaGlzIHZlcnNpb24ganVzdCB6YXBzIHRoZQorYnVmZmVyIHRvIGVtcHR5LgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtzaG91bGRGbHVzaH17cmVjb3JkfQorCitSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyB1cCB0byBjYXBhY2l0eS4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4KK3RvIGltcGxlbWVudCBjdXN0b20gZmx1c2hpbmcgc3RyYXRlZ2llcy4KKworXGVuZHttZXRob2RkZXNjfQorCisKK1xiZWdpbntjbGFzc2Rlc2N9e0RhdGFncmFtSGFuZGxlcn17aG9zdCxwb3J0fQorCitBIGhhbmRsZXIgY2xhc3Mgd2hpY2ggd3JpdGVzIGxvZ2dpbmcgcmVjb3JkcywgaW4gcGlja2xlIGZvcm1hdCwgdG8gYQorZGF0YWdyYW0gc29ja2V0LiBOb3RlIHRoYXQgdGhlIHZlcnkgc2ltcGxlIHdpcmUgcHJvdG9jb2wgdXNlZCBtZWFucyB0aGF0CitwYWNrZXQgc2l6ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGVuY29kYWJsZSB3aXRoaW4gMTYgYml0cyAoaS5lLiA8IDMyNzY3CitieXRlcykuCisKK0luaXRpYWxpemVzIHRoZSBoYW5kbGVyIHdpdGggYSBzcGVjaWZpYyBcY29kZXtob3N0fSBhbmQgXGNvZGV7cG9ydH0uCisKK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317bWFrZVNvY2tldH17fQorCitUaGUgZmFjdG9yeSBtZXRob2Qgb2YgU29ja2V0SGFuZGxlciBpcyBoZXJlIG92ZXJyaWRkZW4gdG8gY3JlYXRlIGEgVURQCitzb2NrZXQgKFNPQ0tfREdSQU0pLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtzZW5kfXtzfQorCitTZW5kIGEgcGlja2xlZCBzdHJpbmcgdG8gYSBzb2NrZXQuIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBwYXJ0aWFsIHNlbmRzCit3aGljaCBjYW4gaGFwcGVuIHdoZW4gdGhlIG5ldHdvcmsgaXMgYnVzeS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57Y2xhc3NkZXNjfXtGaWxlSGFuZGxlcn17ZmlsZW5hbWVcb3B0aW9uYWx7LCBtb2RlPSdhKyd9fQorCitBIGhhbmRsZXIgY2xhc3Mgd2hpY2ggd3JpdGVzIGZvcm1hdHRlZCBsb2dnaW5nIHJlY29yZHMgdG8gZGlzayBmaWxlcy4gIFRoZQorc3BlY2lmaWVkIGZpbGUgaXMgb3BlbmVkIGFuZCB1c2VkIGFzIHRoZSBzdHJlYW0gZm9yIGxvZ2dpbmcuICBCeSBkZWZhdWx0LAordGhlIGZpbGUgZ3Jvd3MgaW5kZWZpbml0ZWx5LiBZb3UgY2FuIGNhbGwgXGNvZGV7c2V0Um9sbG92ZXIoKX0gdG8gYWxsb3cgdGhlCitmaWxlIHRvIHJvbGxvdmVyIGF0IGEgcHJlZGV0ZXJtaW5lZCBzaXplLgorCitcZW5ke2NsYXNzZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2Nsb3NlfXt9CisKK0Nsb3NlcyB0aGUgc3RyZWFtLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtkb1JvbGxvdmVyfXt9CisKK0RvIGEgcm9sbG92ZXIsIGFzIGRlc2NyaWJlZCBpbiBcY29kZXtzZXRSb2xsb3ZlcigpfS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317ZW1pdH17cmVjb3JkfQorCitPdXRwdXQgdGhlIHJlY29yZCB0byB0aGUgZmlsZSwgY2F0ZXJpbmcgZm9yIHJvbGxvdmVyIGFzIGRlc2NyaWJlZAoraW4gXGNvZGV7c2V0Um9sbG92ZXIoKX0uCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3NldFJvbGxvdmVyfXttYXhCeXRlcywgYmFja3VwQ291bnR9CisKK1NldCB0aGUgcm9sbG92ZXIgcGFyYW1ldGVycyBzbyB0aGF0IHJvbGxvdmVyIG9jY3VycyB3aGVuZXZlciB0aGUgY3VycmVudCBsb2cKK2ZpbGUgaXMgbmVhcmx5IFx2YXJ7bWF4Qnl0ZXN9IGluIGxlbmd0aC4gSWYgXHZhcntiYWNrdXBDb3VudH0gaXMgPj0gMSwgdGhlCitzeXN0ZW0gd2lsbCBzdWNjZXNzaXZlbHkgY3JlYXRlIG5ldyBmaWxlcyB3aXRoIHRoZSBzYW1lIHBhdGhuYW1lIGFzIHRoZSBiYXNlCitmaWxlLCBidXQgd2l0aCBleHRlbnNpb25zICIuMSIsICIuMiIgZXRjLiBhcHBlbmRlZCB0byBpdC4gRm9yIGV4YW1wbGUsIHdpdGgKK2EgXHZhcntiYWNrdXBDb3VudH0gb2YgNSBhbmQgYSBiYXNlIGZpbGUgbmFtZSBvZiAiYXBwLmxvZyIsIHlvdSB3b3VsZCBnZXQKKyJhcHAubG9nIiwgImFwcC5sb2cuMSIsICJhcHAubG9nLjIiLCAuLi4gdGhyb3VnaCB0byAiYXBwLmxvZy41Ii4gV2hlbiB0aGUKK2xhc3QgZmlsZSByZWFjaGVzIGl0cyBzaXplIGxpbWl0LCB0aGUgbG9nZ2luZyByZXZlcnRzIHRvICJhcHAubG9nIiB3aGljaCBpcwordHJ1bmNhdGVkIHh0byB6ZXJvIGxlbmd0aC4gSWYgbWF4Qnl0ZXMgaXMgemVybywgcm9sbG92ZXIgbmV2ZXIgb2NjdXJzLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbntjbGFzc2Rlc2N9e0ZpbHRlcn17XG9wdGlvbmFse25hbWU9Jyd9fQorCitUaGUgYmFzZSBmaWx0ZXIgY2xhc3MuIFxjbGFzc3tMb2dnZXJ9IGFuZCBcY2xhc3N7SGFuZGxlcn0gaW5zdGFuY2VzIGNhbgorb3B0aW9uYWxseSB1c2UgXGNsYXNze0ZpbHRlcn0gaW5zdGFuY2VzIHRvIGZpbHRlciByZWNvcmRzIGFzIGRlc2lyZWQuIFRoZQorYmFzZSBmaWx0ZXIgY2xhc3Mgb25seSBhbGxvd3MgZXZlbnRzIHdoaWNoIGFyZSBiZWxvdyBhIGNlcnRhaW4gcG9pbnQgaW4gdGhlCitsb2dnZXIgaGllcmFyY2h5LiBGb3IgZXhhbXBsZSwgYSBmaWx0ZXIgaW5pdGlhbGl6ZWQgd2l0aCAiQS5CIiB3aWxsIGFsbG93CitldmVudHMgbG9nZ2VkIGJ5IGxvZ2dlcnMgIkEuQiIsICJBLkIuQyIsICJBLkIuQy5EIiwgIkEuQi5EIiBldGMuIGJ1dCBub3QKKyJBLkJCIiwgIkIuQS5CIiBldGMuIElmIGluaXRpYWxpemVkIHdpdGggdGhlIGVtcHR5IHN0cmluZywgYWxsIGV2ZW50cyBhcmUKK3Bhc3NlZC4KKworVGhlIGluc3RhbmNlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGxvZ2dlciB3aGljaCwgdG9nZXRoZXIgd2l0aAoraXRzIGNoaWxkcmVuLCB3aWxsIGhhdmUgaXRzIGV2ZW50cyBhbGxvd2VkIHRocm91Z2ggdGhlIGZpbHRlci4gSWYgbm8gbmFtZSBpcworc3BlY2lmaWVkLCBhbGxvdyBldmVyeSBldmVudC4KKworXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtmaWx0ZXJ9e3JlY29yZH0KKworSXMgdGhlIHNwZWNpZmllZCByZWNvcmQgdG8gYmUgbG9nZ2VkPyBSZXR1cm5zIDAgZm9yIG5vLCBub256ZXJvIGZvciB5ZXMuIElmCitkZWVtZWQgYXBwcm9wcmlhdGUsIHRoZSByZWNvcmQgbWF5IGJlIG1vZGlmaWVkIGluLXBsYWNlLgorCitcZW5ke21ldGhvZGRlc2N9CisKKworXGJlZ2lue2NsYXNzZGVzY317SFRUUEhhbmRsZXJ9e2hvc3QsIHVybFxvcHRpb25hbHssIG1ldGhvZD0nR0VUJ319CisKK0EgY2xhc3Mgd2hpY2ggc2VuZHMgcmVjb3JkcyB0byBhIFdlYiBzZXJ2ZXIsIHVzaW5nIGVpdGhlciBHRVQgb3IgUE9TVAorc2VtYW50aWNzLiAgVGhlIGluc3RhbmNlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIFx2YXJ7aG9zdH0sIHRoZSByZXF1ZXN0CitcdmFye3VybH0sIGFuZCB0aGUgXHZhcnttZXRob2R9ICgiR0VUIiBvciAiUE9TVCIpCisKK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317ZW1pdH17cmVjb3JkfQorCitTZW5kIHRoZSBcdmFye3JlY29yZH0gdG8gdGhlIFdlYiBzZXJ2ZXIgYXMgYW4gVVJMLWVuY29kZWQgZGljdGlvbmFyeQorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbntjbGFzc2Rlc2N9e0hhbmRsZXJ9e1xvcHRpb25hbHtsZXZlbD0wfX0KKworVGhlIGJhc2UgaGFuZGxlciBjbGFzcy4gQWN0cyBhcyBhIHBsYWNlaG9sZGVyIHdoaWNoIGRlZmluZXMgdGhlIEhhbmRsZXIKK2ludGVyZmFjZS4gXGNsYXNze0hhbmRsZXJ9IGluc3RhbmNlcyBjYW4gb3B0aW9uYWxseSB1c2UgXGNsYXNze0Zvcm1hdHRlcn0KK2luc3RhbmNlcyB0byBmb3JtYXQgcmVjb3JkcyBhcyBkZXNpcmVkLiBCeSBkZWZhdWx0LCBubyBmb3JtYXR0ZXIgaXMKK3NwZWNpZmllZDsgaW4gdGhpcyBjYXNlLCB0aGUgJ3JhdycgbWVzc2FnZSBhcyBkZXRlcm1pbmVkIGJ5IHJlY29yZC5tZXNzYWdlCitpcyBsb2dnZWQuICBJbml0aWFsaXplcyB0aGUgaW5zdGFuY2UgLSBiYXNpY2FsbHkgc2V0dGluZyB0aGUgZm9ybWF0dGVyIHRvCitOb25lIGFuZCB0aGUgZmlsdGVyIGxpc3QgdG8gZW1wdHkuCisKK1hYWCAtIHdoYXQgZG9lcyB0aGUgbGV2ZWwgZG8/CisKK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317YWNxdWlyZX17fQorCitBY3F1aXJlIHRoZSBJL08gdGhyZWFkIGxvY2suCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2Nsb3NlfXt9CisKK1RpZHkgdXAgYW55IHJlc291cmNlcyB1c2VkIGJ5IHRoZSBoYW5kbGVyLiBUaGlzIHZlcnNpb24gZG9lcyBub3RoaW5nIGFuZCBpcworaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Y3JlYXRlTG9ja317fQorCitBY3F1aXJlIGEgdGhyZWFkIGxvY2sgZm9yIHNlcmlhbGl6aW5nIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBJL08uCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2VtaXR9e3JlY29yZH0KKworRG8gd2hhdGV2ZXIgaXQgdGFrZXMgdG8gYWN0dWFsbHkgbG9nIHRoZSBzcGVjaWZpZWQgbG9nZ2luZyByZWNvcmQuICBUaGlzCit2ZXJzaW9uIGlzIGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgYW5kIHNvIHJhaXNlcyBhCitcZXhjZXB0aW9ue05vdEltcGxlbWVudGVkRXJyb3J9LgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtmbHVzaH17fQorCitFbnN1cmUgYWxsIGxvZ2dpbmcgb3V0cHV0IGhhcyBiZWVuIGZsdXNoZWQuIFRoaXMgdmVyc2lvbiBkb2VzIG5vdGhpbmcgYW5kIGlzCitpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtmb3JtYXR9e3JlY29yZH0KKworRG8gZm9ybWF0dGluZyBmb3IgYSBcdmFye3JlY29yZH0gLSBpZiBhIGZvcm1hdHRlciBpcyBzZXQsIHVzZSBpdC4KK090aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0IGZvcm1hdHRlciBmb3IgdGhlIG1vZHVsZS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317aGFuZGxlfXtyZWNvcmR9CisKK0NvbmRpdGlvbmFsbHkgZW1pdCB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgXHZhcntyZWNvcmR9LCBkZXBlbmRpbmcgb24gZmlsdGVycword2hpY2ggbWF5IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgaGFuZGxlci4gV3JhcCB0aGUgYWN0dWFsIGVtaXNzaW9uIG9mIHRoZQorcmVjb3JkIHdpdGggYWNxdWlzaXRpb24vcmVsZWFzZSBvZiB0aGUgSS9PIHRocmVhZCBsb2NrLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtoYW5kbGVFcnJvcn17fQorCitUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gaGFuZGxlcnMgd2hlbiBhbiBleGNlcHRpb24gaXMgZW5jb3VudGVyZWQKK2R1cmluZyBhbiBcY29kZXtlbWl0KCl9IGNhbGwuIEJ5IGRlZmF1bHQgaXQgZG9lcyBub3RoaW5nLCBiZWNhdXNlIGJ5IGRlZmF1bHQKK3t9XHZhcntyYWlzZUV4Y2VwdGlvbnN9IGlzIGZhbHNlLCB3aGljaCBtZWFucyB0aGF0IGV4Y2VwdGlvbnMgZ2V0IHNpbGVudGx5CitpZ25vcmVkLiBUaGlzIGlzIHdoYXQgaXMgbW9zdGx5IHdhbnRlZCBmb3IgYSBsb2dnaW5nIHN5c3RlbSAtIG1vc3QgdXNlcnMKK3dpbGwgbm90IGNhcmUgYWJvdXQgZXJyb3JzIGluIHRoZSBsb2dnaW5nIHN5c3RlbSwgdGhleSBhcmUgbW9yZSBpbnRlcmVzdGVkCitpbiBhcHBsaWNhdGlvbiBlcnJvcnMuICBZb3UgY291bGQsIGhvd2V2ZXIsIHJlcGxhY2UgdGhpcyB3aXRoIGEgY3VzdG9tCitoYW5kbGVyIGlmIHlvdSB3aXNoLgorCitYWFggbG9va3MgdG8gbWUgbGlrZSByYWlzZUV4Y2VwdGlvbnMgZGVmYXVsdHMgdG8gMS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317cmVsZWFzZX17fQorCitSZWxlYXNlIHRoZSBJL08gdGhyZWFkIGxvY2suCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3NldEZvcm1hdHRlcn17Zm9ybWF0dGVyfQorCitTZXQgdGhlIFx2YXJ7Zm9ybWF0dGVyfSBmb3IgdGhpcyBoYW5kbGVyLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtzZXRMZXZlbH17bGV2ZWx9CisKK1NldCB0aGUgbG9nZ2luZyBcdmFye2xldmVsfSBvZiB0aGlzIGhhbmRsZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue2NsYXNzZGVzY317TG9nUmVjb3JkfXtuYW1lLGx2bCxwYXRobmFtZSxsaW5lbm8sbXNnLGFyZ3MsZXhjX2luZm99CisKK1xjbGFzc3tMb2dSZWNvcmR9IGluc3RhbmNlcyBhcmUgY3JlYXRlZCBldmVyeSB0aW1lIHNvbWV0aGluZyBpcyBsb2dnZWQuIFRoZXkKK2NvbnRhaW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBwZXJ0aW5lbnQgdG8gdGhlIGV2ZW50IGJlaW5nIGxvZ2dlZC4gVGhlIG1haW4KK2luZm9ybWF0aW9uIHBhc3NlZCBpbiBpcyBpbiBtc2cgYW5kIGFyZ3MsIHdoaWNoIGFyZSBjb21iaW5lZCB1c2luZworXGNvZGV7c3RyKG1zZykgXCUgYXJnc30gdG8gY3JlYXRlIHRoZSBtZXNzYWdlIGZpZWxkIG9mIHRoZSByZWNvcmQuIFRoZQorcmVjb3JkIGFsc28gaW5jbHVkZXMgaW5mb3JtYXRpb24gc3VjaCBhcyB3aGVuIHRoZSByZWNvcmQgd2FzIGNyZWF0ZWQsIHRoZQorc291cmNlIGxpbmUgd2hlcmUgdGhlIGxvZ2dpbmcgY2FsbCB3YXMgbWFkZSwgYW5kIGFueSBleGNlcHRpb24gaW5mb3JtYXRpb24KK3RvIGJlIGxvZ2dlZC4KKworXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtnZXRNZXNzYWdlfXt9CisKK1JldHVybiB0aGUgbWVzc2FnZSBmb3IgdGhpcyBMb2dSZWNvcmQsIG1lcmdpbmcgYW55IHVzZXItc3VwcGxpZWQgYXJndW1lbnRzCit3aXRoIHRoZSBtZXNzYWdlLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbntjbGFzc2Rlc2N9e0xvZ2dlcn17bmFtZVxvcHRpb25hbHssIGxldmVsPTB9fQorCitJbnN0YW5jZXMgb2YgdGhlIFxjbGFzc3tMb2dnZXJ9IGNsYXNzIHJlcHJlc2VudCBhIHNpbmdsZSBsb2dnaW5nIGNoYW5uZWwuIEEKKyJsb2dnaW5nIGNoYW5uZWwiIGluZGljYXRlcyBhbiBhcmVhIG9mIGFuIGFwcGxpY2F0aW9uLiBFeGFjdGx5IGhvdyBhbiAiYXJlYSIKK2lzIGRlZmluZWQgaXMgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIGRldmVsb3Blci4gU2luY2UgYW4gYXBwbGljYXRpb24gY2FuIGhhdmUKK2FueSBudW1iZXIgb2YgYXJlYXMsIGxvZ2dpbmcgY2hhbm5lbHMgYXJlIGlkZW50aWZpZWQgYnkgYSB1bmlxdWUKK3N0cmluZy4gQXBwbGljYXRpb24gYXJlYXMgY2FuIGJlIG5lc3RlZCAoZS5nLiBhbiBhcmVhIG9mICJpbnB1dCBwcm9jZXNzaW5nIgorbWlnaHQgaW5jbHVkZSBzdWItYXJlYXMgInJlYWQgQ1NWIGZpbGVzIiwgInJlYWQgWExTIGZpbGVzIiBhbmQgInJlYWQKK0dudW1lcmljIGZpbGVzIikuIFRvIGNhdGVyIGZvciB0aGlzIG5hdHVyYWwgbmVzdGluZywgY2hhbm5lbCBuYW1lcyBhcmUKK29yZ2FuaXplZCBpbnRvIGEgbmFtZXNwYWNlIGhpZXJhcmNoeSB3aGVyZSBsZXZlbHMgYXJlIHNlcGFyYXRlZCBieSBwZXJpb2RzLAorbXVjaCBsaWtlIHRoZSBKYXZhIG9yIFB5dGhvbiBwYWNrYWdlIG5hbWVzcGFjZS4gU28gaW4gdGhlIGluc3RhbmNlIGdpdmVuCithYm92ZSwgY2hhbm5lbCBuYW1lcyBtaWdodCBiZSAiaW5wdXQiIGZvciB0aGUgdXBwZXIgbGV2ZWwsIGFuZCAiaW5wdXQuY3N2IiwKKyJpbnB1dC54bHMiIGFuZCAiaW5wdXQuZ251IiBmb3IgdGhlIHN1Yi1sZXZlbHMuICBUaGVyZSBpcyBubyBhcmJpdHJhcnkgbGltaXQKK3RvIHRoZSBkZXB0aCBvZiBuZXN0aW5nLgorCitUaGUgbG9nZ2VyIGlzIGluaXRpYWxpemVkIHdpdGggYSBcdmFye25hbWV9IGFuZCBhbiBvcHRpb25hbCBcdmFye2xldmVsfS4KKworXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtfbG9nfXtsdmwsIG1zZywgYXJnc1xvcHRpb25hbHssIGV4Y19pbmZvPU5vbmV9fQorCitMb3ctbGV2ZWwgbG9nZ2luZyByb3V0aW5lIHdoaWNoIGNyZWF0ZXMgYSBcY2xhc3N7TG9nUmVjb3JkfSBhbmQgdGhlbiBjYWxscworYWxsIHRoZSBoYW5kbGVycyBvZiB0aGlzIGxvZ2dlciB0byBoYW5kbGUgdGhlIHJlY29yZC4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317YWRkSGFuZGxlcn17aGRscn0KKworQWRkIHRoZSBzcGVjaWZpZWQgaGFuZGxlciB0byB0aGlzIGxvZ2dlci4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Y2FsbEhhbmRsZXJzfXtyZWNvcmR9CisKK0xvb3AgdGhyb3VnaCBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgbG9nZ2VyIGFuZCBpdHMgcGFyZW50cyBpbiB0aGUgbG9nZ2VyCitoaWVyYXJjaHkuIElmIG5vIGhhbmRsZXIgd2FzIGZvdW5kLCBvdXRwdXQgYSBvbmUtb2ZmIGVycm9yIG1lc3NhZ2UgdG8KK3N5cy5zdGRlcnIuIFN0b3Agc2VhcmNoaW5nIHVwIHRoZSBoaWVyYXJjaHkgd2hlbmV2ZXIgYSBsb2dnZXIgd2l0aCB0aGUKKyJwcm9wYWdhdGUiIGF0dHJpYnV0ZSBzZXQgdG8gemVybyBpcyBmb3VuZCAtIHRoYXQgd2lsbCBiZSB0aGUgbGFzdCBsb2dnZXIKK3dob3NlIGhhbmRsZXJzIGFyZSBjYWxsZWQuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2NyaXRpY2FsfXttc2csICphcmdzLCAqKmt3YXJnc30KKworTG9nIFxjb2Rle21zZyBcJSBhcmdzfSB3aXRoIHNldmVyaXR5IFxjb2Rle0NSSVRJQ0FMfS4gVG8gcGFzcyBleGNlcHRpb24KK2luZm9ybWF0aW9uLCB1c2UgdGhlIGtleXdvcmQgYXJndW1lbnQgXHZhcntleGNfaW5mb30gd2l0aCBhIHRydWUgdmFsdWUsCitlLmcuLCBcY29kZXtsb2dnZXIuY3JpdGljYWwoIkhvdXN0b24sIHdlIGhhdmUgYSBcJXMiLCAibWFqb3IgZGlzYXN0ZXIiLAorZXhjX2luZm89MSl9LgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtmYXRhbH17bXNnLCAqYXJncywgKiprd2FyZ3N9CisKK1N5bm9ueW0gZm9yIFxtZXRob2R7Y3JpdGljYWx9LgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtkZWJ1Z317bXNnLCAqYXJncywgKiprd2FyZ3N9CisKK0xvZyBcY29kZXttc2cgXCUgYXJnc30gd2l0aCBzZXZlcml0eSBcY29kZXtERUJVR30uIFRvIHBhc3MgZXhjZXB0aW9uCitpbmZvcm1hdGlvbiwgdXNlIHRoZSBrZXl3b3JkIGFyZ3VtZW50IGV4Y19pbmZvIHdpdGggYSB0cnVlIHZhbHVlLCBlLmcuLAorXGNvZGV7bG9nZ2VyLmRlYnVnKCJIb3VzdG9uLCB3ZSBoYXZlIGEgXCVzIiwgInRob3JueSBwcm9ibGVtIiwgZXhjX2luZm89MSl9LgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtlcnJvcn17bXNnLCAqYXJncywgKiprd2FyZ3N9CisKK0xvZyBcY29kZXttc2cgXCUgYXJnc30gd2l0aCBzZXZlcml0eSBcY29kZXtFUlJPUn0uIFRvIHBhc3MgZXhjZXB0aW9uCitpbmZvcm1hdGlvbiwgdXNlIHRoZSBrZXl3b3JkIGFyZ3VtZW50IGV4Y19pbmZvIHdpdGggYSB0cnVlIHZhbHVlLCBlLmcuLAorXGNvZGV7bG9nZ2VyLmVycm9yKCJIb3VzdG9uLCB3ZSBoYXZlIGEgXCVzIiwgIm1ham9yIHByb2JsZW0iLCBleGNfaW5mbz0xKX0KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317ZXhjZXB0aW9ufXttc2csICphcmdzfQorCitDb252ZW5pZW5jZSBtZXRob2QgZm9yIGxvZ2dpbmcgYW4gXGNvZGV7RVJST1J9IHdpdGggZXhjZXB0aW9uIGluZm9ybWF0aW9uLgorCitcZW5ke21ldGhvZGRlc2N9CisKKworXGJlZ2lue21ldGhvZGRlc2N9e2ZpbmRDYWxsZXJ9e30KKworRmluZCB0aGUgc3RhY2sgZnJhbWUgb2YgdGhlIGNhbGxlciBzbyB0aGF0IHdlIGNhbiBub3RlIHRoZSBzb3VyY2UgZmlsZSBuYW1lCithbmQgbGluZSBudW1iZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2dldEVmZmVjdGl2ZUxldmVsfXt9CisKK0xvb3AgdGhyb3VnaCB0aGlzIGxvZ2dlciBhbmQgaXRzIHBhcmVudHMgaW4gdGhlIGxvZ2dlciBoaWVyYXJjaHksIGxvb2tpbmcKK2ZvciBhIG5vbi16ZXJvIGxvZ2dpbmcgbGV2ZWwuIFJldHVybiB0aGUgZmlyc3Qgb25lIGZvdW5kLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtoYW5kbGV9e3JlY29yZH0KKworQ2FsbCB0aGUgaGFuZGxlcnMgZm9yIHRoZSBzcGVjaWZpZWQgXHZhcntyZWNvcmR9LiBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgordW5waWNrbGVkIHJlY29yZHMgcmVjZWl2ZWQgZnJvbSBhIHNvY2tldCwgYXMgd2VsbCBhcyB0aG9zZSBjcmVhdGVkCitsb2NhbGx5LiBMb2dnZXItbGV2ZWwgZmlsdGVyaW5nIGlzIGFwcGxpZWQuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2luZm99e21zZywgKmFyZ3MsICoqa3dhcmdzfQorCitMb2cgXGNvZGV7bXNnIFwlIGFyZ3N9IHdpdGggc2V2ZXJpdHkgXGNvZGV7SU5GT30uIFRvIHBhc3MgZXhjZXB0aW9uCitpbmZvcm1hdGlvbiwgdXNlIHRoZSBrZXl3b3JkIGFyZ3VtZW50IGV4Y19pbmZvIHdpdGggYSB0cnVlIHZhbHVlLCBlLmcuLAorXGNvZGV7bG9nZ2VyLmluZm8oIkhvdXN0b24sIHdlIGhhdmUgYSBcJXMiLCAiaW50ZXJlc3RpbmcgcHJvYmxlbSIsCitleGNfaW5mbz0xKX0KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317aXNFbmFibGVkRm9yfXtsdmx9CisKK0lzIHRoaXMgbG9nZ2VyIGVuYWJsZWQgZm9yIGxldmVsIFx2YXJ7bHZsfT8KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317bG9nfXtsdmwsIG1zZywgKmFyZ3MsICoqa3dhcmdzfQorCitMb2cgXGNvZGV7bXNnIFwlIGFyZ3N9IHdpdGggdGhlIHNldmVyaXR5IFx2YXJ7bHZsfS4gVG8gcGFzcyBleGNlcHRpb24KK2luZm9ybWF0aW9uLCB1c2UgdGhlIGtleXdvcmQgYXJndW1lbnQgXHZhcntleGNfaW5mb30gd2l0aCBhIHRydWUgdmFsdWUsCitlLmcuLCBcY29kZXtsb2dnZXIubG9nKGx2bCwgIldlIGhhdmUgYSBcJXMiLCAibXlzdGVyaW91cyBwcm9ibGVtIiwKK2V4Y19pbmZvPTEpfQorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXttYWtlUmVjb3JkfXtuYW1lLCBsdmwsIGZuLCBsbm8sIG1zZywgYXJncywgZXhjX2luZm99CisKK0EgZmFjdG9yeSBtZXRob2Qgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3NlcyB0byBjcmVhdGUgc3BlY2lhbGl6ZWQKK1xjb2Rle0xvZ1JlY29yZH0gaW5zdGFuY2VzLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtyZW1vdmVIYW5kbGVyfXtoZGxyfQorCitSZW1vdmUgdGhlIHNwZWNpZmllZCBoYW5kbGVyIGZyb20gdGhpcyBsb2dnZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3NldExldmVsfXtsZXZlbH0KKworU2V0IHRoZSBsb2dnaW5nIFx2YXJ7bGV2ZWx9IG9mIHRoaXMgbG9nZ2VyLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXt3YXJufXttc2csICphcmdzLCAqKmt3YXJnc30KKworTG9nIFxjb2Rle21zZyBcJSBhcmdzfSB3aXRoIHNldmVyaXR5IFxjb2Rle1dBUk59LiBUbyBwYXNzIGV4Y2VwdGlvbgoraW5mb3JtYXRpb24sIHVzZSB0aGUga2V5d29yZCBhcmd1bWVudCBleGNfaW5mbyB3aXRoIGEgdHJ1ZSB2YWx1ZSwgZS5nLiwKK1xjb2Rle2xvZ2dlci53YXJuKCJIb3VzdG9uLCB3ZSBoYXZlIGEgXCVzIiwgImJpdCBvZiBhIHByb2JsZW0iLCBleGNfaW5mbz0xKX0KKworXGVuZHttZXRob2RkZXNjfQorCisKK1xiZWdpbntjbGFzc2Rlc2N9e01hbmFnZXJ9e3Jvb3R9CisKK1RoZXJlIGlzICh1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcykganVzdCBvbmUgXGNvZGV7TWFuYWdlcn0gaW5zdGFuY2UsCit3aGljaCBob2xkcyB0aGUgaGllcmFyY2h5IG9mIGxvZ2dlcnMuCisKK1RoZSBtYW5hZ2VyIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIFx2YXJ7cm9vdH0gbm9kZSBvZiB0aGUgbG9nZ2VyIGhpZXJhcmNoeS4KKworXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtfZml4dXBDaGlsZHJlbn17cGgsIGxvZ2dlcn0KKworRW5zdXJlIHRoYXQgY2hpbGRyZW4gb2YgdGhlIHBsYWNlaG9sZGVyIFx2YXJ7cGh9IGFyZSBjb25uZWN0ZWQgdG8gdGhlCitzcGVjaWZpZWQgXGNvZGV7bG9nZ2VyfS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317X2ZpeHVwUGFyZW50c317bG9nZ2VyfQorCitFbnN1cmUgdGhhdCB0aGVyZSBhcmUgZWl0aGVyIGxvZ2dlcnMgb3IgcGxhY2Vob2xkZXJzIGFsbCB0aGUgd2F5IGZyb20gdGhlCitzcGVjaWZpZWQgXHZhcntsb2dnZXJ9IHRvIHRoZSByb290IG9mIHRoZSBsb2dnZXIgaGllcmFyY2h5LgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtnZXRMb2dnZXJ9e25hbWV9CisKK0dldCBhIGxvZ2dlciB3aXRoIHRoZSBzcGVjaWZpZWQgXHZhcntuYW1lfSAoY2hhbm5lbCBuYW1lKSwgY3JlYXRpbmcgaXQgaWYgaXQKK2RvZXNuJ3QgeWV0IGV4aXN0LiBJZiBhIFBsYWNlSG9sZGVyIGV4aXN0ZWQgZm9yIHRoZSBzcGVjaWZpZWQgbmFtZSAoaS5lLiB0aGUKK2xvZ2dlciBkaWRuJ3QgZXhpc3QgYnV0IGEgY2hpbGQgb2YgaXQgZGlkKSwgcmVwbGFjZSBpdCB3aXRoIHRoZSBjcmVhdGVkCitsb2dnZXIgYW5kIGZpeCB1cCB0aGUgcGFyZW50L2NoaWxkIHJlZmVyZW5jZXMgd2hpY2ggcG9pbnRlZCB0byB0aGUKK3BsYWNlaG9sZGVyIHRvIG5vdyBwb2ludCB0byB0aGUgbG9nZ2VyLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbntjbGFzc2Rlc2N9e01lbW9yeUhhbmRsZXJ9e2NhcGFjaXR5XG9wdGlvbmFseywKK2ZsdXNoTGV2ZWw9NDBcb3B0aW9uYWx7LCB0YXJnZXQ9Tm9uZX19fSAKKworQSBoYW5kbGVyIGNsYXNzIHdoaWNoIGJ1ZmZlcnMgbG9nZ2luZyByZWNvcmRzIGluIG1lbW9yeSwgcGVyaW9kaWNhbGx5CitmbHVzaGluZyB0aGVtIHRvIGEgdGFyZ2V0IGhhbmRsZXIuIEZsdXNoaW5nIG9jY3VycyB3aGVuZXZlciB0aGUgYnVmZmVyIGlzCitmdWxsLCBvciB3aGVuIGFuIGV2ZW50IG9mIGEgY2VydGFpbiBzZXZlcml0eSBvciBncmVhdGVyIGlzIHNlZW4uCisKK1RoZSBoYW5kbGVyIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGJ1ZmZlciBzaXplIChcdmFye2NhcGFjaXR5fSksIHRoZSBsZXZlbAorYXQgd2hpY2ggZmx1c2hpbmcgc2hvdWxkIG9jY3VyIChcdmFye2ZsdXNoTGV2ZWx9KSBhbmQgYW4gb3B0aW9uYWwKK3t9XHZhcnt0YXJnZXR9LiAgTm90ZSB0aGF0IHdpdGhvdXQgYSB0YXJnZXQgYmVpbmcgc2V0IGVpdGhlciBoZXJlIG9yIHZpYQorXGNvZGV7c2V0VGFyZ2V0KCl9LCBhIFxjbGFzc3tNZW1vcnlIYW5kbGVyfSBpcyBubyB1c2UgdG8gYW55b25lIQorCitcZW5ke2NsYXNzZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2Nsb3NlfXt9CisKK0ZsdXNoLCBzZXQgdGhlIHRhcmdldCB0byBOb25lIGFuZCBsb3NlIHRoZSBidWZmZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2ZsdXNofXt9CisKK0ZvciBhIFxjbGFzc3tNZW1vcnlIYW5kbGVyfSwgZmx1c2hpbmcgbWVhbnMganVzdCBzZW5kaW5nIHRoZSBidWZmZXJlZAorcmVjb3JkcyB0byB0aGUgdGFyZ2V0LCBpZiB0aGVyZSBpcyBvbmUuIE92ZXJyaWRlIGlmIHlvdSB3YW50IGRpZmZlcmVudAorYmVoYXZpb3IuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3NldFRhcmdldH17dGFyZ2V0fQorCitTZXQgdGhlIFx2YXJ7dGFyZ2V0fSBoYW5kbGVyIGZvciB0aGlzIGhhbmRsZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3Nob3VsZEZsdXNofXtyZWNvcmR9CisKK0NoZWNrIGZvciBidWZmZXIgZnVsbCBvciBhIFx2YXJ7cmVjb3JkfSBhdCB0aGUgZmx1c2hMZXZlbCBvciBoaWdoZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworCitcYmVnaW57Y2xhc3NkZXNjfXtOVEV2ZW50TG9nSGFuZGxlcn17YXBwbmFtZVxvcHRpb25hbHssCitkbGxuYW1lPU5vbmVcb3B0aW9uYWx7LCBsb2d0eXBlPSdBcHBsaWNhdGlvbid9fX0gCisKK0EgaGFuZGxlciBjbGFzcyB3aGljaCBzZW5kcyBldmVudHMgdG8gdGhlIE5UIEV2ZW50IExvZy4gQWRkcyBhIHJlZ2lzdHJ5CitlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBhcHBsaWNhdGlvbiBuYW1lLiAgSWYgbm8gXHZhcntkbGxuYW1lfSBpcyBwcm92aWRlZCwKK1xjb2Rle3dpbjMyc2VydmljZS5weWR9ICh3aGljaCBjb250YWlucyBzb21lIGJhc2ljIG1lc3NhZ2UgcGxhY2Vob2xkZXJzKSBpcwordXNlZC4gIE5vdGUgdGhhdCB1c2Ugb2YgdGhlc2UgcGxhY2Vob2xkZXJzIHdpbGwgbWFrZSB5b3VyIGV2ZW50IGxvZ3MgYmlnLCBhcwordGhlIGVudGlyZSBtZXNzYWdlIHNvdXJjZSBpcyBoZWxkIGluIHRoZSBsb2cuICBJZiB5b3Ugd2FudCBzbGltbWVyIGxvZ3MsIHlvdQoraGF2ZSB0byBwYXNzIGluIHRoZSBuYW1lIG9mIHlvdXIgb3duIERMTCB3aGljaCBjb250YWlucyB0aGUgbWVzc2FnZQorZGVmaW5pdGlvbnMgeW91IHdhbnQgdG8gdXNlIGluIHRoZSBldmVudCBsb2cuCisKK1hYWCB3aGF0IGlzIFx2YXJ7bG9ndHlwZX0/CisKK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Y2xvc2V9e30KKworWW91IGNhbiByZW1vdmUgdGhlIGFwcGxpY2F0aW9uIG5hbWUgZnJvbSB0aGUgcmVnaXN0cnkgYXMgYSBzb3VyY2Ugb2YgZXZlbnQKK2xvZyBlbnRyaWVzLiBIb3dldmVyLCBpZiB5b3UgZG8gdGhpcywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gc2VlIHRoZSBldmVudHMKK2FzIHlvdSBpbnRlbmRlZCBpbiB0aGUgRXZlbnQgTG9nIFZpZXdlciAtIGl0IG5lZWRzIHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZQorcmVnaXN0cnkgdG8gZ2V0IHRoZSBETEwgbmFtZS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317ZW1pdH17cmVjb3JkfQorCitEZXRlcm1pbmUgdGhlIG1lc3NhZ2UgSUQsIGV2ZW50IGNhdGVnb3J5IGFuZCBldmVudCB0eXBlLiBUaGVuIGxvZyB0aGUKK1x2YXJ7cmVjb3JkfSBpbiB0aGUgTlQgZXZlbnQgbG9nLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtnZXRFdmVudENhdGVnb3J5fXtyZWNvcmR9CisKK1JldHVybiB0aGUgZXZlbnQgY2F0ZWdvcnkgZm9yIHRoZSBcdmFye3JlY29yZH0uICBPdmVycmlkZSB0aGlzIGlmIHlvdSB3YW50Cit0byBzcGVjaWZ5IHlvdXIgb3duIGNhdGVnb3JpZXMuIFRoaXMgdmVyc2lvbiByZXR1cm5zIDAuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2dldEV2ZW50VHlwZX17cmVjb3JkfQorCitSZXR1cm4gdGhlIGV2ZW50IHR5cGUgZm9yIHRoZSBcdmFye3JlY29yZH0uIE92ZXJyaWRlIHRoaXMgaWYgeW91IHdhbnQgdG8KK3NwZWNpZnkgeW91ciBvd24gdHlwZXMuIFRoaXMgdmVyc2lvbiBkb2VzIGEgbWFwcGluZyB1c2luZyB0aGUgaGFuZGxlcidzCit0eXBlbWFwIGF0dHJpYnV0ZSwgd2hpY2ggaXMgc2V0IHVwIGluIHRoZSBjb25zdHJ1Y3RvciB0byBhIGRpY3Rpb25hcnkgd2hpY2gKK2NvbnRhaW5zIG1hcHBpbmdzIGZvciBcdmFye0RFQlVHfSwgXHZhcntJTkZPfSwgXHZhcntXQVJOfSwgXHZhcntFUlJPUn0gYW5kCit7fVx2YXJ7Q1JJVElDQUx9LiBJZiB5b3UgYXJlIHVzaW5nIHlvdXIgb3duIGxldmVscyB5b3Ugd2lsbCBlaXRoZXIgbmVlZCB0bworb3ZlcnJpZGUgdGhpcyBtZXRob2Qgb3IgcGxhY2UgYSBzdWl0YWJsZSBkaWN0aW9uYXJ5IGluIHRoZSBoYW5kbGVyJ3MgdHlwZW1hcAorYXR0cmlidXRlLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtnZXRNZXNzYWdlSUR9e3JlY29yZH0KKworUmV0dXJuIHRoZSBtZXNzYWdlIElEIGZvciB0aGUgZXZlbnQgXHZhcntyZWNvcmR9LiBJZiB5b3UgYXJlIHVzaW5nIHlvdXIgb3duCittZXNzYWdlcywgeW91IGNvdWxkIGRvIHRoaXMgYnkgaGF2aW5nIHRoZSBtc2cgcGFzc2VkIHRvIHRoZSBsb2dnZXIgYmVpbmcgYW4KK0lEIHJhdGhlciB0aGFuIGEgZm9ybWF0dGluZyBzdHJpbmcuIFRoZW4sIGluIGhlcmUsIHlvdSBjb3VsZCB1c2UgYQorZGljdGlvbmFyeSBsb29rdXAgdG8gZ2V0IHRoZSBtZXNzYWdlIElELiBUaGlzIHZlcnNpb24gcmV0dXJucyAxLCB3aGljaCBpcwordGhlIGJhc2UgbWVzc2FnZSBJRCBpbiBcY29kZXt3aW4zMnNlcnZpY2UucHlkfS4KKworXGVuZHttZXRob2RkZXNjfQorCisKK1xiZWdpbntjbGFzc2Rlc2N9UGxhY2VIb2xkZXJ7bG9nZ2VyfQorCitcY2xhc3N7UGxhY2VIb2xkZXJ9IGluc3RhbmNlcyBhcmUgdXNlZCBpbiB0aGUgXGNsYXNze01hbmFnZXJ9IGxvZ2dlcgoraGllcmFyY2h5IHRvIHRha2UgdGhlIHBsYWNlIG9mIG5vZGVzIGZvciB3aGljaCBubyBsb2dnZXJzIGhhdmUgYmVlbiBkZWZpbmVkCisKK0luaXRpYWxpemUgd2l0aCB0aGUgc3BlY2lmaWVkIFx2YXJ7bG9nZ2VyfSBiZWluZyBhIGNoaWxkIG9mIHRoaXMKK1xjbGFzc3tQbGFjZUhvbGRlcn0uCisKK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317YXBwZW5kfXtsb2dnZXJ9CisKK0FkZCB0aGUgc3BlY2lmaWVkIFx2YXJ7bG9nZ2VyfSBhcyBhIGNoaWxkIG9mIHRoaXMgcGxhY2Vob2xkZXIuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue2NsYXNzZGVzY31Sb290TG9nZ2Vye2xldmVsfQorCitBIHJvb3QgbG9nZ2VyIGlzIG5vdCB0aGF0IGRpZmZlcmVudCB0byBhbnkgb3RoZXIgbG9nZ2VyLCBleGNlcHQgdGhhdCBpdCBtdXN0CitoYXZlIGEgbG9nZ2luZyBcdmFye2xldmVsfSBhbmQgdGhlcmUgaXMgb25seSBvbmUgaW5zdGFuY2Ugb2YgaXQgaW4gdGhlCitoaWVyYXJjaHkuCisKK1xlbmR7Y2xhc3NkZXNjfQorCisKK1xiZWdpbntjbGFzc2Rlc2N9e1NNVFBIYW5kbGVyfXttYWlsaG9zdCwgZnJvbWFkZHIsIHRvYWRkciwgc3ViamVjdH0KKworQSBoYW5kbGVyIGNsYXNzIHdoaWNoIHNlbmRzIGFuIFNNVFAgZW1haWwgZm9yIGVhY2ggbG9nZ2luZyBldmVudC4KKworVGhlIGluc3RhbmNlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGZyb20gKFx2YXJ7ZnJvbWFkZHJ9KSBhbmQgdG8KKyhcdmFye3RvYWRkcn0pIGFkZHJlc3NlcyBhbmQgXHZhcntzdWJqZWN0fSBsaW5lIG9mIHRoZSBlbWFpbC4gVG8gc3BlY2lmeSBhCitub24tc3RhbmRhcmQgU01UUCBwb3J0LCB1c2UgdGhlIChob3N0LCBwb3J0KSB0dXBsZSBmb3JtYXQgZm9yIHRoZQorXHZhcnttYWlsaG9zdH0gYXJndW1lbnQuCisKK1xlbmR7Y2xhc3NkZXNjfQorCisKK1xiZWdpbnttZXRob2RkZXNjfXtlbWl0fXtyZWNvcmR9CisKK0Zvcm1hdCB0aGUgXHZhcntyZWNvcmR9IGFuZCBzZW5kIGl0IHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzc2Vlcy4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Z2V0U3ViamVjdH17cmVjb3JkfQorCitJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGEgc3ViamVjdCBsaW5lIHdoaWNoIGlzIFx2YXJ7cmVjb3JkfS1kZXBlbmRlbnQsCitvdmVycmlkZSB0aGlzIG1ldGhvZC4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57Y2xhc3NkZXNjfXtTb2NrZXRIYW5kbGVyfXtob3N0LCBwb3J0fQorCitBIGhhbmRsZXIgY2xhc3Mgd2hpY2ggd3JpdGVzIHBpY2tsZWQgbG9nZ2luZyByZWNvcmRzIHRvIGEgc3RyZWFtaW5nCitzb2NrZXQuIFRoZSBzb2NrZXQgaXMga2VwdCBvcGVuIGFjcm9zcyBsb2dnaW5nIGNhbGxzLiAgSWYgdGhlIHBlZXIgcmVzZXRzCitpdCwgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlY29ubmVjdCBvbiB0aGUgbmV4dCBjYWxsLiAgTm90ZSB0aGF0IHRoZSB2ZXJ5CitzaW1wbGUgd2lyZSBwcm90b2NvbCB1c2VkIG1lYW5zIHRoYXQgcGFja2V0IHNpemVzIGFyZSBleHBlY3RlZCB0byBiZQorZW5jb2RhYmxlIHdpdGhpbiAxNiBiaXRzIChpLmUuIDwgMzI3NjcgYnl0ZXMpLgorCitUaGUgaGFuZGxlciBpcyBpbml0aWFsaXplZCB3aXRoIGEgc3BlY2lmaWMgXHZhcntob3N0fSBhZGRyZXNzIGFuZAore31cdmFye3BvcnR9LiAgVGhlIGF0dHJpYnV0ZSBcdmFye2Nsb3NlT25FcnJvcn0gaXMgc2V0IHRvIDEgLSB3aGljaCBtZWFucwordGhhdCBpZiBhIHNvY2tldCBlcnJvciBvY2N1cnMsIHRoZSBzb2NrZXQgaXMgc2lsZW50bHkgY2xvc2VkIGFuZCB0aGVuCityZW9wZW5lZCBvbiB0aGUgbmV4dCBsb2dnaW5nIGNhbGwuCisKK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Y2xvc2V9e30KKworQ2xvc2VzIHRoZSBzb2NrZXQuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2VtaXR9e3JlY29yZH0KKworUGlja2xlcyB0aGUgXHZhcntyZWNvcmR9IGFuZCB3cml0ZXMgaXQgdG8gdGhlIHNvY2tldCBpbiBiaW5hcnkgZm9ybWF0LiAgSWYKK3RoZXJlIGlzIGFuIGVycm9yIHdpdGggdGhlIHNvY2tldCwgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0LiAgSWYgdGhlcmUgd2FzIGEKK3Byb2JsZW0gd2l0aCB0aGUgc29ja2V0LCByZS1lc3RhYmxpc2hlcyB0aGUgc29ja2V0LgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtoYW5kbGVFcnJvcn17fQorCitBbiBlcnJvciBoYXMgb2NjdXJyZWQgZHVyaW5nIGxvZ2dpbmcuICBNb3N0IGxpa2VseSBjYXVzZSAtIGNvbm5lY3Rpb24gbG9zdC4KK0Nsb3NlIHRoZSBzb2NrZXQgc28gdGhhdCB3ZSBjYW4gcmV0cnkgb24gdGhlIG5leHQgZXZlbnQuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e21ha2VQaWNrbGV9e3JlY29yZH0KKworUGlja2xlcyB0aGUgXHZhcntyZWNvcmR9IGluIGJpbmFyeSBmb3JtYXQgd2l0aCBhIGxlbmd0aCBwcmVmaXgsIGFuZCByZXR1cm5zCitpdCByZWFkeSBmb3IgdHJhbnNtaXNzaW9uIGFjcm9zcyB0aGUgc29ja2V0LgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXttYWtlU29ja2V0fXt9CisKK0EgZmFjdG9yeSBtZXRob2Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzZXMgdG8gZGVmaW5lIHRoZSBwcmVjaXNlIHR5cGUgb2YKK3NvY2tldCB0aGV5IHdhbnQuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3NlbmR9e3N9CisKK1NlbmQgYSBwaWNrbGVkIHN0cmluZyAoXHZhcntzfSkgdG8gdGhlIHNvY2tldC4gIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvcgorcGFydGlhbCBzZW5kcyB3aGljaCBjYW4gaGFwcGVuIHdoZW4gdGhlIG5ldHdvcmsgaXMgYnVzeS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57Y2xhc3NkZXNjfXtTdHJlYW1IYW5kbGVyfXtcb3B0aW9uYWx7c3RybT1Ob25lfX0KKworQSBoYW5kbGVyIGNsYXNzIHdoaWNoIHdyaXRlcyBsb2dnaW5nIHJlY29yZHMsIGFwcHJvcHJpYXRlbHkgZm9ybWF0dGVkLCB0byBhCitzdHJlYW0uICBOb3RlIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBjbG9zZSB0aGUgc3RyZWFtLCBhcyBcdmFye3N5cy5zdGRvdXR9CitvciBcdmFye3N5cy5zdGRlcnJ9IG1heSBiZSB1c2VkLgorCitJZiBcdmFye3N0cm19IGlzIG5vdCBzcGVjaWZpZWQsIFx2YXJ7c3lzLnN0ZGVycn0gaXMgdXNlZC4KKworXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtlbWl0fXtyZWNvcmR9CisKK0lmIGEgZm9ybWF0dGVyIGlzIHNwZWNpZmllZCwgaXQgaXMgdXNlZCB0byBmb3JtYXQgdGhlIFx2YXJ7cmVjb3JkfS4gIFRoZQorcmVjb3JkIGlzIHRoZW4gd3JpdHRlbiB0byB0aGUgc3RyZWFtIHdpdGggYSB0cmFpbGluZyBuZXdsaW5lIChOLkIuIHRoaXMgbWF5CitiZSByZW1vdmVkIGRlcGVuZGluZyBvbiBmZWVkYmFjaykuICBJZiBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgaXQKK2lzIGZvcm1hdHRlZCB1c2luZyBcdmFye3RyYWNlYmFjay5wcmludF9leGNlcHRpb259IGFuZCBhcHBlbmRlZCB0byB0aGUKK3N0cmVhbS4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Zmx1c2h9e30KKworRmx1c2hlcyB0aGUgc3RyZWFtLgorCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbntjbGFzc2Rlc2N9e1N5c0xvZ0hhbmRsZXJ9e1xvcHRpb25hbHthZGRyZXNzPSgnbG9jYWxob3N0JywKKzUxNClcb3B0aW9uYWx7LCBmYWNpbGl0eT0xfX19IAorCitBIGhhbmRsZXIgY2xhc3Mgd2hpY2ggc2VuZHMgZm9ybWF0dGVkIGxvZ2dpbmcgcmVjb3JkcyB0byBhIHN5c2xvZworc2VydmVyLiBCYXNlZCBvbiBTYW0gUnVzaGluZydzCitcdWxpbmt7aHR0cDovL3d3dy5uaWdodG1hcmUuY29tL3NxdWlybC9weXRob24tZXh0L21pc2Mvc3lzbG9nLnB5fXtzeXNsb2cKK21vZHVsZX0uICBDb250cmlidXRlZCBieSBOaWNvbGFzIFVudHogKGFmdGVyIHdoaWNoIG1pbm9yIHJlZmFjdG9yaW5nIGNoYW5nZXMKK2hhdmUgYmVlbiBtYWRlKS4KKworSWYgXHZhcnthZGRyZXNzfSBpcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcsIFVOSVggc29ja2V0IGlzIHVzZWQuICBJZgorXHZhcntmYWNpbGl0eX0gaXMgbm90IHNwZWNpZmllZCwgXGNvZGV7TE9HX1VTRVJ9IGlzIHVzZWQuCisKK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Y2xvc2V9e30KKworQ2xvc2VzIHRoZSBzb2NrZXQuCisKK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2VtaXR9e3JlY29yZH0KKworVGhlIFx2YXJ7cmVjb3JkfSBpcyBmb3JtYXR0ZWQsIGFuZCB0aGVuIHNlbnQgdG8gdGhlIHN5c2xvZyBzZXJ2ZXIuIElmCitleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgaXQgaXMgbm90IHNlbnQgdG8gdGhlIHNlcnZlci4KKworXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317ZW5jb2RlUHJpb3JpdHl9e2ZhY2lsaXR5LCBwcmlvcml0eX0KKworRW5jb2RlIHRoZSBcdmFye2ZhY2lsaXR5fSBhbmQgXHZhcntwcmlvcml0eX0uIFlvdSBjYW4gcGFzcyBpbiBzdHJpbmdzIG9yCitpbnRlZ2VycyAtIGlmIHN0cmluZ3MgYXJlIHBhc3NlZCwgdGhlIFx2YXJ7ZmFjaWxpdHlfbmFtZXN9IGFuZAorXHZhcntwcmlvcml0eV9uYW1lc30gbWFwcGluZyBkaWN0aW9uYXJpZXMgYXJlIHVzZWQgdG8gY29udmVydCB0aGVtIHRvCitpbnRlZ2Vycy4KKworXGVuZHttZXRob2RkZXNjfQorCisKK1xzdWJzZWN0aW9ue0V4YW1wbGVzIFxsYWJlbHtsb2dnaW5nLWV4YW1wbGV9fQorCitVc2luZyB0aGUgcGFja2FnZSBkb2Vzbid0IGdldCBtdWNoIHNpbXBsZXIuIEl0IGlzIHBhY2thZ2VkIGFzIGEgUHl0aG9uCitwYWNrYWdlLiAgWW91IGp1c3QgbmVlZCB0byBcY29kZXtpbXBvcnQgbG9nZ2luZ30gYW5kIHlvdSdyZSByZWFkeSB0bworZ28uIE1pbmltYWwgZXhhbXBsZToKKworXGJlZ2lue3ZlcmJhdGltfQorIyAtLSBhcHAucHkgLS0KK2ltcG9ydCBsb2dnaW5nCisKK2xvZ2dpbmcuaW5mbygiU3RhcnRpbmcuLi4iKQorbG9nZ2luZy53YXJuKCJOb3RoaW5nIHRvIGRvISIpCitsb2dnaW5nLmluZm8oIkRvbmUuLi4iKQorXGVuZHt2ZXJiYXRpbX0KKworV2hlbiB5b3UgcnVuIFxjb2Rle2FwcC5weX0sIHRoZSByZXN1bHRzIGFyZToKKworXGJlZ2lue3ZlcmJhdGltfQorMjAwMi0wMy0xNSAwMTowOToxMCw0NDAgcm9vdCAgICAgICAgICAgICAgICBJTkZPICAtIFN0YXJ0aW5nLi4uCisyMDAyLTAzLTE1IDAxOjA5OjEwLDQ0MCByb290ICAgICAgICAgICAgICAgIFdBUk4gIC0gTm90aGluZyB0byBkbyEKKzIwMDItMDMtMTUgMDE6MDk6MTAsNDQwIHJvb3QgICAgICAgICAgICAgICAgSU5GTyAgLSBEb25lLi4uCitcZW5ke3ZlcmJhdGltfQorCisKKworSGVyZSdzIGEKK3NsaWdodGx5IG1vcmUgaW52b2x2ZWQgZXhhbXBsZTsgaWYgeW91J3ZlIGp1c3QgbG9va2VkIGF0IFxwZXB7MjgyfSB5b3Ugd2lsbAorcHJvYmFibHkgZ2V0IGEgZmVlbGluZyBvZiBkZWrgIHZ1LiAoVGhpcyBpcyBpbnRlbnRpb25hbC4pCisKK1xiZWdpbnt2ZXJiYXRpbX0KKyMgLS0gbXltb2R1bGUucHkgLS0KK2ltcG9ydCBsb2dnaW5nCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiTXlNb2R1bGUiKQorCitkZWYgZG9JdCgpOgorICAgIGxvZy5kZWJ1ZygiZG9pbicgc3R1ZmYiKQorICAgICNkbyBzdHVmZi4uLmJ1dCBzdXBwb3NlIGFuIGVycm9yIG9jY3Vycz8KKyAgICByYWlzZSBUeXBlRXJyb3IsICJib2d1cyB0eXBlIGVycm9yIGZvciB0ZXN0aW5nIgorXGVuZHt2ZXJiYXRpbX0KKworXGJlZ2lue3ZlcmJhdGltfQorIyAtLSBteWFwcC5weSAtLQoraW1wb3J0IGxvZ2dpbmcsIG15bW9kdWxlCisKK2xvZ2dpbmcuYmFzaWNDb25maWcoKSAjIGJhc2ljIGNvbmZpZ3VyYXRpb24gLSBjb25zb2xlIG91dHB1dAorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiTXlBcHAiKQorCitsb2cuaW5mbygic3RhcnQgbXkgYXBwIikKK3RyeToKKyAgICBteW1vZHVsZS5kb0l0KCkKK2V4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgbG9nLmV4Y2VwdGlvbigiVGhlcmUgd2FzIGEgcHJvYmxlbSBkb2luJyBzdHVmZi4iKQorbG9nLmluZm8oImVuZCBteSBhcHAiKQorXGVuZHt2ZXJiYXRpbX0KKworV2hlbiB5b3UgcnVuIFxjb2Rle215YXBwLnB5fSwgdGhlIHJlc3VsdHMgYXJlOgorCitcYmVnaW57dmVyYmF0aW19CisyMDAyLTAzLTE0IDIzOjQwOjQ5LDI5OSBNeUFwcCAgICAgICAgICAgICAgIElORk8gIC0gc3RhcnQgbXkgYXBwCisyMDAyLTAzLTE0IDIzOjQwOjQ5LDI5OSBNeU1vZHVsZSAgICAgICAgICAgIERFQlVHIC0gZG9pbicgc3R1ZmYKKzIwMDItMDMtMTQgMjM6NDA6NDksMjk5IE15QXBwICAgICAgICAgICAgICAgRVJST1IgLSBUaGVyZSB3YXMgYSBwcm9ibGVtIGRvaW4nIHN0dWZmLgorVHJhY2ViYWNrIChpbm5lcm1vc3QgbGFzdCk6CisgIEZpbGUgIm15YXBwLnB5IiwgbGluZSA5LCBpbiA/CisgICAgbXltb2R1bGUuZG9JdCgpCisgIEZpbGUgIm15bW9kdWxlLnB5IiwgbGluZSA3LCBpbiBkb0l0CisgICAgcmFpc2UgVHlwZUVycm9yLCAiYm9ndXMgdHlwZSBlcnJvciBmb3IgdGVzdGluZyIKK1R5cGVFcnJvcjogYm9ndXMgdHlwZSBlcnJvciBmb3IgdGVzdGluZworMjAwMi0wMy0xNCAyMzo0MDo0OSw0MDkgTXlBcHAgICAgICAgICAgICAgICBJTkZPICAtIGVuZCBteSBhcHAKK1xlbmR7dmVyYmF0aW19Cg==