ZGlmZiAtLWdpdCBhL0RvYy9saWIvZW1haWwudGV4IGIvRG9jL2xpYi9lbWFpbC50ZXgKaW5kZXggNjg1MzMyNS4uZWExMjcwNSAxMDA2NDQKLS0tIGEvRG9jL2xpYi9lbWFpbC50ZXgKKysrIGIvRG9jL2xpYi9lbWFpbC50ZXgKQEAgLTEwNSw3ICsxMDUsNyBAQAogXGxpbmVpaWl7NC4wfXtQeXRob24gMi41fXtQeXRob24gMi4zIHRvIDIuNX0KIFxlbmR7dGFibGVpaWl9CiAKLUhlcmUgYXJlIHRoZSBtYWpvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIFxtb2R1bGV7ZW1haWx9IHZlcnNvbiA0IGFuZCB2ZXJzaW9uIDM6CitIZXJlIGFyZSB0aGUgbWFqb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBcbW9kdWxle2VtYWlsfSB2ZXJzaW9uIDQgYW5kIHZlcnNpb24gMzoKIAogXGJlZ2lue2l0ZW1pemV9CiBcaXRlbSBBbGwgbW9kdWxlcyBoYXZlIGJlZW4gcmVuYW1lZCBhY2NvcmRpbmcgdG8gXHBlcHs4fSBzdGFuZGFyZHMuICBGb3IKQEAgLTEyNiw2ICsxMjYsMTUgQEAKIFxpdGVtIE1ldGhvZHMgdGhhdCB3ZXJlIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAzIGhhdmUgYmVlbiByZW1vdmVkLiAgVGhlc2UKICAgICAgIGluY2x1ZGUgXG1ldGhvZHtHZW5lcmF0b3IuX19jYWxsX18oKX0sIFxtZXRob2R7TWVzc2FnZS5nZXRfdHlwZSgpfSwKICAgICAgIFxtZXRob2R7TWVzc2FnZS5nZXRfbWFpbl90eXBlKCl9LCBcbWV0aG9ke01lc3NhZ2UuZ2V0X3N1YnR5cGUoKX0uCisKK1xpdGVtIEZpeGVzIGhhdmUgYmVlbiBhZGRlZCBmb3IgXHJmY3syMjMxfSBzdXBwb3J0IHdoaWNoIGNhbiBjaGFuZ2Ugc29tZSBvZgorICAgICAgdGhlIHJldHVybiB0eXBlcyBmb3IgXGZ1bmN0aW9ue01lc3NhZ2UuZ2V0X3BhcmFtKCl9IGFuZCBmcmllbmRzLiAgVW5kZXIKKyAgICAgIHNvbWUgY2lyY3Vtc3RhbmNlcywgdmFsdWVzIHdoaWNoIHVzZWQgdG8gcmV0dXJuIGEgMy10dXBsZSBub3cgcmV0dXJuCisgICAgICBzaW1wbGUgc3RyaW5ncyAoc3BlY2lmaWNhbGx5LCBpZiBhbGwgZXh0ZW5kZWQgcGFyYW1ldGVyIHNlZ21lbnRzIHdlcmUKKyAgICAgIHVuZW5jb2RlZCwgdGhlcmUgaXMgbm8gbGFuZ3VhZ2UgYW5kIGNoYXJzZXQgZGVzaWduYXRpb24gZXhwZWN0ZWQsIHNvIHRoZQorICAgICAgcmV0dXJuIHR5cGUgaXMgbm93IGEgc2ltcGxlIHN0cmluZykuICBBbHNvLCBcJS1kZWNvZGluZyB1c2VkIHRvIGJlIGRvbmUKKyAgICAgIGZvciBib3RoIGVuY29kZWQgYW5kIHVuZW5jb2RlZCBzZWdtZW50czsgdGhpcyBkZWNvZGluZyBpcyBub3cgZG9uZSBvbmx5CisgICAgICBmb3IgZW5jb2RlZCBzZWdtZW50cy4KIFxlbmR7aXRlbWl6ZX0KIAogSGVyZSBhcmUgdGhlIG1ham9yIGRpZmZlcmVuY2VzIGJldHdlZW4gXG1vZHVsZXtlbWFpbH0gdmVyc2lvbiAzIGFuZCB2ZXJzaW9uIDI6CmRpZmYgLS1naXQgYS9Eb2MvbGliL2VtYWlsZ2VuZXJhdG9yLnRleCBiL0RvYy9saWIvZW1haWxnZW5lcmF0b3IudGV4CmluZGV4IDM0MTU0NDIuLmIyMzY2NzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvZW1haWxnZW5lcmF0b3IudGV4CisrKyBiL0RvYy9saWIvZW1haWxnZW5lcmF0b3IudGV4CkBAIC0zMSwxMSArMzEsMTEgQEAKIFxzYW1wez59IGNoYXJhY3RlciBpbiBmcm9udCBvZiBhbnkgbGluZSBpbiB0aGUgYm9keSB0aGF0IHN0YXJ0cyBleGFjdGx5IGFzCiBcc2FtcHtGcm9tIH0sIGkuZS4gXGNvZGV7RnJvbX0gZm9sbG93ZWQgYnkgYSBzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogbGluZS4gIFRoaXMgaXMgdGhlIG9ubHkgZ3VhcmFudGVlZCBwb3J0YWJsZSB3YXkgdG8gYXZvaWQgaGF2aW5nIHN1Y2gKLWxpbmVzIGJlIG1pc3Rha2VuIGZvciBhIFVuaXggbWFpbGJveCBmb3JtYXQgZW52ZWxvcGUgaGVhZGVyIHNlcGFyYXRvciAoc2VlCitsaW5lcyBiZSBtaXN0YWtlbiBmb3IgYSBcVU5JWHt9IG1haWxib3ggZm9ybWF0IGVudmVsb3BlIGhlYWRlciBzZXBhcmF0b3IgKHNlZQogXHVsaW5re1dIWSBUSEUgQ09OVEVOVC1MRU5HVEggRk9STUFUIElTIEJBRH0KIHtodHRwOi8vaG9tZS5uZXRzY2FwZS5jb20vZW5nL21vemlsbGEvMi4wL3JlbG5vdGVzL2RlbW8vY29udGVudC1sZW5ndGguaHRtbH0KIGZvciBkZXRhaWxzKS4gIFx2YXJ7bWFuZ2xlX2Zyb21ffSBkZWZhdWx0cyB0byBcY29kZXtUcnVlfSwgYnV0IHlvdQotbWlnaHQgd2FudCB0byBzZXQgdGhpcyB0byBcY29kZXtGYWxzZX0gaWYgeW91IGFyZSBub3Qgd3JpdGluZyBVbml4CittaWdodCB3YW50IHRvIHNldCB0aGlzIHRvIFxjb2Rle0ZhbHNlfSBpZiB5b3UgYXJlIG5vdCB3cml0aW5nIFxVTklYe30KIG1haWxib3ggZm9ybWF0IGZpbGVzLgogCiBPcHRpb25hbCBcdmFye21heGhlYWRlcmxlbn0gc3BlY2lmaWVzIHRoZSBsb25nZXN0IGxlbmd0aCBmb3IgYQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWIudGV4IGIvRG9jL2xpYi9saWIudGV4CmluZGV4IDA2OTExNzkuLjgzN2M3NTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGliLnRleAorKysgYi9Eb2MvbGliL2xpYi50ZXgKQEAgLTcxLDEyICs3MSwxMiBAQAogJSBCVUlMVC1JTnMKICUgPT09PT09PT09PT09PQogCi1caW5wdXR7bGlib2Jqc30gICAgICAgICAgICAgICAgICUgQnVpbHQtaW4gVHlwZXMsIEV4Y2VwdGlvbnMgYW5kIEZ1bmN0aW9ucworXGlucHV0e2xpYm9ianN9ICAgICAgICAgICAgICAgICAlIEJ1aWx0LWluIEV4Y2VwdGlvbnMgYW5kIEZ1bmN0aW9ucwogXGlucHV0e2xpYmZ1bmNzfQotXGlucHV0e2xpYnN0ZHR5cGVzfQogXGlucHV0e2xpYmV4Y3N9CiBcaW5wdXR7bGliY29uc3RzfQogCitcaW5wdXR7bGlic3RkdHlwZXN9ICAgICAgICAgICAgICUgQnVpbHQtaW4gdHlwZXMKIAogCiAlID09PT09PT09PT09PT0KQEAgLTE1NCw4ICsxNTQsOCBAQAogCiAlIGVuY29kaW5nIHN0dWZmCiBcaW5wdXR7bGliYmFzZTY0fQotXGlucHV0e2xpYmJpbmFzY2lpfQogXGlucHV0e2xpYmJpbmhleH0KK1xpbnB1dHtsaWJiaW5hc2NpaX0KIFxpbnB1dHtsaWJxdW9wcml9CiBcaW5wdXR7bGlidXV9CiAKQEAgLTE3MSw2ICsxNzEsNyBAQAogXGlucHV0e3htbHNheGhhbmRsZXJ9CiBcaW5wdXR7eG1sc2F4dXRpbHN9CiBcaW5wdXR7eG1sc2F4cmVhZGVyfQorXGlucHV0e2xpYmV0cmVlfQogJSBcaW5wdXR7bGlieG1sbGlifQogCiBcaW5wdXR7ZmlsZWZvcm1hdHN9CQklIE1pc2NlbGxhbmVvdXMgZmlsZSBmb3JtYXRzCkBAIC0yNDUsNyArMjQ2LDYgQEAKIFxpbnB1dHtsaWJwbGF0Zm9ybX0KIFxpbnB1dHtsaWJlcnJub30KIFxpbnB1dHtsaWJjdHlwZXN9Ci1caW5wdXR7bGliY3R5cGVzcmVmfQogCiBcaW5wdXR7bGlic29tZW9zfSAgICAgICAgICAgICAgICUgT3B0aW9uYWwgT3BlcmF0aW5nIFN5c3RlbSBTZXJ2aWNlcwogXGlucHV0e2xpYnNlbGVjdH0KQEAgLTI5Miw2ICsyOTIsNyBAQAogXGlucHV0e2xpYndlYmJyb3dzZXJ9CiBcaW5wdXR7bGliY2dpfQogXGlucHV0e2xpYmNnaXRifQorXGlucHV0e2xpYndzZ2lyZWZ9CiBcaW5wdXR7bGlidXJsbGlifQogXGlucHV0e2xpYnVybGxpYjJ9CiBcaW5wdXR7bGliaHR0cGxpYn0KQEAgLTMwMyw2ICszMDQsNyBAQAogXGlucHV0e2xpYnNtdHBsaWJ9CiBcaW5wdXR7bGlic210cGR9CiBcaW5wdXR7bGlidGVsbmV0bGlifQorXGlucHV0e2xpYnV1aWR9CiBcaW5wdXR7bGlidXJscGFyc2V9CiBcaW5wdXR7bGlic29ja3N2cn0KIFxpbnB1dHtsaWJiYXNlaHR0cH0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliYW55ZGJtLnRleCBiL0RvYy9saWIvbGliYW55ZGJtLnRleAppbmRleCAxNzIyOGRkLi5iYWRjNmVjIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmFueWRibS50ZXgKKysrIGIvRG9jL2xpYi9saWJhbnlkYm0udGV4CkBAIC00Niw2ICs0NiwzMiBAQAogXG1ldGhvZHtrZXlzKCl9IG1ldGhvZHMgYXJlIGF2YWlsYWJsZS4gIEtleXMgYW5kIHZhbHVlcyBtdXN0IGFsd2F5cyBiZQogc3RyaW5ncy4KIAorVGhlIGZvbGxvd2luZyBleGFtcGxlIHJlY29yZHMgc29tZSBob3N0bmFtZXMgYW5kIGEgY29ycmVzcG9uZGluZyB0aXRsZSwgCithbmQgdGhlbiBwcmludHMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2U6CisKK1xiZWdpbnt2ZXJiYXRpbX0KK2ltcG9ydCBhbnlkYm0KKworIyBPcGVuIGRhdGFiYXNlLCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuCitkYiA9IGFueWRibS5vcGVuKCdjYWNoZScsICdjJykKKworIyBSZWNvcmQgc29tZSB2YWx1ZXMKK2RiWyd3d3cucHl0aG9uLm9yZyddID0gJ1B5dGhvbiBXZWJzaXRlJworZGJbJ3d3dy5jbm4uY29tJ10gPSAnQ2FibGUgTmV3cyBOZXR3b3JrJworCisjIExvb3AgdGhyb3VnaCBjb250ZW50cy4gIE90aGVyIGRpY3Rpb25hcnkgbWV0aG9kcworIyBzdWNoIGFzIC5rZXlzKCksIC52YWx1ZXMoKSBhbHNvIHdvcmsuCitmb3IgaywgdiBpbiBkYi5pdGVyaXRlbXMoKToKKyAgICBwcmludCBrLCAnXHQnLCB2CisKKyMgU3RvcmluZyBhIG5vbi1zdHJpbmcga2V5IG9yIHZhbHVlIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIChtb3N0CisjIGxpa2VseSBhIFR5cGVFcnJvcikuCitkYlsnd3d3LnlhaG9vLmNvbSddID0gNAorCisjIENsb3NlIHdoZW4gZG9uZS4KK2RiLmNsb3NlKCkKK1xlbmR7dmVyYmF0aW19CisKIAogXGJlZ2lue3NlZWFsc299CiAgIFxzZWVtb2R1bGV7ZGJoYXNofXtCU0QgXGNvZGV7ZGJ9IGRhdGFiYXNlIGludGVyZmFjZS59CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmJhc2U2NC50ZXggYi9Eb2MvbGliL2xpYmJhc2U2NC50ZXgKaW5kZXggNzQ3ZDgzNy4uMDAzOWM4NCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJiYXNlNjQudGV4CisrKyBiL0RvYy9saWIvbGliYmFzZTY0LnRleApAQCAtMTQ2LDYgKzE0NiwxOCBAQAogYWx3YXlzIGluY2x1ZGluZyBhbiBleHRyYSB0cmFpbGluZyBuZXdsaW5lIChcY29kZXsnXGUgbid9KS4KIFxlbmR7ZnVuY2Rlc2N9CiAKK0FuIGV4YW1wbGUgdXNhZ2Ugb2YgdGhlIG1vZHVsZToKKworXGJlZ2lue3ZlcmJhdGltfQorPj4+IGltcG9ydCBiYXNlNjQKKz4+PiBlbmNvZGVkID0gYmFzZTY0LmI2NGVuY29kZSgnZGF0YSB0byBiZSBlbmNvZGVkJykKKz4+PiBlbmNvZGVkCisnWkdGMFlTQjBieUJpWlNCbGJtTnZaR1ZrJworPj4+IGRhdGEgPSBiYXNlNjQuYjY0ZGVjb2RlKGVuY29kZWQpCis+Pj4gZGF0YQorJ2RhdGEgdG8gYmUgZW5jb2RlZCcKK1xlbmR7dmVyYmF0aW19CisKIFxiZWdpbntzZWVhbHNvfQogICBcc2VlbW9kdWxle2JpbmFzY2lpfXtTdXBwb3J0IG1vZHVsZSBjb250YWluaW5nIFxBU0NJSS10by1iaW5hcnkKICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJpbmFyeS10by1cQVNDSUl7fSBjb252ZXJzaW9ucy59CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmJpbmFzY2lpLnRleCBiL0RvYy9saWIvbGliYmluYXNjaWkudGV4CmluZGV4IGIyNDRiMTAuLjg0ZDI5YzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGliYmluYXNjaWkudGV4CisrKyBiL0RvYy9saWIvbGliYmluYXNjaWkudGV4CkBAIC05LDEwICs5LDExIEBACiBUaGUgXG1vZHVsZXtiaW5hc2NpaX0gbW9kdWxlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIG1ldGhvZHMgdG8gY29udmVydAogYmV0d2VlbiBiaW5hcnkgYW5kIHZhcmlvdXMgXEFTQ0lJLWVuY29kZWQgYmluYXJ5CiByZXByZXNlbnRhdGlvbnMuIE5vcm1hbGx5LCB5b3Ugd2lsbCBub3QgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseQotYnV0IHVzZSB3cmFwcGVyIG1vZHVsZXMgbGlrZSBccmVmbW9kdWxle3V1fVxyZWZzdG1vZGluZGV4e3V1fSBvcgotXHJlZm1vZHVsZXtiaW5oZXh9XHJlZnN0bW9kaW5kZXh7YmluaGV4fSBpbnN0ZWFkLCB0aGlzIG1vZHVsZSBzb2xlbHkKLWV4aXN0cyBiZWNhdXNlIGJpdC1tYW5pcHVsYXRpb24gb2YgbGFyZ2UgYW1vdW50cyBvZiBkYXRhIGlzIHNsb3cgaW4KLVB5dGhvbi4KK2J1dCB1c2Ugd3JhcHBlciBtb2R1bGVzIGxpa2UgXHJlZm1vZHVsZXt1dX1ccmVmc3Rtb2RpbmRleHt1dX0sCitccmVmbW9kdWxle2Jhc2U2NH1ccmVmc3Rtb2RpbmRleHtiYXNlNjR9LCBvcgorXHJlZm1vZHVsZXtiaW5oZXh9XHJlZnN0bW9kaW5kZXh7YmluaGV4fSBpbnN0ZWFkLiBUaGUgXG1vZHVsZXtiaW5hc2NpaX0gbW9kdWxlCitjb250YWlucyBsb3ctbGV2ZWwgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gQyBmb3IgZ3JlYXRlciBzcGVlZAordGhhdCBhcmUgdXNlZCBieSB0aGUgaGlnaGVyLWxldmVsIG1vZHVsZXMuCiAKIFRoZSBcbW9kdWxle2JpbmFzY2lpfSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJic2RkYi50ZXggYi9Eb2MvbGliL2xpYmJzZGRiLnRleAppbmRleCBhNWNkYTZkLi40NGI5MTY4IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmJzZGRiLnRleAorKysgYi9Eb2MvbGliL2xpYmJzZGRiLnRleApAQCAtMTMsMjMgKzEzLDI5IEBACiBkaWN0aW9uYXJpZXMuICBLZXlzIGFuZCB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzLCBob3dldmVyLCBzbyB0byB1c2UKIG90aGVyIG9iamVjdHMgYXMga2V5cyBvciB0byBzdG9yZSBvdGhlciBraW5kcyBvZiBvYmplY3RzIHRoZSB1c2VyIG11c3QKIHNlcmlhbGl6ZSB0aGVtIHNvbWVob3csIHR5cGljYWxseSB1c2luZyBcZnVuY3Rpb257bWFyc2hhbC5kdW1wcygpfSBvciAKLVxmdW5jdGlvbntwaWNrbGUuZHVtcHN9LgorXGZ1bmN0aW9ue3BpY2tsZS5kdW1wcygpfS4KIAogVGhlIFxtb2R1bGV7YnNkZGJ9IG1vZHVsZSByZXF1aXJlcyBhIEJlcmtlbGV5IERCIGxpYnJhcnkgdmVyc2lvbiBmcm9tCiAzLjMgdGhydSA0LjQuCiAKIFxiZWdpbntzZWVhbHNvfQotICBcc2VldXJse2h0dHA6Ly9weWJzZGRiLnNvdXJjZWZvcmdlLm5ldC99e1dlYnNpdGUgd2l0aCBkb2N1bWVudGF0aW9uCi0gIGZvciB0aGUgbmV3IHB5dGhvbiBCZXJrZWxleSBEQiBpbnRlcmZhY2UgdGhhdCBjbG9zZWx5IG1pcnJvcnMgdGhlIAotICBzbGVlcHljYXQgb2JqZWN0IG9yaWVudGVkIGludGVyZmFjZSBwcm92aWRlZCBpbiBCZXJrZWxleSBEQiAzIGFuZCA0Ln0KKyAgXHNlZXVybHtodHRwOi8vcHlic2RkYi5zb3VyY2Vmb3JnZS5uZXQvfXtUaGUgd2Vic2l0ZSB3aXRoIGRvY3VtZW50YXRpb24KKyAgZm9yIHRoZSBcbW9kdWxle2JzZGRiLmRifSBweXRob24gQmVya2VsZXkgREIgaW50ZXJmYWNlIHRoYXQgY2xvc2VseSBtaXJyb3JzCisgIHRoZSBTbGVlcHljYXQgb2JqZWN0IG9yaWVudGVkIGludGVyZmFjZSBwcm92aWRlZCBpbiBCZXJrZWxleSBEQiAzIGFuZCA0Ln0KICAgXHNlZXVybHtodHRwOi8vd3d3LnNsZWVweWNhdC5jb20vfXtTbGVlcHljYXQgU29mdHdhcmUgcHJvZHVjZXMgdGhlCi0gIG1vZGVybiBCZXJrZWxleSBEQiBsaWJyYXJ5Ln0KKyAgQmVya2VsZXkgREIgbGlicmFyeS59CiBcZW5ke3NlZWFsc299CiAKK0EgbW9yZSBtb2Rlcm4gREIsIERCRW52IGFuZCBEQlNlcXVlbmNlIG9iamVjdCBpbnRlcmZhY2UgaXMgYXZhaWxhYmxlIGluIHRoZQorXG1vZHVsZXtic2RkYi5kYn0gbW9kdWxlIHdoaWNoIGNsb3NlbHkgbWF0Y2hlcyB0aGUgU2xlZXB5Y2F0IEJlcmtlbGV5IERCIEMgQVBJCitkb2N1bWVudGVkIGF0IHRoZSBhYm92ZSBVUkxzLiAgQWRkaXRpb25hbCBmZWF0dXJlcyBwcm92aWRlZCBieSB0aGUKK1xtb2R1bGV7YnNkZGIuZGJ9IEFQSSBpbmNsdWRlIGZpbmUgdHVuaW5nLCB0cmFuc2FjdGlvbnMsIGxvZ2dpbmcsIGFuZAorbXVsdGlwcm9jZXNzIGNvbmN1cnJlbnQgZGF0YWJhc2UgYWNjZXNzLgorCiBUaGUgZm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGxlZ2FjeSBcbW9kdWxle2JzZGRifSBpbnRlcmZhY2UKLWNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHB5dGhvbiBic2RkYiBtb2R1bGUuICBGb3IgZGV0YWlscyBhYm91dCB0aGUgbW9yZQotbW9kZXJuIERiIGFuZCBEYkVudiBvYmplY3Qgb3JpZW50ZWQgaW50ZXJmYWNlIHNlZSB0aGUgYWJvdmUgbWVudGlvbmVkCi1weWJzZGRiIFVSTC4KK2NvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHB5dGhvbiBic2RkYiBtb2R1bGUuICBTdGFydGluZyBpbiBQeXRob24gMi41IHRoaXMKK2ludGVyZmFjZSBzaG91bGQgYmUgc2FmZSBmb3IgbXVsdGl0aHJlYWRlZCBhY2Nlc3MuICBUaGUgXG1vZHVsZXtic2RkYi5kYn0KK0FQSSBpcyByZWNvbW1lbmRlZCBmb3IgdGhyZWFkaW5nIHVzZXJzIGFzIGl0IHByb3ZpZGVzIGJldHRlciBjb250cm9sLgogCiBUaGUgXG1vZHVsZXtic2RkYn0gbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdGhhdCBjcmVhdGUKIG9iamVjdHMgdGhhdCBhY2Nlc3MgdGhlIGFwcHJvcHJpYXRlIHR5cGUgb2YgQmVya2VsZXkgREIgZmlsZS4gIFRoZQpAQCAtODgsNyArOTQsNyBAQAogCiAKIFxiZWdpbntub3RpY2V9Ci1CZWdpbm5pbmcgaW4gMi4zIHNvbWUgVW5peCB2ZXJzaW9ucyBvZiBQeXRob24gbWF5IGhhdmUgYSBcbW9kdWxle2JzZGRiMTg1fQorQmVnaW5uaW5nIGluIDIuMyBzb21lIFxVTklYe30gdmVyc2lvbnMgb2YgUHl0aG9uIG1heSBoYXZlIGEgXG1vZHVsZXtic2RkYjE4NX0KIG1vZHVsZS4gIFRoaXMgaXMgcHJlc2VudCBcZW1waHtvbmx5fSB0byBhbGxvdyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCiBzeXN0ZW1zIHdoaWNoIHNoaXAgd2l0aCB0aGUgb2xkIEJlcmtlbGV5IERCIDEuODUgZGF0YWJhc2UgbGlicmFyeS4gIFRoZQogXG1vZHVsZXtic2RkYjE4NX0gbW9kdWxlIHNob3VsZCBuZXZlciBiZSB1c2VkIGRpcmVjdGx5IGluIG5ldyBjb2RlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJjb21waWxlYWxsLnRleCBiL0RvYy9saWIvbGliY29tcGlsZWFsbC50ZXgKaW5kZXggZDM5YTU0OC4uM2U5NjY3ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJjb21waWxlYWxsLnRleAorKysgYi9Eb2MvbGliL2xpYmNvbXBpbGVhbGwudGV4CkBAIC00NCw2ICs0NCwxOSBAQAogICBcZnVuY3Rpb257Y29tcGlsZV9kaXIoKX0gZnVuY3Rpb24uCiBcZW5ke2Z1bmNkZXNjfQogCitUbyBmb3JjZSBhIHJlY29tcGlsZSBvZiBhbGwgdGhlIFxmaWxley5weX0gZmlsZXMgaW4gdGhlIFxmaWxle0xpYi99CitzdWJkaXJlY3RvcnkgYW5kIGFsbCBpdHMgc3ViZGlyZWN0b3JpZXM6CisKK1xiZWdpbnt2ZXJiYXRpbX0KK2ltcG9ydCBjb21waWxlYWxsCisKK2NvbXBpbGVhbGwuY29tcGlsZV9kaXIoJ0xpYi8nLCBmb3JjZT1UcnVlKQorCisjIFBlcmZvcm0gc2FtZSBjb21waWxhdGlvbiwgZXhjbHVkaW5nIGZpbGVzIGluIC5zdm4gZGlyZWN0b3JpZXMuCitpbXBvcnQgcmUKK2NvbXBpbGVhbGwuY29tcGlsZV9kaXIoJ0xpYi8nLCByeD1yZS5jb21waWxlKCcvWy5dc3ZuJyksIGZvcmNlPVRydWUpCitcZW5ke3ZlcmJhdGltfQorCiAKIFxiZWdpbntzZWVhbHNvfQogICBcc2VlbW9kdWxlW3B5Y29tcGlsZV17cHlfY29tcGlsZX17Qnl0ZS1jb21waWxlIGEgc2luZ2xlIHNvdXJjZSBmaWxlLn0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliY29va2llbGliLnRleCBiL0RvYy9saWIvbGliY29va2llbGliLnRleAppbmRleCBlZjJkODMzLi4wMWYyNTM5IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmNvb2tpZWxpYi50ZXgKKysrIGIvRG9jL2xpYi9saWJjb29raWVsaWIudGV4CkBAIC0yNCw3ICsyNCw3IEBACiB0aGUgZGUtZmFjdG8gTmV0c2NhcGUgY29va2llIHByb3RvY29sICh3aGljaCBkaWZmZXJzIHN1YnN0YW50aWFsbHkKIGZyb20gdGhhdCBzZXQgb3V0IGluIHRoZSBvcmlnaW5hbCBOZXRzY2FwZSBzcGVjaWZpY2F0aW9uKSwgaW5jbHVkaW5nCiB0YWtpbmcgbm90ZSBvZiB0aGUgXGNvZGV7bWF4LWFnZX0gYW5kIFxjb2Rle3BvcnR9IGNvb2tpZS1hdHRyaWJ1dGVzCi1pbnRyb2R1Y2VkIHdpdGggUkZDIDIxMDkuICBcbm90ZXtUaGUgdmFyaW91cyBuYW1lZCBwYXJhbWV0ZXJzIGZvdW5kIGluCitpbnRyb2R1Y2VkIHdpdGggUkZDIDI5NjUuICBcbm90ZXtUaGUgdmFyaW91cyBuYW1lZCBwYXJhbWV0ZXJzIGZvdW5kIGluCiBcbWFpbGhlYWRlcntTZXQtQ29va2llfSBhbmQgXG1haWxoZWFkZXJ7U2V0LUNvb2tpZTJ9IGhlYWRlcnMKIChlZy4gXGNvZGV7ZG9tYWlufSBhbmQgXGNvZGV7ZXhwaXJlc30pIGFyZSBjb252ZW50aW9uYWxseSByZWZlcnJlZCB0bwogYXMgXGRmbnthdHRyaWJ1dGVzfS4gIFRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBQeXRob24gYXR0cmlidXRlcywgdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmNzdi50ZXggYi9Eb2MvbGliL2xpYmNzdi50ZXgKaW5kZXggNjUwNTNjNy4uOGUxMGNjZiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJjc3YudGV4CisrKyBiL0RvYy9saWIvbGliY3N2LnRleApAQCAtNTUsNyArNTUsNyBAQAogUmV0dXJuIGEgcmVhZGVyIG9iamVjdCB3aGljaCB3aWxsIGl0ZXJhdGUgb3ZlciBsaW5lcyBpbiB0aGUgZ2l2ZW4KIHt9XHZhcntjc3ZmaWxlfS4gIFx2YXJ7Y3N2ZmlsZX0gY2FuIGJlIGFueSBvYmplY3Qgd2hpY2ggc3VwcG9ydHMgdGhlCiBpdGVyYXRvciBwcm90b2NvbCBhbmQgcmV0dXJucyBhIHN0cmluZyBlYWNoIHRpbWUgaXRzIFxtZXRob2R7bmV4dH0KLW1ldGhvZCBpcyBjYWxsZWQgLSBmaWxlIG9iamVjdHMgYW5kIGxpc3Qgb2JqZWN0cyBhcmUgYm90aCBzdWl0YWJsZS4gIAorbWV0aG9kIGlzIGNhbGxlZCAtLS0gZmlsZSBvYmplY3RzIGFuZCBsaXN0IG9iamVjdHMgYXJlIGJvdGggc3VpdGFibGUuICAKIElmIFx2YXJ7Y3N2ZmlsZX0gaXMgYSBmaWxlIG9iamVjdCwgaXQgbXVzdCBiZSBvcGVuZWQgd2l0aAogdGhlICdiJyBmbGFnIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGF0IG1ha2VzIGEgZGlmZmVyZW5jZS4gIEFuIG9wdGlvbmFsCiB7fVx2YXJ7ZGlhbGVjdH0gcGFyYW1ldGVyIGNhbiBiZSBnaXZlbgpAQCAtNzAsNiArNzAsMTggQEAKIAogQWxsIGRhdGEgcmVhZCBhcmUgcmV0dXJuZWQgYXMgc3RyaW5ncy4gIE5vIGF1dG9tYXRpYyBkYXRhIHR5cGUKIGNvbnZlcnNpb24gaXMgcGVyZm9ybWVkLgorCitcdmVyc2lvbmNoYW5nZWRbCitUaGUgcGFyc2VyIGlzIG5vdyBzdHJpY3RlciB3aXRoIHJlc3BlY3QgdG8gbXVsdGktbGluZSBxdW90ZWQKK2ZpZWxkcy4gUHJldmlvdXNseSwgaWYgYSBsaW5lIGVuZGVkIHdpdGhpbiBhIHF1b3RlZCBmaWVsZCB3aXRob3V0IGEKK3Rlcm1pbmF0aW5nIG5ld2xpbmUgY2hhcmFjdGVyLCBhIG5ld2xpbmUgd291bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUKK3JldHVybmVkIGZpZWxkLiBUaGlzIGJlaGF2aW9yIGNhdXNlZCBwcm9ibGVtcyB3aGVuIHJlYWRpbmcgZmlsZXMKK3doaWNoIGNvbnRhaW5lZCBjYXJyaWFnZSByZXR1cm4gY2hhcmFjdGVycyB3aXRoaW4gZmllbGRzLiAgVGhlCitiZWhhdmlvciB3YXMgY2hhbmdlZCB0byByZXR1cm4gdGhlIGZpZWxkIHdpdGhvdXQgaW5zZXJ0aW5nIG5ld2xpbmVzLiBBcworYSBjb25zZXF1ZW5jZSwgaWYgbmV3bGluZXMgZW1iZWRkZWQgd2l0aGluIGZpZWxkcyBhcmUgaW1wb3J0YW50LCB0aGUKK2lucHV0IHNob3VsZCBiZSBzcGxpdCBpbnRvIGxpbmVzIGluIGEgbWFubmVyIHdoaWNoIHByZXNlcnZlcyB0aGUgbmV3bGluZQorY2hhcmFjdGVyc117Mi41fQorCiBcZW5ke2Z1bmNkZXNjfQogCiBcYmVnaW57ZnVuY2Rlc2N9e3dyaXRlcn17Y3N2ZmlsZVxvcHRpb25hbHssCkBAIC00MDQsNyArNDE2LDcgQEAKIHJlYWRlciA9IGNzdi5yZWFkZXIob3BlbigicGFzc3dkIiwgInJiIiksICd1bml4cHdkJykKIFxlbmR7dmVyYmF0aW19CiAKLUEgc2xpZ2h0bHkgbW9yZSBhZHZhbmNlZCB1c2Ugb2YgdGhlIHJlYWRlciAtIGNhdGNoaW5nIGFuZCByZXBvcnRpbmcgZXJyb3JzOgorQSBzbGlnaHRseSBtb3JlIGFkdmFuY2VkIHVzZSBvZiB0aGUgcmVhZGVyIC0tLSBjYXRjaGluZyBhbmQgcmVwb3J0aW5nIGVycm9yczoKIAogXGJlZ2lue3ZlcmJhdGltfQogaW1wb3J0IGNzdiwgc3lzCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmN0eXBlcy50ZXggYi9Eb2MvbGliL2xpYmN0eXBlcy50ZXgKaW5kZXggZGMzNzc0OS4uNjIwNmI4YyAxMDA3NTUKLS0tIGEvRG9jL2xpYi9saWJjdHlwZXMudGV4CisrKyBiL0RvYy9saWIvbGliY3R5cGVzLnRleApAQCAtMSw0ICsxLDQgQEAKLVxuZXdsZW5ndGh7XGxvY2FsbGluZXdpZHRofQorXGlmeFxsb2NhbGxpbmV3aWR0aFx1bmRlZmluZWRcbmV3bGVuZ3Roe1xsb2NhbGxpbmV3aWR0aH1cZmkKIFxzZXRsZW5ndGh7XGxvY2FsbGluZXdpZHRofXtcbGluZXdpZHRofQogXHNlY3Rpb257XG1vZHVsZXtjdHlwZXN9IC0tLSBBIGZvcmVpZ24gZnVuY3Rpb24gbGlicmFyeSBmb3IgUHl0aG9uLn0KIFxkZWNsYXJlbW9kdWxle3N0YW5kYXJkfXtjdHlwZXN9CkBAIC02LDEzICs2LDEzIEBACiBcbW9kdWxlc3lub3BzaXN7QSBmb3JlaWduIGZ1bmN0aW9uIGxpYnJhcnkgZm9yIFB5dGhvbi59CiBcdmVyc2lvbmFkZGVkezIuNX0KIAotXGNvZGV7Y3R5cGVzfSBpcyBhIGZvcmVpZ24gZnVuY3Rpb24gbGlicmFyeSBmb3IgUHl0aG9uLgorXGNvZGV7Y3R5cGVzfSBpcyBhIGZvcmVpZ24gZnVuY3Rpb24gbGlicmFyeSBmb3IgUHl0aG9uLiAgSXQgcHJvdmlkZXMgQworY29tcGF0aWJsZSBkYXRhIHR5cGVzLCBhbmQgYWxsb3dzIHRvIGNhbGwgZnVuY3Rpb25zIGluIGRsbHMvc2hhcmVkCitsaWJyYXJpZXMuICBJdCBjYW4gYmUgdXNlZCB0byB3cmFwIHRoZXNlIGxpYnJhcmllcyBpbiBwdXJlIFB5dGhvbi4KIAogCiBcc3Vic2VjdGlvbntjdHlwZXMgdHV0b3JpYWxcbGFiZWx7Y3R5cGVzLWN0eXBlcy10dXRvcmlhbH19CiAKLVRoaXMgdHV0b3JpYWwgZGVzY3JpYmVzIHZlcnNpb24gMC45Ljkgb2YgXGNvZGV7Y3R5cGVzfS4KLQogTm90ZTogVGhlIGNvZGUgc2FtcGxlcyBpbiB0aGlzIHR1dG9yaWFsIHVzZXMgXGNvZGV7ZG9jdGVzdH0gdG8gbWFrZSBzdXJlCiB0aGF0IHRoZXkgYWN0dWFsbHkgd29yay4gIFNpbmNlIHNvbWUgY29kZSBzYW1wbGVzIGJlaGF2ZSBkaWZmZXJlbnRseQogdW5kZXIgTGludXgsIFdpbmRvd3MsIG9yIE1hYyBPUyBYLCB0aGV5IGNvbnRhaW4gZG9jdGVzdCBkaXJlY3RpdmVzIGluCkBAIC02Niw4ICs2Niw3IEBACiA8Q0RMTCAnbGliYy5zby42JywgaGFuZGxlIC4uLiBhdCAuLi4+CiA+Pj4KIFxlbmR7dmVyYmF0aW19Ci0KLVhYWCBBZGQgc2VjdGlvbiBmb3IgTWFjIE9TIFguCislIFhYWCBBZGQgc2VjdGlvbiBmb3IgTWFjIE9TIFguIAogCiAKIFxzdWJzdWJzZWN0aW9ue0FjY2Vzc2luZyBmdW5jdGlvbnMgZnJvbSBsb2FkZWQgZGxsc1xsYWJlbHtjdHlwZXMtYWNjZXNzaW5nLWZ1bmN0aW9ucy1mcm9tLWxvYWRlZC1kbGxzfX0KQEAgLTExOSw3ICsxMTgsNyBAQAogCiBPbiBXaW5kb3dzLCBzb21lIGRsbHMgZXhwb3J0IGZ1bmN0aW9ucyBub3QgYnkgbmFtZSBidXQgYnkgb3JkaW5hbC4KIFRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgYWNjZXNzZWQgYnkgaW5kZXhpbmcgdGhlIGRsbCBvYmplY3Qgd2l0aCB0aGUKLW9kaW5hbCBudW1iZXI6CitvcmRpbmFsIG51bWJlcjoKIFxiZWdpbnt2ZXJiYXRpbX0KID4+PiBjZGxsLmtlcm5lbDMyWzFdICMgZG9jdGVzdDogK1dJTkRPV1MKIDxfRnVuY1B0ciBvYmplY3QgYXQgMHguLi4+CkBAIC0xNDMsMTYgKzE0MiwxOCBAQAogVGhpcyBleGFtcGxlIGNhbGxzIGJvdGggZnVuY3Rpb25zIHdpdGggYSBOVUxMIHBvaW50ZXIgKFxjb2Rle05vbmV9IHNob3VsZAogYmUgdXNlZCBhcyB0aGUgTlVMTCBwb2ludGVyKToKIFxiZWdpbnt2ZXJiYXRpbX0KLT4+PiBwcmludCBsaWJjLnRpbWUoTm9uZSkKLTExNC4uLgorPj4+IHByaW50IGxpYmMudGltZShOb25lKSAjIGRvY3Rlc3Q6ICtTS0lQCisxMTUwNjQwNzkyCiA+Pj4gcHJpbnQgaGV4KHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKE5vbmUpKSAjIGRvY3Rlc3Q6ICtXSU5ET1dTCiAweDFkMDAwMDAwCiA+Pj4KIFxlbmR7dmVyYmF0aW19CiAKIFxjb2Rle2N0eXBlc30gdHJpZXMgdG8gcHJvdGVjdCB5b3UgZnJvbSBjYWxsaW5nIGZ1bmN0aW9ucyB3aXRoIHRoZSB3cm9uZwotbnVtYmVyIG9mIGFyZ3VtZW50cy4gIFVuZm9ydHVuYXRlbHkgdGhpcyBvbmx5IHdvcmtzIG9uIFdpbmRvd3MuICBJdAotZG9lcyB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgc3RhY2sgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnM6CitudW1iZXIgb2YgYXJndW1lbnRzIG9yIHRoZSB3cm9uZyBjYWxsaW5nIGNvbnZlbnRpb24uICBVbmZvcnR1bmF0ZWx5Cit0aGlzIG9ubHkgd29ya3Mgb24gV2luZG93cy4gIEl0IGRvZXMgdGhpcyBieSBleGFtaW5pbmcgdGhlIHN0YWNrIGFmdGVyCit0aGUgZnVuY3Rpb24gcmV0dXJucywgc28gYWx0aG91Z2ggYW4gZXJyb3IgaXMgcmFpc2VkIHRoZSBmdW5jdGlvbgorXGVtcGh7aGFzfSBiZWVuIGNhbGxlZDoKIFxiZWdpbnt2ZXJiYXRpbX0KID4+PiB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQSgpICMgZG9jdGVzdDogK1dJTkRPV1MKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKQEAgLTE2NSw2ICsxNjYsMjUgQEAKID4+PgogXGVuZHt2ZXJiYXRpbX0KIAorVGhlIHNhbWUgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHlvdSBjYWxsIGFuIFxjb2Rle3N0ZGNhbGx9IGZ1bmN0aW9uCit3aXRoIHRoZSBcY29kZXtjZGVjbH0gY2FsbGluZyBjb252ZW50aW9uLCBvciB2aWNlIHZlcnNhOgorXGJlZ2lue3ZlcmJhdGltfQorPj4+IGNkbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQShOb25lKSAjIGRvY3Rlc3Q6ICtXSU5ET1dTCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KK1ZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoIGFyZ3VtZW50cyAoNCBieXRlcyBtaXNzaW5nKQorPj4+CisKKz4+PiB3aW5kbGwubXN2Y3J0LnByaW50Zigic3BhbSIpICMgZG9jdGVzdDogK1dJTkRPV1MKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPworVmFsdWVFcnJvcjogUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cyAoNCBieXRlcyBpbiBleGNlc3MpCis+Pj4KK1xlbmR7dmVyYmF0aW19CisKK1RvIGZpbmQgb3V0IHRoZSBjb3JyZWN0IGNhbGxpbmcgY29udmVudGlvbiB5b3UgaGF2ZSB0byBsb29rIGludG8gdGhlIEMKK2hlYWRlciBmaWxlIG9yIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb24geW91IHdhbnQgdG8gY2FsbC4KKwogT24gV2luZG93cywgXGNvZGV7Y3R5cGVzfSB1c2VzIHdpbjMyIHN0cnVjdHVyZWQgZXhjZXB0aW9uIGhhbmRsaW5nIHRvCiBwcmV2ZW50IGNyYXNoZXMgZnJvbSBnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHRzIHdoZW4gZnVuY3Rpb25zIGFyZQogY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudCB2YWx1ZXM6CkBAIC0xODYsMTU4ICsyMDYsMTcyIEBACiBoYXZlIHRvIGxlYXJuIG1vcmUgYWJvdXQgXGNvZGV7Y3R5cGVzfSBkYXRhIHR5cGVzLgogCiAKLVxzdWJzdWJzZWN0aW9ue1NpbXBsZSBkYXRhIHR5cGVzXGxhYmVse2N0eXBlcy1zaW1wbGUtZGF0YS10eXBlc319Citcc3Vic3Vic2VjdGlvbntGdW5kYW1lbnRhbCBkYXRhIHR5cGVzXGxhYmVse2N0eXBlcy1mdW5kYW1lbnRhbC1kYXRhLXR5cGVzfX0KIAogXGNvZGV7Y3R5cGVzfSBkZWZpbmVzIGEgbnVtYmVyIG9mIHByaW1pdGl2ZSBDIGNvbXBhdGlibGUgZGF0YSB0eXBlcyA6CiBcYmVnaW57cXVvdGV9Ci0KLVxiZWdpbntsb25ndGFibGV9W2Nde3xwezAuMTlcbG9jYWxsaW5ld2lkdGh9fHB7MC4yOFxsb2NhbGxpbmV3aWR0aH18cHswLjE0XGxvY2FsbGluZXdpZHRofXx9Ci1caGxpbmUKLVx0ZXh0YmZ7CitcYmVnaW57dGFibGVpaWl9e2x8bHxsfXt0ZXh0cm19Cit7CiBjdHlwZXMgdHlwZQotfSAmIFx0ZXh0YmZ7Cit9Cit7CiBDIHR5cGUKLX0gJiBcdGV4dGJmeworfQorewogUHl0aG9uIHR5cGUKLX0gXFwKLVxobGluZQotXGVuZGhlYWQKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX31jaGFyfQotICYgCit9Cit7CiBcY29kZXtjaGFyfQotICYgCit9Cit7CiBjaGFyYWN0ZXIKLSBcXAotXGhsaW5lCi0KK30KK1xsaW5laWlpewogXGNsYXNze2N7XF99Ynl0ZX0KLSAmIAorfQorewogXGNvZGV7Y2hhcn0KLSAmIAorfQorewogaW50ZWdlcgotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX311Ynl0ZX0KLSAmIAorfQorewogXGNvZGV7dW5zaWduZWQgY2hhcn0KLSAmIAorfQorewogaW50ZWdlcgotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX31zaG9ydH0KLSAmIAorfQorewogXGNvZGV7c2hvcnR9Ci0gJiAKK30KK3sKIGludGVnZXIKLSBcXAotXGhsaW5lCi0KK30KK1xsaW5laWlpewogXGNsYXNze2N7XF99dXNob3J0fQotICYgCit9Cit7CiBcY29kZXt1bnNpZ25lZCBzaG9ydH0KLSAmIAorfQorewogaW50ZWdlcgotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX31pbnR9Ci0gJiAKK30KK3sKIFxjb2Rle2ludH0KLSAmIAorfQorewogaW50ZWdlcgotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX311aW50fQotICYgCit9Cit7CiBcY29kZXt1bnNpZ25lZCBpbnR9Ci0gJiAKK30KK3sKIGludGVnZXIKLSBcXAotXGhsaW5lCi0KK30KK1xsaW5laWlpewogXGNsYXNze2N7XF99bG9uZ30KLSAmIAorfQorewogXGNvZGV7bG9uZ30KLSAmIAorfQorewogaW50ZWdlcgotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX311bG9uZ30KLSAmIAorfQorewogXGNvZGV7dW5zaWduZWQgbG9uZ30KLSAmIAorfQorewogbG9uZwotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX31sb25nbG9uZ30KLSAmIAorfQorewogXGNvZGV7e1xffXtcX31pbnQ2NH0gb3IKIFxjb2Rle2xvbmcgbG9uZ30KLSAmIAorfQorewogbG9uZwotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX311bG9uZ2xvbmd9Ci0gJiAKK30KK3sKIFxjb2Rle3Vuc2lnbmVkIHtcX317XF99aW50NjR9IG9yCiBcY29kZXt1bnNpZ25lZCBsb25nIGxvbmd9Ci0gJiAKK30KK3sKIGxvbmcKLSBcXAotXGhsaW5lCi0KK30KK1xsaW5laWlpewogXGNsYXNze2N7XF99ZmxvYXR9Ci0gJiAKK30KK3sKIFxjb2Rle2Zsb2F0fQotICYgCit9Cit7CiBmbG9hdAotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX31kb3VibGV9Ci0gJiAKK30KK3sKIFxjb2Rle2RvdWJsZX0KLSAmIAorfQorewogZmxvYXQKLSBcXAotXGhsaW5lCi0KK30KK1xsaW5laWlpewogXGNsYXNze2N7XF99Y2hhcntcX31wfQotICYgCit9Cit7CiBcY29kZXtjaGFyICp9CiAoTlVMIHRlcm1pbmF0ZWQpCi0gJiAKK30KK3sKIHN0cmluZyBvcgogXGNvZGV7Tm9uZX0KLSBcXAotXGhsaW5lCi0KK30KK1xsaW5laWlpewogXGNsYXNze2N7XF99d2NoYXJ7XF99cH0KLSAmIAorfQorewogXGNvZGV7d2NoYXJ7XF99dCAqfQogKE5VTCB0ZXJtaW5hdGVkKQotICYgCit9Cit7CiB1bmljb2RlIG9yCiBcY29kZXtOb25lfQotIFxcCi1caGxpbmUKLQorfQorXGxpbmVpaWl7CiBcY2xhc3N7Y3tcX312b2lke1xffXB9Ci0gJiAKK30KK3sKIFxjb2Rle3ZvaWQgKn0KLSAmIAorfQorewogaW50ZWdlciBvcgogXGNvZGV7Tm9uZX0KLSBcXAotXGhsaW5lCi1cZW5ke2xvbmd0YWJsZX0KK30KK1xlbmR7dGFibGVpaWl9CiBcZW5ke3F1b3RlfQogCiBBbGwgdGhlc2UgdHlwZXMgY2FuIGJlIGNyZWF0ZWQgYnkgY2FsbGluZyB0aGVtIHdpdGggYW4gb3B0aW9uYWwKQEAgLTM4MCw2ICs0MTQsNyBAQAogY19jaGFyX3AoJ0hpLCB0aGVyZScpCiA+Pj4gcHJpbnQgcyAgICAgICAgICAgICAgICAgIyBmaXJzdCBzdHJpbmcgaXMgdW5jaGFuZ2VkCiBIZWxsbywgV29ybGQKKz4+PgogXGVuZHt2ZXJiYXRpbX0KIAogWW91IHNob3VsZCBiZSBjYXJlZnVsLCBob3dldmVyLCBub3QgdG8gcGFzcyB0aGVtIHRvIGZ1bmN0aW9ucwpAQCAtNTU3LDEzICs1OTIsMTIgQEAKID4+PgogXGVuZHt2ZXJiYXRpbX0KIAotWFhYIE1lbnRpb24gdGhlIFxtZW1iZXJ7ZXJyY2hlY2t9IHByb3RvY29sLi4uCi0KIFlvdSBjYW4gYWxzbyB1c2UgYSBjYWxsYWJsZSBQeXRob24gb2JqZWN0IChhIGZ1bmN0aW9uIG9yIGEgY2xhc3MgZm9yCi1leGFtcGxlKSBhcyB0aGUgXG1lbWJlcntyZXN0eXBlfSBhdHRyaWJ1dGUuICBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZQotXGNvZGV7aW50ZWdlcn0gdGhlIEMgZnVuY3Rpb24gcmV0dXJucywgYW5kIHRoZSByZXN1bHQgb2YgdGhpcyBjYWxsIHdpbGwKLWJlIHVzZWQgYXMgdGhlIHJlc3VsdCBvZiB5b3VyIGZ1bmN0aW9uIGNhbGwuIFRoaXMgaXMgdXNlZnVsIHRvIGNoZWNrCi1mb3IgZXJyb3IgcmV0dXJuIHZhbHVlcyBhbmQgYXV0b21hdGljYWxseSByYWlzZSBhbiBleGNlcHRpb246CitleGFtcGxlKSBhcyB0aGUgXG1lbWJlcntyZXN0eXBlfSBhdHRyaWJ1dGUsIGlmIHRoZSBmb3JlaWduIGZ1bmN0aW9uIHJldHVybnMKK2FuIGludGVnZXIuICBUaGUgY2FsbGFibGUgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgXGNvZGV7aW50ZWdlcn0gdGhlIEMKK2Z1bmN0aW9uIHJldHVybnMsIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgY2FsbCB3aWxsIGJlIHVzZWQgYXMgdGhlCityZXN1bHQgb2YgeW91ciBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIHVzZWZ1bCB0byBjaGVjayBmb3IgZXJyb3IgcmV0dXJuCit2YWx1ZXMgYW5kIGF1dG9tYXRpY2FsbHkgcmFpc2UgYW4gZXhjZXB0aW9uOgogXGJlZ2lue3ZlcmJhdGltfQogPj4+IEdldE1vZHVsZUhhbmRsZSA9IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBICMgZG9jdGVzdDogK1dJTkRPV1MKID4+PiBkZWYgVmFsaWRIYW5kbGUodmFsdWUpOgpAQCAtNTc1LDcgKzYwOSw3IEBACiA+Pj4gR2V0TW9kdWxlSGFuZGxlLnJlc3R5cGUgPSBWYWxpZEhhbmRsZSAjIGRvY3Rlc3Q6ICtXSU5ET1dTCiA+Pj4gR2V0TW9kdWxlSGFuZGxlKE5vbmUpICMgZG9jdGVzdDogK1dJTkRPV1MKIDQ4NjUzOTI2NAotPj4+IEdldE1vZHVsZUhhbmRsZSgic29tZXRoaW5nIHNpbGx5IikgIyBkb2N0ZXN0OiArV0lORE9XUyArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKz4+PiBHZXRNb2R1bGVIYW5kbGUoInNvbWV0aGluZyBzaWxseSIpICMgZG9jdGVzdDogK1dJTkRPV1MKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICBGaWxlICI8c3RkaW4+IiwgbGluZSAzLCBpbiBWYWxpZEhhbmRsZQpAQCAtNTg4LDYgKzYyMiwxMCBAQAogYW4gZXhjZXB0aW9uLiAgXGNvZGV7V2luRXJyb3J9IHRha2VzIGFuIG9wdGlvbmFsIGVycm9yIGNvZGUgcGFyYW1ldGVyLCBpZgogbm8gb25lIGlzIHVzZWQsIGl0IGNhbGxzIFxmdW5jdGlvbntHZXRMYXN0RXJyb3IoKX0gdG8gcmV0cmlldmUgaXQuCiAKK1BsZWFzZSBub3RlIHRoYXQgYSBtdWNoIG1vcmUgcG93ZXJmdWwgZXJyb3IgY2hlY2tpbmcgbWVjaGFuaXNtIGlzCithdmFpbGFibGUgdGhyb3VnaCB0aGUgXG1lbWJlcntlcnJjaGVja30gYXR0cmlidXRlOyBzZWUgdGhlIHJlZmVyZW5jZSBtYW51YWwKK2ZvciBkZXRhaWxzLgorCiAKIFxzdWJzdWJzZWN0aW9ue1Bhc3NpbmcgcG9pbnRlcnMgKG9yOiBwYXNzaW5nIHBhcmFtZXRlcnMgYnkgcmVmZXJlbmNlKVxsYWJlbHtjdHlwZXMtcGFzc2luZy1wb2ludGVyc319CiAKQEAgLTc0NCw2ICs3ODIsNyBAQAogPj4+CiA+Pj4gcHJpbnQgbGVuKE15U3RydWN0KCkucG9pbnRfYXJyYXkpCiA0Cis+Pj4KIFxlbmR7dmVyYmF0aW19CiAKIEluc3RhbmNlcyBhcmUgY3JlYXRlZCBpbiB0aGUgdXN1YWwgd2F5LCBieSBjYWxsaW5nIHRoZSBjbGFzczoKQEAgLTc4MSwyMSArODIwLDMxIEBACiA+Pj4KIFxlbmR7dmVyYmF0aW19CiAKLVhYWCBYWFggTm90IGNvcnJlY3Q6IHVzZSBpbmRleGluZywgbm90IHRoZSBjb250ZW50cyBhdHJpYnV0ZQotCiBQb2ludGVyIGluc3RhbmNlcyBoYXZlIGEgXGNvZGV7Y29udGVudHN9IGF0dHJpYnV0ZSB3aGljaCByZXR1cm5zIHRoZQotY3R5cGVzJyB0eXBlIHBvaW50ZWQgdG8sIHRoZSBcY29kZXtje1xffWludCg0Mil9IGluIHRoZSBhYm92ZSBjYXNlOgorb2JqZWN0IHRvIHdoaWNoIHRoZSBwb2ludGVyIHBvaW50cywgdGhlIFxjb2Rle2l9IG9iamVjdCBhYm92ZToKIFxiZWdpbnt2ZXJiYXRpbX0KID4+PiBwaS5jb250ZW50cwogY19sb25nKDQyKQogPj4+CiBcZW5ke3ZlcmJhdGltfQogCitOb3RlIHRoYXQgXGNvZGV7Y3R5cGVzfSBkb2VzIG5vdCBoYXZlIE9PUiAob3JpZ2luYWwgb2JqZWN0IHJldHVybiksIGl0Citjb25zdHJ1Y3RzIGEgbmV3LCBlcXVpdmFsZW50IG9iamVjdCBlYWNoIHRpbWUgeW91IHJldHJpZXZlIGFuCithdHRyaWJ1dGU6CitcYmVnaW57dmVyYmF0aW19Cis+Pj4gcGkuY29udGVudHMgaXMgaQorRmFsc2UKKz4+PiBwaS5jb250ZW50cyBpcyBwaS5jb250ZW50cworRmFsc2UKKz4+PgorXGVuZHt2ZXJiYXRpbX0KKwogQXNzaWduaW5nIGFub3RoZXIgXGNsYXNze2N7XF99aW50fSBpbnN0YW5jZSB0byB0aGUgcG9pbnRlcidzIGNvbnRlbnRzCiBhdHRyaWJ1dGUgd291bGQgY2F1c2UgdGhlIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIG1lbW9yeSBsb2NhdGlvbgogd2hlcmUgdGhpcyBpcyBzdG9yZWQ6CiBcYmVnaW57dmVyYmF0aW19Ci0+Pj4gcGkuY29udGVudHMgPSBjX2ludCg5OSkKKz4+PiBpID0gY19pbnQoOTkpCis+Pj4gcGkuY29udGVudHMgPSBpCiA+Pj4gcGkuY29udGVudHMKIGNfbG9uZyg5OSkKID4+PgpAQCAtODA4LDI2ICs4NTcsMjEgQEAKID4+PgogXGVuZHt2ZXJiYXRpbX0KIAotWFhYIFdoYXQgaXMgdGhpcz8/PwogQXNzaWduaW5nIHRvIGFuIGludGVnZXIgaW5kZXggY2hhbmdlcyB0aGUgcG9pbnRlZCB0byB2YWx1ZToKIFxiZWdpbnt2ZXJiYXRpbX0KLT4+PiBpMiA9IHBpWzBdCi0+Pj4gaTIKLTk5Cis+Pj4gcHJpbnQgaQorY19sb25nKDk5KQogPj4+IHBpWzBdID0gMjIKLT4+PiBpMgotOTkKKz4+PiBwcmludCBpCitjX2xvbmcoMjIpCiA+Pj4KIFxlbmR7dmVyYmF0aW19CiAKIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGluZGV4ZXMgZGlmZmVyZW50IGZyb20gMCwgYnV0IHlvdSBtdXN0IGtub3cKLXdoYXQgeW91J3JlIGRvaW5nIHdoZW4geW91IHVzZSB0aGlzOiBZb3UgYWNjZXNzIG9yIGNoYW5nZSBhcmJpdHJhcnkKLW1lbW9yeSBsb2NhdGlvbnMgd2hlbiB5b3UgZG8gdGhpcy4gR2VuZXJhbGx5IHlvdSBvbmx5IHVzZSB0aGlzIGZlYXR1cmUKLWlmIHlvdSByZWNlaXZlIGEgcG9pbnRlciBmcm9tIGEgQyBmdW5jdGlvbiwgYW5kIHlvdSBcZW1waHtrbm93fSB0aGF0IHRoZQotcG9pbnRlciBhY3R1YWxseSBwb2ludHMgdG8gYW4gYXJyYXkgaW5zdGVhZCBvZiBhIHNpbmdsZSBpdGVtLgotCi0KLVxzdWJzdWJzZWN0aW9ue1BvaW50ZXIgY2xhc3Nlcy90eXBlc1xsYWJlbHtjdHlwZXMtcG9pbnRlci1jbGFzc2VzdHlwZXN9fQord2hhdCB5b3UncmUgZG9pbmcsIGp1c3QgYXMgaW4gQzogWW91IGNhbiBhY2Nlc3Mgb3IgY2hhbmdlIGFyYml0cmFyeQorbWVtb3J5IGxvY2F0aW9ucy4gR2VuZXJhbGx5IHlvdSBvbmx5IHVzZSB0aGlzIGZlYXR1cmUgaWYgeW91IHJlY2VpdmUgYQorcG9pbnRlciBmcm9tIGEgQyBmdW5jdGlvbiwgYW5kIHlvdSBcZW1waHtrbm93fSB0aGF0IHRoZSBwb2ludGVyIGFjdHVhbGx5Citwb2ludHMgdG8gYW4gYXJyYXkgaW5zdGVhZCBvZiBhIHNpbmdsZSBpdGVtLgogCiBCZWhpbmQgdGhlIHNjZW5lcywgdGhlIFxjb2Rle3BvaW50ZXJ9IGZ1bmN0aW9uIGRvZXMgbW9yZSB0aGFuIHNpbXBseQogY3JlYXRlIHBvaW50ZXIgaW5zdGFuY2VzLCBpdCBoYXMgdG8gY3JlYXRlIHBvaW50ZXIgXGVtcGh7dHlwZXN9IGZpcnN0LgpAQCAtODM3LDcgKzg4MSw3IEBACiA+Pj4gUEkgPSBQT0lOVEVSKGNfaW50KQogPj4+IFBJCiA8Y2xhc3MgJ2N0eXBlcy5MUF9jX2xvbmcnPgotPj4+IFBJKDQyKSAjIGRvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorPj4+IFBJKDQyKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiBUeXBlRXJyb3I6IGV4cGVjdGVkIGNfbG9uZyBpbnN0ZWFkIG9mIGludApAQCAtODQ2LDYgKzg5MCwxMDMgQEAKID4+PgogXGVuZHt2ZXJiYXRpbX0KIAorQ2FsbGluZyB0aGUgcG9pbnRlciB0eXBlIHdpdGhvdXQgYW4gYXJndW1lbnQgY3JlYXRlcyBhIFxjb2Rle05VTEx9Citwb2ludGVyLiAgXGNvZGV7TlVMTH0gcG9pbnRlcnMgaGF2ZSBhIFxjb2Rle0ZhbHNlfSBib29sZWFuIHZhbHVlOgorXGJlZ2lue3ZlcmJhdGltfQorPj4+IG51bGxfcHRyID0gUE9JTlRFUihjX2ludCkoKQorPj4+IHByaW50IGJvb2wobnVsbF9wdHIpCitGYWxzZQorPj4+CitcZW5ke3ZlcmJhdGltfQorCitcY29kZXtjdHlwZXN9IGNoZWNrcyBmb3IgXGNvZGV7TlVMTH0gd2hlbiBkZXJlZmVyZW5jaW5nIHBvaW50ZXJzIChidXQKK2RlcmVmZXJlbmNpbmcgbm9uLVxjb2Rle05VTEx9IHBvaW50ZXJzIHdvdWxkIGNyYXNoIFB5dGhvbik6CitcYmVnaW57dmVyYmF0aW19Cis+Pj4gbnVsbF9wdHJbMF0KK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4uCitWYWx1ZUVycm9yOiBOVUxMIHBvaW50ZXIgYWNjZXNzCis+Pj4KKworPj4+IG51bGxfcHRyWzBdID0gMTIzNAorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLi4KK1ZhbHVlRXJyb3I6IE5VTEwgcG9pbnRlciBhY2Nlc3MKKz4+PgorXGVuZHt2ZXJiYXRpbX0KKworCitcc3Vic3Vic2VjdGlvbntUeXBlIGNvbnZlcnNpb25zXGxhYmVse2N0eXBlcy10eXBlLWNvbnZlcnNpb25zfX0KKworVXN1YWxseSwgY3R5cGVzIGRvZXMgc3RyaWN0IHR5cGUgY2hlY2tpbmcuICBUaGlzIG1lYW5zLCBpZiB5b3UgaGF2ZQorXGNvZGV7UE9JTlRFUihje1xffWludCl9IGluIHRoZSBcbWVtYmVye2FyZ3R5cGVzfSBsaXN0IG9mIGEgZnVuY3Rpb24gb3IgYXMgdGhlCit0eXBlIG9mIGEgbWVtYmVyIGZpZWxkIGluIGEgc3RydWN0dXJlIGRlZmluaXRpb24sIG9ubHkgaW5zdGFuY2VzIG9mCitleGFjdGx5IHRoZSBzYW1lIHR5cGUgYXJlIGFjY2VwdGVkLiAgVGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9ucyB0byB0aGlzCitydWxlLCB3aGVyZSBjdHlwZXMgYWNjZXB0cyBvdGhlciBvYmplY3RzLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gcGFzcworY29tcGF0aWJsZSBhcnJheSBpbnN0YW5jZXMgaW5zdGVhZCBvZiBwb2ludGVyIHR5cGVzLiAgU28sIGZvcgorXGNvZGV7UE9JTlRFUihje1xffWludCl9LCBjdHlwZXMgYWNjZXB0cyBhbiBhcnJheSBvZiBje1xffWludDoKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiBjbGFzcyBCYXIoU3RydWN0dXJlKToKKy4uLiAgICAgX2ZpZWxkc18gPSBbKCJjb3VudCIsIGNfaW50KSwgKCJ2YWx1ZXMiLCBQT0lOVEVSKGNfaW50KSldCisuLi4KKz4+PiBiYXIgPSBCYXIoKQorPj4+IGJhci52YWx1ZXMgPSAoY19pbnQgKiAzKSgxLCAyLCAzKQorPj4+IGJhci5jb3VudCA9IDMKKz4+PiBmb3IgaSBpbiByYW5nZShiYXIuY291bnQpOgorLi4uICAgICBwcmludCBiYXIudmFsdWVzW2ldCisuLi4KKzEKKzIKKzMKKz4+PgorXGVuZHt2ZXJiYXRpbX0KKworVG8gc2V0IGEgUE9JTlRFUiB0eXBlIGZpZWxkIHRvIFxjb2Rle05VTEx9LCB5b3UgY2FuIGFzc2lnbiBcY29kZXtOb25lfToKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiBiYXIudmFsdWVzID0gTm9uZQorPj4+CitcZW5ke3ZlcmJhdGltfQorCitYWFggbGlzdCBvdGhlciBjb252ZXJzaW9ucy4uLgorCitTb21ldGltZXMgeW91IGhhdmUgaW5zdGFuY2VzIG9mIGluY29tcGF0aWJsZSB0eXBlcy4gIEluIFxjb2Rle0N9LCB5b3UgY2FuCitjYXN0IG9uZSB0eXBlIGludG8gYW5vdGhlciB0eXBlLiAgXGNvZGV7Y3R5cGVzfSBwcm92aWRlcyBhIFxjb2Rle2Nhc3R9CitmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuICBUaGUgXGNvZGV7QmFyfSBzdHJ1Y3R1cmUKK2RlZmluZWQgYWJvdmUgYWNjZXB0cyBcY29kZXtQT0lOVEVSKGN7XF99aW50KX0gcG9pbnRlcnMgb3IgXGNsYXNze2N7XF99aW50fSBhcnJheXMKK2ZvciBpdHMgXGNvZGV7dmFsdWVzfSBmaWVsZCwgYnV0IG5vdCBpbnN0YW5jZXMgb2Ygb3RoZXIgdHlwZXM6CitcYmVnaW57dmVyYmF0aW19Cis+Pj4gYmFyLnZhbHVlcyA9IChjX2J5dGUgKiA0KSgpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KK1R5cGVFcnJvcjogaW5jb21wYXRpYmxlIHR5cGVzLCBjX2J5dGVfQXJyYXlfNCBpbnN0YW5jZSBpbnN0ZWFkIG9mIExQX2NfbG9uZyBpbnN0YW5jZQorPj4+CitcZW5ke3ZlcmJhdGltfQorCitGb3IgdGhlc2UgY2FzZXMsIHRoZSBcY29kZXtjYXN0fSBmdW5jdGlvbiBpcyBoYW5keS4KKworVGhlIFxjb2Rle2Nhc3R9IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNhc3QgYSBjdHlwZXMgaW5zdGFuY2UgaW50byBhCitwb2ludGVyIHRvIGEgZGlmZmVyZW50IGN0eXBlcyBkYXRhIHR5cGUuICBcY29kZXtjYXN0fSB0YWtlcyB0d28KK3BhcmFtZXRlcnMsIGEgY3R5cGVzIG9iamVjdCB0aGF0IGlzIG9yIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBwb2ludGVyCitvZiBzb21lIGtpbmQsIGFuZCBhIGN0eXBlcyBwb2ludGVyIHR5cGUuICBJdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mCit0aGUgc2Vjb25kIGFyZ3VtZW50LCB3aGljaCByZWZlcmVuY2VzIHRoZSBzYW1lIG1lbW9yeSBibG9jayBhcyB0aGUKK2ZpcnN0IGFyZ3VtZW50OgorXGJlZ2lue3ZlcmJhdGltfQorPj4+IGEgPSAoY19ieXRlICogNCkoKQorPj4+IGNhc3QoYSwgUE9JTlRFUihjX2ludCkpCis8Y3R5cGVzLkxQX2NfbG9uZyBvYmplY3QgYXQgLi4uPgorPj4+CitcZW5ke3ZlcmJhdGltfQorCitTbywgXGNvZGV7Y2FzdH0gY2FuIGJlIHVzZWQgdG8gYXNzaWduIHRvIHRoZSBcY29kZXt2YWx1ZXN9IGZpZWxkIG9mIFxjb2Rle0Jhcn0KK3RoZSBzdHJ1Y3R1cmU6CitcYmVnaW57dmVyYmF0aW19Cis+Pj4gYmFyID0gQmFyKCkKKz4+PiBiYXIudmFsdWVzID0gY2FzdCgoY19ieXRlICogNCkoKSwgUE9JTlRFUihjX2ludCkpCis+Pj4gcHJpbnQgYmFyLnZhbHVlc1swXQorMAorPj4+CitcZW5ke3ZlcmJhdGltfQorCiAKIFxzdWJzdWJzZWN0aW9ue0luY29tcGxldGUgVHlwZXNcbGFiZWx7Y3R5cGVzLWluY29tcGxldGUtdHlwZXN9fQogCkBAIC0xMDU5LDcgKzEyMDAsMTAgQEAKID4+PgogXGVuZHt2ZXJiYXRpbX0KIAotU28sIG91ciBhcnJheSBzb3J0ZWQgbm93OgorSXQgaXMgcXVpdGUgaW50ZXJlc3RpbmcgdG8gc2VlIHRoYXQgdGhlIFdpbmRvd3MgXGZ1bmN0aW9ue3Fzb3J0fSBmdW5jdGlvbgorbmVlZHMgbW9yZSBjb21wYXJpc29ucyB0aGFuIHRoZSBsaW51eCB2ZXJzaW9uIQorCitBcyB3ZSBjYW4gZWFzaWx5IGNoZWNrLCBvdXIgYXJyYXkgc29ydGVkIG5vdzoKIFxiZWdpbnt2ZXJiYXRpbX0KID4+PiBmb3IgaSBpbiBpYTogcHJpbnQgaSwKIC4uLgpAQCAtMTA3MCwxNCArMTIxNCwxNCBAQAogXHRleHRiZntJbXBvcnRhbnQgbm90ZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb25zOn0KIAogTWFrZSBzdXJlIHlvdSBrZWVwIHJlZmVyZW5jZXMgdG8gQ0ZVTkNUWVBFIG9iamVjdHMgYXMgbG9uZyBhcyB0aGV5IGFyZQotdXNlZCBmcm9tIEMgY29kZS4gY3R5cGVzIGRvZXNuJ3QsIGFuZCBpZiB5b3UgZG9uJ3QsIHRoZXkgbWF5IGJlCit1c2VkIGZyb20gQyBjb2RlLiBcY29kZXtjdHlwZXN9IGRvZXNuJ3QsIGFuZCBpZiB5b3UgZG9uJ3QsIHRoZXkgbWF5IGJlCiBnYXJiYWdlIGNvbGxlY3RlZCwgY3Jhc2hpbmcgeW91ciBwcm9ncmFtIHdoZW4gYSBjYWxsYmFjayBpcyBtYWRlLgogCiAKIFxzdWJzdWJzZWN0aW9ue0FjY2Vzc2luZyB2YWx1ZXMgZXhwb3J0ZWQgZnJvbSBkbGxzXGxhYmVse2N0eXBlcy1hY2Nlc3NpbmctdmFsdWVzLWV4cG9ydGVkLWZyb20tZGxsc319CiAKIFNvbWV0aW1lcywgYSBkbGwgbm90IG9ubHkgZXhwb3J0cyBmdW5jdGlvbnMsIGl0IGFsc28gZXhwb3J0cwotdmFsdWVzLiBBbiBleGFtcGxlIGluIHRoZSBQeXRob24gbGlicmFyeSBpdHNlbGYgaXMgdGhlCit2YXJpYWJsZXMuIEFuIGV4YW1wbGUgaW4gdGhlIFB5dGhvbiBsaWJyYXJ5IGl0c2VsZiBpcyB0aGUKIFxjb2Rle1B5e1xffU9wdGltaXplRmxhZ30sIGFuIGludGVnZXIgc2V0IHRvIDAsIDEsIG9yIDIsIGRlcGVuZGluZyBvbiB0aGUKIFxwcm9ncmFtb3B0ey1PfSBvciBccHJvZ3JhbW9wdHstT099IGZsYWcgZ2l2ZW4gb24gc3RhcnR1cC4KIApAQCAtMTE0OCw5ICsxMjkyLDYgQEAKIChpbmRpY2F0ZWQgYnkgdGhlIG5lZ2F0aXZlIHNpemUgbWVtYmVyKSBpcyBub3Qgd2VsbGtub3duLCBpdCBpcyBvbmx5CiB1c2VkIGZvciB0ZXN0aW5nLiBUcnkgaXQgb3V0IHdpdGggXGNvZGV7aW1wb3J0IHtcX317XF99aGVsbG97XF99e1xffX0gZm9yIGV4YW1wbGUuCiAKLVhYWCBEZXNjcmliZSBob3cgdG8gYWNjZXNzIHRoZSBcdmFye2NvZGV9IG1lbWJlciBmaWVsZHMsIHdoaWNoIGNvbnRhaW4KLXRoZSBieXRlIGNvZGUgZm9yIHRoZSBtb2R1bGVzLgotCiAKIFxzdWJzdWJzZWN0aW9ue1N1cnByaXNlc1xsYWJlbHtjdHlwZXMtc3VycHJpc2VzfX0KIApAQCAtMTE3NSw2ICsxMzE2LDcgQEAKID4+PiByYy5hLCByYy5iID0gcmMuYiwgcmMuYQogPj4+IHByaW50IHJjLmEueCwgcmMuYS55LCByYy5iLngsIHJjLmIueQogMyA0IDMgNAorPj4+CiBcZW5ke3ZlcmJhdGltfQogCiBIbS4gV2UgY2VydGFpbmx5IGV4cGVjdGVkIHRoZSBsYXN0IHN0YXRlbWVudCB0byBwcmludCBcY29kZXszIDQgMSAyfS4KQEAgLTExODQsNiArMTMyNiw3IEBACiA+Pj4gdGVtcDAsIHRlbXAxID0gcmMuYiwgcmMuYQogPj4+IHJjLmEgPSB0ZW1wMAogPj4+IHJjLmIgPSB0ZW1wMQorPj4+CiBcZW5ke3ZlcmJhdGltfQogCiBOb3RlIHRoYXQgXGNvZGV7dGVtcDB9IGFuZCBcY29kZXt0ZW1wMX0gYXJlIG9iamVjdHMgc3RpbGwgdXNpbmcgdGhlIGludGVybmFsCkBAIC0xMjE0LDYgKzEzNTcsNTEgQEAKIEFjY2Vzc2luZyB0aGUgY29udGVudHMgYWdhaW4gY29uc3RydWN0cyBhIG5ldyBQeXRob24gZWFjaCB0aW1lIQogCiAKK1xzdWJzdWJzZWN0aW9ue1ZhcmlhYmxlLXNpemVkIGRhdGEgdHlwZXNcbGFiZWx7Y3R5cGVzLXZhcmlhYmxlLXNpemVkLWRhdGEtdHlwZXN9fQorCitcY29kZXtjdHlwZXN9IHByb3ZpZGVzIHNvbWUgc3VwcG9ydCBmb3IgdmFyaWFibGUtc2l6ZWQgYXJyYXlzIGFuZAorc3RydWN0dXJlcyAodGhpcyB3YXMgYWRkZWQgaW4gdmVyc2lvbiAwLjkuOS43KS4KKworVGhlIFxjb2Rle3Jlc2l6ZX0gZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVzaXplIHRoZSBtZW1vcnkgYnVmZmVyIG9mIGFuCitleGlzdGluZyBjdHlwZXMgb2JqZWN0LiAgVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBvYmplY3QgYXMgZmlyc3QKK2FyZ3VtZW50LCBhbmQgdGhlIHJlcXVlc3RlZCBzaXplIGluIGJ5dGVzIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuICBUaGUKK21lbW9yeSBibG9jayBjYW5ub3QgYmUgbWFkZSBzbWFsbGVyIHRoYW4gdGhlIG5hdHVyYWwgbWVtb3J5IGJsb2NrCitzcGVjaWZpZWQgYnkgdGhlIG9iamVjdHMgdHlwZSwgYSBcY29kZXtWYWx1ZUVycm9yfSBpcyByYWlzZWQgaWYgdGhpcyBpcwordHJpZWQ6CitcYmVnaW57dmVyYmF0aW19Cis+Pj4gc2hvcnRfYXJyYXkgPSAoY19zaG9ydCAqIDQpKCkKKz4+PiBwcmludCBzaXplb2Yoc2hvcnRfYXJyYXkpCis4Cis+Pj4gcmVzaXplKHNob3J0X2FycmF5LCA0KQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorVmFsdWVFcnJvcjogbWluaW11bSBzaXplIGlzIDgKKz4+PiByZXNpemUoc2hvcnRfYXJyYXksIDMyKQorPj4+IHNpemVvZihzaG9ydF9hcnJheSkKKzMyCis+Pj4gc2l6ZW9mKHR5cGUoc2hvcnRfYXJyYXkpKQorOAorPj4+CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIGlzIG5pY2UgYW5kIGZpbmUsIGJ1dCBob3cgd291bGQgb25lIGFjY2VzcyB0aGUgYWRkaXRpb25hbAorZWxlbWVudHMgY29udGFpbmVkIGluIHRoaXMgYXJyYXk/ICBTaW5jZSB0aGUgdHlwZSBzdGlsbCBvbmx5IGtub3dzCithYm91dCA0IGVsZW1lbnRzLCB3ZSBnZXQgZXJyb3JzIGFjY2Vzc2luZyBvdGhlciBlbGVtZW50czoKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiBzaG9ydF9hcnJheVs6XQorWzAsIDAsIDAsIDBdCis+Pj4gc2hvcnRfYXJyYXlbN10KK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KK0luZGV4RXJyb3I6IGludmFsaWQgaW5kZXgKKz4+PgorXGVuZHt2ZXJiYXRpbX0KKworQW5vdGhlciB3YXkgdG8gdXNlIHZhcmlhYmxlLXNpemVkIGRhdGEgdHlwZXMgd2l0aCBcY29kZXtjdHlwZXN9IGlzIHRvIHVzZQordGhlIGR5bmFtaWMgbmF0dXJlIG9mIFB5dGhvbiwgYW5kIChyZS0pZGVmaW5lIHRoZSBkYXRhIHR5cGUgYWZ0ZXIgdGhlCityZXF1aXJlZCBzaXplIGlzIGFscmVhZHkga25vd24sIG9uIGEgY2FzZSBieSBjYXNlIGJhc2lzLgorCisKIFxzdWJzdWJzZWN0aW9ue0J1Z3MsIFRvRG8gYW5kIG5vbi1pbXBsZW1lbnRlZCB0aGluZ3NcbGFiZWx7Y3R5cGVzLWJ1Z3MtdG9kby1ub24taW1wbGVtZW50ZWQtdGhpbmdzfX0KIAogRW51bWVyYXRpb24gdHlwZXMgYXJlIG5vdCBpbXBsZW1lbnRlZC4gWW91IGNhbiBkbyBpdCBlYXNpbHkgeW91cnNlbGYsCkBAIC0xMjI0LDMgKzE0MTIsMTAxNCBAQAogJSBjb21waWxlLWNvbW1hbmQ6ICJtYWtlLmJhdCIKICUgRW5kOiAKIAorCitcc3Vic2VjdGlvbntjdHlwZXMgcmVmZXJlbmNlXGxhYmVse2N0eXBlcy1jdHlwZXMtcmVmZXJlbmNlfX0KKworCitcc3Vic3Vic2VjdGlvbntGaW5kaW5nIHNoYXJlZCBsaWJyYXJpZXNcbGFiZWx7Y3R5cGVzLWZpbmRpbmctc2hhcmVkLWxpYnJhcmllc319CisKK1doZW4gcHJvZ3JhbW1pbmcgaW4gYSBjb21waWxlZCBsYW5ndWFnZSwgc2hhcmVkIGxpYnJhcmllcyBhcmUgYWNjZXNzZWQKK3doZW4gY29tcGlsaW5nL2xpbmtpbmcgYSBwcm9ncmFtLCBhbmQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBydW4uCisKK1RoZSBwdXJwb3NlIG9mIHRoZSBcY29kZXtmaW5ke1xffWxpYnJhcnl9IGZ1bmN0aW9uIGlzIHRvIGxvY2F0ZSBhIGxpYnJhcnkgaW4KK2Egd2F5IHNpbWlsYXIgdG8gd2hhdCB0aGUgY29tcGlsZXIgZG9lcyAob24gcGxhdGZvcm1zIHdpdGggc2V2ZXJhbAordmVyc2lvbnMgb2YgYSBzaGFyZWQgbGlicmFyeSB0aGUgbW9zdCByZWNlbnQgc2hvdWxkIGJlIGxvYWRlZCksIHdoaWxlCit0aGUgY3R5cGVzIGxpYnJhcnkgbG9hZGVycyBhY3QgbGlrZSB3aGVuIGEgcHJvZ3JhbSBpcyBydW4sIGFuZCBjYWxsCit0aGUgcnVudGltZSBsb2FkZXIgZGlyZWN0bHkuCisKK1RoZSBcY29kZXtjdHlwZXMudXRpbH0gbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGhlbHAgdG8KK2RldGVybWluZSB0aGUgbGlicmFyeSB0byBsb2FkLgorCitcYmVnaW57ZGF0YWRlc2NuaX17ZmluZF9saWJyYXJ5KG5hbWUpfQorVHJ5IHRvIGZpbmQgYSBsaWJyYXJ5IGFuZCByZXR1cm4gYSBwYXRobmFtZS4gIFx2YXJ7bmFtZX0gaXMgdGhlCitsaWJyYXJ5IG5hbWUgd2l0aG91dCBhbnkgcHJlZml4IGxpa2UgXHZhcntsaWJ9LCBzdWZmaXggbGlrZSBcY29kZXsuc299LAorXGNvZGV7LmR5bGlifSBvciB2ZXJzaW9uIG51bWJlciAodGhpcyBpcyB0aGUgZm9ybSB1c2VkIGZvciB0aGUgcG9zaXgKK2xpbmtlciBvcHRpb24gXHByb2dyYW1vcHR7LWx9KS4gIElmIG5vIGxpYnJhcnkgY2FuIGJlIGZvdW5kLCByZXR1cm5zCitcY29kZXtOb25lfS4KK1xlbmR7ZGF0YWRlc2NuaX0KKworVGhlIGV4YWN0IGZ1bmN0aW9uYWxpdHkgaXMgc3lzdGVtIGRlcGVuZGVuZC4KKworT24gTGludXgsIFxjb2Rle2ZpbmR7XF99bGlicmFyeX0gdHJpZXMgdG8gcnVuIGV4dGVybmFsIHByb2dyYW1zCisoL3NiaW4vbGRjb25maWcsIGdjYywgYW5kIG9iamR1bXApIHRvIGZpbmQgdGhlIGxpYnJhcnkgZmlsZS4gIEl0CityZXR1cm5zIHRoZSBmaWxlbmFtZSBvZiB0aGUgbGlicmFyeSBmaWxlLiAgSGVyZSBhcmUgc29uZSBleGFtcGxlczoKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKKz4+PiBmaW5kX2xpYnJhcnkoIm0iKQorJ2xpYm0uc28uNicKKz4+PiBmaW5kX2xpYnJhcnkoImMiKQorJ2xpYmMuc28uNicKKz4+PiBmaW5kX2xpYnJhcnkoImJ6MiIpCisnbGliYnoyLnNvLjEuMCcKKz4+PgorXGVuZHt2ZXJiYXRpbX0KKworT24gT1MgWCwgXGNvZGV7ZmluZHtcX31saWJyYXJ5fSB0cmllcyBzZXZlcmFsIHByZWRlZmluZWQgbmFtaW5nIHNjaGVtZXMgYW5kCitwYXRocyB0byBsb2NhdGUgdGhlIGxpYnJhcnksIGFuZCByZXR1cm5zIGEgZnVsbCBwYXRobmFtZSBpZiBzdWNjZXNzZnVsbDoKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKKz4+PiBmaW5kX2xpYnJhcnkoImMiKQorJy91c3IvbGliL2xpYmMuZHlsaWInCis+Pj4gZmluZF9saWJyYXJ5KCJtIikKKycvdXNyL2xpYi9saWJtLmR5bGliJworPj4+IGZpbmRfbGlicmFyeSgiYnoyIikKKycvdXNyL2xpYi9saWJiejIuZHlsaWInCis+Pj4gZmluZF9saWJyYXJ5KCJBR0wiKQorJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FHTC5mcmFtZXdvcmsvQUdMJworPj4+CitcZW5ke3ZlcmJhdGltfQorCitPbiBXaW5kb3dzLCBcY29kZXtmaW5ke1xffWxpYnJhcnl9IHNlYXJjaGVzIGFsb25nIHRoZSBzeXN0ZW0gc2VhcmNoIHBhdGgsCithbmQgcmV0dXJucyB0aGUgZnVsbCBwYXRobmFtZSwgYnV0IHNpbmNlIHRoZXJlIGlzIG5vIHByZWRlZmluZWQgbmFtaW5nCitzY2hlbWUgYSBjYWxsIGxpa2UgXGNvZGV7ZmluZHtcX31saWJyYXJ5KCJjIil9IHdpbGwgZmFpbCBhbmQgcmV0dXJuCitcY29kZXtOb25lfS4KKworSWYgd3JhcHBpbmcgYSBzaGFyZWQgbGlicmFyeSB3aXRoIFxjb2Rle2N0eXBlc30sIGl0IFxlbXBoe21heX0gYmUgYmV0dGVyIHRvCitkZXRlcm1pbmUgdGhlIHNoYXJlZCBsaWJyYXJ5IG5hbWUgYXQgZGV2ZWxvcG1lbnQgdHlwZSwgYW5kIGhhcmRjb2RlCit0aGF0IGludG8gdGhlIHdyYXBwZXIgbW9kdWxlIGluc3RlYWQgb2YgdXNpbmcgXGNvZGV7ZmluZHtcX31saWJyYXJ5fSB0bworbG9jYXRlIHRoZSBsaWJyYXJ5IGF0IHJ1bnRpbWUuCisKKworXHN1YnN1YnNlY3Rpb257TG9hZGluZyBzaGFyZWQgbGlicmFyaWVzXGxhYmVse2N0eXBlcy1sb2FkaW5nLXNoYXJlZC1saWJyYXJpZXN9fQorCitUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGxvYWRlZCBzaGFyZWQgbGlicmFyaWVzIGludG8gdGhlIFB5dGhvbgorcHJvY2Vzcy4gIE9uZSB3YXkgaXMgdG8gaW5zdGFudGlhdGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKKworXGJlZ2lue2NsYXNzZGVzY317Q0RMTH17bmFtZSwgbW9kZT1ERUZBVUxUX01PREUsIGhhbmRsZT1Ob25lfQorSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50IGxvYWRlZCBzaGFyZWQgbGlicmFyaWVzLgorRnVuY3Rpb25zIGluIHRoZXNlIGxpYnJhcmllcyB1c2UgdGhlIHN0YW5kYXJkIEMgY2FsbGluZworY29udmVudGlvbiwgYW5kIGFyZSBhc3N1bWVkIHRvIHJldHVybiBcY29kZXtpbnR9LgorXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbntjbGFzc2Rlc2N9e09sZURMTH17bmFtZSwgbW9kZT1ERUZBVUxUX01PREUsIGhhbmRsZT1Ob25lfQorV2luZG93cyBvbmx5OiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgbG9hZGVkIHNoYXJlZAorbGlicmFyaWVzLCBmdW5jdGlvbnMgaW4gdGhlc2UgbGlicmFyaWVzIHVzZSB0aGUgXGNvZGV7c3RkY2FsbH0KK2NhbGxpbmcgY29udmVudGlvbiwgYW5kIGFyZSBhc3N1bWVkIHRvIHJldHVybiB0aGUgd2luZG93cyBzcGVjaWZpYworXGNsYXNze0hSRVNVTFR9IGNvZGUuICBcY2xhc3N7SFJFU1VMVH0gdmFsdWVzIGNvbnRhaW4gaW5mb3JtYXRpb24KK3NwZWNpZnlpbmcgd2hldGhlciB0aGUgZnVuY3Rpb24gY2FsbCBmYWlsZWQgb3Igc3VjY2VlZGVkLCB0b2dldGhlcgord2l0aCBhZGRpdGlvbmFsIGVycm9yIGNvZGUuICBJZiB0aGUgcmV0dXJuIHZhbHVlIHNpZ25hbHMgYQorZmFpbHVyZSwgYW4gXGNsYXNze1dpbmRvd3NFcnJvcn0gaXMgYXV0b21hdGljYWxseSByYWlzZWQuCitcZW5ke2NsYXNzZGVzY30KKworXGJlZ2lue2NsYXNzZGVzY317V2luRExMfXtuYW1lLCBtb2RlPURFRkFVTFRfTU9ERSwgaGFuZGxlPU5vbmV9CitXaW5kb3dzIG9ubHk6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBsb2FkZWQgc2hhcmVkCitsaWJyYXJpZXMsIGZ1bmN0aW9ucyBpbiB0aGVzZSBsaWJyYXJpZXMgdXNlIHRoZSBcY29kZXtzdGRjYWxsfQorY2FsbGluZyBjb252ZW50aW9uLCBhbmQgYXJlIGFzc3VtZWQgdG8gcmV0dXJuIFxjb2Rle2ludH0gYnkgZGVmYXVsdC4KKworT24gV2luZG93cyBDRSBvbmx5IHRoZSBzdGFuZGFyZCBjYWxsaW5nIGNvbnZlbnRpb24gaXMgdXNlZCwgZm9yCitjb252ZW5pZW5jZSB0aGUgXGNsYXNze1dpbkRMTH0gYW5kIFxjbGFzc3tPbGVETEx9IHVzZSB0aGUgc3RhbmRhcmQgY2FsbGluZworY29udmVudGlvbiBvbiB0aGlzIHBsYXRmb3JtLgorXGVuZHtjbGFzc2Rlc2N9CisKK1RoZSBQeXRob24gR0lMIGlzIHJlbGVhc2VkIGJlZm9yZSBjYWxsaW5nIGFueSBmdW5jdGlvbiBleHBvcnRlZCBieQordGhlc2UgbGlicmFyaWVzLCBhbmQgcmVhcXVpcmVkIGFmdGVyd2FyZHMuCisKK1xiZWdpbntjbGFzc2Rlc2N9e1B5RExMfXtuYW1lLCBtb2RlPURFRkFVTFRfTU9ERSwgaGFuZGxlPU5vbmV9CitJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBiZWhhdmUgbGlrZSBcY2xhc3N7Q0RMTH0gaW5zdGFuY2VzLCBleGNlcHQKK3RoYXQgdGhlIFB5dGhvbiBHSUwgaXMgXGVtcGh7bm90fSByZWxlYXNlZCBkdXJpbmcgdGhlIGZ1bmN0aW9uIGNhbGwsCithbmQgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGV4ZWN1dGlvbiB0aGUgUHl0aG9uIGVycm9yIGZsYWcgaXMgY2hlY2tlZC4KK0lmIHRoZSBlcnJvciBmbGFnIGlzIHNldCwgYSBQeXRob24gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworVGh1cywgdGhpcyBpcyBvbmx5IHVzZWZ1bCB0byBjYWxsIFB5dGhvbiBDIGFwaSBmdW5jdGlvbnMgZGlyZWN0bHkuCitcZW5ke2NsYXNzZGVzY30KKworQWxsIHRoZXNlIGNsYXNzZXMgY2FuIGJlIGluc3RhbnRpYXRlZCBieSBjYWxsaW5nIHRoZW0gd2l0aCBhdCBsZWFzdAorb25lIGFyZ3VtZW50LCB0aGUgcGF0aG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LiAgSWYgeW91IGhhdmUgYW4KK2V4aXN0aW5nIGhhbmRsZSB0byBhbiBhbHJlYWR5IGxvYWRlZCBzaGFyZCBsaWJyYXJ5LCBpdCBjYW4gYmUgcGFzc2VkCithcyB0aGUgXGNvZGV7aGFuZGxlfSBuYW1lZCBwYXJhbWV0ZXIsIG90aGVyd2lzZSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybXMKK1xjb2Rle2Rsb3Blbn0gb3IgXG1ldGhvZHtMb2FkTGlicmFyeX0gZnVuY3Rpb24gaXMgdXNlZCB0byBsb2FkIHRoZSBsaWJyYXJ5CitpbnRvIHRoZSBwcm9jZXNzLCBhbmQgdG8gZ2V0IGEgaGFuZGxlIHRvIGl0LgorCitUaGUgXHZhcnttb2RlfSBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBob3cgdGhlIGxpYnJhcnkgaXMKK2xvYWRlZC4gIEZvciBkZXRhaWxzLCBjb25zdWx0IHRoZSBcY29kZXtkbG9wZW4oMyl9IG1hbnBhZ2UsIG9uIFdpbmRvd3MsCitcdmFye21vZGV9IGlzIGlnbm9yZWQuCisKK1xiZWdpbntkYXRhZGVzY25pfXtSVExEX0dMT0JBTH0KK0ZsYWcgdG8gdXNlIGFzIFx2YXJ7bW9kZX0gcGFyYW1ldGVyLiAgT24gcGxhdGZvcm1zIHdoZXJlIHRoaXMgZmxhZworaXMgbm90IGF2YWlsYWJsZSwgaXQgaXMgZGVmaW5lZCBhcyB0aGUgaW50ZWdlciB6ZXJvLgorXGVuZHtkYXRhZGVzY25pfQorCitcYmVnaW57ZGF0YWRlc2NuaX17UlRMRF9MT0NBTH0KK0ZsYWcgdG8gdXNlIGFzIFx2YXJ7bW9kZX0gcGFyYW1ldGVyLiAgT24gcGxhdGZvcm1zIHdoZXJlIHRoaXMgaXMgbm90CithdmFpbGFibGUsIGl0IGlzIHRoZSBzYW1lIGFzIFx2YXJ7UlRMRHtcX31HTE9CQUx9LgorXGVuZHtkYXRhZGVzY25pfQorCitcYmVnaW57ZGF0YWRlc2NuaX17REVGQVVMVF9NT0RFfQorVGhlIGRlZmF1bHQgbW9kZSB3aGljaCBpcyB1c2VkIHRvIGxvYWQgc2hhcmVkIGxpYnJhcmllcy4gIE9uIE9TWAorMTAuMywgdGhpcyBpcyBcdmFye1JUTER7XF99R0xPQkFMfSwgb3RoZXJ3aXNlIGl0IGlzIHRoZSBzYW1lIGFzCitcdmFye1JUTER7XF99TE9DQUx9LgorXGVuZHtkYXRhZGVzY25pfQorCitJbnN0YW5jZXMgb2YgdGhlc2UgY2xhc3NlcyBoYXZlIG5vIHB1YmxpYyBtZXRob2RzLCBob3dldmVyCitcbWV0aG9ke3tcX317XF99Z2V0YXR0cntcX317XF99fSBhbmQgXG1ldGhvZHt7XF99e1xffWdldGl0ZW17XF99e1xffX0gaGF2ZSBzcGVjaWFsIGJlaGF2aW91cjogZnVuY3Rpb25zCitleHBvcnRlZCBieSB0aGUgc2hhcmVkIGxpYnJhcnkgY2FuIGJlIGFjY2Vzc2VkIGFzIGF0dHJpYnV0ZXMgb2YgYnkKK2luZGV4LiAgUGxlYXNlIG5vdGUgdGhhdCBib3RoIFxtZXRob2R7e1xffXtcX31nZXRhdHRye1xffXtcX319IGFuZCBcbWV0aG9ke3tcX317XF99Z2V0aXRlbXtcX317XF99fQorY2FjaGUgdGhlaXIgcmVzdWx0LCBzbyBjYWxsaW5nIHRoZW0gcmVwZWF0ZWRseSByZXR1cm5zIHRoZSBzYW1lIG9iamVjdAorZWFjaCB0aW1lLgorCitUaGUgZm9sbG93aW5nIHB1YmxpYyBhdHRyaWJ1dGVzIGFyZSBhdmFpbGFibGUsIHRoZWlyIG5hbWUgc3RhcnRzIHdpdGgKK2FuIHVuZGVyc2NvcmUgdG8gbm90IGNsYXNoIHdpdGggZXhwb3J0ZWQgZnVuY3Rpb24gbmFtZXM6CisKK1xiZWdpbnttZW1iZXJkZXNjfXtfaGFuZGxlfQorVGhlIHN5c3RlbSBoYW5kbGUgdXNlZCB0byBhY2Nlc3MgdGhlIGxpYnJhcnkuCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfXtfbmFtZX0KK1RoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHBhc3NlZCBpbiB0aGUgY29udHJ1Y3Rvci4KK1xlbmR7bWVtYmVyZGVzY30KKworU2hhcmVkIGxpYnJhcmllcyBjYW4gYWxzbyBiZSBsb2FkZWQgYnkgdXNpbmcgb25lIG9mIHRoZSBwcmVmYWJyaWNhdGVkCitvYmplY3RzLCB3aGljaCBhcmUgaW5zdGFuY2VzIG9mIHRoZSBcY2xhc3N7TGlicmFyeUxvYWRlcn0gY2xhc3MsIGVpdGhlciBieQorY2FsbGluZyB0aGUgXG1ldGhvZHtMb2FkTGlicmFyeX0gbWV0aG9kLCBvciBieSByZXRyaWV2aW5nIHRoZSBsaWJyYXJ5IGFzCithdHRyaWJ1dGUgb2YgdGhlIGxvYWRlciBpbnN0YW5jZS4KKworXGJlZ2lue2NsYXNzZGVzY317TGlicmFyeUxvYWRlcn17ZGxsdHlwZX0KK0NsYXNzIHdoaWNoIGxvYWRzIHNoYXJlZCBsaWJyYXJpZXMuICBcY29kZXtkbGx0eXBlfSBzaG91bGQgYmUgb25lCitvZiB0aGUgXGNsYXNze0NETEx9LCBcY2xhc3N7UHlETEx9LCBcY2xhc3N7V2luRExMfSwgb3IgXGNsYXNze09sZURMTH0gdHlwZXMuCisKK1xtZXRob2R7e1xffXtcX31nZXRhdHRye1xffXtcX319IGhhcyBzcGVjaWFsIGJlaGF2aW91cjogSXQgYWxsb3dzIHRvIGxvYWQgYSBzaGFyZWQKK2xpYnJhcnkgYnkgYWNjZXNzaW5nIGl0IGFzIGF0dHJpYnV0ZSBvZiBhIGxpYnJhcnkgbG9hZGVyCitpbnN0YW5jZS4gIFRoZSByZXN1bHQgaXMgY2FjaGVkLCBzbyByZXBlYXRlZCBhdHRyaWJ1dGUgYWNjZXNzZXMKK3JldHVybiB0aGUgc2FtZSBsaWJyYXJ5IGVhY2ggdGltZS4KK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317TG9hZExpYnJhcnl9e25hbWV9CitMb2FkIGEgc2hhcmVkIGxpYnJhcnkgaW50byB0aGUgcHJvY2VzcyBhbmQgcmV0dXJuIGl0LiAgVGhpcyBtZXRob2QKK2Fsd2F5cyByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBsaWJyYXJ5LgorXGVuZHttZXRob2RkZXNjfQorCitUaGVzZSBwcmVmYWJyaWNhdGVkIGxpYnJhcnkgbG9hZGVycyBhcmUgYXZhaWxhYmxlOgorCitcYmVnaW57ZGF0YWRlc2NuaX17Y2RsbH0KK0NyZWF0ZXMgXGNsYXNze0NETEx9IGluc3RhbmNlcy4KK1xlbmR7ZGF0YWRlc2NuaX0KKworXGJlZ2lue2RhdGFkZXNjbml9e3dpbmRsbH0KK1dpbmRvd3Mgb25seTogQ3JlYXRlcyBcY2xhc3N7V2luRExMfSBpbnN0YW5jZXMuCitcZW5ke2RhdGFkZXNjbml9CisKK1xiZWdpbntkYXRhZGVzY25pfXtvbGVkbGx9CitXaW5kb3dzIG9ubHk6IENyZWF0ZXMgXGNsYXNze09sZURMTH0gaW5zdGFuY2VzLgorXGVuZHtkYXRhZGVzY25pfQorCitcYmVnaW57ZGF0YWRlc2NuaX17cHlkbGx9CitDcmVhdGVzIFxjbGFzc3tQeURMTH0gaW5zdGFuY2VzLgorXGVuZHtkYXRhZGVzY25pfQorCitGb3IgYWNjZXNzaW5nIHRoZSBDIFB5dGhvbiBhcGkgZGlyZWN0bHksIGEgcmVhZHktdG8tdXNlIFB5dGhvbiBzaGFyZWQKK2xpYnJhcnkgb2JqZWN0IGlzIGF2YWlsYWJsZToKKworXGJlZ2lue2RhdGFkZXNjbml9e3B5dGhvbmFwaX0KK0FuIGluc3RhbmNlIG9mIFxjbGFzc3tQeURMTH0gdGhhdCBleHBvc2VzIFB5dGhvbiBDIGFwaSBmdW5jdGlvbnMgYXMKK2F0dHJpYnV0ZXMuICBOb3RlIHRoYXQgYWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYXNzdW1lZCB0byByZXR1cm4KK2ludGVnZXJzLCB3aGljaCBpcyBvZiBjb3Vyc2Ugbm90IGFsd2F5cyB0aGUgdHJ1dGgsIHNvIHlvdSBoYXZlIHRvCithc3NpZ24gdGhlIGNvcnJlY3QgXG1lbWJlcntyZXN0eXBlfSBhdHRyaWJ1dGUgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KK1xlbmR7ZGF0YWRlc2NuaX0KKworCitcc3Vic3Vic2VjdGlvbntGb3JlaWduIGZ1bmN0aW9uc1xsYWJlbHtjdHlwZXMtZm9yZWlnbi1mdW5jdGlvbnN9fQorCitBcyBleHBsYWluZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIGZvcmVpZ24gZnVuY3Rpb25zIGNhbiBiZQorYWNjZXNzZWQgYXMgYXR0cmlidXRlcyBvZiBsb2FkZWQgc2hhcmVkIGxpYnJhcmllcy4gIFRoZSBmdW5jdGlvbgorb2JqZWN0cyBjcmVhdGVkIGluIHRoaXMgd2F5IGJ5IGRlZmF1bHQgYWNjZXB0IGFueSBudW1iZXIgb2YgYXJndW1lbnRzLAorYWNjZXB0IGFueSBjdHlwZXMgZGF0YSBpbnN0YW5jZXMgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSBkZWZhdWx0CityZXN1bHQgdHlwZSBzcGVjaWZpZWQgYnkgdGhlIGxpYnJhcnkgbG9hZGVyLiAgVGhleSBhcmUgaW5zdGFuY2VzIG9mIGEKK3ByaXZhdGUgY2xhc3M6CisKK1xiZWdpbntjbGFzc2Rlc2MqfXtfRnVuY1B0cn0KK0Jhc2UgY2xhc3MgZm9yIEMgY2FsbGFibGUgZm9yZWlnbiBmdW5jdGlvbnMuCitcZW5ke2NsYXNzZGVzYyp9CisKK0luc3RhbmNlcyBvZiBmb3JlaWduIGZ1bmN0aW9ucyBhcmUgYWxzbyBDIGNvbXBhdGlibGUgZGF0YSB0eXBlczsgdGhleQorcmVwcmVzZW50IEMgZnVuY3Rpb24gcG9pbnRlcnMuCisKK1RoaXMgYmVoYXZpb3VyIGNhbiBiZSBjdXN0b21pemVkIGJ5IGFzc2lnbmluZyB0byBzcGVjaWFsIGF0dHJpYnV0ZXMgb2YKK3RoZSBmb3JlaWduIGZ1bmN0aW9uIG9iamVjdC4KKworXGJlZ2lue21lbWJlcmRlc2N9e3Jlc3R5cGV9CitBc3NpZ24gYSBjdHlwZXMgdHlwZSB0byBzcGVjaWZ5IHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgZm9yZWlnbgorZnVuY3Rpb24uICBVc2UgXGNvZGV7Tm9uZX0gZm9yIFxjb2Rle3ZvaWR9IGEgZnVuY3Rpb24gbm90IHJldHVybmluZworYW55dGhpbmcuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGFzc2lnbiBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QgdGhhdCBpcyBub3QgYQorY3R5cGVzIHR5cGUsIGluIHRoaXMgY2FzZSB0aGUgZnVuY3Rpb24gaXMgYXNzdW1lZCB0byByZXR1cm4gYW4KK2ludGVnZXIsIGFuZCB0aGUgY2FsbGFibGUgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGlzIGludGVnZXIsCithbGxvd2luZyB0byBkbyBmdXJ0aGVyIHByb2Nlc3Npbmcgb3IgZXJyb3IgY2hlY2tpbmcuICBVc2luZyB0aGlzCitpcyBkZXByZWNhdGVkLCBmb3IgbW9yZSBmbGV4aWJsZSBwb3N0cHJvY2Vzc2luZyBvciBlcnJvciBjaGVja2luZwordXNlIGEgY3R5cGVzIGRhdGEgdHlwZSBhcyBcbWVtYmVye3Jlc3R5cGV9IGFuZCBhc3NpZ24gYSBjYWxsYWJsZSB0byB0aGUKK1xtZW1iZXJ7ZXJyY2hlY2t9IGF0dHJpYnV0ZS4KK1xlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9e2FyZ3R5cGVzfQorQXNzaWduIGEgdHVwbGUgb2YgY3R5cGVzIHR5cGVzIHRvIHNwZWNpZnkgdGhlIGFyZ3VtZW50IHR5cGVzIHRoYXQKK3RoZSBmdW5jdGlvbiBhY2NlcHRzLiAgRnVuY3Rpb25zIHVzaW5nIHRoZSBcY29kZXtzdGRjYWxsfSBjYWxsaW5nCitjb252ZW50aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgYXMKK3RoZSBsZW5ndGggb2YgdGhpcyB0dXBsZTsgZnVuY3Rpb25zIHVzaW5nIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbgorYWNjZXB0IGFkZGl0aW9uYWwsIHVuc3BlY2lmaWVkIGFyZ3VtZW50cyBhcyB3ZWxsLgorCitXaGVuIGEgZm9yZWlnbiBmdW5jdGlvbiBpcyBjYWxsZWQsIGVhY2ggYWN0dWFsIGFyZ3VtZW50IGlzIHBhc3NlZAordG8gdGhlIFxtZXRob2R7ZnJvbXtcX31wYXJhbX0gY2xhc3MgbWV0aG9kIG9mIHRoZSBpdGVtcyBpbiB0aGUKK1xtZW1iZXJ7YXJndHlwZXN9IHR1cGxlLCB0aGlzIG1ldGhvZCBhbGxvd3MgdG8gYWRhcHQgdGhlIGFjdHVhbAorYXJndW1lbnQgdG8gYW4gb2JqZWN0IHRoYXQgdGhlIGZvcmVpZ24gZnVuY3Rpb24gYWNjZXB0cy4gIEZvcgorZXhhbXBsZSwgYSBcY2xhc3N7Y3tcX31jaGFye1xffXB9IGl0ZW0gaW4gdGhlIFxtZW1iZXJ7YXJndHlwZXN9IHR1cGxlIHdpbGwKK2NvbnZlcnQgYSB1bmljb2RlIHN0cmluZyBwYXNzZWQgYXMgYXJndW1lbnQgaW50byBhbiBieXRlIHN0cmluZwordXNpbmcgY3R5cGVzIGNvbnZlcnNpb24gcnVsZXMuCisKK05ldzogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHB1dCBpdGVtcyBpbiBhcmd0eXBlcyB3aGljaCBhcmUgbm90CitjdHlwZXMgdHlwZXMsIGJ1dCBlYWNoIGl0ZW0gbXVzdCBoYXZlIGEgXG1ldGhvZHtmcm9te1xffXBhcmFtfSBtZXRob2QKK3doaWNoIHJldHVybnMgYSB2YWx1ZSB1c2FibGUgYXMgYXJndW1lbnQgKGludGVnZXIsIHN0cmluZywgY3R5cGVzCitpbnN0YW5jZSkuICBUaGlzIGFsbG93cyB0byBkZWZpbmUgYWRhcHRlcnMgdGhhdCBjYW4gYWRhcHQgY3VzdG9tCitvYmplY3RzIGFzIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfXtlcnJjaGVja30KK0Fzc2lnbiBhIFB5dGhvbiBmdW5jdGlvbiBvciBhbm90aGVyIGNhbGxhYmxlIHRvIHRoaXMgYXR0cmlidXRlLgorVGhlIGNhbGxhYmxlIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhyZWUgb3IgbW9yZSBhcmd1bWVudHM6CitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbntmdW5jZGVzY25pfXtjYWxsYWJsZX17cmVzdWx0LCBmdW5jLCBhcmd1bWVudHN9CitcY29kZXtyZXN1bHR9IGlzIHdoYXQgdGhlIGZvcmVpZ24gZnVuY3Rpb24gcmV0dXJucywgYXMgc3BlY2lmaWVkIGJ5IHRoZQorXG1lbWJlcntyZXN0eXBlfSBhdHRyaWJ1dGUuCisKK1xjb2Rle2Z1bmN9IGlzIHRoZSBmb3JlaWduIGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYsIHRoaXMgYWxsb3dzIHRvCityZXVzZSB0aGUgc2FtZSBjYWxsYWJsZSBvYmplY3QgdG8gY2hlY2sgb3IgcG9zdHByb2Nlc3MgdGhlIHJlc3VsdHMKK29mIHNldmVyYWwgZnVuY3Rpb25zLgorCitcY29kZXthcmd1bWVudHN9IGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBvcmlnaW5hbGx5CitwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGwsIHRoaXMgYWxsb3dzIHRvIHNwZWNpYWxpemUgdGhlCitiZWhhdmlvdXIgb24gdGhlIGFyZ3VtZW50cyB1c2VkLgorCitUaGUgb2JqZWN0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSB0aGUKK2ZvcmVpZ24gZnVuY3Rpb24gY2FsbCwgYnV0IGl0IGNhbiBhbHNvIGNoZWNrIHRoZSByZXN1bHQgdmFsdWUgYW5kCityYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGZvcmVpZ24gZnVuY3Rpb24gY2FsbCBmYWlsZWQuCitcZW5ke2Z1bmNkZXNjbml9CisKK1xiZWdpbntleGNkZXNjfXtBcmd1bWVudEVycm9yKCl9CitUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhIGZvcmVpZ24gZnVuY3Rpb24gY2FsbCBjYW5ub3QKK2NvbnZlcnQgb25lIG9mIHRoZSBwYXNzZWQgYXJndW1lbnRzLgorXGVuZHtleGNkZXNjfQorCisKK1xzdWJzdWJzZWN0aW9ue0Z1bmN0aW9uIHByb3RvdHlwZXNcbGFiZWx7Y3R5cGVzLWZ1bmN0aW9uLXByb3RvdHlwZXN9fQorCitGb3JlaWduIGZ1bmN0aW9ucyBjYW4gYWxzbyBiZSBjcmVhdGVkIGJ5IGluc3RhbnRpYXRpbmcgZnVuY3Rpb24KK3Byb3RvdHlwZXMuICBGdW5jdGlvbiBwcm90b3R5cGVzIGFyZSBzaW1pbGFyIHRvIGZ1bmN0aW9uIHByb3RvdHlwZXMgaW4KK0M7IHRoZXkgZGVzY3JpYmUgYSBmdW5jdGlvbiAocmV0dXJuIHR5cGUsIGFyZ3VtZW50IHR5cGVzLCBjYWxsaW5nCitjb252ZW50aW9uKSB3aXRob3V0IGRlZmluaW5nIGFuIGltcGxlbWVudGF0aW9uLiAgVGhlIGZhY3RvcnkKK2Z1bmN0aW9ucyBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBkZXNpcmVkIHJlc3VsdCB0eXBlIGFuZCB0aGUgYXJndW1lbnQKK3R5cGVzIG9mIHRoZSBmdW5jdGlvbi4KKworXGJlZ2lue2Z1bmNkZXNjfXtDRlVOQ1RZUEV9e3Jlc3R5cGUsICphcmd0eXBlc30KK1RoZSByZXR1cm5lZCBmdW5jdGlvbiBwcm90b3R5cGUgY3JlYXRlcyBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlCitzdGFuZGFyZCBDIGNhbGxpbmcgY29udmVudGlvbi4gIFRoZSBmdW5jdGlvbiB3aWxsIHJlbGVhc2UgdGhlIEdJTAorZHVyaW5nIHRoZSBjYWxsLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtXSU5GVU5DVFlQRX17cmVzdHlwZSwgKmFyZ3R5cGVzfQorV2luZG93cyBvbmx5OiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gcHJvdG90eXBlIGNyZWF0ZXMgZnVuY3Rpb25zCit0aGF0IHVzZSB0aGUgXGNvZGV7c3RkY2FsbH0gY2FsbGluZyBjb252ZW50aW9uLCBleGNlcHQgb24gV2luZG93cyBDRQord2hlcmUgXGZ1bmN0aW9ue1dJTkZVTkNUWVBFfSBpcyB0aGUgc2FtZSBhcyBcZnVuY3Rpb257Q0ZVTkNUWVBFfS4gIFRoZSBmdW5jdGlvbgord2lsbCByZWxlYXNlIHRoZSBHSUwgZHVyaW5nIHRoZSBjYWxsLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtQWUZVTkNUWVBFfXtyZXN0eXBlLCAqYXJndHlwZXN9CitUaGUgcmV0dXJuZWQgZnVuY3Rpb24gcHJvdG90eXBlIGNyZWF0ZXMgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZQorUHl0aG9uIGNhbGxpbmcgY29udmVudGlvbi4gIFRoZSBmdW5jdGlvbiB3aWxsIFxlbXBoe25vdH0gcmVsZWFzZSB0aGUKK0dJTCBkdXJpbmcgdGhlIGNhbGwuCitcZW5ke2Z1bmNkZXNjfQorCitGdW5jdGlvbiBwcm90b3R5cGVzIGNyZWF0ZWQgYnkgdGhlIGZhY3RvcnkgZnVuY3Rpb25zIGNhbiBiZQoraW5zdGFudGlhdGVkIGluIGRpZmZlcmVudCB3YXlzLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgYW5kIG51bWJlciBvZgordGhlIHBhcmFtZXRlcnMgaW4gdGhlIGNhbGwuCisKK1xiZWdpbntmdW5jZGVzY25pfXtwcm90b3R5cGV9e2FkZHJlc3N9CitSZXR1cm5zIGEgZm9yZWlnbiBmdW5jdGlvbiBhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuCitcZW5ke2Z1bmNkZXNjbml9CisKK1xiZWdpbntmdW5jZGVzY25pfXtwcm90b3R5cGV9e2NhbGxhYmxlfQorQ3JlYXRlIGEgQyBjYWxsYWJsZSBmdW5jdGlvbiAoYSBjYWxsYmFjayBmdW5jdGlvbikgZnJvbSBhIFB5dGhvbgorXGNvZGV7Y2FsbGFibGV9LgorXGVuZHtmdW5jZGVzY25pfQorCitcYmVnaW57ZnVuY2Rlc2NuaX17cHJvdG90eXBlfXtmdW5jX3NwZWNcb3B0aW9uYWx7LCBwYXJhbWZsYWdzfX0KK1JldHVybnMgYSBmb3JlaWduIGZ1bmN0aW9uIGV4cG9ydGVkIGJ5IGEgc2hhcmVkIGxpYnJhcnkuCitcY29kZXtmdW5je1xffXNwZWN9IG11c3QgYmUgYSAyLXR1cGxlIFxjb2RleyhuYW1le1xffW9ye1xffW9yZGluYWwsIGxpYnJhcnkpfS4KK1RoZSBmaXJzdCBpdGVtIGlzIHRoZSBuYW1lIG9mIHRoZSBleHBvcnRlZCBmdW5jdGlvbiBhcyBzdHJpbmcsIG9yCit0aGUgb3JkaW5hbCBvZiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gYXMgc21hbGwgaW50ZWdlci4gIFRoZSBzZWNvbmQKK2l0ZW0gaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IGluc3RhbmNlLgorXGVuZHtmdW5jZGVzY25pfQorCitcYmVnaW57ZnVuY2Rlc2NuaX17cHJvdG90eXBlfXt2dGJsX2luZGV4LCBuYW1lXG9wdGlvbmFseywgcGFyYW1mbGFnc1xvcHRpb25hbHssIGlpZH19fQorUmV0dXJucyBhIGZvcmVpZ24gZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgYSBDT00gbWV0aG9kLgorXGNvZGV7dnRibHtcX31pbmRleH0gaXMgdGhlIGluZGV4IGludG8gdGhlIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUsIGEKK3NtYWxsIG5vbm5lZ2F0aXZlIGludGVnZXIuIFx2YXJ7bmFtZX0gaXMgbmFtZSBvZiB0aGUgQ09NIG1ldGhvZC4KK1x2YXJ7aWlkfSBpcyBhbiBvcHRpb25hbCBwb2ludGVyIHRvIHRoZSBpbnRlcmZhY2UgaWRlbnRpZmllciB3aGljaAoraXMgdXNlZCBpbiBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcuCisKK0NPTSBtZXRob2RzIHVzZSBhIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9uOiBUaGV5IHJlcXVpcmUgYQorcG9pbnRlciB0byB0aGUgQ09NIGludGVyZmFjZSBhcyBmaXJzdCBhcmd1bWVudCwgaW4gYWRkaXRpb24gdG8KK3Rob3NlIHBhcmFtZXRlcnMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIHRoZSBcbWVtYmVye2FyZ3R5cGVzfSB0dXBsZS4KK1xlbmR7ZnVuY2Rlc2NuaX0KKworVGhlIG9wdGlvbmFsIFx2YXJ7cGFyYW1mbGFnc30gcGFyYW1ldGVyIGNyZWF0ZXMgZm9yZWlnbiBmdW5jdGlvbgord3JhcHBlcnMgd2l0aCBtdWNoIG1vcmUgZnVuY3Rpb25hbGl0eSB0aGFuIHRoZSBmZWF0dXJlcyBkZXNjcmliZWQKK2Fib3ZlLgorCitcdmFye3BhcmFtZmxhZ3N9IG11c3QgYmUgYSB0dXBsZSBvZiB0aGUgc2FtZSBsZW5ndGggYXMgXG1lbWJlcnthcmd0eXBlc30uCisKK0VhY2ggaXRlbSBpbiB0aGlzIHR1cGxlIGNvbnRhaW5zIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgYQorcGFyYW1ldGVyLCBpdCBtdXN0IGJlIGEgdHVwbGUgY29udGFpbmluZyAxLCAyLCBvciAzIGl0ZW1zLgorCitUaGUgZmlyc3QgaXRlbSBpcyBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgZmxhZ3MgZm9yIHRoZSBwYXJhbWV0ZXI6CisKK1xiZWdpbntkYXRhZGVzY25pfXsxfQorU3BlY2lmaWVzIGFuIGlucHV0IHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb24uCitcZW5ke2RhdGFkZXNjbml9CisKK1xiZWdpbntkYXRhZGVzY25pfXsyfQorT3V0cHV0IHBhcmFtZXRlci4gIFRoZSBmb3JlaWduIGZ1bmN0aW9uIGZpbGxzIGluIGEgdmFsdWUuCitcZW5ke2RhdGFkZXNjbml9CisKK1xiZWdpbntkYXRhZGVzY25pfXs0fQorSW5wdXQgcGFyYW1ldGVyIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBpbnRlZ2VyIHplcm8uCitcZW5ke2RhdGFkZXNjbml9CisKK1RoZSBvcHRpb25hbCBzZWNvbmQgaXRlbSBpcyB0aGUgcGFyYW1ldGVyIG5hbWUgYXMgc3RyaW5nLiAgSWYgdGhpcyBpcworc3BlY2lmaWVkLCB0aGUgZm9yZWlnbiBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGggbmFtZWQgcGFyYW1ldGVycy4KKworVGhlIG9wdGlvbmFsIHRoaXJkIGl0ZW0gaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLgorCitUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdyB0byB3cmFwIHRoZSBXaW5kb3dzIFxjb2Rle01lc3NhZ2VCb3hBfQorZnVuY3Rpb24gc28gdGhhdCBpdCBzdXBwb3J0cyBkZWZhdWx0IHBhcmFtZXRlcnMgYW5kIG5hbWVkIGFyZ3VtZW50cy4KK1RoZSBDIGRlY2xhcmF0aW9uIGZyb20gdGhlIHdpbmRvd3MgaGVhZGVyIGZpbGUgaXMgdGhpczoKK1xiZWdpbnt2ZXJiYXRpbX0KK1dJTlVTRVJBUEkgaW50IFdJTkFQSQorTWVzc2FnZUJveEEoCisgICAgSFdORCBoV25kICwKKyAgICBMUENTVFIgbHBUZXh0LAorICAgIExQQ1NUUiBscENhcHRpb24sCisgICAgVUlOVCB1VHlwZSk7CitcZW5ke3ZlcmJhdGltfQorCitIZXJlIGlzIHRoZSB3cmFwcGluZyB3aXRoIFxjb2Rle2N0eXBlc306CitcYmVnaW57cXVvdGV9CitcYmVnaW57dmVyYmF0aW19Pj4+IGZyb20gY3R5cGVzIGltcG9ydCBjX2ludCwgV0lORlVOQ1RZUEUsIHdpbmRsbAorPj4+IGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBIV05ELCBMUENTVFIsIFVJTlQKKz4+PiBwcm90b3R5cGUgPSBXSU5GVU5DVFlQRShjX2ludCwgSFdORCwgTFBDU1RSLCBMUENTVFIsIGNfdWludCkKKz4+PiBwYXJhbWZsYWdzID0gKDEsICJod25kIiwgMCksICgxLCAidGV4dCIsICJIaSIpLCAoMSwgImNhcHRpb24iLCBOb25lKSwgKDEsICJmbGFncyIsIDApCis+Pj4gTWVzc2FnZUJveCA9IHByb3RvdHlwZSgoIk1lc3NhZ2VCb3hBIiwgd2luZGxsLnVzZXIzMiksIHBhcmFtZmxhZ3MpCis+Pj5cZW5ke3ZlcmJhdGltfQorXGVuZHtxdW90ZX0KKworVGhlIE1lc3NhZ2VCb3ggZm9yZWlnbiBmdW5jdGlvbiBjYW4gbm93IGJlIGNhbGxlZCBpbiB0aGVzZSB3YXlzOgorXGJlZ2lue3ZlcmJhdGltfQorPj4+IE1lc3NhZ2VCb3goKQorPj4+IE1lc3NhZ2VCb3godGV4dD0iU3BhbSwgc3BhbSwgc3BhbSIpCis+Pj4gTWVzc2FnZUJveChmbGFncz0yLCB0ZXh0PSJmb28gYmFyIikKKz4+PgorXGVuZHt2ZXJiYXRpbX0KKworQSBzZWNvbmQgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgb3V0cHV0IHBhcmFtZXRlcnMuICBUaGUgd2luMzIKK1xjb2Rle0dldFdpbmRvd1JlY3R9IGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZGltZW5zaW9ucyBvZiBhIHNwZWNpZmllZAord2luZG93IGJ5IGNvcHlpbmcgdGhlbSBpbnRvIFxjb2Rle1JFQ1R9IHN0cnVjdHVyZSB0aGF0IHRoZSBjYWxsZXIgaGFzIHRvCitzdXBwbHkuICBIZXJlIGlzIHRoZSBDIGRlY2xhcmF0aW9uOgorXGJlZ2lue3ZlcmJhdGltfQorV0lOVVNFUkFQSSBCT09MIFdJTkFQSQorR2V0V2luZG93UmVjdCgKKyAgICAgSFdORCBoV25kLAorICAgICBMUFJFQ1QgbHBSZWN0KTsKK1xlbmR7dmVyYmF0aW19CisKK0hlcmUgaXMgdGhlIHdyYXBwaW5nIHdpdGggXGNvZGV7Y3R5cGVzfToKK1xiZWdpbntxdW90ZX0KK1xiZWdpbnt2ZXJiYXRpbX0+Pj4gZnJvbSBjdHlwZXMgaW1wb3J0IFBPSU5URVIsIFdJTkZVTkNUWVBFLCB3aW5kbGwKKz4+PiBmcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgQk9PTCwgSFdORCwgUkVDVAorPj4+IHByb3RvdHlwZSA9IFdJTkZVTkNUWVBFKEJPT0wsIEhXTkQsIFBPSU5URVIoUkVDVCkpCis+Pj4gcGFyYW1mbGFncyA9ICgxLCAiaHduZCIpLCAoMiwgImxwcmVjdCIpCis+Pj4gR2V0V2luZG93UmVjdCA9IHByb3RvdHlwZSgoIkdldFdpbmRvd1JlY3QiLCB3aW5kbGwudXNlcjMyKSwgcGFyYW1mbGFncykKKz4+PlxlbmR7dmVyYmF0aW19CitcZW5ke3F1b3RlfQorCitGdW5jdGlvbnMgd2l0aCBvdXRwdXQgcGFyYW1ldGVycyB3aWxsIGF1dG9tYXRpY2FsbHkgcmV0dXJuIHRoZSBvdXRwdXQKK3BhcmFtZXRlciB2YWx1ZSBpZiB0aGVyZSBpcyBhIHNpbmdsZSBvbmUsIG9yIGEgdHVwbGUgY29udGFpbmluZyB0aGUKK291dHB1dCBwYXJhbWV0ZXIgdmFsdWVzIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUsIHNvIHRoZQorR2V0V2luZG93UmVjdCBmdW5jdGlvbiBub3cgcmV0dXJucyBhIFJFQ1QgaW5zdGFuY2UsIHdoZW4gY2FsbGVkLgorCitPdXRwdXQgcGFyYW1ldGVycyBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgXG1lbWJlcntlcnJjaGVja30gcHJvdG9jb2wgdG8gZG8KK2Z1cnRoZXIgb3V0cHV0IHByb2Nlc3NpbmcgYW5kIGVycm9yIGNoZWNraW5nLiAgVGhlIHdpbjMyCitcY29kZXtHZXRXaW5kb3dSZWN0fSBhcGkgZnVuY3Rpb24gcmV0dXJucyBhIFxjb2Rle0JPT0x9IHRvIHNpZ25hbCBzdWNjZXNzIG9yCitmYWlsdXJlLCBzbyB0aGlzIGZ1bmN0aW9uIGNvdWxkIGRvIHRoZSBlcnJvciBjaGVja2luZywgYW5kIHJhaXNlcyBhbgorZXhjZXB0aW9uIHdoZW4gdGhlIGFwaSBjYWxsIGZhaWxlZDoKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiBkZWYgZXJyY2hlY2socmVzdWx0LCBmdW5jLCBhcmdzKToKKy4uLiAgICAgaWYgbm90IHJlc3VsdDoKKy4uLiAgICAgICAgIHJhaXNlIFdpbkVycm9yKCkKKy4uLiAgICAgcmV0dXJuIGFyZ3MKKz4+PiBHZXRXaW5kb3dSZWN0LmVycmNoZWNrID0gZXJyY2hlY2sKKz4+PgorXGVuZHt2ZXJiYXRpbX0KKworSWYgdGhlIFxtZW1iZXJ7ZXJyY2hlY2t9IGZ1bmN0aW9uIHJldHVybnMgdGhlIGFyZ3VtZW50IHR1cGxlIGl0IHJlY2VpdmVzCit1bmNoYW5nZWQsIFxjb2Rle2N0eXBlc30gY29udGludWVzIHRoZSBub3JtYWwgcHJvY2Vzc2luZyBpdCBkb2VzIG9uIHRoZQorb3V0cHV0IHBhcmFtZXRlcnMuICBJZiB5b3Ugd2FudCB0byByZXR1cm4gYSB0dXBsZSBvZiB3aW5kb3cKK2Nvb3JkaW5hdGVzIGluc3RlYWQgb2YgYSBcY29kZXtSRUNUfSBpbnN0YW5jZSwgeW91IGNhbiByZXRyaWV2ZSB0aGUKK2ZpZWxkcyBpbiB0aGUgZnVuY3Rpb24gYW5kIHJldHVybiB0aGVtIGluc3RlYWQsIHRoZSBub3JtYWwgcHJvY2Vzc2luZword2lsbCBubyBsb25nZXIgdGFrZSBwbGFjZToKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiBkZWYgZXJyY2hlY2socmVzdWx0LCBmdW5jLCBhcmdzKToKKy4uLiAgICAgaWYgbm90IHJlc3VsdDoKKy4uLiAgICAgICAgIHJhaXNlIFdpbkVycm9yKCkKKy4uLiAgICAgcmMgPSBhcmdzWzFdCisuLi4gICAgIHJldHVybiByYy5sZWZ0LCByYy50b3AsIHJjLmJvdHRvbSwgcmMucmlnaHQKKz4+PgorPj4+IEdldFdpbmRvd1JlY3QuZXJyY2hlY2sgPSBlcnJjaGVjaworPj4+CitcZW5ke3ZlcmJhdGltfQorCisKK1xzdWJzdWJzZWN0aW9ue1V0aWxpdHkgZnVuY3Rpb25zXGxhYmVse2N0eXBlcy11dGlsaXR5LWZ1bmN0aW9uc319CisKK1xiZWdpbntmdW5jZGVzY317YWRkcmVzc29mfXtvYmp9CitSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgYnVmZmVyIGFzIGludGVnZXIuICBcY29kZXtvYmp9IG11c3QKK2JlIGFuIGluc3RhbmNlIG9mIGEgY3R5cGVzIHR5cGUuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2FsaWdubWVudH17b2JqX29yX3R5cGV9CitSZXR1cm5zIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9mIGEgY3R5cGVzIHR5cGUuCitcY29kZXtvYmp7XF99b3J7XF99dHlwZX0gbXVzdCBiZSBhIGN0eXBlcyB0eXBlIG9yIGluc3RhbmNlLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtieXJlZn17b2JqfQorUmV0dXJucyBhIGxpZ2h0LXdlaWdodCBwb2ludGVyIHRvIFxjb2Rle29ian0sIHdoaWNoIG11c3QgYmUgYW4KK2luc3RhbmNlIG9mIGEgY3R5cGVzIHR5cGUuIFRoZSByZXR1cm5lZCBvYmplY3QgY2FuIG9ubHkgYmUgdXNlZCBhcworYSBmb3JlaWduIGZ1bmN0aW9uIGNhbGwgcGFyYW1ldGVyLiBJdCBiZWhhdmVzIHNpbWlsYXIgdG8KK1xjb2Rle3BvaW50ZXIob2JqKX0sIGJ1dCB0aGUgY29uc3RydWN0aW9uIGlzIGEgbG90IGZhc3Rlci4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317Y2FzdH17b2JqLCB0eXBlfQorVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSBjYXN0IG9wZXJhdG9yIGluIEMuIEl0IHJldHVybnMgYQorbmV3IGluc3RhbmNlIG9mIFxjb2Rle3R5cGV9IHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBtZW1vcnkgYmxvY2sgYXMKK1xjb2Rle29ian0uIFxjb2Rle3R5cGV9IG11c3QgYmUgYSBwb2ludGVyIHR5cGUsIGFuZCBcY29kZXtvYmp9IG11c3QgYmUgYW4KK29iamVjdCB0aGF0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhIHBvaW50ZXIuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2NyZWF0ZV9zdHJpbmdfYnVmZmVyfXtpbml0X29yX3NpemVcb3B0aW9uYWx7LCBzaXplfX0KK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG11dGFibGUgY2hhcmFjdGVyIGJ1ZmZlci4gVGhlIHJldHVybmVkCitvYmplY3QgaXMgYSBjdHlwZXMgYXJyYXkgb2YgXGNsYXNze2N7XF99Y2hhcn0uCisKK1xjb2Rle2luaXR7XF99b3J7XF99c2l6ZX0gbXVzdCBiZSBhbiBpbnRlZ2VyIHdoaWNoIHNwZWNpZmllcyB0aGUgc2l6ZSBvZgordGhlIGFycmF5LCBvciBhIHN0cmluZyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYXJyYXkKK2l0ZW1zLgorCitJZiBhIHN0cmluZyBpcyBzcGVjaWZpZWQgYXMgZmlyc3QgYXJndW1lbnQsIHRoZSBidWZmZXIgaXMgbWFkZSBvbmUKK2l0ZW0gbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHNvIHRoYXQgdGhlIGxhc3QgZWxlbWVudAoraW4gdGhlIGFycmF5IGlzIGEgTlVMIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4gQW4gaW50ZWdlciBjYW4gYmUKK3Bhc3NlZCBhcyBzZWNvbmQgYXJndW1lbnQgd2hpY2ggYWxsb3dzIHRvIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlCithcnJheSBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgc2hvdWxkIG5vdCBiZSB1c2VkLgorCitJZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgdW5pY29kZSBzdHJpbmcsIGl0IGlzIGNvbnZlcnRlZCBpbnRvCithbiA4LWJpdCBzdHJpbmcgYWNjb3JkaW5nIHRvIGN0eXBlcyBjb252ZXJzaW9uIHJ1bGVzLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtjcmVhdGVfdW5pY29kZV9idWZmZXJ9e2luaXRfb3Jfc2l6ZVxvcHRpb25hbHssIHNpemV9fQorVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbXV0YWJsZSB1bmljb2RlIGNoYXJhY3RlciBidWZmZXIuIFRoZQorcmV0dXJuZWQgb2JqZWN0IGlzIGEgY3R5cGVzIGFycmF5IG9mIFxjbGFzc3tje1xffXdjaGFyfS4KKworXGNvZGV7aW5pdHtcX31vcntcX31zaXplfSBtdXN0IGJlIGFuIGludGVnZXIgd2hpY2ggc3BlY2lmaWVzIHRoZSBzaXplIG9mCit0aGUgYXJyYXksIG9yIGEgdW5pY29kZSBzdHJpbmcgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemUKK3RoZSBhcnJheSBpdGVtcy4KKworSWYgYSB1bmljb2RlIHN0cmluZyBpcyBzcGVjaWZpZWQgYXMgZmlyc3QgYXJndW1lbnQsIHRoZSBidWZmZXIgaXMKK21hZGUgb25lIGl0ZW0gbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHNvIHRoYXQgdGhlCitsYXN0IGVsZW1lbnQgaW4gdGhlIGFycmF5IGlzIGEgTlVMIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4gQW4KK2ludGVnZXIgY2FuIGJlIHBhc3NlZCBhcyBzZWNvbmQgYXJndW1lbnQgd2hpY2ggYWxsb3dzIHRvIHNwZWNpZnkKK3RoZSBzaXplIG9mIHRoZSBhcnJheSBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgc2hvdWxkIG5vdCBiZQordXNlZC4KKworSWYgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIDgtYml0IHN0cmluZywgaXQgaXMgY29udmVydGVkIGludG8gYW4KK3VuaWNvZGUgc3RyaW5nIGFjY29yZGluZyB0byBjdHlwZXMgY29udmVyc2lvbiBydWxlcy4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317RGxsQ2FuVW5sb2FkTm93fXt9CitXaW5kb3dzIG9ubHk6IFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIHdoaWNoIGFsbG93cyB0byBpbXBsZW1lbnQKK2lucHJvY2VzcyBDT00gc2VydmVycyB3aXRoIGN0eXBlcy4gSXQgaXMgY2FsbGVkIGZyb20gdGhlCitEbGxDYW5VbmxvYWROb3cgZnVuY3Rpb24gdGhhdCB0aGUge1xffWN0eXBlcyBleHRlbnNpb24gZGxsIGV4cG9ydHMuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e0RsbEdldENsYXNzT2JqZWN0fXt9CitXaW5kb3dzIG9ubHk6IFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIHdoaWNoIGFsbG93cyB0byBpbXBsZW1lbnQKK2lucHJvY2VzcyBDT00gc2VydmVycyB3aXRoIGN0eXBlcy4gSXQgaXMgY2FsbGVkIGZyb20gdGhlCitEbGxHZXRDbGFzc09iamVjdCBmdW5jdGlvbiB0aGF0IHRoZSBcY29kZXt7XF99Y3R5cGVzfSBleHRlbnNpb24gZGxsIGV4cG9ydHMuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e0Zvcm1hdEVycm9yfXtcb3B0aW9uYWx7Y29kZX19CitXaW5kb3dzIG9ubHk6IFJldHVybnMgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvciBjb2RlLiBJZgorbm8gZXJyb3IgY29kZSBpcyBzcGVjaWZpZWQsIHRoZSBsYXN0IGVycm9yIGNvZGUgaXMgdXNlZCBieSBjYWxsaW5nCit0aGUgV2luZG93cyBhcGkgZnVuY3Rpb24gR2V0TGFzdEVycm9yLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtHZXRMYXN0RXJyb3J9e30KK1dpbmRvd3Mgb25seTogUmV0dXJucyB0aGUgbGFzdCBlcnJvciBjb2RlIHNldCBieSBXaW5kb3dzIGluIHRoZQorY2FsbGluZyB0aHJlYWQuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e21lbW1vdmV9e2RzdCwgc3JjLCBjb3VudH0KK1NhbWUgYXMgdGhlIHN0YW5kYXJkIEMgbWVtbW92ZSBsaWJyYXJ5IGZ1bmN0aW9uOiBjb3BpZXMgXHZhcntjb3VudH0KK2J5dGVzIGZyb20gXGNvZGV7c3JjfSB0byBcdmFye2RzdH0uIFx2YXJ7ZHN0fSBhbmQgXGNvZGV7c3JjfSBtdXN0IGJlCitpbnRlZ2VycyBvciBjdHlwZXMgaW5zdGFuY2VzIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBwb2ludGVycy4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317bWVtc2V0fXtkc3QsIGMsIGNvdW50fQorU2FtZSBhcyB0aGUgc3RhbmRhcmQgQyBtZW1zZXQgbGlicmFyeSBmdW5jdGlvbjogZmlsbHMgdGhlIG1lbW9yeQorYmxvY2sgYXQgYWRkcmVzcyBcdmFye2RzdH0gd2l0aCBcdmFye2NvdW50fSBieXRlcyBvZiB2YWx1ZQorXHZhcntjfS4gXHZhcntkc3R9IG11c3QgYmUgYW4gaW50ZWdlciBzcGVjaWZ5aW5nIGFuIGFkZHJlc3MsIG9yIGEKK2N0eXBlcyBpbnN0YW5jZS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317UE9JTlRFUn17dHlwZX0KK1RoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGN0eXBlcyBwb2ludGVyCit0eXBlLiBQb2ludGVyIHR5cGVzIGFyZSBjYWNoZWQgYW4gcmV1c2VkIGludGVybmFsbHksIHNvIGNhbGxpbmcKK3RoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSBpcyBjaGVhcC4gdHlwZSBtdXN0IGJlIGEgY3R5cGVzIHR5cGUuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e3BvaW50ZXJ9e29ian0KK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBwb2ludGVyIGluc3RhbmNlLCBwb2ludGluZyB0bworXGNvZGV7b2JqfS4gVGhlIHJldHVybmVkIG9iamVjdCBpcyBvZiB0aGUgdHlwZSBQT0lOVEVSKHR5cGUob2JqKSkuCisKK05vdGU6IElmIHlvdSBqdXN0IHdhbnQgdG8gcGFzcyBhIHBvaW50ZXIgdG8gYW4gb2JqZWN0IHRvIGEgZm9yZWlnbgorZnVuY3Rpb24gY2FsbCwgeW91IHNob3VsZCB1c2UgXGNvZGV7YnlyZWYob2JqKX0gd2hpY2ggaXMgbXVjaCBmYXN0ZXIuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e3Jlc2l6ZX17b2JqLCBzaXplfQorVGhpcyBmdW5jdGlvbiByZXNpemVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgYnVmZmVyIG9mIG9iaiwgd2hpY2gKK211c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSBjdHlwZXMgdHlwZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIG1ha2UKK3RoZSBidWZmZXIgc21hbGxlciB0aGFuIHRoZSBuYXRpdmUgc2l6ZSBvZiB0aGUgb2JqZWN0cyB0eXBlLCBhcworZ2l2ZW4gYnkgc2l6ZW9mKHR5cGUob2JqKSksIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byBlbmxhcmdlIHRoZQorYnVmZmVyLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtzZXRfY29udmVyc2lvbl9tb2RlfXtlbmNvZGluZywgZXJyb3JzfQorVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBydWxlcyB0aGF0IGN0eXBlcyBvYmplY3RzIHVzZSB3aGVuCitjb252ZXJ0aW5nIGJldHdlZW4gOC1iaXQgc3RyaW5ncyBhbmQgdW5pY29kZSBzdHJpbmdzLiBlbmNvZGluZworbXVzdCBiZSBhIHN0cmluZyBzcGVjaWZ5aW5nIGFuIGVuY29kaW5nLCBsaWtlIFxjb2Rleyd1dGYtOCd9IG9yCitcY29kZXsnbWJjcyd9LCBlcnJvcnMgbXVzdCBiZSBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBlcnJvciBoYW5kbGluZworb24gZW5jb2RpbmcvZGVjb2RpbmcgZXJyb3JzLiBFeGFtcGxlcyBvZiBwb3NzaWJsZSB2YWx1ZXMgYXJlCitcY29kZXsic3RyaWN0In0sIFxjb2RleyJyZXBsYWNlIn0sIG9yIFxjb2RleyJpZ25vcmUifS4KKworXGNvZGV7c2V0e1xffWNvbnZlcnNpb257XF99bW9kZX0gcmV0dXJucyBhIDItdHVwbGUgY29udGFpbmluZyB0aGUgcHJldmlvdXMKK2NvbnZlcnNpb24gcnVsZXMuIE9uIHdpbmRvd3MsIHRoZSBpbml0aWFsIGNvbnZlcnNpb24gcnVsZXMgYXJlCitcY29kZXsoJ21iY3MnLCAnaWdub3JlJyl9LCBvbiBvdGhlciBzeXN0ZW1zIFxjb2RleygnYXNjaWknLCAnc3RyaWN0Jyl9LgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtzaXplb2Z9e29ial9vcl90eXBlfQorUmV0dXJucyB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhIGN0eXBlcyB0eXBlIG9yIGluc3RhbmNlIG1lbW9yeQorYnVmZmVyLiBEb2VzIHRoZSBzYW1lIGFzIHRoZSBDIFxjb2Rle3NpemVvZigpfSBmdW5jdGlvbi4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317c3RyaW5nX2F0fXthZGRyZXNzXG9wdGlvbmFseywgc2l6ZX19CitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0cmluZyBzdGFydGluZyBhdCBtZW1vcnkgYWRkcmVzcworYWRkcmVzcy4gSWYgc2l6ZSBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgYXMgc2l6ZSwgb3RoZXJ3aXNlIHRoZQorc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgemVyby10ZXJtaW5hdGVkLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtXaW5FcnJvcn17Y29kZT1Ob25lLCBkZXNjcj1Ob25lfQorV2luZG93cyBvbmx5OiB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSB3b3JzdC1uYW1lZCB0aGluZyBpbgorY3R5cGVzLiBJdCBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIFdpbmRvd3NFcnJvci4gSWYgXHZhcntjb2RlfSBpcyBub3QKK3NwZWNpZmllZCwgXGNvZGV7R2V0TGFzdEVycm9yfSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHRoZSBlcnJvcgorY29kZS4gSWYgXGNvZGV7ZGVzY3J9IGlzIG5vdCBzcGNpZmllZCwgXGZ1bmN0aW9ue0Zvcm1hdEVycm9yfSBpcyBjYWxsZWQgdG8KK2dldCBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXt3c3RyaW5nX2F0fXthZGRyZXNzfQorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgc3RhcnRpbmcgYXQgbWVtb3J5CithZGRyZXNzIFxjb2Rle2FkZHJlc3N9IGFzIHVuaWNvZGUgc3RyaW5nLiBJZiBcY29kZXtzaXplfSBpcyBzcGVjaWZpZWQsCitpdCBpcyB1c2VkIGFzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nLCBvdGhlcndpc2UKK3RoZSBzdHJpbmcgaXMgYXNzdW1lZCB0byBiZSB6ZXJvLXRlcm1pbmF0ZWQuCitcZW5ke2Z1bmNkZXNjfQorCisKK1xzdWJzdWJzZWN0aW9ue0RhdGEgdHlwZXNcbGFiZWx7Y3R5cGVzLWRhdGEtdHlwZXN9fQorCitcYmVnaW57Y2xhc3NkZXNjKn17X0NEYXRhfQorVGhpcyBub24tcHVibGljIGNsYXNzIGlzIHRoZSBjb21tb24gYmFzZSBjbGFzcyBvZiBhbGwgY3R5cGVzIGRhdGEKK3R5cGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCBhbGwgY3R5cGVzIHR5cGUgaW5zdGFuY2VzIGNvbnRhaW4gYQorbWVtb3J5IGJsb2NrIHRoYXQgaG9sZCBDIGNvbXBhdGlibGUgZGF0YTsgdGhlIGFkZHJlc3Mgb2YgdGhlCittZW1vcnkgYmxvY2sgaXMgcmV0dXJuZWQgYnkgdGhlIFxjb2Rle2FkZHJlc3NvZigpfSBoZWxwZXIgZnVuY3Rpb24uCitBbm90aGVyIGluc3RhbmNlIHZhcmlhYmxlIGlzIGV4cG9zZWQgYXMgXG1lbWJlcnt7XF99b2JqZWN0c307IHRoaXMKK2NvbnRhaW5zIG90aGVyIFB5dGhvbiBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSBrZXB0IGFsaXZlIGluIGNhc2UKK3RoZSBtZW1vcnkgYmxvY2sgY29udGFpbnMgcG9pbnRlcnMuCitcZW5ke2NsYXNzZGVzYyp9CisKK0NvbW1vbiBtZXRob2RzIG9mIGN0eXBlcyBkYXRhIHR5cGVzLCB0aGVzZSBhcmUgYWxsIGNsYXNzIG1ldGhvZHMgKHRvCitiZSBleGFjdCwgdGhleSBhcmUgbWV0aG9kcyBvZiB0aGUgbWV0YWNsYXNzKToKKworXGJlZ2lue21ldGhvZGRlc2N9e2Zyb21fYWRkcmVzc317YWRkcmVzc30KK1RoaXMgbWV0aG9kIHJldHVybnMgYSBjdHlwZXMgdHlwZSBpbnN0YW5jZSB1c2luZyB0aGUgbWVtb3J5CitzcGVjaWZpZWQgYnkgYWRkcmVzcyB3aGljaCBtdXN0IGJlIGFuIGludGVnZXIuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtmcm9tX3BhcmFtfXtvYmp9CitUaGlzIG1ldGhvZCBhZGFwdHMgb2JqIHRvIGEgY3R5cGVzIHR5cGUuICBJdCBpcyBjYWxsZWQgd2l0aCB0aGUKK2FjdHVhbCBvYmplY3QgdXNlZCBpbiBhIGZvcmVpZ24gZnVuY3Rpb24gY2FsbCwgd2hlbiB0aGUgdHlwZSBpcworcHJlc2VudCBpbiB0aGUgZm9yZWlnbiBmdW5jdGlvbnMgXG1lbWJlcnthcmd0eXBlc30gdHVwbGU7IGl0IG11c3QKK3JldHVybiBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBmdW5jdGlvbiBjYWxsIHBhcmFtZXRlci4KKworQWxsIGN0eXBlcyBkYXRhIHR5cGVzIGhhdmUgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMKK2NsYXNzbWV0aG9kLCBub3JtYWxseSBpdCByZXR1cm5zIFxjb2Rle29ian0gaWYgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZgordGhlIHR5cGUuICBTb21lIHR5cGVzIGFjY2VwdCBvdGhlciBvYmplY3RzIGFzIHdlbGwuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtpbl9kbGx9e25hbWUsIGxpYnJhcnl9CitUaGlzIG1ldGhvZCByZXR1cm5zIGEgY3R5cGVzIHR5cGUgaW5zdGFuY2UgZXhwb3J0ZWQgYnkgYSBzaGFyZWQKK2xpYnJhcnkuIFx2YXJ7bmFtZX0gaXMgdGhlIG5hbWUgb2YgdGhlIHN5bWJvbCB0aGF0IGV4cG9ydHMgdGhlIGRhdGEsCitcY29kZXtsaWJyYXJ5fSBpcyB0aGUgbG9hZGVkIHNoYXJlZCBsaWJyYXJ5LgorXGVuZHttZXRob2RkZXNjfQorCitDb21tb24gaW5zdGFuY2UgdmFyaWFibGVzIG9mIGN0eXBlcyBkYXRhIHR5cGVzOgorCitcYmVnaW57bWVtYmVyZGVzY317X2JfYmFzZV99CitTb21ldGltZXMgY3R5cGVzIGRhdGEgaW5zdGFuY2VzIGRvIG5vdCBvd24gdGhlIG1lbW9yeSBibG9jayB0aGV5Citjb250YWluLCBpbnN0ZWFkIHRoZXkgc2hhcmUgcGFydCBvZiB0aGUgbWVtb3J5IGJsb2NrIG9mIGEgYmFzZQorb2JqZWN0LiAgVGhlIFxtZW1iZXJ7e1xffWJ7XF99YmFzZXtcX319IHJlYWRvbmx5IG1lbWJlciBpcyB0aGUgcm9vdCBjdHlwZXMKK29iamVjdCB0aGF0IG93bnMgdGhlIG1lbW9yeSBibG9jay4KK1xlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9e19iX25lZWRzZnJlZV99CitUaGlzIHJlYWRvbmx5IHZhcmlhYmxlIGlzIHRydWUgd2hlbiB0aGUgY3R5cGVzIGRhdGEgaW5zdGFuY2UgaGFzCithbGxvY2F0ZWQgdGhlIG1lbW9yeSBibG9jayBpdHNlbGYsIGZhbHNlIG90aGVyd2lzZS4KK1xlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9e19vYmplY3RzfQorVGhpcyBtZW1iZXIgaXMgZWl0aGVyIFxjb2Rle05vbmV9IG9yIGEgZGljdGlvbmFyeSBjb250YWluaW5nIFB5dGhvbgorb2JqZWN0cyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBzbyB0aGF0IHRoZSBtZW1vcnkgYmxvY2sKK2NvbnRlbnRzIGlzIGtlcHQgdmFsaWQuICBUaGlzIG9iamVjdCBpcyBvbmx5IGV4cG9zZWQgZm9yCitkZWJ1Z2dpbmc7IG5ldmVyIG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhpcyBkaWN0aW9uYXJ5LgorXGVuZHttZW1iZXJkZXNjfQorCisKK1xzdWJzdWJzZWN0aW9ue0Z1bmRhbWVudGFsIGRhdGEgdHlwZXNcbGFiZWx7Y3R5cGVzLWZ1bmRhbWVudGFsLWRhdGEtdHlwZXN9fQorCitcYmVnaW57Y2xhc3NkZXNjKn17X1NpbXBsZUNEYXRhfQorVGhpcyBub24tcHVibGljIGNsYXNzIGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBmdW5kYW1lbnRhbCBjdHlwZXMKK2RhdGEgdHlwZXMuIEl0IGlzIG1lbnRpb25lZCBoZXJlIGJlY2F1c2UgaXQgY29udGFpbnMgdGhlIGNvbW1vbgorYXR0cmlidXRlcyBvZiB0aGUgZnVuZGFtZW50YWwgY3R5cGVzIGRhdGEgdHlwZXMuICBcY29kZXt7XF99U2ltcGxlQ0RhdGF9CitpcyBhIHN1YmNsYXNzIG9mIFxjb2Rle3tcX31DRGF0YX0sIHNvIGl0IGluaGVyaXRzIHRoZWlyIG1ldGhvZHMgYW5kCithdHRyaWJ1dGVzLgorXGVuZHtjbGFzc2Rlc2MqfQorCitJbnN0YW5jZXMgaGF2ZSBhIHNpbmdsZSBhdHRyaWJ1dGU6CisKK1xiZWdpbnttZW1iZXJkZXNjfXt2YWx1ZX0KK1RoaXMgYXR0cmlidXRlIGNvbnRhaW5zIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIGluc3RhbmNlLiBGb3IKK2ludGVnZXIgYW5kIHBvaW50ZXIgdHlwZXMsIGl0IGlzIGFuIGludGVnZXIsIGZvciBjaGFyYWN0ZXIgdHlwZXMsCitpdCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nLCBmb3IgY2hhcmFjdGVyIHBvaW50ZXIgdHlwZXMgaXQKK2lzIGEgUHl0aG9uIHN0cmluZyBvciB1bmljb2RlIHN0cmluZy4KKworV2hlbiB0aGUgXGNvZGV7dmFsdWV9IGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbSBhIGN0eXBlcyBpbnN0YW5jZSwKK3VzdWFsbHkgYSBuZXcgb2JqZWN0IGlzIHJldHVybmVkIGVhY2ggdGltZS4gIFxjb2Rle2N0eXBlc30gZG9lcyBcZW1waHtub3R9CitpbXBsZW1lbnQgb3JpZ2luYWwgb2JqZWN0IHJldHVybiwgYWx3YXlzIGEgbmV3IG9iamVjdCBpcworY29uc3RydWN0ZWQuICBUaGUgc2FtZSBpcyB0cnVlIGZvciBhbGwgb3RoZXIgY3R5cGVzIG9iamVjdAoraW5zdGFuY2VzLgorXGVuZHttZW1iZXJkZXNjfQorCitGdW5kYW1lbnRhbCBkYXRhIHR5cGVzLCB3aGVuIHJldHVybmVkIGFzIGZvcmVpZ24gZnVuY3Rpb24gY2FsbAorcmVzdWx0cywgb3IsIGZvciBleGFtcGxlLCBieSByZXRyaWV2aW5nIHN0cnVjdHVyZSBmaWVsZCBtZW1iZXJzIG9yCithcnJheSBpdGVtcywgYXJlIHRyYW5zcGFyZW50bHkgY29udmVydGVkIHRvIG5hdGl2ZSBQeXRob24gdHlwZXMuICBJbgorb3RoZXIgd29yZHMsIGlmIGEgZm9yZWlnbiBmdW5jdGlvbiBoYXMgYSBcbWVtYmVye3Jlc3R5cGV9IG9mIFxjbGFzc3tje1xffWNoYXJ7XF99cH0sCit5b3Ugd2lsbCBhbHdheXMgcmVjZWl2ZSBhIFB5dGhvbiBzdHJpbmcsIFxlbXBoe25vdH0gYSBcY2xhc3N7Y3tcX31jaGFye1xffXB9CitpbnN0YW5jZS4KKworU3ViY2xhc3NlcyBvZiBmdW5kYW1lbnRhbCBkYXRhIHR5cGVzIGRvIFxlbXBoe25vdH0gaW5oZXJpdCB0aGlzIGJlaGF2aW91ci4KK1NvLCBpZiBhIGZvcmVpZ24gZnVuY3Rpb25zIFxtZW1iZXJ7cmVzdHlwZX0gaXMgYSBzdWJjbGFzcyBvZiBcY2xhc3N7Y3tcX312b2lke1xffXB9LAoreW91IHdpbGwgcmVjZWl2ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIHN1YmNsYXNzIGZyb20gdGhlIGZ1bmN0aW9uIGNhbGwuCitPZiBjb3Vyc2UsIHlvdSBjYW4gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgcG9pbnRlciBieSBhY2Nlc3NpbmcgdGhlCitcY29kZXt2YWx1ZX0gYXR0cmlidXRlLgorCitUaGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGN0eXBlcyBkYXRhIHR5cGVzOgorCitcYmVnaW57Y2xhc3NkZXNjKn17Y19ieXRlfQorUmVwcmVzZW50cyB0aGUgQyBzaWduZWQgY2hhciBkYXRhdHlwZSwgYW5kIGludGVycHJldHMgdGhlIHZhbHVlIGFzCitzbWFsbCBpbnRlZ2VyLiBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbiBvcHRpb25hbCBpbnRlZ2VyCitpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfY2hhcn0KK1JlcHJlc2VudHMgdGhlIEMgY2hhciBkYXRhdHlwZSwgYW5kIGludGVycHJldHMgdGhlIHZhbHVlIGFzIGEgc2luZ2xlCitjaGFyYWN0ZXIuIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIG9wdGlvbmFsIHN0cmluZyBpbml0aWFsaXplciwKK3RoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBtdXN0IGJlIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfY2hhcl9wfQorUmVwcmVzZW50cyB0aGUgQyBjaGFyICogZGF0YXR5cGUsIHdoaWNoIG11c3QgYmUgYSBwb2ludGVyIHRvIGEKK3plcm8tdGVybWluYXRlZCBzdHJpbmcuIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIGludGVnZXIKK2FkZHJlc3MsIG9yIGEgc3RyaW5nLgorXGVuZHtjbGFzc2Rlc2MqfQorCitcYmVnaW57Y2xhc3NkZXNjKn17Y19kb3VibGV9CitSZXByZXNlbnRzIHRoZSBDIGRvdWJsZSBkYXRhdHlwZS4gVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4KK29wdGlvbmFsIGZsb2F0IGluaXRpYWxpemVyLgorXGVuZHtjbGFzc2Rlc2MqfQorCitcYmVnaW57Y2xhc3NkZXNjKn17Y19mbG9hdH0KK1JlcHJlc2VudHMgdGhlIEMgZG91YmxlIGRhdGF0eXBlLiBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorb3B0aW9uYWwgZmxvYXQgaW5pdGlhbGl6ZXIuCitcZW5ke2NsYXNzZGVzYyp9CisKK1xiZWdpbntjbGFzc2Rlc2MqfXtjX2ludH0KK1JlcHJlc2VudHMgdGhlIEMgc2lnbmVkIGludCBkYXRhdHlwZS4gVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4KK29wdGlvbmFsIGludGVnZXIgaW5pdGlhbGl6ZXI7IG5vIG92ZXJmbG93IGNoZWNraW5nIGlzIGRvbmUuIE9uCitwbGF0Zm9ybXMgd2hlcmUgXGNvZGV7c2l6ZW9mKGludCkgPT0gc2l6ZW9mKGxvbmcpfSBpdCBpcyBhbiBhbGlhcyB0bworXGNsYXNze2N7XF99bG9uZ30uCitcZW5ke2NsYXNzZGVzYyp9CisKK1xiZWdpbntjbGFzc2Rlc2MqfXtjX2ludDh9CitSZXByZXNlbnRzIHRoZSBDIDgtYml0IFxjb2Rle3NpZ25lZCBpbnR9IGRhdGF0eXBlLiBVc3VhbGx5IGFuIGFsaWFzIGZvcgorXGNsYXNze2N7XF99Ynl0ZX0uCitcZW5ke2NsYXNzZGVzYyp9CisKK1xiZWdpbntjbGFzc2Rlc2MqfXtjX2ludDE2fQorUmVwcmVzZW50cyB0aGUgQyAxNi1iaXQgc2lnbmVkIGludCBkYXRhdHlwZS4gVXN1YWxseSBhbiBhbGlhcyBmb3IKK1xjbGFzc3tje1xffXNob3J0fS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfaW50MzJ9CitSZXByZXNlbnRzIHRoZSBDIDMyLWJpdCBzaWduZWQgaW50IGRhdGF0eXBlLiBVc3VhbGx5IGFuIGFsaWFzIGZvcgorXGNsYXNze2N7XF99aW50fS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfaW50NjR9CitSZXByZXNlbnRzIHRoZSBDIDY0LWJpdCBcY29kZXtzaWduZWQgaW50fSBkYXRhdHlwZS4gVXN1YWxseSBhbiBhbGlhcworZm9yIFxjbGFzc3tje1xffWxvbmdsb25nfS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfbG9uZ30KK1JlcHJlc2VudHMgdGhlIEMgXGNvZGV7c2lnbmVkIGxvbmd9IGRhdGF0eXBlLiBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfbG9uZ2xvbmd9CitSZXByZXNlbnRzIHRoZSBDIFxjb2Rle3NpZ25lZCBsb25nIGxvbmd9IGRhdGF0eXBlLiBUaGUgY29uc3RydWN0b3IgYWNjZXB0cworYW4gb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2Nfc2hvcnR9CitSZXByZXNlbnRzIHRoZSBDIFxjb2Rle3NpZ25lZCBzaG9ydH0gZGF0YXR5cGUuIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuCitvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgorXGVuZHtjbGFzc2Rlc2MqfQorCitcYmVnaW57Y2xhc3NkZXNjKn17Y19zaXplX3R9CitSZXByZXNlbnRzIHRoZSBDIFxjb2Rle3NpemV7XF99dH0gZGF0YXR5cGUuCitcZW5ke2NsYXNzZGVzYyp9CisKK1xiZWdpbntjbGFzc2Rlc2MqfXtjX3VieXRlfQorUmVwcmVzZW50cyB0aGUgQyBcY29kZXt1bnNpZ25lZCBjaGFyfSBkYXRhdHlwZSwgaXQgaW50ZXJwcmV0cyB0aGUKK3ZhbHVlIGFzIHNtYWxsIGludGVnZXIuIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIG9wdGlvbmFsCitpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgorXGVuZHtjbGFzc2Rlc2MqfQorCitcYmVnaW57Y2xhc3NkZXNjKn17Y191aW50fQorUmVwcmVzZW50cyB0aGUgQyBcY29kZXt1bnNpZ25lZCBpbnR9IGRhdGF0eXBlLiBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4gT24KK3BsYXRmb3JtcyB3aGVyZSBcY29kZXtzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZyl9IGl0IGlzIGFuIGFsaWFzIGZvcgorXGNsYXNze2N7XF99dWxvbmd9LgorXGVuZHtjbGFzc2Rlc2MqfQorCitcYmVnaW57Y2xhc3NkZXNjKn17Y191aW50OH0KK1JlcHJlc2VudHMgdGhlIEMgOC1iaXQgdW5zaWduZWQgaW50IGRhdGF0eXBlLiBVc3VhbGx5IGFuIGFsaWFzIGZvcgorXGNsYXNze2N7XF99dWJ5dGV9LgorXGVuZHtjbGFzc2Rlc2MqfQorCitcYmVnaW57Y2xhc3NkZXNjKn17Y191aW50MTZ9CitSZXByZXNlbnRzIHRoZSBDIDE2LWJpdCB1bnNpZ25lZCBpbnQgZGF0YXR5cGUuIFVzdWFsbHkgYW4gYWxpYXMgZm9yCitcY2xhc3N7Y3tcX311c2hvcnR9LgorXGVuZHtjbGFzc2Rlc2MqfQorCitcYmVnaW57Y2xhc3NkZXNjKn17Y191aW50MzJ9CitSZXByZXNlbnRzIHRoZSBDIDMyLWJpdCB1bnNpZ25lZCBpbnQgZGF0YXR5cGUuIFVzdWFsbHkgYW4gYWxpYXMgZm9yCitcY2xhc3N7Y3tcX311aW50fS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfdWludDY0fQorUmVwcmVzZW50cyB0aGUgQyA2NC1iaXQgdW5zaWduZWQgaW50IGRhdGF0eXBlLiBVc3VhbGx5IGFuIGFsaWFzIGZvcgorXGNsYXNze2N7XF99dWxvbmdsb25nfS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfdWxvbmd9CitSZXByZXNlbnRzIHRoZSBDIFxjb2Rle3Vuc2lnbmVkIGxvbmd9IGRhdGF0eXBlLiBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2NfdWxvbmdsb25nfQorUmVwcmVzZW50cyB0aGUgQyBcY29kZXt1bnNpZ25lZCBsb25nIGxvbmd9IGRhdGF0eXBlLiBUaGUgY29uc3RydWN0b3IKK2FjY2VwdHMgYW4gb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMKK2RvbmUuCitcZW5ke2NsYXNzZGVzYyp9CisKK1xiZWdpbntjbGFzc2Rlc2MqfXtjX3VzaG9ydH0KK1JlcHJlc2VudHMgdGhlIEMgXGNvZGV7dW5zaWduZWQgc2hvcnR9IGRhdGF0eXBlLiBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2Nfdm9pZF9wfQorUmVwcmVzZW50cyB0aGUgQyBcY29kZXt2b2lkICp9IHR5cGUuIFRoZSB2YWx1ZSBpcyByZXByZXNlbnRlZCBhcworaW50ZWdlci4gVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplci4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2Nfd2NoYXJ9CitSZXByZXNlbnRzIHRoZSBDIFxjb2Rle3djaGFye1xffXR9IGRhdGF0eXBlLCBhbmQgaW50ZXJwcmV0cyB0aGUgdmFsdWUgYXMgYQorc2luZ2xlIGNoYXJhY3RlciB1bmljb2RlIHN0cmluZy4gVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4KK29wdGlvbmFsIHN0cmluZyBpbml0aWFsaXplciwgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIG11c3QgYmUKK2V4YWN0bHkgb25lIGNoYXJhY3Rlci4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e2Nfd2NoYXJfcH0KK1JlcHJlc2VudHMgdGhlIEMgXGNvZGV7d2NoYXJ7XF99dCAqfSBkYXRhdHlwZSwgd2hpY2ggbXVzdCBiZSBhIHBvaW50ZXIgdG8KK2EgemVyby10ZXJtaW5hdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZy4gVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMKK2FuIGludGVnZXIgYWRkcmVzcywgb3IgYSBzdHJpbmcuCitcZW5ke2NsYXNzZGVzYyp9CisKK1xiZWdpbntjbGFzc2Rlc2MqfXtIUkVTVUxUfQorV2luZG93cyBvbmx5OiBSZXByZXNlbnRzIGEgXGNsYXNze0hSRVNVTFR9IHZhbHVlLCB3aGljaCBjb250YWlucyBzdWNjZXNzCitvciBlcnJvciBpbmZvcm1hdGlvbiBmb3IgYSBmdW5jdGlvbiBvciBtZXRob2QgY2FsbC4KK1xlbmR7Y2xhc3NkZXNjKn0KKworXGJlZ2lue2NsYXNzZGVzYyp9e3B5X29iamVjdH0KK1JlcHJlc2VudHMgdGhlIEMgXGNvZGV7UHlPYmplY3QgKn0gZGF0YXR5cGUuCitcZW5ke2NsYXNzZGVzYyp9CisKK1RoZSBcY29kZXtjdHlwZXMud2ludHlwZXN9IG1vZHVsZSBwcm92aWRlcyBxdWl0ZSBzb21lIG90aGVyIFdpbmRvd3MKK3NwZWNpZmljIGRhdGEgdHlwZXMsIGZvciBleGFtcGxlIFxjb2Rle0hXTkR9LCBcY29kZXtXUEFSQU19LCBvciBcY29kZXtEV09SRH0uCitTb21lIHVzZWZ1bCBzdHJ1Y3R1cmVzIGxpa2UgXGNvZGV7TVNHfSBvciBcY29kZXtSRUNUfSBhcmUgYWxzbyBkZWZpbmVkLgorCisKK1xzdWJzdWJzZWN0aW9ue1N0cnVjdHVyZWQgZGF0YSB0eXBlc1xsYWJlbHtjdHlwZXMtc3RydWN0dXJlZC1kYXRhLXR5cGVzfX0KKworXGJlZ2lue2NsYXNzZGVzY317VW5pb259eyphcmdzLCAqKmt3fQorQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgdW5pb25zIGluIG5hdGl2ZSBieXRlIG9yZGVyLgorXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbntjbGFzc2Rlc2N9e0JpZ0VuZGlhblN0cnVjdHVyZX17KmFyZ3MsICoqa3d9CitBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBzdHJ1Y3R1cmVzIGluIFxlbXBoe2JpZyBlbmRpYW59IGJ5dGUgb3JkZXIuCitcZW5ke2NsYXNzZGVzY30KKworXGJlZ2lue2NsYXNzZGVzY317TGl0dGxlRW5kaWFuU3RydWN0dXJlfXsqYXJncywgKiprd30KK0Fic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHN0cnVjdHVyZXMgaW4gXGVtcGh7bGl0dGxlIGVuZGlhbn0gYnl0ZSBvcmRlci4KK1xlbmR7Y2xhc3NkZXNjfQorCitTdHJ1Y3R1cmVzIHdpdGggbm9uLW5hdGl2ZSBieXRlIG9yZGVyIGNhbm5vdCBjb250YWluIHBvaW50ZXIgdHlwZQorZmllbGRzLCBvciBhbnkgb3RoZXIgZGF0YSB0eXBlcyBjb250YWluaW5nIHBvaW50ZXIgdHlwZSBmaWVsZHMuCisKK1xiZWdpbntjbGFzc2Rlc2N9e1N0cnVjdHVyZX17KmFyZ3MsICoqa3d9CitBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBzdHJ1Y3R1cmVzIGluIFxlbXBoe25hdGl2ZX0gYnl0ZSBvcmRlci4KK1xlbmR7Y2xhc3NkZXNjfQorCitDb25jcmV0ZSBzdHJ1Y3R1cmUgYW5kIHVuaW9uIHR5cGVzIG11c3QgYmUgY3JlYXRlZCBieSBzdWJjbGFzc2luZyBvbmUKK29mIHRoZXNlIHR5cGVzLCBhbmQgYXQgbGVhc3QgZGVmaW5lIGEgXG1lbWJlcnt7XF99ZmllbGRze1xffX0gY2xhc3MgdmFyaWFibGUuCitcY29kZXtjdHlwZXN9IHdpbGwgY3JlYXRlIGRlc2NyaXB0b3JzIHdoaWNoIGFsbG93IHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlCitmaWVsZHMgYnkgZGlyZWN0IGF0dHJpYnV0ZSBhY2Nlc3Nlcy4gIFRoZXNlIGFyZSB0aGUKKworXGJlZ2lue21lbWJlcmRlc2N9e19maWVsZHNffQorQSBzZXF1ZW5jZSBkZWZpbmluZyB0aGUgc3RydWN0dXJlIGZpZWxkcy4gIFRoZSBpdGVtcyBtdXN0IGJlCisyLXR1cGxlcyBvciAzLXR1cGxlcy4gIFRoZSBmaXJzdCBpdGVtIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCwKK3RoZSBzZWNvbmQgaXRlbSBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIGZpZWxkOyBpdCBjYW4gYmUgYW55CitjdHlwZXMgZGF0YSB0eXBlLgorCitGb3IgaW50ZWdlciB0eXBlIGZpZWxkcywgYSB0aGlyZCBvcHRpb25hbCBpdGVtIGNhbiBiZSBnaXZlbi4gIEl0CittdXN0IGJlIGEgc21hbGwgcG9zaXRpdmUgaW50ZWdlciBkZWZpbmluZyB0aGUgYml0IHdpZHRoIG9mIHRoZQorZmllbGQuCisKK0ZpZWxkIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBvbmUgc3RydWN0dXJlIG9yIHVuaW9uLiAgVGhpcyBpcworbm90IGNoZWNrZWQsIG9ubHkgb25lIGZpZWxkIGNhbiBiZSBhY2Nlc3NlZCB3aGVuIG5hbWVzIGFyZQorcmVwZWF0ZWQuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgXG1lbWJlcnt7XF99ZmllbGRze1xffX0gY2xhc3MgdmFyaWFibGUgXGVtcGh7YWZ0ZXJ9Cit0aGUgY2xhc3Mgc3RhdGVtZW50IHRoYXQgZGVmaW5lcyB0aGUgU3RydWN0dXJlIHN1YmNsYXNzLCB0aGlzCithbGxvd3MgdG8gY3JlYXRlIGRhdGEgdHlwZXMgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHJlZmVyZW5jZQordGhlbXNlbHZlczoKK1xiZWdpbnt2ZXJiYXRpbX0KK2NsYXNzIExpc3QoU3RydWN0dXJlKToKKyAgICBwYXNzCitMaXN0Ll9maWVsZHNfID0gWygicG5leHQiLCBQT0lOVEVSKExpc3QpKSwKKyAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgXQorXGVuZHt2ZXJiYXRpbX0KKworVGhlIFxtZW1iZXJ7e1xffWZpZWxkc3tcX319IGNsYXNzIHZhcmlhYmxlIG11c3QsIGhvd2V2ZXIsIGJlIGRlZmluZWQgYmVmb3JlCit0aGUgdHlwZSBpcyBmaXJzdCB1c2VkIChhbiBpbnN0YW5jZSBpcyBjcmVhdGVkLCBcY29kZXtzaXplb2YoKX0gaXMKK2NhbGxlZCBvbiBpdCwgYW5kIHNvIG9uKS4gIExhdGVyIGFzc2lnbm1lbnRzIHRvIHRoZSBcbWVtYmVye3tcX31maWVsZHN7XF99fQorY2xhc3MgdmFyaWFibGUgd2lsbCByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvci4KKworU3RydWN0dXJlIGFuZCB1bmlvbiBzdWJjbGFzcyBjb25zdHJ1Y3RvcnMgYWNjZXB0IGJvdGggcG9zaXRpb25hbAorYW5kIG5hbWVkIGFyZ3VtZW50cy4gIFBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGluaXRpYWxpemUKK3RoZSBmaWVsZHMgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBhcHBlYXIgaW4gdGhlIFxtZW1iZXJ7e1xffWZpZWxkc3tcX319CitkZWZpbml0aW9uLCBuYW1lZCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGRzIHdpdGgKK3RoZSBjb3JyZXNwb25kaW5nIG5hbWUuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGRlZmluZWQgc3ViLXN1YmNsYXNzZXMgb2Ygc3RydWN0dXJlIHR5cGVzLCB0aGV5Citpbmhlcml0IHRoZSBmaWVsZHMgb2YgdGhlIGJhc2UgY2xhc3MgcGx1cyB0aGUgXG1lbWJlcnt7XF99ZmllbGRze1xffX0gZGVmaW5lZAoraW4gdGhlIHN1Yi1zdWJjbGFzcywgaWYgYW55LgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317X3BhY2tffQorQW4gb3B0aW9uYWwgc21hbGwgaW50ZWdlciB0aGF0IGFsbG93cyB0byBvdmVycmlkZSB0aGUgYWxpZ25tZW50IG9mCitzdHJ1Y3R1cmUgZmllbGRzIGluIHRoZSBpbnN0YW5jZS4gIFxtZW1iZXJ7e1xffXBhY2t7XF99fSBtdXN0IGFscmVhZHkgYmUKK2RlZmluZWQgd2hlbiBcbWVtYmVye3tcX31maWVsZHN7XF99fSBpcyBhc3NpZ25lZCwgb3RoZXJ3aXNlIGl0IHdpbGwgaGF2ZSBubworZWZmZWN0LgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317X2Fub255bW91c199CitBbiBvcHRpb25hbCBzZXF1ZW5jZSB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiB1bm5hbWVkIChhbm9ueW1vdXMpCitmaWVsZHMuICBcY29kZXt7XF99YW5vbnltb3Vze1xffX0gbXVzdCBiZSBhbHJlYWR5IGRlZmluZWQgd2hlbiBcbWVtYmVye3tcX31maWVsZHN7XF99fQoraXMgYXNzaWduZWQsIG90aGVyd2lzZSBpdCB3aWxsIGhhdmUgbm8gZWZmZWN0LgorCitUaGUgZmllbGRzIGxpc3RlZCBpbiB0aGlzIHZhcmlhYmxlIG11c3QgYmUgc3RydWN0dXJlIG9yIHVuaW9uIHR5cGUKK2ZpZWxkcy4gIFxjb2Rle2N0eXBlc30gd2lsbCBjcmVhdGUgZGVzY3JpcHRvcnMgaW4gdGhlIHN0cnVjdHVyZSB0eXBlCit0aGF0IGFsbG93cyB0byBhY2Nlc3MgdGhlIG5lc3RlZCBmaWVsZHMgZGlyZWN0bHksIHdpdGhvdXQgdGhlIG5lZWQKK3RvIGNyZWF0ZSB0aGUgc3RydWN0dXJlIG9yIHVuaW9uIGZpZWxkLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgdHlwZSAoV2luZG93cyk6CitcYmVnaW57dmVyYmF0aW19CitjbGFzcyBfVShVbmlvbik6CisgICAgX2ZpZWxkc18gPSBbKCJscHRkZXNjIiwgUE9JTlRFUihUWVBFREVTQykpLAorICAgICAgICAgICAgICAgICgibHBhZGVzYyIsIFBPSU5URVIoQVJSQVlERVNDKSksCisgICAgICAgICAgICAgICAgKCJocmVmdHlwZSIsIEhSRUZUWVBFKV0KKworY2xhc3MgVFlQRURFU0MoU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoInUiLCBfVSksCisgICAgICAgICAgICAgICAgKCJ2dCIsIFZBUlRZUEUpXQorCisgICAgX2Fub255bW91c18gPSAoInUiLCkKK1xlbmR7dmVyYmF0aW19CisKK1RoZSBcY29kZXtUWVBFREVTQ30gc3RydWN0dXJlIGRlc2NyaWJlcyBhIENPTSBkYXRhIHR5cGUsIHRoZSBcY29kZXt2dH0KK2ZpZWxkIHNwZWNpZmllcyB3aGljaCBvbmUgb2YgdGhlIHVuaW9uIGZpZWxkcyBpcyB2YWxpZC4gIFNpbmNlIHRoZQorXGNvZGV7dX0gZmllbGQgaXMgZGVmaW5lZCBhcyBhbm9ueW1vdXMgZmllbGQsIGl0IGlzIG5vdyBwb3NzaWJsZSB0bworYWNjZXNzIHRoZSBtZW1iZXJzIGRpcmVjdGx5IG9mZiB0aGUgVFlQRURFU0MgaW5zdGFuY2UuCitcY29kZXt0ZC5scHRkZXNjfSBhbmQgXGNvZGV7dGQudS5scHRkZXNjfSBhcmUgZXF1aXZhbGVudCwgYnV0IHRoZSBmb3JtZXIKK2lzIGZhc3RlciBzaW5jZSBpdCBkb2VzIG5vdCBuZWVkIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSB1bmlvbgoraW5zdGFuY2U6CitcYmVnaW57dmVyYmF0aW19Cit0ZCA9IFRZUEVERVNDKCkKK3RkLnZ0ID0gVlRfUFRSCit0ZC5scHRkZXNjID0gUE9JTlRFUihzb21lX3R5cGUpCit0ZC51LmxwdGRlc2MgPSBQT0lOVEVSKHNvbWVfdHlwZSkKK1xlbmR7dmVyYmF0aW19CitcZW5ke21lbWJlcmRlc2N9CisKK0l0IGlzIHBvc3NpYmxlIHRvIGRlZmluZWQgc3ViLXN1YmNsYXNzZXMgb2Ygc3RydWN0dXJlcywgdGhleSBpbmhlcml0Cit0aGUgZmllbGRzIG9mIHRoZSBiYXNlIGNsYXNzLiAgSWYgdGhlIHN1YmNsYXNzIGRlZmluaXRpb24gaGFzIGEKK3NlcGFyYXRlIFxtZW1iZXJ7e1xffWZpZWxkc3tcX319IHZhcmlhYmxlLCB0aGUgZmllbGRzIHNwZWNpZmllZCBpbiB0aGlzIGFyZQorYXBwZW5kZWQgdG8gdGhlIGZpZWxkcyBvZiB0aGUgYmFzZSBjbGFzcy4KKworU3RydWN0dXJlIGFuZCB1bmlvbiBjb25zdHJ1Y3RvcnMgYWNjZXB0IGJvdGggcG9zaXRpb25hbCBhbmQKK2tleXdvcmQgYXJndW1lbnRzLiAgUG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBtZW1iZXIKK2ZpZWxkcyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBhcHBlYXIgaW4gXG1lbWJlcnt7XF99ZmllbGRze1xffX0uICBLZXl3b3JkCithcmd1bWVudHMgaW4gdGhlIGNvbnN0cnVjdG9yIGFyZSBpbnRlcnByZXRlZCBhcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMsCitzbyB0aGV5IHdpbGwgaW5pdGlhbGl6ZSBcbWVtYmVye3tcX31maWVsZHN7XF99fSB3aXRoIHRoZSBzYW1lIG5hbWUsIG9yIGNyZWF0ZSBuZXcKK2F0dHJpYnV0ZXMgZm9yIG5hbWVzIG5vdCBwcmVzZW50IGluIFxtZW1iZXJ7e1xffWZpZWxkc3tcX319LgorCisKK1xzdWJzdWJzZWN0aW9ue0FycmF5cyBhbmQgcG9pbnRlcnNcbGFiZWx7Y3R5cGVzLWFycmF5cy1wb2ludGVyc319CisKK1hYWAorCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmN0eXBlc3JlZi50ZXggYi9Eb2MvbGliL2xpYmN0eXBlc3JlZi50ZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkOTUwZjQuLjAwMDAwMDAKLS0tIGEvRG9jL2xpYi9saWJjdHlwZXNyZWYudGV4CisrKyAvZGV2L251bGwKQEAgLTEsNDU3ICswLDAgQEAKLVxzdWJzZWN0aW9ue2N0eXBlcyByZWZlcmVuY2VcbGFiZWx7Y3R5cGVzLXJlZmVyZW5jZX19Ci0KLSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKLSUgZnVuY3Rpb25zCi1cc3Vic3Vic2VjdGlvbntjdHlwZXMgZnVuY3Rpb25zfQotCi1cYmVnaW57ZnVuY2Rlc2N9e2FkZHJlc3NvZn17b2JqfQotUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGJ1ZmZlciBhcyBpbnRlZ2VyLiAgXHZhcntvYmp9IG11c3QKLWJlIGFuIGluc3RhbmNlIG9mIGEgY3R5cGVzIHR5cGUuCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e2FsaWdubWVudH17b2JqX29yX3R5cGV9Ci1SZXR1cm5zIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9mIGEgY3R5cGVzIHR5cGUuCi1cdmFye29ial9vcl90eXBlfSBtdXN0IGJlIGEgY3R5cGVzIHR5cGUgb3IgYW4gaW5zdGFuY2UuCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZXhjY2xhc3NkZXNjfXtBcmd1bWVudEVycm9yfXt9Ci1UaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhIGZvcmVpZ24gZnVuY3Rpb24gY2FsbCBjYW5ub3QgY29udmVydAotb25lIG9mIHRoZSBwYXNzZWQgYXJndW1lbnRzLgotXGVuZHtleGNjbGFzc2Rlc2N9Ci0KLVxiZWdpbntmdW5jZGVzY317YnlyZWZ9e29ian0KLVJldHVybnMgYSBsaWdodC13ZWlnaHQgcG9pbnRlciB0byBcdmFye29ian0sIHdoaWNoIG11c3QgYmUgYW4gaW5zdGFuY2UKLW9mIGEgY3R5cGVzIHR5cGUuICBUaGUgcmV0dXJuZWQgb2JqZWN0IGNhbiBvbmx5IGJlIHVzZWQgYXMgYSBmb3JlaWduCi1mdW5jdGlvbiBjYWxsIHBhcmFtZXRlci4gIEl0IGJlaGF2ZXMgc2ltaWxhciB0byBcY29kZXtwb2ludGVyKG9iail9LAotYnV0IHRoZSBjb25zdHJ1Y3Rpb24gaXMgYSBsb3QgZmFzdGVyLgotXGVuZHtmdW5jZGVzY30KLQotXGJlZ2lue2Z1bmNkZXNjfXtjYXN0fXtvYmosIHR5cGV9Ci1UaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIGNhc3Qgb3BlcmF0b3IgaW4gQy4gIEl0IHJldHVybnMgYSBuZXcKLWluc3RhbmNlIG9mIFx2YXJ7dHlwZX0gd2hpY2ggcG9pbnRzIHRvIHRoZSBzYW1lIG1lbW9yeSBibG9jayBhcwotXGNvZGV7b2JqfS4gIFxjb2Rle3R5cGV9IG11c3QgYmUgYSBwb2ludGVyIHR5cGUsIGFuZCBcY29kZXtvYmp9Ci0gbXVzdCBiZSBhbiBvYmplY3QgdGhhdCBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYSBwb2ludGVyLgotXGVuZHtmdW5jZGVzY30KLQotJSBYWFggc2VwYXJhdGUgc2VjdGlvbiBmb3IgQ0ZVTkNUWVBFLCBXSU5GVU5DVFlQRSwgUFlGVU5DVFlQRT8KLQotXGJlZ2lue2Z1bmNkZXNjfXtDRlVOQ1RZUEV9e3Jlc3R5cGUsICphcmd0eXBlc30KLVRoaXMgaXMgYSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHByb3RvdHlwZS4gIFRoZQotZnVuY3Rpb24gcHJvdG90eXBlIGRlc2NyaWJlcyBhIGZ1bmN0aW9uIHRoYXQgaGFzIGEgcmVzdWx0IHR5cGUgb2YKLVxjb2Rle3Jlc3R5cGV9LCBhbmQgYWNjZXB0cyBhcmd1bWVudHMgYXMgc3BlY2lmaWVkIGJ5IFxjb2Rle2FyZ3R5cGVzfS4KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IHNldmVyYWwga2luZHMgb2YKLWZ1bmN0aW9ucywgZGVwZW5kaW5nIG9uIGhvdyB0aGUgcHJvdG90eXBlIGlzIGNhbGxlZC4KLQotVGhlIHByb3RvdHlwZXMgcmV0dXJuZWQgYnkgXGNvZGV7Q0ZVTkNUWVBFfSBvciBcY29kZXtQWUZVTkNUWVBFfQotY3JlYXRlIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGUgc3RhbmRhcmQgQyBjYWxsaW5nIGNvbnZlbnRpb24sCi1wcm90b3R5cGVzIHJldHVybmVkIGZyb20gXGNvZGV7V0lORlVOQ1RZUEV9IChvbiBXaW5kb3dzKSB1c2UgdGhlCi1cY29kZXtfX3N0ZGNhbGx9IGNhbGxpbmcgY29udmVudGlvbi4KLQotRnVuY3Rpb25zIGNyZWF0ZWQgYnkgY2FsbGluZyB0aGUgXGNvZGV7Q0ZVTkNUWVBFfSBhbmQKLVxjb2Rle1dJTkZVTkNUWVBFfSBwcm90b3R5cGVzIHJlbGVhc2UgdGhlIFB5dGhvbiBHSUwKLWJlZm9yZSBlbnRlcmluZyB0aGUgZm9yZWlnbiBmdW5jdGlvbiwgYW5kIGFjcXVpcmUgaXQgYmFjayBhZnRlcgotbGVhdmluZyB0aGUgZnVuY3Rpb24gY29kZS4KLQotJSBYWFggZGlmZmVyZW5jZXMgYmV0d2VlbiBDRlVOQ1RZUEUgLyBXSU5GVU5DVFlQRSAvIFBZRlVOQ1RZUEUKLQotXGVuZHtmdW5jZGVzY30KLQotXGJlZ2lue2Z1bmNkZXNjfXtjcmVhdGVfc3RyaW5nX2J1ZmZlcn17aW5pdF9vcl9zaXplXG9wdGlvbmFseywgc2l6ZX19Ci1UaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBtdXRhYmxlIGNoYXJhY3RlciBidWZmZXIuICBUaGUgcmV0dXJuZWQgb2JqZWN0Ci1pcyBhIGN0eXBlcyBhcnJheSBvZiBcY29kZXtjX2NoYXJ9LgotCi1cdmFye2luaXRfb3Jfc2l6ZX0gbXVzdCBiZSBhbiBpbnRlZ2VyIHdoaWNoIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUKLWFycmF5LCBvciBhIHN0cmluZyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYXJyYXkgaXRlbXMuCi0KLUlmIGEgc3RyaW5nIGlzIHNwZWNpZmllZCBhcyBmaXJzdCBhcmd1bWVudCwgdGhlIGJ1ZmZlciBpcyBtYWRlIG9uZQotaXRlbSBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgc28gdGhhdCB0aGUgbGFzdCBlbGVtZW50IGluCi10aGUgYXJyYXkgaXMgYSBOVUwgdGVybWluYXRpb24gY2hhcmFjdGVyLiAgQW4gaW50ZWdlciBjYW4gYmUgcGFzc2VkIGFzCi1zZWNvbmQgYXJndW1lbnQgd2hpY2ggYWxsb3dzIHRvIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGFycmF5IGlmIHRoZQotbGVuZ3RoIG9mIHRoZSBzdHJpbmcgc2hvdWxkIG5vdCBiZSB1c2VkLgotCi1JZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgdW5pY29kZSBzdHJpbmcsIGl0IGlzIGNvbnZlcnRlZCBpbnRvIGFuCi04LWJpdCBzdHJpbmcgYWNjb3JkaW5nIHRvIGN0eXBlcyBjb252ZXJzaW9uIHJ1bGVzLgotXGVuZHtmdW5jZGVzY30KLQotXGJlZ2lue2Z1bmNkZXNjfXtjcmVhdGVfdW5pY29kZV9idWZmZXJ9e2luaXRfb3Jfc2l6ZVxvcHRpb25hbHssIHNpemV9fQotVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbXV0YWJsZSB1bmljb2RlIGNoYXJhY3RlciBidWZmZXIuICBUaGUKLXJldHVybmVkIG9iamVjdCBpcyBhIGN0eXBlcyBhcnJheSBvZiBcY29kZXtjX3djaGFyfS4KLQotXHZhcntpbml0X29yX3NpemV9IG11c3QgYmUgYW4gaW50ZWdlciB3aGljaCBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlCi1hcnJheSwgb3IgYSB1bmljb2RlIHN0cmluZyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYXJyYXkKLWl0ZW1zLgotCi1JZiBhIHVuaWNvZGUgc3RyaW5nIGlzIHNwZWNpZmllZCBhcyBmaXJzdCBhcmd1bWVudCwgdGhlIGJ1ZmZlciBpcyBtYWRlCi1vbmUgaXRlbSBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgc28gdGhhdCB0aGUgbGFzdCBlbGVtZW50Ci1pbiB0aGUgYXJyYXkgaXMgYSBOVUwgdGVybWluYXRpb24gY2hhcmFjdGVyLiAgQW4gaW50ZWdlciBjYW4gYmUgcGFzc2VkCi1hcyBzZWNvbmQgYXJndW1lbnQgd2hpY2ggYWxsb3dzIHRvIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGFycmF5IGlmCi10aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgc2hvdWxkIG5vdCBiZSB1c2VkLgotCi1JZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgOC1iaXQgc3RyaW5nLCBpdCBpcyBjb252ZXJ0ZWQgaW50byBhbgotdW5pY29kZSBzdHJpbmcgYWNjb3JkaW5nIHRvIGN0eXBlcyBjb252ZXJzaW9uIHJ1bGVzLgotXGVuZHtmdW5jZGVzY30KLQotXGJlZ2lue2Z1bmNkZXNjfXtEbGxDYW5VbmxvYWROb3d9e30KLVdpbmRvd3Mgb25seTogVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgd2hpY2ggYWxsb3dzIHRvIGltcGxlbWVudAotaW5wcm9jZXNzIENPTSBzZXJ2ZXJzIHdpdGggY3R5cGVzLiAgSXQgaXMgY2FsbGVkIGZyb20gdGhlCi1cY29kZXtEbGxDYW5VbmxvYWROb3d9IGZ1bmN0aW9uIHRoYXQgdGhlIFxjb2Rle19jdHlwZXN9Ci1leHRlbnNpb24gZGxsIGV4cG9ydHMuCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e0RsbEdldENsYXNzT2JqZWN0fXt9Ci1XaW5kb3dzIG9ubHk6IFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIHdoaWNoIGFsbG93cyB0byBpbXBsZW1lbnQKLWlucHJvY2VzcyBDT00gc2VydmVycyB3aXRoIGN0eXBlcy4gIEl0IGlzIGNhbGxlZCBmcm9tIHRoZQotXGNvZGV7RGxsR2V0Q2xhc3NPYmplY3R9IGZ1bmN0aW9uIHRoYXQgdGhlIFxjb2Rle19jdHlwZXN9Ci1leHRlbnNpb24gZGxsIGV4cG9ydHMuCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e0Zvcm1hdEVycm9yfXtcb3B0aW9uYWx7Y29kZX19Ci1XaW5kb3dzIG9ubHk6IFJldHVybnMgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvciBjb2RlLiAgSWYgbm8KLWVycm9yIGNvZGUgaXMgc3BlY2lmaWVkLCB0aGUgbGFzdCBlcnJvciBjb2RlIGlzIHVzZWQgYnkgY2FsbGluZyB0aGUKLVdpbmRvd3MgYXBpIGZ1bmN0aW9uIFxjb2Rle0dldExhc3RFcnJvcn0uCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e0dldExhc3RFcnJvcn17fQotV2luZG93cyBvbmx5OiBSZXR1cm5zIHRoZSBsYXN0IGVycm9yIGNvZGUgc2V0IGJ5IFdpbmRvd3MgaW4gdGhlCi1jYWxsaW5nIHRocmVhZC4KLVxlbmR7ZnVuY2Rlc2N9Ci0KLVxiZWdpbntmdW5jZGVzY317bWVtbW92ZX17ZHN0LCBzcmMsIGNvdW50fQotU2FtZSBhcyB0aGUgc3RhbmRhcmQgQyBcY29kZXttZW1tb3ZlfSBsaWJyYXJ5IGZ1bmN0aW9uOiBjb3BpZXMKLVx2YXJ7Y291bnR9IGJ5dGVzIGZyb20gXGNvZGV7c3JjfSB0byBcY29kZXtkc3R9LiAgXGNvZGV7ZHN0fSBhbmQKLVxjb2Rle3NyY30gbXVzdCBiZSBpbnRlZ2VycyBvciBjdHlwZXMgaW5zdGFuY2VzIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBwb2ludGVycy4KLVxlbmR7ZnVuY2Rlc2N9Ci0KLVxiZWdpbntmdW5jZGVzY317bWVtc2V0fXtkc3QsIGMsIGNvdW50fQotU2FtZSBhcyB0aGUgc3RhbmRhcmQgQyBcY29kZXttZW1zZXR9IGxpYnJhcnkgZnVuY3Rpb246IGZpbGxzIHRoZQotbWVtb3J5IGNsb2NrIGF0IGFkZHJlc3MgXGNvZGV7ZHN0fSB3aXRoIFx2YXJ7Y291bnR9IGJ5dGVzIG9mIHZhbHVlCi1cdmFye2N9LiAgXHZhcntkc3R9IG11c3QgYmUgYW4gaW50ZWdlciBzcGVjaWZ5aW5nIGFuIGFkZHJlc3MsIG9yIGEgY3R5cGVzIGluc3RhbmNlLgotXGVuZHtmdW5jZGVzY30KLQotXGJlZ2lue2Z1bmNkZXNjfXtQT0lOVEVSfXt0eXBlfQotVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgY3R5cGVzIHBvaW50ZXIgdHlwZS4KLVBvaW50ZXIgdHlwZXMgYXJlIGNhY2hlZCBhbiByZXVzZWQgaW50ZXJuYWxseSwgc28gY2FsbGluZyB0aGlzCi1mdW5jdGlvbiByZXBlYXRlZGx5IGlzIGNoZWFwLiAgXHZhcnt0eXBlfSBtdXN0IGJlIGEgY3R5cGVzIHR5cGUuCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e3BvaW50ZXJ9e29ian0KLVRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBwb2ludGVyIGluc3RhbmNlLCBwb2ludGluZyB0byBcdmFye29ian0uCi1UaGUgcmV0dXJuZWQgb2JqZWN0IGlzIG9mIHRoZSB0eXBlIFxjb2Rle1BPSU5URVIodHlwZShvYmopKX0uCi0KLU5vdGU6IElmIHlvdSBqdXN0IHdhbnQgdG8gcGFzcyBhIHBvaW50ZXIgdG8gYW4gb2JqZWN0IHRvIGEgZm9yZWlnbgotZnVuY3Rpb24gY2FsbCwgeW91IHNob3VsZCB1c2UgXGNvZGV7YnlyZWYob2JqKX0gd2hpY2ggaXMgbXVjaCBmYXN0ZXIuCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e1BZRlVOQ1RZUEV9e3Jlc3R5cGUsICphcmd0eXBlc30KLVxlbmR7ZnVuY2Rlc2N9Ci0KLVxiZWdpbntmdW5jZGVzY317cHl0aG9uYXBpfXt9Ci1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e3Jlc2l6ZX17b2JqLCBzaXplfQotVGhpcyBmdW5jdGlvbiByZXNpemVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgYnVmZmVyIG9mIFx2YXJ7b2JqfSwgd2hpY2gKLW11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSBjdHlwZXMgdHlwZS4gIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBtYWtlIHRoZQotYnVmZmVyIHNtYWxsZXIgdGhhbiB0aGUgbmF0aXZlIHNpemUgb2YgdGhlIG9iamVjdHMgdHlwZSwgYXMgZ2l2ZW4gYnkKLVxjb2Rle3NpemVvZih0eXBlKG9iaikpfSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlci4KLVxlbmR7ZnVuY2Rlc2N9Ci0KLVxiZWdpbntmdW5jZGVzY317c2V0X2NvbnZlcnNpb25fbW9kZX17ZW5jb2RpbmcsIGVycm9yc30KLVRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcnVsZXMgdGhhdCBjdHlwZXMgb2JqZWN0cyB1c2Ugd2hlbiBjb252ZXJ0aW5nCi1iZXR3ZWVuIDgtYml0IHN0cmluZ3MgYW5kIHVuaWNvZGUgc3RyaW5ncy4gIFx2YXJ7ZW5jb2Rpbmd9IG11c3QgYmUgYQotc3RyaW5nIHNwZWNpZnlpbmcgYW4gZW5jb2RpbmcsIGxpa2UgJ3V0Zi04JyBvciAnbWJjcycsIFx2YXJ7ZXJyb3JzfQotbXVzdCBiZSBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBlcnJvciBoYW5kbGluZyBvbiBlbmNvZGluZy9kZWNvZGluZwotZXJyb3JzLiAgRXhhbXBsZXMgb2YgcG9zc2libGUgdmFsdWVzIGFyZSBgYHN0cmljdCcnLCBgYHJlcGxhY2UnJywgb3IKLWBgaWdub3JlJycuCi0KLVxjb2Rle3NldF9jb252ZXJzaW9uX21vZGV9IHJldHVybnMgYSAyLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHByZXZpb3VzCi1jb252ZXJzaW9uIHJ1bGVzLiAgT24gd2luZG93cywgdGhlIGluaXRpYWwgY29udmVyc2lvbiBydWxlcyBhcmUKLVxjb2RleygnbWJjcycsICdpZ25vcmUnKX0sIG9uIG90aGVyIHN5c3RlbXMgXGNvZGV7KCdhc2NpaScsICdzdHJpY3QnKX0uCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e3NpemVvZn17b2JqX29yX3R5cGV9Ci1SZXR1cm5zIHRoZSBzaXplIGluIGJ5dGVzIG9mIGEgY3R5cGVzIHR5cGUgb3IgaW5zdGFuY2UgbWVtb3J5IGJ1ZmZlci4KLURvZXMgdGhlIHNhbWUgYXMgdGhlIEMgc2l6ZW9mKCkgZnVuY3Rpb24uCi1cZW5ke2Z1bmNkZXNjfQotCi1cYmVnaW57ZnVuY2Rlc2N9e3N0cmluZ19hdH17YWRkcmVzc1xvcHRpb25hbHtzaXplfX0KLVRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RyaW5nIHN0YXJ0aW5nIGF0IG1lbW9yeSBhZGRyZXNzCi1cdmFye2FkZHJlc3N9LiAgSWYgXHZhcntzaXplfSBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgYXMgc2l6ZSwKLW90aGVyd2lzZSB0aGUgc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUgemVyby10ZXJtaW5hdGVkLgotXGVuZHtmdW5jZGVzY30KLQotXGJlZ2lue2Z1bmNkZXNjfXtXaW5FcnJvcn17Y29kZT1Ob25lLCBkZXNjcj1Ob25lfQotV2luZG93cyBvbmx5OiB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSB3b3JzdC1uYW1lZCB0aGluZyBpbgotY3R5cGVzLiAgSXQgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBcY29kZXtXaW5kb3dzRXJyb3J9LiAgSWYgXHZhcntjb2RlfQotaXMgbm90IHNwZWNpZmllZCwgXGNvZGV7R2V0TGFzdEVycm9yfSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHRoZSBlcnJvcgotY29kZS4gIElmIFx2YXJ7ZGVzY3J9IGlzIG5vdCBzcGNpZmllZCwgXHZhcntGb3JtYXRFcnJvcn0gaXMgY2FsbGVkIHRvCi1nZXQgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvci4KLVxlbmR7ZnVuY2Rlc2N9Ci0KLVxiZWdpbntmdW5jZGVzY317V0lORlVOQ1RZUEV9e3Jlc3R5cGUsICphcmd0eXBlc30KLVxlbmR7ZnVuY2Rlc2N9Ci0KLVxiZWdpbntmdW5jZGVzY317d3N0cmluZ19hdH17YWRkcmVzc30KLVRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIHN0YXJ0aW5nIGF0IG1lbW9yeQotYWRkcmVzcyBcdmFye2FkZHJlc3N9IGFzIHVuaWNvZGUgc3RyaW5nLiAgSWYgXHZhcntzaXplfSBpcyBzcGVjaWZpZWQsCi1pdCBpcyB1c2VkIGFzIHNpemUsIG90aGVyd2lzZSB0aGUgc3RyaW5nIGlzIGFzc3VtZWQgdG8gYmUKLXplcm8tdGVybWluYXRlZC4KLVxlbmR7ZnVuY2Rlc2N9Ci0KLSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKLSUgZGF0YSB0eXBlcwotXHN1YnN1YnNlY3Rpb257ZGF0YSB0eXBlc30KLQotY3R5cGVzIGRlZmluZXMgYSBsb3Qgb2YgQyBjb21wYXRpYmxlIGRhdGF0eXBlcywgYW5kIGFsc28gYWxsb3dzIHRvCi1kZWZpbmUgeW91ciBvd24gdHlwZXMuICBBbW9uZyBvdGhlciB0aGluZ3MsIGEgY3R5cGVzIHR5cGUgaW5zdGFuY2UKLWhvbGRzIGEgbWVtb3J5IGJsb2NrIHRoYXQgY29udGFpbnMgQyBjb21wYXRpYmxlIGRhdGEuCi0KLVxiZWdpbntjbGFzc2Rlc2N9e19jdHlwZXMuX0NEYXRhfXt9Ci1UaGlzIG5vbi1wdWJsaWMgY2xhc3MgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGN0eXBlcyBkYXRhIHR5cGVzLiAgSXQKLWlzIG1lbnRpb25lZCBoZXJlIGJlY2F1c2UgaXQgY29udGFpbnMgdGhlIGNvbW1vbiBtZXRob2RzIG9mIHRoZSBjdHlwZXMKLWRhdGEgdHlwZXMuCi1cZW5ke2NsYXNzZGVzY30KLQotQ29tbW9uIG1ldGhvZHMgb2YgY3R5cGVzIGRhdGEgdHlwZXMsIHRoZXNlIGFyZSBhbGwgY2xhc3MgbWV0aG9kcyAodG8KLWJlIGV4YWN0LCB0aGV5IGFyZSBtZXRob2RzIG9mIHRoZSBtZXRhY2xhc3MpOgotCi1cYmVnaW57bWV0aG9kZGVzY317ZnJvbV9hZGRyZXNzfXthZGRyZXNzfQotVGhpcyBtZXRob2QgcmV0dXJucyBhIGN0eXBlcyB0eXBlIGluc3RhbmNlIHVzaW5nIHRoZSBtZW1vcnkgc3BlY2lmaWVkCi1ieSBcY29kZXthZGRyZXNzfS4gCi1cZW5ke21ldGhvZGRlc2N9Ci0KLVxiZWdpbnttZXRob2RkZXNjfXtmcm9tX3BhcmFtfXtvYmp9Ci1UaGlzIG1ldGhvZCBhZGFwdHMgXGNvZGV7b2JqfSB0byBhIGN0eXBlcyB0eXBlLgotXGVuZHttZXRob2RkZXNjfQotCi1cYmVnaW57bWV0aG9kZGVzY317aW5fZGxsfXtuYW1lLCBsaWJyYXJ5fQotVGhpcyBtZXRob2QgcmV0dXJucyBhIGN0eXBlcyB0eXBlIGluc3RhbmNlIGV4cG9ydGVkIGJ5IGEgc2hhcmVkCi1saWJyYXJ5LiAgXHZhcntuYW1lfSBpcyB0aGUgbmFtZSBvZiB0aGUgc3ltYm9sIHRoYXQgZXhwb3J0cyB0aGUgZGF0YSwKLVx2YXJ7bGlicmFyeX0gaXMgdGhlIGxvYWRlZCBzaGFyZWQgbGlicmFyeS4KLVxlbmR7bWV0aG9kZGVzY30KLQotJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQotJSBzaW1wbGUgZGF0YSB0eXBlcwotXHN1YnN1YnNlY3Rpb257c2ltcGxlIGRhdGEgdHlwZXN9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e19jdHlwZXMuX1NpbXBsZUNEYXRhfXt9Ci1UaGlzIG5vbi1wdWJsaWMgY2xhc3MgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIGN0eXBlcyBkYXRhIHR5cGVzLiAgSXQKLWlzIG1lbnRpb25lZCBoZXJlIGJlY2F1c2UgaXQgY29udGFpbnMgdGhlIGNvbW1vbiBhdHRyaWJ1dGVzIG9mIHRoZQotY3R5cGVzIGRhdGEgdHlwZXMuCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue21lbWJlcmRlc2N9e3ZhbHVlfQotVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UuICBGb3IgaW50ZWdlcgotdHlwZXMsIGl0IGlzIGFuIGludGVnZXIuCi1cZW5ke21lbWJlcmRlc2N9Ci0KLUhlcmUgYXJlIHRoZSBzaW1wbGUgY3R5cGVzIGRhdGEgdHlwZXM6Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfYnl0ZX17XG9wdGlvbmFse3ZhbHVlfX0KLVJlcHJlc2VudHMgYSBDIFxjb2Rle3NpZ25lZCBjaGFyfSBkYXRhdHlwZSwgYW5kIGludGVycHJldHMgdGhlIHZhbHVlCi1hcyBzbWFsbCBpbnRlZ2VyLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gb3B0aW9uYWwgaW50ZWdlcgotaW5pdGlhbGl6ZXI7IG5vIG92ZXJmbG93IGNoZWNraW5nIGlzIGRvbmUuCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y19jaGFyfXtcb3B0aW9uYWx7dmFsdWV9fQotUmVwcmVzZW50cyBhIEMgXGNvZGV7Y2hhcn0gZGF0YXR5cGUsIGFuZCBpbnRlcnByZXRzIHRoZSB2YWx1ZSBhcyBhCi1zaW5nbGUgY2hhcmFjdGVyLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gb3B0aW9uYWwgc3RyaW5nCi1pbml0aWFsaXplciwgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIG11c3QgYmUgZXhhY3RseSBvbmUgY2hhcmFjdGVyLgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfY2hhcl9wfXtcb3B0aW9uYWx7dmFsdWV9fQotUmVwcmVzZW50cyBhIEMgXGNvZGV7Y2hhciAqfSBkYXRhdHlwZSwgd2hpY2ggbXVzdCBiZSBhIHBvaW50ZXIgdG8gYQotemVyby10ZXJtaW5hdGVkIHN0cmluZy4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIGludGVnZXIgYWRkcmVzcywKLW9yIGEgc3RyaW5nLgotJSBYWFggRXhwbGFpbiB0aGUgZGlmZmVyZW5jZSB0byBQT0lOVEVSKGNfY2hhcikKLVxlbmR7Y2xhc3NkZXNjfQotCi1cYmVnaW57Y2xhc3NkZXNjfXtjX2RvdWJsZX17XG9wdGlvbmFse3ZhbHVlfX0KLVJlcHJlc2VudHMgYSBDIFxjb2Rle2RvdWJsZX0gZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgotb3B0aW9uYWwgZmxvYXQgaW5pdGlhbGl6ZXIuCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y19mbG9hdH17XG9wdGlvbmFse3ZhbHVlfX0KLVJlcHJlc2VudHMgYSBDIFxjb2Rle2RvdWJsZX0gZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgotb3B0aW9uYWwgZmxvYXQgaW5pdGlhbGl6ZXIuCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y19pbnR9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyBcY29kZXtzaWduZWQgaW50fSBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuCi1vcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLiAgT24KLXBsYXRmb3JtcyB3aGVyZSBcY29kZXtzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZyl9IFx2YXJ7Y19pbnR9IGlzIGFuCi1hbGlhcyB0byBcdmFye2NfbG9uZ30uCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y19pbnQxNn17XG9wdGlvbmFse3ZhbHVlfX0KLVJlcHJlc2VudHMgYSBDIDE2LWJpdCBcY29kZXtzaWduZWQgaW50fSBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMKLWZvciBcdmFye2Nfc2hvcnR9LgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfaW50MzJ9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyAzMi1iaXQgXGNvZGV7c2lnbmVkIGludH0gZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzCi1mb3IgXGNvZGV7Y19pbnR9LgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfaW50NjR9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyA2NC1iaXQgXGNvZGV7c2lnbmVkIGludH0gZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzCi1mb3IgXGNvZGV7Y19sb25nbG9uZ30uCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y19pbnQ4fXtcb3B0aW9uYWx7dmFsdWV9fQotUmVwcmVzZW50cyBhIEMgOC1iaXQgXGNvZGV7c2lnbmVkIGludH0gZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzIGZvciBcY29kZXtjX2J5dGV9LgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfbG9uZ317XG9wdGlvbmFse3ZhbHVlfX0KLVJlcHJlc2VudHMgYSBDIFxjb2Rle3NpZ25lZCBsb25nfSBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzCi1hbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfbG9uZ2xvbmd9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyBcY29kZXtzaWduZWQgbG9uZyBsb25nfSBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvcgotYWNjZXB0cyBhbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2Nfc2hvcnR9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyBcY29kZXtzaWduZWQgc2hvcnR9IGRhdGF0eXBlLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMKLWFuIG9wdGlvbmFsIGludGVnZXIgaW5pdGlhbGl6ZXI7IG5vIG92ZXJmbG93IGNoZWNraW5nIGlzIGRvbmUuCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y19zaXplX3R9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyBcY29kZXtzaXplX3R9IGRhdGF0eXBlLgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfdWJ5dGV9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyBcY29kZXt1bnNpZ25lZCBjaGFyfSBkYXRhdHlwZSwgYW5kIGludGVycHJldHMgdGhlIHZhbHVlCi1hcyBzbWFsbCBpbnRlZ2VyLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gb3B0aW9uYWwgaW50ZWdlcgotaW5pdGlhbGl6ZXI7IG5vIG92ZXJmbG93IGNoZWNraW5nIGlzIGRvbmUuCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y191aW50fXtcb3B0aW9uYWx7dmFsdWV9fQotUmVwcmVzZW50cyBhIEMgXGNvZGV7dW5zaWduZWQgaW50fSBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzCi1hbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLiAgT24KLXBsYXRmb3JtcyB3aGVyZSBcY29kZXtzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZyl9IFx2YXJ7Y19pbnR9IGlzIGFuCi1hbGlhcyB0byBcdmFye2NfbG9uZ30uCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y191aW50MTZ9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyAxNi1iaXQgXGNvZGV7dW5zaWduZWQgaW50fSBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMKLWZvciBcY29kZXtjX3VzaG9ydH0uCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y191aW50MzJ9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyAzMi1iaXQgXGNvZGV7dW5zaWduZWQgaW50fSBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMKLWZvciBcY29kZXtjX3VpbnR9LgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfdWludDY0fXtcb3B0aW9uYWx7dmFsdWV9fQotUmVwcmVzZW50cyBhIEMgNjQtYml0IFxjb2Rle3Vuc2lnbmVkIGludH0gZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzCi1mb3IgXGNvZGV7Y191bG9uZ2xvbmd9LgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfdWludDh9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyA4LWJpdCBcY29kZXt1bnNpZ25lZCBpbnR9IGRhdGF0eXBlLiAgVXN1YWxseSBhbiBhbGlhcwotZm9yIFxjb2Rle2NfdWJ5dGV9LgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfdWxvbmd9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyBcY29kZXt1bnNpZ25lZCBsb25nfSBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzCi1hbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfdWxvbmdsb25nfXtcb3B0aW9uYWx7dmFsdWV9fQotUmVwcmVzZW50cyBhIEMgXGNvZGV7dW5zaWduZWQgbG9uZyBsb25nfSBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvcgotYWNjZXB0cyBhbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2NfdXNob3J0fXtcb3B0aW9uYWx7dmFsdWV9fQotUmVwcmVzZW50cyBhIEMgXGNvZGV7dW5zaWduZWQgc2hvcnR9IGRhdGF0eXBlLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMKLWFuIG9wdGlvbmFsIGludGVnZXIgaW5pdGlhbGl6ZXI7IG5vIG92ZXJmbG93IGNoZWNraW5nIGlzIGRvbmUuCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317Y192b2lkX3B9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyBcY29kZXt2b2lkICp9IHR5cGUuICBUaGUgdmFsdWUgaXMgcmVwcmVzZW50ZWQgYXMKLWludGVnZXIuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyLgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2Nfd2NoYXJ9e1xvcHRpb25hbHt2YWx1ZX19Ci1SZXByZXNlbnRzIGEgQyBcY29kZXt3Y2hhcl90fSBkYXRhdHlwZSwgYW5kIGludGVycHJldHMgdGhlIHZhbHVlIGFzIGEKLXNpbmdsZSBjaGFyYWN0ZXIgdW5pY29kZSBzdHJpbmcuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbiBvcHRpb25hbAotc3RyaW5nIGluaXRpYWxpemVyLCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgbXVzdCBiZSBleGFjdGx5IG9uZQotY2hhcmFjdGVyLgotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e2Nfd2NoYXJfcH17XG9wdGlvbmFse3ZhbHVlfX0KLVJlcHJlc2VudHMgYSBDIFxjb2Rle3djaGFyX3QgKn0gZGF0YXR5cGUsIHdoaWNoIG11c3QgYmUgYSBwb2ludGVyIHRvIGEKLXplcm8tdGVybWluYXRlZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgotaW50ZWdlciBhZGRyZXNzLCBvciBhIHN0cmluZy4KLSUgWFhYIEV4cGxhaW4gdGhlIGRpZmZlcmVuY2UgdG8gUE9JTlRFUihjX3djaGFyKQotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e0hSRVNVTFR9e30KLVdpbmRvd3Mgb25seTogUmVwcmVzZW50cyBhIFxjb2Rle0hSRVNVTFR9IHZhbHVlLCB3aGljaCBjb250YWlucwotc3VjY2VzcyBvciBlcnJvciBpbmZvcm1hdGlvbiBmb3IgYSBmdW5jdGlvbiBvciBtZXRob2QgY2FsbC4KLVxlbmR7Y2xhc3NkZXNjfQotCi0lJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCi0lIHN0cnVjdHVyZWQgZGF0YSB0eXBlcwotXHN1YnN1YnNlY3Rpb257c3RydWN0dXJlZCBkYXRhIHR5cGVzfQotCi1cYmVnaW57Y2xhc3NkZXNjfXtCaWdFbmRpYW5TdHJ1Y3R1cmV9e30KLVxlbmR7Y2xhc3NkZXNjfQotCi1cYmVnaW57Y2xhc3NkZXNjfXtMaXR0bGVFbmRpYW5TdHJ1Y3R1cmV9e30KLVxlbmR7Y2xhc3NkZXNjfQotCi1cYmVnaW57Y2xhc3NkZXNjfXtTdHJ1Y3R1cmV9e30KLUJhc2UgY2xhc3MgZm9yIFN0cnVjdHVyZSBkYXRhIHR5cGVzLgotCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317VW5pb259e30KLVxlbmR7Y2xhc3NkZXNjfQotCi0KLSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUKLSUgbGlicmFyaWVzCi1cc3Vic3Vic2VjdGlvbntsaWJyYXJpZXN9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e0NETEx9e25hbWUsIG1vZGU9UlRMRF9MT0NBTCwgaGFuZGxlPU5vbmV9Ci1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2RhdGFkZXNjfXtjZGxsfQotXGVuZHtkYXRhZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317TGlicmFyeUxvYWRlcn17ZGxsdHlwZX0KLQotXGJlZ2lue21lbWJlcmRlc2N9e0xvYWRMaWJyYXJ5fXtuYW1lLCBtb2RlPVJUTERfTE9DQUwsIGhhbmRsZT1Ob25lfQotXGVuZHttZW1iZXJkZXNjfQotCi1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317T2xlRExMfXtuYW1lLCBtb2RlPVJUTERfTE9DQUwsIGhhbmRsZT1Ob25lfQotXGVuZHtjbGFzc2Rlc2N9Ci0KLVxiZWdpbntkYXRhZGVzY317b2xlZGxsfQotXGVuZHtkYXRhZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317cHlfb2JqZWN0fXt9Ci1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2NsYXNzZGVzY317UHlETEx9e25hbWUsIG1vZGU9UlRMRF9MT0NBTCwgaGFuZGxlPU5vbmV9Ci1cZW5ke2NsYXNzZGVzY30KLQotXGJlZ2lue2RhdGFkZXNjfXtweWRsbH17fQotXGVuZHtkYXRhZGVzY30KLQotXGJlZ2lue2RhdGFkZXNjfXtSVExEX0dMT0JBTH0KLVxlbmR7ZGF0YWRlc2N9Ci0KLVxiZWdpbntkYXRhZGVzY317UlRMRF9MT0NBTH0KLVxlbmR7ZGF0YWRlc2N9Ci0KLVxiZWdpbntjbGFzc2Rlc2N9e1dpbkRMTH17bmFtZSwgbW9kZT1SVExEX0xPQ0FMLCBoYW5kbGU9Tm9uZX0KLVxlbmR7Y2xhc3NkZXNjfQotCi1cYmVnaW57ZGF0YWRlc2N9e3dpbmRsbH0KLVxlbmR7ZGF0YWRlc2N9Ci0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliZGlmZmxpYi50ZXggYi9Eb2MvbGliL2xpYmRpZmZsaWIudGV4CmluZGV4IDc2NWFjY2MuLmFjYjVlZDEgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGliZGlmZmxpYi50ZXgKKysrIGIvRG9jL2xpYi9saWJkaWZmbGliLnRleApAQCAtNDE5LDYgKzQxOSwxNiBAQAogICBsZW4oXHZhcntifSksIDApfS4gIEl0IGlzIHRoZSBvbmx5IHRyaXBsZSB3aXRoIFxjb2Rle1x2YXJ7bn0gPT0gMH0uCiAgICUgRXhwbGFpbiB3aHkgYSBkdW1teSBpcyB1c2VkIQogCisgIElmCisgIFxjb2RleyhcdmFye2l9LCBcdmFye2p9LCBcdmFye259KX0gYW5kCisgIFxjb2RleyhcdmFye2knfSwgXHZhcntqJ30sIFx2YXJ7bid9KX0gYXJlIGFkamFjZW50IHRyaXBsZXMgaW4gdGhlIGxpc3QsCisgIGFuZCB0aGUgc2Vjb25kIGlzIG5vdCB0aGUgbGFzdCB0cmlwbGUgaW4gdGhlIGxpc3QsIHRoZW4KKyAgXGNvZGV7XHZhcntpfStcdmFye259ICE9IFx2YXJ7aSd9fSBvcgorICBcY29kZXtcdmFye2p9K1x2YXJ7bn0gIT0gXHZhcntqJ319OyBpbiBvdGhlciB3b3JkcywgYWRqYWNlbnQgdHJpcGxlcworICBhbHdheXMgZGVzY3JpYmUgbm9uLWFkamFjZW50IGVxdWFsIGJsb2Nrcy4KKyAgXHZlcnNpb25jaGFuZ2VkW1RoZSBndWFyYW50ZWUgdGhhdCBhZGphY2VudCB0cmlwbGVzIGFsd2F5cyBkZXNjcmliZQorICAgICAgICAgICAgICAgICAgbm9uLWFkamFjZW50IGJsb2NrcyB3YXMgaW1wbGVtZW50ZWRdezIuNX0KKwogXGJlZ2lue3ZlcmJhdGltfQogPj4+IHMgPSBTZXF1ZW5jZU1hdGNoZXIoTm9uZSwgImFieGNkIiwgImFiY2QiKQogPj4+IHMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmV0cmVlLnRleCBiL0RvYy9saWIvbGliZXRyZWUudGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjk4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGliL2xpYmV0cmVlLnRleApAQCAtMCwwICsxLDM2NyBAQAorXHNlY3Rpb257XG1vZHVsZXtlbGVtZW50dHJlZX0gLS0tIFRoZSB4bWwuZXRyZWUuRWxlbWVudFRyZWUgTW9kdWxlfQorXGRlY2xhcmVtb2R1bGV7c3RhbmRhcmR9e2VsZW1lbnR0cmVlfQorXG1vZHVsZWF1dGhvcntGcmVkcmlrIEx1bmRofXtmcmVkcmlrQHB5dGhvbndhcmUuY29tfQorXG1vZHVsZXN5bm9wc2lze1RoaXMgbW9kdWxlIHByb3ZpZGVzIGltcGxlbWVudGF0aW9ucworb2YgdGhlIEVsZW1lbnQgYW5kIEVsZW1lbnRUcmVlIHR5cGVzLCBwbHVzIHN1cHBvcnQgY2xhc3Nlcy4KKworQSBDIHZlcnNpb24gb2YgdGhpcyBBUEkgaXMgYXZhaWxhYmxlIGFzIHhtbC5ldHJlZS5jRWxlbWVudFRyZWUufQorXHZlcnNpb25hZGRlZHsyLjV9CisKKworXHN1YnNlY3Rpb257T3ZlcnZpZXdcbGFiZWx7ZWxlbWVudHRyZWUtb3ZlcnZpZXd9fQorCitUaGUgRWxlbWVudCB0eXBlIGlzIGEgZmxleGlibGUgY29udGFpbmVyIG9iamVjdCwgZGVzaWduZWQgdG8gc3RvcmUKK2hpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZXMgaW4gbWVtb3J5LiBUaGUgdHlwZSBjYW4gYmUgZGVzY3JpYmVkIGFzIGEKK2Nyb3NzIGJldHdlZW4gYSBsaXN0IGFuZCBhIGRpY3Rpb25hcnkuCisKK0VhY2ggZWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6CitcYmVnaW57aXRlbWl6ZX0KK1xpdGVtIHt9IAorYSB0YWcgd2hpY2ggaXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgd2hhdCBraW5kIG9mIGRhdGEKK3RoaXMgZWxlbWVudCByZXByZXNlbnRzICh0aGUgZWxlbWVudCB0eXBlLCBpbiBvdGhlciB3b3JkcykuCisKK1xpdGVtIHt9IAorYSBudW1iZXIgb2YgYXR0cmlidXRlcywgc3RvcmVkIGluIGEgUHl0aG9uIGRpY3Rpb25hcnkuCisKK1xpdGVtIHt9IAorYSB0ZXh0IHN0cmluZy4KKworXGl0ZW0ge30gCithbiBvcHRpb25hbCB0YWlsIHN0cmluZy4KKworXGl0ZW0ge30gCithIG51bWJlciBvZiBjaGlsZCBlbGVtZW50cywgc3RvcmVkIGluIGEgUHl0aG9uIHNlcXVlbmNlCisKK1xlbmR7aXRlbWl6ZX0KKworVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUgRWxlbWVudCBvciBTdWJFbGVtZW50IGZhY3RvcnkKK2Z1bmN0aW9ucy4KKworVGhlIEVsZW1lbnRUcmVlIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYW4gZWxlbWVudAorc3RydWN0dXJlLCBhbmQgY29udmVydCBpdCBmcm9tIGFuZCB0byBYTUwuCisKKworXHN1YnNlY3Rpb257RnVuY3Rpb25zXGxhYmVse2VsZW1lbnR0cmVlLWZ1bmN0aW9uc319CisKK1xiZWdpbntmdW5jZGVzY317Q29tbWVudH17XG9wdGlvbmFse3RleHR9fQorQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwKK2VsZW1lbnQgdGhhdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgYW4gWE1MIGNvbW1lbnQuCitUaGUgY29tbWVudCBzdHJpbmcgY2FuIGJlIGVpdGhlciBhbiA4LWJpdCBBU0NJSSBzdHJpbmcgb3IgYSBVbmljb2RlCitzdHJpbmcuCitcdmFye3RleHR9IGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1lbnQgc3RyaW5nLgorCitcYmVnaW57ZGF0YWRlc2NuaX17UmV0dXJuczp9CitBbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBjb21tZW50LgorXGVuZHtkYXRhZGVzY25pfQorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtkdW1wfXtlbGVtfQorV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcworZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgorCitUaGUgZXhhY3Qgb3V0cHV0IGZvcm1hdCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBJbiB0aGlzCit2ZXJzaW9uLCBpdCdzIHdyaXR0ZW4gYXMgYW4gb3JkaW5hcnkgWE1MIGZpbGUuCisKK1x2YXJ7ZWxlbX0gaXMgYW4gZWxlbWVudCB0cmVlIG9yIGFuIGluZGl2aWR1YWwgZWxlbWVudC4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317RWxlbWVudH17dGFnXG9wdGlvbmFseywgYXR0cmlifVxvcHRpb25hbHssICoqZXh0cmF9fQorRWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlCitzdGFuZGFyZCBFbGVtZW50IGludGVyZmFjZS4gIFRoZSBleGFjdCBjbGFzcyBvciB0eXBlIG9mIHRoYXQgb2JqZWN0CitpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQsIGJ1dCBpdCB3aWxsIGFsd2F5cyBiZSBjb21wYXRpYmxlIHdpdGgKK3RoZSB7XF99RWxlbWVudEludGVyZmFjZSBjbGFzcyBpbiB0aGlzIG1vZHVsZS4KKworVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKK2VpdGhlciA4LWJpdCBBU0NJSSBzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4KK1x2YXJ7dGFnfSBpcyB0aGUgZWxlbWVudCBuYW1lLgorXHZhcnthdHRyaWJ9IGlzIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgorXHZhcntleHRyYX0gY29udGFpbnMgYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorQW4gZWxlbWVudCBpbnN0YW5jZS4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317ZnJvbXN0cmluZ317dGV4dH0KK1BhcnNlcyBhbiBYTUwgc2VjdGlvbiBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgU2FtZSBhcyBYTUwuCitcdmFye3RleHR9IGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCisKK1xiZWdpbntkYXRhZGVzY25pfXtSZXR1cm5zOn0KK0FuIEVsZW1lbnQgaW5zdGFuY2UuCitcZW5ke2RhdGFkZXNjbml9CitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2lzZWxlbWVudH17ZWxlbWVudH0KK0NoZWNrcyBpZiBhbiBvYmplY3QgYXBwZWFycyB0byBiZSBhIHZhbGlkIGVsZW1lbnQgb2JqZWN0LgorXHZhcntlbGVtZW50fSBpcyBhbiBlbGVtZW50IGluc3RhbmNlLgorCitcYmVnaW57ZGF0YWRlc2NuaX17UmV0dXJuczp9CitBIHRydWUgdmFsdWUgaWYgdGhpcyBpcyBhbiBlbGVtZW50IG9iamVjdC4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317aXRlcnBhcnNlfXtzb3VyY2Vcb3B0aW9uYWx7LCBldmVudHN9fQorUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzCit3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIuCitcdmFye3NvdXJjZX0gaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgorXHZhcntldmVudHN9IGlzIGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBJZiBvbWl0dGVkLCBvbmx5IGBgZW5kJycKK2V2ZW50cyBhcmUgcmVwb3J0ZWQuCisKK1xiZWdpbntkYXRhZGVzY25pfXtSZXR1cm5zOn0KK0EgKGV2ZW50LCBlbGVtKSBpdGVyYXRvci4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317cGFyc2V9e3NvdXJjZVxvcHRpb25hbHssIHBhcnNlcn19CitQYXJzZXMgYW4gWE1MIHNlY3Rpb24gaW50byBhbiBlbGVtZW50IHRyZWUuCitcdmFye3NvdXJjZX0gaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgorXHZhcntwYXJzZXJ9IGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCitzdGFuZGFyZCBYTUxUcmVlQnVpbGRlciBwYXJzZXIgaXMgdXNlZC4KKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorQW4gRWxlbWVudFRyZWUgaW5zdGFuY2UKK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317UHJvY2Vzc2luZ0luc3RydWN0aW9ufXt0YXJnZXRcb3B0aW9uYWx7LCB0ZXh0fX0KK1BJIGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50Cit0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4KK1x2YXJ7dGFyZ2V0fSBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSB0YXJnZXQuCitcdmFye3RleHR9IGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIGNvbnRlbnRzLCBpZiBnaXZlbi4KKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorQW4gZWxlbWVudCBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIGEgUEkuCitcZW5ke2RhdGFkZXNjbml9CitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e1N1YkVsZW1lbnR9e3BhcmVudCwgdGFnXG9wdGlvbmFseywgYXR0cmlifSBcb3B0aW9uYWx7LCAqKmV4dHJhfX0KK1N1YmVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQKK2FwcGVuZHMgaXQgdG8gYW4gZXhpc3RpbmcgZWxlbWVudC4KKworVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKK2VpdGhlciA4LWJpdCBBU0NJSSBzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4KK1x2YXJ7cGFyZW50fSBpcyB0aGUgcGFyZW50IGVsZW1lbnQuCitcdmFye3RhZ30gaXMgdGhlIHN1YmVsZW1lbnQgbmFtZS4KK1x2YXJ7YXR0cmlifSBpcyBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KK1x2YXJ7ZXh0cmF9IGNvbnRhaW5zIGFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCisKK1xiZWdpbntkYXRhZGVzY25pfXtSZXR1cm5zOn0KK0FuIGVsZW1lbnQgaW5zdGFuY2UuCitcZW5ke2RhdGFkZXNjbml9CitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e3Rvc3RyaW5nfXtlbGVtZW50XG9wdGlvbmFseywgZW5jb2Rpbmd9fQorR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCitzdWJlbGVtZW50cy4KK1x2YXJ7ZWxlbWVudH0gaXMgYW4gRWxlbWVudCBpbnN0YW5jZS4KK1x2YXJ7ZW5jb2Rpbmd9IGlzIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgorCitcYmVnaW57ZGF0YWRlc2NuaX17UmV0dXJuczp9CitBbiBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317WE1MfXt0ZXh0fQorUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBUaGlzIGZ1bmN0aW9uIGNhbgorYmUgdXNlZCB0byBlbWJlZCBgYFhNTCBsaXRlcmFscycnIGluIFB5dGhvbiBjb2RlLgorXHZhcnt0ZXh0fSBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgorCitcYmVnaW57ZGF0YWRlc2NuaX17UmV0dXJuczp9CitBbiBFbGVtZW50IGluc3RhbmNlLgorXGVuZHtkYXRhZGVzY25pfQorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtYTUxJRH17dGV4dH0KK1BhcnNlcyBhbiBYTUwgc2VjdGlvbiBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LCBhbmQgYWxzbyByZXR1cm5zCithIGRpY3Rpb25hcnkgd2hpY2ggbWFwcyBmcm9tIGVsZW1lbnQgaWQ6cyB0byBlbGVtZW50cy4KK1x2YXJ7dGV4dH0gaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorQSB0dXBsZSBjb250YWluaW5nIGFuIEVsZW1lbnQgaW5zdGFuY2UgYW5kIGEgZGljdGlvbmFyeS4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7ZnVuY2Rlc2N9CisKKworXHN1YnNlY3Rpb257RWxlbWVudFRyZWUgT2JqZWN0c1xsYWJlbHtlbGVtZW50dHJlZS1lbGVtZW50dHJlZS1vYmplY3RzfX0KKworXGJlZ2lue2NsYXNzZGVzY317RWxlbWVudFRyZWV9e1xvcHRpb25hbHtlbGVtZW50LH0gXG9wdGlvbmFse2ZpbGV9fQorRWxlbWVudFRyZWUgd3JhcHBlciBjbGFzcy4gIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRpcmUgZWxlbWVudAoraGllcmFyY2h5LCBhbmQgYWRkcyBzb21lIGV4dHJhIHN1cHBvcnQgZm9yIHNlcmlhbGl6YXRpb24gdG8gYW5kIGZyb20KK3N0YW5kYXJkIFhNTC4KKworXHZhcntlbGVtZW50fSBpcyB0aGUgcm9vdCBlbGVtZW50LgorVGhlIHRyZWUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIFhNTCBcdmFye2ZpbGV9IGlmIGdpdmVuLgorXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtfc2V0cm9vdH17ZWxlbWVudH0KK1JlcGxhY2VzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoaXMgdHJlZS4gIFRoaXMgZGlzY2FyZHMgdGhlCitjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB0cmVlLCBhbmQgcmVwbGFjZXMgaXQgd2l0aCB0aGUgZ2l2ZW4KK2VsZW1lbnQuICBVc2Ugd2l0aCBjYXJlLgorXHZhcntlbGVtZW50fSBpcyBhbiBlbGVtZW50IGluc3RhbmNlLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317ZmluZH17cGF0aH0KK0ZpbmRzIHRoZSBmaXJzdCB0b3BsZXZlbCBlbGVtZW50IHdpdGggZ2l2ZW4gdGFnLgorU2FtZSBhcyBnZXRyb290KCkuZmluZChwYXRoKS4KK1x2YXJ7cGF0aH0gaXMgdGhlIGVsZW1lbnQgdG8gbG9vayBmb3IuCisKK1xiZWdpbntkYXRhZGVzY25pfXtSZXR1cm5zOn0KK1RoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorXGVuZHtkYXRhZGVzY25pfQorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317ZmluZGFsbH17cGF0aH0KK0ZpbmRzIGFsbCB0b3BsZXZlbCBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiB0YWcuCitTYW1lIGFzIGdldHJvb3QoKS5maW5kYWxsKHBhdGgpLgorXHZhcntwYXRofSBpcyB0aGUgZWxlbWVudCB0byBsb29rIGZvci4KKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorQSBsaXN0IG9yIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAoraW4gc2VjdGlvbiBvcmRlci4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2ZpbmR0ZXh0fXtwYXRoXG9wdGlvbmFseywgZGVmYXVsdH19CitGaW5kcyB0aGUgZWxlbWVudCB0ZXh0IGZvciB0aGUgZmlyc3QgdG9wbGV2ZWwgZWxlbWVudCB3aXRoIGdpdmVuCit0YWcuICBTYW1lIGFzIGdldHJvb3QoKS5maW5kdGV4dChwYXRoKS4KK1x2YXJ7cGF0aH0gaXMgdGhlIHRvcGxldmVsIGVsZW1lbnQgdG8gbG9vayBmb3IuCitcdmFye2RlZmF1bHR9IGlzIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZC4KKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCitkZWZhdWx0IHZhbHVlIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBlbGVtZW50CitoYXMgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCitlbXB0eSBzdHJpbmcuCitcZW5ke2RhdGFkZXNjbml9CitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtnZXRpdGVyYXRvcn17XG9wdGlvbmFse3RhZ319CitDcmVhdGVzIGEgdHJlZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgZWxlbWVudC4gIFRoZSBpdGVyYXRvciBsb29wcworb3ZlciBhbGwgZWxlbWVudHMgaW4gdGhpcyB0cmVlLCBpbiBzZWN0aW9uIG9yZGVyLgorXHZhcnt0YWd9IGlzIHRoZSB0YWcgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykKKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorQW4gaXRlcmF0b3IuCitcZW5ke2RhdGFkZXNjbml9CitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtnZXRyb290fXt9CitHZXRzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoaXMgdHJlZS4KKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorQW4gZWxlbWVudCBpbnN0YW5jZS4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3BhcnNlfXtzb3VyY2Vcb3B0aW9uYWx7LCBwYXJzZXJ9fQorTG9hZHMgYW4gZXh0ZXJuYWwgWE1MIHNlY3Rpb24gaW50byB0aGlzIGVsZW1lbnQgdHJlZS4KK1x2YXJ7c291cmNlfSBpcyBhIGZpbGUgbmFtZSBvciBmaWxlIG9iamVjdC4KK1x2YXJ7cGFyc2VyfSBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQorc3RhbmRhcmQgWE1MVHJlZUJ1aWxkZXIgcGFyc2VyIGlzIHVzZWQuCisKK1xiZWdpbntkYXRhZGVzY25pfXtSZXR1cm5zOn0KK1RoZSBzZWN0aW9uIHJvb3QgZWxlbWVudC4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3dyaXRlfXtmaWxlXG9wdGlvbmFseywgZW5jb2Rpbmd9fQorV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuCitcdmFye2ZpbGV9IGlzIGEgZmlsZSBuYW1lLCBvciBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3Igd3JpdGluZy4KK1x2YXJ7ZW5jb2Rpbmd9IGlzIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgorXGVuZHttZXRob2RkZXNjfQorCisKK1xzdWJzZWN0aW9ue1FOYW1lIE9iamVjdHNcbGFiZWx7ZWxlbWVudHRyZWUtcW5hbWUtb2JqZWN0c319CisKK1xiZWdpbntjbGFzc2Rlc2N9e1FOYW1lfXt0ZXh0X29yX3VyaVxvcHRpb25hbHssIHRhZ319CitRTmFtZSB3cmFwcGVyLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB3cmFwIGEgUU5hbWUgYXR0cmlidXRlIHZhbHVlLCBpbgorb3JkZXIgdG8gZ2V0IHByb3BlciBuYW1lc3BhY2UgaGFuZGxpbmcgb24gb3V0cHV0LgorXHZhcnt0ZXh0X29yX3VyaX0gaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgUU5hbWUgdmFsdWUsCitpbiB0aGUgZm9ybSB7XHt9dXJpe1x9fWxvY2FsLCBvciwgaWYgdGhlIHRhZyBhcmd1bWVudCBpcyBnaXZlbiwKK3RoZSBVUkkgcGFydCBvZiBhIFFOYW1lLgorSWYgXHZhcnt0YWd9IGlzIGdpdmVuLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMKK2FuIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgorCitcYmVnaW57ZGF0YWRlc2NuaX17UmV0dXJuczp9CitBbiBvcGFxdWUgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIFFOYW1lLgorXGVuZHtkYXRhZGVzY25pfQorXGVuZHtjbGFzc2Rlc2N9CisKKworXHN1YnNlY3Rpb257VHJlZUJ1aWxkZXIgT2JqZWN0c1xsYWJlbHtlbGVtZW50dHJlZS10cmVlYnVpbGRlci1vYmplY3RzfX0KKworXGJlZ2lue2NsYXNzZGVzY317VHJlZUJ1aWxkZXJ9e1xvcHRpb25hbHtlbGVtZW50X2ZhY3Rvcnl9fQorR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLiAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2UKK29mIHN0YXJ0LCBkYXRhLCBhbmQgZW5kIG1ldGhvZCBjYWxscyB0byBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgc3RydWN0dXJlLgorWW91IGNhbiB1c2UgdGhpcyBjbGFzcyB0byBidWlsZCBhbiBlbGVtZW50IHN0cnVjdHVyZSB1c2luZyBhIGN1c3RvbSBYTUwKK3BhcnNlciwgb3IgYSBwYXJzZXIgZm9yIHNvbWUgb3RoZXIgWE1MLWxpa2UgZm9ybWF0LgorVGhlIFx2YXJ7ZWxlbWVudF9mYWN0b3J5fSBpcyBjYWxsZWQgdG8gY3JlYXRlIG5ldyBFbGVtZW50IGluc3RhbmNlcyB3aGVuCitnaXZlbi4KK1xlbmR7Y2xhc3NkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Y2xvc2V9e30KK0ZsdXNoZXMgdGhlIHBhcnNlciBidWZmZXJzLCBhbmQgcmV0dXJucyB0aGUgdG9wbGV2ZWwgZG9jdW1lbgorZWxlbWVudC4KKworXGJlZ2lue2RhdGFkZXNjbml9e1JldHVybnM6fQorQW4gRWxlbWVudCBpbnN0YW5jZS4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2RhdGF9e2RhdGF9CitBZGRzIHRleHQgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4KK1x2YXJ7ZGF0YX0gaXMgYSBzdHJpbmcuICBUaGlzIHNob3VsZCBiZSBlaXRoZXIgYW4gOC1iaXQgc3RyaW5nCitjb250YWluaW5nIEFTQ0lJIHRleHQsIG9yIGEgVW5pY29kZSBzdHJpbmcuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtlbmR9e3RhZ30KK0Nsb3NlcyB0aGUgY3VycmVudCBlbGVtZW50LgorXHZhcnt0YWd9IGlzIHRoZSBlbGVtZW50IG5hbWUuCisKK1xiZWdpbntkYXRhZGVzY25pfXtSZXR1cm5zOn0KK1RoZSBjbG9zZWQgZWxlbWVudC4KK1xlbmR7ZGF0YWRlc2NuaX0KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e3N0YXJ0fXt0YWcsIGF0dHJzfQorT3BlbnMgYSBuZXcgZWxlbWVudC4KK1x2YXJ7dGFnfSBpcyB0aGUgZWxlbWVudCBuYW1lLgorXHZhcnthdHRyc30gaXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgorCitcYmVnaW57ZGF0YWRlc2NuaX17UmV0dXJuczp9CitUaGUgb3BlbmVkIGVsZW1lbnQuCitcZW5ke2RhdGFkZXNjbml9CitcZW5ke21ldGhvZGRlc2N9CisKKworXHN1YnNlY3Rpb257WE1MVHJlZUJ1aWxkZXIgT2JqZWN0c1xsYWJlbHtlbGVtZW50dHJlZS14bWx0cmVlYnVpbGRlci1vYmplY3RzfX0KKworXGJlZ2lue2NsYXNzZGVzY317WE1MVHJlZUJ1aWxkZXJ9e1xvcHRpb25hbHtodG1sLH0gXG9wdGlvbmFse3RhcmdldH19CitFbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZQorZXhwYXQgcGFyc2VyLgorXHZhcntodG1sfSBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzLiAgVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQKK2J5IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLgorXHZhcnt0YXJnZXR9IGlzIHRoZSB0YXJnZXQgb2JqZWN0LiAgSWYgb21pdHRlZCwgdGhlIGJ1aWxkZXIgdXNlcyBhbgoraW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIFRyZWVCdWlsZGVyIGNsYXNzLgorXGVuZHtjbGFzc2Rlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtjbG9zZX17fQorRmluaXNoZXMgZmVlZGluZyBkYXRhIHRvIHRoZSBwYXJzZXIuCisKK1xiZWdpbntkYXRhZGVzY25pfXtSZXR1cm5zOn0KK0FuIGVsZW1lbnQgc3RydWN0dXJlLgorXGVuZHtkYXRhZGVzY25pfQorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317ZG9jdHlwZX17bmFtZSwgcHViaWQsIHN5c3RlbX0KK0hhbmRsZXMgYSBkb2N0eXBlIGRlY2xhcmF0aW9uLgorXHZhcntuYW1lfSBpcyB0aGUgZG9jdHlwZSBuYW1lLgorXHZhcntwdWJpZH0gaXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyLgorXHZhcntzeXN0ZW19IGlzIHRoZSBzeXN0ZW0gaWRlbnRpZmllci4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2ZlZWR9e2RhdGF9CitGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuCisKK1x2YXJ7ZGF0YX0gaXMgZW5jb2RlZCBkYXRhLgorXGVuZHttZXRob2RkZXNjfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJmdW5jcy50ZXggYi9Eb2MvbGliL2xpYmZ1bmNzLnRleAppbmRleCA4OTA0ZDVmLi42NWIwYmY1IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmZ1bmNzLnRleAorKysgYi9Eb2MvbGliL2xpYmZ1bmNzLnRleApAQCAtNDAxLDc3ICs0MDEsMjcgQEAKIFxlbmR7ZnVuY2Rlc2N9CiAKIFxiZWdpbntmdW5jZGVzY317ZmlsZX17ZmlsZW5hbWVcb3B0aW9uYWx7LCBtb2RlXG9wdGlvbmFseywgYnVmc2l6ZX19fQotICBSZXR1cm4gYSBuZXcgZmlsZSBvYmplY3QgKGRlc2NyaWJlZCBpbgotICBzZWN0aW9uflxyZWZ7Ymx0aW4tZmlsZS1vYmplY3RzfSwgYGBcdWxpbmt7RmlsZQotICBPYmplY3RzfXtibHRpbi1maWxlLW9iamVjdHMuaHRtbH0nJykuCi0gIFRoZSBmaXJzdCB0d28gYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgXGNvZGV7c3RkaW99J3MKLSAgXGNmdW5jdGlvbntmb3BlbigpfTogXHZhcntmaWxlbmFtZX0gaXMgdGhlIGZpbGUgbmFtZSB0byBiZSBvcGVuZWQsCi0gIFx2YXJ7bW9kZX0gaW5kaWNhdGVzIGhvdyB0aGUgZmlsZSBpcyB0byBiZSBvcGVuZWQ6IFxjb2RleydyJ30gZm9yCi0gIHJlYWRpbmcsIFxjb2Rleyd3J30gZm9yIHdyaXRpbmcgKHRydW5jYXRpbmcgYW4gZXhpc3RpbmcgZmlsZSksIGFuZAotICBcY29kZXsnYSd9IG9wZW5zIGl0IGZvciBhcHBlbmRpbmcgKHdoaWNoIG9uIFxlbXBoe3NvbWV9IFxVTklYe30KLSAgc3lzdGVtcyBtZWFucyB0aGF0IFxlbXBoe2FsbH0gd3JpdGVzIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLAotICByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHNlZWsgcG9zaXRpb24pLgorICBDb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIFxjbGFzc3tmaWxlfSB0eXBlLCBkZXNjcmliZWQgZnVydGhlciAKKyAgaW4gc2VjdGlvbn5ccmVme2JsdGluLWZpbGUtb2JqZWN0c30sIGBgXHVsaW5re0ZpbGUKKyAgT2JqZWN0c317Ymx0aW4tZmlsZS1vYmplY3RzLmh0bWx9JycuICBUaGUgY29uc3RydWN0b3IncyBhcmd1bWVudHMKKyAgYXJlIHRoZSBzYW1lIGFzIHRob3NlIG9mIHRoZSBcZnVuY3Rpb257b3BlbigpfSBidWlsdC1pbiBmdW5jdGlvbgorICBkZXNjcmliZWQgYmVsb3cuCiAKLSAgTW9kZXMgXGNvZGV7J3IrJ30sIFxjb2Rleyd3Kyd9IGFuZCBcY29kZXsnYSsnfSBvcGVuIHRoZSBmaWxlIGZvcgotICB1cGRhdGluZyAobm90ZSB0aGF0IFxjb2Rleyd3Kyd9IHRydW5jYXRlcyB0aGUgZmlsZSkuICBBcHBlbmQKLSAgXGNvZGV7J2InfSB0byB0aGUgbW9kZSB0byBvcGVuIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlLCBvbiBzeXN0ZW1zCi0gIHRoYXQgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGJpbmFyeSBhbmQgdGV4dCBmaWxlcyAoZWxzZSBpdCBpcwotICBpZ25vcmVkKS4gIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQsIFxleGNlcHRpb257SU9FcnJvcn0gaXMKLSAgcmFpc2VkLgotICAKLSAgSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIFxjZnVuY3Rpb257Zm9wZW4oKX0gdmFsdWVzIFx2YXJ7bW9kZX0KLSAgbWF5IGJlIFxjb2RleydVJ30gb3IgXGNvZGV7J3JVJ30uIElmIFB5dGhvbiBpcyBidWlsdCB3aXRoIHVuaXZlcnNhbAotICBuZXdsaW5lIHN1cHBvcnQgKHRoZSBkZWZhdWx0KSB0aGUgZmlsZSBpcyBvcGVuZWQgYXMgYSB0ZXh0IGZpbGUsIGJ1dAotICBsaW5lcyBtYXkgYmUgdGVybWluYXRlZCBieSBhbnkgb2YgXGNvZGV7J1xlIG4nfSwgdGhlIFVuaXggZW5kLW9mLWxpbmUKLSAgY29udmVudGlvbiwKLSAgXGNvZGV7J1xlIHInfSwgdGhlIE1hY2ludG9zaCBjb252ZW50aW9uIG9yIFxjb2RleydcZSByXGUgbid9LCB0aGUgV2luZG93cwotICBjb252ZW50aW9uLiBBbGwgb2YgdGhlc2UgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb25zIGFyZSBzZWVuIGFzCi0gIFxjb2RleydcZSBuJ30KLSAgYnkgdGhlIFB5dGhvbiBwcm9ncmFtLiBJZiBQeXRob24gaXMgYnVpbHQgd2l0aG91dCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0Ci0gIFx2YXJ7bW9kZX0gXGNvZGV7J1UnfSBpcyB0aGUgc2FtZSBhcyBub3JtYWwgdGV4dCBtb2RlLiAgTm90ZSB0aGF0Ci0gIGZpbGUgb2JqZWN0cyBzbyBvcGVuZWQgYWxzbyBoYXZlIGFuIGF0dHJpYnV0ZSBjYWxsZWQKLSAgXG1lbWJlcntuZXdsaW5lc30gd2hpY2ggaGFzIGEgdmFsdWUgb2YgXGNvZGV7Tm9uZX0gKGlmIG5vIG5ld2xpbmVzCi0gIGhhdmUgeWV0IGJlZW4gc2VlbiksIFxjb2RleydcZSBuJ30sIFxjb2RleydcZSByJ30sIFxjb2RleydcZSByXGUgbid9LAotICBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHRoZSBuZXdsaW5lIHR5cGVzIHNlZW4uCi0KLSAgUHl0aG9uIGVuZm9yY2VzIHRoYXQgdGhlIG1vZGUsIGFmdGVyIHN0cmlwcGluZyBcY29kZXsnVSd9LCBiZWdpbnMgd2l0aAotICBcY29kZXsncid9LCBcY29kZXsndyd9IG9yIFxjb2RleydhJ30uCi0KLSAgSWYgXHZhcnttb2RlfSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBcY29kZXsncid9LiAgV2hlbiBvcGVuaW5nIGEKLSAgYmluYXJ5IGZpbGUsIHlvdSBzaG91bGQgYXBwZW5kIFxjb2RleydiJ30gdG8gdGhlIFx2YXJ7bW9kZX0gdmFsdWUKLSAgZm9yIGltcHJvdmVkIHBvcnRhYmlsaXR5LiAgKEl0J3MgdXNlZnVsIGV2ZW4gb24gc3lzdGVtcyB3aGljaCBkb24ndAotICB0cmVhdCBiaW5hcnkgYW5kIHRleHQgZmlsZXMgZGlmZmVyZW50bHksIHdoZXJlIGl0IHNlcnZlcyBhcwotICBkb2N1bWVudGF0aW9uLikKLSAgXGluZGV4e2xpbmUtYnVmZmVyZWQgSS9PfVxpbmRleHt1bmJ1ZmZlcmVkIEkvT31caW5kZXh7YnVmZmVyIHNpemUsIEkvT30KLSAgXGluZGV4e0kvTyBjb250cm9sIWJ1ZmZlcmluZ30KLSAgVGhlIG9wdGlvbmFsIFx2YXJ7YnVmc2l6ZX0gYXJndW1lbnQgc3BlY2lmaWVzIHRoZQotICBmaWxlJ3MgZGVzaXJlZCBidWZmZXIgc2l6ZTogMCBtZWFucyB1bmJ1ZmZlcmVkLCAxIG1lYW5zIGxpbmUKLSAgYnVmZmVyZWQsIGFueSBvdGhlciBwb3NpdGl2ZSB2YWx1ZSBtZWFucyB1c2UgYSBidWZmZXIgb2YKLSAgKGFwcHJveGltYXRlbHkpIHRoYXQgc2l6ZS4gIEEgbmVnYXRpdmUgXHZhcntidWZzaXplfSBtZWFucyB0byB1c2UKLSAgdGhlIHN5c3RlbSBkZWZhdWx0LCB3aGljaCBpcyB1c3VhbGx5IGxpbmUgYnVmZmVyZWQgZm9yIHR0eQotICBkZXZpY2VzIGFuZCBmdWxseSBidWZmZXJlZCBmb3Igb3RoZXIgZmlsZXMuICBJZiBvbWl0dGVkLCB0aGUgc3lzdGVtCi0gIGRlZmF1bHQgaXMgdXNlZC5cZm9vdG5vdGV7Ci0gICAgU3BlY2lmeWluZyBhIGJ1ZmZlciBzaXplIGN1cnJlbnRseSBoYXMgbm8gZWZmZWN0IG9uIHN5c3RlbXMgdGhhdAotICAgIGRvbid0IGhhdmUgXGNmdW5jdGlvbntzZXR2YnVmKCl9LiAgVGhlIGludGVyZmFjZSB0byBzcGVjaWZ5IHRoZQotICAgIGJ1ZmZlciBzaXplIGlzIG5vdCBkb25lIHVzaW5nIGEgbWV0aG9kIHRoYXQgY2FsbHMKLSAgICBcY2Z1bmN0aW9ue3NldHZidWYoKX0sIGJlY2F1c2UgdGhhdCBtYXkgZHVtcCBjb3JlIHdoZW4gY2FsbGVkCi0gICAgYWZ0ZXIgYW55IEkvTyBoYXMgYmVlbiBwZXJmb3JtZWQsIGFuZCB0aGVyZSdzIG5vIHJlbGlhYmxlIHdheSB0bwotICAgIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgdGhlIGNhc2UufQorICBXaGVuIG9wZW5pbmcgYSBmaWxlLCBpdCdzIHByZWZlcmFibGUgdG8gdXNlIFxmdW5jdGlvbntvcGVuKCl9IGluc3RlYWQgb2YgCisgIGludm9raW5nIHRoaXMgY29uc3RydWN0b3IgZGlyZWN0bHkuICBcY2xhc3N7ZmlsZX0gaXMgbW9yZSBzdWl0ZWQgdG8KKyAgdHlwZSB0ZXN0aW5nIChmb3IgZXhhbXBsZSwgd3JpdGluZyBcc2FtcHtpc2luc3RhbmNlKGYsIGZpbGUpfSkuCiAKICAgXHZlcnNpb25hZGRlZHsyLjJ9Ci0KLSAgXHZlcnNpb25jaGFuZ2VkW1Jlc3RyaWN0aW9uIG9uIGZpcnN0IGxldHRlciBvZiBtb2RlIHN0cmluZwotICAgICAgICAgICAgICAgICAgaW50cm9kdWNlZF17Mi41fQogXGVuZHtmdW5jZGVzY30KIAogXGJlZ2lue2Z1bmNkZXNjfXtmaWx0ZXJ9e2Z1bmN0aW9uLCBsaXN0fQogICBDb25zdHJ1Y3QgYSBsaXN0IGZyb20gdGhvc2UgZWxlbWVudHMgb2YgXHZhcntsaXN0fSBmb3Igd2hpY2gKICAgXHZhcntmdW5jdGlvbn0gcmV0dXJucyB0cnVlLiAgXHZhcntsaXN0fSBtYXkgYmUgZWl0aGVyIGEgc2VxdWVuY2UsIGEKICAgY29udGFpbmVyIHdoaWNoIHN1cHBvcnRzIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3IsICBJZiBcdmFye2xpc3R9Ci0gIGlzIGEgc3RyaW5nIG9yIGEgdHVwbGUsIHRoZSByZXN1bHQgYWxzbyBoYXMgdGhhdCB0eXBlOyBvdGhlcndpc2UgaXQKLSAgaXMgYWx3YXlzIGEgbGlzdC4gIElmIFx2YXJ7ZnVuY3Rpb259IGlzIFxjb2Rle05vbmV9LCB0aGUgaWRlbnRpdHkKLSAgZnVuY3Rpb24gaXMgYXNzdW1lZCwgdGhhdCBpcywgYWxsIGVsZW1lbnRzIG9mIFx2YXJ7bGlzdH0gdGhhdCBhcmUgZmFsc2UKLSAgKHplcm8gb3IgZW1wdHkpIGFyZSByZW1vdmVkLgorICBpcyBhIHN0cmluZyBvciBhIHR1cGxlLCB0aGUgcmVzdWx0CisgIGFsc28gaGFzIHRoYXQgdHlwZTsgb3RoZXJ3aXNlIGl0IGlzIGFsd2F5cyBhIGxpc3QuICBJZiBcdmFye2Z1bmN0aW9ufSBpcworICBcY29kZXtOb25lfSwgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGlzIGFzc3VtZWQsIHRoYXQgaXMsIGFsbCBlbGVtZW50cyBvZgorICBcdmFye2xpc3R9IHRoYXQgYXJlIGZhbHNlIGFyZSByZW1vdmVkLgogCiAgIE5vdGUgdGhhdCBcY29kZXtmaWx0ZXIoZnVuY3Rpb24sIFx2YXJ7bGlzdH0pfSBpcyBlcXVpdmFsZW50IHRvCiAgIFxjb2Rle1tpdGVtIGZvciBpdGVtIGluIFx2YXJ7bGlzdH0gaWYgZnVuY3Rpb24oaXRlbSldfSBpZiBmdW5jdGlvbiBpcwpAQCAtNzA5LDEwICs2NTksNzEgQEAKIFxlbmR7ZnVuY2Rlc2N9CiAKIFxiZWdpbntmdW5jZGVzY317b3Blbn17ZmlsZW5hbWVcb3B0aW9uYWx7LCBtb2RlXG9wdGlvbmFseywgYnVmc2l6ZX19fQotICBBIHdyYXBwZXIgZm9yIHRoZSBcZnVuY3Rpb257ZmlsZSgpfSBmdW5jdGlvbiBhYm92ZS4gIFRoZSBpbnRlbnQgaXMKLSAgZm9yIFxmdW5jdGlvbntvcGVuKCl9IHRvIGJlIHByZWZlcnJlZCBmb3IgdXNlIGFzIGEgZmFjdG9yeSBmdW5jdGlvbgotICByZXR1cm5pbmcgYSBuZXcgXGNsYXNze2ZpbGV9IG9iamVjdC4gIFxjbGFzc3tmaWxlfSBpcyBtb3JlIHN1aXRlZCB0bwotICB0eXBlIHRlc3RpbmcgKGZvciBleGFtcGxlLCB3cml0aW5nIFxzYW1we2lzaW5zdGFuY2UoZiwgZmlsZSl9KS4KKyAgT3BlbiBhIGZpbGUsIHJldHVybmluZyBhbiBvYmplY3Qgb2YgdGhlIFxjbGFzc3tmaWxlfSB0eXBlIGRlc2NyaWJlZAorICBpbiBzZWN0aW9uflxyZWZ7Ymx0aW4tZmlsZS1vYmplY3RzfSwgYGBcdWxpbmt7RmlsZQorICBPYmplY3RzfXtibHRpbi1maWxlLW9iamVjdHMuaHRtbH0nJy4gIElmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQsCisgIFxleGNlcHRpb257SU9FcnJvcn0gaXMgcmFpc2VkLiAgV2hlbiBvcGVuaW5nIGEgZmlsZSwgaXQncworICBwcmVmZXJhYmxlIHRvIHVzZSBcZnVuY3Rpb257b3BlbigpfSBpbnN0ZWFkIG9mIGludm9raW5nIHRoZQorICBcY2xhc3N7ZmlsZX0gY29uc3RydWN0b3IgZGlyZWN0bHkuCisKKyAgVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciBcY29kZXtzdGRpb30ncworICBcY2Z1bmN0aW9ue2ZvcGVuKCl9OiBcdmFye2ZpbGVuYW1lfSBpcyB0aGUgZmlsZSBuYW1lIHRvIGJlIG9wZW5lZCwKKyAgYW5kIFx2YXJ7bW9kZX0gaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgdGhlIGZpbGUgaXMgdG8gYmUgb3BlbmVkLgorCisgIFRoZSBtb3N0IGNvbW1vbmx5LXVzZWQgdmFsdWVzIG9mIFx2YXJ7bW9kZX0gYXJlIFxjb2RleydyJ30gZm9yCisgIHJlYWRpbmcsIFxjb2Rleyd3J30gZm9yIHdyaXRpbmcgKHRydW5jYXRpbmcgdGhlIGZpbGUgaWYgaXQgYWxyZWFkeQorICBleGlzdHMpLCBhbmQgXGNvZGV7J2EnfSBmb3IgYXBwZW5kaW5nICh3aGljaCBvbiBcZW1waHtzb21lfSBcVU5JWHt9CisgIHN5c3RlbXMgbWVhbnMgdGhhdCBcZW1waHthbGx9IHdyaXRlcyBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZQorICByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHNlZWsgcG9zaXRpb24pLiAgSWYgXHZhcnttb2RlfSBpcyBvbWl0dGVkLAorICBpdCBkZWZhdWx0cyB0byBcY29kZXsncid9LiAgV2hlbiBvcGVuaW5nIGEgYmluYXJ5IGZpbGUsIHlvdSBzaG91bGQKKyAgYXBwZW5kIFxjb2RleydiJ30gdG8gdGhlIFx2YXJ7bW9kZX0gdmFsdWUgdG8gb3BlbiB0aGUgZmlsZSBpbiBiaW5hcnkKKyAgbW9kZSwgd2hpY2ggd2lsbCBpbXByb3ZlIHBvcnRhYmlsaXR5LiAgKEFwcGVuZGluZyBcY29kZXsnYid9IGlzCisgIHVzZWZ1bCBldmVuIG9uIHN5c3RlbXMgdGhhdCBkb24ndCB0cmVhdCBiaW5hcnkgYW5kIHRleHQgZmlsZXMKKyAgZGlmZmVyZW50bHksIHdoZXJlIGl0IHNlcnZlcyBhcyBkb2N1bWVudGF0aW9uLikgIFNlZSBiZWxvdyBmb3IgbW9yZQorICBwb3NzaWJsZSB2YWx1ZXMgb2YgXHZhcnttb2RlfS4KKworICBcaW5kZXh7bGluZS1idWZmZXJlZCBJL099XGluZGV4e3VuYnVmZmVyZWQgSS9PfVxpbmRleHtidWZmZXIgc2l6ZSwgSS9PfQorICBcaW5kZXh7SS9PIGNvbnRyb2whYnVmZmVyaW5nfQorICBUaGUgb3B0aW9uYWwgXHZhcntidWZzaXplfSBhcmd1bWVudCBzcGVjaWZpZXMgdGhlCisgIGZpbGUncyBkZXNpcmVkIGJ1ZmZlciBzaXplOiAwIG1lYW5zIHVuYnVmZmVyZWQsIDEgbWVhbnMgbGluZQorICBidWZmZXJlZCwgYW55IG90aGVyIHBvc2l0aXZlIHZhbHVlIG1lYW5zIHVzZSBhIGJ1ZmZlciBvZgorICAoYXBwcm94aW1hdGVseSkgdGhhdCBzaXplLiAgQSBuZWdhdGl2ZSBcdmFye2J1ZnNpemV9IG1lYW5zIHRvIHVzZQorICB0aGUgc3lzdGVtIGRlZmF1bHQsIHdoaWNoIGlzIHVzdWFsbHkgbGluZSBidWZmZXJlZCBmb3IgdHR5CisgIGRldmljZXMgYW5kIGZ1bGx5IGJ1ZmZlcmVkIGZvciBvdGhlciBmaWxlcy4gIElmIG9taXR0ZWQsIHRoZSBzeXN0ZW0KKyAgZGVmYXVsdCBpcyB1c2VkLlxmb290bm90ZXsKKyAgICBTcGVjaWZ5aW5nIGEgYnVmZmVyIHNpemUgY3VycmVudGx5IGhhcyBubyBlZmZlY3Qgb24gc3lzdGVtcyB0aGF0CisgICAgZG9uJ3QgaGF2ZSBcY2Z1bmN0aW9ue3NldHZidWYoKX0uICBUaGUgaW50ZXJmYWNlIHRvIHNwZWNpZnkgdGhlCisgICAgYnVmZmVyIHNpemUgaXMgbm90IGRvbmUgdXNpbmcgYSBtZXRob2QgdGhhdCBjYWxscworICAgIFxjZnVuY3Rpb257c2V0dmJ1ZigpfSwgYmVjYXVzZSB0aGF0IG1heSBkdW1wIGNvcmUgd2hlbiBjYWxsZWQKKyAgICBhZnRlciBhbnkgSS9PIGhhcyBiZWVuIHBlcmZvcm1lZCwgYW5kIHRoZXJlJ3Mgbm8gcmVsaWFibGUgd2F5IHRvCisgICAgZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyB0aGUgY2FzZS59CisKKyAgTW9kZXMgXGNvZGV7J3IrJ30sIFxjb2Rleyd3Kyd9IGFuZCBcY29kZXsnYSsnfSBvcGVuIHRoZSBmaWxlIGZvcgorICB1cGRhdGluZyAobm90ZSB0aGF0IFxjb2Rleyd3Kyd9IHRydW5jYXRlcyB0aGUgZmlsZSkuICBBcHBlbmQKKyAgXGNvZGV7J2InfSB0byB0aGUgbW9kZSB0byBvcGVuIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlLCBvbiBzeXN0ZW1zCisgIHRoYXQgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGJpbmFyeSBhbmQgdGV4dCBmaWxlczsgb24gc3lzdGVtcworICB0aGF0IGRvbid0IGhhdmUgdGhpcyBkaXN0aW5jdGlvbiwgYWRkaW5nIHRoZSBcY29kZXsnYid9IGhhcyBubyBlZmZlY3QuCisgIAorICBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgXGNmdW5jdGlvbntmb3BlbigpfSB2YWx1ZXMgXHZhcnttb2RlfQorICBtYXkgYmUgXGNvZGV7J1UnfSBvciBcY29kZXsnclUnfS4gIFB5dGhvbiBpcyB1c3VhbGx5IGJ1aWx0IHdpdGggdW5pdmVyc2FsCisgIG5ld2xpbmUgc3VwcG9ydDsgc3VwcGx5aW5nIFxjb2RleydVJ30gb3BlbnMgdGhlIGZpbGUgYXMgYSB0ZXh0IGZpbGUsIGJ1dAorICBsaW5lcyBtYXkgYmUgdGVybWluYXRlZCBieSBhbnkgb2YgdGhlIGZvbGxvd2luZzogdGhlIFxVTklYe30gZW5kLW9mLWxpbmUKKyAgY29udmVudGlvbiBcY29kZXsnXGUgbid9LCAKKyAgdGhlIE1hY2ludG9zaCBjb252ZW50aW9uIFxjb2RleydcZSByJ30sIG9yIHRoZSBXaW5kb3dzCisgIGNvbnZlbnRpb24gXGNvZGV7J1xlIHJcZSBuJ30uIEFsbCBvZiB0aGVzZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbnMgYXJlIHNlZW4gYXMKKyAgXGNvZGV7J1xlIG4nfQorICBieSB0aGUgUHl0aG9uIHByb2dyYW0uIElmIFB5dGhvbiBpcyBidWlsdCB3aXRob3V0IHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyAgYSBcdmFye21vZGV9IHdpdGggXGNvZGV7J1UnfSBpcyB0aGUgc2FtZSBhcyBub3JtYWwgdGV4dCBtb2RlLiAgTm90ZSB0aGF0CisgIGZpbGUgb2JqZWN0cyBzbyBvcGVuZWQgYWxzbyBoYXZlIGFuIGF0dHJpYnV0ZSBjYWxsZWQKKyAgXG1lbWJlcntuZXdsaW5lc30gd2hpY2ggaGFzIGEgdmFsdWUgb2YgXGNvZGV7Tm9uZX0gKGlmIG5vIG5ld2xpbmVzCisgIGhhdmUgeWV0IGJlZW4gc2VlbiksIFxjb2RleydcZSBuJ30sIFxjb2RleydcZSByJ30sIFxjb2RleydcZSByXGUgbid9LAorICBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHRoZSBuZXdsaW5lIHR5cGVzIHNlZW4uCisKKyAgUHl0aG9uIGVuZm9yY2VzIHRoYXQgdGhlIG1vZGUsIGFmdGVyIHN0cmlwcGluZyBcY29kZXsnVSd9LCBiZWdpbnMgd2l0aAorICBcY29kZXsncid9LCBcY29kZXsndyd9IG9yIFxjb2RleydhJ30uCisKKyAgXHZlcnNpb25jaGFuZ2VkW1Jlc3RyaWN0aW9uIG9uIGZpcnN0IGxldHRlciBvZiBtb2RlIHN0cmluZworICAgICAgICAgICAgICAgICAgaW50cm9kdWNlZF17Mi41fQogXGVuZHtmdW5jZGVzY30KIAogXGJlZ2lue2Z1bmNkZXNjfXtvcmR9e2N9CkBAIC03NjQsMTUgKzc3NSwzMCBAQAogXGJlZ2lue3ZlcmJhdGltfQogY2xhc3MgQyhvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogc2VsZi5fX3ggPSBOb25lCi0gICAgZGVmIGdldHgoc2VsZik6IHJldHVybiBzZWxmLl9feAotICAgIGRlZiBzZXR4KHNlbGYsIHZhbHVlKTogc2VsZi5fX3ggPSB2YWx1ZQotICAgIGRlZiBkZWx4KHNlbGYpOiBkZWwgc2VsZi5fX3gKKyAgICBkZWYgZ2V0eChzZWxmKTogcmV0dXJuIHNlbGYuX3gKKyAgICBkZWYgc2V0eChzZWxmLCB2YWx1ZSk6IHNlbGYuX3ggPSB2YWx1ZQorICAgIGRlZiBkZWx4KHNlbGYpOiBkZWwgc2VsZi5feAogICAgIHggPSBwcm9wZXJ0eShnZXR4LCBzZXR4LCBkZWx4LCAiSSdtIHRoZSAneCcgcHJvcGVydHkuIikKIFxlbmR7dmVyYmF0aW19CiAKICAgSWYgZ2l2ZW4sIFx2YXJ7ZG9jfSB3aWxsIGJlIHRoZSBkb2NzdHJpbmcgb2YgdGhlIHByb3BlcnR5IGF0dHJpYnV0ZS4KICAgT3RoZXJ3aXNlLCB0aGUgcHJvcGVydHkgd2lsbCBjb3B5IFx2YXJ7ZmdldH0ncyBkb2NzdHJpbmcgKGlmIGl0Ci0gIGV4aXN0cykuCisgIGV4aXN0cykuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSByZWFkLW9ubHkgcHJvcGVydGllcworICBlYXNpbHkgdXNpbmcgXGZ1bmN0aW9ue3Byb3BlcnR5KCl9IGFzIGEgZGVjb3JhdG9yOgorCitcYmVnaW57dmVyYmF0aW19CitjbGFzcyBQYXJyb3Qob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX3ZvbHRhZ2UgPSAxMDAwMDAKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB2b2x0YWdlKHNlbGYpOgorICAgICAgICAiIiJHZXQgdGhlIGN1cnJlbnQgdm9sdGFnZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZvbHRhZ2UKK1xlbmR7dmVyYmF0aW19CisKKyAgdHVybnMgdGhlIFxtZXRob2R7dm9sdGFnZSgpfSBtZXRob2QgaW50byBhIGBgZ2V0dGVyJycgZm9yIGEgcmVhZC1vbmx5CisgIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUuCiAKICAgXHZlcnNpb25hZGRlZHsyLjJ9CiAgIFx2ZXJzaW9uY2hhbmdlZFtVc2UgXHZhcntmZ2V0fSdzIGRvY3N0cmluZyBpZiBubyBcdmFye2RvY30gZ2l2ZW5dezIuNX0KQEAgLTk1OCw4ICs5ODQsMzAgQEAKIFxiZWdpbntmdW5jZGVzY317c29ydGVkfXtpdGVyYWJsZVxvcHRpb25hbHssIGNtcFxvcHRpb25hbHssCiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5XG9wdGlvbmFseywgcmV2ZXJzZX19fX0KICAgUmV0dXJuIGEgbmV3IHNvcnRlZCBsaXN0IGZyb20gdGhlIGl0ZW1zIGluIFx2YXJ7aXRlcmFibGV9LgotICBUaGUgb3B0aW9uYWwgYXJndW1lbnRzIFx2YXJ7Y21wfSwgXHZhcntrZXl9LCBhbmQgXHZhcntyZXZlcnNlfQotICBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhvc2UgZm9yIHRoZSBcbWV0aG9ke2xpc3Quc29ydCgpfSBtZXRob2QuCisKKyAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50cyBcdmFye2NtcH0sIFx2YXJ7a2V5fSwgYW5kIFx2YXJ7cmV2ZXJzZX0gaGF2ZQorICB0aGUgc2FtZSBtZWFuaW5nIGFzIHRob3NlIGZvciB0aGUgXG1ldGhvZHtsaXN0LnNvcnQoKX0gbWV0aG9kCisgIChkZXNjcmliZWQgaW4gc2VjdGlvbn5ccmVme3R5cGVzc2VxLW11dGFibGV9KS4KKworICBcdmFye2NtcH0gc3BlY2lmaWVzIGEgY3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gb2YgdHdvIGFyZ3VtZW50cworICAoaXRlcmFibGUgZWxlbWVudHMpIHdoaWNoIHNob3VsZCByZXR1cm4gYSBuZWdhdGl2ZSwgemVybyBvciBwb3NpdGl2ZQorICBudW1iZXIgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGNvbnNpZGVyZWQgc21hbGxlcgorICB0aGFuLCBlcXVhbCB0bywgb3IgbGFyZ2VyIHRoYW4gdGhlIHNlY29uZCBhcmd1bWVudDoKKyAgXHNhbXB7XHZhcntjbXB9PVxrZXl3b3Jke2xhbWJkYX0gXHZhcnt4fSxcdmFye3l9OgorICBcZnVuY3Rpb257Y21wfSh4Lmxvd2VyKCksIHkubG93ZXIoKSl9CisgICAgIAorICBcdmFye2tleX0gc3BlY2lmaWVzIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB0bworICAgICBleHRyYWN0IGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudDoKKyAgICAgXHNhbXB7XHZhcntrZXl9PVxmdW5jdGlvbntzdHIubG93ZXJ9fQorCisgIFx2YXJ7cmV2ZXJzZX0gaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvIFxjb2Rle1RydWV9LCB0aGVuIHRoZQorICAgICBsaXN0IGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuCisKKyAgSW4gZ2VuZXJhbCwgdGhlIFx2YXJ7a2V5fSBhbmQgXHZhcntyZXZlcnNlfSBjb252ZXJzaW9uIHByb2Nlc3NlcyBhcmUKKyAgbXVjaCBmYXN0ZXIgdGhhbiBzcGVjaWZ5aW5nIGFuIGVxdWl2YWxlbnQgXHZhcntjbXB9IGZ1bmN0aW9uLiAgVGhpcyBpcworICBiZWNhdXNlIFx2YXJ7Y21wfSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGVhY2ggbGlzdCBlbGVtZW50IHdoaWxlCisgIFx2YXJ7a2V5fSBhbmQgXHZhcntyZXZlcnNlfSB0b3VjaCBlYWNoIGVsZW1lbnQgb25seSBvbmNlLgorCiAgIFx2ZXJzaW9uYWRkZWR7Mi40fQogXGVuZHtmdW5jZGVzY30KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJnZXR0ZXh0LnRleCBiL0RvYy9saWIvbGliZ2V0dGV4dC50ZXgKaW5kZXggZTQxZjhiZi4uNWM3YzZiOSAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJnZXR0ZXh0LnRleAorKysgYi9Eb2MvbGliL2xpYmdldHRleHQudGV4CkBAIC01NDksNyArNTQ5LDcgQEAKIHdyaXR0ZW4gYSBwcm9ncmFtIGNhbGxlZAogXHByb2dyYW17eHBvdH0gd2hpY2ggZG9lcyBhIHNpbWlsYXIgam9iLiAgSXQgaXMgYXZhaWxhYmxlIGFzIHBhcnQgb2YKIGhpcyBccHJvZ3JhbXtwby11dGlsc30gcGFja2FnZSBhdAotXHVybHtodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby11dGlscy9IVE1ML30ufSBwcm9ncmFtCitcdXJse2h0dHA6Ly9wby11dGlscy5wcm9naWNpZWxzLWJwaS5jYS99Ln0gcHJvZ3JhbQogc2NhbnMgYWxsIHlvdXIgUHl0aG9uIHNvdXJjZSBjb2RlIGxvb2tpbmcgZm9yIHRoZSBzdHJpbmdzIHlvdQogcHJldmlvdXNseSBtYXJrZWQgYXMgdHJhbnNsYXRhYmxlLiAgSXQgaXMgc2ltaWxhciB0byB0aGUgR05VCiBccHJvZ3JhbXtnZXR0ZXh0fSBwcm9ncmFtIGV4Y2VwdCB0aGF0IGl0IHVuZGVyc3RhbmRzIGFsbCB0aGUKQEAgLTU4NSw4ICs1ODUsOCBAQAogdHJhbnNsYXRpb24gcHJvY2Vzc2luZyBkdXJpbmcgcnVuLXRpbWUuCiAKIEhvdyB5b3UgdXNlIHRoZSBcbW9kdWxle2dldHRleHR9IG1vZHVsZSBpbiB5b3VyIGNvZGUgZGVwZW5kcyBvbgotd2hldGhlciB5b3UgYXJlIGludGVybmF0aW9uYWxpemluZyB5b3VyIGVudGlyZSBhcHBsaWNhdGlvbiBvciBhIHNpbmdsZQotbW9kdWxlLgord2hldGhlciB5b3UgYXJlIGludGVybmF0aW9uYWxpemluZyBhIHNpbmdsZSBtb2R1bGUgb3IgeW91ciBlbnRpcmUgYXBwbGljYXRpb24uCitUaGUgbmV4dCB0d28gc2VjdGlvbnMgd2lsbCBkaXNjdXNzIGVhY2ggY2FzZS4KIAogXHN1YnN1YnNlY3Rpb257TG9jYWxpemluZyB5b3VyIG1vZHVsZX0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJpbXAudGV4IGIvRG9jL2xpYi9saWJpbXAudGV4CmluZGV4IGUwYTc3NWMuLjU5OGQzNTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGliaW1wLnRleAorKysgYi9Eb2MvbGliL2xpYmltcC50ZXgKQEAgLTIzMiw2ICsyMzIsMjQgQEAKIHNvdXJjZSBmaWxlLgogXGVuZHtmdW5jZGVzY30KIAorXGJlZ2lue2NsYXNzZGVzY317TnVsbEltcG9ydGVyfXtwYXRoX3N0cmluZ30KK1RoZSBcY2xhc3N7TnVsbEltcG9ydGVyfSB0eXBlIGlzIGEgXHBlcHszMDJ9IGltcG9ydCBob29rIHRoYXQgaGFuZGxlcworbm9uLWRpcmVjdG9yeSBwYXRoIHN0cmluZ3MgYnkgZmFpbGluZyB0byBmaW5kIGFueSBtb2R1bGVzLiAgQ2FsbGluZyB0aGlzCit0eXBlIHdpdGggYW4gZXhpc3RpbmcgZGlyZWN0b3J5IG9yIGVtcHR5IHN0cmluZyByYWlzZXMKK1xleGNlcHRpb257SW1wb3J0RXJyb3J9LiAgT3RoZXJ3aXNlLCBhIFxjbGFzc3tOdWxsSW1wb3J0ZXJ9IGluc3RhbmNlIGlzCityZXR1cm5lZC4KKworUHl0aG9uIGFkZHMgaW5zdGFuY2VzIG9mIHRoaXMgdHlwZSB0byBcY29kZXtzeXMucGF0aF9pbXBvcnRlcl9jYWNoZX0gZm9yCithbnkgcGF0aCBlbnRyaWVzIHRoYXQgYXJlIG5vdCBkaXJlY3RvcmllcyBhbmQgYXJlIG5vdCBoYW5kbGVkIGJ5IGFueSBvdGhlcgorcGF0aCBob29rcyBvbiBcY29kZXtzeXMucGF0aF9ob29rc30uICBJbnN0YW5jZXMgaGF2ZSBvbmx5IG9uZSBtZXRob2Q6CisKK1xiZWdpbnttZXRob2RkZXNjfXtmaW5kX21vZHVsZX17ZnVsbG5hbWUgXG9wdGlvbmFseywgcGF0aH19CitUaGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyBcY29kZXtOb25lfSwgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0ZWQKK21vZHVsZSBjb3VsZCBub3QgYmUgZm91bmQuCitcZW5ke21ldGhvZGRlc2N9CisKK1x2ZXJzaW9uYWRkZWR7Mi41fQorXGVuZHtjbGFzc2Rlc2N9CiAKIFxzdWJzZWN0aW9ue0V4YW1wbGVzfQogXGxhYmVse2V4YW1wbGVzLWltcH0KQEAgLTI1Nyw3ICsyNzUsNyBAQAogICAgICMgdGhlcmUncyBhIHByb2JsZW0gd2UgY2FuJ3QgaGFuZGxlIC0tIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdC4KIAogICAgIGZwLCBwYXRobmFtZSwgZGVzY3JpcHRpb24gPSBpbXAuZmluZF9tb2R1bGUobmFtZSkKLSAgICAKKwogICAgIHRyeToKICAgICAgICAgcmV0dXJuIGltcC5sb2FkX21vZHVsZShuYW1lLCBmcCwgcGF0aG5hbWUsIGRlc2NyaXB0aW9uKQogICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYmluc3BlY3QudGV4IGIvRG9jL2xpYi9saWJpbnNwZWN0LnRleAppbmRleCA1Y2FiYjgwLi44NTY1MWYwIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmluc3BlY3QudGV4CisrKyBiL0RvYy9saWIvbGliaW5zcGVjdC50ZXgKQEAgLTE4MCwxMyArMTgwLDMyIEBACiAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBkYXRhIGRlc2NyaXB0b3IuCiAKICAgRGF0YSBkZXNjcmlwdG9ycyBoYXZlIGJvdGggYSBfX2dldF9fIGFuZCBhIF9fc2V0X18gYXR0cmlidXRlLiAgRXhhbXBsZXMgYXJlCi0gIHByb3BlcnRpZXMgKGRlZmluZWQgaW4gUHl0aG9uKSBhbmQgZ2V0c2V0cyBhbmQgbWVtYmVycyAoZGVmaW5lZCBpbiBDKS4KLSAgVHlwaWNhbGx5LCBkYXRhIGRlc2NyaXB0b3JzIHdpbGwgYWxzbyBoYXZlIF9fbmFtZV9fIGFuZCBfX2RvY19fIGF0dHJpYnV0ZXMgCi0gIChwcm9wZXJ0aWVzLCBnZXRzZXRzLCBhbmQgbWVtYmVycyBoYXZlIGJvdGggb2YgdGhlc2UgYXR0cmlidXRlcyksIGJ1dCB0aGlzIAotICBpcyBub3QgZ3VhcmFudGVlZC4KKyAgcHJvcGVydGllcyAoZGVmaW5lZCBpbiBQeXRob24pLCBnZXRzZXRzLCBhbmQgbWVtYmVycy4gIFRoZSBsYXR0ZXIgdHdvIGFyZQorICBkZWZpbmVkIGluIEMgYW5kIHRoZXJlIGFyZSBtb3JlIHNwZWNpZmljIHRlc3RzIGF2YWlsYWJsZSBmb3IgdGhvc2UgdHlwZXMsCisgIHdoaWNoIGlzIHJvYnVzdCBhY3Jvc3MgUHl0aG9uIGltcGxlbWVudGF0aW9ucy4gIFR5cGljYWxseSwgZGF0YSBkZXNjcmlwdG9ycworICB3aWxsIGFsc28gaGF2ZSBfX25hbWVfXyBhbmQgX19kb2NfXyBhdHRyaWJ1dGVzIChwcm9wZXJ0aWVzLCBnZXRzZXRzLCBhbmQKKyAgbWVtYmVycyBoYXZlIGJvdGggb2YgdGhlc2UgYXR0cmlidXRlcyksIGJ1dCB0aGlzIGlzIG5vdCBndWFyYW50ZWVkLgogXHZlcnNpb25hZGRlZHsyLjN9CiBcZW5ke2Z1bmNkZXNjfQogCitcYmVnaW57ZnVuY2Rlc2N9e2lzZ2V0c2V0ZGVzY3JpcHRvcn17b2JqZWN0fQorICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgZ2V0c2V0IGRlc2NyaXB0b3IuCisKKyAgZ2V0c2V0cyBhcmUgYXR0cmlidXRlcyBkZWZpbmVkIGluIGV4dGVuc2lvbiBtb2R1bGVzIHZpYSBcY29kZXtQeUdldFNldERlZn0KKyAgc3RydWN0dXJlcy4gIEZvciBQeXRob24gaW1wbGVtZW50YXRpb25zIHdpdGhvdXQgc3VjaCB0eXBlcywgdGhpcyBtZXRob2Qgd2lsbAorICBhbHdheXMgcmV0dXJuIFxjb2Rle0ZhbHNlfS4KK1x2ZXJzaW9uYWRkZWR7Mi41fQorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtpc21lbWJlcmRlc2NyaXB0b3J9e29iamVjdH0KKyAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIG1lbWJlciBkZXNjcmlwdG9yLgorCisgIE1lbWJlciBkZXNjcmlwdG9ycyBhcmUgYXR0cmlidXRlcyBkZWZpbmVkIGluIGV4dGVuc2lvbiBtb2R1bGVzIHZpYQorICBcY29kZXtQeU1lbWJlckRlZn0gc3RydWN0dXJlcy4gIEZvciBQeXRob24gaW1wbGVtZW50YXRpb25zIHdpdGhvdXQgc3VjaAorICB0eXBlcywgdGhpcyBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIFxjb2Rle0ZhbHNlfS4KK1x2ZXJzaW9uYWRkZWR7Mi41fQorXGVuZHtmdW5jZGVzY30KKwogXHN1YnNlY3Rpb257UmV0cmlldmluZyBzb3VyY2UgY29kZQogICAgICAgICAgICAgXGxhYmVse2luc3BlY3Qtc291cmNlfX0KIApAQCAtMjcyLDE4ICsyOTEsMTggQEAKIFxlbmR7ZnVuY2Rlc2N9CiAKIFxiZWdpbntmdW5jZGVzY317Zm9ybWF0YXJnc3BlY317YXJnc1xvcHRpb25hbHssIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywKLSAgICAgIGFyZ2Zvcm1hdCwgdmFyYXJnc2Zvcm1hdCwgdmFya3dmb3JtYXQsIGRlZmF1bHRmb3JtYXR9fQorICAgICAgZm9ybWF0YXJnLCBmb3JtYXR2YXJhcmdzLCBmb3JtYXR2YXJrdywgZm9ybWF0dmFsdWUsIGpvaW59fQogCiAgIEZvcm1hdCBhIHByZXR0eSBhcmd1bWVudCBzcGVjIGZyb20gdGhlIGZvdXIgdmFsdWVzIHJldHVybmVkIGJ5Ci0gIFxmdW5jdGlvbntnZXRhcmdzcGVjKCl9LiAgVGhlIG90aGVyIGZvdXIgYXJndW1lbnRzIGFyZSB0aGUKKyAgXGZ1bmN0aW9ue2dldGFyZ3NwZWMoKX0uICBUaGUgZm9ybWF0KiBhcmd1bWVudHMgYXJlIHRoZQogICBjb3JyZXNwb25kaW5nIG9wdGlvbmFsIGZvcm1hdHRpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCB0byB0dXJuCiAgIG5hbWVzIGFuZCB2YWx1ZXMgaW50byBzdHJpbmdzLgogXGVuZHtmdW5jZGVzY30KIAogXGJlZ2lue2Z1bmNkZXNjfXtmb3JtYXRhcmd2YWx1ZXN9e2FyZ3Ncb3B0aW9uYWx7LCB2YXJhcmdzLCB2YXJrdywgbG9jYWxzLAotICAgICAgYXJnZm9ybWF0LCB2YXJhcmdzZm9ybWF0LCB2YXJrd2Zvcm1hdCwgdmFsdWVmb3JtYXR9fQorICAgICAgZm9ybWF0YXJnLCBmb3JtYXR2YXJhcmdzLCBmb3JtYXR2YXJrdywgZm9ybWF0dmFsdWUsIGpvaW59fQogICBGb3JtYXQgYSBwcmV0dHkgYXJndW1lbnQgc3BlYyBmcm9tIHRoZSBmb3VyIHZhbHVlcyByZXR1cm5lZCBieQotICBcZnVuY3Rpb257Z2V0YXJndmFsdWVzKCl9LiAgVGhlIG90aGVyIGZvdXIgYXJndW1lbnRzIGFyZSB0aGUKKyAgXGZ1bmN0aW9ue2dldGFyZ3ZhbHVlcygpfS4gIFRoZSBmb3JtYXQqIGFyZ3VtZW50cyBhcmUgdGhlCiAgIGNvcnJlc3BvbmRpbmcgb3B0aW9uYWwgZm9ybWF0dGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIHRvIHR1cm4KICAgbmFtZXMgYW5kIHZhbHVlcyBpbnRvIHN0cmluZ3MuCiBcZW5ke2Z1bmNkZXNjfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJsaW5lY2FjaGUudGV4IGIvRG9jL2xpYi9saWJsaW5lY2FjaGUudGV4CmluZGV4IDE0NzdkM2MuLjcyYzc3NDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlibGluZWNhY2hlLnRleAorKysgYi9Eb2MvbGliL2xpYmxpbmVjYWNoZS50ZXgKQEAgLTM4LDcgKzM4LDcgQEAKIFxiZWdpbntmdW5jZGVzY317Y2hlY2tjYWNoZX17XG9wdGlvbmFse2ZpbGVuYW1lfX0KIENoZWNrIHRoZSBjYWNoZSBmb3IgdmFsaWRpdHkuICBVc2UgdGhpcyBmdW5jdGlvbiBpZiBmaWxlcyBpbiB0aGUgY2FjaGUgCiBtYXkgaGF2ZSBjaGFuZ2VkIG9uIGRpc2ssIGFuZCB5b3UgcmVxdWlyZSB0aGUgdXBkYXRlZCB2ZXJzaW9uLiAgSWYKLVx2YXJ7ZmlsZW5hbWV9IGlzIG9taXR0ZWQsIGl0IHdpbGwgY2hlY2sgdGhlIHdob2xlIGNhY2hlIGVudHJpZXMuCitcdmFye2ZpbGVuYW1lfSBpcyBvbWl0dGVkLCBpdCB3aWxsIGNoZWNrIGFsbCB0aGUgZW50cmllcyBpbiB0aGUgY2FjaGUuCiBcZW5ke2Z1bmNkZXNjfQogCiBFeGFtcGxlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJsb2dnaW5nLnRleCBiL0RvYy9saWIvbGlibG9nZ2luZy50ZXgKaW5kZXggNTc2ZTJlNy4uY2M0NDI5NCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJsb2dnaW5nLnRleAorKysgYi9Eb2MvbGliL2xpYmxvZ2dpbmcudGV4CkBAIC0xMDY4LDEzICsxMDY4LDExIEBACiBcZW5ke3RhYmxlaWl9CiAKIElmIFx2YXJ7YmFja3VwQ291bnR9IGlzIG5vbi16ZXJvLCB0aGUgc3lzdGVtIHdpbGwgc2F2ZSBvbGQgbG9nIGZpbGVzIGJ5Ci1hcHBlbmRpbmcgdGhlIGV4dGVuc2lvbnMgIi4xIiwgIi4yIiBldGMuLCB0byB0aGUgZmlsZW5hbWUuIEZvciBleGFtcGxlLAotd2l0aCBhIFx2YXJ7YmFja3VwQ291bnR9IG9mIDUgYW5kIGEgYmFzZSBmaWxlIG5hbWUgb2YgXGZpbGV7YXBwLmxvZ30sCi15b3Ugd291bGQgZ2V0IFxmaWxle2FwcC5sb2d9LCBcZmlsZXthcHAubG9nLjF9LCBcZmlsZXthcHAubG9nLjJ9LCB1cCB0bwotXGZpbGV7YXBwLmxvZy41fS4gVGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB0byBpcyBhbHdheXMgXGZpbGV7YXBwLmxvZ30uCi1XaGVuIHRoaXMgZmlsZSBpcyBmaWxsZWQsIGl0IGlzIGNsb3NlZCBhbmQgcmVuYW1lZCB0byBcZmlsZXthcHAubG9nLjF9LAotYW5kIGlmIGZpbGVzIFxmaWxle2FwcC5sb2cuMX0sIFxmaWxle2FwcC5sb2cuMn0sIGV0Yy4gZXhpc3QsIHRoZW4gdGhleQotYXJlIHJlbmFtZWQgdG8gXGZpbGV7YXBwLmxvZy4yfSwgXGZpbGV7YXBwLmxvZy4zfSBldGMuIHJlc3BlY3RpdmVseS4KK2FwcGVuZGluZyBleHRlbnNpb25zIHRvIHRoZSBmaWxlbmFtZS4gVGhlIGV4dGVuc2lvbnMgYXJlIGRhdGUtYW5kLXRpbWUKK2Jhc2VkLCB1c2luZyB0aGUgc3RyZnRpbWUgZm9ybWF0IFxjb2Rle1wlWS1cJW0tXCVkX1wlSC1cJU0tXCVTfSBvciBhIGxlYWRpbmcKK3BvcnRpb24gdGhlcmVvZiwgZGVwZW5kaW5nIG9uIHRoZSByb2xsb3ZlciBpbnRlcnZhbC4gQXQgbW9zdCBcdmFye2JhY2t1cENvdW50fQorZmlsZXMgd2lsbCBiZSBrZXB0LCBhbmQgaWYgbW9yZSB3b3VsZCBiZSBjcmVhdGVkIHdoZW4gcm9sbG92ZXIgb2NjdXJzLCB0aGUKK29sZGVzdCBvbmUgaXMgZGVsZXRlZC4KIFxlbmR7Y2xhc3NkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY317ZG9Sb2xsb3Zlcn17fQpAQCAtMTUzOSw3ICsxNTM3LDcgQEAKIFRvIHN0b3AgdGhlIHNlcnZlciwgY2FsbCBcZnVuY3Rpb257c3RvcExpc3RlbmluZygpfS4gVG8gc2VuZCBhIGNvbmZpZ3VyYXRpb24KIHRvIHRoZSBzb2NrZXQsIHJlYWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgc2VuZCBpdCB0byB0aGUgc29ja2V0CiBhcyBhIHN0cmluZyBvZiBieXRlcyBwcmVjZWRlZCBieSBhIGZvdXItYnl0ZSBsZW5ndGggcGFja2VkIGluIGJpbmFyeSB1c2luZwotc3RydWN0Llxjb2Rle3BhY2soIj5MIiwgbil9Lgorc3RydWN0Llxjb2Rle3BhY2soJz5MJywgbil9LgogXGVuZHtmdW5jZGVzY30KIAogXGJlZ2lue2Z1bmNkZXNjfXtzdG9wTGlzdGVuaW5nfXt9CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYm1haWxib3gudGV4IGIvRG9jL2xpYi9saWJtYWlsYm94LnRleAppbmRleCAwYTFmNzkyLi43NWVhN2UxIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYm1haWxib3gudGV4CisrKyBiL0RvYy9saWIvbGlibWFpbGJveC50ZXgKQEAgLTEzNjcsOSArMTM2Nyw4IEBACiAgICAgICAgIHByaW50IHN1YmplY3QKIFxlbmR7dmVyYmF0aW19CiAKLUEgKHN1cnByaXNpbmdseSkgc2ltcGxlIGV4YW1wbGUgb2YgY29weWluZyBhbGwgbWFpbCBmcm9tIGEgQmFieWwgbWFpbGJveCB0byBhbgotTUggbWFpbGJveCwgY29udmVydGluZyBhbGwgb2YgdGhlIGZvcm1hdC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZQotY29udmVydGVkOgorVG8gY29weSBhbGwgbWFpbCBmcm9tIGEgQmFieWwgbWFpbGJveCB0byBhbiBNSCBtYWlsYm94LCBjb252ZXJ0aW5nIGFsbAorb2YgdGhlIGZvcm1hdC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQ6CiAKIFxiZWdpbnt2ZXJiYXRpbX0KIGltcG9ydCBtYWlsYm94CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYm1pbWV0eXBlcy50ZXggYi9Eb2MvbGliL2xpYm1pbWV0eXBlcy50ZXgKaW5kZXggOGUwNzc2OC4uNmM0NmQ2ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJtaW1ldHlwZXMudGV4CisrKyBiL0RvYy9saWIvbGlibWltZXR5cGVzLnRleApAQCAtMTU4LDYgKzE1OCwyMCBAQAogICBcdmVyc2lvbmFkZGVkezIuMn0KIFxlbmR7Y2xhc3NkZXNjfQogCitBbiBleGFtcGxlIHVzYWdlIG9mIHRoZSBtb2R1bGU6CisKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiBpbXBvcnQgbWltZXR5cGVzCis+Pj4gbWltZXR5cGVzLmluaXQoKQorPj4+IG1pbWV0eXBlcy5rbm93bmZpbGVzCitbJy9ldGMvbWltZS50eXBlcycsICcvZXRjL2h0dHBkL21pbWUudHlwZXMnLCAuLi4gXQorPj4+IG1pbWV0eXBlcy5zdWZmaXhfbWFwWycudGd6J10KKycudGFyLmd6JworPj4+IG1pbWV0eXBlcy5lbmNvZGluZ3NfbWFwWycuZ3onXQorJ2d6aXAnCis+Pj4gbWltZXR5cGVzLnR5cGVzX21hcFsnLnRneiddCisnYXBwbGljYXRpb24veC10YXItZ3onCitcZW5ke3ZlcmJhdGltfQogCiBcc3Vic2VjdGlvbntNaW1lVHlwZXMgT2JqZWN0cyBcbGFiZWx7bWltZXR5cGVzLW9iamVjdHN9fQogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYm5ldy50ZXggYi9Eb2MvbGliL2xpYm5ldy50ZXgKaW5kZXggZTNmMmE0OS4uMTgxNjJkYyAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJuZXcudGV4CisrKyBiL0RvYy9saWIvbGlibmV3LnRleApAQCAtMjIsMTMgKzIyLDE2IEBACiBjYWxsYWJsZS4KIFxlbmR7ZnVuY2Rlc2N9CiAKLVxiZWdpbntmdW5jZGVzY317ZnVuY3Rpb259e2NvZGUsIGdsb2JhbHNcb3B0aW9uYWx7LCBuYW1lXG9wdGlvbmFseywgYXJnZGVmc319fQorXGJlZ2lue2Z1bmNkZXNjfXtmdW5jdGlvbn17Y29kZSwgZ2xvYmFsc1xvcHRpb25hbHssIG5hbWVcb3B0aW9uYWx7LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnZGVmc1xvcHRpb25hbHssIGNsb3N1cmV9fX19CiBSZXR1cm5zIGEgKFB5dGhvbikgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gY29kZSBhbmQgZ2xvYmFscy4gSWYKIFx2YXJ7bmFtZX0gaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYSBzdHJpbmcgb3IgXGNvZGV7Tm9uZX0uICBJZiBpdCBpcyBhCiBzdHJpbmcsIHRoZSBmdW5jdGlvbiB3aWxsIGhhdmUgdGhlIGdpdmVuIG5hbWUsIG90aGVyd2lzZSB0aGUgZnVuY3Rpb24KIG5hbWUgd2lsbCBiZSB0YWtlbiBmcm9tIFxjb2Rle1x2YXJ7Y29kZX0uY29fbmFtZX0uICBJZgogXHZhcnthcmdkZWZzfSBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhIHR1cGxlIGFuZCB3aWxsIGJlIHVzZWQgdG8KLWRldGVybWluZSB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgcGFyYW1ldGVycy4KK2RldGVybWluZSB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgcGFyYW1ldGVycy4gIElmIFx2YXJ7Y2xvc3VyZX0gaXMgZ2l2ZW4sCitpdCBtdXN0IGJlIFxjb2Rle05vbmV9IG9yIGEgdHVwbGUgb2YgY2VsbCBvYmplY3RzIGNvbnRhaW5pbmcgb2JqZWN0cwordG8gYmluZCB0byB0aGUgbmFtZXMgaW4gXGNvZGV7XHZhcntjb2RlfS5jb19mcmVldmFyc30uCiBcZW5ke2Z1bmNkZXNjfQogCiBcYmVnaW57ZnVuY2Rlc2N9e2NvZGV9e2FyZ2NvdW50LCBubG9jYWxzLCBzdGFja3NpemUsIGZsYWdzLCBjb2Rlc3RyaW5nLApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJvcHRwYXJzZS50ZXggYi9Eb2MvbGliL2xpYm9wdHBhcnNlLnRleAppbmRleCBlYzQzZTNkLi5kZjk2ZGQ0IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYm9wdHBhcnNlLnRleAorKysgYi9Eb2MvbGliL2xpYm9wdHBhcnNlLnRleApAQCAtMSwzICsxLDUgQEAKKyUgVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEISAgRE8gTk9UIEVESVQhCislIChZb3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgaXQgaXMgZ2VuZXJhdGVkLikKIFxzZWN0aW9ue1xtb2R1bGV7b3B0cGFyc2V9IC0tLSBNb3JlIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBvcHRpb24gcGFyc2VyfQogXGRlY2xhcmVtb2R1bGV7c3RhbmRhcmR9e29wdHBhcnNlfQogXG1vZHVsZWF1dGhvcntHcmVnIFdhcmR9e2d3YXJkQHB5dGhvbi5uZXR9CkBAIC0zMDYsNyArMzA4LDcgQEAKIAogQWN0aW9ucyB0ZWxsIFxtb2R1bGV7b3B0cGFyc2V9IHdoYXQgdG8gZG8gd2hlbiBpdCBlbmNvdW50ZXJzIGFuIG9wdGlvbiBvbiB0aGUKIGNvbW1hbmQgbGluZS4gIFRoZXJlIGlzIGEgZml4ZWQgc2V0IG9mIGFjdGlvbnMgaGFyZC1jb2RlZCBpbnRvIFxtb2R1bGV7b3B0cGFyc2V9OwotYWRkaW5nIG5ldyBhY3Rpb25zIGlzIGFuIGFkdmFuY2VkIHRvcGljIGNvdmVyZWQgaW4gc2VjdGlvbn5ccmVme29wdHBhcnNlLWV4dGVuZGluZ30sIEV4dGVuZGluZyBcbW9kdWxle29wdHBhcnNlfS4KK2FkZGluZyBuZXcgYWN0aW9ucyBpcyBhbiBhZHZhbmNlZCB0b3BpYyBjb3ZlcmVkIGluIHNlY3Rpb25+XHJlZntvcHRwYXJzZS1leHRlbmRpbmctb3B0cGFyc2V9LCBFeHRlbmRpbmcgXG1vZHVsZXtvcHRwYXJzZX0uCiBNb3N0IGFjdGlvbnMgdGVsbCBcbW9kdWxle29wdHBhcnNlfSB0byBzdG9yZSBhIHZhbHVlIGluIHNvbWUgdmFyaWFibGV7LS0tfWZvcgogZXhhbXBsZSwgdGFrZSBhIHN0cmluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYW5kIHN0b3JlIGl0IGluIGFuCiBhdHRyaWJ1dGUgb2YgXGNvZGV7b3B0aW9uc30uCkBAIC0zNzEsNyArMzczLDcgQEAKIHN0cmluZzogdGhlIGRlZmF1bHQgZGVzdGluYXRpb24gZm9yIFxjb2RleyItZiJ9IGlzIFxjb2Rle2Z9LgogCiBcbW9kdWxle29wdHBhcnNlfSBhbHNvIGluY2x1ZGVzIGJ1aWx0LWluIFxjb2Rle2xvbmd9IGFuZCBcY29kZXtjb21wbGV4fSB0eXBlcy4gIEFkZGluZwotdHlwZXMgaXMgY292ZXJlZCBpbiBzZWN0aW9uflxyZWZ7b3B0cGFyc2UtZXh0ZW5kaW5nfSwgRXh0ZW5kaW5nIFxtb2R1bGV7b3B0cGFyc2V9LgordHlwZXMgaXMgY292ZXJlZCBpbiBzZWN0aW9uflxyZWZ7b3B0cGFyc2UtZXh0ZW5kaW5nLW9wdHBhcnNlfSwgRXh0ZW5kaW5nIFxtb2R1bGV7b3B0cGFyc2V9LgogCiAKIFxzdWJzdWJzZWN0aW9ue0hhbmRsaW5nIGJvb2xlYW4gKGZsYWcpIG9wdGlvbnNcbGFiZWx7b3B0cGFyc2UtaGFuZGxpbmctYm9vbGVhbi1vcHRpb25zfX0KQEAgLTU2Niw3ICs1NjgsNyBAQAogcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIlcHJvZyBbLWZdIFstcV0iLCB2ZXJzaW9uPSIlcHJvZyAxLjAiKQogXGVuZHt2ZXJiYXRpbX0KIAotTm90ZSB0aGF0IFxjb2RleyJ7XCV9cHJvZyJ9IGlzIGV4cGFuZGVkIGp1c3QgbGlrZSBpdCBpcyBpbiBcY29kZXt1c2FnZX0uICBBcGFydAorXGNvZGV7IntcJX1wcm9nIn0gaXMgZXhwYW5kZWQganVzdCBsaWtlIGl0IGlzIGluIFxjb2Rle3VzYWdlfS4gIEFwYXJ0CiBmcm9tIHRoYXQsIFxjb2Rle3ZlcnNpb259IGNhbiBjb250YWluIGFueXRoaW5nIHlvdSBsaWtlLiAgV2hlbiB5b3Ugc3VwcGx5CiBpdCwgXG1vZHVsZXtvcHRwYXJzZX0gYXV0b21hdGljYWxseSBhZGRzIGEgXGNvZGV7Ii17fS12ZXJzaW9uIn0gb3B0aW9uIHRvIHlvdXIgcGFyc2VyLgogSWYgaXQgZW5jb3VudGVycyB0aGlzIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdCBleHBhbmRzIHlvdXIKQEAgLTY1OSw3ICs2NjEsNyBAQAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKIFxlbmR7dmVyYmF0aW19Ci0lICRJZDogdHV0b3JpYWwudHh0IDUwNSAyMDA1LTA3LTIyIDAxOjUyOjQwWiBnd2FyZCAkIAorJSAkSWQ6IHR1dG9yaWFsLnR4dCA1MTUgMjAwNi0wNi0xMCAxNTozNzo0NVogZ3dhcmQgJCAKIAogCiBcc3Vic2VjdGlvbntSZWZlcmVuY2UgR3VpZGVcbGFiZWx7b3B0cGFyc2UtcmVmZXJlbmNlLWd1aWRlfX0KQEAgLTExNDYsNyArMTE0OCw3IEBACiAKIFxtb2R1bGV7b3B0cGFyc2V9IGhhcyBzaXggYnVpbHQtaW4gb3B0aW9uIHR5cGVzOiBcY29kZXtzdHJpbmd9LCBcY29kZXtpbnR9LCBcY29kZXtsb25nfSwKIFxjb2Rle2Nob2ljZX0sIFxjb2Rle2Zsb2F0fSBhbmQgXGNvZGV7Y29tcGxleH0uICBJZiB5b3UgbmVlZCB0byBhZGQgbmV3IG9wdGlvbgotdHlwZXMsIHNlZSBzZWN0aW9uflxyZWZ7b3B0cGFyc2UtZXh0ZW5kaW5nfSwgRXh0ZW5kaW5nIFxtb2R1bGV7b3B0cGFyc2V9LgordHlwZXMsIHNlZSBzZWN0aW9uflxyZWZ7b3B0cGFyc2UtZXh0ZW5kaW5nLW9wdHBhcnNlfSwgRXh0ZW5kaW5nIFxtb2R1bGV7b3B0cGFyc2V9LgogCiBBcmd1bWVudHMgdG8gc3RyaW5nIG9wdGlvbnMgYXJlIG5vdCBjaGVja2VkIG9yIGNvbnZlcnRlZCBpbiBhbnkgd2F5OiB0aGUKIHRleHQgb24gdGhlIGNvbW1hbmQgbGluZSBpcyBzdG9yZWQgaW4gdGhlIGRlc3RpbmF0aW9uIChvciBwYXNzZWQgdG8gdGhlCkBAIC0xMTk1LDE2ICsxMTk3LDE2IEBACiB3aGVyZSB0aGUgaW5wdXQgcGFyYW1ldGVycyBhcmUKIFxiZWdpbntkZXNjcmlwdGlvbn0KIFxpdGVtW1xjb2Rle2FyZ3N9XQotdGhlIGxpc3Qgb2YgYXJndW1lbnRzIHRvIHByb2Nlc3MgKFxjb2Rle3N5cy5hcmd2e1t9MTpdfSBieSBkZWZhdWx0KQordGhlIGxpc3Qgb2YgYXJndW1lbnRzIHRvIHByb2Nlc3MgKGRlZmF1bHQ6IFxjb2Rle3N5cy5hcmd2e1t9MTpdfSkKIFxpdGVtW1xjb2Rle29wdGlvbnN9XQotb2JqZWN0IHRvIHN0b3JlIG9wdGlvbiBhcmd1bWVudHMgaW4gKGEgbmV3IGluc3RhbmNlIG9mCi1vcHRwYXJzZS5WYWx1ZXMgYnkgZGVmYXVsdCkKK29iamVjdCB0byBzdG9yZSBvcHRpb24gYXJndW1lbnRzIGluIChkZWZhdWx0OiBhIG5ldyBpbnN0YW5jZSBvZgorb3B0cGFyc2UuVmFsdWVzKQogXGVuZHtkZXNjcmlwdGlvbn0KIAogYW5kIHRoZSByZXR1cm4gdmFsdWVzIGFyZQogXGJlZ2lue2Rlc2NyaXB0aW9ufQogXGl0ZW1bXGNvZGV7b3B0aW9uc31dCi10aGUgc2FtZSBvYmplY3QgYXMgd2FzIHBhc3NlZCBpbiBhcyBcY29kZXtvcHRpb25zfSwgb3IgdGhlIG5ldwordGhlIHNhbWUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCBpbiBhcyBcY29kZXtvcHRpb25zfSwgb3IgdGhlCiBvcHRwYXJzZS5WYWx1ZXMgaW5zdGFuY2UgY3JlYXRlZCBieSBcbW9kdWxle29wdHBhcnNlfQogXGl0ZW1bXGNvZGV7YXJnc31dCiB0aGUgbGVmdG92ZXIgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0ZXIgYWxsIG9wdGlvbnMgaGF2ZSBiZWVuCkBAIC0xMjEyLDkgKzEyMTQsOSBAQAogXGVuZHtkZXNjcmlwdGlvbn0KIAogVGhlIG1vc3QgY29tbW9uIHVzYWdlIGlzIHRvIHN1cHBseSBuZWl0aGVyIGtleXdvcmQgYXJndW1lbnQuICBJZiB5b3UKLXN1cHBseSBhIFxjb2Rle3ZhbHVlc30gb2JqZWN0LCBpdCB3aWxsIGJlIHJlcGVhdGVkbHkgbW9kaWZpZWQgd2l0aCBhCi1cY29kZXtzZXRhdHRyKCl9IGNhbGwgZm9yIGV2ZXJ5IG9wdGlvbiBhcmd1bWVudCB3cml0dGVuIHRvIGFuIG9wdGlvbgotZGVzdGluYXRpb24sIGFuZCBmaW5hbGx5IHJldHVybmVkIGJ5IFxtZXRob2R7cGFyc2V7XF99YXJncygpfS4KK3N1cHBseSBcY29kZXtvcHRpb25zfSwgaXQgd2lsbCBiZSBtb2RpZmllZCB3aXRoIHJlcGVhdGVkIFxjb2Rle3NldGF0dHIoKX0KK2NhbGxzIChyb3VnaGx5IG9uZSBmb3IgZXZlcnkgb3B0aW9uIGFyZ3VtZW50IHN0b3JlZCB0byBhbiBvcHRpb24KK2Rlc3RpbmF0aW9uKSBhbmQgcmV0dXJuZWQgYnkgXG1ldGhvZHtwYXJzZXtcX31hcmdzKCl9LgogCiBJZiBcbWV0aG9ke3BhcnNle1xffWFyZ3MoKX0gZW5jb3VudGVycyBhbnkgZXJyb3JzIGluIHRoZSBhcmd1bWVudCBsaXN0LCBpdCBjYWxscwogdGhlIE9wdGlvblBhcnNlcidzIFxtZXRob2R7ZXJyb3IoKX0gbWV0aG9kIHdpdGggYW4gYXBwcm9wcmlhdGUgZW5kLXVzZXIgZXJyb3IKQEAgLTEzODgsNyArMTM5MCw3IEBACiBcZW5ke3ZlcmJhdGltfQogCiBcZW5ke2l0ZW1pemV9Ci0lICRJZDogcmVmZXJlbmNlLnR4dCA1MDUgMjAwNS0wNy0yMiAwMTo1Mjo0MFogZ3dhcmQgJCAKKyUgJElkOiByZWZlcmVuY2UudHh0IDUxOSAyMDA2LTA2LTExIDE0OjM5OjExWiBnd2FyZCAkIAogCiAKIFxzdWJzZWN0aW9ue09wdGlvbiBDYWxsYmFja3NcbGFiZWx7b3B0cGFyc2Utb3B0aW9uLWNhbGxiYWNrc319CkBAIC0xNjgxLDMgKzE2ODMsMjA2IEBACiBcY29kZXsiLWMifS4gIEZpeGluZyB0aGlzIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuCiAlICRJZDogY2FsbGJhY2tzLnR4dCA0MTUgMjAwNC0wOS0zMCAwMjoyNjoxN1ogZ3JlZyAkIAogCisKK1xzdWJzZWN0aW9ue0V4dGVuZGluZyBcbW9kdWxle29wdHBhcnNlfVxsYWJlbHtvcHRwYXJzZS1leHRlbmRpbmctb3B0cGFyc2V9fQorCitTaW5jZSB0aGUgdHdvIG1ham9yIGNvbnRyb2xsaW5nIGZhY3RvcnMgaW4gaG93IFxtb2R1bGV7b3B0cGFyc2V9IGludGVycHJldHMKK2NvbW1hbmQtbGluZSBvcHRpb25zIGFyZSB0aGUgYWN0aW9uIGFuZCB0eXBlIG9mIGVhY2ggb3B0aW9uLCB0aGUgbW9zdAorbGlrZWx5IGRpcmVjdGlvbiBvZiBleHRlbnNpb24gaXMgdG8gYWRkIG5ldyBhY3Rpb25zIGFuZCBuZXcgdHlwZXMuCisKKworXHN1YnN1YnNlY3Rpb257QWRkaW5nIG5ldyB0eXBlc1xsYWJlbHtvcHRwYXJzZS1hZGRpbmctbmV3LXR5cGVzfX0KKworVG8gYWRkIG5ldyB0eXBlcywgeW91IG5lZWQgdG8gZGVmaW5lIHlvdXIgb3duIHN1YmNsYXNzIG9mIFxtb2R1bGV7b3B0cGFyc2V9J3MgT3B0aW9uCitjbGFzcy4gIFRoaXMgY2xhc3MgaGFzIGEgY291cGxlIG9mIGF0dHJpYnV0ZXMgdGhhdCBkZWZpbmUgXG1vZHVsZXtvcHRwYXJzZX0ncyB0eXBlczoKK1xtZW1iZXJ7VFlQRVN9IGFuZCBcbWVtYmVye1RZUEV7XF99Q0hFQ0tFUn0uCisKK1xtZW1iZXJ7VFlQRVN9IGlzIGEgdHVwbGUgb2YgdHlwZSBuYW1lczsgaW4geW91ciBzdWJjbGFzcywgc2ltcGx5IGRlZmluZSBhIG5ldwordHVwbGUgXG1lbWJlcntUWVBFU30gdGhhdCBidWlsZHMgb24gdGhlIHN0YW5kYXJkIG9uZS4KKworXG1lbWJlcntUWVBFe1xffUNIRUNLRVJ9IGlzIGEgZGljdGlvbmFyeSBtYXBwaW5nIHR5cGUgbmFtZXMgdG8gdHlwZS1jaGVja2luZworZnVuY3Rpb25zLiAgQSB0eXBlLWNoZWNraW5nIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKK1xiZWdpbnt2ZXJiYXRpbX0KK2RlZiBjaGVja19teXR5cGUob3B0aW9uLCBvcHQsIHZhbHVlKQorXGVuZHt2ZXJiYXRpbX0KKword2hlcmUgXGNvZGV7b3B0aW9ufSBpcyBhbiBcY2xhc3N7T3B0aW9ufSBpbnN0YW5jZSwgXGNvZGV7b3B0fSBpcyBhbiBvcHRpb24gc3RyaW5nCisoZS5nLiwgXGNvZGV7Ii1mIn0pLCBhbmQgXGNvZGV7dmFsdWV9IGlzIHRoZSBzdHJpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRoYXQKK211c3QgYmUgY2hlY2tlZCBhbmQgY29udmVydGVkIHRvIHlvdXIgZGVzaXJlZCB0eXBlLiAgXGNvZGV7Y2hlY2t7XF99bXl0eXBlKCl9CitzaG91bGQgcmV0dXJuIGFuIG9iamVjdCBvZiB0aGUgaHlwb3RoZXRpY2FsIHR5cGUgXGNvZGV7bXl0eXBlfS4gIFRoZSB2YWx1ZQorcmV0dXJuZWQgYnkgYSB0eXBlLWNoZWNraW5nIGZ1bmN0aW9uIHdpbGwgd2luZCB1cCBpbiB0aGUgT3B0aW9uVmFsdWVzCitpbnN0YW5jZSByZXR1cm5lZCBieSBcbWV0aG9ke09wdGlvblBhcnNlci5wYXJzZXtcX31hcmdzKCl9LCBvciBiZSBwYXNzZWQgdG8gYQorY2FsbGJhY2sgYXMgdGhlIFxjb2Rle3ZhbHVlfSBwYXJhbWV0ZXIuCisKK1lvdXIgdHlwZS1jaGVja2luZyBmdW5jdGlvbiBzaG91bGQgcmFpc2UgT3B0aW9uVmFsdWVFcnJvciBpZiBpdAorZW5jb3VudGVycyBhbnkgcHJvYmxlbXMuICBPcHRpb25WYWx1ZUVycm9yIHRha2VzIGEgc2luZ2xlIHN0cmluZworYXJndW1lbnQsIHdoaWNoIGlzIHBhc3NlZCBhcy1pcyB0byBPcHRpb25QYXJzZXIncyBcbWV0aG9ke2Vycm9yKCl9IG1ldGhvZCwKK3doaWNoIGluIHR1cm4gcHJlcGVuZHMgdGhlIHByb2dyYW0gbmFtZSBhbmQgdGhlIHN0cmluZyBcY29kZXsiZXJyb3I6In0gYW5kCitwcmludHMgZXZlcnl0aGluZyB0byBzdGRlcnIgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBwcm9jZXNzLgorCitIZXJlJ3MgYSBzaWxseSBleGFtcGxlIHRoYXQgZGVtb25zdHJhdGVzIGFkZGluZyBhIFxjb2Rle2NvbXBsZXh9IG9wdGlvbgordHlwZSB0byBwYXJzZSBQeXRob24tc3R5bGUgY29tcGxleCBudW1iZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUuICAoVGhpcworaXMgZXZlbiBzaWxsaWVyIHRoYW4gaXQgdXNlZCB0byBiZSwgYmVjYXVzZSBcbW9kdWxle29wdHBhcnNlfSAxLjMgYWRkZWQgYnVpbHQtaW4KK3N1cHBvcnQgZm9yIGNvbXBsZXggbnVtYmVycywgYnV0IG5ldmVyIG1pbmQuKQorCitGaXJzdCwgdGhlIG5lY2Vzc2FyeSBpbXBvcnRzOgorXGJlZ2lue3ZlcmJhdGltfQorZnJvbSBjb3B5IGltcG9ydCBjb3B5Citmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb24sIE9wdGlvblZhbHVlRXJyb3IKK1xlbmR7dmVyYmF0aW19CisKK1lvdSBuZWVkIHRvIGRlZmluZSB5b3VyIHR5cGUtY2hlY2tlciBmaXJzdCwgc2luY2UgaXQncyByZWZlcnJlZCB0byBsYXRlcgorKGluIHRoZSBcbWVtYmVye1RZUEV7XF99Q0hFQ0tFUn0gY2xhc3MgYXR0cmlidXRlIG9mIHlvdXIgT3B0aW9uIHN1YmNsYXNzKToKK1xiZWdpbnt2ZXJiYXRpbX0KK2RlZiBjaGVja19jb21wbGV4KG9wdGlvbiwgb3B0LCB2YWx1ZSk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gY29tcGxleCh2YWx1ZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gJXM6IGludmFsaWQgY29tcGxleCB2YWx1ZTogJXIiICUgKG9wdCwgdmFsdWUpKQorXGVuZHt2ZXJiYXRpbX0KKworRmluYWxseSwgdGhlIE9wdGlvbiBzdWJjbGFzczoKK1xiZWdpbnt2ZXJiYXRpbX0KK2NsYXNzIE15T3B0aW9uIChPcHRpb24pOgorICAgIFRZUEVTID0gT3B0aW9uLlRZUEVTICsgKCJjb21wbGV4IiwpCisgICAgVFlQRV9DSEVDS0VSID0gY29weShPcHRpb24uVFlQRV9DSEVDS0VSKQorICAgIFRZUEVfQ0hFQ0tFUlsiY29tcGxleCJdID0gY2hlY2tfY29tcGxleAorXGVuZHt2ZXJiYXRpbX0KKworKElmIHdlIGRpZG4ndCBtYWtlIGEgXGZ1bmN0aW9ue2NvcHkoKX0gb2YgXG1lbWJlcntPcHRpb24uVFlQRXtcX31DSEVDS0VSfSwgd2Ugd291bGQgZW5kCit1cCBtb2RpZnlpbmcgdGhlIFxtZW1iZXJ7VFlQRXtcX31DSEVDS0VSfSBhdHRyaWJ1dGUgb2YgXG1vZHVsZXtvcHRwYXJzZX0ncyBPcHRpb24gY2xhc3MuCitUaGlzIGJlaW5nIFB5dGhvbiwgbm90aGluZyBzdG9wcyB5b3UgZnJvbSBkb2luZyB0aGF0IGV4Y2VwdCBnb29kIG1hbm5lcnMKK2FuZCBjb21tb24gc2Vuc2UuKQorCitUaGF0J3MgaXQhICBOb3cgeW91IGNhbiB3cml0ZSBhIHNjcmlwdCB0aGF0IHVzZXMgdGhlIG5ldyBvcHRpb24gdHlwZQoranVzdCBsaWtlIGFueSBvdGhlciBcbW9kdWxle29wdHBhcnNlfS1iYXNlZCBzY3JpcHQsIGV4Y2VwdCB5b3UgaGF2ZSB0byBpbnN0cnVjdCB5b3VyCitPcHRpb25QYXJzZXIgdG8gdXNlIE15T3B0aW9uIGluc3RlYWQgb2YgT3B0aW9uOgorXGJlZ2lue3ZlcmJhdGltfQorcGFyc2VyID0gT3B0aW9uUGFyc2VyKG9wdGlvbl9jbGFzcz1NeU9wdGlvbikKK3BhcnNlci5hZGRfb3B0aW9uKCItYyIsIHR5cGU9ImNvbXBsZXgiKQorXGVuZHt2ZXJiYXRpbX0KKworQWx0ZXJuYXRlbHksIHlvdSBjYW4gYnVpbGQgeW91ciBvd24gb3B0aW9uIGxpc3QgYW5kIHBhc3MgaXQgdG8KK09wdGlvblBhcnNlcjsgaWYgeW91IGRvbid0IHVzZSBcbWV0aG9ke2FkZHtcX31vcHRpb24oKX0gaW4gdGhlIGFib3ZlIHdheSwgeW91Citkb24ndCBuZWVkIHRvIHRlbGwgT3B0aW9uUGFyc2VyIHdoaWNoIG9wdGlvbiBjbGFzcyB0byB1c2U6CitcYmVnaW57dmVyYmF0aW19CitvcHRpb25fbGlzdCA9IFtNeU9wdGlvbigiLWMiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0iY29tcGxleCIsIGRlc3Q9ImMiKV0KK3BhcnNlciA9IE9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25fbGlzdCkKK1xlbmR7dmVyYmF0aW19CisKKworXHN1YnN1YnNlY3Rpb257QWRkaW5nIG5ldyBhY3Rpb25zXGxhYmVse29wdHBhcnNlLWFkZGluZy1uZXctYWN0aW9uc319CisKK0FkZGluZyBuZXcgYWN0aW9ucyBpcyBhIGJpdCB0cmlja2llciwgYmVjYXVzZSB5b3UgaGF2ZSB0byB1bmRlcnN0YW5kCit0aGF0IFxtb2R1bGV7b3B0cGFyc2V9IGhhcyBhIGNvdXBsZSBvZiBjbGFzc2lmaWNhdGlvbnMgZm9yIGFjdGlvbnM6CitcYmVnaW57ZGVzY3JpcHRpb259CitcaXRlbVtgYHN0b3JlJycgYWN0aW9uc10KK2FjdGlvbnMgdGhhdCByZXN1bHQgaW4gXG1vZHVsZXtvcHRwYXJzZX0gc3RvcmluZyBhIHZhbHVlIHRvIGFuIGF0dHJpYnV0ZSBvZiB0aGUKK2N1cnJlbnQgT3B0aW9uVmFsdWVzIGluc3RhbmNlOyB0aGVzZSBvcHRpb25zIHJlcXVpcmUgYSBcbWVtYmVye2Rlc3R9CithdHRyaWJ1dGUgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIE9wdGlvbiBjb25zdHJ1Y3RvcgorXGl0ZW1bYGB0eXBlZCcnIGFjdGlvbnNdCithY3Rpb25zIHRoYXQgdGFrZSBhIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgbGluZSBhbmQgZXhwZWN0IGl0IHRvIGJlCitvZiBhIGNlcnRhaW4gdHlwZTsgb3IgcmF0aGVyLCBhIHN0cmluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYQorY2VydGFpbiB0eXBlLiAgVGhlc2Ugb3B0aW9ucyByZXF1aXJlIGEgXG1lbWJlcnt0eXBlfSBhdHRyaWJ1dGUgdG8gdGhlCitPcHRpb24gY29uc3RydWN0b3IuCitcZW5ke2Rlc2NyaXB0aW9ufQorCitUaGVzZSBhcmUgb3ZlcmxhcHBpbmcgc2V0czogc29tZSBkZWZhdWx0IGBgc3RvcmUnJyBhY3Rpb25zIGFyZSBcY29kZXtzdG9yZX0sCitcY29kZXtzdG9yZXtcX31jb25zdH0sIFxjb2Rle2FwcGVuZH0sIGFuZCBcY29kZXtjb3VudH0sIHdoaWxlIHRoZSBkZWZhdWx0IGBgdHlwZWQnJworYWN0aW9ucyBhcmUgXGNvZGV7c3RvcmV9LCBcY29kZXthcHBlbmR9LCBhbmQgXGNvZGV7Y2FsbGJhY2t9LgorCitXaGVuIHlvdSBhZGQgYW4gYWN0aW9uLCB5b3UgbmVlZCB0byBjYXRlZ29yaXplIGl0IGJ5IGxpc3RpbmcgaXQgaW4gYXQKK2xlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGNsYXNzIGF0dHJpYnV0ZXMgb2YgT3B0aW9uIChhbGwgYXJlIGxpc3RzIG9mCitzdHJpbmdzKToKK1xiZWdpbntkZXNjcmlwdGlvbn0KK1xpdGVtW1xtZW1iZXJ7QUNUSU9OU31dCithbGwgYWN0aW9ucyBtdXN0IGJlIGxpc3RlZCBpbiBBQ1RJT05TCitcaXRlbVtcbWVtYmVye1NUT1JFe1xffUFDVElPTlN9XQorYGBzdG9yZScnIGFjdGlvbnMgYXJlIGFkZGl0aW9uYWxseSBsaXN0ZWQgaGVyZQorXGl0ZW1bXG1lbWJlcntUWVBFRHtcX31BQ1RJT05TfV0KK2BgdHlwZWQnJyBhY3Rpb25zIGFyZSBhZGRpdGlvbmFsbHkgbGlzdGVkIGhlcmUKK1xpdGVtW1xjb2Rle0FMV0FZU3tcX31UWVBFRHtcX31BQ1RJT05TfV0KK2FjdGlvbnMgdGhhdCBhbHdheXMgdGFrZSBhIHR5cGUgKGkuZS4gd2hvc2Ugb3B0aW9ucyBhbHdheXMgdGFrZSBhCit2YWx1ZSkgYXJlIGFkZGl0aW9uYWxseSBsaXN0ZWQgaGVyZS4gIFRoZSBvbmx5IGVmZmVjdCBvZiB0aGlzIGlzCit0aGF0IFxtb2R1bGV7b3B0cGFyc2V9IGFzc2lnbnMgdGhlIGRlZmF1bHQgdHlwZSwgXGNvZGV7c3RyaW5nfSwgdG8gb3B0aW9ucyB3aXRoIG5vCitleHBsaWNpdCB0eXBlIHdob3NlIGFjdGlvbiBpcyBsaXN0ZWQgaW4gXGNvZGV7QUxXQVlTe1xffVRZUEVEe1xffUFDVElPTlN9LgorXGVuZHtkZXNjcmlwdGlvbn0KKworSW4gb3JkZXIgdG8gYWN0dWFsbHkgaW1wbGVtZW50IHlvdXIgbmV3IGFjdGlvbiwgeW91IG11c3Qgb3ZlcnJpZGUKK09wdGlvbidzIFxtZXRob2R7dGFrZXtcX31hY3Rpb24oKX0gbWV0aG9kIGFuZCBhZGQgYSBjYXNlIHRoYXQgcmVjb2duaXplcyB5b3VyCithY3Rpb24uCisKK0ZvciBleGFtcGxlLCBsZXQncyBhZGQgYW4gXGNvZGV7ZXh0ZW5kfSBhY3Rpb24uICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlCitzdGFuZGFyZCBcY29kZXthcHBlbmR9IGFjdGlvbiwgYnV0IGluc3RlYWQgb2YgdGFraW5nIGEgc2luZ2xlIHZhbHVlIGZyb20KK3RoZSBjb21tYW5kLWxpbmUgYW5kIGFwcGVuZGluZyBpdCB0byBhbiBleGlzdGluZyBsaXN0LCBcY29kZXtleHRlbmR9IHdpbGwKK3Rha2UgbXVsdGlwbGUgdmFsdWVzIGluIGEgc2luZ2xlIGNvbW1hLWRlbGltaXRlZCBzdHJpbmcsIGFuZCBleHRlbmQgYW4KK2V4aXN0aW5nIGxpc3Qgd2l0aCB0aGVtLiAgVGhhdCBpcywgaWYgXGNvZGV7Ii17fS1uYW1lcyJ9IGlzIGFuIFxjb2Rle2V4dGVuZH0KK29wdGlvbiBvZiB0eXBlIFxjb2Rle3N0cmluZ30sIHRoZSBjb21tYW5kIGxpbmUKK1xiZWdpbnt2ZXJiYXRpbX0KKy0tbmFtZXM9Zm9vLGJhciAtLW5hbWVzIGJsYWggLS1uYW1lcyBkaW5nLGRvbmcKK1xlbmR7dmVyYmF0aW19CisKK3dvdWxkIHJlc3VsdCBpbiBhIGxpc3QKK1xiZWdpbnt2ZXJiYXRpbX0KK1siZm9vIiwgImJhciIsICJibGFoIiwgImRpbmciLCAiZG9uZyJdCitcZW5ke3ZlcmJhdGltfQorCitBZ2FpbiB3ZSBkZWZpbmUgYSBzdWJjbGFzcyBvZiBPcHRpb246CitcYmVnaW57dmVyYmF0aW19CitjbGFzcyBNeU9wdGlvbiAoT3B0aW9uKToKKworICAgIEFDVElPTlMgPSBPcHRpb24uQUNUSU9OUyArICgiZXh0ZW5kIiwpCisgICAgU1RPUkVfQUNUSU9OUyA9IE9wdGlvbi5TVE9SRV9BQ1RJT05TICsgKCJleHRlbmQiLCkKKyAgICBUWVBFRF9BQ1RJT05TID0gT3B0aW9uLlRZUEVEX0FDVElPTlMgKyAoImV4dGVuZCIsKQorICAgIEFMV0FZU19UWVBFRF9BQ1RJT05TID0gT3B0aW9uLkFMV0FZU19UWVBFRF9BQ1RJT05TICsgKCJleHRlbmQiLCkKKworICAgIGRlZiB0YWtlX2FjdGlvbihzZWxmLCBhY3Rpb24sIGRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKToKKyAgICAgICAgaWYgYWN0aW9uID09ICJleHRlbmQiOgorICAgICAgICAgICAgbHZhbHVlID0gdmFsdWUuc3BsaXQoIiwiKQorICAgICAgICAgICAgdmFsdWVzLmVuc3VyZV92YWx1ZShkZXN0LCBbXSkuZXh0ZW5kKGx2YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIE9wdGlvbi50YWtlX2FjdGlvbigKKyAgICAgICAgICAgICAgICBzZWxmLCBhY3Rpb24sIGRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKQorXGVuZHt2ZXJiYXRpbX0KKworRmVhdHVyZXMgb2Ygbm90ZToKK1xiZWdpbntpdGVtaXplfQorXGl0ZW0ge30gCitcY29kZXtleHRlbmR9IGJvdGggZXhwZWN0cyBhIHZhbHVlIG9uIHRoZSBjb21tYW5kLWxpbmUgYW5kIHN0b3JlcyB0aGF0Cit2YWx1ZSBzb21ld2hlcmUsIHNvIGl0IGdvZXMgaW4gYm90aCBcbWVtYmVye1NUT1JFe1xffUFDVElPTlN9IGFuZAorXG1lbWJlcntUWVBFRHtcX31BQ1RJT05TfQorCitcaXRlbSB7fSAKK3RvIGVuc3VyZSB0aGF0IFxtb2R1bGV7b3B0cGFyc2V9IGFzc2lnbnMgdGhlIGRlZmF1bHQgdHlwZSBvZiBcY29kZXtzdHJpbmd9IHRvCitcY29kZXtleHRlbmR9IGFjdGlvbnMsIHdlIHB1dCB0aGUgXGNvZGV7ZXh0ZW5kfSBhY3Rpb24gaW4KK1xjb2Rle0FMV0FZU3tcX31UWVBFRHtcX31BQ1RJT05TfSBhcyB3ZWxsCisKK1xpdGVtIHt9IAorXG1ldGhvZHtNeU9wdGlvbi50YWtle1xffWFjdGlvbigpfSBpbXBsZW1lbnRzIGp1c3QgdGhpcyBvbmUgbmV3IGFjdGlvbiwgYW5kCitwYXNzZXMgY29udHJvbCBiYWNrIHRvIFxtZXRob2R7T3B0aW9uLnRha2V7XF99YWN0aW9uKCl9IGZvciB0aGUgc3RhbmRhcmQKK1xtb2R1bGV7b3B0cGFyc2V9IGFjdGlvbnMKKworXGl0ZW0ge30gCitcY29kZXt2YWx1ZXN9IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBvcHRwYXJzZXtcX31wYXJzZXIuVmFsdWVzIGNsYXNzLAord2hpY2ggcHJvdmlkZXMgdGhlIHZlcnkgdXNlZnVsIFxtZXRob2R7ZW5zdXJle1xffXZhbHVlKCl9IG1ldGhvZC4KK1xtZXRob2R7ZW5zdXJle1xffXZhbHVlKCl9IGlzIGVzc2VudGlhbGx5IFxmdW5jdGlvbntnZXRhdHRyKCl9IHdpdGggYSBzYWZldHkgdmFsdmU7CitpdCBpcyBjYWxsZWQgYXMKK1xiZWdpbnt2ZXJiYXRpbX0KK3ZhbHVlcy5lbnN1cmVfdmFsdWUoYXR0ciwgdmFsdWUpCitcZW5ke3ZlcmJhdGltfQorCitJZiB0aGUgXGNvZGV7YXR0cn0gYXR0cmlidXRlIG9mIFxjb2Rle3ZhbHVlc30gZG9lc24ndCBleGlzdCBvciBpcyBOb25lLCB0aGVuCitlbnN1cmV7XF99dmFsdWUoKSBmaXJzdCBzZXRzIGl0IHRvIFxjb2Rle3ZhbHVlfSwgYW5kIHRoZW4gcmV0dXJucyAndmFsdWUuCitUaGlzIGlzIHZlcnkgaGFuZHkgZm9yIGFjdGlvbnMgbGlrZSBcY29kZXtleHRlbmR9LCBcY29kZXthcHBlbmR9LCBhbmQKK1xjb2Rle2NvdW50fSwgYWxsIG9mIHdoaWNoIGFjY3VtdWxhdGUgZGF0YSBpbiBhIHZhcmlhYmxlIGFuZCBleHBlY3QgdGhhdAordmFyaWFibGUgdG8gYmUgb2YgYSBjZXJ0YWluIHR5cGUgKGEgbGlzdCBmb3IgdGhlIGZpcnN0IHR3bywgYW4gaW50ZWdlcgorZm9yIHRoZSBsYXR0ZXIpLiAgVXNpbmcgXG1ldGhvZHtlbnN1cmV7XF99dmFsdWUoKX0gbWVhbnMgdGhhdCBzY3JpcHRzIHVzaW5nCit5b3VyIGFjdGlvbiBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHNldHRpbmcgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGUKK29wdGlvbiBkZXN0aW5hdGlvbnMgaW4gcXVlc3Rpb247IHRoZXkgY2FuIGp1c3QgbGVhdmUgdGhlIGRlZmF1bHQgYXMKK05vbmUgYW5kIFxtZXRob2R7ZW5zdXJle1xffXZhbHVlKCl9IHdpbGwgdGFrZSBjYXJlIG9mIGdldHRpbmcgaXQgcmlnaHQgd2hlbgoraXQncyBuZWVkZWQuCisKK1xlbmR7aXRlbWl6ZX0KKyUgJElkOiBleHRlbmRpbmcudHh0IDUxNyAyMDA2LTA2LTEwIDE2OjE4OjExWiBnd2FyZCAkIAorCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYm9zc2F1ZGlvZGV2LnRleCBiL0RvYy9saWIvbGlib3NzYXVkaW9kZXYudGV4CmluZGV4IDIyM2NmMjguLjRjMTlhYWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlib3NzYXVkaW9kZXYudGV4CisrKyBiL0RvYy9saWIvbGlib3NzYXVkaW9kZXYudGV4CkBAIC02OCw3ICs2OCw3IEBACiBPcGVuIGFuIGF1ZGlvIGRldmljZSBhbmQgcmV0dXJuIGFuIE9TUyBhdWRpbyBkZXZpY2Ugb2JqZWN0LiAgVGhpcwogb2JqZWN0IHN1cHBvcnRzIG1hbnkgZmlsZS1saWtlIG1ldGhvZHMsIHN1Y2ggYXMgXG1ldGhvZHtyZWFkKCl9LAogXG1ldGhvZHt3cml0ZSgpfSwgYW5kIFxtZXRob2R7ZmlsZW5vKCl9IChhbHRob3VnaCB0aGVyZSBhcmUgc3VidGxlCi1kaWZmZXJlbmNlcyBiZXR3ZWVuIGNvbnZlbnRpb25hbCBVbml4IHJlYWQvd3JpdGUgc2VtYW50aWNzIGFuZCB0aG9zZSBvZgorZGlmZmVyZW5jZXMgYmV0d2VlbiBjb252ZW50aW9uYWwgXFVOSVh7fSByZWFkL3dyaXRlIHNlbWFudGljcyBhbmQgdGhvc2Ugb2YKIE9TUyBhdWRpbyBkZXZpY2VzKS4gIEl0IGFsc28gc3VwcG9ydHMgYSBudW1iZXIgb2YgYXVkaW8tc3BlY2lmaWMKIG1ldGhvZHM7IHNlZSBiZWxvdyBmb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgbWV0aG9kcy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJwaWNrbGUudGV4IGIvRG9jL2xpYi9saWJwaWNrbGUudGV4CmluZGV4IDQ1ZTgwYjguLmE4YWIzOWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlicGlja2xlLnRleAorKysgYi9Eb2MvbGliL2xpYnBpY2tsZS50ZXgKQEAgLTcyNSw3ICs3MjUsNTAgQEAKIAogXHN1YnNlY3Rpb257RXhhbXBsZSBcbGFiZWx7cGlja2xlLWV4YW1wbGV9fQogCi1IZXJlJ3MgYSBzaW1wbGUgZXhhbXBsZSBvZiBob3cgdG8gbW9kaWZ5IHBpY2tsaW5nIGJlaGF2aW9yIGZvciBhCitGb3IgdGhlIHNpbXBsZXN0IGNvZGUsIHVzZSB0aGUgXGZ1bmN0aW9ue2R1bXAoKX0gYW5kIFxmdW5jdGlvbntsb2FkKCl9CitmdW5jdGlvbnMuICBOb3RlIHRoYXQgYSBzZWxmLXJlZmVyZW5jaW5nIGxpc3QgaXMgcGlja2xlZCBhbmQgcmVzdG9yZWQKK2NvcnJlY3RseS4KKworXGJlZ2lue3ZlcmJhdGltfQoraW1wb3J0IHBpY2tsZQorCitkYXRhMSA9IHsnYSc6IFsxLCAyLjAsIDMsIDQrNmpdLAorICAgICAgICAgJ2InOiAoJ3N0cmluZycsIHUnVW5pY29kZSBzdHJpbmcnKSwKKyAgICAgICAgICdjJzogTm9uZX0KKworc2VsZnJlZl9saXN0ID0gWzEsIDIsIDNdCitzZWxmcmVmX2xpc3QuYXBwZW5kKHNlbGZyZWZfbGlzdCkKKworb3V0cHV0ID0gb3BlbignZGF0YS5wa2wnLCAnd2InKQorCisjIFBpY2tsZSBkaWN0aW9uYXJ5IHVzaW5nIHByb3RvY29sIDAuCitwaWNrbGUuZHVtcChkYXRhMSwgb3V0cHV0KQorCisjIFBpY2tsZSB0aGUgbGlzdCB1c2luZyB0aGUgaGlnaGVzdCBwcm90b2NvbCBhdmFpbGFibGUuCitwaWNrbGUuZHVtcChzZWxmcmVmX2xpc3QsIG91dHB1dCwgLTEpCisKK291dHB1dC5jbG9zZSgpCitcZW5ke3ZlcmJhdGltfQorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgcmVhZHMgdGhlIHJlc3VsdGluZyBwaWNrbGVkIGRhdGEuICBXaGVuIHJlYWRpbmcKK2EgcGlja2xlLWNvbnRhaW5pbmcgZmlsZSwgeW91IHNob3VsZCBvcGVuIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlCitiZWNhdXNlIHlvdSBjYW4ndCBiZSBzdXJlIGlmIHRoZSBBU0NJSSBvciBiaW5hcnkgZm9ybWF0IHdhcyB1c2VkLgorCitcYmVnaW57dmVyYmF0aW19CitpbXBvcnQgcHByaW50LCBwaWNrbGUKKworcGtsX2ZpbGUgPSBvcGVuKCdkYXRhLnBrbCcsICdyYicpCisKK2RhdGExID0gcGlja2xlLmxvYWQocGtsX2ZpbGUpCitwcHJpbnQucHByaW50KGRhdGExKQorCitkYXRhMiA9IHBpY2tsZS5sb2FkKHBrbF9maWxlKQorcHByaW50LnBwcmludChkYXRhMikKKworcGtsX2ZpbGUuY2xvc2UoKQorXGVuZHt2ZXJiYXRpbX0KKworSGVyZSdzIGEgbGFyZ2VyIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gbW9kaWZ5IHBpY2tsaW5nIGJlaGF2aW9yIGZvciBhCiBjbGFzcy4gIFRoZSBcY2xhc3N7VGV4dFJlYWRlcn0gY2xhc3Mgb3BlbnMgYSB0ZXh0IGZpbGUsIGFuZCByZXR1cm5zCiB0aGUgbGluZSBudW1iZXIgYW5kIGxpbmUgY29udGVudHMgZWFjaCB0aW1lIGl0cyBcbWV0aG9ke3JlYWRsaW5lKCl9CiBtZXRob2QgaXMgY2FsbGVkLiBJZiBhIFxjbGFzc3tUZXh0UmVhZGVyfSBpbnN0YW5jZSBpcyBwaWNrbGVkLCBhbGwKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlicGtndXRpbC50ZXggYi9Eb2MvbGliL2xpYnBrZ3V0aWwudGV4CmluZGV4IDE1ZDg2NmIuLmEyODZmMDAgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlicGtndXRpbC50ZXgKKysrIGIvRG9jL2xpYi9saWJwa2d1dGlsLnRleApAQCAtMzAsNyArMzAsNyBAQAogICB3aXRoIFxjb2Rle2ltcG9ydH0uICBBIFxmaWxleyoucGtnfSBmaWxlIGlzIHRydXN0ZWQgYXQgZmFjZSB2YWx1ZToKICAgYXBhcnQgZnJvbSBjaGVja2luZyBmb3IgZHVwbGljYXRlcywgYWxsIGVudHJpZXMgZm91bmQgaW4gYQogICBcZmlsZXsqLnBrZ30gZmlsZSBhcmUgYWRkZWQgdG8gdGhlIHBhdGgsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5Ci0gIGV4aXN0IHRoZSBmaWxlc3lzdGVtLiAgKFRoaXMgaXMgYSBmZWF0dXJlLikKKyAgZXhpc3Qgb24gdGhlIGZpbGVzeXN0ZW0uICAoVGhpcyBpcyBhIGZlYXR1cmUuKQogCiAgIElmIHRoZSBpbnB1dCBwYXRoIGlzIG5vdCBhIGxpc3QgKGFzIGlzIHRoZSBjYXNlIGZvciBmcm96ZW4KICAgcGFja2FnZXMpIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC4gIFRoZSBpbnB1dCBwYXRoIGlzIG5vdApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJwb3NpeHBhdGgudGV4IGIvRG9jL2xpYi9saWJwb3NpeHBhdGgudGV4CmluZGV4IDlmMGRlMWYuLjBiMmRhNjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlicG9zaXhwYXRoLnRleAorKysgYi9Eb2MvbGliL2xpYnBvc2l4cGF0aC50ZXgKQEAgLTQyLDggKzQyLDExIEBACiBcZW5ke2Z1bmNkZXNjfQogCiBcYmVnaW57ZnVuY2Rlc2N9e2V4aXN0c317cGF0aH0KLVJldHVybiBcY29kZXtUcnVlfSBpZiBcdmFye3BhdGh9IHJlZmVycyB0byBhbiBleGlzdGluZyBwYXRoLgotUmV0dXJucyBcY29kZXtGYWxzZX0gZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcy4KK1JldHVybiBcY29kZXtUcnVlfSBpZiBcdmFye3BhdGh9IHJlZmVycyB0byBhbiBleGlzdGluZyBwYXRoLiAgUmV0dXJucworXGNvZGV7RmFsc2V9IGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MuIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGlzCitmdW5jdGlvbiBtYXkgcmV0dXJuIFxjb2Rle0ZhbHNlfSBpZiBwZXJtaXNzaW9uIGlzIG5vdCBncmFudGVkIHRvCitleGVjdXRlIFxmdW5jdGlvbntvcy5zdGF0KCl9IG9uIHRoZSByZXF1ZXN0ZWQgZmlsZSwgZXZlbiBpZiB0aGUKK1x2YXJ7cGF0aH0gcGh5c2ljYWxseSBleGlzdHMuCiBcZW5ke2Z1bmNkZXNjfQogCiBcYmVnaW57ZnVuY2Rlc2N9e2xleGlzdHN9e3BhdGh9CkBAIC0xOTAsOSArMTkzLDggQEAKIFxlbmR7ZnVuY2Rlc2N9CiAKIFxiZWdpbntmdW5jZGVzY317c2FtZW9wZW5maWxlfXtmcDEsIGZwMn0KLVJldHVybiBcY29kZXtUcnVlfSBpZiB0aGUgZmlsZSBvYmplY3RzIFx2YXJ7ZnAxfSBhbmQgXHZhcntmcDJ9IHJlZmVyIHRvIHRoZQotc2FtZSBmaWxlLiAgVGhlIHR3byBmaWxlIG9iamVjdHMgbWF5IHJlcHJlc2VudCBkaWZmZXJlbnQgZmlsZQotZGVzY3JpcHRvcnMuCitSZXR1cm4gXGNvZGV7VHJ1ZX0gaWYgdGhlIGZpbGUgZGVzY3JpcHRvcnMgXHZhcntmcDF9IGFuZCBcdmFye2ZwMn0gcmVmZXIKK3RvIHRoZSBzYW1lIGZpbGUuCiBBdmFpbGFiaWxpdHk6ICBNYWNpbnRvc2gsIFxVTklYLgogXGVuZHtmdW5jZGVzY30KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJyYW5kb20udGV4IGIvRG9jL2xpYi9saWJyYW5kb20udGV4CmluZGV4IDZjMmY3MTAuLmM2Yjg4NDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlicmFuZG9tLnRleAorKysgYi9Eb2MvbGliL2xpYnJhbmRvbS50ZXgKQEAgLTIzNiw3ICsyMzYsNyBAQAogICBcdmFye2JldGF9IGlzIHRoZSBzaGFwZSBwYXJhbWV0ZXIuCiBcZW5ke2Z1bmNkZXNjfQogCi1BbHRlcm5hdGl2ZSBHZW5lcmF0b3JzCitBbHRlcm5hdGl2ZSBHZW5lcmF0b3JzOgogCiBcYmVnaW57Y2xhc3NkZXNjfXtXaWNobWFubkhpbGx9e1xvcHRpb25hbHtzZWVkfX0KIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgV2ljaG1hbm4tSGlsbCBhbGdvcml0aG0gYXMgdGhlIGNvcmUgZ2VuZXJhdG9yLgpAQCAtMjY3LDYgKzI2NywzMCBAQAogXHZlcnNpb25hZGRlZHsyLjR9CiBcZW5ke2NsYXNzZGVzY30KIAorRXhhbXBsZXMgb2YgYmFzaWMgdXNhZ2U6CisKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiByYW5kb20ucmFuZG9tKCkgICAgICAgICMgUmFuZG9tIGZsb2F0IHgsIDAuMCA8PSB4IDwgMS4wCiswLjM3NDQ0ODg3MTc1NjQ2NjQ2Cis+Pj4gcmFuZG9tLnVuaWZvcm0oMSwgMTApICAjIFJhbmRvbSBmbG9hdCB4LCAxLjAgPD0geCA8IDEwLjAKKzEuMTgwMDE0NjA3MzExNzUyMworPj4+IHJhbmRvbS5yYW5kaW50KDEsIDEwKSAgIyBJbnRlZ2VyIGZyb20gMSB0byAxMCwgZW5kcG9pbnRzIGluY2x1ZGVkCis3Cis+Pj4gcmFuZG9tLnJhbmRyYW5nZSgwLCAxMDEsIDIpICAjIEV2ZW4gaW50ZWdlciBmcm9tIDAgdG8gMTAwCisyNgorPj4+IHJhbmRvbS5jaG9pY2UoJ2FiY2RlZmdoaWonKSAgIyBDaG9vc2UgYSByYW5kb20gZWxlbWVudAorJ2MnCisKKz4+PiBpdGVtcyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3XQorPj4+IHJhbmRvbS5zaHVmZmxlKGl0ZW1zKQorPj4+IGl0ZW1zCitbNywgMywgMiwgNSwgNiwgNCwgMV0KKworPj4+IHJhbmRvbS5zYW1wbGUoWzEsIDIsIDMsIDQsIDVdLCAgMykgICMgQ2hvb3NlIDMgZWxlbWVudHMKK1s0LCAxLCA1XQorCitcZW5ke3ZlcmJhdGltfQorCiBcYmVnaW57c2VlYWxzb30KICAgXHNlZXRleHR7TS4gTWF0c3Vtb3RvIGFuZCBULiBOaXNoaW11cmEsIGBgTWVyc2VubmUgVHdpc3RlcjogQQogCSAgIDYyMy1kaW1lbnNpb25hbGx5IGVxdWlkaXN0cmlidXRlZCB1bmlmb3JtIHBzZXVkb3JhbmRvbQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJyZS50ZXggYi9Eb2MvbGliL2xpYnJlLnRleAppbmRleCAxNDA0ZTA5Li44NGUzODJkIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnJlLnRleAorKysgYi9Eb2MvbGliL2xpYnJlLnRleApAQCAtODk3LDcgKzg5Nyw3IEBACiAgIFxsaW5laWl7XGNvZGV7XCVkfX0KICAgICAgICAgIHtccmVnZXhwe1stK10/XGUgZCt9fQogICBcbGluZWlpe1xjb2Rle1wlZX0sIFxjb2Rle1wlRX0sIFxjb2Rle1wlZn0sIFxjb2Rle1wlZ319Ci0gICAgICAgICB7XHJlZ2V4cHtbLStdPyhcZSBkKyhcZS5cZSBkKik/fFxlIGQqXGUuXGUgZCspKFtlRV1bLStdP1xlIGQrKT99fQorICAgICAgICAge1xyZWdleHB7Wy0rXT8oXGUgZCsoXGUuXGUgZCopP3xcZS5cZSBkKykoW2VFXVstK10/XGUgZCspP319CiAgIFxsaW5laWl7XGNvZGV7XCVpfX0KICAgICAgICAgIHtccmVnZXhwe1stK10/KDBbeFhdW1xlIGRBLUZhLWZdK3wwWzAtN10qfFxlIGQrKX19CiAgIFxsaW5laWl7XGNvZGV7XCVvfX0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlicmVhZGxpbmUudGV4IGIvRG9jL2xpYi9saWJyZWFkbGluZS50ZXgKaW5kZXggYWM4ZTIzZi4uZGVjMzdiNiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJyZWFkbGluZS50ZXgKKysrIGIvRG9jL2xpYi9saWJyZWFkbGluZS50ZXgKQEAgLTcsMTAgKzcsMTMgQEAKIFxtb2R1bGVzeW5vcHNpc3tHTlUgcmVhZGxpbmUgc3VwcG9ydCBmb3IgUHl0aG9uLn0KIAogCi1UaGUgXG1vZHVsZXtyZWFkbGluZX0gbW9kdWxlIGRlZmluZXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIHVzZWQgZWl0aGVyCi1kaXJlY3RseSBvciBmcm9tIHRoZSBccmVmbW9kdWxle3JsY29tcGxldGVyfSBtb2R1bGUgdG8gZmFjaWxpdGF0ZQotY29tcGxldGlvbiBhbmQgaGlzdG9yeSBmaWxlIHJlYWQgYW5kIHdyaXRlIGZyb20gdGhlIFB5dGhvbgotaW50ZXJwcmV0ZXIuCitUaGUgXG1vZHVsZXtyZWFkbGluZX0gbW9kdWxlIGRlZmluZXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIHRvCitmYWNpbGl0YXRlIGNvbXBsZXRpb24gYW5kIHJlYWRpbmcvd3JpdGluZyBvZiBoaXN0b3J5IGZpbGVzIGZyb20gdGhlCitQeXRob24gaW50ZXJwcmV0ZXIuICBUaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCBkaXJlY3RseSBvciB2aWEgdGhlCitccmVmbW9kdWxle3JsY29tcGxldGVyfSBtb2R1bGUuICBTZXR0aW5ncyBtYWRlIHVzaW5nIAordGhpcyBtb2R1bGUgYWZmZWN0IHRoZSBiZWhhdmlvdXIgb2YgYm90aCB0aGUgaW50ZXJwcmV0ZXIncyBpbnRlcmFjdGl2ZSBwcm9tcHQgCithbmQgdGhlIHByb21wdHMgb2ZmZXJlZCBieSB0aGUgXGZ1bmN0aW9ue3Jhd19pbnB1dCgpfSBhbmQgXGZ1bmN0aW9ue2lucHV0KCl9CitidWlsdC1pbiBmdW5jdGlvbnMuCiAKIFRoZSBcbW9kdWxle3JlYWRsaW5lfSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJzZ21sbGliLnRleCBiL0RvYy9saWIvbGlic2dtbGxpYi50ZXgKaW5kZXggM2VjMTAxOC4uMWZlMGQ2MyAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJzZ21sbGliLnRleAorKysgYi9Eb2MvbGliL2xpYnNnbWxsaWIudGV4CkBAIC0xMzIsMjcgKzEzMiw1OSBAQAogCiBcYmVnaW57bWV0aG9kZGVzY317aGFuZGxlX2NoYXJyZWZ9e3JlZn0KIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwcm9jZXNzIGEgY2hhcmFjdGVyIHJlZmVyZW5jZSBvZiB0aGUgZm9ybQotXHNhbXB7XCZcI1x2YXJ7cmVmfTt9LiAgSW4gdGhlIGJhc2UgaW1wbGVtZW50YXRpb24sIFx2YXJ7cmVmfSBtdXN0Ci1iZSBhIGRlY2ltYWwgbnVtYmVyIGluIHRoZQotcmFuZ2UgMC0yNTUuICBJdCB0cmFuc2xhdGVzIHRoZSBjaGFyYWN0ZXIgdG8gXEFTQ0lJe30gYW5kIGNhbGxzIHRoZQotbWV0aG9kIFxtZXRob2R7aGFuZGxlX2RhdGEoKX0gd2l0aCB0aGUgY2hhcmFjdGVyIGFzIGFyZ3VtZW50LiAgSWYKLVx2YXJ7cmVmfSBpcyBpbnZhbGlkIG9yIG91dCBvZiByYW5nZSwgdGhlIG1ldGhvZAotXGNvZGV7dW5rbm93bl9jaGFycmVmKFx2YXJ7cmVmfSl9IGlzIGNhbGxlZCB0byBoYW5kbGUgdGhlIGVycm9yLiAgQQotc3ViY2xhc3MgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIG5hbWVkCi1jaGFyYWN0ZXIgZW50aXRpZXMuCitcc2FtcHtcJlwjXHZhcntyZWZ9O30uICBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiB1c2VzCitcbWV0aG9ke2NvbnZlcnRfY2hhcnJlZigpfSB0byBjb252ZXJ0IHRoZSByZWZlcmVuY2UgdG8gYSBzdHJpbmcuICBJZgordGhhdCBtZXRob2QgcmV0dXJucyBhIHN0cmluZywgaXQgaXMgcGFzc2VkIHRvIFxtZXRob2R7aGFuZGxlX2RhdGEoKX0sCitvdGhlcndpc2UgXG1ldGhvZHt1bmtub3duX2NoYXJyZWYoXHZhcntyZWZ9KX0gaXMgY2FsbGVkIHRvIGhhbmRsZSB0aGUKK2Vycm9yLgorXHZlcnNpb25jaGFuZ2VkW1VzZSBcbWV0aG9ke2NvbnZlcnRfY2hhcnJlZigpfSBpbnN0ZWFkIG9mIGhhcmQtY29kaW5nCit0aGUgY29udmVyc2lvbl17Mi41fQorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Y29udmVydF9jaGFycmVmfXtyZWZ9CitDb252ZXJ0IGEgY2hhcmFjdGVyIHJlZmVyZW5jZSB0byBhIHN0cmluZywgb3IgXGNvZGV7Tm9uZX0uICBcdmFye3JlZn0KK2lzIHRoZSByZWZlcmVuY2UgcGFzc2VkIGluIGFzIGEgc3RyaW5nLiAgSW4gdGhlIGJhc2UgaW1wbGVtZW50YXRpb24sCitcdmFye3JlZn0gbXVzdCBiZSBhIGRlY2ltYWwgbnVtYmVyIGluIHRoZSByYW5nZSAwLTI1NS4gIEl0IGNvbnZlcnRzCit0aGUgY29kZSBwb2ludCBmb3VuZCB1c2luZyB0aGUgXG1ldGhvZHtjb252ZXJ0X2NvZGVwb2ludCgpfSBtZXRob2QuCitJZiBcdmFye3JlZn0gaXMgaW52YWxpZCBvciBvdXQgb2YgcmFuZ2UsIHRoaXMgbWV0aG9kIHJldHVybnMKK1xjb2Rle05vbmV9LiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkZWZhdWx0CitcbWV0aG9ke2hhbmRsZV9jaGFycmVmKCl9IGltcGxlbWVudGF0aW9uIGFuZCBieSB0aGUgYXR0cmlidXRlIHZhbHVlCitwYXJzZXIuCitcdmVyc2lvbmFkZGVkezIuNX0KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2NvbnZlcnRfY29kZXBvaW50fXtjb2RlcG9pbnR9CitDb252ZXJ0IGEgY29kZXBvaW50IHRvIGEgXGNsYXNze3N0cn0gdmFsdWUuICBFbmNvZGluZ3MgY2FuIGJlIGhhbmRsZWQKK2hlcmUgaWYgYXBwcm9wcmlhdGUsIHRob3VnaCB0aGUgcmVzdCBvZiBcbW9kdWxle3NnbWxsaWJ9IGlzIG9ibGl2aW91cworb24gdGhpcyBtYXR0ZXIuCitcdmVyc2lvbmFkZGVkezIuNX0KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9e2hhbmRsZV9lbnRpdHlyZWZ9e3JlZn0KIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwcm9jZXNzIGEgZ2VuZXJhbCBlbnRpdHkgcmVmZXJlbmNlIG9mIHRoZQogZm9ybSBcc2FtcHtcJlx2YXJ7cmVmfTt9IHdoZXJlIFx2YXJ7cmVmfSBpcyBhbiBnZW5lcmFsIGVudGl0eQotcmVmZXJlbmNlLiAgSXQgbG9va3MgZm9yIFx2YXJ7cmVmfSBpbiB0aGUgaW5zdGFuY2UgKG9yIGNsYXNzKQotdmFyaWFibGUgXG1lbWJlcntlbnRpdHlkZWZzfSB3aGljaCBzaG91bGQgYmUgYSBtYXBwaW5nIGZyb20gZW50aXR5Ci1uYW1lcyB0byBjb3JyZXNwb25kaW5nIHRyYW5zbGF0aW9ucy4gIElmIGEgdHJhbnNsYXRpb24gaXMgZm91bmQsIGl0CityZWZlcmVuY2UuICBJdCBjb252ZXJ0cyBcdmFye3JlZn0gYnkgcGFzc2luZyBpdCB0bworXG1ldGhvZHtjb252ZXJ0X2VudGl0eXJlZigpfS4gIElmIGEgdHJhbnNsYXRpb24gaXMgcmV0dXJuZWQsIGl0CiBjYWxscyB0aGUgbWV0aG9kIFxtZXRob2R7aGFuZGxlX2RhdGEoKX0gd2l0aCB0aGUgdHJhbnNsYXRpb247CiBvdGhlcndpc2UsIGl0IGNhbGxzIHRoZSBtZXRob2QgXGNvZGV7dW5rbm93bl9lbnRpdHlyZWYoXHZhcntyZWZ9KX0uCiBUaGUgZGVmYXVsdCBcbWVtYmVye2VudGl0eWRlZnN9IGRlZmluZXMgdHJhbnNsYXRpb25zIGZvcgogXGNvZGV7XCZhbXA7fSwgXGNvZGV7XCZhcG9zfSwgXGNvZGV7XCZndDt9LCBcY29kZXtcJmx0O30sIGFuZAogXGNvZGV7XCZxdW90O30uCitcdmVyc2lvbmNoYW5nZWRbVXNlIFxtZXRob2R7Y29udmVydF9lbnRpdHlyZWYoKX0gaW5zdGVhZCBvZiBoYXJkLWNvZGluZwordGhlIGNvbnZlcnNpb25dezIuNX0KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2NvbnZlcnRfZW50aXR5cmVmfXtyZWZ9CitDb252ZXJ0IGEgbmFtZWQgZW50aXR5IHJlZmVyZW5jZSB0byBhIFxjbGFzc3tzdHJ9IHZhbHVlLCBvcgorXGNvZGV7Tm9uZX0uICBUaGUgcmVzdWx0aW5nIHZhbHVlIHdpbGwgbm90IGJlIHBhcnNlZC4gIFx2YXJ7cmVmfSB3aWxsCitiZSBvbmx5IHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBsb29rcyBmb3IKK1x2YXJ7cmVmfSBpbiB0aGUgaW5zdGFuY2UgKG9yIGNsYXNzKSB2YXJpYWJsZSBcbWVtYmVye2VudGl0eWRlZnN9Cit3aGljaCBzaG91bGQgYmUgYSBtYXBwaW5nIGZyb20gZW50aXR5IG5hbWVzIHRvIGNvcnJlc3BvbmRpbmcKK3RyYW5zbGF0aW9ucy4gIElmIG5vIHRyYW5zbGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgXHZhcntyZWZ9LCB0aGlzCittZXRob2QgcmV0dXJucyBcY29kZXtOb25lfS4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZGVmYXVsdAorXG1ldGhvZHtoYW5kbGVfZW50aXR5cmVmKCl9IGltcGxlbWVudGF0aW9uIGFuZCBieSB0aGUgYXR0cmlidXRlIHZhbHVlCitwYXJzZXIuCitcdmVyc2lvbmFkZGVkezIuNX0KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9e2hhbmRsZV9jb21tZW50fXtjb21tZW50fQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJzaGVsdmUudGV4IGIvRG9jL2xpYi9saWJzaGVsdmUudGV4CmluZGV4IDhiZDIwNGUuLjZjYTM1NzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlic2hlbHZlLnRleAorKysgYi9Eb2MvbGliL2xpYnNoZWx2ZS50ZXgKQEAgLTE0MywxNSArMTQzLDE3IEBACiBkZWwgZFtrZXldICAgICAgIyBkZWxldGUgZGF0YSBzdG9yZWQgYXQga2V5IChyYWlzZXMgS2V5RXJyb3IKICAgICAgICAgICAgICAgICAjIGlmIG5vIHN1Y2gga2V5KQogZmxhZyA9IGQuaGFzX2tleShrZXkpICAgIyB0cnVlIGlmIHRoZSBrZXkgZXhpc3RzCi1saXN0ID0gZC5rZXlzKCkgIyBhIGxpc3Qgb2YgYWxsIGV4aXN0aW5nIGtleXMgKHNsb3chKQora2xpc3QgPSBkLmtleXMoKSAjIGEgbGlzdCBvZiBhbGwgZXhpc3Rpbmcga2V5cyAoc2xvdyEpCiAKICMgYXMgZCB3YXMgb3BlbmVkIFdJVEhPVVQgd3JpdGViYWNrPVRydWUsIGJld2FyZToKIGRbJ3h4J10gPSByYW5nZSg0KSAgIyB0aGlzIHdvcmtzIGFzIGV4cGVjdGVkLCBidXQuLi4KIGRbJ3h4J10uYXBwZW5kKDUpICAgIyAqdGhpcyBkb2Vzbid0ISogLS0gZFsneHgnXSBpcyBTVElMTCByYW5nZSg0KSEhIQorCiAjIGhhdmluZyBvcGVuZWQgZCB3aXRob3V0IHdyaXRlYmFjaz1UcnVlLCB5b3UgbmVlZCB0byBjb2RlIGNhcmVmdWxseToKIHRlbXAgPSBkWyd4eCddICAgICAgIyBleHRyYWN0cyB0aGUgY29weQogdGVtcC5hcHBlbmQoNSkgICAgICAjIG11dGF0ZXMgdGhlIGNvcHkKIGRbJ3h4J10gPSB0ZW1wICAgICAgIyBzdG9yZXMgdGhlIGNvcHkgcmlnaHQgYmFjaywgdG8gcGVyc2lzdCBpdAorCiAjIG9yLCBkPXNoZWx2ZS5vcGVuKGZpbGVuYW1lLHdyaXRlYmFjaz1UcnVlKSB3b3VsZCBsZXQgeW91IGp1c3QgY29kZQogIyBkWyd4eCddLmFwcGVuZCg1KSBhbmQgaGF2ZSBpdCB3b3JrIGFzIGV4cGVjdGVkLCBCVVQgaXQgd291bGQgYWxzbwogIyBjb25zdW1lIG1vcmUgbWVtb3J5IGFuZCBtYWtlIHRoZSBkLmNsb3NlKCkgb3BlcmF0aW9uIHNsb3dlci4KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic2l0ZS50ZXggYi9Eb2MvbGliL2xpYnNpdGUudGV4CmluZGV4IDQzYjhkYjIuLmMwNzk3OTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlic2l0ZS50ZXgKKysrIGIvRG9jL2xpYi9saWJzaXRlLnRleApAQCAtMTYsMTIgKzE2LDEzIEBACiBJdCBzdGFydHMgYnkgY29uc3RydWN0aW5nIHVwIHRvIGZvdXIgZGlyZWN0b3JpZXMgZnJvbSBhIGhlYWQgYW5kIGEKIHRhaWwgcGFydC4gIEZvciB0aGUgaGVhZCBwYXJ0LCBpdCB1c2VzIFxjb2Rle3N5cy5wcmVmaXh9IGFuZAogXGNvZGV7c3lzLmV4ZWNfcHJlZml4fTsgZW1wdHkgaGVhZHMgYXJlIHNraXBwZWQuICBGb3IKLXRoZSB0YWlsIHBhcnQsIGl0IHVzZXMgdGhlIGVtcHR5IHN0cmluZyAob24gV2luZG93cykgb3IKLVxmaWxle2xpYi9weXRob25cc2hvcnR2ZXJzaW9uL3NpdGUtcGFja2FnZXN9IChvbiBcVU5JWHt9IGFuZCBNYWNpbnRvc2gpCi1hbmQgdGhlbiBcZmlsZXtsaWIvc2l0ZS1weXRob259LiAgRm9yIGVhY2ggb2YgdGhlIGRpc3RpbmN0Ci1oZWFkLXRhaWwgY29tYmluYXRpb25zLCBpdCBzZWVzIGlmIGl0IHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnksCi1hbmQgaWYgc28sIGFkZHMgaXQgdG8gXGNvZGV7c3lzLnBhdGh9IGFuZCBhbHNvIGluc3BlY3RzIHRoZSBuZXdseSBhZGRlZCAKLXBhdGggZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuCit0aGUgdGFpbCBwYXJ0LCBpdCB1c2VzIHRoZSBlbXB0eSBzdHJpbmcgYW5kIHRoZW4KK1xmaWxle2xpYi9zaXRlLXBhY2thZ2VzfSAob24gV2luZG93cykgb3IKK1xmaWxle2xpYi9weXRob25cc2hvcnR2ZXJzaW9uL3NpdGUtcGFja2FnZXN9IGFuZCB0aGVuCitcZmlsZXtsaWIvc2l0ZS1weXRob259IChvbiBcVU5JWHt9IGFuZCBNYWNpbnRvc2gpLiAgRm9yIGVhY2ggb2YgdGhlCitkaXN0aW5jdCBoZWFkLXRhaWwgY29tYmluYXRpb25zLCBpdCBzZWVzIGlmIGl0IHJlZmVycyB0byBhbiBleGlzdGluZworZGlyZWN0b3J5LCBhbmQgaWYgc28sIGFkZHMgaXQgdG8gXGNvZGV7c3lzLnBhdGh9IGFuZCBhbHNvIGluc3BlY3RzCit0aGUgbmV3bHkgYWRkZWQgcGF0aCBmb3IgY29uZmlndXJhdGlvbiBmaWxlcy4KIFxpbmRleGlpe3NpdGUtcHl0aG9ufXtkaXJlY3Rvcnl9CiBcaW5kZXhpaXtzaXRlLXBhY2thZ2VzfXtkaXJlY3Rvcnl9CiAKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic29ja2V0LnRleCBiL0RvYy9saWIvbGlic29ja2V0LnRleAppbmRleCA4MDY2NTI4Li5hYTc1ZWM5IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnNvY2tldC50ZXgKKysrIGIvRG9jL2xpYi9saWJzb2NrZXQudGV4CkBAIC03MTEsNiArNzExLDE3IEBACiByZWFkIHVudGlsIEVPRi4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cmluZyBvZiB0aGUgYnl0ZXMgcmVhZC4KIFxlbmR7bWV0aG9kZGVzY30KIAorXGJlZ2lue21ldGhvZGRlc2N9e3NlcnZlcn17fQorUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBBU04uMSBkaXN0aW5ndWlzaGVkIG5hbWUgaWRlbnRpZnlpbmcgdGhlIAorc2VydmVyJ3MgY2VydGlmaWNhdGUuICAoU2VlIGJlbG93IGZvciBhbiBleGFtcGxlCitzaG93aW5nIHdoYXQgZGlzdGluZ3Vpc2hlZCBuYW1lcyBsb29rIGxpa2UuKQorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317aXNzdWVyfXt9CitSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEFTTi4xIGRpc3Rpbmd1aXNoZWQgbmFtZSBpZGVudGlmeWluZyB0aGUKK2lzc3VlciBvZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuCitcZW5ke21ldGhvZGRlc2N9CisKIFxzdWJzZWN0aW9ue0V4YW1wbGUgXGxhYmVse3NvY2tldC1leGFtcGxlfX0KIAogSGVyZSBhcmUgZm91ciBtaW5pbWFsIGV4YW1wbGUgcHJvZ3JhbXMgdXNpbmcgdGhlIFRDUC9JUCBwcm90b2NvbDpcIGEKQEAgLTgzMywzICs4NDQsNDQgQEAKIHMuY2xvc2UoKQogcHJpbnQgJ1JlY2VpdmVkJywgcmVwcihkYXRhKQogXGVuZHt2ZXJiYXRpbX0KKworVGhpcyBleGFtcGxlIGNvbm5lY3RzIHRvIGFuIFNTTCBzZXJ2ZXIsIHByaW50cyB0aGUgCitzZXJ2ZXIgYW5kIGlzc3VlcidzIGRpc3Rpbmd1aXNoZWQgbmFtZXMsIHNlbmRzIHNvbWUgYnl0ZXMsCithbmQgcmVhZHMgcGFydCBvZiB0aGUgcmVzcG9uc2U6CisKK1xiZWdpbnt2ZXJiYXRpbX0KK2ltcG9ydCBzb2NrZXQKKworcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKK3MuY29ubmVjdCgoJ3d3dy52ZXJpc2lnbi5jb20nLCA0NDMpKQorCitzc2xfc29jayA9IHNvY2tldC5zc2wocykKKworcHJpbnQgcmVwcihzc2xfc29jay5zZXJ2ZXIoKSkKK3ByaW50IHJlcHIoc3NsX3NvY2suaXNzdWVyKCkpCisKKyMgU2V0IGEgc2ltcGxlIEhUVFAgcmVxdWVzdCAtLSB1c2UgaHR0cGxpYiBpbiBhY3R1YWwgY29kZS4KK3NzbF9zb2NrLndyaXRlKCIiIkdFVCAvIEhUVFAvMS4wXHIKK0hvc3Q6IHd3dy52ZXJpc2lnbi5jb21cclxuXHJcbiIiIikKKworIyBSZWFkIGEgY2h1bmsgb2YgZGF0YS4gIFdpbGwgbm90IG5lY2Vzc2FyaWx5CisjIHJlYWQgYWxsIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIuCitkYXRhID0gc3NsX3NvY2sucmVhZCgpCisKKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHRvIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHNvY2tldCwgbm90IHRoZSBTU0wgb2JqZWN0LgorZGVsIHNzbF9zb2NrCitzLmNsb3NlKCkKK1xlbmR7dmVyYmF0aW19CisKK0F0IHRoaXMgd3JpdGluZywgdGhpcyBTU0wgZXhhbXBsZSBwcmludHMgdGhlIGZvbGxvd2luZyBvdXRwdXQgKGxpbmUKK2JyZWFrcyBpbnNlcnRlZCBmb3IgcmVhZGFiaWxpdHkpOgorCitcYmVnaW57dmVyYmF0aW19CisnL0M9VVMvU1Q9Q2FsaWZvcm5pYS9MPU1vdW50YWluIFZpZXcvCisgTz1WZXJpU2lnbiwgSW5jLi9PVT1Qcm9kdWN0aW9uIFNlcnZpY2VzLworIE9VPVRlcm1zIG9mIHVzZSBhdCB3d3cudmVyaXNpZ24uY29tL3JwYSAoYykwMC8KKyBDTj13d3cudmVyaXNpZ24uY29tJworJy9PPVZlcmlTaWduIFRydXN0IE5ldHdvcmsvT1U9VmVyaVNpZ24sIEluYy4vCisgT1U9VmVyaVNpZ24gSW50ZXJuYXRpb25hbCBTZXJ2ZXIgQ0EgLSBDbGFzcyAzLworIE9VPXd3dy52ZXJpc2lnbi5jb20vQ1BTIEluY29ycC5ieSBSZWYuIExJQUJJTElUWSBMVEQuKGMpOTcgVmVyaVNpZ24nCitcZW5ke3ZlcmJhdGltfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJzb2Nrc3ZyLnRleCBiL0RvYy9saWIvbGlic29ja3N2ci50ZXgKaW5kZXggYjIxZTgwNC4uYzdiMjhlYSAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJzb2Nrc3ZyLnRleAorKysgYi9Eb2MvbGliL2xpYnNvY2tzdnIudGV4CkBAIC03NCw5ICs3NCw5IEBACiBcZW5ke3ZlcmJhdGltfQogCiBOb3RlIHRoYXQgXGNsYXNze1VuaXhEYXRhZ3JhbVNlcnZlcn0gZGVyaXZlcyBmcm9tIFxjbGFzc3tVRFBTZXJ2ZXJ9LCBub3QKLWZyb20gXGNsYXNze1VuaXhTdHJlYW1TZXJ2ZXJ9IC0tIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBhbiBJUCBhbmQgYQotVW5peCBzdHJlYW0gc2VydmVyIGlzIHRoZSBhZGRyZXNzIGZhbWlseSwgd2hpY2ggaXMgc2ltcGx5IHJlcGVhdGVkIGluIGJvdGgKLXVuaXggc2VydmVyIGNsYXNzZXMuCitmcm9tIFxjbGFzc3tVbml4U3RyZWFtU2VydmVyfSAtLS0gdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuIElQIGFuZCBhCitcVU5JWHt9IHN0cmVhbSBzZXJ2ZXIgaXMgdGhlIGFkZHJlc3MgZmFtaWx5LCB3aGljaCBpcyBzaW1wbHkgcmVwZWF0ZWQgaW4gYm90aAorXFVOSVh7fSBzZXJ2ZXIgY2xhc3Nlcy4KIAogRm9ya2luZyBhbmQgdGhyZWFkaW5nIHZlcnNpb25zIG9mIGVhY2ggdHlwZSBvZiBzZXJ2ZXIgY2FuIGJlIGNyZWF0ZWQgdXNpbmcKIHRoZSBcY2xhc3N7Rm9ya2luZ01peElufSBhbmQgXGNsYXNze1RocmVhZGluZ01peElufSBtaXgtaW4gY2xhc3Nlcy4gIEZvcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJzcWxpdGUzLnRleCBiL0RvYy9saWIvbGlic3FsaXRlMy50ZXgKaW5kZXggZGIxNWMwMC4uZDg3ZTA2NCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJzcWxpdGUzLnRleAorKysgYi9Eb2MvbGliL2xpYnNxbGl0ZTMudGV4CkBAIC0xOTUsNiArMTk1LDE0IEBACiAgICAgXHZlcmJhdGltaW5wdXR7c3FsaXRlMy9jb21wbGV0ZV9zdGF0ZW1lbnQucHl9CiBcZW5ke2Z1bmNkZXNjfQogCitcYmVnaW57ZnVuY2Rlc2N9e31lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrc3tmbGFnfQorQnkgZGVmYXVsdCB5b3Ugd2lsbCBub3QgZ2V0IGFueSB0cmFjZWJhY2tzIGluIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMsCithZ2dyZWdhdGVzLCBjb252ZXJ0ZXJzLCBhdXRob3JpemVyIGNhbGxiYWNrcyBldGMuIElmIHlvdSB3YW50IHRvIGRlYnVnIHRoZW0sCit5b3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIFx2YXJ7ZmxhZ30gYXMgVHJ1ZS4gQWZ0ZXJ3YXJkcywgeW91IHdpbGwgZ2V0Cit0cmFjZWJhY2tzIGZyb20gY2FsbGJhY2tzIG9uIFxjb2Rle3N5cy5zdGRlcnJ9LiBVc2UgXGNvbnN0YW50e0ZhbHNlfSB0byBkaXNhYmxlCit0aGUgZmVhdHVyZSBhZ2Fpbi4KK1xlbmR7ZnVuY2Rlc2N9CisKIFxzdWJzZWN0aW9ue0Nvbm5lY3Rpb24gT2JqZWN0cyBcbGFiZWx7c3FsaXRlMy1Db25uZWN0aW9uLU9iamVjdHN9fQogCiBBIFxjbGFzc3tDb25uZWN0aW9ufSBpbnN0YW5jZSBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzOgpAQCAtMjM3LDggKzI0NSw3IEBACiBjYWxsZWQgYXMgU1FMIGZ1bmN0aW9uLgogCiBUaGUgZnVuY3Rpb24gY2FuIHJldHVybiBhbnkgb2YgdGhlIHR5cGVzIHN1cHBvcnRlZCBieSBTUUxpdGU6IHVuaWNvZGUsIHN0ciwKLWludCwgbG9uZywgZmxvYXQsIGJ1ZmZlciBhbmQgTm9uZS4gIEV4Y2VwdGlvbnMgaW4gdGhlIGZ1bmN0aW9uIGFyZSBpZ25vcmVkIGFuZAotdGhleSBhcmUgaGFuZGxlZCBhcyBpZiB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgTm9uZS4KK2ludCwgbG9uZywgZmxvYXQsIGJ1ZmZlciBhbmQgTm9uZS4KIAogRXhhbXBsZToKIApAQCAtMjU0LDcgKzI2MSw3IEBACiB3aWxsIHJldHVybiB0aGUgZmluYWwgcmVzdWx0IG9mIHRoZSBhZ2dyZWdhdGUuCiAKIFRoZSBcY29kZXtmaW5hbGl6ZX0gbWV0aG9kIGNhbiByZXR1cm4gYW55IG9mIHRoZSB0eXBlcyBzdXBwb3J0ZWQgYnkgU1FMaXRlOgotdW5pY29kZSwgc3RyLCBpbnQsIGxvbmcsIGZsb2F0LCBidWZmZXIgYW5kIE5vbmUuIEFueSBleGNlcHRpb25zIGFyZSBpZ25vcmVkLgordW5pY29kZSwgc3RyLCBpbnQsIGxvbmcsIGZsb2F0LCBidWZmZXIgYW5kIE5vbmUuCiAKIEV4YW1wbGU6CiAKQEAgLTI4Myw2ICsyOTAsMzQgQEAKIFxlbmR7dmVyYmF0aW19CiBcZW5ke21ldGhvZGRlc2N9CiAKK1xiZWdpbnttZXRob2RkZXNjfXtpbnRlcnJ1cHR9e30KKworWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkIHRvIGFib3J0IGFueSBxdWVyaWVzIHRoYXQKK21pZ2h0IGJlIGV4ZWN1dGluZyBvbiB0aGUgY29ubmVjdGlvbi4gVGhlIHF1ZXJ5IHdpbGwgdGhlbiBhYm9ydCBhbmQgdGhlIGNhbGxlcgord2lsbCBnZXQgYW4gZXhjZXB0aW9uLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317c2V0X2F1dGhvcml6ZXJ9e2F1dGhvcml6ZXJfY2FsbGJhY2t9CisKK1RoaXMgcm91dGluZSByZWdpc3RlcnMgYSBjYWxsYmFjay4gVGhlIGNhbGxiYWNrIGlzIGludm9rZWQgZm9yIGVhY2ggYXR0ZW1wdCB0bworYWNjZXNzIGEgY29sdW1uIG9mIGEgdGFibGUgaW4gdGhlIGRhdGFiYXNlLiBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybgorXGNvbnN0YW50e1NRTElURV9PS30gaWYgYWNjZXNzIGlzIGFsbG93ZWQsIFxjb25zdGFudHtTUUxJVEVfREVOWX0gaWYgdGhlIGVudGlyZQorU1FMIHN0YXRlbWVudCBzaG91bGQgYmUgYWJvcnRlZCB3aXRoIGFuIGVycm9yIGFuZCBcY29uc3RhbnR7U1FMSVRFX0lHTk9SRX0gaWYKK3RoZSBjb2x1bW4gc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBOVUxMIHZhbHVlLiBUaGVzZSBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBpbgordGhlIFxtb2R1bGV7c3FsaXRlM30gbW9kdWxlLgorCitUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIHNpZ25pZmllcyB3aGF0IGtpbmQgb2Ygb3BlcmF0aW9uIGlzIHRvIGJlCithdXRob3JpemVkLiBUaGUgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudCB3aWxsIGJlIGFyZ3VtZW50cyBvciBcY29uc3RhbnR7Tm9uZX0KK2RlcGVuZGluZyBvbiB0aGUgZmlyc3QgYXJndW1lbnQuIFRoZSA0dGggYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlCisoIm1haW4iLCAidGVtcCIsIGV0Yy4pIGlmIGFwcGxpY2FibGUuIFRoZSA1dGggYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlCitpbm5lci1tb3N0IHRyaWdnZXIgb3IgdmlldyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWNjZXNzIGF0dGVtcHQgb3IKK1xjb25zdGFudHtOb25lfSBpZiB0aGlzIGFjY2VzcyBhdHRlbXB0IGlzIGRpcmVjdGx5IGZyb20gaW5wdXQgU1FMIGNvZGUuCisKK1BsZWFzZSBjb25zdWx0IHRoZSBTUUxpdGUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgZmlyc3QKK2FyZ3VtZW50IGFuZCB0aGUgbWVhbmluZyBvZiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudCBkZXBlbmRpbmcgb24gdGhlCitmaXJzdCBvbmUuIEFsbCBuZWNlc3NhcnkgY29uc3RhbnRzIGFyZSBhdmFpbGFibGUgaW4gdGhlIFxtb2R1bGV7c3FsaXRlM30KK21vZHVsZS4KK1xlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21lbWJlcmRlc2N9e3Jvd19mYWN0b3J5fQogICBZb3UgY2FuIGNoYW5nZSB0aGlzIGF0dHJpYnV0ZSB0byBhIGNhbGxhYmxlIHRoYXQgYWNjZXB0cyB0aGUgY3Vyc29yIGFuZApAQCAtNDc3LDEwICs1MTIsMTAgQEAKIFxjbGFzc3tvYmplY3R9IGFzIG9uZSBvZiBpdHMgYmFzZXMuCiBcZW5ke25vdGljZX0KIAotVGhlIFxtb2R1bGV7c3FsaXRlM30gbW9kdWxlIGhhcyB0d28gZGVmYXVsdCBhZGFwdGVycyBmb3IgUHl0aG9uJ3MgYnVpbHRpbgotXGNsYXNze2RhdGV0aW1lLmRhdGV9IGFuZCBcY2xhc3N7ZGF0ZXRpbWUuZGF0ZXRpbWV9IHR5cGVzLiBOb3cgbGV0J3Mgc3VwcG9zZSB3ZQotd2FudCB0byBzdG9yZSBcY2xhc3N7ZGF0ZXRpbWUuZGF0ZXRpbWV9IG9iamVjdHMgbm90IGluIElTTyByZXByZXNlbnRhdGlvbiwgYnV0Ci1hcyBVbml4IHRpbWVzdGFtcC4KK1RoZSBcbW9kdWxle3NxbGl0ZTN9IG1vZHVsZSBoYXMgdHdvIGRlZmF1bHQgYWRhcHRlcnMgZm9yIFB5dGhvbidzIGJ1aWx0LWluCitcY2xhc3N7ZGF0ZXRpbWUuZGF0ZX0gYW5kIFxjbGFzc3tkYXRldGltZS5kYXRldGltZX0gdHlwZXMuICBOb3cgbGV0J3Mgc3VwcG9zZQord2Ugd2FudCB0byBzdG9yZSBcY2xhc3N7ZGF0ZXRpbWUuZGF0ZXRpbWV9IG9iamVjdHMgbm90IGluIElTTyByZXByZXNlbnRhdGlvbiwKK2J1dCBhcyBhIFxVTklYe30gdGltZXN0YW1wLgogCiAgICAgXHZlcmJhdGltaW5wdXR7c3FsaXRlMy9hZGFwdGVyX2RhdGV0aW1lLnB5fQogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnN0ZHR5cGVzLnRleCBiL0RvYy9saWIvbGlic3RkdHlwZXMudGV4CmluZGV4IGY0NDM2MGIuLjk1YjA2ZjggMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlic3RkdHlwZXMudGV4CisrKyBiL0RvYy9saWIvbGlic3RkdHlwZXMudGV4CkBAIC0xLDQgKzEsNCBAQAotXHNlY3Rpb257QnVpbHQtaW4gVHlwZXMgXGxhYmVse3R5cGVzfX0KK1xjaGFwdGVye0J1aWx0LWluIFR5cGVzIFxsYWJlbHt0eXBlc319CiAKIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIHN0YW5kYXJkIHR5cGVzIHRoYXQgYXJlIGJ1aWx0IGludG8KIHRoZSBpbnRlcnByZXRlci4KQEAgLTcsMTQgKzcsMTQgQEAKIHRoZSBidWlsdC1pbiB0eXBlcyBhcyB0aGUgYmFzaXMgZm9yIG9iamVjdC1vcmllbnRlZCBpbmhlcml0YW5jZS4KIFRoaXMgbGltaXRhdGlvbiBkb2VzIG5vdCBleGlzdCBhbnkgbG9uZ2VyLn0KIAotVGhlIHByaW5jaXBhbCBidWlsdC1pbiB0eXBlcyBhcmUgbnVtZXJpY3MsIHNlcXVlbmNlcywgbWFwcGluZ3MsIGZpbGVzCitUaGUgcHJpbmNpcGFsIGJ1aWx0LWluIHR5cGVzIGFyZSBudW1lcmljcywgc2VxdWVuY2VzLCBtYXBwaW5ncywgZmlsZXMsCiBjbGFzc2VzLCBpbnN0YW5jZXMgYW5kIGV4Y2VwdGlvbnMuCiBcaW5kZXhpaXtidWlsdC1pbn17dHlwZXN9CiAKIFNvbWUgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHNldmVyYWwgb2JqZWN0IHR5cGVzOyBpbiBwYXJ0aWN1bGFyLAogcHJhY3RpY2FsbHkgYWxsIG9iamVjdHMgY2FuIGJlIGNvbXBhcmVkLCB0ZXN0ZWQgZm9yIHRydXRoIHZhbHVlLAotYW5kIGNvbnZlcnRlZCB0byBhIHN0cmluZyAod2l0aCB0aGUgXGNvZGV7YFx0ZXh0cm17XGxkb3RzfWB9IG5vdGF0aW9uLAotdGhlIGVxdWl2YWxlbnQgXGZ1bmN0aW9ue3JlcHIoKX0gZnVuY3Rpb24sIG9yIHRoZSBzbGlnaHRseSBkaWZmZXJlbnQKK2FuZCBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgKHdpdGgKK3RoZSBcZnVuY3Rpb257cmVwcigpfSBmdW5jdGlvbiBvciB0aGUgc2xpZ2h0bHkgZGlmZmVyZW50CiBcZnVuY3Rpb257c3RyKCl9IGZ1bmN0aW9uKS4gIFRoZSBsYXR0ZXIKIGZ1bmN0aW9uIGlzIGltcGxpY2l0bHkgdXNlZCB3aGVuIGFuIG9iamVjdCBpcyB3cml0dGVuIGJ5IHRoZQogXGtleXdvcmR7cHJpbnR9XHN0aW5kZXh7cHJpbnR9IHN0YXRlbWVudC4KQEAgLTI0LDcgKzI0LDcgQEAKIFxjaXRldGl0bGVbLi4vdHV0L3R1dC5odG1sXXtQeXRob24gVHV0b3JpYWx9LikKIAogCi1cc3Vic2VjdGlvbntUcnV0aCBWYWx1ZSBUZXN0aW5nXGxhYmVse3RydXRofX0KK1xzZWN0aW9ue1RydXRoIFZhbHVlIFRlc3RpbmdcbGFiZWx7dHJ1dGh9fQogCiBBbnkgb2JqZWN0IGNhbiBiZSB0ZXN0ZWQgZm9yIHRydXRoIHZhbHVlLCBmb3IgdXNlIGluIGFuIFxrZXl3b3Jke2lmfSBvcgogXGtleXdvcmR7d2hpbGV9IGNvbmRpdGlvbiBvciBhcyBvcGVyYW5kIG9mIHRoZSBCb29sZWFuIG9wZXJhdGlvbnMgYmVsb3cuCkBAIC03MSw3ICs3MSw3IEBACiBcaW5kZXh7RmFsc2V9CiBcaW5kZXh7VHJ1ZX0KIAotXHN1YnNlY3Rpb257Qm9vbGVhbiBPcGVyYXRpb25zIC0tLQorXHNlY3Rpb257Qm9vbGVhbiBPcGVyYXRpb25zIC0tLQogCSAgICBca2V5d29yZHthbmR9LCBca2V5d29yZHtvcn0sIFxrZXl3b3Jke25vdH0KIAkgICAgXGxhYmVse2Jvb2xlYW59fQogCkBAIC0xMDcsNyArMTA3LDcgQEAKIFxlbmR7ZGVzY3JpcHRpb259CiAKIAotXHN1YnNlY3Rpb257Q29tcGFyaXNvbnMgXGxhYmVse2NvbXBhcmlzb25zfX0KK1xzZWN0aW9ue0NvbXBhcmlzb25zIFxsYWJlbHtjb21wYXJpc29uc319CiAKIENvbXBhcmlzb24gb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBvYmplY3RzLiAgVGhleSBhbGwgaGF2ZSB0aGUKIHNhbWUgcHJpb3JpdHkgKHdoaWNoIGlzIGhpZ2hlciB0aGFuIHRoYXQgb2YgdGhlIEJvb2xlYW4gb3BlcmF0aW9ucykuCkBAIC0xNzQsNyArMTc0LDcgQEAKIG9ubHkgYnkgc2VxdWVuY2UgdHlwZXMgKGJlbG93KS4KIAogCi1cc3Vic2VjdGlvbntOdW1lcmljIFR5cGVzIC0tLQorXHNlY3Rpb257TnVtZXJpYyBUeXBlcyAtLS0KIAkgICAgXGNsYXNze2ludH0sIFxjbGFzc3tmbG9hdH0sIFxjbGFzc3tsb25nfSwgXGNsYXNze2NvbXBsZXh9CiAJICAgIFxsYWJlbHt0eXBlc251bWVyaWN9fQogCkBAIC0zMDcsNyArMzA3LDcgQEAKIFxlbmR7ZGVzY3JpcHRpb259CiAlIFhYWEpIIGV4Y2VwdGlvbnM6IG92ZXJmbG93ICh3aGVuPyB3aGF0IG9wZXJhdGlvbnM/KSB6ZXJvZGl2aXNpb24KIAotXHN1YnN1YnNlY3Rpb257Qml0LXN0cmluZyBPcGVyYXRpb25zIG9uIEludGVnZXIgVHlwZXMgXGxhYmVse2JpdHN0cmluZy1vcHN9fQorXHN1YnNlY3Rpb257Qml0LXN0cmluZyBPcGVyYXRpb25zIG9uIEludGVnZXIgVHlwZXMgXGxhYmVse2JpdHN0cmluZy1vcHN9fQogXG5vZGVuYW1le0JpdC1zdHJpbmcgT3BlcmF0aW9uc30KIAogUGxhaW4gYW5kIGxvbmcgaW50ZWdlciB0eXBlcyBzdXBwb3J0IGFkZGl0aW9uYWwgb3BlcmF0aW9ucyB0aGF0IG1ha2UKQEAgLTM1MCw3ICszNTAsNyBAQAogXGVuZHtkZXNjcmlwdGlvbn0KIAogCi1cc3Vic2VjdGlvbntJdGVyYXRvciBUeXBlcyBcbGFiZWx7dHlwZWl0ZXJ9fQorXHNlY3Rpb257SXRlcmF0b3IgVHlwZXMgXGxhYmVse3R5cGVpdGVyfX0KIAogXHZlcnNpb25hZGRlZHsyLjJ9CiBcaW5kZXh7aXRlcmF0b3IgcHJvdG9jb2x9CkBAIC00MTQsNyArNDE0LDcgQEAKIHN1cHBseWluZyB0aGUgXG1ldGhvZHtfX2l0ZXJfXygpfSBhbmQgXG1ldGhvZHtuZXh0KCl9IG1ldGhvZHMuCiAKIAotXHN1YnNlY3Rpb257U2VxdWVuY2UgVHlwZXMgLS0tCitcc2VjdGlvbntTZXF1ZW5jZSBUeXBlcyAtLS0KIAkgICAgXGNsYXNze3N0cn0sIFxjbGFzc3t1bmljb2RlfSwgXGNsYXNze2xpc3R9LAogCSAgICBcY2xhc3N7dHVwbGV9LCBcY2xhc3N7YnVmZmVyfSwgXGNsYXNze3hyYW5nZX0KIAkgICAgXGxhYmVse3R5cGVzc2VxfX0KQEAgLTU2Niw3ICs1NjYsOCBAQAogXGVuZHtkZXNjcmlwdGlvbn0KIAogCi1cc3Vic3Vic2VjdGlvbntTdHJpbmcgTWV0aG9kcyBcbGFiZWx7c3RyaW5nLW1ldGhvZHN9fQorXHN1YnNlY3Rpb257U3RyaW5nIE1ldGhvZHMgXGxhYmVse3N0cmluZy1tZXRob2RzfX0KK1xpbmRleGlpe3N0cmluZ317bWV0aG9kc30KIAogVGhlc2UgYXJlIHRoZSBzdHJpbmcgbWV0aG9kcyB3aGljaCBib3RoIDgtYml0IHN0cmluZ3MgYW5kIFVuaWNvZGUKIG9iamVjdHMgc3VwcG9ydDoKQEAgLTYxOCw4ICs2MTksMTEgQEAKIAogXGJlZ2lue21ldGhvZGRlc2N9W3N0cmluZ117ZW5kc3dpdGh9e3N1ZmZpeFxvcHRpb25hbHssIHN0YXJ0XG9wdGlvbmFseywgZW5kfX19CiBSZXR1cm4gXGNvZGV7VHJ1ZX0gaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCBcdmFye3N1ZmZpeH0sCi1vdGhlcndpc2UgcmV0dXJuIFxjb2Rle0ZhbHNlfS4gIFdpdGggb3B0aW9uYWwgXHZhcntzdGFydH0sIHRlc3QgYmVnaW5uaW5nIGF0CitvdGhlcndpc2UgcmV0dXJuIFxjb2Rle0ZhbHNlfS4gIFx2YXJ7c3VmZml4fSBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mCitzdWZmaXhlcyB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgXHZhcntzdGFydH0sIHRlc3QgYmVnaW5uaW5nIGF0CiB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCBcdmFye2VuZH0sIHN0b3AgY29tcGFyaW5nIGF0IHRoYXQgcG9zaXRpb24uCisKK1x2ZXJzaW9uY2hhbmdlZFtBY2NlcHQgdHVwbGVzIGFzIFx2YXJ7c3VmZml4fV17Mi41fQogXGVuZHttZXRob2RkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY31bc3RyaW5nXXtleHBhbmR0YWJzfXtcb3B0aW9uYWx7dGFic2l6ZX19CkBAIC04MjksOSArODMzLDEyIEBACiBcYmVnaW57bWV0aG9kZGVzY31bc3RyaW5nXXtzdGFydHN3aXRofXtwcmVmaXhcb3B0aW9uYWx7LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRcb3B0aW9uYWx7LCBlbmR9fX0KIFJldHVybiBcY29kZXtUcnVlfSBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIFx2YXJ7cHJlZml4fSwgb3RoZXJ3aXNlCi1yZXR1cm4gXGNvZGV7RmFsc2V9LiAgV2l0aCBvcHRpb25hbCBcdmFye3N0YXJ0fSwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0CityZXR1cm4gXGNvZGV7RmFsc2V9LiAgXHZhcntwcmVmaXh9IGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YKK3N1ZmZpeGVzIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCBcdmFye3N0YXJ0fSwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0CiB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCBcdmFye2VuZH0sIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0CiBwb3NpdGlvbi4KKworXHZlcnNpb25jaGFuZ2VkW0FjY2VwdCB0dXBsZXMgYXMgXHZhcntwcmVmaXh9XXsyLjV9CiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfVtzdHJpbmdde3N0cmlwfXtcb3B0aW9uYWx7Y2hhcnN9fQpAQCAtODk0LDcgKzkwMSw3IEBACiBcZW5ke21ldGhvZGRlc2N9CiAKIAotXHN1YnN1YnNlY3Rpb257U3RyaW5nIEZvcm1hdHRpbmcgT3BlcmF0aW9ucyBcbGFiZWx7dHlwZXNzZXEtc3RyaW5nc319Citcc3Vic2VjdGlvbntTdHJpbmcgRm9ybWF0dGluZyBPcGVyYXRpb25zIFxsYWJlbHt0eXBlc3NlcS1zdHJpbmdzfX0KIAogXGluZGV4e2Zvcm1hdHRpbmcsIHN0cmluZyAoXCV7fSl9CiBcaW5kZXh7aW50ZXJwb2xhdGlvbiwgc3RyaW5nIChcJXt9KX0KQEAgLTEwNjUsNyArMTA3Miw3IEBACiBccmVmbW9kdWxle3JlfS5ccmVmc3Rtb2RpbmRleHtyZX0KIAogCi1cc3Vic3Vic2VjdGlvbntYUmFuZ2UgVHlwZSBcbGFiZWx7dHlwZXNzZXEteHJhbmdlfX0KK1xzdWJzZWN0aW9ue1hSYW5nZSBUeXBlIFxsYWJlbHt0eXBlc3NlcS14cmFuZ2V9fQogCiBUaGUgXGNsYXNze3hyYW5nZX1cb2JpbmRleHt4cmFuZ2V9IHR5cGUgaXMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHdoaWNoCiBpcyBjb21tb25seSB1c2VkIGZvciBsb29waW5nLiAgVGhlIGFkdmFudGFnZSBvZiB0aGUgXGNsYXNze3hyYW5nZX0KQEAgLTEwNzcsNyArMTA4NCw3IEBACiBpdGVyYXRpb24sIGFuZCB0aGUgXGZ1bmN0aW9ue2xlbigpfSBmdW5jdGlvbi4KIAogCi1cc3Vic3Vic2VjdGlvbntNdXRhYmxlIFNlcXVlbmNlIFR5cGVzIFxsYWJlbHt0eXBlc3NlcS1tdXRhYmxlfX0KK1xzdWJzZWN0aW9ue011dGFibGUgU2VxdWVuY2UgVHlwZXMgXGxhYmVse3R5cGVzc2VxLW11dGFibGV9fQogCiBMaXN0IG9iamVjdHMgc3VwcG9ydCBhZGRpdGlvbmFsIG9wZXJhdGlvbnMgdGhhdCBhbGxvdyBpbi1wbGFjZQogbW9kaWZpY2F0aW9uIG9mIHRoZSBvYmplY3QuCkBAIC0xMDk0LDcgKzExMDEsOCBAQAogICBcbGluZWlpaXtcdmFye3N9W1x2YXJ7aX1dID0gXHZhcnt4fX0KIAl7aXRlbSBcdmFye2l9IG9mIFx2YXJ7c30gaXMgcmVwbGFjZWQgYnkgXHZhcnt4fX17fQogICBcbGluZWlpaXtcdmFye3N9W1x2YXJ7aX06XHZhcntqfV0gPSBcdmFye3R9fQotICAJe3NsaWNlIG9mIFx2YXJ7c30gZnJvbSBcdmFye2l9IHRvIFx2YXJ7an0gaXMgcmVwbGFjZWQgYnkgXHZhcnt0fX17fQorICAJe3NsaWNlIG9mIFx2YXJ7c30gZnJvbSBcdmFye2l9IHRvIFx2YXJ7an0gCisgICAgICAgICBpcyByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlIGl0ZXJhYmxlIFx2YXJ7dH19e30KICAgXGxpbmVpaWl7ZGVsIFx2YXJ7c31bXHZhcntpfTpcdmFye2p9XX0KIAl7c2FtZSBhcyBcY29kZXtcdmFye3N9W1x2YXJ7aX06XHZhcntqfV0gPSBbXX19e30KICAgXGxpbmVpaWl7XHZhcntzfVtcdmFye2l9Olx2YXJ7an06XHZhcntrfV0gPSBcdmFye3R9fQpAQCAtMTIwOCw3ICsxMjE2LDcgQEAKICAgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuCiBcZW5ke2Rlc2NyaXB0aW9ufQogCi1cc3Vic2VjdGlvbntTZXQgVHlwZXMgLS0tCitcc2VjdGlvbntTZXQgVHlwZXMgLS0tCiAJICAgIFxjbGFzc3tzZXR9LCBcY2xhc3N7ZnJvemVuc2V0fQogCSAgICBcbGFiZWx7dHlwZXMtc2V0fX0KIFxvYmluZGV4e3NldH0KQEAgLTEzNDcsNyArMTM1NSw3IEBACiBcZW5ke3NlZWFsc299CiAgICAgIAogCi1cc3Vic2VjdGlvbntNYXBwaW5nIFR5cGVzIC0tLSBcY2xhc3N7ZGljdH0gXGxhYmVse3R5cGVzbWFwcGluZ319Citcc2VjdGlvbntNYXBwaW5nIFR5cGVzIC0tLSBcY2xhc3N7ZGljdH0gXGxhYmVse3R5cGVzbWFwcGluZ319CiBcb2JpbmRleHttYXBwaW5nfQogXG9iaW5kZXh7ZGljdGlvbmFyeX0KIApAQCAtMTUxMCw3ICsxNTE4LDcgQEAKIAogXGVuZHtkZXNjcmlwdGlvbn0KIAotXHN1YnNlY3Rpb257RmlsZSBPYmplY3RzCitcc2VjdGlvbntGaWxlIE9iamVjdHMKICAgICAgICAgICAgIFxsYWJlbHtibHRpbi1maWxlLW9iamVjdHN9fQogCiBGaWxlIG9iamVjdHNcb2JpbmRleHtmaWxlfSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgQydzIFxjb2Rle3N0ZGlvfQpAQCAtMTc4Myw3ICsxNzkxLDcgQEAKIFxlbmR7bWVtYmVyZGVzY30KIAogCi1cc3Vic2VjdGlvbntDb250ZXh0IE1hbmFnZXIgVHlwZXMgXGxhYmVse3R5cGVjb250ZXh0bWFuYWdlcn19Citcc2VjdGlvbntDb250ZXh0IE1hbmFnZXIgVHlwZXMgXGxhYmVse3R5cGVjb250ZXh0bWFuYWdlcn19CiAKIFx2ZXJzaW9uYWRkZWR7Mi41fQogXGluZGV4e2NvbnRleHQgbWFuYWdlcn0KQEAgLTE4NjQsMTMgKzE4NzIsMTMgQEAKIGlzIG5lZ2xpZ2libGUuCiAKIAotXHN1YnNlY3Rpb257T3RoZXIgQnVpbHQtaW4gVHlwZXMgXGxhYmVse3R5cGVzb3RoZXJ9fQorXHNlY3Rpb257T3RoZXIgQnVpbHQtaW4gVHlwZXMgXGxhYmVse3R5cGVzb3RoZXJ9fQogCiBUaGUgaW50ZXJwcmV0ZXIgc3VwcG9ydHMgc2V2ZXJhbCBvdGhlciBraW5kcyBvZiBvYmplY3RzLgogTW9zdCBvZiB0aGVzZSBzdXBwb3J0IG9ubHkgb25lIG9yIHR3byBvcGVyYXRpb25zLgogCiAKLVxzdWJzdWJzZWN0aW9ue01vZHVsZXMgXGxhYmVse3R5cGVzbW9kdWxlc319Citcc3Vic2VjdGlvbntNb2R1bGVzIFxsYWJlbHt0eXBlc21vZHVsZXN9fQogCiBUaGUgb25seSBzcGVjaWFsIG9wZXJhdGlvbiBvbiBhIG1vZHVsZSBpcyBhdHRyaWJ1dGUgYWNjZXNzOgogXGNvZGV7XHZhcnttfS5cdmFye25hbWV9fSwgd2hlcmUgXHZhcnttfSBpcyBhIG1vZHVsZSBhbmQgXHZhcntuYW1lfQpAQCAtMTg5NiwxNCArMTkwNCwxNCBAQAogJy91c3IvbG9jYWwvbGliL3B5dGhvblxzaG9ydHZlcnNpb24vb3MucHljJz59LgogCiAKLVxzdWJzdWJzZWN0aW9ue0NsYXNzZXMgYW5kIENsYXNzIEluc3RhbmNlcyBcbGFiZWx7dHlwZXNvYmplY3RzfX0KK1xzdWJzZWN0aW9ue0NsYXNzZXMgYW5kIENsYXNzIEluc3RhbmNlcyBcbGFiZWx7dHlwZXNvYmplY3RzfX0KIFxub2RlbmFtZXtDbGFzc2VzIGFuZCBJbnN0YW5jZXN9CiAKIFNlZSBjaGFwdGVycyAzIGFuZCA3IG9mIHRoZSBcY2l0ZXRpdGxlWy4uL3JlZi9yZWYuaHRtbF17UHl0aG9uCiBSZWZlcmVuY2UgTWFudWFsfSBmb3IgdGhlc2UuCiAKIAotXHN1YnN1YnNlY3Rpb257RnVuY3Rpb25zIFxsYWJlbHt0eXBlc2Z1bmN0aW9uc319Citcc3Vic2VjdGlvbntGdW5jdGlvbnMgXGxhYmVse3R5cGVzZnVuY3Rpb25zfX0KIAogRnVuY3Rpb24gb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoZSBvbmx5CiBvcGVyYXRpb24gb24gYSBmdW5jdGlvbiBvYmplY3QgaXMgdG8gY2FsbCBpdDoKQEAgLTE5MTcsNyArMTkyNSw3IEBACiBTZWUgdGhlIFxjaXRldGl0bGVbLi4vcmVmL3JlZi5odG1sXXtQeXRob24gUmVmZXJlbmNlIE1hbnVhbH0gZm9yIG1vcmUKIGluZm9ybWF0aW9uLgogCi1cc3Vic3Vic2VjdGlvbntNZXRob2RzIFxsYWJlbHt0eXBlc21ldGhvZHN9fQorXHN1YnNlY3Rpb257TWV0aG9kcyBcbGFiZWx7dHlwZXNtZXRob2RzfX0KIFxvYmluZGV4e21ldGhvZH0KIAogTWV0aG9kcyBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCB1c2luZyB0aGUgYXR0cmlidXRlIG5vdGF0aW9uLgpAQCAtMTk2Miw3ICsxOTcwLDcgQEAKIGluZm9ybWF0aW9uLgogCiAKLVxzdWJzdWJzZWN0aW9ue0NvZGUgT2JqZWN0cyBcbGFiZWx7Ymx0aW4tY29kZS1vYmplY3RzfX0KK1xzdWJzZWN0aW9ue0NvZGUgT2JqZWN0cyBcbGFiZWx7Ymx0aW4tY29kZS1vYmplY3RzfX0KIFxvYmluZGV4e2NvZGV9CiAKIENvZGUgb2JqZWN0cyBhcmUgdXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG8gcmVwcmVzZW50CkBAIC0xOTg1LDcgKzE5OTMsNyBAQAogaW5mb3JtYXRpb24uCiAKIAotXHN1YnN1YnNlY3Rpb257VHlwZSBPYmplY3RzIFxsYWJlbHtibHRpbi10eXBlLW9iamVjdHN9fQorXHN1YnNlY3Rpb257VHlwZSBPYmplY3RzIFxsYWJlbHtibHRpbi10eXBlLW9iamVjdHN9fQogCiBUeXBlIG9iamVjdHMgcmVwcmVzZW50IHRoZSB2YXJpb3VzIG9iamVjdCB0eXBlcy4gIEFuIG9iamVjdCdzIHR5cGUgaXMKIGFjY2Vzc2VkIGJ5IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBcZnVuY3Rpb257dHlwZSgpfS4gIFRoZXJlIGFyZSBubyBzcGVjaWFsCkBAIC0xOTk3LDcgKzIwMDUsNyBAQAogVHlwZXMgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiBcY29kZXs8dHlwZSAnaW50Jz59LgogCiAKLVxzdWJzdWJzZWN0aW9ue1RoZSBOdWxsIE9iamVjdCBcbGFiZWx7Ymx0aW4tbnVsbC1vYmplY3R9fQorXHN1YnNlY3Rpb257VGhlIE51bGwgT2JqZWN0IFxsYWJlbHtibHRpbi1udWxsLW9iamVjdH19CiAKIFRoaXMgb2JqZWN0IGlzIHJldHVybmVkIGJ5IGZ1bmN0aW9ucyB0aGF0IGRvbid0IGV4cGxpY2l0bHkgcmV0dXJuIGEKIHZhbHVlLiAgSXQgc3VwcG9ydHMgbm8gc3BlY2lhbCBvcGVyYXRpb25zLiAgVGhlcmUgaXMgZXhhY3RseSBvbmUgbnVsbApAQCAtMjAwNiw3ICsyMDE0LDcgQEAKIEl0IGlzIHdyaXR0ZW4gYXMgXGNvZGV7Tm9uZX0uCiAKIAotXHN1YnN1YnNlY3Rpb257VGhlIEVsbGlwc2lzIE9iamVjdCBcbGFiZWx7Ymx0aW4tZWxsaXBzaXMtb2JqZWN0fX0KK1xzdWJzZWN0aW9ue1RoZSBFbGxpcHNpcyBPYmplY3QgXGxhYmVse2JsdGluLWVsbGlwc2lzLW9iamVjdH19CiAKIFRoaXMgb2JqZWN0IGlzIHVzZWQgYnkgZXh0ZW5kZWQgc2xpY2Ugbm90YXRpb24gKHNlZSB0aGUKIFxjaXRldGl0bGVbLi4vcmVmL3JlZi5odG1sXXtQeXRob24gUmVmZXJlbmNlIE1hbnVhbH0pLiAgSXQgc3VwcG9ydHMgbm8KQEAgLTIwMTUsNyArMjAyMyw3IEBACiAKIEl0IGlzIHdyaXR0ZW4gYXMgXGNvZGV7RWxsaXBzaXN9LgogCi1cc3Vic3Vic2VjdGlvbntCb29sZWFuIFZhbHVlc30KK1xzdWJzZWN0aW9ue0Jvb2xlYW4gVmFsdWVzfQogCiBCb29sZWFuIHZhbHVlcyBhcmUgdGhlIHR3byBjb25zdGFudCBvYmplY3RzIFxjb2Rle0ZhbHNlfSBhbmQKIFxjb2Rle1RydWV9LiAgVGhleSBhcmUgdXNlZCB0byByZXByZXNlbnQgdHJ1dGggdmFsdWVzIChhbHRob3VnaCBvdGhlcgpAQCAtMjAzMiwxNCArMjA0MCwxNCBAQAogXGluZGV4aWl7Qm9vbGVhbn17dmFsdWVzfQogCiAKLVxzdWJzdWJzZWN0aW9ue0ludGVybmFsIE9iamVjdHMgXGxhYmVse3R5cGVzaW50ZXJuYWx9fQorXHN1YnNlY3Rpb257SW50ZXJuYWwgT2JqZWN0cyBcbGFiZWx7dHlwZXNpbnRlcm5hbH19CiAKIFNlZSB0aGUgXGNpdGV0aXRsZVsuLi9yZWYvcmVmLmh0bWxde1B5dGhvbiBSZWZlcmVuY2UgTWFudWFsfSBmb3IgdGhpcwogaW5mb3JtYXRpb24uICBJdCBkZXNjcmliZXMgc3RhY2sgZnJhbWUgb2JqZWN0cywgdHJhY2ViYWNrIG9iamVjdHMsIGFuZAogc2xpY2Ugb2JqZWN0cy4KIAogCi1cc3Vic2VjdGlvbntTcGVjaWFsIEF0dHJpYnV0ZXMgXGxhYmVse3NwZWNpYWxhdHRyc319Citcc2VjdGlvbntTcGVjaWFsIEF0dHJpYnV0ZXMgXGxhYmVse3NwZWNpYWxhdHRyc319CiAKIFRoZSBpbXBsZW1lbnRhdGlvbiBhZGRzIGEgZmV3IHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgdG8gc2V2ZXJhbAogb2JqZWN0IHR5cGVzLCB3aGVyZSB0aGV5IGFyZSByZWxldmFudC4gIFNvbWUgb2YgdGhlc2UgYXJlIG5vdCByZXBvcnRlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJzdHJpbmdpby50ZXggYi9Eb2MvbGliL2xpYnN0cmluZ2lvLnRleAppbmRleCAzOTkyZTQzLi4yNDMxMjUxIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnN0cmluZ2lvLnRleAorKysgYi9Eb2MvbGliL2xpYnN0cmluZ2lvLnRleApAQCAtMzcsNiArMzcsMjQgQEAKIEZyZWUgdGhlIG1lbW9yeSBidWZmZXIuCiBcZW5ke21ldGhvZGRlc2N9CiAKK0V4YW1wbGUgdXNhZ2U6CisKK1xiZWdpbnt2ZXJiYXRpbX0KK2ltcG9ydCBTdHJpbmdJTworCitvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCitvdXRwdXQud3JpdGUoJ0ZpcnN0IGxpbmUuXG4nKQorcHJpbnQgPj5vdXRwdXQsICdTZWNvbmQgbGluZS4nCisKKyMgUmV0cmlldmUgZmlsZSBjb250ZW50cyAtLSB0aGlzIHdpbGwgYmUKKyMgJ0ZpcnN0IGxpbmUuXG5TZWNvbmQgbGluZS5cbicKK2NvbnRlbnRzID0gb3V0cHV0LmdldHZhbHVlKCkKKworIyBDbG9zZSBvYmplY3QgYW5kIGRpc2NhcmQgbWVtb3J5IGJ1ZmZlciAtLSAKKyMgLmdldHZhbHVlKCkgd2lsbCBub3cgcmFpc2UgYW4gZXhjZXB0aW9uLgorb3V0cHV0LmNsb3NlKCkKK1xlbmR7dmVyYmF0aW19CisKIAogXHNlY3Rpb257XG1vZHVsZXtjU3RyaW5nSU99IC0tLQogICAgICAgICAgRmFzdGVyIHZlcnNpb24gb2YgXG1vZHVsZXtTdHJpbmdJT319CkBAIC04MiwzICsxMDAsMjIgQEAKIAogVGhlcmUgaXMgYSBDIEFQSSB0byB0aGUgbW9kdWxlIGFzIHdlbGw7IHJlZmVyIHRvIHRoZSBtb2R1bGUgc291cmNlIGZvciAKIG1vcmUgaW5mb3JtYXRpb24uCisKK0V4YW1wbGUgdXNhZ2U6CisKK1xiZWdpbnt2ZXJiYXRpbX0KK2ltcG9ydCBjU3RyaW5nSU8KKworb3V0cHV0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKK291dHB1dC53cml0ZSgnRmlyc3QgbGluZS5cbicpCitwcmludCA+Pm91dHB1dCwgJ1NlY29uZCBsaW5lLicKKworIyBSZXRyaWV2ZSBmaWxlIGNvbnRlbnRzIC0tIHRoaXMgd2lsbCBiZQorIyAnRmlyc3QgbGluZS5cblNlY29uZCBsaW5lLlxuJworY29udGVudHMgPSBvdXRwdXQuZ2V0dmFsdWUoKQorCisjIENsb3NlIG9iamVjdCBhbmQgZGlzY2FyZCBtZW1vcnkgYnVmZmVyIC0tIAorIyAuZ2V0dmFsdWUoKSB3aWxsIG5vdyByYWlzZSBhbiBleGNlcHRpb24uCitvdXRwdXQuY2xvc2UoKQorXGVuZHt2ZXJiYXRpbX0KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJzdWJwcm9jZXNzLnRleCBiL0RvYy9saWIvbGlic3VicHJvY2Vzcy50ZXgKaW5kZXggYmRlOTJlYi4uMDMwNzJmNyAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJzdWJwcm9jZXNzLnRleAorKysgYi9Eb2MvbGliL2xpYnN1YnByb2Nlc3MudGV4CkBAIC0xMDcsNyArMTA3LDcgQEAKIAogSWYgXHZhcnt1bml2ZXJzYWxfbmV3bGluZXN9IGlzIFxjb25zdGFudHtUcnVlfSwgdGhlIGZpbGUgb2JqZWN0cyBzdGRvdXQKIGFuZCBzdGRlcnIgYXJlIG9wZW5lZCBhcyB0ZXh0IGZpbGVzLCBidXQgbGluZXMgbWF5IGJlIHRlcm1pbmF0ZWQgYnkKLWFueSBvZiBcY29kZXsnXGUgbid9LCB0aGUgVW5peCBlbmQtb2YtbGluZSBjb252ZW50aW9uLCBcY29kZXsnXGUgcid9LAorYW55IG9mIFxjb2RleydcZSBuJ30sIHRoZSBcVU5JWHt9IGVuZC1vZi1saW5lIGNvbnZlbnRpb24sIFxjb2RleydcZSByJ30sCiB0aGUgTWFjaW50b3NoIGNvbnZlbnRpb24gb3IgXGNvZGV7J1xlIHJcZSBuJ30sIHRoZSBXaW5kb3dzIGNvbnZlbnRpb24uCiBBbGwgb2YgdGhlc2UgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb25zIGFyZSBzZWVuIGFzIFxjb2RleydcZSBuJ30gYnkgdGhlCiBQeXRob24gcHJvZ3JhbS4gIFxub3Rle1RoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBpZiBQeXRob24gaXMgYnVpbHQKQEAgLTE0MCw3ICsxNDAsNyBAQAogUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMuICBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlLiBJZiB0aGUgZXhpdAogY29kZSB3YXMgemVybyB0aGVuIHJldHVybiwgb3RoZXJ3aXNlIHJhaXNlIFxleGNlcHRpb257Q2FsbGVkUHJvY2Vzc0Vycm9yLn0KIFRoZSBcZXhjZXB0aW9ue0NhbGxlZFByb2Nlc3NFcnJvcn0gb2JqZWN0IHdpbGwgaGF2ZSB0aGUgcmV0dXJuIGNvZGUgaW4gdGhlCi1cbWVtYmVye2Vycm5vfSBhdHRyaWJ1dGUuCitcbWVtYmVye3JldHVybmNvZGV9IGF0dHJpYnV0ZS4KIAogVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4gIEV4YW1wbGU6CiAKQEAgLTE2NCw5ICsxNjQsOCBAQAogQSBcZXhjZXB0aW9ue1ZhbHVlRXJyb3J9IHdpbGwgYmUgcmFpc2VkIGlmIFxjbGFzc3tQb3Blbn0gaXMgY2FsbGVkCiB3aXRoIGludmFsaWQgYXJndW1lbnRzLgogCi1jaGVja19jYWxsKCkgd2lsbCByYWlzZSBcZXhjZXB0aW9ue0NhbGxlZFByb2Nlc3NFcnJvcn0sIHdoaWNoIGlzIGEKLXN1YmNsYXNzIG9mIFxleGNlcHRpb257T1NFcnJvcn0sIGlmIHRoZSBjYWxsZWQgcHJvY2VzcyByZXR1cm5zIGEKLW5vbi16ZXJvIHJldHVybiBjb2RlLgorY2hlY2tfY2FsbCgpIHdpbGwgcmFpc2UgXGV4Y2VwdGlvbntDYWxsZWRQcm9jZXNzRXJyb3J9LCBpZiB0aGUgY2FsbGVkCitwcm9jZXNzIHJldHVybnMgYSBub24temVybyByZXR1cm4gY29kZS4KIAogCiBcc3Vic3Vic2VjdGlvbntTZWN1cml0eX0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic3lzLnRleCBiL0RvYy9saWIvbGlic3lzLnRleAppbmRleCA2YjViNzU1Li43MDI0MjdhIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnN5cy50ZXgKKysrIGIvRG9jL2xpYi9saWJzeXMudGV4CkBAIC0yMSw3ICsyMSw3IEBACiAKIFxiZWdpbntkYXRhZGVzY317Ynl0ZW9yZGVyfQogICBBbiBpbmRpY2F0b3Igb2YgdGhlIG5hdGl2ZSBieXRlIG9yZGVyLiAgVGhpcyB3aWxsIGhhdmUgdGhlIHZhbHVlCi0gIFxjb2RleydiaWcnfSBvbiBiaWctZW5kaWFuIChtb3N0LXNpZ25pZ2ljYW50IGJ5dGUgZmlyc3QpIHBsYXRmb3JtcywKKyAgXGNvZGV7J2JpZyd9IG9uIGJpZy1lbmRpYW4gKG1vc3Qtc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCkgcGxhdGZvcm1zLAogICBhbmQgXGNvZGV7J2xpdHRsZSd9IG9uIGxpdHRsZS1lbmRpYW4gKGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QpCiAgIHBsYXRmb3Jtcy4KICAgXHZlcnNpb25hZGRlZHsyLjB9CkBAIC00MSw3ICs0MSw3IEBACiAgIFxjb2Rle0luY2x1ZGUvcGF0Y2hsZXZlbC5ofSBpZiB0aGUgYnJhbmNoIGlzIGEgdGFnLiBPdGhlcndpc2UsCiAgIGl0IGlzIFxjb2Rle05vbmV9LgogICBcdmVyc2lvbmFkZGVkezIuNX0KLVxlbmR7ZGF0YWRlc2N9ICAKK1xlbmR7ZGF0YWRlc2N9CiAKIFxiZWdpbntkYXRhZGVzY317YnVpbHRpbl9tb2R1bGVfbmFtZXN9CiAgIEEgdHVwbGUgb2Ygc3RyaW5ncyBnaXZpbmcgdGhlIG5hbWVzIG9mIGFsbCBtb2R1bGVzIHRoYXQgYXJlIGNvbXBpbGVkCkBAIC01NSw2ICs1NSwyMyBAQAogICBpbnRlcnByZXRlci4KIFxlbmR7ZGF0YWRlc2N9CiAKK1xiZWdpbntmdW5jZGVzY317X2N1cnJlbnRfZnJhbWVzfXt9CisgIFJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyBlYWNoIHRocmVhZCdzIGlkZW50aWZpZXIgdG8gdGhlIHRvcG1vc3Qgc3RhY2sKKyAgZnJhbWUgY3VycmVudGx5IGFjdGl2ZSBpbiB0aGF0IHRocmVhZCBhdCB0aGUgdGltZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLgorICBOb3RlIHRoYXQgZnVuY3Rpb25zIGluIHRoZSBccmVmbW9kdWxle3RyYWNlYmFja30gbW9kdWxlIGNhbiBidWlsZCB0aGUKKyAgY2FsbCBzdGFjayBnaXZlbiBzdWNoIGEgZnJhbWUuCisKKyAgVGhpcyBpcyBtb3N0IHVzZWZ1bCBmb3IgZGVidWdnaW5nIGRlYWRsb2NrOiAgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdAorICByZXF1aXJlIHRoZSBkZWFkbG9ja2VkIHRocmVhZHMnIGNvb3BlcmF0aW9uLCBhbmQgc3VjaCB0aHJlYWRzJyBjYWxsIHN0YWNrcworICBhcmUgZnJvemVuIGZvciBhcyBsb25nIGFzIHRoZXkgcmVtYWluIGRlYWRsb2NrZWQuICBUaGUgZnJhbWUgcmV0dXJuZWQKKyAgZm9yIGEgbm9uLWRlYWRsb2NrZWQgdGhyZWFkIG1heSBiZWFyIG5vIHJlbGF0aW9uc2hpcCB0byB0aGF0IHRocmVhZCdzCisgIGN1cnJlbnQgYWN0aXZpdHkgYnkgdGhlIHRpbWUgY2FsbGluZyBjb2RlIGV4YW1pbmVzIHRoZSBmcmFtZS4KKworICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBpbnRlcm5hbCBhbmQgc3BlY2lhbGl6ZWQgcHVycG9zZXMKKyAgb25seS4KKyAgXHZlcnNpb25hZGRlZHsyLjV9CitcZW5ke2Z1bmNkZXNjfQorCiBcYmVnaW57ZGF0YWRlc2N9e2RsbGhhbmRsZX0KICAgSW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBoYW5kbGUgb2YgdGhlIFB5dGhvbiBETEwuCiAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KQEAgLTE0Miw3ICsxNTksNyBAQAogICBmdW5jdGlvbiwgXGZ1bmN0aW9ue2V4Y19pbmZvKCl9IHdpbGwgcmV0dXJuIHRocmVlIFxjb2Rle05vbmV9IHZhbHVlcyB1bnRpbAogICBhbm90aGVyIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW4gdGhlIGN1cnJlbnQgdGhyZWFkIG9yIHRoZSBleGVjdXRpb24gc3RhY2sKICAgcmV0dXJucyB0byBhIGZyYW1lIHdoZXJlIGFub3RoZXIgZXhjZXB0aW9uIGlzIGJlaW5nIGhhbmRsZWQuCi0gIAorCiAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBuZWVkZWQgaW4gb25seSBhIGZldyBvYnNjdXJlIHNpdHVhdGlvbnMuICBUaGVzZQogICBpbmNsdWRlIGxvZ2dpbmcgYW5kIGVycm9yIGhhbmRsaW5nIHN5c3RlbXMgdGhhdCByZXBvcnQgaW5mb3JtYXRpb24gb24gdGhlCiAgIGxhc3Qgb3IgY3VycmVudCBleGNlcHRpb24uICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdG8gdHJ5IHRvIGZyZWUKQEAgLTI0MSwxNCArMjU4LDE0IEBACiBcYmVnaW57aXRlbWl6ZX0KIFxpdGVtIE9uIFdpbmRvd3MgOXgsIHRoZSBlbmNvZGluZyBpcyBgYG1iY3MnJy4KIFxpdGVtIE9uIE1hYyBPUyBYLCB0aGUgZW5jb2RpbmcgaXMgYGB1dGYtOCcnLgotXGl0ZW0gT24gVW5peCwgdGhlIGVuY29kaW5nIGlzIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZSAKLSAgICAgIGFjY29yZGluZyB0byB0aGUgcmVzdWx0IG9mIG5sX2xhbmdpbmZvKENPREVTRVQpLCBvciBOb25lIGlmCi0gICAgICB0aGUgbmxfbGFuZ2luZm8oQ09ERVNFVCkgZmFpbGVkLgorXGl0ZW0gT24gXFVOSVgsIHRoZSBlbmNvZGluZyBpcyB0aGUgdXNlcidzIHByZWZlcmVuY2UKKyAgICAgIGFjY29yZGluZyB0byB0aGUgcmVzdWx0IG9mIG5sX2xhbmdpbmZvKENPREVTRVQpLCBvciBcY29uc3RhbnR7Tm9uZX0KKyAgICAgIGlmIHRoZSBcY29kZXtubF9sYW5naW5mbyhDT0RFU0VUKX0gZmFpbGVkLgogXGl0ZW0gT24gV2luZG93cyBOVCssIGZpbGUgbmFtZXMgYXJlIFVuaWNvZGUgbmF0aXZlbHksIHNvIG5vIGNvbnZlcnNpb24KLSAgICAgIGlzIHBlcmZvcm1lZC4gXGNvZGV7Z2V0ZmlsZXN5c3RlbWVuY29kaW5nfSBzdGlsbCByZXR1cm5zIGBgbWJjcycnLAotICAgICAgYXMgdGhpcyBpcyB0aGUgZW5jb2RpbmcgdGhhdCBhcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB3aGVuIHRoZXkKLSAgICAgIGV4cGxpY2l0bHkgd2FudCB0byBjb252ZXJ0IFVuaWNvZGUgc3RyaW5ncyB0byBieXRlIHN0cmluZ3MgdGhhdAotICAgICAgYXJlIGVxdWl2YWxlbnQgd2hlbiB1c2VkIGFzIGZpbGUgbmFtZXMuCisgICAgICBpcyBwZXJmb3JtZWQuIFxmdW5jdGlvbntnZXRmaWxlc3lzdGVtZW5jb2RpbmcoKX0gc3RpbGwgcmV0dXJucworICAgICAgXGNvZGV7J21iY3MnfSwgYXMgdGhpcyBpcyB0aGUgZW5jb2RpbmcgdGhhdCBhcHBsaWNhdGlvbnMgc2hvdWxkIHVzZQorICAgICAgd2hlbiB0aGV5IGV4cGxpY2l0bHkgd2FudCB0byBjb252ZXJ0IFVuaWNvZGUgc3RyaW5ncyB0byBieXRlIHN0cmluZ3MKKyAgICAgIHRoYXQgYXJlIGVxdWl2YWxlbnQgd2hlbiB1c2VkIGFzIGZpbGUgbmFtZXMuCiBcZW5ke2l0ZW1pemV9CiAgIFx2ZXJzaW9uYWRkZWR7Mi4zfQogXGVuZHtmdW5jZGVzY30KQEAgLTI3OSw4ICsyOTYsOCBAQAogXGVuZHtmdW5jZGVzY30KIAogXGJlZ2lue2Z1bmNkZXNjfXtnZXR3aW5kb3dzdmVyc2lvbn17fQotICBSZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIGZpdmUgY29tcG9uZW50cywgZGVzY3JpYmluZyB0aGUgV2luZG93cyAKLSAgdmVyc2lvbiBjdXJyZW50bHkgcnVubmluZy4gIFRoZSBlbGVtZW50cyBhcmUgXHZhcnttYWpvcn0sIFx2YXJ7bWlub3J9LCAKKyAgUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyBmaXZlIGNvbXBvbmVudHMsIGRlc2NyaWJpbmcgdGhlIFdpbmRvd3MKKyAgdmVyc2lvbiBjdXJyZW50bHkgcnVubmluZy4gIFRoZSBlbGVtZW50cyBhcmUgXHZhcnttYWpvcn0sIFx2YXJ7bWlub3J9LAogICBcdmFye2J1aWxkfSwgXHZhcntwbGF0Zm9ybX0sIGFuZCBcdmFye3RleHR9LiAgXHZhcnt0ZXh0fSBjb250YWlucwogICBhIHN0cmluZyB3aGlsZSBhbGwgb3RoZXIgdmFsdWVzIGFyZSBpbnRlZ2Vycy4KIApAQCAtNDkxLDcgKzUwOCw3IEBACiAgIGJlIHJlZ2lzdGVyZWQgdXNpbmcgXGZ1bmN0aW9ue3NldHRyYWNlKCl9IGZvciBlYWNoIHRocmVhZCBiZWluZwogICBkZWJ1Z2dlZC4gIFxub3Rle1RoZSBcZnVuY3Rpb257c2V0dHJhY2UoKX0gZnVuY3Rpb24gaXMgaW50ZW5kZWQgb25seQogICBmb3IgaW1wbGVtZW50aW5nIGRlYnVnZ2VycywgcHJvZmlsZXJzLCBjb3ZlcmFnZSB0b29scyBhbmQgdGhlIGxpa2UuCi0gIEl0cyBiZWhhdmlvciBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBwbGF0Zm9ybSwgcmF0aGVyIHRoYW4gCisgIEl0cyBiZWhhdmlvciBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBwbGF0Zm9ybSwgcmF0aGVyIHRoYW4KICAgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbiwgYW5kIHRodXMgbWF5IG5vdCBiZSBhdmFpbGFibGUgaW4KICAgYWxsIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMufQogXGVuZHtmdW5jZGVzY30KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlidGV4dHdyYXAudGV4IGIvRG9jL2xpYi9saWJ0ZXh0d3JhcC50ZXgKaW5kZXggOWZiMDgxNi4uMzhmOWIwMyAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ0ZXh0d3JhcC50ZXgKKysrIGIvRG9jL2xpYi9saWJ0ZXh0d3JhcC50ZXgKQEAgLTQ3LDEyICs0NywxNyBAQAogbGVmdCBvZiB0aGUgdGV4dC4KIAogXGJlZ2lue2Z1bmNkZXNjfXtkZWRlbnR9e3RleHR9IAotUmVtb3ZlIGFueSB3aGl0ZXNwYWNlIHRoYXQgY2FuIGJlIHVuaWZvcm1seSByZW1vdmVkIGZyb20gdGhlIGxlZnQKLW9mIGV2ZXJ5IGxpbmUgaW4gXHZhcnt0ZXh0fS4KK1JlbW92ZSBhbnkgY29tbW9uIGxlYWRpbmcgd2hpdGVzcGFjZSBmcm9tIGV2ZXJ5IGxpbmUgaW4gXHZhcnt0ZXh0fS4KIAotVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBtYWtlIHRyaXBsZS1xdW90ZWQgc3RyaW5ncyBsaW5lIHVwIHdpdGgKLXRoZSBsZWZ0IGVkZ2Ugb2Ygc2NyZWVuL3doYXRldmVyLCB3aGlsZSBzdGlsbCBwcmVzZW50aW5nIGl0IGluIHRoZQotc291cmNlIGNvZGUgaW4gaW5kZW50ZWQgZm9ybS4gCitUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2UgdHJpcGxlLXF1b3RlZCBzdHJpbmdzIGxpbmUgdXAgd2l0aCB0aGUgbGVmdAorZWRnZSBvZiB0aGUgZGlzcGxheSwgd2hpbGUgc3RpbGwgcHJlc2VudGluZyB0aGVtIGluIHRoZSBzb3VyY2UgY29kZQoraW4gaW5kZW50ZWQgZm9ybS4KKworTm90ZSB0aGF0IHRhYnMgYW5kIHNwYWNlcyBhcmUgYm90aCB0cmVhdGVkIGFzIHdoaXRlc3BhY2UsIGJ1dCB0aGV5IGFyZQorbm90IGVxdWFsOiB0aGUgbGluZXMgXGNvZGV7IiB7fSBoZWxsbyJ9IGFuZCBcY29kZXsiXHRleHRiYWNrc2xhc2h7fXRoZWxsbyJ9CithcmUgY29uc2lkZXJlZCB0byBoYXZlIG5vIGNvbW1vbiBsZWFkaW5nIHdoaXRlc3BhY2UuICAoVGhpcyBiZWhhdmlvdXIgaXMKK25ldyBpbiBQeXRob24gMi41OyBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIG1vZHVsZSBpbmNvcnJlY3RseSBleHBhbmRlZAordGFicyBiZWZvcmUgc2VhcmNoaW5nIGZvciBjb21tb24gbGVhZGluZyB3aGl0ZXNwYWNlLikKIAogRm9yIGV4YW1wbGU6CiBcYmVnaW57dmVyYmF0aW19CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnRocmVhZC50ZXggYi9Eb2MvbGliL2xpYnRocmVhZC50ZXgKaW5kZXggOTU3M2FiMy4uZDAwN2VlYyAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ0aHJlYWQudGV4CisrKyBiL0RvYy9saWIvbGlidGhyZWFkLnRleApAQCAtNzQsNiArNzQsMjYgQEAKIGFub3RoZXIgdGhyZWFkIGlzIGNyZWF0ZWQuCiBcZW5ke2Z1bmNkZXNjfQogCitcYmVnaW57ZnVuY2Rlc2N9e3N0YWNrX3NpemV9e1xvcHRpb25hbHtzaXplfX0KK1JldHVybiB0aGUgdGhyZWFkIHN0YWNrIHNpemUgdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyB0aHJlYWRzLiAgVGhlCitvcHRpb25hbCBcdmFye3NpemV9IGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgc3RhY2sgc2l6ZSB0byBiZSB1c2VkIGZvcgorc3Vic2VxdWVudGx5IGNyZWF0ZWQgdGhyZWFkcywgYW5kIG11c3QgYmUgMCAodXNlIHBsYXRmb3JtIG9yCitjb25maWd1cmVkIGRlZmF1bHQpIG9yIGEgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBvZiBhdCBsZWFzdCAzMiw3NjggKDMya0IpLgorSWYgY2hhbmdpbmcgdGhlIHRocmVhZCBzdGFjayBzaXplIGlzIHVuc3VwcG9ydGVkLCBhIFxleGNlcHRpb257VGhyZWFkRXJyb3J9CitpcyByYWlzZWQuICBJZiB0aGUgc3BlY2lmaWVkIHN0YWNrIHNpemUgaXMgaW52YWxpZCwgYSBcZXhjZXB0aW9ue1ZhbHVlRXJyb3J9CitpcyByYWlzZWQgYW5kIHRoZSBzdGFjayBzaXplIGlzIHVubW9kaWZpZWQuICAzMmtCIGlzIGN1cnJlbnRseSB0aGUgbWluaW11bQorc3VwcG9ydGVkIHN0YWNrIHNpemUgdmFsdWUgdG8gZ3VhcmFudGVlIHN1ZmZpY2llbnQgc3RhY2sgc3BhY2UgZm9yIHRoZQoraW50ZXJwcmV0ZXIgaXRzZWxmLiAgTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zIG1heSBoYXZlIHBhcnRpY3VsYXIKK3Jlc3RyaWN0aW9ucyBvbiB2YWx1ZXMgZm9yIHRoZSBzdGFjayBzaXplLCBzdWNoIGFzIHJlcXVpcmluZyBhIG1pbmltdW0KK3N0YWNrIHNpemUgPiAzMmtCIG9yIHJlcXVpcmluZyBhbGxvY2F0aW9uIGluIG11bHRpcGxlcyBvZiB0aGUgc3lzdGVtCittZW1vcnkgcGFnZSBzaXplIC0gcGxhdGZvcm0gZG9jdW1lbnRhdGlvbiBzaG91bGQgYmUgcmVmZXJyZWQgdG8gZm9yCittb3JlIGluZm9ybWF0aW9uICg0a0IgcGFnZXMgYXJlIGNvbW1vbjsgdXNpbmcgbXVsdGlwbGVzIG9mIDQwOTYgZm9yCit0aGUgc3RhY2sgc2l6ZSBpcyB0aGUgc3VnZ2VzdGVkIGFwcHJvYWNoIGluIHRoZSBhYnNlbmNlIG9mIG1vcmUKK3NwZWNpZmljIGluZm9ybWF0aW9uKS4KK0F2YWlsYWJpbGl0eTogV2luZG93cywgc3lzdGVtcyB3aXRoIFxQT1NJWHt9IHRocmVhZHMuCitcdmVyc2lvbmFkZGVkezIuNX0KK1xlbmR7ZnVuY2Rlc2N9CisKIAogTG9jayBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnRocmVhZGluZy50ZXggYi9Eb2MvbGliL2xpYnRocmVhZGluZy50ZXgKaW5kZXggOGZiMzEzNy4uMDMzNDc1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ0aHJlYWRpbmcudGV4CisrKyBiL0RvYy9saWIvbGlidGhyZWFkaW5nLnRleApAQCAtMTI1LDYgKzEyNSwyNiBAQAogXHZlcnNpb25hZGRlZHsyLjN9CiBcZW5ke2Z1bmNkZXNjfQogCitcYmVnaW57ZnVuY2Rlc2N9e3N0YWNrX3NpemV9e1xvcHRpb25hbHtzaXplfX0KK1JldHVybiB0aGUgdGhyZWFkIHN0YWNrIHNpemUgdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyB0aHJlYWRzLiAgVGhlCitvcHRpb25hbCBcdmFye3NpemV9IGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgc3RhY2sgc2l6ZSB0byBiZSB1c2VkIGZvcgorc3Vic2VxdWVudGx5IGNyZWF0ZWQgdGhyZWFkcywgYW5kIG11c3QgYmUgMCAodXNlIHBsYXRmb3JtIG9yCitjb25maWd1cmVkIGRlZmF1bHQpIG9yIGEgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBvZiBhdCBsZWFzdCAzMiw3NjggKDMya0IpLgorSWYgY2hhbmdpbmcgdGhlIHRocmVhZCBzdGFjayBzaXplIGlzIHVuc3VwcG9ydGVkLCBhIFxleGNlcHRpb257VGhyZWFkRXJyb3J9CitpcyByYWlzZWQuICBJZiB0aGUgc3BlY2lmaWVkIHN0YWNrIHNpemUgaXMgaW52YWxpZCwgYSBcZXhjZXB0aW9ue1ZhbHVlRXJyb3J9CitpcyByYWlzZWQgYW5kIHRoZSBzdGFjayBzaXplIGlzIHVubW9kaWZpZWQuICAzMmtCIGlzIGN1cnJlbnRseSB0aGUgbWluaW11bQorc3VwcG9ydGVkIHN0YWNrIHNpemUgdmFsdWUgdG8gZ3VhcmFudGVlIHN1ZmZpY2llbnQgc3RhY2sgc3BhY2UgZm9yIHRoZQoraW50ZXJwcmV0ZXIgaXRzZWxmLiAgTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zIG1heSBoYXZlIHBhcnRpY3VsYXIKK3Jlc3RyaWN0aW9ucyBvbiB2YWx1ZXMgZm9yIHRoZSBzdGFjayBzaXplLCBzdWNoIGFzIHJlcXVpcmluZyBhIG1pbmltdW0KK3N0YWNrIHNpemUgPiAzMmtCIG9yIHJlcXVpcmluZyBhbGxvY2F0aW9uIGluIG11bHRpcGxlcyBvZiB0aGUgc3lzdGVtCittZW1vcnkgcGFnZSBzaXplIC0gcGxhdGZvcm0gZG9jdW1lbnRhdGlvbiBzaG91bGQgYmUgcmVmZXJyZWQgdG8gZm9yCittb3JlIGluZm9ybWF0aW9uICg0a0IgcGFnZXMgYXJlIGNvbW1vbjsgdXNpbmcgbXVsdGlwbGVzIG9mIDQwOTYgZm9yCit0aGUgc3RhY2sgc2l6ZSBpcyB0aGUgc3VnZ2VzdGVkIGFwcHJvYWNoIGluIHRoZSBhYnNlbmNlIG9mIG1vcmUKK3NwZWNpZmljIGluZm9ybWF0aW9uKS4KK0F2YWlsYWJpbGl0eTogV2luZG93cywgc3lzdGVtcyB3aXRoIFxQT1NJWHt9IHRocmVhZHMuCitcdmVyc2lvbmFkZGVkezIuNX0KK1xlbmR7ZnVuY2Rlc2N9CisKIERldGFpbGVkIGludGVyZmFjZXMgZm9yIHRoZSBvYmplY3RzIGFyZSBkb2N1bWVudGVkIGJlbG93LiAgCiAKIFRoZSBkZXNpZ24gb2YgdGhpcyBtb2R1bGUgaXMgbG9vc2VseSBiYXNlZCBvbiBKYXZhJ3MgdGhyZWFkaW5nIG1vZGVsLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJ0aW1lLnRleCBiL0RvYy9saWIvbGlidGltZS50ZXgKaW5kZXggYjM5YjY1MC4uZjQwODM4YSAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ0aW1lLnRleAorKysgYi9Eb2MvbGliL2xpYnRpbWUudGV4CkBAIC0yMjYsNiArMjI2LDggQEAKIFx2ZXJzaW9uY2hhbmdlZFtBbGxvd2VkIFx2YXJ7dH0gdG8gYmUgb21pdHRlZF17Mi4xfQogXHZlcnNpb25jaGFuZ2VkW1xleGNlcHRpb257VmFsdWVFcnJvcn0gcmFpc2VkIGlmIGEgZmllbGQgaW4gXHZhcnt0fSBpcwogb3V0IG9mIHJhbmdlXXsyLjR9CitcdmVyc2lvbmNoYW5nZWRbMCBpcyBub3cgYSBsZWdhbCBhcmd1bWVudCBmb3IgYW55IHBvc2l0aW9uIGluIHRoZSB0aW1lIHR1cGxlOworaWYgaXQgaXMgbm9ybWFsbHkgaWxsZWdhbCB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIGEgY29ycmVjdCBvbmUuXXsyLjV9CiAKIAogVGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzIGNhbiBiZSBlbWJlZGRlZCBpbiB0aGUgXHZhcntmb3JtYXR9IHN0cmluZy4KQEAgLTQyNSw3ICs0MjcsNyBAQAogJzE2OjA4OjEyIDA1LzA4LzAzIEFFU1QnCiBcZW5ke3ZlcmJhdGltfQogCi1PbiBtYW55IFVuaXggc3lzdGVtcyAoaW5jbHVkaW5nICpCU0QsIExpbnV4LCBTb2xhcmlzLCBhbmQgRGFyd2luKSwgaXQKK09uIG1hbnkgXFVOSVh7fSBzeXN0ZW1zIChpbmNsdWRpbmcgKkJTRCwgTGludXgsIFNvbGFyaXMsIGFuZCBEYXJ3aW4pLCBpdAogaXMgbW9yZSBjb252ZW5pZW50IHRvIHVzZSB0aGUgc3lzdGVtJ3Mgem9uZWluZm8gKFxtYW5wYWdle3R6ZmlsZX17NX0pIAogZGF0YWJhc2UgdG8gc3BlY2lmeSB0aGUgdGltZXpvbmUgcnVsZXMuIFRvIGRvIHRoaXMsIHNldCB0aGUgCiBcZW52dmFye1RafSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgcGF0aCBvZiB0aGUgcmVxdWlyZWQgdGltZXpvbmUgCmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnR1cnRsZS50ZXggYi9Eb2MvbGliL2xpYnR1cnRsZS50ZXgKaW5kZXggNjM4YmMwNy4uNjE2MWNkOSAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ0dXJ0bGUudGV4CisrKyBiL0RvYy9saWIvbGlidHVydGxlLnRleApAQCAtMjcsNiArMjcsNDUgQEAKIFNldCBhbmdsZSBtZWFzdXJlbWVudCB1bml0cyB0byByYWRpYW5zLgogXGVuZHtmdW5jZGVzY30KIAorXGJlZ2lue2Z1bmNkZXNjfXtzZXR1cH17Kiprd2FyZ3N9CitTZXRzIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgbWFpbiB3aW5kb3cuICBLZXl3b3JkcyBhcmU6CitcYmVnaW57aXRlbWl6ZX0KKyAgXGl0ZW0gXGNvZGV7d2lkdGh9OiBlaXRoZXIgYSBzaXplIGluIHBpeGVscyBvciBhIGZyYWN0aW9uIG9mIHRoZSBzY3JlZW4uCisgICBUaGUgZGVmYXVsdCBpcyA1MFwlIG9mIHRoZSBzY3JlZW4uCisgIFxpdGVtIFxjb2Rle2hlaWdodH06IGVpdGhlciBhIHNpemUgaW4gcGl4ZWxzIG9yIGEgZnJhY3Rpb24gb2YgdGhlIHNjcmVlbi4KKyAgIFRoZSBkZWZhdWx0IGlzIDUwXCUgb2YgdGhlIHNjcmVlbi4KKyAgXGl0ZW0gXGNvZGV7c3RhcnR4fTogc3RhcnRpbmcgcG9zaXRpb24gaW4gcGl4ZWxzIGZyb20gdGhlIGxlZnQgZWRnZQorICAgICAgb2YgdGhlIHNjcmVlbi4gXGNvZGV7Tm9uZX0gaXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIAorICAgICAgY2VudGVycyB0aGUgd2luZG93IGhvcml6b250YWxseSBvbiBzY3JlZW4uCisgIFxpdGVtIFxjb2Rle3N0YXJ0eX06IHN0YXJ0aW5nIHBvc2l0aW9uIGluIHBpeGVscyBmcm9tIHRoZSB0b3AgZWRnZQorICAgICAgb2YgdGhlIHNjcmVlbi4gXGNvZGV7Tm9uZX0gaXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIAorICAgICAgY2VudGVycyB0aGUgd2luZG93IHZlcnRpY2FsbHkgb24gc2NyZWVuLgorXGVuZHtpdGVtaXplfQorCisgICBFeGFtcGxlczoKKworXGJlZ2lue3ZlcmJhdGltfQorIyBVc2VzIGRlZmF1bHQgZ2VvbWV0cnk6IDUwJSB4IDUwJSBvZiBzY3JlZW4sIGNlbnRlcmVkLgorc2V0dXAoKSAgCisKKyMgU2V0cyB3aW5kb3cgdG8gMjAweDIwMCBwaXhlbHMsIGluIHVwcGVyIGxlZnQgb2Ygc2NyZWVuCitzZXR1cCAod2lkdGg9MjAwLCBoZWlnaHQ9MjAwLCBzdGFydHg9MCwgc3RhcnR5PTApCisKKyMgU2V0cyB3aW5kb3cgdG8gNzUlIG9mIHNjcmVlbiBieSA1MCUgb2Ygc2NyZWVuLCBhbmQgY2VudGVycyBpdC4KK3NldHVwKHdpZHRoPS43NSwgaGVpZ2h0PTAuNSwgc3RhcnR4PU5vbmUsIHN0YXJ0eT1Ob25lKQorXGVuZHt2ZXJiYXRpbX0KKworXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXt0aXRsZX17dGl0bGVfc3RyfQorU2V0IHRoZSB3aW5kb3cncyB0aXRsZSB0byBcdmFye3RpdGxlfS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317ZG9uZX17fQorRW50ZXJzIHRoZSBUayBtYWluIGxvb3AuICBUaGUgd2luZG93IHdpbGwgY29udGludWUgdG8gCitiZSBkaXNwbGF5ZWQgdW50aWwgdGhlIHVzZXIgY2xvc2VzIGl0IG9yIHRoZSBwcm9jZXNzIGlzIGtpbGxlZC4KK1xlbmR7ZnVuY2Rlc2N9CisKIFxiZWdpbntmdW5jZGVzY317cmVzZXR9e30KIENsZWFyIHRoZSBzY3JlZW4sIHJlLWNlbnRlciB0aGUgcGVuLCBhbmQgc2V0IHZhcmlhYmxlcyB0byB0aGUgZGVmYXVsdAogdmFsdWVzLgpAQCAtNDIsNiArODEsMTkgQEAKIGxpbmUuCiBcZW5ke2Z1bmNkZXNjfQogCitcYmVnaW57ZnVuY2Rlc2N9e3NwZWVkfXtzcGVlZH0KK1NldCB0aGUgc3BlZWQgb2YgdGhlIHR1cnRsZS4gVmFsaWQgdmFsdWVzIGZvciB0aGUgcGFyYW1ldGVyCitcdmFye3NwZWVkfSBhcmUgXGNvZGV7J2Zhc3Rlc3QnfSAobm8gZGVsYXkpLCBcY29kZXsnZmFzdCd9LAorKGRlbGF5IDVtcyksIFxjb2Rleydub3JtYWwnfSAoZGVsYXkgMTBtcyksIFxjb2RleydzbG93J30KKyhkZWxheSAxNW1zKSwgYW5kIFxjb2RleydzbG93ZXN0J30gKGRlbGF5IDIwbXMpLgorXHZlcnNpb25hZGRlZHsyLjV9CitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2RlbGF5fXtkZWxheX0KK1NldCB0aGUgc3BlZWQgb2YgdGhlIHR1cnRsZSB0byBcdmFye2RlbGF5fSwgd2hpY2ggaXMgZ2l2ZW4KK2luIG1zLiBcdmVyc2lvbmFkZGVkezIuNX0KK1xlbmR7ZnVuY2Rlc2N9CisKIFxiZWdpbntmdW5jZGVzY317Zm9yd2FyZH17ZGlzdGFuY2V9CiBHbyBmb3J3YXJkIFx2YXJ7ZGlzdGFuY2V9IHN0ZXBzLgogXGVuZHtmdW5jZGVzY30KQEAgLTk0LDYgKzE0NiwxOCBAQAogYW5kIGNhbGwgXGNvZGV7ZmlsbCgwKX0gd2hlbiB5b3UgZmluaXNoIHRvIGRyYXcgdGhlIHBhdGguCiBcZW5ke2Z1bmNkZXNjfQogCitcYmVnaW57ZnVuY2Rlc2N9e2JlZ2luXF9maWxsfXt9CitTd2l0Y2ggdHVydGxlIGludG8gZmlsbGluZyBtb2RlOyAKK011c3QgZXZlbnR1YWxseSBiZSBmb2xsb3dlZCBieSBhIGNvcnJlc3BvbmRpbmcgZW5kX2ZpbGwoKSBjYWxsLgorT3RoZXJ3aXNlIGl0IHdpbGwgYmUgaWdub3JlZC4KK1x2ZXJzaW9uYWRkZWR7Mi41fQorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtlbmRcX2ZpbGx9e30KK0VuZCBmaWxsaW5nIG1vZGUsIGFuZCBmaWxsIHRoZSBzaGFwZTsgZXF1aXZhbGVudCB0byBcY29kZXtmaWxsKDApfS4KK1x2ZXJzaW9uYWRkZWR7Mi41fQorXGVuZHtmdW5jZGVzY30KKwogXGJlZ2lue2Z1bmNkZXNjfXtjaXJjbGV9e3JhZGl1c1xvcHRpb25hbHssIGV4dGVudH19CiBEcmF3IGEgY2lyY2xlIHdpdGggcmFkaXVzIFx2YXJ7cmFkaXVzfSB3aG9zZSBjZW50ZXItcG9pbnQgaXMKIFx2YXJ7cmFkaXVzfSB1bml0cyBsZWZ0IG9mIHRoZSB0dXJ0bGUuCkBAIC0xMTMsNiArMTc3LDQ5IEBACiBzcGVjaWZpZWQgZWl0aGVyIGFzIHR3byBzZXBhcmF0ZSBhcmd1bWVudHMgb3IgYXMgYSAyLXR1cGxlLgogXGVuZHtmdW5jZGVzY30KIAorXGJlZ2lue2Z1bmNkZXNjfXt0b3dhcmRzfXt4LCB5fQorUmV0dXJuIHRoZSBhbmdsZSBvZiB0aGUgbGluZSBmcm9tIHRoZSB0dXJ0bGUncyBwb3NpdGlvbgordG8gdGhlIHBvaW50IFx2YXJ7eH0sIFx2YXJ7eX0uIFRoZSBjby1vcmRpbmF0ZXMgbWF5IGJlCitzcGVjaWZpZWQgZWl0aGVyIGFzIHR3byBzZXBhcmF0ZSBhcmd1bWVudHMsIGFzIGEgMi10dXBsZSwKK29yIGFzIGFub3RoZXIgcGVuIG9iamVjdC4KK1x2ZXJzaW9uYWRkZWR7Mi41fQorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtoZWFkaW5nfXt9CitSZXR1cm4gdGhlIGN1cnJlbnQgb3JpZW50YXRpb24gb2YgdGhlIHR1cnRsZS4KK1x2ZXJzaW9uYWRkZWR7Mi4zfQorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtzZXRoZWFkaW5nfXthbmdsZX0KK1NldCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHR1cnRsZSB0byBcdmFye2FuZ2xlfS4KK1x2ZXJzaW9uYWRkZWR7Mi4zfQorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtwb3NpdGlvbn17fQorUmV0dXJuIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9mIHRoZSB0dXJ0bGUgYXMgYW4gXGNvZGV7KHgseSl9IHBhaXIuCitcdmVyc2lvbmFkZGVkezIuM30KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317c2V0eH17eH0KK1NldCB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSB0dXJ0bGUgdG8gXHZhcnt4fS4KK1x2ZXJzaW9uYWRkZWR7Mi4zfQorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtzZXR5fXt5fQorU2V0IHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIHR1cnRsZSB0byBcdmFye3l9LgorXHZlcnNpb25hZGRlZHsyLjN9CitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e3dpbmRvd1xfd2lkdGh9e30KK1JldHVybiB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB3aW5kb3cuCitcdmVyc2lvbmFkZGVkezIuM30KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317d2luZG93XF9oZWlnaHR9e30KK1JldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSBjYW52YXMgd2luZG93LgorXHZlcnNpb25hZGRlZHsyLjN9CitcZW5ke2Z1bmNkZXNjfQorCiBUaGlzIG1vZHVsZSBhbHNvIGRvZXMgXGNvZGV7ZnJvbSBtYXRoIGltcG9ydCAqfSwgc28gc2VlIHRoZQogZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFxyZWZtb2R1bGV7bWF0aH0gbW9kdWxlIGZvciBhZGRpdGlvbmFsIGNvbnN0YW50cwogYW5kIGZ1bmN0aW9ucyB1c2VmdWwgZm9yIHR1cnRsZSBncmFwaGljcy4KQEAgLTEzNCwxOSArMjQxLDI1IEBACiBwZW4uIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBjYW52YXMgZG8gYmUgZHJhd24gb24uCiBcZW5ke2NsYXNzZGVzY30KIAorXGJlZ2lue2NsYXNzZGVzY317VHVydGxlfXt9CitEZWZpbmUgYSBwZW4uIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBzeW5vbnltIGZvciBcY29kZXtQZW4oKX07CitcY2xhc3N7VHVydGxlfSBpcyBhbiBlbXB0eSBzdWJjbGFzcyBvZiBcY2xhc3N7UGVufS4KK1xlbmR7Y2xhc3NkZXNjfQorCiBcYmVnaW57Y2xhc3NkZXNjfXtSYXdQZW59e2NhbnZhc30KIERlZmluZSBhIHBlbiB3aGljaCBkcmF3cyBvbiBhIGNhbnZhcyBcdmFye2NhbnZhc30uIFRoaXMgaXMgdXNlZnVsIGlmIAogeW91IHdhbnQgdG8gdXNlIHRoZSBtb2R1bGUgdG8gY3JlYXRlIGdyYXBoaWNzIGluIGEgYGByZWFsJycgcHJvZ3JhbS4KIFxlbmR7Y2xhc3NkZXNjfQogCi1cc3Vic2VjdGlvbntQZW4gYW5kIFJhd1BlbiBPYmplY3RzIFxsYWJlbHtwZW4tcmF3cGVuLW9iamVjdHN9fQorXHN1YnNlY3Rpb257VHVydGxlLCBQZW4gYW5kIFJhd1BlbiBPYmplY3RzIFxsYWJlbHtwZW4tcmF3cGVuLW9iamVjdHN9fQogCi1cY2xhc3N7UGVufSBhbmQgXGNsYXNze1Jhd1Blbn0gb2JqZWN0cyBoYXZlIGFsbCB0aGUgZ2xvYmFsIGZ1bmN0aW9ucwotZGVzY3JpYmVkIGFib3ZlLCBleGNlcHQgZm9yIFxmdW5jdGlvbntkZW1vKCl9IGFzIG1ldGhvZHMsIHdoaWNoCi1tYW5pcHVsYXRlIHRoZSBnaXZlbiBwZW4uCitNb3N0IG9mIHRoZSBnbG9iYWwgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGUgbW9kdWxlIGFyZSBhbHNvCithdmFpbGFibGUgYXMgbWV0aG9kcyBvZiB0aGUgXGNsYXNze1R1cnRsZX0sIFxjbGFzc3tQZW59IGFuZAorXGNsYXNze1Jhd1Blbn0gY2xhc3NlcywgYWZmZWN0aW5nIG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBnaXZlbiBwZW4uCiAKIFRoZSBvbmx5IG1ldGhvZCB3aGljaCBpcyBtb3JlIHBvd2VyZnVsIGFzIGEgbWV0aG9kIGlzCi1cZnVuY3Rpb257ZGVncmVlcygpfS4KK1xmdW5jdGlvbntkZWdyZWVzKCl9LCB3aGljaCB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudCBsZXR0aW5nIAoreW91IHNwZWNpZnkgdGhlIG51bWJlciBvZiB1bml0cyBjb3JyZXNwb25kaW5nIHRvIGEgZnVsbCBjaXJjbGU6CiAKIFxiZWdpbnttZXRob2RkZXNjfXtkZWdyZWVzfXtcb3B0aW9uYWx7ZnVsbGNpcmNsZX19CiBcdmFye2Z1bGxjaXJjbGV9IGlzIGJ5IGRlZmF1bHQgMzYwLiBUaGlzIGNhbiBjYXVzZSB0aGUgcGVuIHRvIGhhdmUgYW55CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnR5cGVzLnRleCBiL0RvYy9saWIvbGlidHlwZXMudGV4CmluZGV4IGY4ZjU1N2QuLmM4MGE4N2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlidHlwZXMudGV4CisrKyBiL0RvYy9saWIvbGlidHlwZXMudGV4CkBAIC0xNzYsNiArMTc2LDMwIEBACiBcZnVuY3Rpb257YnVmZmVyKCl9XGJpZnVuY2luZGV4e2J1ZmZlcn0gZnVuY3Rpb24uCiBcZW5ke2RhdGFkZXNjfQogCitcYmVnaW57ZGF0YWRlc2N9e0RpY3RQcm94eVR5cGV9CitUaGUgdHlwZSBvZiBkaWN0IHByb3hpZXMsIHN1Y2ggYXMgXGNvZGV7VHlwZVR5cGUuX19kaWN0X199LgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtOb3RJbXBsZW1lbnRlZFR5cGV9CitUaGUgdHlwZSBvZiBcY29kZXtOb3RJbXBsZW1lbnRlZH0KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntkYXRhZGVzY317R2V0U2V0RGVzY3JpcHRvclR5cGV9CitUaGUgdHlwZSBvZiBvYmplY3RzIGRlZmluZWQgaW4gZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBcY29kZXtQeUdldFNldERlZn0sIHN1Y2gKK2FzIFxjb2Rle0ZyYW1lVHlwZS5mX2xvY2Fsc30gb3IgXGNvZGV7YXJyYXkuYXJyYXkudHlwZWNvZGV9LiAgVGhpcyBjb25zdGFudCBpcworbm90IGRlZmluZWQgaW4gaW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiB0aGF0IGRvIG5vdCBoYXZlIHN1Y2ggZXh0ZW5zaW9uCit0eXBlcywgc28gZm9yIHBvcnRhYmxlIGNvZGUgdXNlIFxjb2Rle2hhc2F0dHIodHlwZXMsICdHZXRTZXREZXNjcmlwdG9yVHlwZScpfS4KK1x2ZXJzaW9uYWRkZWR7Mi41fQorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtNZW1iZXJEZXNjcmlwdG9yVHlwZX0KK1RoZSB0eXBlIG9mIG9iamVjdHMgZGVmaW5lZCBpbiBleHRlbnNpb24gbW9kdWxlcyB3aXRoIFxjb2Rle1B5TWVtYmVyRGVmfSwgc3VjaAorYXMgXGNvZGUge2RhdGV0aW1lLnRpbWVkZWx0YS5kYXlzfS4gIFRoaXMgY29uc3RhbnQgaXMgbm90IGRlZmluZWQgaW4KK2ltcGxlbWVudGF0aW9ucyBvZiBQeXRob24gdGhhdCBkbyBub3QgaGF2ZSBzdWNoIGV4dGVuc2lvbiB0eXBlcywgc28gZm9yCitwb3J0YWJsZSBjb2RlIHVzZSBcY29kZXtoYXNhdHRyKHR5cGVzLCAnTWVtYmVyRGVzY3JpcHRvclR5cGUnKX0uCitcdmVyc2lvbmFkZGVkezIuNX0KK1xlbmR7ZGF0YWRlc2N9CisKIFxiZWdpbntkYXRhZGVzY317U3RyaW5nVHlwZXN9CiBBIHNlcXVlbmNlIGNvbnRhaW5pbmcgXGNvZGV7U3RyaW5nVHlwZX0gYW5kIFxjb2Rle1VuaWNvZGVUeXBlfSB1c2VkIHRvCiBmYWNpbGl0YXRlIGVhc2llciBjaGVja2luZyBmb3IgYW55IHN0cmluZyBvYmplY3QuICBVc2luZyB0aGlzIGlzIG1vcmUKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlidW5kb2MudGV4IGIvRG9jL2xpYi9saWJ1bmRvYy50ZXgKaW5kZXggZGY3ODE1Mi4uZTdkMzg4ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ1bmRvYy50ZXgKKysrIGIvRG9jL2xpYi9saWJ1bmRvYy50ZXgKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogXGl0ZW1bXG1vZHVsZXtic2RkYjE4NX1dCiAtLS0gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kdWxlIGZvciBzeXN0ZW1zIHdoaWNoIHN0aWxsIHVzZSB0aGUgQmVya2VsZXkKLSAgICBEQiAxLjg1IG1vZHVsZS4gIEl0IGlzIG5vcm1hbGx5IG9ubHkgYXZhaWxhYmxlIG9uIGNlcnRhaW4gQlNEIFVuaXgtYmFzZWQKKyAgICBEQiAxLjg1IG1vZHVsZS4gIEl0IGlzIG5vcm1hbGx5IG9ubHkgYXZhaWxhYmxlIG9uIGNlcnRhaW4gQlNEIFxVTklYLWJhc2VkCiAgICAgc3lzdGVtcy4gIEl0IHNob3VsZCBuZXZlciBiZSB1c2VkIGRpcmVjdGx5LgogXGVuZHtkZXNjcmlwdGlvbn0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJ1bmljb2RlZGF0YS50ZXggYi9Eb2MvbGliL2xpYnVuaWNvZGVkYXRhLnRleAppbmRleCBkY2JkYTc3Li40MzU0NjZhIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnVuaWNvZGVkYXRhLnRleAorKysgYi9Eb2MvbGliL2xpYnVuaWNvZGVkYXRhLnRleApAQCAtMTQsMTEgKzE0LDExIEBACiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIHdoaWNoCiBkZWZpbmVzIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGZvciBhbGwgVW5pY29kZSBjaGFyYWN0ZXJzLiBUaGUgZGF0YSBpbgogdGhpcyBkYXRhYmFzZSBpcyBiYXNlZCBvbiB0aGUgXGZpbGV7VW5pY29kZURhdGEudHh0fSBmaWxlIHZlcnNpb24KLTQuMS4wIHdoaWNoIGlzIHB1YmxpY2FsbHkgYXZhaWxhYmxlIGZyb20gXHVybHtmdHA6Ly9mdHAudW5pY29kZS5vcmcvfS4KKzQuMS4wIHdoaWNoIGlzIHB1YmxpY2x5IGF2YWlsYWJsZSBmcm9tIFx1cmx7ZnRwOi8vZnRwLnVuaWNvZGUub3JnL30uCiAKIFRoZSBtb2R1bGUgdXNlcyB0aGUgc2FtZSBuYW1lcyBhbmQgc3ltYm9scyBhcyBkZWZpbmVkIGJ5IHRoZQogVW5pY29kZURhdGEgRmlsZSBGb3JtYXQgNC4xLjAgKHNlZQotXHVybHtodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy80LjEtVXBkYXRlL1VuaWNvZGVEYXRhLTQuMS4wLmh0bWx9KS4gIEl0CitcdXJse2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzQuMS4wL3VjZC9VQ0QuaHRtbH0pLiAgSXQKIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIFxiZWdpbntmdW5jZGVzY317bG9va3VwfXtuYW1lfQpAQCAtMTA4LDcgKzEwOCw3IEBACiBOb3JtYWwgZm9ybSBDIChORkMpIGZpcnN0IGFwcGxpZXMgYSBjYW5vbmljYWwgZGVjb21wb3NpdGlvbiwgdGhlbgogY29tcG9zZXMgcHJlLWNvbWJpbmVkIGNoYXJhY3RlcnMgYWdhaW4uCiAKLUluIGFkZGl0aW9uIHRvIHRoZXNlIHR3byBmb3JtcywgdGhlcmUgdHdvIGFkZGl0aW9uYWwgbm9ybWFsIGZvcm1zCitJbiBhZGRpdGlvbiB0byB0aGVzZSB0d28gZm9ybXMsIHRoZXJlIGFyZSB0d28gYWRkaXRpb25hbCBub3JtYWwgZm9ybXMKIGJhc2VkIG9uIGNvbXBhdGliaWxpdHkgZXF1aXZhbGVuY2UuIEluIFVuaWNvZGUsIGNlcnRhaW4gY2hhcmFjdGVycyBhcmUKIHN1cHBvcnRlZCB3aGljaCBub3JtYWxseSB3b3VsZCBiZSB1bmlmaWVkIHdpdGggb3RoZXIgY2hhcmFjdGVycy4gRm9yCiBleGFtcGxlLCBVKzIxNjAgKFJPTUFOIE5VTUVSQUwgT05FKSBpcyByZWFsbHkgdGhlIHNhbWUgdGhpbmcgYXMgVSswMDQ5CkBAIC0xMzksMyArMTM5LDIyIEBACiAKIFx2ZXJzaW9uYWRkZWR7Mi41fQogXGVuZHtkYXRhZGVzY30KKworRXhhbXBsZXM6CisKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiB1bmljb2RlZGF0YS5sb29rdXAoJ0xFRlQgQ1VSTFkgQlJBQ0tFVCcpCit1J3snCis+Pj4gdW5pY29kZWRhdGEubmFtZSh1Jy8nKQorJ1NPTElEVVMnCis+Pj4gdW5pY29kZWRhdGEuZGVjaW1hbCh1JzknKQorOQorPj4+IHVuaWNvZGVkYXRhLmRlY2ltYWwodSdhJykKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPworVmFsdWVFcnJvcjogbm90IGEgZGVjaW1hbAorPj4+IHVuaWNvZGVkYXRhLmNhdGVnb3J5KHUnQScpICAjICdMJ2V0dGVyLCAndSdwcGVyY2FzZQorJ0x1JyAgIAorPj4+IHVuaWNvZGVkYXRhLmJpZGlyZWN0aW9uYWwodSdcdTA2NjAnKSAjICdBJ3JhYmljLCAnTid1bWJlcgorJ0FOJworXGVuZHt2ZXJiYXRpbX0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlidW5pdHRlc3QudGV4IGIvRG9jL2xpYi9saWJ1bml0dGVzdC50ZXgKaW5kZXggNTFiMzIxZS4uZjQwNDkzZCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ1bml0dGVzdC50ZXgKKysrIGIvRG9jL2xpYi9saWJ1bml0dGVzdC50ZXgKQEAgLTEwLDE5ICsxMCwxOSBAQAogCiBcdmVyc2lvbmFkZGVkezIuMX0KIAotVGhlIFB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLCBvZnRlbiByZWZlcnJlZCB0byBhcyBgYFB5VW5pdCwnJyBpcworVGhlIFB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLCBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgYGBQeVVuaXQsJycgaXMKIGEgUHl0aG9uIGxhbmd1YWdlIHZlcnNpb24gb2YgSlVuaXQsIGJ5IEtlbnQgQmVjayBhbmQgRXJpY2ggR2FtbWEuCiBKVW5pdCBpcywgaW4gdHVybiwgYSBKYXZhIHZlcnNpb24gb2YgS2VudCdzIFNtYWxsdGFsayB0ZXN0aW5nCiBmcmFtZXdvcmsuICBFYWNoIGlzIHRoZSBkZSBmYWN0byBzdGFuZGFyZCB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIGZvcgogaXRzIHJlc3BlY3RpdmUgbGFuZ3VhZ2UuCiAKLVB5VW5pdCBzdXBwb3J0cyB0ZXN0IGF1dG9tYXRpb24sIHNoYXJpbmcgb2Ygc2V0dXAgYW5kIHNodXRkb3duIGNvZGUKLWZvciB0ZXN0cywgYWdncmVnYXRpb24gb2YgdGVzdHMgaW50byBjb2xsZWN0aW9ucywgYW5kIGluZGVwZW5kZW5jZSBvZgorXG1vZHVsZXt1bml0dGVzdH0gc3VwcG9ydHMgdGVzdCBhdXRvbWF0aW9uLCBzaGFyaW5nIG9mIHNldHVwIGFuZCBzaHV0ZG93bgorY29kZSBmb3IgdGVzdHMsIGFnZ3JlZ2F0aW9uIG9mIHRlc3RzIGludG8gY29sbGVjdGlvbnMsIGFuZCBpbmRlcGVuZGVuY2Ugb2YKIHRoZSB0ZXN0cyBmcm9tIHRoZSByZXBvcnRpbmcgZnJhbWV3b3JrLiAgVGhlIFxtb2R1bGV7dW5pdHRlc3R9IG1vZHVsZQogcHJvdmlkZXMgY2xhc3NlcyB0aGF0IG1ha2UgaXQgZWFzeSB0byBzdXBwb3J0IHRoZXNlIHF1YWxpdGllcyBmb3IgYQogc2V0IG9mIHRlc3RzLgogCi1UbyBhY2hpZXZlIHRoaXMsIFB5VW5pdCBzdXBwb3J0cyBzb21lIGltcG9ydGFudCBjb25jZXB0czoKK1RvIGFjaGlldmUgdGhpcywgXG1vZHVsZXt1bml0dGVzdH0gc3VwcG9ydHMgc29tZSBpbXBvcnRhbnQgY29uY2VwdHM6CiAKIFxiZWdpbntkZWZpbml0aW9uc30KIFx0ZXJte3Rlc3QgZml4dHVyZX0KQEAgLTMzLDEwICszMyw5IEBACiAKIFx0ZXJte3Rlc3QgY2FzZX0KIEEgXGRmbnt0ZXN0IGNhc2V9IGlzIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRlc3RpbmcuICBJdCBjaGVja3MgZm9yIGEKLXNwZWNpZmljIHJlc3BvbnNlIHRvIGEgcGFydGljdWxhciBzZXQgb2YgaW5wdXRzLiAgUHlVbml0IHByb3ZpZGVzIGEKLWJhc2UgY2xhc3MsIFxjbGFzc3tUZXN0Q2FzZX0sIHdoaWNoIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBuZXcgdGVzdAotY2FzZXMuIFlvdSBtYXkgcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHN1YmNsYXNzCi1mcm9tIFxjbGFzc3tUZXN0Q2FzZX0sIG9mIGNvdXJzZS4KK3NwZWNpZmljIHJlc3BvbnNlIHRvIGEgcGFydGljdWxhciBzZXQgb2YgaW5wdXRzLiAgXG1vZHVsZXt1bml0dGVzdH0KK3Byb3ZpZGVzIGEgYmFzZSBjbGFzcywgXGNsYXNze1Rlc3RDYXNlfSwgd2hpY2ggbWF5IGJlIHVzZWQgdG8gY3JlYXRlCituZXcgdGVzdCBjYXNlcy4KIAogXHRlcm17dGVzdCBzdWl0ZX0KIEEgXGRmbnt0ZXN0IHN1aXRlfSBpcyBhIGNvbGxlY3Rpb24gb2YgdGVzdCBjYXNlcywgdGVzdCBzdWl0ZXMsIG9yCkBAIC01NCw4ICs1Myw4IEBACiBUaGUgdGVzdCBjYXNlIGFuZCB0ZXN0IGZpeHR1cmUgY29uY2VwdHMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIHRoZQogXGNsYXNze1Rlc3RDYXNlfSBhbmQgXGNsYXNze0Z1bmN0aW9uVGVzdENhc2V9IGNsYXNzZXM7IHRoZSBmb3JtZXIKIHNob3VsZCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgbmV3IHRlc3RzLCBhbmQgdGhlIGxhdHRlciBjYW4gYmUgdXNlZCB3aGVuCi1pbnRlZ3JhdGluZyBleGlzdGluZyB0ZXN0IGNvZGUgd2l0aCBhIFB5VW5pdC1kcml2ZW4gZnJhbWV3b3JrLiAgV2hlbgotYnVpbGRpbmcgdGVzdCBmaXh0dXJlcyB1c2luZyBcY2xhc3N7VGVzdENhc2V9LCB0aGUgXG1ldGhvZHtzZXRVcCgpfQoraW50ZWdyYXRpbmcgZXhpc3RpbmcgdGVzdCBjb2RlIHdpdGggYSBcbW9kdWxle3VuaXR0ZXN0fS1kcml2ZW4gZnJhbWV3b3JrLgorV2hlbiBidWlsZGluZyB0ZXN0IGZpeHR1cmVzIHVzaW5nIFxjbGFzc3tUZXN0Q2FzZX0sIHRoZSBcbWV0aG9ke3NldFVwKCl9CiBhbmQgXG1ldGhvZHt0ZWFyRG93bigpfSBtZXRob2RzIGNhbiBiZSBvdmVycmlkZGVuIHRvIHByb3ZpZGUKIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIGZvciB0aGUgZml4dHVyZS4gIFdpdGgKIFxjbGFzc3tGdW5jdGlvblRlc3RDYXNlfSwgZXhpc3RpbmcgZnVuY3Rpb25zIGNhbiBiZSBwYXNzZWQgdG8gdGhlCkBAIC03NCwxOSArNzMsMTcgQEAKIEEgdGVzdCBydW5uZXIgaXMgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgYSBzaW5nbGUgbWV0aG9kLAogXG1ldGhvZHtydW4oKX0sIHdoaWNoIGFjY2VwdHMgYSBcY2xhc3N7VGVzdENhc2V9IG9yIFxjbGFzc3tUZXN0U3VpdGV9CiBvYmplY3QgYXMgYSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgcmVzdWx0IG9iamVjdC4gIFRoZSBjbGFzcwotXGNsYXNze1Rlc3RSZXN1bHR9IGlzIHByb3ZpZGVkIGZvciB1c2UgYXMgdGhlIHJlc3VsdCBvYmplY3QuICBQeVVuaXQKLXByb3ZpZGUgdGhlIFxjbGFzc3tUZXh0VGVzdFJ1bm5lcn0gYXMgYW4gZXhhbXBsZSB0ZXN0IHJ1bm5lciB3aGljaAotcmVwb3J0cyB0ZXN0IHJlc3VsdHMgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBieSBkZWZhdWx0LgotQWx0ZXJuYXRlIHJ1bm5lcnMgY2FuIGJlIGltcGxlbWVudGVkIGZvciBvdGhlciBlbnZpcm9ubWVudHMgKHN1Y2ggYXMKLWdyYXBoaWNhbCBlbnZpcm9ubWVudHMpIHdpdGhvdXQgYW55IG5lZWQgdG8gZGVyaXZlIGZyb20gYSBzcGVjaWZpYwotY2xhc3MuCitcY2xhc3N7VGVzdFJlc3VsdH0gaXMgcHJvdmlkZWQgZm9yIHVzZSBhcyB0aGUgcmVzdWx0IG9iamVjdC4KK1xtb2R1bGV7dW5pdHRlc3R9IHByb3ZpZGVzIHRoZSBcY2xhc3N7VGV4dFRlc3RSdW5uZXJ9IGFzIGFuIGV4YW1wbGUKK3Rlc3QgcnVubmVyIHdoaWNoIHJlcG9ydHMgdGVzdCByZXN1bHRzIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gYnkKK2RlZmF1bHQuICBBbHRlcm5hdGUgcnVubmVycyBjYW4gYmUgaW1wbGVtZW50ZWQgZm9yIG90aGVyIGVudmlyb25tZW50cworKHN1Y2ggYXMgZ3JhcGhpY2FsIGVudmlyb25tZW50cykgd2l0aG91dCBhbnkgbmVlZCB0byBkZXJpdmUgZnJvbSBhCitzcGVjaWZpYyBjbGFzcy4KIAogCiBcYmVnaW57c2VlYWxzb30KICAgXHNlZW1vZHVsZXtkb2N0ZXN0fXtBbm90aGVyIHRlc3Qtc3VwcG9ydCBtb2R1bGUgd2l0aCBhIHZlcnkKICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgZmxhdm9yLn0KLSAgXHNlZXRpdGxlW2h0dHA6Ly9weXVuaXQuc291cmNlZm9yZ2UubmV0L117UHlVbml0IFdlYiBTaXRlfXtUaGUKLSAgICAgICAgICAgIHNvdXJjZSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiBQeVVuaXQufQogICBcc2VldGl0bGVbaHR0cDovL3d3dy5YUHJvZ3JhbW1pbmcuY29tL3Rlc3RmcmFtLmh0bV17U2ltcGxlIFNtYWxsdGFsawogICAgICAgICAgICAgVGVzdGluZzogV2l0aCBQYXR0ZXJuc317S2VudCBCZWNrJ3Mgb3JpZ2luYWwgcGFwZXIgb24KICAgICAgICAgICAgIHRlc3RpbmcgZnJhbWV3b3JrcyB1c2luZyB0aGUgcGF0dGVybiBzaGFyZWQgYnkKQEAgLTE2Niw3ICsxNjMsNyBAQAogd2l0aDoKIAogXGJlZ2lue3ZlcmJhdGltfQotc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoVGVzdFNlcXVlbmNlRnVuY3Rpb25zKQorc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RTZXF1ZW5jZUZ1bmN0aW9ucykKIHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKS5ydW4oc3VpdGUpCiBcZW5ke3ZlcmJhdGltfQogCkBAIC0xOTQsOCArMTkxLDggQEAKIAogVGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBvZiB1bml0IHRlc3RpbmcgYXJlIFxkZm57dGVzdCBjYXNlc30gLS0tCiBzaW5nbGUgc2NlbmFyaW9zIHRoYXQgbXVzdCBiZSBzZXQgdXAgYW5kIGNoZWNrZWQgZm9yIGNvcnJlY3RuZXNzLiAgSW4KLVB5VW5pdCwgdGVzdCBjYXNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgaW5zdGFuY2VzIG9mIHRoZQotXGNsYXNze1Rlc3RDYXNlfSBjbGFzcyBpbiB0aGUgXHJlZm1vZHVsZXt1bml0dGVzdH0gbW9kdWxlLiBUbyBtYWtlCitcbW9kdWxle3VuaXR0ZXN0fSwgdGVzdCBjYXNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgaW5zdGFuY2VzIG9mCitcbW9kdWxle3VuaXR0ZXN0fSdzIFxjbGFzc3tUZXN0Q2FzZX0gY2xhc3MuIFRvIG1ha2UKIHlvdXIgb3duIHRlc3QgY2FzZXMgeW91IG11c3Qgd3JpdGUgc3ViY2xhc3NlcyBvZiBcY2xhc3N7VGVzdENhc2V9LCBvcgogdXNlIFxjbGFzc3tGdW5jdGlvblRlc3RDYXNlfS4KIApAQCAtMjA3LDcgKzIwNCw3IEBACiBzZWxmIGNvbnRhaW5lZCwgc3VjaCB0aGF0IGl0IGNhbiBiZSBydW4gZWl0aGVyIGluIGlzb2xhdGlvbiBvciBpbgogYXJiaXRyYXJ5IGNvbWJpbmF0aW9uIHdpdGggYW55IG51bWJlciBvZiBvdGhlciB0ZXN0IGNhc2VzLgogCi1UaGUgc2ltcGxlc3QgdGVzdCBjYXNlIHN1YmNsYXNzIHdpbGwgc2ltcGx5IG92ZXJyaWRlIHRoZQorVGhlIHNpbXBsZXN0IFxjbGFzc3tUZXN0Q2FzZX0gc3ViY2xhc3Mgd2lsbCBzaW1wbHkgb3ZlcnJpZGUgdGhlCiBcbWV0aG9ke3J1blRlc3QoKX0gbWV0aG9kIGluIG9yZGVyIHRvIHBlcmZvcm0gc3BlY2lmaWMgdGVzdGluZyBjb2RlOgogCiBcYmVnaW57dmVyYmF0aW19CkBAIC0yMjEsMTIgKzIxOCwxMyBAQAogCiBOb3RlIHRoYXQgaW4gb3JkZXIgdG8gdGVzdCBzb21ldGhpbmcsIHdlIHVzZSB0aGUgb25lIG9mIHRoZQogXG1ldGhvZHthc3NlcnQqKCl9IG9yIFxtZXRob2R7ZmFpbCooKX0gbWV0aG9kcyBwcm92aWRlZCBieSB0aGUKLVxjbGFzc3tUZXN0Q2FzZX0gYmFzZSBjbGFzcy4gIElmIHRoZSB0ZXN0IGZhaWxzIHdoZW4gdGhlIHRlc3QgY2FzZQotcnVucywgYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLCBhbmQgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIHdpbGwKLWlkZW50aWZ5IHRoZSB0ZXN0IGNhc2UgYXMgYSBcZGZue2ZhaWx1cmV9LiAgT3RoZXIgZXhjZXB0aW9ucyB0aGF0IGRvCi1ub3QgYXJpc2UgZnJvbSBjaGVja3MgbWFkZSB0aHJvdWdoIHRoZSBcbWV0aG9ke2Fzc2VydCooKX0gYW5kCi1cbWV0aG9ke2ZhaWwqKCl9IG1ldGhvZHMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGFzCi1cZGZue2Vycm9yc30uCitcY2xhc3N7VGVzdENhc2V9IGJhc2UgY2xhc3MuICBJZiB0aGUgdGVzdCBmYWlscywgYW4gZXhjZXB0aW9uIHdpbGwgYmUKK3JhaXNlZCwgYW5kIFxtb2R1bGV7dW5pdHRlc3R9IHdpbGwgaWRlbnRpZnkgdGhlIHRlc3QgY2FzZSBhcyBhCitcZGZue2ZhaWx1cmV9LiAgQW55IG90aGVyIGV4Y2VwdGlvbnMgd2lsbCBiZSB0cmVhdGVkIGFzIFxkZm57ZXJyb3JzfS4KK1RoaXMgaGVscHMgeW91IGlkZW50aWZ5IHdoZXJlIHRoZSBwcm9ibGVtIGlzOiBcZGZue2ZhaWx1cmVzfSBhcmUgY2F1c2VkIGJ5CitpbmNvcnJlY3QgcmVzdWx0cyAtIGEgNSB3aGVyZSB5b3UgZXhwZWN0ZWQgYSA2LiBcZGZue0Vycm9yc30gYXJlIGNhdXNlZCBieQoraW5jb3JyZWN0IGNvZGUgLSBlLmcuLCBhIFxleGNlcHRpb257VHlwZUVycm9yfSBjYXVzZWQgYnkgYW4gaW5jb3JyZWN0CitmdW5jdGlvbiBjYWxsLgogCiBUaGUgd2F5IHRvIHJ1biBhIHRlc3QgY2FzZSB3aWxsIGJlIGRlc2NyaWJlZCBsYXRlci4gIEZvciBub3csIG5vdGUKIHRoYXQgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHN1Y2ggYSB0ZXN0IGNhc2UsIHdlIGNhbGwgaXRzCkBAIC0yMzcsNyArMjM1LDcgQEAKIFxlbmR7dmVyYmF0aW19CiAKIE5vdywgc3VjaCB0ZXN0IGNhc2VzIGNhbiBiZSBudW1lcm91cywgYW5kIHRoZWlyIHNldC11cCBjYW4gYmUKLXJlcGV0aXRpdmUuICBJbiB0aGUgYWJvdmUgY2FzZSwgY29uc3RydWN0aW5nIGEgYGBXaWRnZXQnJyBpbiBlYWNoIG9mCityZXBldGl0aXZlLiAgSW4gdGhlIGFib3ZlIGNhc2UsIGNvbnN0cnVjdGluZyBhIFxjbGFzc3tXaWRnZXR9IGluIGVhY2ggb2YKIDEwMCBXaWRnZXQgdGVzdCBjYXNlIHN1YmNsYXNzZXMgd291bGQgbWVhbiB1bnNpZ2h0bHkgZHVwbGljYXRpb24uCiAKIEx1Y2tpbHksIHdlIGNhbiBmYWN0b3Igb3V0IHN1Y2ggc2V0LXVwIGNvZGUgYnkgaW1wbGVtZW50aW5nIGEgbWV0aG9kCkBAIC0yODMsNyArMjgxLDcgQEAKIFxlbmR7dmVyYmF0aW19CiAKIElmIFxtZXRob2R7c2V0VXAoKX0gc3VjY2VlZGVkLCB0aGUgXG1ldGhvZHt0ZWFyRG93bigpfSBtZXRob2Qgd2lsbCBiZQotcnVuIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgXG1ldGhvZHtydW5UZXN0KCl9IHN1Y2NlZWRlZC4KK3J1biB3aGV0aGVyIFxtZXRob2R7cnVuVGVzdCgpfSBzdWNjZWVkZWQgb3Igbm90LgogCiBTdWNoIGEgd29ya2luZyBlbnZpcm9ubWVudCBmb3IgdGhlIHRlc3RpbmcgY29kZSBpcyBjYWxsZWQgYQogXGRmbntmaXh0dXJlfS4KQEAgLTI5Miw4ICsyOTAsOCBAQAogd2Ugd291bGQgZW5kIHVwIHN1YmNsYXNzaW5nIFxjbGFzc3tTaW1wbGVXaWRnZXRUZXN0Q2FzZX0gaW50byBtYW55CiBzbWFsbCBvbmUtbWV0aG9kIGNsYXNzZXMgc3VjaCBhcwogXGNsYXNze0RlZmF1bHRXaWRnZXRTaXplVGVzdENhc2V9LiAgVGhpcyBpcyB0aW1lLWNvbnN1bWluZyBhbmQKLWRpc2NvdXJhZ2luZywgc28gaW4gdGhlIHNhbWUgdmVpbiBhcyBKVW5pdCwgUHlVbml0IHByb3ZpZGVzIGEgc2ltcGxlcgotbWVjaGFuaXNtOgorZGlzY291cmFnaW5nLCBzbyBpbiB0aGUgc2FtZSB2ZWluIGFzIEpVbml0LCBcbW9kdWxle3VuaXR0ZXN0fSBwcm92aWRlcworYSBzaW1wbGVyIG1lY2hhbmlzbToKIAogXGJlZ2lue3ZlcmJhdGltfQogaW1wb3J0IHVuaXR0ZXN0CkBAIC0zMjksOSArMzI3LDkgQEAKIFxlbmR7dmVyYmF0aW19CiAKIFRlc3QgY2FzZSBpbnN0YW5jZXMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYWNjb3JkaW5nIHRvIHRoZSBmZWF0dXJlcwotdGhleSB0ZXN0LiAgUHlVbml0IHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciB0aGlzOiB0aGUgXGNsYXNze3Rlc3QKLXN1aXRlfSwgcmVwcmVzZW50ZWQgYnkgdGhlIGNsYXNzIFxjbGFzc3tUZXN0U3VpdGV9IGluIHRoZQotXHJlZm1vZHVsZXt1bml0dGVzdH0gbW9kdWxlOgordGhleSB0ZXN0LiAgXG1vZHVsZXt1bml0dGVzdH0gcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIHRoaXM6IHRoZQorXGRmbnt0ZXN0IHN1aXRlfSwgcmVwcmVzZW50ZWQgYnkgXG1vZHVsZXt1bml0dGVzdH0ncyBcY2xhc3N7VGVzdFN1aXRlfQorY2xhc3M6CiAKIFxiZWdpbnt2ZXJiYXRpbX0KIHdpZGdldFRlc3RTdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCkBAIC0zNTQsMjggKzM1MiwzMCBAQAogb3IgZXZlbjoKIAogXGJlZ2lue3ZlcmJhdGltfQotY2xhc3MgV2lkZ2V0VGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICB1bml0dGVzdC5UZXN0U3VpdGUuX19pbml0X18oc2VsZixtYXAoV2lkZ2V0VGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0ZXN0RGVmYXVsdFNpemUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdFJlc2l6ZSIpKSkKLVxlbmR7dmVyYmF0aW19CitkZWYgc3VpdGUoKToKKyAgICB0ZXN0cyA9IFsidGVzdERlZmF1bHRTaXplIiwgInRlc3RSZXNpemUiXQogCi0oVGhlIGxhdHRlciBpcyBhZG1pdHRlZGx5IG5vdCBmb3IgdGhlIGZhaW50LWhlYXJ0ZWQhKQorICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUobWFwKFdpZGdldFRlc3RDYXNlLCB0ZXN0cykpCitcZW5ke3ZlcmJhdGltfQogCiBTaW5jZSBpdCBpcyBhIGNvbW1vbiBwYXR0ZXJuIHRvIGNyZWF0ZSBhIFxjbGFzc3tUZXN0Q2FzZX0gc3ViY2xhc3MKLXdpdGggbWFueSBzaW1pbGFybHkgbmFtZWQgdGVzdCBmdW5jdGlvbnMsIHRoZXJlIGlzIGEgY29udmVuaWVuY2UKLWZ1bmN0aW9uIGNhbGxlZCBcZnVuY3Rpb257bWFrZVN1aXRlKCl9IHRoYXQgY29uc3RydWN0cyBhIHRlc3Qgc3VpdGUKLXRoYXQgY29tcHJpc2VzIGFsbCBvZiB0aGUgdGVzdCBjYXNlcyBpbiBhIHRlc3QgY2FzZSBjbGFzczoKK3dpdGggbWFueSBzaW1pbGFybHkgbmFtZWQgdGVzdCBmdW5jdGlvbnMsIFxtb2R1bGV7dW5pdHRlc3R9IHByb3ZpZGVzIGEKK1xjbGFzc3tUZXN0TG9hZGVyfSBjbGFzcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGF1dG9tYXRlIHRoZSBwcm9jZXNzIG9mCitjcmVhdGluZyBhIHRlc3Qgc3VpdGUgYW5kIHBvcHVsYXRpbmcgaXQgd2l0aCBpbmRpdmlkdWFsIHRlc3RzLgorRm9yIGV4YW1wbGUsCiAKIFxiZWdpbnt2ZXJiYXRpbX0KLXN1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKFdpZGdldFRlc3RDYXNlKQorc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFdpZGdldFRlc3RDYXNlKQogXGVuZHt2ZXJiYXRpbX0KIAotTm90ZSB0aGF0IHdoZW4gdXNpbmcgdGhlIFxmdW5jdGlvbnttYWtlU3VpdGUoKX0gZnVuY3Rpb24sIHRoZSBvcmRlciBpbgotd2hpY2ggdGhlIHZhcmlvdXMgdGVzdCBjYXNlcyB3aWxsIGJlIHJ1biBieSB0aGUgdGVzdCBzdWl0ZSBpcyB0aGUKLW9yZGVyIGRldGVybWluZWQgYnkgc29ydGluZyB0aGUgdGVzdCBmdW5jdGlvbiBuYW1lcyB1c2luZyB0aGUKLVxmdW5jdGlvbntjbXAoKX0gYnVpbHQtaW4gZnVuY3Rpb24uCit3aWxsIGNyZWF0ZSBhIHRlc3Qgc3VpdGUgdGhhdCB3aWxsIHJ1bgorXGNvZGV7V2lkZ2V0VGVzdENhc2UudGVzdERlZmF1bHRTaXplKCl9IGFuZCBcY29kZXtXaWRnZXRUZXN0Q2FzZS50ZXN0UmVzaXplfS4KK1xjbGFzc3tUZXN0TG9hZGVyfSB1c2VzIHRoZSBcY29kZXsndGVzdCd9IG1ldGhvZCBuYW1lIHByZWZpeCB0byBpZGVudGlmeQordGVzdCBtZXRob2RzIGF1dG9tYXRpY2FsbHkuCisKK05vdGUgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHZhcmlvdXMgdGVzdCBjYXNlcyB3aWxsIGJlIHJ1biBpcworZGV0ZXJtaW5lZCBieSBzb3J0aW5nIHRoZSB0ZXN0IGZ1bmN0aW9uIG5hbWVzIHdpdGggdGhlIGJ1aWx0LWluCitcZnVuY3Rpb257Y21wKCl9IGZ1bmN0aW9uLgogCiBPZnRlbiBpdCBpcyBkZXNpcmFibGUgdG8gZ3JvdXAgc3VpdGVzIG9mIHRlc3QgY2FzZXMgdG9nZXRoZXIsIHNvIGFzIHRvCiBydW4gdGVzdHMgZm9yIHRoZSB3aG9sZSBzeXN0ZW0gYXQgb25jZS4gIFRoaXMgaXMgZWFzeSwgc2luY2UKQEAgLTM4NSwxMyArMzg1LDEzIEBACiBcYmVnaW57dmVyYmF0aW19CiBzdWl0ZTEgPSBtb2R1bGUxLlRoZVRlc3RTdWl0ZSgpCiBzdWl0ZTIgPSBtb2R1bGUyLlRoZVRlc3RTdWl0ZSgpCi1hbGx0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoc3VpdGUxLCBzdWl0ZTIpKQorYWxsdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3N1aXRlMSwgc3VpdGUyXSkKIFxlbmR7dmVyYmF0aW19CiAKIFlvdSBjYW4gcGxhY2UgdGhlIGRlZmluaXRpb25zIG9mIHRlc3QgY2FzZXMgYW5kIHRlc3Qgc3VpdGVzIGluIHRoZQogc2FtZSBtb2R1bGVzIGFzIHRoZSBjb2RlIHRoZXkgYXJlIHRvIHRlc3QgKHN1Y2ggYXMgXGZpbGV7d2lkZ2V0LnB5fSksCiBidXQgdGhlcmUgYXJlIHNldmVyYWwgYWR2YW50YWdlcyB0byBwbGFjaW5nIHRoZSB0ZXN0IGNvZGUgaW4gYQotc2VwYXJhdGUgbW9kdWxlLCBzdWNoIGFzIFxmaWxle3dpZGdldHRlc3RzLnB5fToKK3NlcGFyYXRlIG1vZHVsZSwgc3VjaCBhcyBcZmlsZXt0ZXN0X3dpZGdldC5weX06CiAKIFxiZWdpbntpdGVtaXplfQogICBcaXRlbSBUaGUgdGVzdCBtb2R1bGUgY2FuIGJlIHJ1biBzdGFuZGFsb25lIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KQEAgLTQxMiwxMyArNDEyLDEyIEBACiAgICAgICAgICAgICBcbGFiZWx7bGVnYWN5LXVuaXQtdGVzdHN9fQogCiBTb21lIHVzZXJzIHdpbGwgZmluZCB0aGF0IHRoZXkgaGF2ZSBleGlzdGluZyB0ZXN0IGNvZGUgdGhhdCB0aGV5IHdvdWxkCi1saWtlIHRvIHJ1biBmcm9tIFB5VW5pdCwgd2l0aG91dCBjb252ZXJ0aW5nIGV2ZXJ5IG9sZCB0ZXN0IGZ1bmN0aW9uIHRvCi1hIFxjbGFzc3tUZXN0Q2FzZX0gc3ViY2xhc3MuCitsaWtlIHRvIHJ1biBmcm9tIFxtb2R1bGV7dW5pdHRlc3R9LCB3aXRob3V0IGNvbnZlcnRpbmcgZXZlcnkgb2xkIHRlc3QKK2Z1bmN0aW9uIHRvIGEgXGNsYXNze1Rlc3RDYXNlfSBzdWJjbGFzcy4KIAotRm9yIHRoaXMgcmVhc29uLCBQeVVuaXQgcHJvdmlkZXMgYSBcY2xhc3N7RnVuY3Rpb25UZXN0Q2FzZX0gY2xhc3MuCi1UaGlzIHN1YmNsYXNzIG9mIFxjbGFzc3tUZXN0Q2FzZX0gY2FuIGJlIHVzZWQgdG8gd3JhcCBhbiBleGlzdGluZyB0ZXN0Ci1mdW5jdGlvbi4gIFNldC11cCBhbmQgdGVhci1kb3duIGZ1bmN0aW9ucyBjYW4gYWxzbyBvcHRpb25hbGx5IGJlCi13cmFwcGVkLgorRm9yIHRoaXMgcmVhc29uLCBcbW9kdWxle3VuaXR0ZXN0fSBwcm92aWRlcyBhIFxjbGFzc3tGdW5jdGlvblRlc3RDYXNlfQorY2xhc3MuICBUaGlzIHN1YmNsYXNzIG9mIFxjbGFzc3tUZXN0Q2FzZX0gY2FuIGJlIHVzZWQgdG8gd3JhcCBhbiBleGlzdGluZwordGVzdCBmdW5jdGlvbi4gIFNldC11cCBhbmQgdGVhci1kb3duIGZ1bmN0aW9ucyBjYW4gYWxzbyBiZSBwcm92aWRlZC4KIAogR2l2ZW4gdGhlIGZvbGxvd2luZyB0ZXN0IGZ1bmN0aW9uOgogCkBAIC00MzYsNyArNDM1LDggQEAKIFxlbmR7dmVyYmF0aW19CiAKIElmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIHNldC11cCBhbmQgdGVhci1kb3duIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUKLWNhbGxlZCBhcyBwYXJ0IG9mIHRoZSB0ZXN0IGNhc2UncyBvcGVyYXRpb24sIHRoZXkgY2FuIGFsc28gYmUgcHJvdmlkZWQ6CitjYWxsZWQgYXMgcGFydCBvZiB0aGUgdGVzdCBjYXNlJ3Mgb3BlcmF0aW9uLCB0aGV5IGNhbiBhbHNvIGJlIHByb3ZpZGVkCitsaWtlIHNvOgogCiBcYmVnaW57dmVyYmF0aW19CiB0ZXN0Y2FzZSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdFNvbWV0aGluZywKQEAgLTQ0NCw5ICs0NDQsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWFyRG93bj1kZWxldGVTb21ldGhpbmdEQikKIFxlbmR7dmVyYmF0aW19CiAKLVxub3Rle1B5VW5pdCBzdXBwb3J0cyB0aGUgdXNlIG9mIFxleGNlcHRpb257QXNzZXJ0aW9uRXJyb3J9Ci1hcyBhbiBpbmRpY2F0b3Igb2YgdGVzdCBmYWlsdXJlLCBidXQgZG9lcyBub3QgcmVjb21tZW5kIGl0LiAgRnV0dXJlCi12ZXJzaW9ucyBtYXkgdHJlYXQgXGV4Y2VwdGlvbntBc3NlcnRpb25FcnJvcn0gZGlmZmVyZW50bHkufQorVG8gbWFrZSBtaWdyYXRpbmcgZXhpc3RpbmcgdGVzdCBzdWl0ZXMgZWFzaWVyLCBcbW9kdWxle3VuaXR0ZXN0fQorc3VwcG9ydHMgdGVzdHMgcmFpc2luZyBcZXhjZXB0aW9ue0Fzc2VydGlvbkVycm9yfSB0byBpbmRpY2F0ZSB0ZXN0IGZhaWx1cmUuCitIb3dldmVyLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGhlIGV4cGxpY2l0CitcbWV0aG9ke1Rlc3RDYXNlLmZhaWwqKCl9IGFuZCBcbWV0aG9ke1Rlc3RDYXNlLmFzc2VydCooKX0gbWV0aG9kcyBpbnN0ZWFkLAorYXMgZnV0dXJlIHZlcnNpb25zIG9mIFxtb2R1bGV7dW5pdHRlc3R9IG1heSB0cmVhdCBcZXhjZXB0aW9ue0Fzc2VydGlvbkVycm9yfQorZGlmZmVyZW50bHkuCisKK1xub3Rle0V2ZW4gdGhvdWdoIFxjbGFzc3tGdW5jdGlvblRlc3RDYXNlfSBjYW4gYmUgdXNlZCB0byBxdWlja2x5IGNvbnZlcnQKK2FuIGV4aXN0aW5nIHRlc3QgYmFzZSBvdmVyIHRvIGEgXG1vZHVsZXt1bml0dGVzdH0tYmFzZWQgc3lzdGVtLCB0aGlzCithcHByb2FjaCBpcyBub3QgcmVjb21tZW5kZWQuICBUYWtpbmcgdGhlIHRpbWUgdG8gc2V0IHVwIHByb3BlcgorXGNsYXNze1Rlc3RDYXNlfSBzdWJjbGFzc2VzIHdpbGwgbWFrZSBmdXR1cmUgdGVzdCByZWZhY3RvcmluZ3MgaW5maW5pdGVseQorZWFzaWVyLn0KKwogCiAKIFxzdWJzZWN0aW9ue0NsYXNzZXMgYW5kIGZ1bmN0aW9ucwpAQCAtNDU0LDExICs0NjQsMTIgQEAKIAogXGJlZ2lue2NsYXNzZGVzY317VGVzdENhc2V9e30KICAgSW5zdGFuY2VzIG9mIHRoZSBcY2xhc3N7VGVzdENhc2V9IGNsYXNzIHJlcHJlc2VudCB0aGUgc21hbGxlc3QKLSAgdGVzdGFibGUgdW5pdHMgaW4gYSBzZXQgb2YgdGVzdHMuICBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQKLSAgYXMgYSBiYXNlIGNsYXNzLCB3aXRoIHNwZWNpZmljIHRlc3RzIGJlaW5nIGltcGxlbWVudGVkIGJ5IGNvbmNyZXRlCi0gIHN1YmNsYXNzZXMuICBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGludGVyZmFjZSBuZWVkZWQgYnkgdGhlIHRlc3QKLSAgcnVubmVyIHRvIGFsbG93IGl0IHRvIGRyaXZlIHRoZSB0ZXN0LCBhbmQgbWV0aG9kcyB0aGF0IHRoZSB0ZXN0IGNvZGUKLSAgY2FuIHVzZSB0byBjaGVjayBmb3IgYW5kIHJlcG9ydCB2YXJpb3VzIGtpbmRzIG9mIGZhaWx1cmVzLgorICB0ZXN0YWJsZSB1bml0cyBpbiB0aGUgXG1vZHVsZXt1bml0dGVzdH0gdW5pdmVyc2UuICBUaGlzIGNsYXNzIGlzCisgIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBiYXNlIGNsYXNzLCB3aXRoIHNwZWNpZmljIHRlc3RzIGJlaW5nCisgIGltcGxlbWVudGVkIGJ5IGNvbmNyZXRlIHN1YmNsYXNzZXMuICBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlCisgIGludGVyZmFjZSBuZWVkZWQgYnkgdGhlIHRlc3QgcnVubmVyIHRvIGFsbG93IGl0IHRvIGRyaXZlIHRoZQorICB0ZXN0LCBhbmQgbWV0aG9kcyB0aGF0IHRoZSB0ZXN0IGNvZGUgY2FuIHVzZSB0byBjaGVjayBmb3IgYW5kCisgIHJlcG9ydCB2YXJpb3VzIGtpbmRzIG9mIGZhaWx1cmUuCiBcZW5ke2NsYXNzZGVzY30KIAogXGJlZ2lue2NsYXNzZGVzY317RnVuY3Rpb25UZXN0Q2FzZX17dGVzdEZ1bmNcb3B0aW9uYWx7LApAQCAtNDc0LDMzICs0ODUsMzMgQEAKIFxiZWdpbntjbGFzc2Rlc2N9e1Rlc3RTdWl0ZX17XG9wdGlvbmFse3Rlc3RzfX0KICAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGFnZ3JlZ2F0aW9uIG9mIGluZGl2aWR1YWwgdGVzdHMgY2FzZXMgYW5kCiAgIHRlc3Qgc3VpdGVzLiAgVGhlIGNsYXNzIHByZXNlbnRzIHRoZSBpbnRlcmZhY2UgbmVlZGVkIGJ5IHRoZSB0ZXN0Ci0gIHJ1bm5lciB0byBhbGxvdyBpdCB0byBiZSBydW4gYXMgYW55IG90aGVyIHRlc3QgY2FzZSwgYnV0IGFsbCB0aGUKLSAgY29udGFpbmVkIHRlc3RzIGFuZCB0ZXN0IHN1aXRlcyBhcmUgZXhlY3V0ZWQuICBBZGRpdGlvbmFsIG1ldGhvZHMKLSAgYXJlIHByb3ZpZGVkIHRvIGFkZCB0ZXN0IGNhc2VzIGFuZCBzdWl0ZXMgdG8gdGhlIGFnZ3JlZ2F0aW9uLiAgSWYKLSAgXHZhcnt0ZXN0c30gaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYSBzZXF1ZW5jZSBvZiBpbmRpdmlkdWFsIHRlc3RzIHRoYXQKLSAgd2lsbCBiZSBhZGRlZCB0byB0aGUgc3VpdGUuCisgIHJ1bm5lciB0byBhbGxvdyBpdCB0byBiZSBydW4gYXMgYW55IG90aGVyIHRlc3QgY2FzZS4gIFJ1bm5pbmcgYQorICBcY2xhc3N7VGVzdFN1aXRlfSBpbnN0YW5jZSBpcyB0aGUgc2FtZSBhcyBpdGVyYXRpbmcgb3ZlciB0aGUgc3VpdGUsCisgIHJ1bm5pbmcgZWFjaCB0ZXN0IGluZGl2aWR1YWxseS4KKyAgCisgIElmIFx2YXJ7dGVzdHN9IGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcyBvcgorICBvdGhlciB0ZXN0IHN1aXRlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBidWlsZCB0aGUgc3VpdGUgaW5pdGlhbGx5LgorICBBZGRpdGlvbmFsIG1ldGhvZHMgYXJlIHByb3ZpZGVkIHRvIGFkZCB0ZXN0IGNhc2VzIGFuZCBzdWl0ZXMgdG8gdGhlCisgIGNvbGxlY3Rpb24gbGF0ZXIgb24uCiBcZW5ke2NsYXNzZGVzY30KIAogXGJlZ2lue2NsYXNzZGVzY317VGVzdExvYWRlcn17fQogICBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRlc3RzIGFjY29yZGluZyB0byB2YXJpb3VzCiAgIGNyaXRlcmlhIGFuZCByZXR1cm5pbmcgdGhlbSB3cmFwcGVkIGluIGEgXGNsYXNze1Rlc3RTdWl0ZX0uCiAgIEl0IGNhbiBsb2FkIGFsbCB0ZXN0cyB3aXRoaW4gYSBnaXZlbiBtb2R1bGUgb3IgXGNsYXNze1Rlc3RDYXNlfQotICBjbGFzcy4gIFdoZW4gbG9hZGluZyBmcm9tIGEgbW9kdWxlLCBpdCBjb25zaWRlcnMgYWxsCi0gIFxjbGFzc3tUZXN0Q2FzZX0tZGVyaXZlZCBjbGFzc2VzLiAgRm9yIGVhY2ggc3VjaCBjbGFzcywgaXQgY3JlYXRlcwotICBhbiBpbnN0YW5jZSBmb3IgZWFjaCBtZXRob2Qgd2l0aCBhIG5hbWUgYmVnaW5uaW5nIHdpdGggdGhlIHN0cmluZwotICBcc2FtcHt0ZXN0fS4KKyAgc3ViY2xhc3MuCiBcZW5ke2NsYXNzZGVzY30KIAogXGJlZ2lue2RhdGFkZXNjfXtkZWZhdWx0VGVzdExvYWRlcn0KLSAgSW5zdGFuY2Ugb2YgdGhlIFxjbGFzc3tUZXN0TG9hZGVyfSBjbGFzcyB3aGljaCBjYW4gYmUgc2hhcmVkLiAgSWYgbm8KKyAgSW5zdGFuY2Ugb2YgdGhlIFxjbGFzc3tUZXN0TG9hZGVyfSBjbGFzcyBpbnRlbmRlZCB0byBiZSBzaGFyZWQuICBJZiBubwogICBjdXN0b21pemF0aW9uIG9mIHRoZSBcY2xhc3N7VGVzdExvYWRlcn0gaXMgbmVlZGVkLCB0aGlzIGluc3RhbmNlIGNhbgotICBhbHdheXMgYmUgdXNlZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMuCisgIGJlIHVzZWQgaW5zdGVhZCBvZiByZXBlYXRlZGx5IGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMuCiBcZW5ke2RhdGFkZXNjfQogCiBcYmVnaW57Y2xhc3NkZXNjfXtUZXh0VGVzdFJ1bm5lcn17XG9wdGlvbmFse3N0cmVhbVxvcHRpb25hbHssCiAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbnNcb3B0aW9uYWx7LCB2ZXJib3NpdHl9fX19CiAgIEEgYmFzaWMgdGVzdCBydW5uZXIgaW1wbGVtZW50YXRpb24gd2hpY2ggcHJpbnRzIHJlc3VsdHMgb24gc3RhbmRhcmQKLSAgb3V0cHV0LiAgSXQgaGFzIGEgZmV3IGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzLCBidXQgaXMgZXNzZW50aWFsbHkKKyAgZXJyb3IuICBJdCBoYXMgYSBmZXcgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMsIGJ1dCBpcyBlc3NlbnRpYWxseQogICB2ZXJ5IHNpbXBsZS4gIEdyYXBoaWNhbCBhcHBsaWNhdGlvbnMgd2hpY2ggcnVuIHRlc3Qgc3VpdGVzIHNob3VsZAogICBwcm92aWRlIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbnMuCiBcZW5ke2NsYXNzZGVzY30KQEAgLTUxMCw3ICs1MjEsOCBAQAogICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyXG9wdGlvbmFseywgdGVzdFJ1bm5lcn19fX19fQogICBBIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKICAgZm9yIG1ha2luZyB0ZXN0IG1vZHVsZXMgY29udmVuaWVudGx5IGV4ZWN1dGFibGUuICBUaGUgc2ltcGxlc3QgdXNlCi0gIGZvciB0aGlzIGZ1bmN0aW9uIGlzOgorICBmb3IgdGhpcyBmdW5jdGlvbiBpcyB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbGluZSBhdCB0aGUgZW5kIG9mIGEKKyAgdGVzdCBzY3JpcHQ6CiAKIFxiZWdpbnt2ZXJiYXRpbX0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CkBAIC01MTgsMTAgKzUzMCwxMSBAQAogXGVuZHt2ZXJiYXRpbX0KIFxlbmR7ZnVuY2Rlc2N9CiAKLUluIHNvbWUgY2FzZXMsIHRoZSBleGlzdGluZyB0ZXN0cyBtYXkgaGF2ZSBiZSB3cml0dGVuIHVzaW5nIHRoZQorSW4gc29tZSBjYXNlcywgdGhlIGV4aXN0aW5nIHRlc3RzIG1heSBoYXZlIGJlZW4gd3JpdHRlbiB1c2luZyB0aGUKIFxyZWZtb2R1bGV7ZG9jdGVzdH0gbW9kdWxlLiAgSWYgc28sIHRoYXQgbW9kdWxlIHByb3ZpZGVzIGEgCiBcY2xhc3N7RG9jVGVzdFN1aXRlfSBjbGFzcyB0aGF0IGNhbiBhdXRvbWF0aWNhbGx5IGJ1aWxkCi1cY2xhc3N7dW5pdHRlc3QuVGVzdFN1aXRlfSBpbnN0YW5jZXMgZnJvbSB0aGUgZXhpc3RpbmcgdGVzdCBjb2RlLgorXGNsYXNze3VuaXR0ZXN0LlRlc3RTdWl0ZX0gaW5zdGFuY2VzIGZyb20gdGhlIGV4aXN0aW5nCitcbW9kdWxle2RvY3Rlc3R9LWJhc2VkIHRlc3RzLgogXHZlcnNpb25hZGRlZHsyLjN9CiAKIApAQCAtNTM4LDcgKzU1MSw3IEBACiBjaGVjayBjb25kaXRpb25zIGFuZCByZXBvcnQgZmFpbHVyZXMsIGFuZCBzb21lIGlucXVpcnkgbWV0aG9kcwogYWxsb3dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlc3QgaXRzZWxmIHRvIGJlIGdhdGhlcmVkLgogCi1NZXRob2RzIGluIHRoZSBmaXJzdCBncm91cCBhcmU6CitNZXRob2RzIGluIHRoZSBmaXJzdCBncm91cCAocnVubmluZyB0aGUgdGVzdCkgYXJlOgogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdENhc2Vde3NldFVwfXt9CiAgIE1ldGhvZCBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgdGVzdCBmaXh0dXJlLiAgVGhpcyBpcyBjYWxsZWQKQEAgLTU2Miw4ICs1NzUsMTAgQEAKICAgUnVuIHRoZSB0ZXN0LCBjb2xsZWN0aW5nIHRoZSByZXN1bHQgaW50byB0aGUgdGVzdCByZXN1bHQgb2JqZWN0CiAgIHBhc3NlZCBhcyBcdmFye3Jlc3VsdH0uICBJZiBcdmFye3Jlc3VsdH0gaXMgb21pdHRlZCBvciBcY29uc3RhbnR7Tm9uZX0sCiAgIGEgdGVtcG9yYXJ5IHJlc3VsdCBvYmplY3QgaXMgY3JlYXRlZCBhbmQgdXNlZCwgYnV0IGlzIG5vdCBtYWRlCi0gIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNpbXBseSBjYWxsaW5nIHRoZQotICBcY2xhc3N7VGVzdENhc2V9IGluc3RhbmNlLgorICBhdmFpbGFibGUgdG8gdGhlIGNhbGxlci4KKyAgCisgIFRoZSBzYW1lIGVmZmVjdCBtYXkgYmUgaGFkIGJ5IHNpbXBseSBjYWxsaW5nIHRoZSBcY2xhc3N7VGVzdENhc2V9CisgIGluc3RhbmNlLgogXGVuZHttZXRob2RkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdENhc2Vde2RlYnVnfXt9CkBAIC02NjQsMTAgKzY3OSw4IEBACiBpbmZvcm1hdGlvbiBvbiB0aGUgdGVzdDoKIAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RDYXNlXXtjb3VudFRlc3RDYXNlc317fQotICBSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4gIEZvcgotICBcY2xhc3N7VGVzdENhc2V9IGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSBcY29kZXsxfSwgYnV0IHRoaXMKLSAgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFxjbGFzc3tUZXN0U3VpdGV9IGNsYXNzLCB3aGljaCBjYW4KLSAgcmV0dXJuIGxhcmdlciB2YWx1ZXMuCisgIFJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoaXMgdGVzdCBvYmplY3QuICBGb3IKKyAgXGNsYXNze1Rlc3RDYXNlfSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgXGNvZGV7MX0uCiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfVtUZXN0Q2FzZV17ZGVmYXVsdFRlc3RSZXN1bHR9e30KQEAgLTY3OCw3ICs2OTEsNyBAQAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RDYXNlXXtpZH17fQogICBSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4gIFRoaXMgaXMgdXN1YWxseQogICB0aGUgZnVsbCBuYW1lIG9mIHRoZSB0ZXN0IG1ldGhvZCwgaW5jbHVkaW5nIHRoZSBtb2R1bGUgYW5kIGNsYXNzCi0gIG5hbWVzLgorICBuYW1lLgogXGVuZHttZXRob2RkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdENhc2Vde3Nob3J0RGVzY3JpcHRpb259e30KQEAgLTY5NCwyMSArNzA3LDIzIEBACiAKIFxjbGFzc3tUZXN0U3VpdGV9IG9iamVjdHMgYmVoYXZlIG11Y2ggbGlrZSBcY2xhc3N7VGVzdENhc2V9IG9iamVjdHMsCiBleGNlcHQgdGhleSBkbyBub3QgYWN0dWFsbHkgaW1wbGVtZW50IGEgdGVzdC4gIEluc3RlYWQsIHRoZXkgYXJlIHVzZWQKLXRvIGFnZ3JlZ2F0ZSB0ZXN0cyBpbnRvIGdyb3VwcyB0aGF0IHNob3VsZCBiZSBydW4gdG9nZXRoZXIuICBTb21lCi1hZGRpdGlvbmFsIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSB0byBhZGQgdGVzdHMgdG8gXGNsYXNze1Rlc3RTdWl0ZX0KK3RvIGFnZ3JlZ2F0ZSB0ZXN0cyBpbnRvIGdyb3VwcyBvZiB0ZXN0cyB0aGF0IHNob3VsZCBiZSBydW4gdG9nZXRoZXIuCitTb21lIGFkZGl0aW9uYWwgbWV0aG9kcyBhcmUgYXZhaWxhYmxlIHRvIGFkZCB0ZXN0cyB0byBcY2xhc3N7VGVzdFN1aXRlfQogaW5zdGFuY2VzOgogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdFN1aXRlXXthZGRUZXN0fXt0ZXN0fQotICBBZGQgYSBcY2xhc3N7VGVzdENhc2V9IG9yIFxjbGFzc3tUZXN0U3VpdGV9IHRvIHRoZSBzZXQgb2YgdGVzdHMgdGhhdAotICBtYWtlIHVwIHRoZSBzdWl0ZS4KKyAgQWRkIGEgXGNsYXNze1Rlc3RDYXNlfSBvciBcY2xhc3N7VGVzdFN1aXRlfSB0byB0aGUgc3VpdGUuCiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfVtUZXN0U3VpdGVde2FkZFRlc3RzfXt0ZXN0c30KLSAgQWRkIGFsbCB0aGUgdGVzdHMgZnJvbSBhIHNlcXVlbmNlIG9mIFxjbGFzc3tUZXN0Q2FzZX0gYW5kCisgIEFkZCBhbGwgdGhlIHRlc3RzIGZyb20gYW4gaXRlcmFibGUgb2YgXGNsYXNze1Rlc3RDYXNlfSBhbmQKICAgXGNsYXNze1Rlc3RTdWl0ZX0gaW5zdGFuY2VzIHRvIHRoaXMgdGVzdCBzdWl0ZS4KKyAgCisgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBpdGVyYXRpbmcgb3ZlciBcdmFye3Rlc3RzfSwgY2FsbGluZworICBcbWV0aG9ke2FkZFRlc3QoKX0gZm9yIGVhY2ggZWxlbWVudC4KIFxlbmR7bWV0aG9kZGVzY30KIAotVGhlIFxtZXRob2R7cnVuKCl9IG1ldGhvZCBpcyBhbHNvIHNsaWdodGx5IGRpZmZlcmVudDoKK1xjbGFzc3tUZXN0U3VpdGV9IHNoYXJlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgd2l0aCBcY2xhc3N7VGVzdENhc2V9OgogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdFN1aXRlXXtydW59e3Jlc3VsdH0KICAgUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8KQEAgLTcxNyw2ICs3MzIsMTcgQEAKICAgcmVzdWx0IG9iamVjdCB0byBiZSBwYXNzZWQgaW4uCiBcZW5ke21ldGhvZGRlc2N9CiAKK1xiZWdpbnttZXRob2RkZXNjfVtUZXN0U3VpdGVde2RlYnVnfXt9CisgIFJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUgd2l0aG91dCBjb2xsZWN0aW5nIHRoZSByZXN1bHQuCisgIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSB0ZXN0IHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNhbGxlcgorICBhbmQgY2FuIGJlIHVzZWQgdG8gc3VwcG9ydCBydW5uaW5nIHRlc3RzIHVuZGVyIGEgZGVidWdnZXIuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtUZXN0U3VpdGVde2NvdW50VGVzdENhc2VzfXt9CisgIFJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoaXMgdGVzdCBvYmplY3QsIGluY2x1ZGluZworICBhbGwgaW5kaXZpZHVhbCB0ZXN0cyBhbmQgc3ViLXN1aXRlcy4KK1xlbmR7bWV0aG9kZGVzY30KKwogSW4gdGhlIHR5cGljYWwgdXNhZ2Ugb2YgYSBcY2xhc3N7VGVzdFN1aXRlfSBvYmplY3QsIHRoZSBcbWV0aG9ke3J1bigpfQogbWV0aG9kIGlzIGludm9rZWQgYnkgYSBcY2xhc3N7VGVzdFJ1bm5lcn0gcmF0aGVyIHRoYW4gYnkgdGhlIGVuZC11c2VyCiB0ZXN0IGhhcm5lc3MuCkBAIC03MjcsNyArNzUzLDcgQEAKIAogQSBcY2xhc3N7VGVzdFJlc3VsdH0gb2JqZWN0IHN0b3JlcyB0aGUgcmVzdWx0cyBvZiBhIHNldCBvZiB0ZXN0cy4gIFRoZQogXGNsYXNze1Rlc3RDYXNlfSBhbmQgXGNsYXNze1Rlc3RTdWl0ZX0gY2xhc3NlcyBlbnN1cmUgdGhhdCByZXN1bHRzIGFyZQotcHJvcGVybHkgc3RvcmVkOyB0ZXN0IGF1dGhvcnMgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgcmVjb3JkaW5nIHRoZQorcHJvcGVybHkgcmVjb3JkZWQ7IHRlc3QgYXV0aG9ycyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCByZWNvcmRpbmcgdGhlCiBvdXRjb21lIG9mIHRlc3RzLgogCiBUZXN0aW5nIGZyYW1ld29ya3MgYnVpbHQgb24gdG9wIG9mIFxyZWZtb2R1bGV7dW5pdHRlc3R9IG1heSB3YW50CkBAIC03NDUsMjggKzc3MSw0MSBAQAogYmUgb2YgaW50ZXJlc3Qgd2hlbiBpbnNwZWN0aW5nIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgYSBzZXQgb2YgdGVzdHM6CiAKIFxiZWdpbnttZW1iZXJkZXNjfVtUZXN0UmVzdWx0XXtlcnJvcnN9Ci0gIEEgbGlzdCBjb250YWluaW5nIHBhaXJzIG9mIFxjbGFzc3tUZXN0Q2FzZX0gaW5zdGFuY2VzIGFuZCB0aGUKLSAgZm9ybWF0dGVkIHRyYWNlYmFja3MgZm9yIHRlc3RzIHdoaWNoIHJhaXNlZCBhbiBleGNlcHRpb24gYnV0IGRpZCBub3QKLSAgc2lnbmFsIGEgdGVzdCBmYWlsdXJlLgorICBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBcY2xhc3N7VGVzdENhc2V9IGluc3RhbmNlcyBhbmQKKyAgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCisgIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgogICBcdmVyc2lvbmNoYW5nZWRbQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZCBvZgogICAgICAgICAgICAgICAgICAgXGZ1bmN0aW9ue3N5cy5leGNfaW5mbygpfSByZXN1bHRzXXsyLjJ9CiBcZW5ke21lbWJlcmRlc2N9CiAKIFxiZWdpbnttZW1iZXJkZXNjfVtUZXN0UmVzdWx0XXtmYWlsdXJlc30KLSAgQSBsaXN0IGNvbnRhaW5pbmcgcGFpcnMgb2YgXGNsYXNze1Rlc3RDYXNlfSBpbnN0YW5jZXMgYW5kIHRoZQotICBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBmb3IgdGVzdHMgd2hpY2ggc2lnbmFsbGVkIGEgZmFpbHVyZSBpbiB0aGUgY29kZQotICB1bmRlciB0ZXN0LgorICBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBcY2xhc3N7VGVzdENhc2V9IGluc3RhbmNlcyBhbmQKKyAgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hlcmUgYSBmYWlsdXJlCisgIHdhcyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgXG1ldGhvZHtUZXN0Q2FzZS5mYWlsKigpfSBvcgorICBcbWV0aG9ke1Rlc3RDYXNlLmFzc2VydCooKX0gbWV0aG9kcy4KICAgXHZlcnNpb25jaGFuZ2VkW0NvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQgb2YKICAgICAgICAgICAgICAgICAgIFxmdW5jdGlvbntzeXMuZXhjX2luZm8oKX0gcmVzdWx0c117Mi4yfQogXGVuZHttZW1iZXJkZXNjfQogCiBcYmVnaW57bWVtYmVyZGVzY31bVGVzdFJlc3VsdF17dGVzdHNSdW59Ci0gIFRoZSBudW1iZXIgb2YgdGVzdHMgd2hpY2ggaGF2ZSBiZWVuIHN0YXJ0ZWQuCisgIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuIHNvIGZhci4KIFxlbmR7bWVtYmVyZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RSZXN1bHRde3dhc1N1Y2Nlc3NmdWx9e30KLSAgUmV0dXJucyB0cnVlIGlmIGFsbCB0ZXN0cyBydW4gc28gZmFyIGhhdmUgcGFzc2VkLCBvdGhlcndpc2UgcmV0dXJucwotICBmYWxzZS4KKyAgUmV0dXJucyBcY29uc3RhbnR7VHJ1ZX0gaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCisgIG90aGVyd2lzZSByZXR1cm5zIFxjb25zdGFudHtGYWxzZX0uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfVtUZXN0UmVzdWx0XXtzdG9wfXt9CisgIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHNldCBvZiB0ZXN0cyBiZWluZyBydW4KKyAgc2hvdWxkIGJlIGFib3J0ZWQgYnkgc2V0dGluZyB0aGUgXGNsYXNze1Rlc3RSZXN1bHR9J3MgXGNvZGV7c2hvdWxkU3RvcH0KKyAgYXR0cmlidXRlIHRvIFxjb25zdGFudHtUcnVlfS4gIFxjbGFzc3tUZXN0UnVubmVyfSBvYmplY3RzIHNob3VsZCByZXNwZWN0CisgIHRoaXMgZmxhZyBhbmQgcmV0dXJuIHdpdGhvdXQgcnVubmluZyBhbnkgYWRkaXRpb25hbCB0ZXN0cy4KKyAgCisgIEZvciBleGFtcGxlLCB0aGlzIGZlYXR1cmUgaXMgdXNlZCBieSB0aGUgXGNsYXNze1RleHRUZXN0UnVubmVyfSBjbGFzcworICB0byBzdG9wIHRoZSB0ZXN0IGZyYW1ld29yayB3aGVuIHRoZSB1c2VyIHNpZ25hbHMgYW4gaW50ZXJydXB0IGZyb20KKyAgdGhlIGtleWJvYXJkLiAgSW50ZXJhY3RpdmUgdG9vbHMgd2hpY2ggcHJvdmlkZSBcY2xhc3N7VGVzdFJ1bm5lcn0KKyAgaW1wbGVtZW50YXRpb25zIGNhbiB1c2UgdGhpcyBpbiBhIHNpbWlsYXIgbWFubmVyLgogXGVuZHttZXRob2RkZXNjfQogCiAKQEAgLTc4NiwxMCArODI1LDkgQEAKIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RSZXN1bHRde2FkZEVycm9yfXt0ZXN0LCBlcnJ9Ci0gIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgXHZhcnt0ZXN0fSByYWlzZXMgYW4gZXhjZXB0aW9uIHdpdGhvdXQKLSAgc2lnbmFsbGluZyBhIHRlc3QgZmFpbHVyZS4gIFx2YXJ7ZXJyfSBpcyBhIHR1cGxlIG9mIHRoZSBmb3JtCi0gIHJldHVybmVkIGJ5IFxmdW5jdGlvbntzeXMuZXhjX2luZm8oKX06ICBcY29kZXsoXHZhcnt0eXBlfSwKLSAgXHZhcnt2YWx1ZX0sIFx2YXJ7dHJhY2ViYWNrfSl9LgorICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIFx2YXJ7dGVzdH0gcmFpc2VzIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uCisgIFx2YXJ7ZXJyfSBpcyBhIHR1cGxlIG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5IFxmdW5jdGlvbntzeXMuZXhjX2luZm8oKX06CisgIFxjb2RleyhcdmFye3R5cGV9LCBcdmFye3ZhbHVlfSwgXHZhcnt0cmFjZWJhY2t9KX0uCiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfVtUZXN0UmVzdWx0XXthZGRGYWlsdXJlfXt0ZXN0LCBlcnJ9CkBAIC04MDAsMjMgKzgzOCwxMCBAQAogXGVuZHttZXRob2RkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdFJlc3VsdF17YWRkU3VjY2Vzc317dGVzdH0KLSAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZvciBhIHRlc3QgdGhhdCBkb2VzIG5vdCBmYWlsOyBcdmFye3Rlc3R9IGlzCi0gIHRoZSB0ZXN0IGNhc2Ugb2JqZWN0LgorICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIFx2YXJ7dGVzdH0gc3VjY2VlZHMuCiBcZW5ke21ldGhvZGRlc2N9CiAKIAotT25lIGFkZGl0aW9uYWwgbWV0aG9kIGlzIGF2YWlsYWJsZSBmb3IgXGNsYXNze1Rlc3RSZXN1bHR9IG9iamVjdHM6Ci0KLVxiZWdpbnttZXRob2RkZXNjfVtUZXN0UmVzdWx0XXtzdG9wfXt9Ci0gIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHNldCBvZiB0ZXN0cyBiZWluZyBydW4KLSAgc2hvdWxkIGJlIGFib3J0ZWQuICBPbmNlIHRoaXMgaGFzIGJlZW4gY2FsbGVkLCB0aGUKLSAgXGNsYXNze1Rlc3RSdW5uZXJ9IG9iamVjdCByZXR1cm4gdG8gaXRzIGNhbGxlciB3aXRob3V0IHJ1bm5pbmcgYW55Ci0gIGFkZGl0aW9uYWwgdGVzdHMuICBUaGlzIGlzIHVzZWQgYnkgdGhlIFxjbGFzc3tUZXh0VGVzdFJ1bm5lcn0gY2xhc3MKLSAgdG8gc3RvcCB0aGUgdGVzdCBmcmFtZXdvcmsgd2hlbiB0aGUgdXNlciBzaWduYWxzIGFuIGludGVycnVwdCBmcm9tCi0gIHRoZSBrZXlib2FyZC4gIEludGVyYWN0aXZlIHRvb2xzIHdoaWNoIHByb3ZpZGUgcnVubmVycyBjYW4gdXNlIHRoaXMKLSAgaW4gYSBzaW1pbGFyIG1hbm5lci4KLVxlbmR7bWV0aG9kZGVzY30KLQogCiBcc3Vic2VjdGlvbntUZXN0TG9hZGVyIE9iamVjdHMKICAgICAgICAgICAgIFxsYWJlbHt0ZXN0bG9hZGVyLW9iamVjdHN9fQpAQCAtODI0LDE1ICs4NDksMTUgQEAKIFRoZSBcY2xhc3N7VGVzdExvYWRlcn0gY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgdGVzdCBzdWl0ZXMgZnJvbQogY2xhc3NlcyBhbmQgbW9kdWxlcy4gIE5vcm1hbGx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZQogb2YgdGhpcyBjbGFzczsgdGhlIFxyZWZtb2R1bGV7dW5pdHRlc3R9IG1vZHVsZSBwcm92aWRlcyBhbiBpbnN0YW5jZQotdGhhdCBjYW4gYmUgc2hhcmVkIGFzIHRoZSBcY29kZXtkZWZhdWx0VGVzdExvYWRlcn0gbW9kdWxlIGF0dHJpYnV0ZS4KLVVzaW5nIGEgc3ViY2xhc3Mgb3IgaW5zdGFuY2Ugd291bGQgYWxsb3cgY3VzdG9taXphdGlvbiBvZiBzb21lCit0aGF0IGNhbiBiZSBzaGFyZWQgYXMgXGNvZGV7dW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXJ9LgorVXNpbmcgYSBzdWJjbGFzcyBvciBpbnN0YW5jZSwgaG93ZXZlciwgYWxsb3dzIGN1c3RvbWl6YXRpb24gb2Ygc29tZQogY29uZmlndXJhYmxlIHByb3BlcnRpZXMuCiAKIFxjbGFzc3tUZXN0TG9hZGVyfSBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdExvYWRlcl17bG9hZFRlc3RzRnJvbVRlc3RDYXNlfXt0ZXN0Q2FzZUNsYXNzfQogICBSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZQotICBcY2xhc3N7VGVzdENhc2V9LWRlcml2ZWQgY2xhc3MgXGNsYXNze3Rlc3RDYXNlQ2xhc3N9LgorICBcY2xhc3N7VGVzdENhc2V9LWRlcml2ZWQgXGNsYXNze3Rlc3RDYXNlQ2xhc3N9LgogXGVuZHttZXRob2RkZXNjfQogCiBcYmVnaW57bWV0aG9kZGVzY31bVGVzdExvYWRlcl17bG9hZFRlc3RzRnJvbU1vZHVsZX17bW9kdWxlfQpAQCAtODQyLDcgKzg2Nyw3IEBACiAgIG1ldGhvZCBkZWZpbmVkIGZvciB0aGUgY2xhc3MuCiAKICAgXHdhcm5pbmd7V2hpbGUgdXNpbmcgYSBoaWVyYXJjaHkgb2YKLSAgXGNsYXNze1Rlc3RjYXNlfS1kZXJpdmVkIGNsYXNzZXMgY2FuIGJlIGNvbnZlbmllbnQgaW4gc2hhcmluZworICBcY2xhc3N7VGVzdENhc2V9LWRlcml2ZWQgY2xhc3NlcyBjYW4gYmUgY29udmVuaWVudCBpbiBzaGFyaW5nCiAgIGZpeHR1cmVzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLCBkZWZpbmluZyB0ZXN0IG1ldGhvZHMgb24gYmFzZSBjbGFzc2VzCiAgIHRoYXQgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkgZG9lcyBub3QgcGxheSB3ZWxsCiAgIHdpdGggdGhpcyBtZXRob2QuICBEb2luZyBzbywgaG93ZXZlciwgY2FuIGJlIHVzZWZ1bCB3aGVuIHRoZQpAQCAtODUzLDIxICs4NzgsMjMgQEAKICAgUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGdpdmVuIGEgc3RyaW5nIHNwZWNpZmllci4KIAogICBUaGUgc3BlY2lmaWVyIFx2YXJ7bmFtZX0gaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZQotICBlaXRoZXIgdG8gYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QKLSAgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFxjbGFzc3tUZXN0Q2FzZX0gb3IKLSAgXGNsYXNze1Rlc3RTdWl0ZX0gaW5zdGFuY2UuICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBtb2R1bGUKLSAgXG1vZHVsZXtTYW1wbGVUZXN0c30gY29udGFpbmluZyBhIFxjbGFzc3tUZXN0Q2FzZX0tZGVyaXZlZCBjbGFzcwotICBcY2xhc3N7U2FtcGxlVGVzdENhc2V9IHdpdGggdGhyZWUgdGVzdCBtZXRob2RzIChcbWV0aG9ke3Rlc3Rfb25lKCl9LAotICBcbWV0aG9ke3Rlc3RfdHdvKCl9LCBhbmQgXG1ldGhvZHt0ZXN0X3RocmVlKCl9KSwgdGhlIHNwZWNpZmllcgotICBcY29kZXsnU2FtcGxlVGVzdHMuU2FtcGxlVGVzdENhc2UnfSB3b3VsZCBjYXVzZSB0aGlzIG1ldGhvZCB0bwotICByZXR1cm4gYSBzdWl0ZSB3aGljaCB3aWxsIHJ1biBhbGwgdGhyZWUgdGVzdCBtZXRob2RzLiAgVXNpbmcgdGhlCi0gIHNwZWNpZmllciBcY29kZXsnU2FtcGxlVGVzdHMuU2FtcGxlVGVzdENhc2UudGVzdF90d28nfSB3b3VsZCBjYXVzZQotICBpdCB0byByZXR1cm4gYSB0ZXN0IHN1aXRlIHdoaWNoIHdpbGwgcnVuIG9ubHkgdGhlCisgIGVpdGhlciB0byBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgXGNsYXNze1Rlc3RTdWl0ZX0gaW5zdGFuY2UsCisgIGEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaAorICByZXR1cm5zIGEgXGNsYXNze1Rlc3RDYXNlfSBvciBcY2xhc3N7VGVzdFN1aXRlfSBpbnN0YW5jZS4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBtb2R1bGUgXG1vZHVsZXtTYW1wbGVUZXN0c30gY29udGFpbmluZyBhCisgIFxjbGFzc3tUZXN0Q2FzZX0tZGVyaXZlZCBjbGFzcyBcY2xhc3N7U2FtcGxlVGVzdENhc2V9IHdpdGggdGhyZWUgdGVzdAorICBtZXRob2RzIChcbWV0aG9ke3Rlc3Rfb25lKCl9LCBcbWV0aG9ke3Rlc3RfdHdvKCl9LCBhbmQKKyAgXG1ldGhvZHt0ZXN0X3RocmVlKCl9KSwgdGhlIHNwZWNpZmllciBcY29kZXsnU2FtcGxlVGVzdHMuU2FtcGxlVGVzdENhc2UnfQorICB3b3VsZCBjYXVzZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gYSBzdWl0ZSB3aGljaCB3aWxsIHJ1biBhbGwgdGhyZWUgdGVzdAorICBtZXRob2RzLiAgVXNpbmcgdGhlIHNwZWNpZmllciBcY29kZXsnU2FtcGxlVGVzdHMuU2FtcGxlVGVzdENhc2UudGVzdF90d28nfQorICB3b3VsZCBjYXVzZSBpdCB0byByZXR1cm4gYSB0ZXN0IHN1aXRlIHdoaWNoIHdpbGwgcnVuIG9ubHkgdGhlCiAgIFxtZXRob2R7dGVzdF90d28oKX0gdGVzdCBtZXRob2QuICBUaGUgc3BlY2lmaWVyIGNhbiByZWZlciB0byBtb2R1bGVzCiAgIGFuZCBwYWNrYWdlcyB3aGljaCBoYXZlIG5vdCBiZWVuIGltcG9ydGVkOyB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgYXMKICAgYSBzaWRlLWVmZmVjdC4KIAotICBUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgXHZhcntuYW1lfSByZWxhdGl2ZSB0byBhIGdpdmVuIG1vZHVsZS4KKyAgVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIFx2YXJ7bmFtZX0gcmVsYXRpdmUgdG8gdGhlIGdpdmVuCisgIFx2YXJ7bW9kdWxlfS4KIFxlbmR7bWV0aG9kZGVzY30KIAogXGJlZ2lue21ldGhvZGRlc2N9W1Rlc3RMb2FkZXJde2xvYWRUZXN0c0Zyb21OYW1lc317bmFtZXNcb3B0aW9uYWx7LCBtb2R1bGV9fQpAQCAtODg4LDE3ICs5MTUsMjIgQEAKIFxiZWdpbnttZW1iZXJkZXNjfVtUZXN0TG9hZGVyXXt0ZXN0TWV0aG9kUHJlZml4fQogICBTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQKICAgYXMgdGVzdCBtZXRob2RzLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXGNvZGV7J3Rlc3QnfS4KKyAgCisgIFRoaXMgYWZmZWN0cyBcbWV0aG9ke2dldFRlc3RDYXNlTmFtZXMoKX0gYW5kIGFsbCB0aGUKKyAgXG1ldGhvZHtsb2FkVGVzdHNGcm9tKigpfSBtZXRob2RzLgogXGVuZHttZW1iZXJkZXNjfQogCiBcYmVnaW57bWVtYmVyZGVzY31bVGVzdExvYWRlcl17c29ydFRlc3RNZXRob2RzVXNpbmd9CiAgIEZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgXG1ldGhvZHtnZXRUZXN0Q2FzZU5hbWVzKCl9LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGJ1aWx0LWluCi0gIFxmdW5jdGlvbntjbXAoKX0gZnVuY3Rpb247IGl0IGNhbiBiZSBzZXQgdG8gXGNvbnN0YW50e05vbmV9IHRvIGRpc2FibGUKLSAgdGhlIHNvcnQuCisgIFxtZXRob2R7Z2V0VGVzdENhc2VOYW1lcygpfSBhbmQgYWxsIHRoZSBcbWV0aG9ke2xvYWRUZXN0c0Zyb20qKCl9IG1ldGhvZHMuCisgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBidWlsdC1pbiBcZnVuY3Rpb257Y21wKCl9IGZ1bmN0aW9uOyB0aGUgYXR0cmlidXRlCisgIGNhbiBhbHNvIGJlIHNldCB0byBcY29uc3RhbnR7Tm9uZX0gdG8gZGlzYWJsZSB0aGUgc29ydC4KIFxlbmR7bWVtYmVyZGVzY30KIAogXGJlZ2lue21lbWJlcmRlc2N9W1Rlc3RMb2FkZXJde3N1aXRlQ2xhc3N9CiAgIENhbGxhYmxlIG9iamVjdCB0aGF0IGNvbnN0cnVjdHMgYSB0ZXN0IHN1aXRlIGZyb20gYSBsaXN0IG9mIHRlc3RzLgogICBObyBtZXRob2RzIG9uIHRoZSByZXN1bHRpbmcgb2JqZWN0IGFyZSBuZWVkZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcwogICB0aGUgXGNsYXNze1Rlc3RTdWl0ZX0gY2xhc3MuCisgIAorICBUaGlzIGFmZmVjdHMgYWxsIHRoZSBcbWV0aG9ke2xvYWRUZXN0c0Zyb20qKCl9IG1ldGhvZHMuCiBcZW5ke21lbWJlcmRlc2N9CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYnVybGxpYi50ZXggYi9Eb2MvbGliL2xpYnVybGxpYi50ZXgKaW5kZXggMGE4NGMxYS4uNzVlZTMxMCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ1cmxsaWIudGV4CisrKyBiL0RvYy9saWIvbGlidXJsbGliLnRleApAQCAtMjcwLDEwICsyNzAsMTAgQEAKIGVudmlyb25tZW50YWwgcHJveHkgc2V0dGluZ3Mgd2lsbCBiZSB1c2VkIGlmIHByZXNlbnQsIGFzIGRpc2N1c3NlZCBpbgogdGhlIGRlZmluaXRpb24gb2YgXGZ1bmN0aW9ue3VybG9wZW4oKX0sIGFib3ZlLgogCi1BZGRpdGlvbmFsIGtleXdvcmQgcGFyYW1ldGVycywgY29sbGVjdGVkIGluIFx2YXJ7eDUwOX0sIGFyZSB1c2VkIGZvcgotYXV0aGVudGljYXRpb24gd2l0aCB0aGUgXGZpbGV7aHR0cHM6fSBzY2hlbWUuICBUaGUga2V5d29yZHMKLVx2YXJ7a2V5X2ZpbGV9IGFuZCBcdmFye2NlcnRfZmlsZX0gYXJlIHN1cHBvcnRlZDsgYm90aCBhcmUgbmVlZGVkIHRvCi1hY3R1YWxseSByZXRyaWV2ZSBhIHJlc291cmNlIGF0IGFuIFxmaWxle2h0dHBzOn0gVVJMLgorQWRkaXRpb25hbCBrZXl3b3JkIHBhcmFtZXRlcnMsIGNvbGxlY3RlZCBpbiBcdmFye3g1MDl9LCBtYXkgYmUgdXNlZCBmb3IKK2F1dGhlbnRpY2F0aW9uIG9mIHRoZSBjbGllbnQgd2hlbiB1c2luZyB0aGUgXGZpbGV7aHR0cHM6fSBzY2hlbWUuICBUaGUga2V5d29yZHMKK1x2YXJ7a2V5X2ZpbGV9IGFuZCBcdmFye2NlcnRfZmlsZX0gYXJlIHN1cHBvcnRlZCB0byBwcm92aWRlIGFuIAorU1NMIGtleSBhbmQgY2VydGlmaWNhdGU7IGJvdGggYXJlIG5lZWRlZCB0byBzdXBwb3J0IGNsaWVudCBhdXRoZW50aWNhdGlvbi4KIAogXGNsYXNze1VSTG9wZW5lcn0gb2JqZWN0cyB3aWxsIHJhaXNlIGFuIFxleGNlcHRpb257SU9FcnJvcn0gZXhjZXB0aW9uCiBpZiB0aGUgc2VydmVyIHJldHVybnMgYW4gZXJyb3IgY29kZS4KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlidXJsbGliMi50ZXggYi9Eb2MvbGliL2xpYnVybGxpYjIudGV4CmluZGV4IGY0MzUxYzMuLjU0MmE3YjggMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlidXJsbGliMi50ZXgKKysrIGIvRG9jL2xpYi9saWJ1cmxsaWIyLnRleApAQCAtMTksNyArMTksOCBAQAogb2JqZWN0LgogCiBcdmFye2RhdGF9IG1heSBiZSBhIHN0cmluZyBzcGVjaWZ5aW5nIGFkZGl0aW9uYWwgZGF0YSB0byBzZW5kIHRvIHRoZQotc2VydmVyLiBDdXJyZW50bHkgSFRUUCByZXF1ZXN0cyBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IHVzZSBcdmFye2RhdGF9Oworc2VydmVyLCBvciBcY29kZXtOb25lfSBpZiBubyBzdWNoIGRhdGEgaXMgbmVlZGVkLiAKK0N1cnJlbnRseSBIVFRQIHJlcXVlc3RzIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgdXNlIFx2YXJ7ZGF0YX07CiB0aGUgSFRUUCByZXF1ZXN0IHdpbGwgYmUgYSBQT1NUIGluc3RlYWQgb2YgYSBHRVQgd2hlbiB0aGUgXHZhcntkYXRhfQogcGFyYW1ldGVyIGlzIHByb3ZpZGVkLiAgXHZhcntkYXRhfSBzaG91bGQgYmUgYSBidWZmZXIgaW4gdGhlIHN0YW5kYXJkCiBcbWltZXR5cGV7YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkfSBmb3JtYXQuICBUaGUKQEAgLTk3LDggKzk4LDE3IEBACiAgICAgXG9wdGlvbmFseywgb3JpZ2luX3JlcV9ob3N0fVxvcHRpb25hbHssIHVudmVyaWZpYWJsZX19CiBUaGlzIGNsYXNzIGlzIGFuIGFic3RyYWN0aW9uIG9mIGEgVVJMIHJlcXVlc3QuCiAKLVx2YXJ7dXJsfSBzaG91bGQgYmUgYSBzdHJpbmcgd2hpY2ggaXMgYSB2YWxpZCBVUkwuICBGb3IgYSBkZXNjcmlwdGlvbgotb2YgXHZhcntkYXRhfSBzZWUgdGhlIFxtZXRob2R7YWRkX2RhdGEoKX0gZGVzY3JpcHRpb24uCitcdmFye3VybH0gc2hvdWxkIGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB2YWxpZCBVUkwuICAKKworXHZhcntkYXRhfSBtYXkgYmUgYSBzdHJpbmcgc3BlY2lmeWluZyBhZGRpdGlvbmFsIGRhdGEgdG8gc2VuZCB0byB0aGUKK3NlcnZlciwgb3IgXGNvZGV7Tm9uZX0gaWYgbm8gc3VjaCBkYXRhIGlzIG5lZWRlZC4gCitDdXJyZW50bHkgSFRUUCByZXF1ZXN0cyBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IHVzZSBcdmFye2RhdGF9OwordGhlIEhUVFAgcmVxdWVzdCB3aWxsIGJlIGEgUE9TVCBpbnN0ZWFkIG9mIGEgR0VUIHdoZW4gdGhlIFx2YXJ7ZGF0YX0KK3BhcmFtZXRlciBpcyBwcm92aWRlZC4gIFx2YXJ7ZGF0YX0gc2hvdWxkIGJlIGEgYnVmZmVyIGluIHRoZSBzdGFuZGFyZAorXG1pbWV0eXBle2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZH0gZm9ybWF0LiAgVGhlCitcZnVuY3Rpb257dXJsbGliLnVybGVuY29kZSgpfSBmdW5jdGlvbiB0YWtlcyBhIG1hcHBpbmcgb3Igc2VxdWVuY2Ugb2YKKzItdHVwbGVzIGFuZCByZXR1cm5zIGEgc3RyaW5nIGluIHRoaXMgZm9ybWF0LgorCiBcdmFye2hlYWRlcnN9IHNob3VsZCBiZSBhIGRpY3Rpb25hcnksIGFuZCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYKIFxtZXRob2R7YWRkX2hlYWRlcigpfSB3YXMgY2FsbGVkIHdpdGggZWFjaCBrZXkgYW5kIHZhbHVlIGFzIGFyZ3VtZW50cy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJ1dWlkLnRleCBiL0RvYy9saWIvbGlidXVpZC50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkNTI5NQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWIvbGlidXVpZC50ZXgKQEAgLTAsMCArMSwyMzQgQEAKK1xzZWN0aW9ue1xtb2R1bGV7dXVpZH0gLS0tCisgICAgICAgICBVVUlEIG9iamVjdHMgYWNjb3JkaW5nIHRvIFJGQyA0MTIyfQorXGRlY2xhcmVtb2R1bGV7YnVpbHRpbn17dXVpZH0KK1xtb2R1bGVzeW5vcHNpc3tVVUlEIG9iamVjdHMgKHVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVycykgYWNjb3JkaW5nIHRvIFJGQyA0MTIyfQorXG1vZHVsZWF1dGhvcntLYS1QaW5nIFllZX17cGluZ0B6ZXN0eS5jYX0KK1xzZWN0aW9uYXV0aG9ye0dlb3JnZSBZb3NoaWRhfXtxdWl2ZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0fQorCitcdmVyc2lvbmFkZGVkezIuNX0KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW1tdXRhYmxlIFxjbGFzc3tVVUlEfSBvYmplY3RzICh0aGUgXGNsYXNze1VVSUR9IGNsYXNzKQorYW5kIHRoZSBmdW5jdGlvbnMgXGZ1bmN0aW9ue3V1aWQxKCl9LCBcZnVuY3Rpb257dXVpZDMoKX0sCitcZnVuY3Rpb257dXVpZDQoKX0sIFxmdW5jdGlvbnt1dWlkNSgpfSBmb3IgZ2VuZXJhdGluZyB2ZXJzaW9uIDEsIDMsIDQsCithbmQgNSBVVUlEcyBhcyBzcGVjaWZpZWQgaW4gXHJmY3s0MTIyfS4KKworSWYgYWxsIHlvdSB3YW50IGlzIGEgdW5pcXVlIElELCB5b3Ugc2hvdWxkIHByb2JhYmx5IGNhbGwKK1xmdW5jdGlvbnt1dWlkMSgpfSBvciBcZnVuY3Rpb257dXVpZDQoKX0uICBOb3RlIHRoYXQgXGZ1bmN0aW9ue3V1aWQxKCl9CittYXkgY29tcHJvbWlzZSBwcml2YWN5IHNpbmNlIGl0IGNyZWF0ZXMgYSBVVUlEIGNvbnRhaW5pbmcgdGhlIGNvbXB1dGVyJ3MKK25ldHdvcmsgYWRkcmVzcy4gIFxmdW5jdGlvbnt1dWlkNCgpfSBjcmVhdGVzIGEgcmFuZG9tIFVVSUQuCisKK1xiZWdpbntjbGFzc2Rlc2N9e1VVSUR9e1xvcHRpb25hbHtoZXhcb3B0aW9uYWx7LCBieXRlc1xvcHRpb25hbHssCitmaWVsZHNcb3B0aW9uYWx7LCBpbnRcb3B0aW9uYWx7LCB2ZXJzaW9ufX19fX19CisKKyVJbnN0YW5jZXMgb2YgdGhlIFVVSUQgY2xhc3MgcmVwcmVzZW50IFVVSURzIGFzIHNwZWNpZmllZCBpbiBSRkMgNDEyMi4KKyVVVUlEIG9iamVjdHMgYXJlIGltbXV0YWJsZSwgaGFzaGFibGUsIGFuZCB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLgorJUNvbnZlcnRpbmcgYSBVVUlEIHRvIGEgc3RyaW5nIHdpdGggc3RyKCkgeWllbGRzIHNvbWV0aGluZyBpbiB0aGUgZm9ybQorJScxMjM0NTY3OC0xMjM0LTEyMzQtMTIzNC0xMjM0NTY3ODlhYmMnLiAgVGhlIFVVSUQgY29uc3RydWN0b3IgYWNjZXB0cworJWZvdXIgcG9zc2libGUgZm9ybXM6IGEgc2ltaWxhciBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLCBvciBhCislc3RyaW5nIG9mIDE2IHJhdyBieXRlcyBhcyBhbiBhcmd1bWVudCBuYW1lZCAnYnl0ZXMnLCBvciBhIHR1cGxlIG9mCislc2l4IGludGVnZXIgZmllbGRzICh3aXRoIDMyLWJpdCwgMTYtYml0LCAxNi1iaXQsIDgtYml0LCA4LWJpdCwgYW5kCislNDgtYml0IHZhbHVlcyByZXNwZWN0aXZlbHkpIGFzIGFuIGFyZ3VtZW50IG5hbWVkICdmaWVsZHMnLCBvciBhIHNpbmdsZQorJTEyOC1iaXQgaW50ZWdlciBhcyBhbiBhcmd1bWVudCBuYW1lZCAnaW50Jy4KKworQ3JlYXRlIGEgVVVJRCBmcm9tIGVpdGhlciBhIHN0cmluZyBvZiAzMiBoZXhhZGVjaW1hbCBkaWdpdHMsCithIHN0cmluZyBvZiAxNiBieXRlcyBhcyB0aGUgXHZhcntieXRlc30gYXJndW1lbnQsIGEgdHVwbGUgb2Ygc2l4CitpbnRlZ2VycyAoMzItYml0IFx2YXJ7dGltZV9sb3d9LCAxNi1iaXQgXHZhcnt0aW1lX21pZH0sCisxNi1iaXQgXHZhcnt0aW1lX2hpX3ZlcnNpb259LAorOC1iaXQgXHZhcntjbG9ja19zZXFfaGlfdmFyaWFudH0sIDgtYml0IFx2YXJ7Y2xvY2tfc2VxX2xvd30sIDQ4LWJpdCBcdmFye25vZGV9KQorYXMgdGhlIFx2YXJ7ZmllbGRzfSBhcmd1bWVudCwgb3IgYSBzaW5nbGUgMTI4LWJpdCBpbnRlZ2VyIGFzIHRoZSBcdmFye2ludH0KK2FyZ3VtZW50LiAgV2hlbiBhIHN0cmluZyBvZiBoZXggZGlnaXRzIGlzIGdpdmVuLCBjdXJseSBicmFjZXMsCitoeXBoZW5zLCBhbmQgYSBVUk4gcHJlZml4IGFyZSBhbGwgb3B0aW9uYWwuICBGb3IgZXhhbXBsZSwgdGhlc2UKK2V4cHJlc3Npb25zIGFsbCB5aWVsZCB0aGUgc2FtZSBVVUlEOgorCitcYmVnaW57dmVyYmF0aW19CitVVUlEKCd7MTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4fScpCitVVUlEKCcxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2NzgxMjM0NTY3OCcpCitVVUlEKCd1cm46dXVpZDoxMjM0NTY3OC0xMjM0LTU2NzgtMTIzNC01Njc4MTIzNDU2NzgnKQorVVVJRChieXRlcz0nXHgxMlx4MzRceDU2XHg3OCcqNCkKK1VVSUQoZmllbGRzPSgweDEyMzQ1Njc4LCAweDEyMzQsIDB4NTY3OCwgMHgxMiwgMHgzNCwgMHg1Njc4MTIzNDU2NzgpKQorVVVJRChpbnQ9MHgxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2NzgxMjM0NTY3OCkKK1xlbmR7dmVyYmF0aW19CisKK0V4YWN0bHkgb25lIG9mIFx2YXJ7aGV4fSwgXHZhcntieXRlc30sIFx2YXJ7ZmllbGRzfSwgb3IgXHZhcntpbnR9IG11c3QKK2JlIGdpdmVuLiAgVGhlIFx2YXJ7dmVyc2lvbn0gYXJndW1lbnQgaXMgb3B0aW9uYWw7IGlmIGdpdmVuLCB0aGUKK3Jlc3VsdGluZyBVVUlEIHdpbGwgaGF2ZSBpdHMgdmFyaWFudCBhbmQgdmVyc2lvbiBudW1iZXIgc2V0IGFjY29yZGluZyB0bworUkZDIDQxMjIsIG92ZXJyaWRpbmcgYml0cyBpbiB0aGUgZ2l2ZW4gXHZhcntoZXh9LCBcdmFye2J5dGVzfSwKK1x2YXJ7ZmllbGRzfSwgb3IgXHZhcntpbnR9LgorCitcZW5ke2NsYXNzZGVzY30KKworXGNsYXNze1VVSUR9IGluc3RhbmNlcyBoYXZlIHRoZXNlIHJlYWQtb25seSBhdHRyaWJ1dGVzOgorCitcYmVnaW57bWVtYmVyZGVzY317Ynl0ZXN9CitUaGUgVVVJRCBhcyBhIDE2LWJ5dGUgc3RyaW5nLgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317ZmllbGRzfQorQSB0dXBsZSBvZiB0aGUgc2l4IGludGVnZXIgZmllbGRzIG9mIHRoZSBVVUlELCB3aGljaCBhcmUgYWxzbyBhdmFpbGFibGUKK2FzIHNpeCBpbmRpdmlkdWFsIGF0dHJpYnV0ZXMgYW5kIHR3byBkZXJpdmVkIGF0dHJpYnV0ZXM6CisKK1xiZWdpbnt0YWJsZWlpfXtsfGx9e21lbWJlcn17RmllbGR9e01lYW5pbmd9CisgIFxsaW5laWl7dGltZV9sb3d9e3RoZSBmaXJzdCAzMiBiaXRzIG9mIHRoZSBVVUlEfQorICBcbGluZWlpe3RpbWVfbWlkfXt0aGUgbmV4dCAxNiBiaXRzIG9mIHRoZSBVVUlEfQorICBcbGluZWlpe3RpbWVfaGlfdmVyc2lvbn17dGhlIG5leHQgMTYgYml0cyBvZiB0aGUgVVVJRH0KKyAgXGxpbmVpaXtjbG9ja19zZXFfaGlfdmFyaWFudH17dGhlIG5leHQgOCBiaXRzIG9mIHRoZSBVVUlEfQorICBcbGluZWlpe2Nsb2NrX3NlcV9sb3d9e3RoZSBuZXh0IDggYml0cyBvZiB0aGUgVVVJRH0KKyAgXGxpbmVpaXtub2RlfXt0aGUgbGFzdCA0OCBiaXRzIG9mIHRoZSBVVUlEfQorICBcbGluZWlpe3RpbWV9e3RoZSA2MC1iaXQgdGltZXN0YW1wfQorICBcbGluZWlpe2Nsb2NrX3NlcX17dGhlIDE0LWJpdCBzZXF1ZW5jZSBudW1iZXJ9CitcZW5ke3RhYmxlaWl9CisKKworXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317aGV4fQorVGhlIFVVSUQgYXMgYSAzMi1jaGFyYWN0ZXIgaGV4YWRlY2ltYWwgc3RyaW5nLgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317aW50fQorVGhlIFVVSUQgYXMgYSAxMjgtYml0IGludGVnZXIuCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfXt1cm59CitUaGUgVVVJRCBhcyBhIFVSTiBhcyBzcGVjaWZpZWQgaW4gUkZDIDQxMjIuCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfXt2YXJpYW50fQorVGhlIFVVSUQgdmFyaWFudCwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgaW50ZXJuYWwgbGF5b3V0IG9mIHRoZSBVVUlELgorVGhpcyB3aWxsIGJlIGFuIGludGVnZXIgZXF1YWwgdG8gb25lIG9mIHRoZSBjb25zdGFudHMKK1xjb25zdGFudHtSRVNFUlZFRF9OQ1N9LAorXGNvbnN0YW50e1JGQ180MTIyfSwgXGNvbnN0YW50e1JFU0VSVkVEX01JQ1JPU09GVH0sIG9yCitcY29uc3RhbnR7UkVTRVJWRURfRlVUVVJFfSkuCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfXt2ZXJzaW9ufQorVGhlIFVVSUQgdmVyc2lvbiBudW1iZXIgKDEgdGhyb3VnaCA1LCBtZWFuaW5nZnVsIG9ubHkKK3doZW4gdGhlIHZhcmlhbnQgaXMgXGNvbnN0YW50e1JGQ180MTIyfSkuCitcZW5ke21lbWJlcmRlc2N9CisKK1RoZSBcbW9kdWxle3V1aWR9IG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zCisKK1xiZWdpbntmdW5jZGVzY317Z2V0bm9kZX17fQorR2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGFzIGEgNDgtYml0IHBvc2l0aXZlIGludGVnZXIuICBUaGUgZmlyc3QgdGltZSB0aGlzCitydW5zLCBpdCBtYXkgbGF1bmNoIGEgc2VwYXJhdGUgcHJvZ3JhbSwgd2hpY2ggY291bGQgYmUgcXVpdGUgc2xvdy4gIElmIGFsbAorYXR0ZW1wdHMgdG8gb2J0YWluIHRoZSBoYXJkd2FyZSBhZGRyZXNzIGZhaWwsIHdlIGNob29zZSBhIHJhbmRvbSA0OC1iaXQKK251bWJlciB3aXRoIGl0cyBlaWdodGggYml0IHNldCB0byAxIGFzIHJlY29tbWVuZGVkIGluIFJGQyA0MTIyLiAgIkhhcmR3YXJlCithZGRyZXNzIiBtZWFucyB0aGUgTUFDIGFkZHJlc3Mgb2YgYSBuZXR3b3JrIGludGVyZmFjZSwgYW5kIG9uIGEgbWFjaGluZQord2l0aCBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMgdGhlIE1BQyBhZGRyZXNzIG9mIGFueSBvbmUgb2YgdGhlbSBtYXkKK2JlIHJldHVybmVkLgorXGVuZHtmdW5jZGVzY30KK1xpbmRleHtnZXRub2RlfQorCitcYmVnaW57ZnVuY2Rlc2N9e3V1aWQxfXtcb3B0aW9uYWx7bm9kZVxvcHRpb25hbHssIGNsb2NrX3NlcX19fQorR2VuZXJhdGUgYSBVVUlEIGZyb20gYSBob3N0IElELCBzZXF1ZW5jZSBudW1iZXIsIGFuZCB0aGUgY3VycmVudCB0aW1lLgorSWYgXHZhcntub2RlfSBpcyBub3QgZ2l2ZW4sIFxmdW5jdGlvbntnZXRub2RlKCl9IGlzIHVzZWQgdG8gb2J0YWluIHRoZQoraGFyZHdhcmUgYWRkcmVzcy4KK0lmIFx2YXJ7Y2xvY2tfc2VxfSBpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcyB0aGUgc2VxdWVuY2UgbnVtYmVyOworb3RoZXJ3aXNlIGEgcmFuZG9tIDE0LWJpdCBzZXF1ZW5jZSBudW1iZXIgaXMgY2hvc2VuLgorXGVuZHtmdW5jZGVzY30KK1xpbmRleHt1dWlkMX0KKworXGJlZ2lue2Z1bmNkZXNjfXt1dWlkM317bmFtZXNwYWNlLCBuYW1lfQorR2VuZXJhdGUgYSBVVUlEIGJhc2VkIHVwb24gYSBNRDUgaGFzaCBvZiB0aGUgXHZhcntuYW1lfSBzdHJpbmcgdmFsdWUKK2RyYXduIGZyb20gYSBzcGVjaWZpZWQgbmFtZXNwYWNlLiAgIFx2YXJ7bmFtZXNwYWNlfQorbXVzdCBiZSBvbmUgb2YgXGNvbnN0YW50e05BTUVTUEFDRV9ETlN9LAorXGNvbnN0YW50e05BTUVTUEFDRV9VUkx9LCBcY29uc3RhbnR7TkFNRVNQQUNFX09JRH0sCitvciBcY29uc3RhbnR7TkFNRVNQQUNFX1g1MDB9LgorXGVuZHtmdW5jZGVzY30KK1xpbmRleHt1dWlkM30KKworXGJlZ2lue2Z1bmNkZXNjfXt1dWlkNH17fQorR2VuZXJhdGUgYSByYW5kb20gVVVJRC4KK1xlbmR7ZnVuY2Rlc2N9CitcaW5kZXh7dXVpZDR9CisKK1xiZWdpbntmdW5jZGVzY317dXVpZDV9e25hbWVzcGFjZSwgbmFtZX0KK0dlbmVyYXRlIGEgVVVJRCBiYXNlZCB1cG9uIGEgU0hBLTEgaGFzaCBvZiB0aGUgXHZhcntuYW1lfSBzdHJpbmcgdmFsdWUKK2RyYXduIGZyb20gYSBzcGVjaWZpZWQgbmFtZXNwYWNlLiAgIFx2YXJ7bmFtZXNwYWNlfQorbXVzdCBiZSBvbmUgb2YgXGNvbnN0YW50e05BTUVTUEFDRV9ETlN9LAorXGNvbnN0YW50e05BTUVTUEFDRV9VUkx9LCBcY29uc3RhbnR7TkFNRVNQQUNFX09JRH0sCitvciBcY29uc3RhbnR7TkFNRVNQQUNFX1g1MDB9LgorXGVuZHtmdW5jZGVzY30KK1xpbmRleHt1dWlkNX0KKworVGhlIFxtb2R1bGV7dXVpZH0gbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBuYW1lc3BhY2UgY29uc3RhbnRzCitmb3IgdXNlIHdpdGggXGZ1bmN0aW9ue3V1aWQzKCl9IG9yIFxmdW5jdGlvbnt1dWlkNSgpfS4KKworXGJlZ2lue2RhdGFkZXNjfXtOQU1FU1BBQ0VfRE5TfQorRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIG5hbWVzcGFjZSBVVUlELgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtOQU1FU1BBQ0VfVVJMfQorVVJMIG5hbWVzcGFjZSBVVUlELgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtOQU1FU1BBQ0VfT0lEfQorSVNPIE9JRCBuYW1lc3BhY2UgVVVJRC4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntkYXRhZGVzY317TkFNRVNQQUNFX1g1MDB9CitYLjUwMCBETiBuYW1lc3BhY2UgVVVJRC4KK1xlbmR7ZGF0YWRlc2N9CisKK1RoZSBcbW9kdWxle3V1aWR9IG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzCitmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgXG1lbWJlcnt2YXJpYW50fSBhdHRyaWJ1dGU6CisKK1xiZWdpbntkYXRhZGVzY317UkVTRVJWRURfTkNTfQorUmVzZXJ2ZWQgZm9yIE5DUyBjb21wYXRpYmlsaXR5LgorXGVuZHtkYXRhZGVzY30KKworXGJlZ2lue2RhdGFkZXNjfXtSRkNfNDEyMn0KK1VzZXMgVVVJRCBsYXlvdXQgc3BlY2lmaWVkIGluIFxyZmN7NDEyMn0uCitcZW5ke2RhdGFkZXNjfQorCitcYmVnaW57ZGF0YWRlc2N9e1JFU0VSVkVEX01JQ1JPU09GVH0KK1Jlc2VydmVkIGZvciBNaWNyb3NvZnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KK1xlbmR7ZGF0YWRlc2N9CisKK1xiZWdpbntkYXRhZGVzY317UkVTRVJWRURfRlVUVVJFfQorUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBkZWZpbml0aW9uLgorXGVuZHtkYXRhZGVzY30KKworCitcYmVnaW57c2VlYWxzb30KKyAgXHNlZXJmY3s0MTIyfXtBIFVuaXZlcnNhbGx5IFVuaXF1ZSBJRGVudGlmaWVyIChVVUlEKSBVUk4gTmFtZXNwYWNlfXsKKyAgICAgICAgICBUaGlzIHNwZWNpZmllcyBhIFVuaWZvcm0gUmVzb3VyY2UgTmFtZSBuYW1lc3BhY2UgZm9yIFVVSURzLn0KK1xlbmR7c2VlYWxzb30KKworXHN1YnNlY3Rpb257RXhhbXBsZSBcbGFiZWx7dXVpZC1leGFtcGxlfX0KKworSGVyZSBpcyBhIHR5cGljYWwgdXNhZ2U6CitcYmVnaW57dmVyYmF0aW19Cis+Pj4gaW1wb3J0IHV1aWQKKworIyBtYWtlIGEgVVVJRCBiYXNlZCBvbiB0aGUgaG9zdCBJRCBhbmQgY3VycmVudCB0aW1lCis+Pj4gdXVpZC51dWlkMSgpCitVVUlEKCdhODA5OGMxYS1mODZlLTExZGEtYmQxYS0wMDExMjQ0NGJlMWUnKQorCisjIG1ha2UgYSBVVUlEIHVzaW5nIGFuIE1ENSBoYXNoIG9mIGEgbmFtZXNwYWNlIFVVSUQgYW5kIGEgbmFtZQorPj4+IHV1aWQudXVpZDModXVpZC5OQU1FU1BBQ0VfRE5TLCAncHl0aG9uLm9yZycpCitVVUlEKCc2ZmE0NTllYS1lZThhLTNjYTQtODk0ZS1kYjc3ZTE2MDM1NWUnKQorCisjIG1ha2UgYSByYW5kb20gVVVJRAorPj4+IHV1aWQudXVpZDQoKQorVVVJRCgnMTZmZDI3MDYtOGJhZi00MzNiLTgyZWItOGM3ZmFkYTg0N2RhJykKKworIyBtYWtlIGEgVVVJRCB1c2luZyBhIFNIQS0xIGhhc2ggb2YgYSBuYW1lc3BhY2UgVVVJRCBhbmQgYSBuYW1lCis+Pj4gdXVpZC51dWlkNSh1dWlkLk5BTUVTUEFDRV9ETlMsICdweXRob24ub3JnJykKK1VVSUQoJzg4NjMxM2UxLTNiOGEtNTM3Mi05YjkwLTBjOWFlZTE5OWU1ZCcpCisKKyMgbWFrZSBhIFVVSUQgZnJvbSBhIHN0cmluZyBvZiBoZXggZGlnaXRzIChicmFjZXMgYW5kIGh5cGhlbnMgaWdub3JlZCkKKz4+PiB4ID0gdXVpZC5VVUlEKCd7MDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMGEwYjBjMGQwZTBmfScpCisKKyMgY29udmVydCBhIFVVSUQgdG8gYSBzdHJpbmcgb2YgaGV4IGRpZ2l0cyBpbiBzdGFuZGFyZCBmb3JtCis+Pj4gc3RyKHgpCisnMDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMGEwYjBjMGQwZTBmJworCisjIGdldCB0aGUgcmF3IDE2IGJ5dGVzIG9mIHRoZSBVVUlECis+Pj4geC5ieXRlcworJ1x4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx0XG5ceDBiXHgwY1xyXHgwZVx4MGYnCisKKyMgbWFrZSBhIFVVSUQgZnJvbSBhIDE2LWJ5dGUgc3RyaW5nCis+Pj4gdXVpZC5VVUlEKGJ5dGVzPXguYnl0ZXMpCitVVUlEKCcwMDAxMDIwMy0wNDA1LTA2MDctMDgwOS0wYTBiMGMwZDBlMGYnKQorXGVuZHt2ZXJiYXRpbX0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlid2FybmluZ3MudGV4IGIvRG9jL2xpYi9saWJ3YXJuaW5ncy50ZXgKaW5kZXggN2I4MjlhMC4uMDhjMDM0MCAxMDA2NDQKLS0tIGEvRG9jL2xpYi9saWJ3YXJuaW5ncy50ZXgKKysrIGIvRG9jL2xpYi9saWJ3YXJuaW5ncy50ZXgKQEAgLTcxLDYgKzcxLDExIEBACiBcbGluZWlpe0Z1dHVyZVdhcm5pbmd9e0Jhc2UgY2F0ZWdvcnkgZm9yIHdhcm5pbmdzIGFib3V0IGNvbnN0cnVjdHMKIHRoYXQgd2lsbCBjaGFuZ2Ugc2VtYW50aWNhbGx5IGluIHRoZSBmdXR1cmUufQogCitcbGluZWlpe1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmd9e0Jhc2UgY2F0ZWdvcnkgZm9yIHdhcm5pbmdzIGFib3V0CitmZWF0dXJlcyB0aGF0IHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlIChpZ25vcmVkIGJ5IGRlZmF1bHQpLn0KKworXGxpbmVpaXtJbXBvcnRXYXJuaW5nfXtCYXNlIGNhdGVnb3J5IGZvciB3YXJuaW5ncyB0cmlnZ2VyZWQgZHVyaW5nIHRoZQorcHJvY2VzcyBvZiBpbXBvcnRpbmcgYSBtb2R1bGUgKGlnbm9yZWQgYnkgZGVmYXVsdCkufQogXGVuZHt0YWJsZWlpfQogCiBXaGlsZSB0aGVzZSBhcmUgdGVjaG5pY2FsbHkgYnVpbHQtaW4gZXhjZXB0aW9ucywgdGhleSBhcmUgZG9jdW1lbnRlZApAQCAtMTQzLDYgKzE0OCwxNyBAQAogaXQgaXMgZmlyc3QgaW1wb3J0ZWQgKGludmFsaWQgb3B0aW9ucyBhcmUgaWdub3JlZCwgYWZ0ZXIgcHJpbnRpbmcgYQogbWVzc2FnZSB0byBcY29kZXtzeXMuc3RkZXJyfSkuCiAKK1RoZSB3YXJuaW5ncyB0aGF0IGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQgbWF5IGJlIGVuYWJsZWQgYnkgcGFzc2luZworIFxwcm9ncmFtb3B0ey1XZH0gdG8gdGhlIGludGVycHJldGVyLiBUaGlzIGVuYWJsZXMgZGVmYXVsdCBoYW5kbGluZworZm9yIGFsbCB3YXJuaW5ncywgaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIG5vcm1hbGx5IGlnbm9yZWQgYnkKK2RlZmF1bHQuIFRoaXMgaXMgcGFydGljdWxhciB1c2VmdWwgZm9yIGVuYWJsaW5nIEltcG9ydFdhcm5pbmcgd2hlbgorZGVidWdnaW5nIHByb2JsZW1zIGltcG9ydGluZyBhIGRldmVsb3BlZCBwYWNrYWdlLiBJbXBvcnRXYXJuaW5nIGNhbgorYWxzbyBiZSBlbmFibGVkIGV4cGxpY2l0bHkgaW4gUHl0aG9uIGNvZGUgdXNpbmc6CisKK1xiZWdpbnt2ZXJiYXRpbX0KKyAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2RlZmF1bHQnLCBJbXBvcnRXYXJuaW5nKQorXGVuZHt2ZXJiYXRpbX0KKwogCiBcc3Vic2VjdGlvbntBdmFpbGFibGUgRnVuY3Rpb25zIFxsYWJlbHt3YXJuaW5nLWZ1bmN0aW9uc319CiAKQEAgLTIwOSwxNCArMjI1LDI2IEBACiBpbnNlcnRlZCBhdCB0aGUgZnJvbnQgYnkgZGVmYXVsdDsgaWYgXHZhcnthcHBlbmR9IGlzIHRydWUsIGl0IGlzCiBpbnNlcnRlZCBhdCB0aGUgZW5kLgogVGhpcyBjaGVja3MgdGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMsIGNvbXBpbGVzIHRoZSBtZXNzYWdlIGFuZAotbW9kdWxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGFuZCBpbnNlcnRzIHRoZW0gYXMgYSB0dXBsZSBpbiBmcm9udAotb2YgdGhlIHdhcm5pbmdzIGZpbHRlci4gIEVudHJpZXMgaW5zZXJ0ZWQgbGF0ZXIgb3ZlcnJpZGUgZW50cmllcwotaW5zZXJ0ZWQgZWFybGllciwgaWYgYm90aCBtYXRjaCBhIHBhcnRpY3VsYXIgd2FybmluZy4gIE9taXR0ZWQKLWFyZ3VtZW50cyBkZWZhdWx0IHRvIGEgdmFsdWUgdGhhdCBtYXRjaGVzIGV2ZXJ5dGhpbmcuCittb2R1bGUgcmVndWxhciBleHByZXNzaW9ucywgYW5kIGluc2VydHMgdGhlbSBhcyBhIHR1cGxlIGluIHRoZSAKK2xpc3Qgb2Ygd2FybmluZ3MgZmlsdGVycy4gIEVudHJpZXMgY2xvc2VyIHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdAorb3ZlcnJpZGUgZW50cmllcyBsYXRlciBpbiB0aGUgbGlzdCwgaWYgYm90aCBtYXRjaCBhIHBhcnRpY3VsYXIKK3dhcm5pbmcuICBPbWl0dGVkIGFyZ3VtZW50cyBkZWZhdWx0IHRvIGEgdmFsdWUgdGhhdCBtYXRjaGVzCitldmVyeXRoaW5nLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtzaW1wbGVmaWx0ZXJ9e2FjdGlvblxvcHRpb25hbHssCisgICAgICAgICAgICAgICAgIGNhdGVnb3J5XG9wdGlvbmFseywKKyAgICAgICAgICAgICAgICAgbGluZW5vXG9wdGlvbmFseywgYXBwZW5kfX19fQorSW5zZXJ0IGEgc2ltcGxlIGVudHJ5IGludG8gdGhlIGxpc3Qgb2Ygd2FybmluZ3MgZmlsdGVycy4gVGhlIG1lYW5pbmcKK29mIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGlzIGFzIGZvciBcZnVuY3Rpb257ZmlsdGVyd2FybmluZ3MoKX0sIGJ1dAorcmVndWxhciBleHByZXNzaW9ucyBhcmUgbm90IG5lZWRlZCBhcyB0aGUgZmlsdGVyIGluc2VydGVkIGFsd2F5cworbWF0Y2hlcyBhbnkgbWVzc2FnZSBpbiBhbnkgbW9kdWxlIGFzIGxvbmcgYXMgdGhlIGNhdGVnb3J5IGFuZCBsaW5lCitudW1iZXIgbWF0Y2guCiBcZW5ke2Z1bmNkZXNjfQogCiBcYmVnaW57ZnVuY2Rlc2N9e3Jlc2V0d2FybmluZ3N9e30KIFJlc2V0IHRoZSB3YXJuaW5ncyBmaWx0ZXIuICBUaGlzIGRpc2NhcmRzIHRoZSBlZmZlY3Qgb2YgYWxsIHByZXZpb3VzCiBjYWxscyB0byBcZnVuY3Rpb257ZmlsdGVyd2FybmluZ3MoKX0sIGluY2x1ZGluZyB0aGF0IG9mIHRoZQotXHByb2dyYW1vcHR7LVd9IGNvbW1hbmQgbGluZSBvcHRpb25zLgorXHByb2dyYW1vcHR7LVd9IGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCBjYWxscyB0bworXGZ1bmN0aW9ue3NpbXBsZWZpbHRlcigpfS4KIFxlbmR7ZnVuY2Rlc2N9CmRpZmYgLS1naXQgYS9Eb2MvbGliL2xpYndlYWtyZWYudGV4IGIvRG9jL2xpYi9saWJ3ZWFrcmVmLnRleAppbmRleCBmYzk0OWU2Li42ZjY3NmEyIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYndlYWtyZWYudGV4CisrKyBiL0RvYy9saWIvbGlid2Vha3JlZi50ZXgKQEAgLTY1LDEwICs2NSwxNCBAQAogb2JqID0gRGljdChyZWQ9MSwgZ3JlZW49MiwgYmx1ZT0zKSAgICMgdGhpcyBvYmplY3QgaXMgd2VhayByZWZlcmVuY2FibGUKIFxlbmR7dmVyYmF0aW19CiAKLUV4dGVuc2lvbiB0eXBlcyBjYW4gZWFzaWx5IGJlIG1hZGUgdG8gc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXM7IHNlZSBzZWN0aW9uCi1ccmVme3dlYWtyZWYtZXh0ZW5zaW9ufSwgYGBXZWFrIFJlZmVyZW5jZXMgaW4gRXh0ZW5zaW9uIFR5cGVzLCcnIGZvciBtb3JlCi1pbmZvcm1hdGlvbi4KLQorRXh0ZW5zaW9uIHR5cGVzIGNhbiBlYXNpbHkgYmUgbWFkZSB0byBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlczsgc2VlCitgYFx1bGlua3tXZWFrIFJlZmVyZW5jZSBTdXBwb3J0fXsuLi9leHQvd2Vha3JlZi1zdXBwb3J0Lmh0bWx9JycgaW4KK1xjaXRldGl0bGVbLi4vZXh0L2V4dC5odG1sXXtFeHRlbmRpbmcgYW5kIEVtYmVkZGluZyB0aGUgUHl0aG9uCitJbnRlcnByZXRlcn0uCislIFRoZSByZWZlcmVuY2VkIHNlY3Rpb24gdXNlZCB0byBhcHBlYXIgaW4gdGhpcyBkb2N1bWVudCB3aXRoIHRoZQorJSBcbGFiZWwgd2Vha3JlZi1leHRlbnNpb24uICBJdCB3b3VsZCBiZSBnb29kIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgYQorJSByZWRpcmVjdCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgSFRNTCBwYWdlICh3ZWFrcmVmLWV4dGVuc2lvbi5odG1sKQorJSBmb3Igb24tbGluZSB2ZXJzaW9ucyBvZiB0aGlzIGRvY3VtZW50LgogCiBcYmVnaW57Y2xhc3NkZXNjfXtyZWZ9e29iamVjdFxvcHRpb25hbHssIGNhbGxiYWNrfX0KICAgUmV0dXJuIGEgd2VhayByZWZlcmVuY2UgdG8gXHZhcntvYmplY3R9LiAgVGhlIG9yaWdpbmFsIG9iamVjdCBjYW4gYmUKQEAgLTMzMCw4MyArMzM0LDMgQEAKIGRlZiBpZDJvYmoob2lkKToKICAgICByZXR1cm4gX2lkMm9ial9kaWN0W29pZF0KIFxlbmR7dmVyYmF0aW19Ci0KLQotXHN1YnNlY3Rpb257V2VhayBSZWZlcmVuY2VzIGluIEV4dGVuc2lvbiBUeXBlcwotICAgICAgICAgICAgXGxhYmVse3dlYWtyZWYtZXh0ZW5zaW9ufX0KLQotT25lIG9mIHRoZSBnb2FscyBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgdG8gYWxsb3cgYW55IHR5cGUgdG8KLXBhcnRpY2lwYXRlIGluIHRoZSB3ZWFrIHJlZmVyZW5jZSBtZWNoYW5pc20gd2l0aG91dCBpbmN1cnJpbmcgdGhlCi1vdmVyaGVhZCBvbiB0aG9zZSBvYmplY3RzIHdoaWNoIGRvIG5vdCBiZW5lZml0IGJ5IHdlYWsgcmVmZXJlbmNpbmcKLShzdWNoIGFzIG51bWJlcnMpLgotCi1Gb3IgYW4gb2JqZWN0IHRvIGJlIHdlYWtseSByZWZlcmVuY2FibGUsIHRoZSBleHRlbnNpb24gbXVzdCBpbmNsdWRlIGEKLVxjdHlwZXtQeU9iamVjdCp9IGZpZWxkIGluIHRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgZm9yIHRoZSB1c2Ugb2YgdGhlCi13ZWFrIHJlZmVyZW5jZSBtZWNoYW5pc207IGl0IG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gXE5VTEx7fSBieSB0aGUKLW9iamVjdCdzIGNvbnN0cnVjdG9yLiAgSXQgbXVzdCBhbHNvIHNldCB0aGUgXG1lbWJlcnt0cF93ZWFrbGlzdG9mZnNldH0KLWZpZWxkIG9mIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgb2JqZWN0IHRvIHRoZSBvZmZzZXQgb2YgdGhlIGZpZWxkLgotQWxzbywgaXQgbmVlZHMgdG8gYWRkIFxjb25zdGFudHtQeV9UUEZMQUdTX0hBVkVfV0VBS1JFRlN9IHRvIHRoZQotdHBfZmxhZ3Mgc2xvdC4gIEZvciBleGFtcGxlLCB0aGUgaW5zdGFuY2UgdHlwZSBpcyBkZWZpbmVkIHdpdGggdGhlCi1mb2xsb3dpbmcgc3RydWN0dXJlOgotCi1cYmVnaW57dmVyYmF0aW19Ci10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfSEVBRAotICAgIFB5Q2xhc3NPYmplY3QgKmluX2NsYXNzOyAgICAgICAvKiBUaGUgY2xhc3Mgb2JqZWN0ICovCi0gICAgUHlPYmplY3QgICAgICAqaW5fZGljdDsgICAgICAgIC8qIEEgZGljdGlvbmFyeSAqLwotICAgIFB5T2JqZWN0ICAgICAgKmluX3dlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwotfSBQeUluc3RhbmNlT2JqZWN0OwotXGVuZHt2ZXJiYXRpbX0KLQotVGhlIHN0YXRpY2FsbHktZGVjbGFyZWQgdHlwZSBvYmplY3QgZm9yIGluc3RhbmNlcyBpcyBkZWZpbmVkIHRoaXMgd2F5OgotCi1cYmVnaW57dmVyYmF0aW19Ci1QeVR5cGVPYmplY3QgUHlJbnN0YW5jZV9UeXBlID0gewotICAgIFB5T2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUpCi0gICAgMCwKLSAgICAibW9kdWxlLmluc3RhbmNlIiwKLQotICAgIC8qIExvdHMgb2Ygc3R1ZmYgb21pdHRlZCBmb3IgYnJldml0eS4uLiAqLwotCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX1dFQUtSRUZTICAgLyogdHBfZmxhZ3MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIG9mZnNldG9mKFB5SW5zdGFuY2VPYmplY3QsIGluX3dlYWtyZWZsaXN0KSwgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KLX07Ci1cZW5ke3ZlcmJhdGltfQotCi1UaGUgdHlwZSBjb25zdHJ1Y3RvciBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSB3ZWFrIHJlZmVyZW5jZQotbGlzdCB0byBcTlVMTDoKLQotXGJlZ2lue3ZlcmJhdGltfQotc3RhdGljIFB5T2JqZWN0ICoKLWluc3RhbmNlX25ldygpIHsKLSAgICAvKiBPdGhlciBpbml0aWFsaXphdGlvbiBzdHVmZiBvbWl0dGVkIGZvciBicmV2aXR5ICovCi0KLSAgICBzZWxmLT5pbl93ZWFrcmVmbGlzdCA9IE5VTEw7Ci0KLSAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7Ci19Ci1cZW5ke3ZlcmJhdGltfQotCi1UaGUgb25seSBmdXJ0aGVyIGFkZGl0aW9uIGlzIHRoYXQgdGhlIGRlc3RydWN0b3IgbmVlZHMgdG8gY2FsbCB0aGUKLXdlYWsgcmVmZXJlbmNlIG1hbmFnZXIgdG8gY2xlYXIgYW55IHdlYWsgcmVmZXJlbmNlcy4gIFRoaXMgc2hvdWxkIGJlCi1kb25lIGJlZm9yZSBhbnkgb3RoZXIgcGFydHMgb2YgdGhlIGRlc3RydWN0aW9uIGhhdmUgb2NjdXJyZWQsIGJ1dCBpcwotb25seSByZXF1aXJlZCBpZiB0aGUgd2VhayByZWZlcmVuY2UgbGlzdCBpcyBub24tXE5VTEw6Ci0KLVxiZWdpbnt2ZXJiYXRpbX0KLXN0YXRpYyB2b2lkCi1pbnN0YW5jZV9kZWFsbG9jKFB5SW5zdGFuY2VPYmplY3QgKmluc3QpCi17Ci0gICAgLyogQWxsb2NhdGUgdGVtcG9yYXJpZXMgaWYgbmVlZGVkLCBidXQgZG8gbm90IGJlZ2luCi0gICAgICAgZGVzdHJ1Y3Rpb24ganVzdCB5ZXQuCi0gICAgICovCi0KLSAgICBpZiAoaW5zdC0+aW5fd2Vha3JlZmxpc3QgIT0gTlVMTCkKLSAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgaW5zdCk7Ci0KLSAgICAvKiBQcm9jZWVkIHdpdGggb2JqZWN0IGRlc3RydWN0aW9uIG5vcm1hbGx5LiAqLwotfQotXGVuZHt2ZXJiYXRpbX0KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlid2ViYnJvd3Nlci50ZXggYi9Eb2MvbGliL2xpYndlYmJyb3dzZXIudGV4CmluZGV4IGU4NmI1NzguLjExZDc3YTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGlid2ViYnJvd3Nlci50ZXgKKysrIGIvRG9jL2xpYi9saWJ3ZWJicm93c2VyLnRleApAQCAtMTM2LDYgKzEzNiwxOCBAQAogT25seSBvbiBNYWNPUyBYIHBsYXRmb3JtLgogXGVuZHtkZXNjcmlwdGlvbn0KIAorSGVyZSBhcmUgc29tZSBzaW1wbGUgZXhhbXBsZXM6CisKK1xiZWdpbnt2ZXJiYXRpbX0KK3VybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcnCisKKyMgT3BlbiBVUkwgaW4gYSBuZXcgdGFiLCBpZiBhIGJyb3dzZXIgd2luZG93IGlzIGFscmVhZHkgb3Blbi4gCit3ZWJicm93c2VyLm9wZW5fbmV3X3RhYih1cmwgKyAnL2RvYycpCisKKyMgT3BlbiBVUkwgaW4gbmV3IHdpbmRvdywgcmFpc2luZyB0aGUgd2luZG93IGlmIHBvc3NpYmxlLgord2ViYnJvd3Nlci5vcGVuX25ldyh1cmwpCitcZW5ke3ZlcmJhdGltfQorCiAKIFxzdWJzZWN0aW9ue0Jyb3dzZXIgQ29udHJvbGxlciBPYmplY3RzIFxsYWJlbHticm93c2VyLWNvbnRyb2xsZXJzfX0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYi9saWJ3c2dpcmVmLnRleCBiL0RvYy9saWIvbGlid3NnaXJlZi50ZXgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGIxMmU5ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWIvbGlid3NnaXJlZi50ZXgKQEAgLTAsMCArMSw3ODEgQEAKK1xzZWN0aW9ue1xtb2R1bGV7d3NnaXJlZn0gLS0tIFdTR0kgVXRpbGl0aWVzIGFuZCBSZWZlcmVuY2UKK0ltcGxlbWVudGF0aW9ufQorXGRlY2xhcmVtb2R1bGV7fXt3c2dpcmVmfQorXG1vZHVsZWF1dGhvcntQaGlsbGlwIEouIEVieX17cGplQHRlbGVjb21tdW5pdHkuY29tfQorXHNlY3Rpb25hdXRob3J7UGhpbGxpcCBKLiBFYnl9e3BqZUB0ZWxlY29tbXVuaXR5LmNvbX0KK1xtb2R1bGVzeW5vcHNpc3tXU0dJIFV0aWxpdGllcyBhbmQgUmVmZXJlbmNlIEltcGxlbWVudGF0aW9ufQorCitcdmVyc2lvbmFkZGVkezIuNX0KKworVGhlIFdlYiBTZXJ2ZXIgR2F0ZXdheSBJbnRlcmZhY2UgKFdTR0kpIGlzIGEgc3RhbmRhcmQgaW50ZXJmYWNlCitiZXR3ZWVuIHdlYiBzZXJ2ZXIgc29mdHdhcmUgYW5kIHdlYiBhcHBsaWNhdGlvbnMgd3JpdHRlbiBpbiBQeXRob24uCitIYXZpbmcgYSBzdGFuZGFyZCBpbnRlcmZhY2UgbWFrZXMgaXQgZWFzeSB0byB1c2UgYW4gYXBwbGljYXRpb24KK3RoYXQgc3VwcG9ydHMgV1NHSSB3aXRoIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB3ZWIgc2VydmVycy4KKworT25seSBhdXRob3JzIG9mIHdlYiBzZXJ2ZXJzIGFuZCBwcm9ncmFtbWluZyBmcmFtZXdvcmtzIG5lZWQgdG8ga25vdworZXZlcnkgZGV0YWlsIGFuZCBjb3JuZXIgY2FzZSBvZiB0aGUgV1NHSSBkZXNpZ24uICBZb3UgZG9uJ3QgbmVlZCB0bwordW5kZXJzdGFuZCBldmVyeSBkZXRhaWwgb2YgV1NHSSBqdXN0IHRvIGluc3RhbGwgYSBXU0dJIGFwcGxpY2F0aW9uIG9yCit0byB3cml0ZSBhIHdlYiBhcHBsaWNhdGlvbiB1c2luZyBhbiBleGlzdGluZyBmcmFtZXdvcmsuCisKK1xtb2R1bGV7d3NnaXJlZn0gaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdTR0kgc3BlY2lmaWNhdGlvbgordGhhdCBjYW4gYmUgdXNlZCB0byBhZGQgV1NHSSBzdXBwb3J0IHRvIGEgd2ViIHNlcnZlciBvciBmcmFtZXdvcmsuICBJdAorcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBtYW5pcHVsYXRpbmcgV1NHSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kCityZXNwb25zZSBoZWFkZXJzLCBiYXNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBXU0dJIHNlcnZlcnMsIGEgZGVtbworSFRUUCBzZXJ2ZXIgdGhhdCBzZXJ2ZXMgV1NHSSBhcHBsaWNhdGlvbnMsIGFuZCBhIHZhbGlkYXRpb24gdG9vbCB0aGF0CitjaGVja3MgV1NHSSBzZXJ2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgZm9yIGNvbmZvcm1hbmNlIHRvIHRoZQorV1NHSSBzcGVjaWZpY2F0aW9uIChccGVwezMzM30pLgorCislIFhYWCBJZiB5b3UncmUganVzdCB0cnlpbmcgdG8gd3JpdGUgYSB3ZWIgYXBwbGljYXRpb24uLi4KKyUgWFhYIHNob3VsZCBjcmVhdGUgYSBVUkwgb24gcHl0aG9uLm9yZyB0byBwb2ludCBwZW9wbGUgdG8uCisKKworCisKKworCisKKworCisKKworCisKKworXHN1YnNlY3Rpb257XG1vZHVsZXt3c2dpcmVmLnV0aWx9IC0tIFdTR0kgZW52aXJvbm1lbnQgdXRpbGl0aWVzfQorXGRlY2xhcmVtb2R1bGV7fXt3c2dpcmVmLnV0aWx9CisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGEgdmFyaWV0eSBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoCitXU0dJIGVudmlyb25tZW50cy4gIEEgV1NHSSBlbnZpcm9ubWVudCBpcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZworSFRUUCByZXF1ZXN0IHZhcmlhYmxlcyBhcyBkZXNjcmliZWQgaW4gXHBlcHszMzN9LiAgQWxsIG9mIHRoZSBmdW5jdGlvbnMKK3Rha2luZyBhbiBcdmFye2Vudmlyb259IHBhcmFtZXRlciBleHBlY3QgYSBXU0dJLWNvbXBsaWFudCBkaWN0aW9uYXJ5IHRvCitiZSBzdXBwbGllZDsgcGxlYXNlIHNlZSBccGVwezMzM30gZm9yIGEgZGV0YWlsZWQgc3BlY2lmaWNhdGlvbi4KKworXGJlZ2lue2Z1bmNkZXNjfXtndWVzc19zY2hlbWV9e2Vudmlyb259CitSZXR1cm4gYSBndWVzcyBmb3Igd2hldGhlciBcY29kZXt3c2dpLnVybF9zY2hlbWV9IHNob3VsZCBiZSBgYGh0dHAnJyBvcgorYGBodHRwcycnLCBieSBjaGVja2luZyBmb3IgYSBcY29kZXtIVFRQU30gZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gdGhlCitcdmFye2Vudmlyb259IGRpY3Rpb25hcnkuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RyaW5nLgorCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB3aGVuIGNyZWF0aW5nIGEgZ2F0ZXdheSB0aGF0IHdyYXBzIENHSSBvciBhCitDR0ktbGlrZSBwcm90b2NvbCBzdWNoIGFzIEZhc3RDR0kuICBUeXBpY2FsbHksIHNlcnZlcnMgcHJvdmlkaW5nIHN1Y2gKK3Byb3RvY29scyB3aWxsIGluY2x1ZGUgYSBcY29kZXtIVFRQU30gdmFyaWFibGUgd2l0aCBhIHZhbHVlIG9mIGBgMScnCitgYHllcycnLCBvciBgYG9uJycgd2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQgdmlhIFNTTC4gIFNvLCB0aGlzCitmdW5jdGlvbiByZXR1cm5zIGBgaHR0cHMnJyBpZiBzdWNoIGEgdmFsdWUgaXMgZm91bmQsIGFuZCBgYGh0dHAnJworb3RoZXJ3aXNlLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtyZXF1ZXN0X3VyaX17ZW52aXJvbiBcb3B0aW9uYWx7LCBpbmNsdWRlX3F1ZXJ5PTF9fQorUmV0dXJuIHRoZSBmdWxsIHJlcXVlc3QgVVJJLCBvcHRpb25hbGx5IGluY2x1ZGluZyB0aGUgcXVlcnkgc3RyaW5nLAordXNpbmcgdGhlIGFsZ29yaXRobSBmb3VuZCBpbiB0aGUgYGBVUkwgUmVjb25zdHJ1Y3Rpb24nJyBzZWN0aW9uIG9mCitccGVwezMzM30uICBJZiBcdmFye2luY2x1ZGVfcXVlcnl9IGlzIGZhbHNlLCB0aGUgcXVlcnkgc3RyaW5nIGlzCitub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBVUkkuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2FwcGxpY2F0aW9uX3VyaX17ZW52aXJvbn0KK1NpbWlsYXIgdG8gXGZ1bmN0aW9ue3JlcXVlc3RfdXJpfSwgZXhjZXB0IHRoYXQgdGhlIFxjb2Rle1BBVEhfSU5GT30gYW5kCitcY29kZXtRVUVSWV9TVFJJTkd9IHZhcmlhYmxlcyBhcmUgaWdub3JlZC4gIFRoZSByZXN1bHQgaXMgdGhlIGJhc2UgVVJJCitvZiB0aGUgYXBwbGljYXRpb24gb2JqZWN0IGFkZHJlc3NlZCBieSB0aGUgcmVxdWVzdC4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317c2hpZnRfcGF0aF9pbmZvfXtlbnZpcm9ufQorU2hpZnQgYSBzaW5nbGUgbmFtZSBmcm9tIFxjb2Rle1BBVEhfSU5GT30gdG8gXGNvZGV7U0NSSVBUX05BTUV9IGFuZAorcmV0dXJuIHRoZSBuYW1lLiAgVGhlIFx2YXJ7ZW52aXJvbn0gZGljdGlvbmFyeSBpcyBcZW1waHttb2RpZmllZH0KK2luLXBsYWNlOyB1c2UgYSBjb3B5IGlmIHlvdSBuZWVkIHRvIGtlZXAgdGhlIG9yaWdpbmFsIFxjb2Rle1BBVEhfSU5GT30KK29yIFxjb2Rle1NDUklQVF9OQU1FfSBpbnRhY3QuCisKK0lmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgcGF0aCBzZWdtZW50cyBpbiBcY29kZXtQQVRIX0lORk99LCBcY29kZXtOb25lfQoraXMgcmV0dXJuZWQuCisKK1R5cGljYWxseSwgdGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcHJvY2VzcyBlYWNoIHBvcnRpb24gb2YgYSByZXF1ZXN0CitVUkkgcGF0aCwgZm9yIGV4YW1wbGUgdG8gdHJlYXQgdGhlIHBhdGggYXMgYSBzZXJpZXMgb2YgZGljdGlvbmFyeSBrZXlzLgorVGhpcyByb3V0aW5lIG1vZGlmaWVzIHRoZSBwYXNzZWQtaW4gZW52aXJvbm1lbnQgdG8gbWFrZSBpdCBzdWl0YWJsZSBmb3IKK2ludm9raW5nIGFub3RoZXIgV1NHSSBhcHBsaWNhdGlvbiB0aGF0IGlzIGxvY2F0ZWQgYXQgdGhlIHRhcmdldCBVUkkuCitGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgYSBXU0dJIGFwcGxpY2F0aW9uIGF0IFxjb2Rley9mb299LCBhbmQgdGhlCityZXF1ZXN0IFVSSSBwYXRoIGlzIFxjb2Rley9mb28vYmFyL2Jhen0sIGFuZCB0aGUgV1NHSSBhcHBsaWNhdGlvbiBhdAorXGNvZGV7L2Zvb30gY2FsbHMgXGZ1bmN0aW9ue3NoaWZ0X3BhdGhfaW5mb30sIGl0IHdpbGwgcmVjZWl2ZSB0aGUgc3RyaW5nCitgYGJhcicnLCBhbmQgdGhlIGVudmlyb25tZW50IHdpbGwgYmUgdXBkYXRlZCB0byBiZSBzdWl0YWJsZSBmb3IgcGFzc2luZwordG8gYSBXU0dJIGFwcGxpY2F0aW9uIGF0IFxjb2Rley9mb28vYmFyfS4gIFRoYXQgaXMsIFxjb2Rle1NDUklQVF9OQU1FfQord2lsbCBjaGFuZ2UgZnJvbSBcY29kZXsvZm9vfSB0byBcY29kZXsvZm9vL2Jhcn0sIGFuZCBcY29kZXtQQVRIX0lORk99Cit3aWxsIGNoYW5nZSBmcm9tIFxjb2Rley9iYXIvYmF6fSB0byBcY29kZXsvYmF6fS4KKworV2hlbiBcY29kZXtQQVRIX0lORk99IGlzIGp1c3QgYSBgYC8nJywgdGhpcyByb3V0aW5lIHJldHVybnMgYW4gZW1wdHkKK3N0cmluZyBhbmQgYXBwZW5kcyBhIHRyYWlsaW5nIHNsYXNoIHRvIFxjb2Rle1NDUklQVF9OQU1FfSwgZXZlbiB0aG91Z2gKK2VtcHR5IHBhdGggc2VnbWVudHMgYXJlIG5vcm1hbGx5IGlnbm9yZWQsIGFuZCBcY29kZXtTQ1JJUFRfTkFNRX0gZG9lc24ndAorbm9ybWFsbHkgZW5kIGluIGEgc2xhc2guICBUaGlzIGlzIGludGVudGlvbmFsIGJlaGF2aW9yLCB0byBlbnN1cmUgdGhhdAorYW4gYXBwbGljYXRpb24gY2FuIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBVUklzIGVuZGluZyBpbiBcY29kZXsveH0KK2Zyb20gb25lcyBlbmRpbmcgaW4gXGNvZGV7L3gvfSB3aGVuIHVzaW5nIHRoaXMgcm91dGluZSB0byBkbyBvYmplY3QKK3RyYXZlcnNhbC4KKworXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtzZXR1cF90ZXN0aW5nX2RlZmF1bHRzfXtlbnZpcm9ufQorVXBkYXRlIFx2YXJ7ZW52aXJvbn0gd2l0aCB0cml2aWFsIGRlZmF1bHRzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCitUaGlzIHJvdXRpbmUgYWRkcyB2YXJpb3VzIHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIFdTR0ksIGluY2x1ZGluZworXGNvZGV7SFRUUF9IT1NUfSwgXGNvZGV7U0VSVkVSX05BTUV9LCBcY29kZXtTRVJWRVJfUE9SVH0sCitcY29kZXtSRVFVRVNUX01FVEhPRH0sIFxjb2Rle1NDUklQVF9OQU1FfSwgXGNvZGV7UEFUSF9JTkZPfSwgYW5kIGFsbCBvZgordGhlIFxwZXB7MzMzfS1kZWZpbmVkIFxjb2Rle3dzZ2kuKn0gdmFyaWFibGVzLiAgSXQgb25seSBzdXBwbGllcyBkZWZhdWx0Cit2YWx1ZXMsIGFuZCBkb2VzIG5vdCByZXBsYWNlIGFueSBleGlzdGluZyBzZXR0aW5ncyBmb3IgdGhlc2UgdmFyaWFibGVzLgorCitUaGlzIHJvdXRpbmUgaXMgaW50ZW5kZWQgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHVuaXQgdGVzdHMgb2YgV1NHSQorc2VydmVycyBhbmQgYXBwbGljYXRpb25zIHRvIHNldCB1cCBkdW1teSBlbnZpcm9ubWVudHMuICBJdCBzaG91bGQgTk9UCitiZSB1c2VkIGJ5IGFjdHVhbCBXU0dJIHNlcnZlcnMgb3IgYXBwbGljYXRpb25zLCBzaW5jZSB0aGUgZGF0YSBpcyBmYWtlIQorXGVuZHtmdW5jZGVzY30KKworCisKK0luIGFkZGl0aW9uIHRvIHRoZSBlbnZpcm9ubWVudCBmdW5jdGlvbnMgYWJvdmUsIHRoZQorXG1vZHVsZXt3c2dpcmVmLnV0aWx9IG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZXNlIG1pc2NlbGxhbmVvdXMKK3V0aWxpdGllczoKKworXGJlZ2lue2Z1bmNkZXNjfXtpc19ob3BfYnlfaG9wfXtoZWFkZXJfbmFtZX0KK1JldHVybiB0cnVlIGlmICdoZWFkZXJfbmFtZScgaXMgYW4gSFRUUC8xLjEgYGBIb3AtYnktSG9wJycgaGVhZGVyLCBhcworZGVmaW5lZCBieSBccmZjezI2MTZ9LgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2NsYXNzZGVzY317RmlsZVdyYXBwZXJ9e2ZpbGVsaWtlIFxvcHRpb25hbHssIGJsa3NpemU9ODE5Mn19CitBIHdyYXBwZXIgdG8gY29udmVydCBhIGZpbGUtbGlrZSBvYmplY3QgdG8gYW4gaXRlcmF0b3IuICBUaGUgcmVzdWx0aW5nCitvYmplY3RzIHN1cHBvcnQgYm90aCBcbWV0aG9ke19fZ2V0aXRlbV9ffSBhbmQgXG1ldGhvZHtfX2l0ZXJfX30KK2l0ZXJhdGlvbiBzdHlsZXMsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuMSBhbmQgSnl0aG9uLgorQXMgdGhlIG9iamVjdCBpcyBpdGVyYXRlZCBvdmVyLCB0aGUgb3B0aW9uYWwgXHZhcntibGtzaXplfSBwYXJhbWV0ZXIKK3dpbGwgYmUgcmVwZWF0ZWRseSBwYXNzZWQgdG8gdGhlIFx2YXJ7ZmlsZWxpa2V9IG9iamVjdCdzIFxtZXRob2R7cmVhZCgpfQorbWV0aG9kIHRvIG9idGFpbiBzdHJpbmdzIHRvIHlpZWxkLiAgV2hlbiBcbWV0aG9ke3JlYWQoKX0gcmV0dXJucyBhbgorZW1wdHkgc3RyaW5nLCBpdGVyYXRpb24gaXMgZW5kZWQgYW5kIGlzIG5vdCByZXN1bWFibGUuCisKK0lmIFx2YXJ7ZmlsZWxpa2V9IGhhcyBhIFxtZXRob2R7Y2xvc2UoKX0gbWV0aG9kLCB0aGUgcmV0dXJuZWQgb2JqZWN0Cit3aWxsIGFsc28gaGF2ZSBhIFxtZXRob2R7Y2xvc2UoKX0gbWV0aG9kLCBhbmQgaXQgd2lsbCBpbnZva2UgdGhlCitcdmFye2ZpbGVsaWtlfSBvYmplY3QncyBcbWV0aG9ke2Nsb3NlKCl9IG1ldGhvZCB3aGVuIGNhbGxlZC4KK1xlbmR7Y2xhc3NkZXNjfQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitcc3Vic2VjdGlvbntcbW9kdWxle3dzZ2lyZWYuaGVhZGVyc30gLS0gV1NHSSByZXNwb25zZSBoZWFkZXIgdG9vbHN9CitcZGVjbGFyZW1vZHVsZXt9e3dzZ2lyZWYuaGVhZGVyc30KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBzaW5nbGUgY2xhc3MsIFxjbGFzc3tIZWFkZXJzfSwgZm9yIGNvbnZlbmllbnQKK21hbmlwdWxhdGlvbiBvZiBXU0dJIHJlc3BvbnNlIGhlYWRlcnMgdXNpbmcgYSBtYXBwaW5nLWxpa2UgaW50ZXJmYWNlLgorCitcYmVnaW57Y2xhc3NkZXNjfXtIZWFkZXJzfXtoZWFkZXJzfQorQ3JlYXRlIGEgbWFwcGluZy1saWtlIG9iamVjdCB3cmFwcGluZyBcdmFye2hlYWRlcnN9LCB3aGljaCBtdXN0IGJlIGEKK2xpc3Qgb2YgaGVhZGVyIG5hbWUvdmFsdWUgdHVwbGVzIGFzIGRlc2NyaWJlZCBpbiBccGVwezMzM30uICBBbnkgY2hhbmdlcworbWFkZSB0byB0aGUgbmV3IFxjbGFzc3tIZWFkZXJzfSBvYmplY3Qgd2lsbCBkaXJlY3RseSB1cGRhdGUgdGhlCitcdmFye2hlYWRlcnN9IGxpc3QgaXQgd2FzIGNyZWF0ZWQgd2l0aC4KKworXGNsYXNze0hlYWRlcnN9IG9iamVjdHMgc3VwcG9ydCB0eXBpY2FsIG1hcHBpbmcgb3BlcmF0aW9ucyBpbmNsdWRpbmcKK1xtZXRob2R7X19nZXRpdGVtX199LCBcbWV0aG9ke2dldH0sIFxtZXRob2R7X19zZXRpdGVtX199LAorXG1ldGhvZHtzZXRkZWZhdWx0fSwgXG1ldGhvZHtfX2RlbGl0ZW1fX30sIFxtZXRob2R7X19jb250YWluc19ffSBhbmQKK1xtZXRob2R7aGFzX2tleX0uICBGb3IgZWFjaCBvZiB0aGVzZSBtZXRob2RzLCB0aGUga2V5IGlzIHRoZSBoZWFkZXIgbmFtZQorKHRyZWF0ZWQgY2FzZS1pbnNlbnNpdGl2ZWx5KSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZmlyc3QgdmFsdWUKK2Fzc29jaWF0ZWQgd2l0aCB0aGF0IGhlYWRlciBuYW1lLiAgU2V0dGluZyBhIGhlYWRlciBkZWxldGVzIGFueSBleGlzdGluZwordmFsdWVzIGZvciB0aGF0IGhlYWRlciwgdGhlbiBhZGRzIGEgbmV3IHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIHdyYXBwZWQKK2hlYWRlciBsaXN0LiAgSGVhZGVycycgZXhpc3Rpbmcgb3JkZXIgaXMgZ2VuZXJhbGx5IG1haW50YWluZWQsIHdpdGggbmV3CitoZWFkZXJzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHdyYXBwZWQgbGlzdC4KKworVW5saWtlIGEgZGljdGlvbmFyeSwgXGNsYXNze0hlYWRlcnN9IG9iamVjdHMgZG8gbm90IHJhaXNlIGFuIGVycm9yIHdoZW4KK3lvdSB0cnkgdG8gZ2V0IG9yIGRlbGV0ZSBhIGtleSB0aGF0IGlzbid0IGluIHRoZSB3cmFwcGVkIGhlYWRlciBsaXN0LgorR2V0dGluZyBhIG5vbmV4aXN0ZW50IGhlYWRlciBqdXN0IHJldHVybnMgXGNvZGV7Tm9uZX0sIGFuZCBkZWxldGluZworYSBub25leGlzdGVudCBoZWFkZXIgZG9lcyBub3RoaW5nLgorCitcY2xhc3N7SGVhZGVyc30gb2JqZWN0cyBhbHNvIHN1cHBvcnQgXG1ldGhvZHtrZXlzKCl9LCBcbWV0aG9ke3ZhbHVlcygpfSwKK2FuZCBcbWV0aG9ke2l0ZW1zKCl9IG1ldGhvZHMuICBUaGUgbGlzdHMgcmV0dXJuZWQgYnkgXG1ldGhvZHtrZXlzKCl9CithbmQgXG1ldGhvZHtpdGVtcygpfSBjYW4gaW5jbHVkZSB0aGUgc2FtZSBrZXkgbW9yZSB0aGFuIG9uY2UgaWYgdGhlcmUKK2lzIGEgbXVsdGktdmFsdWVkIGhlYWRlci4gIFRoZSBcY29kZXtsZW4oKX0gb2YgYSBcY2xhc3N7SGVhZGVyc30gb2JqZWN0CitpcyB0aGUgc2FtZSBhcyB0aGUgbGVuZ3RoIG9mIGl0cyBcbWV0aG9ke2l0ZW1zKCl9LCB3aGljaCBpcyB0aGUgc2FtZQorYXMgdGhlIGxlbmd0aCBvZiB0aGUgd3JhcHBlZCBoZWFkZXIgbGlzdC4gIEluIGZhY3QsIHRoZSBcbWV0aG9ke2l0ZW1zKCl9CittZXRob2QganVzdCByZXR1cm5zIGEgY29weSBvZiB0aGUgd3JhcHBlZCBoZWFkZXIgbGlzdC4KKworQ2FsbGluZyBcY29kZXtzdHIoKX0gb24gYSBcY2xhc3N7SGVhZGVyc30gb2JqZWN0IHJldHVybnMgYSBmb3JtYXR0ZWQKK3N0cmluZyBzdWl0YWJsZSBmb3IgdHJhbnNtaXNzaW9uIGFzIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4gIEVhY2ggaGVhZGVyCitpcyBwbGFjZWQgb24gYSBsaW5lIHdpdGggaXRzIHZhbHVlLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgYSBzcGFjZS4KK0VhY2ggbGluZSBpcyB0ZXJtaW5hdGVkIGJ5IGEgY2FycmlhZ2UgcmV0dXJuIGFuZCBsaW5lIGZlZWQsIGFuZCB0aGUKK3N0cmluZyBpcyB0ZXJtaW5hdGVkIHdpdGggYSBibGFuayBsaW5lLgorCitJbiBhZGRpdGlvbiB0byB0aGVpciBtYXBwaW5nIGludGVyZmFjZSBhbmQgZm9ybWF0dGluZyBmZWF0dXJlcywKK1xjbGFzc3tIZWFkZXJzfSBvYmplY3RzIGFsc28gaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgZm9yIHF1ZXJ5aW5nCithbmQgYWRkaW5nIG11bHRpLXZhbHVlZCBoZWFkZXJzLCBhbmQgZm9yIGFkZGluZyBoZWFkZXJzIHdpdGggTUlNRQorcGFyYW1ldGVyczoKKworXGJlZ2lue21ldGhvZGRlc2N9e2dldF9hbGx9e25hbWV9CitSZXR1cm4gYSBsaXN0IG9mIGFsbCB0aGUgdmFsdWVzIGZvciB0aGUgbmFtZWQgaGVhZGVyLgorCitUaGUgcmV0dXJuZWQgbGlzdCB3aWxsIGJlIHNvcnRlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXJlZCBpbiB0aGUKK29yaWdpbmFsIGhlYWRlciBsaXN0IG9yIHdlcmUgYWRkZWQgdG8gdGhpcyBpbnN0YW5jZSwgYW5kIG1heSBjb250YWluCitkdXBsaWNhdGVzLiAgQW55IGZpZWxkcyBkZWxldGVkIGFuZCByZS1pbnNlcnRlZCBhcmUgYWx3YXlzIGFwcGVuZGVkIHRvCit0aGUgaGVhZGVyIGxpc3QuICBJZiBubyBmaWVsZHMgZXhpc3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgcmV0dXJucyBhbgorZW1wdHkgbGlzdC4KK1xlbmR7bWV0aG9kZGVzY30KKworCitcYmVnaW57bWV0aG9kZGVzY317YWRkX2hlYWRlcn17bmFtZSwgdmFsdWUsICoqX3BhcmFtc30KK0FkZCBhIChwb3NzaWJseSBtdWx0aS12YWx1ZWQpIGhlYWRlciwgd2l0aCBvcHRpb25hbCBNSU1FIHBhcmFtZXRlcnMKK3NwZWNpZmllZCB2aWEga2V5d29yZCBhcmd1bWVudHMuCisKK1x2YXJ7bmFtZX0gaXMgdGhlIGhlYWRlciBmaWVsZCB0byBhZGQuICBLZXl3b3JkIGFyZ3VtZW50cyBjYW4gYmUgdXNlZCB0bworc2V0IE1JTUUgcGFyYW1ldGVycyBmb3IgdGhlIGhlYWRlciBmaWVsZC4gIEVhY2ggcGFyYW1ldGVyIG11c3QgYmUgYQorc3RyaW5nIG9yIFxjb2Rle05vbmV9LiAgVW5kZXJzY29yZXMgaW4gcGFyYW1ldGVyIG5hbWVzIGFyZSBjb252ZXJ0ZWQgdG8KK2Rhc2hlcywgc2luY2UgZGFzaGVzIGFyZSBpbGxlZ2FsIGluIFB5dGhvbiBpZGVudGlmaWVycywgYnV0IG1hbnkgTUlNRQorcGFyYW1ldGVyIG5hbWVzIGluY2x1ZGUgZGFzaGVzLiAgSWYgdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBhIHN0cmluZywgaXQKK2lzIGFkZGVkIHRvIHRoZSBoZWFkZXIgdmFsdWUgcGFyYW1ldGVycyBpbiB0aGUgZm9ybSBcY29kZXtuYW1lPSJ2YWx1ZSJ9LgorSWYgaXQgaXMgXGNvZGV7Tm9uZX0sIG9ubHkgdGhlIHBhcmFtZXRlciBuYW1lIGlzIGFkZGVkLiAgKFRoaXMgaXMgdXNlZAorZm9yIE1JTUUgcGFyYW1ldGVycyB3aXRob3V0IGEgdmFsdWUuKSAgRXhhbXBsZSB1c2FnZToKKworXGJlZ2lue3ZlcmJhdGltfQoraC5hZGRfaGVhZGVyKCdjb250ZW50LWRpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLCBmaWxlbmFtZT0nYnVkLmdpZicpCitcZW5ke3ZlcmJhdGltfQorCitUaGUgYWJvdmUgd2lsbCBhZGQgYSBoZWFkZXIgdGhhdCBsb29rcyBsaWtlIHRoaXM6CisKK1xiZWdpbnt2ZXJiYXRpbX0KK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJidWQuZ2lmIgorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7bWV0aG9kZGVzY30KK1xlbmR7Y2xhc3NkZXNjfQorCitcc3Vic2VjdGlvbntcbW9kdWxle3dzZ2lyZWYuc2ltcGxlX3NlcnZlcn0gLS0gYSBzaW1wbGUgV1NHSSBIVFRQIHNlcnZlcn0KK1xkZWNsYXJlbW9kdWxlW3dzZ2lyZWYuc2ltcGxlc2VydmVyXXt9e3dzZ2lyZWYuc2ltcGxlX3NlcnZlcn0KKworVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIHNpbXBsZSBIVFRQIHNlcnZlciAoYmFzZWQgb24KK1xtb2R1bGV7QmFzZUhUVFBTZXJ2ZXJ9KSB0aGF0IHNlcnZlcyBXU0dJIGFwcGxpY2F0aW9ucy4gIEVhY2ggc2VydmVyCitpbnN0YW5jZSBzZXJ2ZXMgYSBzaW5nbGUgV1NHSSBhcHBsaWNhdGlvbiBvbiBhIGdpdmVuIGhvc3QgYW5kIHBvcnQuICBJZgoreW91IHdhbnQgdG8gc2VydmUgbXVsdGlwbGUgYXBwbGljYXRpb25zIG9uIGEgc2luZ2xlIGhvc3QgYW5kIHBvcnQsIHlvdQorc2hvdWxkIGNyZWF0ZSBhIFdTR0kgYXBwbGljYXRpb24gdGhhdCBwYXJzZXMgXGNvZGV7UEFUSF9JTkZPfSB0byBzZWxlY3QKK3doaWNoIGFwcGxpY2F0aW9uIHRvIGludm9rZSBmb3IgZWFjaCByZXF1ZXN0LiAgKEUuZy4sIHVzaW5nIHRoZQorXGZ1bmN0aW9ue3NoaWZ0X3BhdGhfaW5mbygpfSBmdW5jdGlvbiBmcm9tIFxtb2R1bGV7d3NnaXJlZi51dGlsfS4pCisKKworXGJlZ2lue2Z1bmNkZXNjfXttYWtlX3NlcnZlcn17aG9zdCwgcG9ydCwgYXBwCitcb3B0aW9uYWx7LCBzZXJ2ZXJfY2xhc3M9XGNsYXNze1dTR0lTZXJ2ZXJ9IFxvcHRpb25hbHssCitoYW5kbGVyX2NsYXNzPVxjbGFzc3tXU0dJUmVxdWVzdEhhbmRsZXJ9fX19CitDcmVhdGUgYSBuZXcgV1NHSSBzZXJ2ZXIgbGlzdGVuaW5nIG9uIFx2YXJ7aG9zdH0gYW5kIFx2YXJ7cG9ydH0sCithY2NlcHRpbmcgY29ubmVjdGlvbnMgZm9yIFx2YXJ7YXBwfS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YKK3RoZSBzdXBwbGllZCBcdmFye3NlcnZlcl9jbGFzc30sIGFuZCB3aWxsIHByb2Nlc3MgcmVxdWVzdHMgdXNpbmcgdGhlCitzcGVjaWZpZWQgXHZhcntoYW5kbGVyX2NsYXNzfS4gIFx2YXJ7YXBwfSBtdXN0IGJlIGEgV1NHSSBhcHBsaWNhdGlvbgorb2JqZWN0LCBhcyBkZWZpbmVkIGJ5IFxwZXB7MzMzfS4KKworRXhhbXBsZSB1c2FnZToKK1xiZWdpbnt2ZXJiYXRpbX1mcm9tIHdzZ2lyZWYuc2ltcGxlX3NlcnZlciBpbXBvcnQgbWFrZV9zZXJ2ZXIsIGRlbW9fYXBwCisKK2h0dHBkID0gbWFrZV9zZXJ2ZXIoJycsIDgwMDAsIGRlbW9fYXBwKQorcHJpbnQgIlNlcnZpbmcgSFRUUCBvbiBwb3J0IDgwMDAuLi4iCisKKyMgUmVzcG9uZCB0byByZXF1ZXN0cyB1bnRpbCBwcm9jZXNzIGlzIGtpbGxlZAoraHR0cGQuc2VydmVfZm9yZXZlcigpCisKKyMgQWx0ZXJuYXRpdmU6IHNlcnZlIG9uZSByZXF1ZXN0LCB0aGVuIGV4aXQKKyMjaHR0cGQuaGFuZGxlX3JlcXVlc3QoKQorXGVuZHt2ZXJiYXRpbX0KKworXGVuZHtmdW5jZGVzY30KKworCisKKworCisKK1xiZWdpbntmdW5jZGVzY317ZGVtb19hcHB9e2Vudmlyb24sIHN0YXJ0X3Jlc3BvbnNlfQorVGhpcyBmdW5jdGlvbiBpcyBhIHNtYWxsIGJ1dCBjb21wbGV0ZSBXU0dJIGFwcGxpY2F0aW9uIHRoYXQKK3JldHVybnMgYSB0ZXh0IHBhZ2UgY29udGFpbmluZyB0aGUgbWVzc2FnZSBgYEhlbGxvIHdvcmxkIScnCithbmQgYSBsaXN0IG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgcHJvdmlkZWQgaW4gdGhlCitcdmFye2Vudmlyb259IHBhcmFtZXRlci4gIEl0J3MgdXNlZnVsIGZvciB2ZXJpZnlpbmcgdGhhdCBhIFdTR0kgc2VydmVyCisoc3VjaCBhcyBcbW9kdWxle3dzZ2lyZWYuc2ltcGxlX3NlcnZlcn0pIGlzIGFibGUgdG8gcnVuIGEgc2ltcGxlIFdTR0kKK2FwcGxpY2F0aW9uIGNvcnJlY3RseS4KK1xlbmR7ZnVuY2Rlc2N9CisKKworXGJlZ2lue2NsYXNzZGVzY317V1NHSVNlcnZlcn17c2VydmVyX2FkZHJlc3MsIFJlcXVlc3RIYW5kbGVyQ2xhc3N9CitDcmVhdGUgYSBcY2xhc3N7V1NHSVNlcnZlcn0gaW5zdGFuY2UuICBcdmFye3NlcnZlcl9hZGRyZXNzfSBzaG91bGQgYmUKK2EgXGNvZGV7KGhvc3QscG9ydCl9IHR1cGxlLCBhbmQgXHZhcntSZXF1ZXN0SGFuZGxlckNsYXNzfSBzaG91bGQgYmUKK3RoZSBzdWJjbGFzcyBvZiBcY2xhc3N7QmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcn0gdGhhdCB3aWxsCitiZSB1c2VkIHRvIHByb2Nlc3MgcmVxdWVzdHMuCisKK1lvdSBkbyBub3Qgbm9ybWFsbHkgbmVlZCB0byBjYWxsIHRoaXMgY29uc3RydWN0b3IsIGFzIHRoZQorXGZ1bmN0aW9ue21ha2Vfc2VydmVyKCl9IGZ1bmN0aW9uIGNhbiBoYW5kbGUgYWxsIHRoZSBkZXRhaWxzIGZvciB5b3UuCisKK1xjbGFzc3tXU0dJU2VydmVyfSBpcyBhIHN1YmNsYXNzCitvZiBcY2xhc3N7QmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcn0sIHNvIGFsbCBvZiBpdHMgbWV0aG9kcyAoc3VjaCBhcworXG1ldGhvZHtzZXJ2ZV9mb3JldmVyKCl9IGFuZCBcbWV0aG9ke2hhbmRsZV9yZXF1ZXN0KCl9KSBhcmUgYXZhaWxhYmxlLgorXGNsYXNze1dTR0lTZXJ2ZXJ9IGFsc28gcHJvdmlkZXMgdGhlc2UgV1NHSS1zcGVjaWZpYyBtZXRob2RzOgorCitcYmVnaW57bWV0aG9kZGVzY317c2V0X2FwcH17YXBwbGljYXRpb259CitTZXRzIHRoZSBjYWxsYWJsZSBcdmFye2FwcGxpY2F0aW9ufSBhcyB0aGUgV1NHSSBhcHBsaWNhdGlvbiB0aGF0IHdpbGwKK3JlY2VpdmUgcmVxdWVzdHMuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtnZXRfYXBwfXt9CitSZXR1cm5zIHRoZSBjdXJyZW50bHktc2V0IGFwcGxpY2F0aW9uIGNhbGxhYmxlLgorXGVuZHttZXRob2RkZXNjfQorCitOb3JtYWxseSwgaG93ZXZlciwgeW91IGRvIG5vdCBuZWVkIHRvIHVzZSB0aGVzZSBhZGRpdGlvbmFsIG1ldGhvZHMsIGFzCitcbWV0aG9ke3NldF9hcHAoKX0gaXMgbm9ybWFsbHkgY2FsbGVkIGJ5IFxmdW5jdGlvbnttYWtlX3NlcnZlcigpfSwgYW5kCit0aGUgXG1ldGhvZHtnZXRfYXBwKCl9IGV4aXN0cyBtYWlubHkgZm9yIHRoZSBiZW5lZml0IG9mIHJlcXVlc3QgaGFuZGxlcgoraW5zdGFuY2VzLgorXGVuZHtjbGFzc2Rlc2N9CisKKworCitcYmVnaW57Y2xhc3NkZXNjfXtXU0dJUmVxdWVzdEhhbmRsZXJ9e3JlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXJ9CitDcmVhdGUgYW4gSFRUUCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gXHZhcntyZXF1ZXN0fSAoaS5lLiBhIHNvY2tldCksCitcdmFye2NsaWVudF9hZGRyZXNzfSAoYSBcY29kZXsoXHZhcntob3N0fSxcdmFye3BvcnR9KX0gdHVwbGUpLCBhbmQKK1x2YXJ7c2VydmVyfSAoXGNsYXNze1dTR0lTZXJ2ZXJ9IGluc3RhbmNlKS4KKworWW91IGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBkaXJlY3RseTsgdGhleSBhcmUKK2F1dG9tYXRpY2FsbHkgY3JlYXRlZCBhcyBuZWVkZWQgYnkgXGNsYXNze1dTR0lTZXJ2ZXJ9IG9iamVjdHMuICBZb3UKK2NhbiwgaG93ZXZlciwgc3ViY2xhc3MgdGhpcyBjbGFzcyBhbmQgc3VwcGx5IGl0IGFzIGEgXHZhcntoYW5kbGVyX2NsYXNzfQordG8gdGhlIFxmdW5jdGlvbnttYWtlX3NlcnZlcigpfSBmdW5jdGlvbi4gIFNvbWUgcG9zc2libHkgcmVsZXZhbnQKK21ldGhvZHMgZm9yIG92ZXJyaWRpbmcgaW4gc3ViY2xhc3NlczoKKworXGJlZ2lue21ldGhvZGRlc2N9e2dldF9lbnZpcm9ufXt9CitSZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBXU0dJIGVudmlyb25tZW50IGZvciBhIHJlcXVlc3QuICBUaGUKK2RlZmF1bHQgaW1wbGVtZW50YXRpb24gY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgXGNsYXNze1dTR0lTZXJ2ZXJ9CitvYmplY3QncyBcbWVtYmVye2Jhc2VfZW52aXJvbn0gZGljdGlvbmFyeSBhdHRyaWJ1dGUgYW5kIHRoZW4gYWRkcwordmFyaW91cyBoZWFkZXJzIGRlcml2ZWQgZnJvbSB0aGUgSFRUUCByZXF1ZXN0LiAgRWFjaCBjYWxsIHRvIHRoaXMgbWV0aG9kCitzaG91bGQgcmV0dXJuIGEgbmV3IGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgb2YgdGhlIHJlbGV2YW50IENHSQorZW52aXJvbm1lbnQgdmFyaWFibGVzIGFzIHNwZWNpZmllZCBpbiBccGVwezMzM30uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtnZXRfc3RkZXJyfXt9CitSZXR1cm4gdGhlIG9iamVjdCB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIHRoZSBcY29kZXt3c2dpLmVycm9yc30gc3RyZWFtLgorVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIFxjb2Rle3N5cy5zdGRlcnJ9LgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317aGFuZGxlfXt9CitQcm9jZXNzIHRoZSBIVFRQIHJlcXVlc3QuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjcmVhdGVzIGEgaGFuZGxlcgoraW5zdGFuY2UgdXNpbmcgYSBcbW9kdWxle3dzZ2lyZWYuaGFuZGxlcnN9IGNsYXNzIHRvIGltcGxlbWVudCB0aGUgYWN0dWFsCitXU0dJIGFwcGxpY2F0aW9uIGludGVyZmFjZS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGVuZHtjbGFzc2Rlc2N9CisKKworCisKKworCisKKworCitcc3Vic2VjdGlvbntcbW9kdWxle3dzZ2lyZWYudmFsaWRhdGV9IC0tIFdTR0kgY29uZm9ybWFuY2UgY2hlY2tlcn0KK1xkZWNsYXJlbW9kdWxle317d3NnaXJlZi52YWxpZGF0ZX0KK1doZW4gY3JlYXRpbmcgbmV3IFdTR0kgYXBwbGljYXRpb24gb2JqZWN0cywgZnJhbWV3b3Jrcywgc2VydmVycywgb3IKK21pZGRsZXdhcmUsIGl0IGNhbiBiZSB1c2VmdWwgdG8gdmFsaWRhdGUgdGhlIG5ldyBjb2RlJ3MgY29uZm9ybWFuY2UKK3VzaW5nIFxtb2R1bGV7d3NnaXJlZi52YWxpZGF0ZX0uICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGZ1bmN0aW9uIHRoYXQKK2NyZWF0ZXMgV1NHSSBhcHBsaWNhdGlvbiBvYmplY3RzIHRoYXQgdmFsaWRhdGUgY29tbXVuaWNhdGlvbnMgYmV0d2VlbgorYSBXU0dJIHNlcnZlciBvciBnYXRld2F5IGFuZCBhIFdTR0kgYXBwbGljYXRpb24gb2JqZWN0LCB0byBjaGVjayBib3RoCitzaWRlcyBmb3IgcHJvdG9jb2wgY29uZm9ybWFuY2UuCisKK05vdGUgdGhhdCB0aGlzIHV0aWxpdHkgZG9lcyBub3QgZ3VhcmFudGVlIGNvbXBsZXRlIFxwZXB7MzMzfSBjb21wbGlhbmNlOworYW4gYWJzZW5jZSBvZiBlcnJvcnMgZnJvbSB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQKK2Vycm9ycyBkbyBub3QgZXhpc3QuICBIb3dldmVyLCBpZiB0aGlzIG1vZHVsZSBkb2VzIHByb2R1Y2UgYW4gZXJyb3IsCit0aGVuIGl0IGlzIHZpcnR1YWxseSBjZXJ0YWluIHRoYXQgZWl0aGVyIHRoZSBzZXJ2ZXIgb3IgYXBwbGljYXRpb24gaXMKK25vdCAxMDBcJSBjb21wbGlhbnQuCisKK1RoaXMgbW9kdWxlIGlzIGJhc2VkIG9uIHRoZSBcbW9kdWxle3Bhc3RlLmxpbnR9IG1vZHVsZSBmcm9tIElhbgorQmlja2luZydzIGBgUHl0aG9uIFBhc3RlJycgbGlicmFyeS4KKworXGJlZ2lue2Z1bmNkZXNjfXt2YWxpZGF0b3J9e2FwcGxpY2F0aW9ufQorV3JhcCBcdmFye2FwcGxpY2F0aW9ufSBhbmQgcmV0dXJuIGEgbmV3IFdTR0kgYXBwbGljYXRpb24gb2JqZWN0LiAgVGhlCityZXR1cm5lZCBhcHBsaWNhdGlvbiB3aWxsIGZvcndhcmQgYWxsIHJlcXVlc3RzIHRvIHRoZSBvcmlnaW5hbAorXHZhcnthcHBsaWNhdGlvbn0sIGFuZCB3aWxsIGNoZWNrIHRoYXQgYm90aCB0aGUgXHZhcnthcHBsaWNhdGlvbn0gYW5kCit0aGUgc2VydmVyIGludm9raW5nIGl0IGFyZSBjb25mb3JtaW5nIHRvIHRoZSBXU0dJIHNwZWNpZmljYXRpb24gYW5kIHRvCitSRkMgMjYxNi4KKworQW55IGRldGVjdGVkIG5vbmNvbmZvcm1hbmNlIHJlc3VsdHMgaW4gYW4gXGV4Y2VwdGlvbntBc3NlcnRpb25FcnJvcn0KK2JlaW5nIHJhaXNlZDsgbm90ZSwgaG93ZXZlciwgdGhhdCBob3cgdGhlc2UgZXJyb3JzIGFyZSBoYW5kbGVkIGlzCitzZXJ2ZXItZGVwZW5kZW50LiAgRm9yIGV4YW1wbGUsIFxtb2R1bGV7d3NnaXJlZi5zaW1wbGVfc2VydmVyfSBhbmQgb3RoZXIKK3NlcnZlcnMgYmFzZWQgb24gXG1vZHVsZXt3c2dpcmVmLmhhbmRsZXJzfSAodGhhdCBkb24ndCBvdmVycmlkZSB0aGUKK2Vycm9yIGhhbmRsaW5nIG1ldGhvZHMgdG8gZG8gc29tZXRoaW5nIGVsc2UpIHdpbGwgc2ltcGx5IG91dHB1dCBhCittZXNzYWdlIHRoYXQgYW4gZXJyb3IgaGFzIG9jY3VycmVkLCBhbmQgZHVtcCB0aGUgdHJhY2ViYWNrIHRvCitcY29kZXtzeXMuc3RkZXJyfSBvciBzb21lIG90aGVyIGVycm9yIHN0cmVhbS4KKworVGhpcyB3cmFwcGVyIG1heSBhbHNvIGdlbmVyYXRlIG91dHB1dCB1c2luZyB0aGUgXG1vZHVsZXt3YXJuaW5nc30gbW9kdWxlCit0byBpbmRpY2F0ZSBiZWhhdmlvcnMgdGhhdCBhcmUgcXVlc3Rpb25hYmxlIGJ1dCB3aGljaCBtYXkgbm90IGFjdHVhbGx5CitiZSBwcm9oaWJpdGVkIGJ5IFxwZXB7MzMzfS4gIFVubGVzcyB0aGV5IGFyZSBzdXBwcmVzc2VkIHVzaW5nIFB5dGhvbgorY29tbWFuZC1saW5lIG9wdGlvbnMgb3IgdGhlIFxtb2R1bGV7d2FybmluZ3N9IEFQSSwgYW55IHN1Y2ggd2FybmluZ3MKK3dpbGwgYmUgd3JpdHRlbiB0byBcY29kZXtzeXMuc3RkZXJyfSAoXGVtcGh7bm90fSBcY29kZXt3c2dpLmVycm9yc30sCit1bmxlc3MgdGhleSBoYXBwZW4gdG8gYmUgdGhlIHNhbWUgb2JqZWN0KS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xzdWJzZWN0aW9ue1xtb2R1bGV7d3NnaXJlZi5oYW5kbGVyc30gLS0gc2VydmVyL2dhdGV3YXkgYmFzZSBjbGFzc2VzfQorXGRlY2xhcmVtb2R1bGV7fXt3c2dpcmVmLmhhbmRsZXJzfQorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBiYXNlIGhhbmRsZXIgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIFdTR0kgc2VydmVycworYW5kIGdhdGV3YXlzLiAgVGhlc2UgYmFzZSBjbGFzc2VzIGhhbmRsZSBtb3N0IG9mIHRoZSB3b3JrIG9mCitjb21tdW5pY2F0aW5nIHdpdGggYSBXU0dJIGFwcGxpY2F0aW9uLCBhcyBsb25nIGFzIHRoZXkgYXJlIGdpdmVuIGEKK0NHSS1saWtlIGVudmlyb25tZW50LCBhbG9uZyB3aXRoIGlucHV0LCBvdXRwdXQsIGFuZCBlcnJvciBzdHJlYW1zLgorCisKK1xiZWdpbntjbGFzc2Rlc2N9e0NHSUhhbmRsZXJ9e30KK0NHSS1iYXNlZCBpbnZvY2F0aW9uIHZpYSBcY29kZXtzeXMuc3RkaW59LCBcY29kZXtzeXMuc3Rkb3V0fSwKK1xjb2Rle3N5cy5zdGRlcnJ9IGFuZCBcY29kZXtvcy5lbnZpcm9ufS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGhhdmUKK2EgV1NHSSBhcHBsaWNhdGlvbiBhbmQgd2FudCB0byBydW4gaXQgYXMgYSBDR0kgc2NyaXB0LiAgU2ltcGx5IGludm9rZQorXGNvZGV7Q0dJSGFuZGxlcigpLnJ1bihhcHApfSwgd2hlcmUgXGNvZGV7YXBwfSBpcyB0aGUgV1NHSSBhcHBsaWNhdGlvbgorb2JqZWN0IHlvdSB3aXNoIHRvIGludm9rZS4KKworVGhpcyBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIFxjbGFzc3tCYXNlQ0dJSGFuZGxlcn0gdGhhdCBzZXRzCitcY29kZXt3c2dpLnJ1bl9vbmNlfSB0byB0cnVlLCBcY29kZXt3c2dpLm11bHRpdGhyZWFkfSB0byBmYWxzZSwgYW5kCitcY29kZXt3c2dpLm11bHRpcHJvY2Vzc30gdG8gdHJ1ZSwgYW5kIGFsd2F5cyB1c2VzIFxtb2R1bGV7c3lzfSBhbmQKK1xtb2R1bGV7b3N9IHRvIG9idGFpbiB0aGUgbmVjZXNzYXJ5IENHSSBzdHJlYW1zIGFuZCBlbnZpcm9ubWVudC4KK1xlbmR7Y2xhc3NkZXNjfQorCisKK1xiZWdpbntjbGFzc2Rlc2N9e0Jhc2VDR0lIYW5kbGVyfXtzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGVudmlyb24KK1xvcHRpb25hbHssIG11bHRpdGhyZWFkPVRydWUgXG9wdGlvbmFseywgbXVsdGlwcm9jZXNzPUZhbHNlfX19CisKK1NpbWlsYXIgdG8gXGNsYXNze0NHSUhhbmRsZXJ9LCBidXQgaW5zdGVhZCBvZiB1c2luZyB0aGUgXG1vZHVsZXtzeXN9IGFuZAorXG1vZHVsZXtvc30gbW9kdWxlcywgdGhlIENHSSBlbnZpcm9ubWVudCBhbmQgSS9PIHN0cmVhbXMgYXJlIHNwZWNpZmllZAorZXhwbGljaXRseS4gIFRoZSBcdmFye211bHRpdGhyZWFkfSBhbmQgXHZhcnttdWx0aXByb2Nlc3N9IHZhbHVlcyBhcmUKK3VzZWQgdG8gc2V0IHRoZSBcY29kZXt3c2dpLm11bHRpdGhyZWFkfSBhbmQgXGNvZGV7d3NnaS5tdWx0aXByb2Nlc3N9CitmbGFncyBmb3IgYW55IGFwcGxpY2F0aW9ucyBydW4gYnkgdGhlIGhhbmRsZXIgaW5zdGFuY2UuCisKK1RoaXMgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiBcY2xhc3N7U2ltcGxlSGFuZGxlcn0gaW50ZW5kZWQgZm9yIHVzZSB3aXRoCitzb2Z0d2FyZSBvdGhlciB0aGFuIEhUVFAgYGBvcmlnaW4gc2VydmVycycnLiAgSWYgeW91IGFyZSB3cml0aW5nIGEKK2dhdGV3YXkgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gKHN1Y2ggYXMgQ0dJLCBGYXN0Q0dJLCBTQ0dJLCBldGMuKSB0aGF0Cit1c2VzIGEgXGNvZGV7U3RhdHVzOn0gaGVhZGVyIHRvIHNlbmQgYW4gSFRUUCBzdGF0dXMsIHlvdSBwcm9iYWJseSB3YW50Cit0byBzdWJjbGFzcyB0aGlzIGluc3RlYWQgb2YgXGNsYXNze1NpbXBsZUhhbmRsZXJ9LgorXGVuZHtjbGFzc2Rlc2N9CisKKworCitcYmVnaW57Y2xhc3NkZXNjfXtTaW1wbGVIYW5kbGVyfXtzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGVudmlyb24KK1xvcHRpb25hbHssbXVsdGl0aHJlYWQ9VHJ1ZSBcb3B0aW9uYWx7LCBtdWx0aXByb2Nlc3M9RmFsc2V9fX0KKworU2ltaWxhciB0byBcY2xhc3N7QmFzZUNHSUhhbmRsZXJ9LCBidXQgZGVzaWduZWQgZm9yIHVzZSB3aXRoIEhUVFAgb3JpZ2luCitzZXJ2ZXJzLiAgSWYgeW91IGFyZSB3cml0aW5nIGFuIEhUVFAgc2VydmVyIGltcGxlbWVudGF0aW9uLCB5b3Ugd2lsbAorcHJvYmFibHkgd2FudCB0byBzdWJjbGFzcyB0aGlzIGluc3RlYWQgb2YgXGNsYXNze0Jhc2VDR0lIYW5kbGVyfQorCitUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgXGNsYXNze0Jhc2VIYW5kbGVyfS4gIEl0IG92ZXJyaWRlcyB0aGUKK1xtZXRob2R7X19pbml0X18oKX0sIFxtZXRob2R7Z2V0X3N0ZGluKCl9LCBcbWV0aG9ke2dldF9zdGRlcnIoKX0sCitcbWV0aG9ke2FkZF9jZ2lfdmFycygpfSwgXG1ldGhvZHtfd3JpdGUoKX0sIGFuZCBcbWV0aG9ke19mbHVzaCgpfQorbWV0aG9kcyB0byBzdXBwb3J0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgYW5kIHN0cmVhbXMgdmlhCit0aGUgY29uc3RydWN0b3IuICBUaGUgc3VwcGxpZWQgZW52aXJvbm1lbnQgYW5kIHN0cmVhbXMgYXJlIHN0b3JlZCBpbgordGhlIFxtZW1iZXJ7c3RkaW59LCBcbWVtYmVye3N0ZG91dH0sIFxtZW1iZXJ7c3RkZXJyfSwgYW5kCitcbWVtYmVye2Vudmlyb259IGF0dHJpYnV0ZXMuCitcZW5ke2NsYXNzZGVzY30KKworXGJlZ2lue2NsYXNzZGVzY317QmFzZUhhbmRsZXJ9e30KK1RoaXMgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgcnVubmluZyBXU0dJIGFwcGxpY2F0aW9ucy4gIEVhY2gKK2luc3RhbmNlIHdpbGwgaGFuZGxlIGEgc2luZ2xlIEhUVFAgcmVxdWVzdCwgYWx0aG91Z2ggaW4gcHJpbmNpcGxlIHlvdQorY291bGQgY3JlYXRlIGEgc3ViY2xhc3MgdGhhdCB3YXMgcmV1c2FibGUgZm9yIG11bHRpcGxlIHJlcXVlc3RzLgorCitcY2xhc3N7QmFzZUhhbmRsZXJ9IGluc3RhbmNlcyBoYXZlIG9ubHkgb25lIG1ldGhvZCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwKK3VzZToKKworXGJlZ2lue21ldGhvZGRlc2N9e3J1bn17YXBwfQorUnVuIHRoZSBzcGVjaWZpZWQgV1NHSSBhcHBsaWNhdGlvbiwgXHZhcnthcHB9LgorXGVuZHttZXRob2RkZXNjfQorCitBbGwgb2YgdGhlIG90aGVyIFxjbGFzc3tCYXNlSGFuZGxlcn0gbWV0aG9kcyBhcmUgaW52b2tlZCBieSB0aGlzIG1ldGhvZAoraW4gdGhlIHByb2Nlc3Mgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24sIGFuZCB0aHVzIGV4aXN0IHByaW1hcmlseSB0bworYWxsb3cgY3VzdG9taXppbmcgdGhlIHByb2Nlc3MuCisKK1RoZSBmb2xsb3dpbmcgbWV0aG9kcyBNVVNUIGJlIG92ZXJyaWRkZW4gaW4gYSBzdWJjbGFzczoKKworXGJlZ2lue21ldGhvZGRlc2N9e193cml0ZX17ZGF0YX0KK0J1ZmZlciB0aGUgc3RyaW5nIFx2YXJ7ZGF0YX0gZm9yIHRyYW5zbWlzc2lvbiB0byB0aGUgY2xpZW50LiAgSXQncyBva2F5CitpZiB0aGlzIG1ldGhvZCBhY3R1YWxseSB0cmFuc21pdHMgdGhlIGRhdGE7IFxjbGFzc3tCYXNlSGFuZGxlcn0KK2p1c3Qgc2VwYXJhdGVzIHdyaXRlIGFuZCBmbHVzaCBvcGVyYXRpb25zIGZvciBncmVhdGVyIGVmZmljaWVuY3kKK3doZW4gdGhlIHVuZGVybHlpbmcgc3lzdGVtIGFjdHVhbGx5IGhhcyBzdWNoIGEgZGlzdGluY3Rpb24uCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtfZmx1c2h9e30KK0ZvcmNlIGJ1ZmZlcmVkIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQgdG8gdGhlIGNsaWVudC4gIEl0J3Mgb2theSBpZiB0aGlzCittZXRob2QgaXMgYSBuby1vcCAoaS5lLiwgaWYgXG1ldGhvZHtfd3JpdGUoKX0gYWN0dWFsbHkgc2VuZHMgdGhlIGRhdGEpLgorXGVuZHttZXRob2RkZXNjfQorCitcYmVnaW57bWV0aG9kZGVzY317Z2V0X3N0ZGlufXt9CitSZXR1cm4gYW4gaW5wdXQgc3RyZWFtIG9iamVjdCBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBcY29kZXt3c2dpLmlucHV0fQorb2YgdGhlIHJlcXVlc3QgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21ldGhvZGRlc2N9e2dldF9zdGRlcnJ9e30KK1JldHVybiBhbiBvdXRwdXQgc3RyZWFtIG9iamVjdCBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZQorXGNvZGV7d3NnaS5lcnJvcnN9IG9mIHRoZSByZXF1ZXN0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXthZGRfY2dpX3ZhcnN9e30KK0luc2VydCBDR0kgdmFyaWFibGVzIGZvciB0aGUgY3VycmVudCByZXF1ZXN0IGludG8gdGhlIFxtZW1iZXJ7ZW52aXJvbn0KK2F0dHJpYnV0ZS4KK1xlbmR7bWV0aG9kZGVzY30KKworSGVyZSBhcmUgc29tZSBvdGhlciBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIHlvdSBtYXkgd2lzaCB0byBvdmVycmlkZS4KK1RoaXMgbGlzdCBpcyBvbmx5IGEgc3VtbWFyeSwgaG93ZXZlciwgYW5kIGRvZXMgbm90IGluY2x1ZGUgZXZlcnkgbWV0aG9kCit0aGF0IGNhbiBiZSBvdmVycmlkZGVuLiAgWW91IHNob3VsZCBjb25zdWx0IHRoZSBkb2NzdHJpbmdzIGFuZCBzb3VyY2UKK2NvZGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYmVmb3JlIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgY3VzdG9taXplZAorXGNsYXNze0Jhc2VIYW5kbGVyfSBzdWJjbGFzcy4KKworCisKKworCisKKworCisKKworCisKKworCisKKworQXR0cmlidXRlcyBhbmQgbWV0aG9kcyBmb3IgY3VzdG9taXppbmcgdGhlIFdTR0kgZW52aXJvbm1lbnQ6CisKK1xiZWdpbnttZW1iZXJkZXNjfXt3c2dpX211bHRpdGhyZWFkfQorVGhlIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBcY29kZXt3c2dpLm11bHRpdGhyZWFkfSBlbnZpcm9ubWVudAordmFyaWFibGUuICBJdCBkZWZhdWx0cyB0byB0cnVlIGluIFxjbGFzc3tCYXNlSGFuZGxlcn0sIGJ1dCBtYXkgaGF2ZQorYSBkaWZmZXJlbnQgZGVmYXVsdCAob3IgYmUgc2V0IGJ5IHRoZSBjb25zdHJ1Y3RvcikgaW4gdGhlIG90aGVyCitzdWJjbGFzc2VzLgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317d3NnaV9tdWx0aXByb2Nlc3N9CitUaGUgdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIFxjb2Rle3dzZ2kubXVsdGlwcm9jZXNzfSBlbnZpcm9ubWVudAordmFyaWFibGUuICBJdCBkZWZhdWx0cyB0byB0cnVlIGluIFxjbGFzc3tCYXNlSGFuZGxlcn0sIGJ1dCBtYXkgaGF2ZQorYSBkaWZmZXJlbnQgZGVmYXVsdCAob3IgYmUgc2V0IGJ5IHRoZSBjb25zdHJ1Y3RvcikgaW4gdGhlIG90aGVyCitzdWJjbGFzc2VzLgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317d3NnaV9ydW5fb25jZX0KK1RoZSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgXGNvZGV7d3NnaS5ydW5fb25jZX0gZW52aXJvbm1lbnQKK3ZhcmlhYmxlLiAgSXQgZGVmYXVsdHMgdG8gZmFsc2UgaW4gXGNsYXNze0Jhc2VIYW5kbGVyfSwgYnV0CitcY2xhc3N7Q0dJSGFuZGxlcn0gc2V0cyBpdCB0byB0cnVlIGJ5IGRlZmF1bHQuCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfXtvc19lbnZpcm9ufQorVGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGJlIGluY2x1ZGVkIGluIGV2ZXJ5IHJlcXVlc3QncworV1NHSSBlbnZpcm9ubWVudC4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYSBjb3B5IG9mIFxjb2Rle29zLmVudmlyb259IGF0Cit0aGUgdGltZSB0aGF0IFxtb2R1bGV7d3NnaXJlZi5oYW5kbGVyc30gd2FzIGltcG9ydGVkLCBidXQgc3ViY2xhc3NlcyBjYW4KK2VpdGhlciBjcmVhdGUgdGhlaXIgb3duIGF0IHRoZSBjbGFzcyBvciBpbnN0YW5jZSBsZXZlbC4gIE5vdGUgdGhhdCB0aGUKK2RpY3Rpb25hcnkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVhZC1vbmx5LCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcworc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgY2xhc3NlcyBhbmQgaW5zdGFuY2VzLgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317c2VydmVyX3NvZnR3YXJlfQorSWYgdGhlIFxtZW1iZXJ7b3JpZ2luX3NlcnZlcn0gYXR0cmlidXRlIGlzIHNldCwgdGhpcyBhdHRyaWJ1dGUncyB2YWx1ZQoraXMgdXNlZCB0byBzZXQgdGhlIGRlZmF1bHQgXGNvZGV7U0VSVkVSX1NPRlRXQVJFfSBXU0dJIGVudmlyb25tZW50Cit2YXJpYWJsZSwgYW5kIGFsc28gdG8gc2V0IGEgZGVmYXVsdCBcY29kZXtTZXJ2ZXI6fSBoZWFkZXIgaW4gSFRUUAorcmVzcG9uc2VzLiAgSXQgaXMgaWdub3JlZCBmb3IgaGFuZGxlcnMgKHN1Y2ggYXMgXGNsYXNze0Jhc2VDR0lIYW5kbGVyfQorYW5kIFxjbGFzc3tDR0lIYW5kbGVyfSkgdGhhdCBhcmUgbm90IEhUVFAgb3JpZ2luIHNlcnZlcnMuCitcZW5ke21lbWJlcmRlc2N9CisKKworCitcYmVnaW57bWV0aG9kZGVzY317Z2V0X3NjaGVtZX17fQorUmV0dXJuIHRoZSBVUkwgc2NoZW1lIGJlaW5nIHVzZWQgZm9yIHRoZSBjdXJyZW50IHJlcXVlc3QuICBUaGUgZGVmYXVsdAoraW1wbGVtZW50YXRpb24gdXNlcyB0aGUgXGZ1bmN0aW9ue2d1ZXNzX3NjaGVtZSgpfSBmdW5jdGlvbiBmcm9tCitcbW9kdWxle3dzZ2lyZWYudXRpbH0gdG8gZ3Vlc3Mgd2hldGhlciB0aGUgc2NoZW1lIHNob3VsZCBiZSBgYGh0dHAnJyBvcgorYGBodHRwcycnLCBiYXNlZCBvbiB0aGUgY3VycmVudCByZXF1ZXN0J3MgXG1lbWJlcntlbnZpcm9ufSB2YXJpYWJsZXMuCitcZW5ke21ldGhvZGRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtzZXR1cF9lbnZpcm9ufXt9CitTZXQgdGhlIFxtZW1iZXJ7ZW52aXJvbn0gYXR0cmlidXRlIHRvIGEgZnVsbHktcG9wdWxhdGVkIFdTR0kKK2Vudmlyb25tZW50LiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyBhbGwgb2YgdGhlIGFib3ZlIG1ldGhvZHMKK2FuZCBhdHRyaWJ1dGVzLCBwbHVzIHRoZSBcbWV0aG9ke2dldF9zdGRpbigpfSwgXG1ldGhvZHtnZXRfc3RkZXJyKCl9LAorYW5kIFxtZXRob2R7YWRkX2NnaV92YXJzKCl9IG1ldGhvZHMgYW5kIHRoZSBcbWVtYmVye3dzZ2lfZmlsZV93cmFwcGVyfQorYXR0cmlidXRlLiAgSXQgYWxzbyBpbnNlcnRzIGEgXGNvZGV7U0VSVkVSX1NPRlRXQVJFfSBrZXkgaWYgbm90IHByZXNlbnQsCithcyBsb25nIGFzIHRoZSBcbWVtYmVye29yaWdpbl9zZXJ2ZXJ9IGF0dHJpYnV0ZSBpcyBhIHRydWUgdmFsdWUgYW5kIHRoZQorXG1lbWJlcntzZXJ2ZXJfc29mdHdhcmV9IGF0dHJpYnV0ZSBpcyBzZXQuCitcZW5ke21ldGhvZGRlc2N9CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK01ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgZm9yIGN1c3RvbWl6aW5nIGV4Y2VwdGlvbiBoYW5kbGluZzoKKworXGJlZ2lue21ldGhvZGRlc2N9e2xvZ19leGNlcHRpb259e2V4Y19pbmZvfQorTG9nIHRoZSBcdmFye2V4Y19pbmZvfSB0dXBsZSBpbiB0aGUgc2VydmVyIGxvZy4gIFx2YXJ7ZXhjX2luZm99IGlzIGEKK1xjb2RleyhcdmFye3R5cGV9LCBcdmFye3ZhbHVlfSwgXHZhcnt0cmFjZWJhY2t9KX0gdHVwbGUuICBUaGUgZGVmYXVsdAoraW1wbGVtZW50YXRpb24gc2ltcGx5IHdyaXRlcyB0aGUgdHJhY2ViYWNrIHRvIHRoZSByZXF1ZXN0J3MKK1xjb2Rle3dzZ2kuZXJyb3JzfSBzdHJlYW0gYW5kIGZsdXNoZXMgaXQuICBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzCittZXRob2QgdG8gY2hhbmdlIHRoZSBmb3JtYXQgb3IgcmV0YXJnZXQgdGhlIG91dHB1dCwgbWFpbCB0aGUgdHJhY2ViYWNrCit0byBhbiBhZG1pbmlzdHJhdG9yLCBvciB3aGF0ZXZlciBvdGhlciBhY3Rpb24gbWF5IGJlIGRlZW1lZCBzdWl0YWJsZS4KK1xlbmR7bWV0aG9kZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9e3RyYWNlYmFja19saW1pdH0KK1RoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdG8gaW5jbHVkZSBpbiB0cmFjZWJhY2tzIG91dHB1dCBieSB0aGUKK2RlZmF1bHQgXG1ldGhvZHtsb2dfZXhjZXB0aW9uKCl9IG1ldGhvZC4gIElmIFxjb2Rle05vbmV9LCBhbGwgZnJhbWVzCithcmUgaW5jbHVkZWQuCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtlcnJvcl9vdXRwdXR9e2Vudmlyb24sIHN0YXJ0X3Jlc3BvbnNlfQorVGhpcyBtZXRob2QgaXMgYSBXU0dJIGFwcGxpY2F0aW9uIHRvIGdlbmVyYXRlIGFuIGVycm9yIHBhZ2UgZm9yIHRoZQordXNlci4gIEl0IGlzIG9ubHkgaW52b2tlZCBpZiBhbiBlcnJvciBvY2N1cnMgYmVmb3JlIGhlYWRlcnMgYXJlIHNlbnQKK3RvIHRoZSBjbGllbnQuCisKK1RoaXMgbWV0aG9kIGNhbiBhY2Nlc3MgdGhlIGN1cnJlbnQgZXJyb3IgaW5mb3JtYXRpb24gdXNpbmcKK1xjb2Rle3N5cy5leGNfaW5mbygpfSwgYW5kIHNob3VsZCBwYXNzIHRoYXQgaW5mb3JtYXRpb24gdG8KK1x2YXJ7c3RhcnRfcmVzcG9uc2V9IHdoZW4gY2FsbGluZyBpdCAoYXMgZGVzY3JpYmVkIGluIHRoZSBgYEVycm9yCitIYW5kbGluZycnIHNlY3Rpb24gb2YgXHBlcHszMzN9KS4KKworVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24ganVzdCB1c2VzIHRoZSBcbWVtYmVye2Vycm9yX3N0YXR1c30sCitcbWVtYmVye2Vycm9yX2hlYWRlcnN9LCBhbmQgXG1lbWJlcntlcnJvcl9ib2R5fSBhdHRyaWJ1dGVzIHRvIGdlbmVyYXRlCithbiBvdXRwdXQgcGFnZS4gIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgdG8gcHJvZHVjZSBtb3JlIGR5bmFtaWMKK2Vycm9yIG91dHB1dC4KKworTm90ZSwgaG93ZXZlciwgdGhhdCBpdCdzIG5vdCByZWNvbW1lbmRlZCBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUgdG8KK3NwaXQgb3V0IGRpYWdub3N0aWNzIHRvIGFueSBvbGQgdXNlcjsgaWRlYWxseSwgeW91IHNob3VsZCBoYXZlIHRvIGRvCitzb21ldGhpbmcgc3BlY2lhbCB0byBlbmFibGUgZGlhZ25vc3RpYyBvdXRwdXQsIHdoaWNoIGlzIHdoeSB0aGUgZGVmYXVsdAoraW1wbGVtZW50YXRpb24gZG9lc24ndCBpbmNsdWRlIGFueS4KK1xlbmR7bWV0aG9kZGVzY30KKworCisKKworXGJlZ2lue21lbWJlcmRlc2N9e2Vycm9yX3N0YXR1c30KK1RoZSBIVFRQIHN0YXR1cyB1c2VkIGZvciBlcnJvciByZXNwb25zZXMuICBUaGlzIHNob3VsZCBiZSBhIHN0YXR1cworc3RyaW5nIGFzIGRlZmluZWQgaW4gXHBlcHszMzN9OyBpdCBkZWZhdWx0cyB0byBhIDUwMCBjb2RlIGFuZCBtZXNzYWdlLgorXGVuZHttZW1iZXJkZXNjfQorCitcYmVnaW57bWVtYmVyZGVzY317ZXJyb3JfaGVhZGVyc30KK1RoZSBIVFRQIGhlYWRlcnMgdXNlZCBmb3IgZXJyb3IgcmVzcG9uc2VzLiAgVGhpcyBzaG91bGQgYmUgYSBsaXN0IG9mCitXU0dJIHJlc3BvbnNlIGhlYWRlcnMgKFxjb2RleyhcdmFye25hbWV9LCBcdmFye3ZhbHVlfSl9IHR1cGxlcyksIGFzCitkZXNjcmliZWQgaW4gXHBlcHszMzN9LiAgVGhlIGRlZmF1bHQgbGlzdCBqdXN0IHNldHMgdGhlIGNvbnRlbnQgdHlwZQordG8gXGNvZGV7dGV4dC9wbGFpbn0uCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZW1iZXJkZXNjfXtlcnJvcl9ib2R5fQorVGhlIGVycm9yIHJlc3BvbnNlIGJvZHkuICBUaGlzIHNob3VsZCBiZSBhbiBIVFRQIHJlc3BvbnNlIGJvZHkgc3RyaW5nLgorSXQgZGVmYXVsdHMgdG8gdGhlIHBsYWluIHRleHQsIGBgQSBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuICBQbGVhc2UKK2NvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJycKK1xlbmR7bWVtYmVyZGVzY30KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK01ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgZm9yIFxwZXB7MzMzfSdzIGBgT3B0aW9uYWwgUGxhdGZvcm0tU3BlY2lmaWMgRmlsZQorSGFuZGxpbmcnJyBmZWF0dXJlOgorCitcYmVnaW57bWVtYmVyZGVzY317d3NnaV9maWxlX3dyYXBwZXJ9CitBIFxjb2Rle3dzZ2kuZmlsZV93cmFwcGVyfSBmYWN0b3J5LCBvciBcY29kZXtOb25lfS4gIFRoZSBkZWZhdWx0IHZhbHVlCitvZiB0aGlzIGF0dHJpYnV0ZSBpcyB0aGUgXGNsYXNze0ZpbGVXcmFwcGVyfSBjbGFzcyBmcm9tCitcbW9kdWxle3dzZ2lyZWYudXRpbH0uCitcZW5ke21lbWJlcmRlc2N9CisKK1xiZWdpbnttZXRob2RkZXNjfXtzZW5kZmlsZX17fQorT3ZlcnJpZGUgdG8gaW1wbGVtZW50IHBsYXRmb3JtLXNwZWNpZmljIGZpbGUgdHJhbnNtaXNzaW9uLiAgVGhpcyBtZXRob2QKK2lzIGNhbGxlZCBvbmx5IGlmIHRoZSBhcHBsaWNhdGlvbidzIHJldHVybiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZgordGhlIGNsYXNzIHNwZWNpZmllZCBieSB0aGUgXG1lbWJlcnt3c2dpX2ZpbGVfd3JhcHBlcn0gYXR0cmlidXRlLiAgSXQKK3Nob3VsZCByZXR1cm4gYSB0cnVlIHZhbHVlIGlmIGl0IHdhcyBhYmxlIHRvIHN1Y2Nlc3NmdWxseSB0cmFuc21pdCB0aGUKK2ZpbGUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgdHJhbnNtaXNzaW9uIGNvZGUgd2lsbCBub3QgYmUgZXhlY3V0ZWQuCitUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCBqdXN0IHJldHVybnMgYSBmYWxzZSB2YWx1ZS4KK1xlbmR7bWV0aG9kZGVzY30KKworCitNaXNjZWxsYW5lb3VzIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CisKK1xiZWdpbnttZW1iZXJkZXNjfXtvcmlnaW5fc2VydmVyfQorVGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHNldCB0byBhIHRydWUgdmFsdWUgaWYgdGhlIGhhbmRsZXIncworXG1ldGhvZHtfd3JpdGUoKX0gYW5kIFxtZXRob2R7X2ZsdXNoKCl9IGFyZSBiZWluZyB1c2VkIHRvIGNvbW11bmljYXRlCitkaXJlY3RseSB0byB0aGUgY2xpZW50LCByYXRoZXIgdGhhbiB2aWEgYSBDR0ktbGlrZSBnYXRld2F5IHByb3RvY29sIHRoYXQKK3dhbnRzIHRoZSBIVFRQIHN0YXR1cyBpbiBhIHNwZWNpYWwgXGNvZGV7U3RhdHVzOn0gaGVhZGVyLgorCitUaGlzIGF0dHJpYnV0ZSdzIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZSBpbiBcY2xhc3N7QmFzZUhhbmRsZXJ9LCBidXQKK2ZhbHNlIGluIFxjbGFzc3tCYXNlQ0dJSGFuZGxlcn0gYW5kIFxjbGFzc3tDR0lIYW5kbGVyfS4KK1xlbmR7bWVtYmVyZGVzY30KKworXGJlZ2lue21lbWJlcmRlc2N9e2h0dHBfdmVyc2lvbn0KK0lmIFxtZW1iZXJ7b3JpZ2luX3NlcnZlcn0gaXMgdHJ1ZSwgdGhpcyBzdHJpbmcgYXR0cmlidXRlIGlzIHVzZWQgdG8KK3NldCB0aGUgSFRUUCB2ZXJzaW9uIG9mIHRoZSByZXNwb25zZSBzZXQgdG8gdGhlIGNsaWVudC4gIEl0IGRlZmF1bHRzIHRvCitcY29kZXsiMS4wIn0uCitcZW5ke21lbWJlcmRlc2N9CisKKworCisKKworXGVuZHtjbGFzc2Rlc2N9CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliemlwZmlsZS50ZXggYi9Eb2MvbGliL2xpYnppcGZpbGUudGV4CmluZGV4IDRlMDZlZjYuLjNkODFlNTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWIvbGliemlwZmlsZS50ZXgKKysrIGIvRG9jL2xpYi9saWJ6aXBmaWxlLnRleApAQCAtMTMsMTEgKzEzLDEyIEBACiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0b29scyB0byBjcmVhdGUsIHJlYWQsIHdyaXRlLCBhcHBlbmQsIGFuZCBsaXN0IGEKIFpJUCBmaWxlLiAgQW55IGFkdmFuY2VkIHVzZSBvZiB0aGlzIG1vZHVsZSB3aWxsIHJlcXVpcmUgYW4KIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZvcm1hdCwgYXMgZGVmaW5lZCBpbgotXGNpdGV0aXRsZVtodHRwOi8vd3d3LnBrd2FyZS5jb20vYXBwbm90ZS5odG1sXXtQS1pJUCBBcHBsaWNhdGlvbgotTm90ZX0uCitcY2l0ZXRpdGxlW2h0dHA6Ly93d3cucGt3YXJlLmNvbS9idXNpbmVzc19hbmRfZGV2ZWxvcGVycy9kZXZlbG9wZXIvYXBwbm90ZS9dCit7UEtaSVAgQXBwbGljYXRpb24gTm90ZX0uCiAKIFRoaXMgbW9kdWxlIGRvZXMgbm90IGN1cnJlbnRseSBoYW5kbGUgWklQIGZpbGVzIHdoaWNoIGhhdmUgYXBwZW5kZWQKLWNvbW1lbnRzLCBvciBtdWx0aS1kaXNrIFpJUCBmaWxlcy4KK2NvbW1lbnRzLCBvciBtdWx0aS1kaXNrIFpJUCBmaWxlcy4gSXQgY2FuIGhhbmRsZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIAorWklQNjQgZXh0ZW5zaW9ucyAodGhhdCBpcyBaSVAgZmlsZXMgdGhhdCBhcmUgbW9yZSB0aGFuIDQgR0J5dGUgaW4gc2l6ZSkuCiAKIFRoZSBhdmFpbGFibGUgYXR0cmlidXRlcyBvZiB0aGlzIG1vZHVsZSBhcmU6CiAKQEAgLTI1LDYgKzI2LDExIEBACiAgIFRoZSBlcnJvciByYWlzZWQgZm9yIGJhZCBaSVAgZmlsZXMuCiBcZW5ke2V4Y2Rlc2N9CiAKK1xiZWdpbntleGNkZXNjfXtMYXJnZVppcEZpbGV9CisgIFRoZSBlcnJvciByYWlzZWQgd2hlbiBhIFpJUCBmaWxlIHdvdWxkIHJlcXVpcmUgWklQNjQgZnVuY3Rpb25hbGl0eSBidXQgdGhhdAorICBoYXMgbm90IGJlZW4gZW5hYmxlZC4KK1xlbmR7ZXhjZGVzY30KKwogXGJlZ2lue2NsYXNzZGVzYyp9e1ppcEZpbGV9CiAgIFRoZSBjbGFzcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBaSVAgZmlsZXMuICBTZWUKICAgYGBcY2l0ZXRpdGxle1ppcEZpbGUgT2JqZWN0c30nJyAoc2VjdGlvbiBccmVme3ppcGZpbGUtb2JqZWN0c30pIGZvcgpAQCAtNjUsOSArNzEsOSBAQAogCiAKIFxiZWdpbntzZWVhbHNvfQotICBcc2VldGl0bGVbaHR0cDovL3d3dy5wa3dhcmUuY29tL2FwcG5vdGUuaHRtbF17UEtaSVAgQXBwbGljYXRpb24KLSAgICAgICAgICAgIE5vdGV9e0RvY3VtZW50YXRpb24gb24gdGhlIFpJUCBmaWxlIGZvcm1hdCBieSBQaGlsCi0gICAgICAgICAgICBLYXR6LCB0aGUgY3JlYXRvciBvZiB0aGUgZm9ybWF0IGFuZCBhbGdvcml0aG1zIHVzZWQufQorICBcc2VldGl0bGVbaHR0cDovL3d3dy5wa3dhcmUuY29tL2J1c2luZXNzX2FuZF9kZXZlbG9wZXJzL2RldmVsb3Blci9hcHBub3RlL10KKyAgICAgICAgICAge1BLWklQIEFwcGxpY2F0aW9uIE5vdGV9e0RvY3VtZW50YXRpb24gb24gdGhlIFpJUCBmaWxlIGZvcm1hdCBieQorICAgICAgICAgICAgUGhpbCBLYXR6LCB0aGUgY3JlYXRvciBvZiB0aGUgZm9ybWF0IGFuZCBhbGdvcml0aG1zIHVzZWQufQogCiAgIFxzZWV0aXRsZVtodHRwOi8vd3d3LmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9de0luZm8tWklQIEhvbWUgUGFnZX17CiAgICAgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgSW5mby1aSVAgcHJvamVjdCdzIFpJUCBhcmNoaXZlCkBAIC03Nyw3ICs4Myw3IEBACiAKIFxzdWJzZWN0aW9ue1ppcEZpbGUgT2JqZWN0cyBcbGFiZWx7emlwZmlsZS1vYmplY3RzfX0KIAotXGJlZ2lue2NsYXNzZGVzY317WmlwRmlsZX17ZmlsZVxvcHRpb25hbHssIG1vZGVcb3B0aW9uYWx7LCBjb21wcmVzc2lvbn19fSAKK1xiZWdpbntjbGFzc2Rlc2N9e1ppcEZpbGV9e2ZpbGVcb3B0aW9uYWx7LCBtb2RlXG9wdGlvbmFseywgY29tcHJlc3Npb25cb3B0aW9uYWx7LCBhbGxvd1ppcDY0fX19fSAKICAgT3BlbiBhIFpJUCBmaWxlLCB3aGVyZSBcdmFye2ZpbGV9IGNhbiBiZSBlaXRoZXIgYSBwYXRoIHRvIGEgZmlsZQogICAoYSBzdHJpbmcpIG9yIGEgZmlsZS1saWtlIG9iamVjdC4gIFRoZSBcdmFye21vZGV9IHBhcmFtZXRlcgogICBzaG91bGQgYmUgXGNvZGV7J3InfSB0byByZWFkIGFuIGV4aXN0aW5nIGZpbGUsIFxjb2Rleyd3J30gdG8KQEAgLTEwMCw2ICsxMDYsMTIgQEAKICAgaXMgc3BlY2lmaWVkIGJ1dCB0aGUgXHJlZm1vZHVsZXt6bGlifSBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSwKICAgXGV4Y2VwdGlvbntSdW50aW1lRXJyb3J9IGlzIGFsc28gcmFpc2VkLiAgVGhlIGRlZmF1bHQgaXMKICAgXGNvbnN0YW50e1pJUF9TVE9SRUR9LiAKKyAgSWYgXHZhcnthbGxvd1ppcDY0fSBpcyBcY29kZXtUcnVlfSB6aXBmaWxlIHdpbGwgY3JlYXRlIFpJUCBmaWxlcyB0aGF0IHVzZQorICB0aGUgWklQNjQgZXh0ZW5zaW9ucyB3aGVuIHRoZSB6aXBmaWxlIGlzIGxhcmdlciB0aGFuIDIgR0IuIElmIGl0IGlzIAorICBmYWxzZSAodGhlIGRlZmF1bHQpIFxtb2R1bGV7emlwZmlsZX0gd2lsbCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUKKyAgWklQIGZpbGUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zLiBaSVA2NCBleHRlbnNpb25zIGFyZSBkaXNhYmxlZCBieQorICBkZWZhdWx0IGJlY2F1c2UgdGhlIGRlZmF1bHQgXHByb2dyYW17emlwfSBhbmQgXHByb2dyYW17dW56aXB9IGNvbW1hbmRzIG9uCisgIFxVTklYe30gKHRoZSBJbmZvWklQIHV0aWxpdGllcykgZG9uJ3Qgc3VwcG9ydCB0aGVzZSBleHRlbnNpb25zLgogXGVuZHtjbGFzc2Rlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfXtjbG9zZX17fQpAQCAtMTMyLDggKzE0NCw4IEBACiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfXt0ZXN0emlwfXt9Ci0gIFJlYWQgYWxsIHRoZSBmaWxlcyBpbiB0aGUgYXJjaGl2ZSBhbmQgY2hlY2sgdGhlaXIgQ1JDJ3MuICBSZXR1cm4gdGhlCi0gIG5hbWUgb2YgdGhlIGZpcnN0IGJhZCBmaWxlLCBvciBlbHNlIHJldHVybiBcY29kZXtOb25lfS4KKyAgUmVhZCBhbGwgdGhlIGZpbGVzIGluIHRoZSBhcmNoaXZlIGFuZCBjaGVjayB0aGVpciBDUkMncyBhbmQgZmlsZQorICBoZWFkZXJzLiAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBiYWQgZmlsZSwgb3IgZWxzZSByZXR1cm4gXGNvZGV7Tm9uZX0uCiBcZW5ke21ldGhvZGRlc2N9CiAKIFxiZWdpbnttZXRob2RkZXNjfXt3cml0ZX17ZmlsZW5hbWVcb3B0aW9uYWx7LCBhcmNuYW1lXG9wdGlvbmFseywKQEAgLTI0Myw5ICsyNTUsOSBAQAogCiBcYmVnaW57bWVtYmVyZGVzY31bWmlwSW5mb117ZXh0cmF9CiAgIEV4cGFuc2lvbiBmaWVsZCBkYXRhLiAgVGhlCi0gIFxjaXRldGl0bGVbaHR0cDovL3d3dy5wa3dhcmUuY29tL2FwcG5vdGUuaHRtbF17UEtaSVAgQXBwbGljYXRpb24KLSAgTm90ZX0gY29udGFpbnMgc29tZSBjb21tZW50cyBvbiB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZSBkYXRhCi0gIGNvbnRhaW5lZCBpbiB0aGlzIHN0cmluZy4KKyAgXGNpdGV0aXRsZVtodHRwOi8vd3d3LnBrd2FyZS5jb20vYnVzaW5lc3NfYW5kX2RldmVsb3BlcnMvZGV2ZWxvcGVyL2FwcG5vdGUvXQorICB7UEtaSVAgQXBwbGljYXRpb24gTm90ZX0gY29udGFpbnMgc29tZSBjb21tZW50cyBvbiB0aGUgaW50ZXJuYWwKKyAgc3RydWN0dXJlIG9mIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGlzIHN0cmluZy4KIFxlbmR7bWVtYmVyZGVzY30KIAogXGJlZ2lue21lbWJlcmRlc2N9W1ppcEluZm9de2NyZWF0ZV9zeXN0ZW19CkBAIC0yODQsMTAgKzI5Niw2IEBACiAgIEJ5dGUgb2Zmc2V0IHRvIHRoZSBmaWxlIGhlYWRlci4KIFxlbmR7bWVtYmVyZGVzY30KIAotXGJlZ2lue21lbWJlcmRlc2N9W1ppcEluZm9de2ZpbGVfb2Zmc2V0fQotICBCeXRlIG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgZGF0YS4KLVxlbmR7bWVtYmVyZGVzY30KLQogXGJlZ2lue21lbWJlcmRlc2N9W1ppcEluZm9de0NSQ30KICAgQ1JDLTMyIG9mIHRoZSB1bmNvbXByZXNzZWQgZmlsZS4KIFxlbmR7bWVtYmVyZGVzY30KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliemlwaW1wb3J0LnRleCBiL0RvYy9saWIvbGliemlwaW1wb3J0LnRleAppbmRleCA3NzBlYTIxLi4wOThlNzg4IDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYnppcGltcG9ydC50ZXgKKysrIGIvRG9jL2xpYi9saWJ6aXBpbXBvcnQudGV4CkBAIC01MCw5ICs1MCw5IEBACiAKIAogXGJlZ2lue3NlZWFsc299Ci0gIFxzZWV0aXRsZVtodHRwOi8vd3d3LnBrd2FyZS5jb20vYXBwbm90ZS5odG1sXXtQS1pJUCBBcHBsaWNhdGlvbgotICAgICAgICAgICAgTm90ZX17RG9jdW1lbnRhdGlvbiBvbiB0aGUgWklQIGZpbGUgZm9ybWF0IGJ5IFBoaWwKLSAgICAgICAgICAgIEthdHosIHRoZSBjcmVhdG9yIG9mIHRoZSBmb3JtYXQgYW5kIGFsZ29yaXRobXMgdXNlZC59CisgIFxzZWV0aXRsZVtodHRwOi8vd3d3LnBrd2FyZS5jb20vYnVzaW5lc3NfYW5kX2RldmVsb3BlcnMvZGV2ZWxvcGVyL2FwcG5vdGUvXQorICAgICAgICAgICB7UEtaSVAgQXBwbGljYXRpb24gTm90ZX17RG9jdW1lbnRhdGlvbiBvbiB0aGUgWklQIGZpbGUgZm9ybWF0IGJ5CisgICAgICAgICAgICBQaGlsIEthdHosIHRoZSBjcmVhdG9yIG9mIHRoZSBmb3JtYXQgYW5kIGFsZ29yaXRobXMgdXNlZC59CiAKICAgXHNlZXBlcHswMjczfXtJbXBvcnQgTW9kdWxlcyBmcm9tIFppcCBBcmNoaXZlc317V3JpdHRlbiBieSBKYW1lcyBDLgogICAgICAgICAgIEFobHN0cm9tLCB3aG8gYWxzbyBwcm92aWRlZCBhbiBpbXBsZW1lbnRhdGlvbi4gUHl0aG9uIDIuMwpkaWZmIC0tZ2l0IGEvRG9jL2xpYi9zcWxpdGUzL2NvbXBsZXRlX3N0YXRlbWVudC5weSBiL0RvYy9saWIvc3FsaXRlMy9jb21wbGV0ZV9zdGF0ZW1lbnQucHkKaW5kZXggODlmYzI1MC4uMjI1MjVlMyAxMDA2NDQKLS0tIGEvRG9jL2xpYi9zcWxpdGUzL2NvbXBsZXRlX3N0YXRlbWVudC5weQorKysgYi9Eb2MvbGliL3NxbGl0ZTMvY29tcGxldGVfc3RhdGVtZW50LnB5CkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICAgICAgICBpZiBidWZmZXIubHN0cmlwKCkudXBwZXIoKS5zdGFydHN3aXRoKCJTRUxFQ1QiKToKICAgICAgICAgICAgICAgICBwcmludCBjdXIuZmV0Y2hhbGwoKQogICAgICAgICBleGNlcHQgc3FsaXRlMy5FcnJvciwgZToKLSAgICAgICAgICAgIHByaW50ICJBbiBlcnJvciBvY2N1cmVkOiIsIGUuYXJnc1swXQorICAgICAgICAgICAgcHJpbnQgIkFuIGVycm9yIG9jY3VycmVkOiIsIGUuYXJnc1swXQogICAgICAgICBidWZmZXIgPSAiIgogCiBjb24uY2xvc2UoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYi90a2ludGVyLnRleCBiL0RvYy9saWIvdGtpbnRlci50ZXgKaW5kZXggNDA1ZjA0MS4uZGI1MmNiZCAxMDA2NDQKLS0tIGEvRG9jL2xpYi90a2ludGVyLnRleAorKysgYi9Eb2MvbGliL3RraW50ZXIudGV4CkBAIC0xOCwxMCArMTgsOSBAQAogbW9kdWxlIFxtb2R1bGV7XF90a2ludGVyfSBwcm92aWRlcyBhIHRocmVhZHNhZmUgbWVjaGFuaXNtIHdoaWNoIGFsbG93cwogUHl0aG9uIGFuZCBUY2wgdG8gaW50ZXJhY3QuCiAKLVRrIGlzIG5vdCB0aGUgb25seSBHVUkgZm9yIFB5dGhvbiwgYnV0IGlzIGhvd2V2ZXIgdGhlIG1vc3QgY29tbW9ubHkKLXVzZWQgb25lOyBzZWUgc2VjdGlvbn5ccmVme290aGVyLWd1aS1tb2R1bGVzfSwgYGBPdGhlciBVc2VyIEludGVyZmFjZQotTW9kdWxlcyBhbmQgUGFja2FnZXMsJycgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gb3RoZXIgR1VJIHRvb2xraXRzIGZvcgotUHl0aG9uLgorVGsgaXMgbm90IHRoZSBvbmx5IEdVSSBmb3IgUHl0aG9uOyBzZWUKK3NlY3Rpb25+XHJlZntvdGhlci1ndWktcGFja2FnZXN9LCBgYE90aGVyIFVzZXIgSW50ZXJmYWNlIE1vZHVsZXMgYW5kCitQYWNrYWdlcywnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBvdGhlciBHVUkgdG9vbGtpdHMgZm9yIFB5dGhvbi4KIAogJSBPdGhlciBzZWN0aW9ucyBJIGhhdmUgaW4gbWluZCBhcmUKICUgVGtpbnRlciBpbnRlcm5hbHMKQEAgLTEwMywxNCArMTAyLDE0IEBACiBcZW5ke2NsYXNzZGVzY30KIAogXGJlZ2lue2Z1bmNkZXNjfXtUY2x9e3NjcmVlbk5hbWU9Tm9uZSwgYmFzZU5hbWU9Tm9uZSwgY2xhc3NOYW1lPSdUaycsIHVzZVRrPTB9Ci1UaGUgXGZ1bmN0aW9ue1RjbH0gZnVuY3Rpb24gaXMgYSBmYWN0b3J5IGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYW4gb2JqZWN0Ci1tdWNoIGxpa2UgdGhhdCBjcmVhdGVkIGJ5IHRoZSBcY2xhc3N7VGt9IGNsYXNzLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdAotaW5pdGlhbGl6ZSB0aGUgVGsgc3Vic3lzdGVtLiAgVGhpcyBpcyBtb3N0IG9mdGVuIHVzZWZ1bCB3aGVuIGRyaXZpbmcgdGhlIFRjbAotaW50ZXJwcmV0ZXIgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgb25lIGRvZXNuJ3Qgd2FudCB0byBjcmVhdGUgZXh0cmFuZW91cwotdG9wbGV2ZWwgd2luZG93cywgb3Igd2hlcmUgb25lIGNhbm5vdCAoaS5lLiBVbml4L0xpbnV4IHN5c3RlbXMgd2l0aG91dCBhbiBYCi1zZXJ2ZXIpLiAgQW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlIFxmdW5jdGlvbntUY2x9IG9iamVjdCBjYW4gaGF2ZSBhIFRvcGxldmVsCi13aW5kb3cgY3JlYXRlZCAoYW5kIHRoZSBUayBzdWJzeXN0ZW0gaW5pdGlhbGl6ZWQpIGJ5IGNhbGxpbmcgaXRzCi1cbWV0aG9ke2xvYWR0a30gbWV0aG9kLgorVGhlIFxmdW5jdGlvbntUY2x9IGZ1bmN0aW9uIGlzIGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGFuCitvYmplY3QgbXVjaCBsaWtlIHRoYXQgY3JlYXRlZCBieSB0aGUgXGNsYXNze1RrfSBjbGFzcywgZXhjZXB0IHRoYXQgaXQKK2RvZXMgbm90IGluaXRpYWxpemUgdGhlIFRrIHN1YnN5c3RlbS4gIFRoaXMgaXMgbW9zdCBvZnRlbiB1c2VmdWwgd2hlbgorZHJpdmluZyB0aGUgVGNsIGludGVycHJldGVyIGluIGFuIGVudmlyb25tZW50IHdoZXJlIG9uZSBkb2Vzbid0IHdhbnQKK3RvIGNyZWF0ZSBleHRyYW5lb3VzIHRvcGxldmVsIHdpbmRvd3MsIG9yIHdoZXJlIG9uZSBjYW5ub3QgKHN1Y2ggYXMKK1xVTklYL0xpbnV4IHN5c3RlbXMgd2l0aG91dCBhbiBYIHNlcnZlcikuICBBbiBvYmplY3QgY3JlYXRlZCBieSB0aGUKK1xmdW5jdGlvbntUY2x9IG9iamVjdCBjYW4gaGF2ZSBhIFRvcGxldmVsIHdpbmRvdyBjcmVhdGVkIChhbmQgdGhlIFRrCitzdWJzeXN0ZW0gaW5pdGlhbGl6ZWQpIGJ5IGNhbGxpbmcgaXRzIFxtZXRob2R7bG9hZHRrfSBtZXRob2QuCiBcdmVyc2lvbmFkZGVkezIuNH0KIFxlbmR7ZnVuY2Rlc2N9CiAKQEAgLTMxNiwxMCArMzE1LDEwIEBACiBwZXJpb2RzLiAgRm9yIGV4YW1wbGUsIFxjb2Rley5teUFwcC5jb250cm9sUGFuZWwub2tCdXR0b259IG1pZ2h0IGJlCiB0aGUgbmFtZSBvZiBhIHdpZGdldC4KIAotXGl0ZW1bXHZhcntvcHRpb25zfSBdCitcaXRlbVtcdmFye29wdGlvbnN9XQogY29uZmlndXJlIHRoZSB3aWRnZXQncyBhcHBlYXJhbmNlIGFuZCBpbiBzb21lIGNhc2VzLCBpdHMKIGJlaGF2aW9yLiAgVGhlIG9wdGlvbnMgY29tZSBpbiB0aGUgZm9ybSBvZiBhIGxpc3Qgb2YgZmxhZ3MgYW5kIHZhbHVlcy4KLUZsYWdzIGFyZSBwcm9jZWVkZWQgYnkgYSBgLScsIGxpa2UgdW5peCBzaGVsbCBjb21tYW5kIGZsYWdzLCBhbmQKK0ZsYWdzIGFyZSBwcm9jZWVkZWQgYnkgYSBgLScsIGxpa2UgXFVOSVh7fSBzaGVsbCBjb21tYW5kIGZsYWdzLCBhbmQKIHZhbHVlcyBhcmUgcHV0IGluIHF1b3RlcyBpZiB0aGV5IGFyZSBtb3JlIHRoYW4gb25lIHdvcmQuCiBcZW5ke2Rlc2NyaXB0aW9ufQogCkBAIC0xODA2LDI0ICsxODA1LDI5IEBACiB0aHJvdWdoIHRoZSBUay9UY2wgbGF5ZXIufQogXGVuZHtzZWVhbHNvKn0KIAotCi1UayBpcyBub3QgdGhlIG9ubHkgR1VJIGZvciBQeXRob24sIGJ1dCBpcyBob3dldmVyIHRoZQotbW9zdCBjb21tb25seSB1c2VkIG9uZS4KK090aGVyIEdVSSBwYWNrYWdlcyBhcmUgYWxzbyBhdmFpbGFibGUgZm9yIFB5dGhvbjoKIAogXGJlZ2lue3NlZWFsc28qfQotXHNlZXRpdGxlW2h0dHA6Ly93d3cud3h3aW5kb3dzLm9yZ117d3hXaW5kb3dzfXsKLWlzIGEgR1VJIHRvb2xraXQgdGhhdCBjb21iaW5lcyB0aGUgbW9zdCBhdHRyYWN0aXZlIGF0dHJpYnV0ZXMgb2YgUXQsCi1UaywgTW90aWYsIGFuZCBHVEsrIGluIG9uZSBwb3dlcmZ1bCBhbmQgZWZmaWNpZW50IHBhY2thZ2UuIEl0IGlzCi1pbXBsZW1lbnRlZCBpbiBcQ3BwLiB3eFdpbmRvd3Mgc3VwcG9ydHMgdHdvIGZsYXZvcnMgb2YgXFVOSVh7fQotaW1wbGVtZW50YXRpb246IEdUSysgYW5kIE1vdGlmLCBhbmQgdW5kZXIgV2luZG93cywgaXQgaGFzIGEgc3RhbmRhcmQKLU1pY3Jvc29mdCBGb3VuZGF0aW9uIENsYXNzZXMgKE1GQykgYXBwZWFyYW5jZSwgYmVjYXVzZSBpdCB1c2VzIFdpbjMyCi13aWRnZXRzLiAgVGhlcmUgaXMgYSBQeXRob24gY2xhc3Mgd3JhcHBlciwgaW5kZXBlbmRlbnQgb2YgVGtpbnRlci4KLQotd3hXaW5kb3dzIGlzIG11Y2ggcmljaGVyIGluIHdpZGdldHMgdGhhbiBccmVmbW9kdWxle1RraW50ZXJ9LCB3aXRoIGl0cwotaGVscCBzeXN0ZW0sIHNvcGhpc3RpY2F0ZWQgSFRNTCBhbmQgaW1hZ2Ugdmlld2VycywgYW5kIG90aGVyCi1zcGVjaWFsaXplZCB3aWRnZXRzLCBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiwgYW5kIHByaW50aW5nIGNhcGFiaWxpdGllcy4KK1xzZWV0aXRsZVtodHRwOi8vd3d3Lnd4cHl0aG9uLm9yZ117d3hQeXRob259eword3hQeXRob24gaXMgYSBjcm9zcy1wbGF0Zm9ybSBHVUkgdG9vbGtpdCBmb3IgUHl0aG9uIHRoYXQgaXMgYnVpbHQKK2Fyb3VuZCB0aGUgcG9wdWxhciBcdWxpbmt7d3hXaWRnZXRzfXtodHRwOi8vd3d3Lnd4d2lkZ2V0cy5vcmcvfSBcQ3Bwe30KK3Rvb2xraXQuIKBJdCBwcm92aWRlcyBhIG5hdGl2ZSBsb29rIGFuZCBmZWVsIGZvciBhcHBsaWNhdGlvbnMgb24KK1dpbmRvd3MsIE1hYyBPUyBYLCBhbmQgXFVOSVh7fSBzeXN0ZW1zIGJ5IHVzaW5nIGVhY2ggcGxhdGZvcm0ncyBuYXRpdmUKK3dpZGdldHMgd2hlcmUgZXZlciBwb3NzaWJsZSwgKEdUSysgb24gXFVOSVgtbGlrZSBzeXN0ZW1zKS4goEluCithZGRpdGlvbiB0byBhbiBleHRlbnNpdmUgc2V0IG9mIHdpZGdldHMsIHd4UHl0aG9uIHByb3ZpZGVzIGNsYXNzZXMgZm9yCitvbmxpbmUgZG9jdW1lbnRhdGlvbiBhbmQgY29udGV4dCBzZW5zaXRpdmUgaGVscCwgcHJpbnRpbmcsIEhUTUwKK3ZpZXdpbmcsIGxvdy1sZXZlbCBkZXZpY2UgY29udGV4dCBkcmF3aW5nLCBkcmFnIGFuZCBkcm9wLCBzeXN0ZW0KK2NsaXBib2FyZCBhY2Nlc3MsIGFuIFhNTC1iYXNlZCByZXNvdXJjZSBmb3JtYXQgYW5kIG1vcmUsIGluY2x1ZGluZyBhbgorZXZlciBncm93aW5nIGxpYnJhcnkgb2YgdXNlci1jb250cmlidXRlZCBtb2R1bGVzLiCgQm90aCB0aGUgd3hXaWRnZXRzCithbmQgd3hQeXRob24gcHJvamVjdHMgYXJlIHVuZGVyIGFjdGl2ZSBkZXZlbG9wbWVudCBhbmQgY29udGludW91cworaW1wcm92ZW1lbnQsIGFuZCBoYXZlIGFjdGl2ZSBhbmQgaGVscGZ1bCB1c2VyIGFuZCBkZXZlbG9wZXIKK2NvbW11bml0aWVzLgogfQotXHNlZXRpdGxlW117UHlRdH17Citcc2VldGl0bGVbaHR0cDovL3d3dy5hbWF6b24uY29tL2V4ZWMvb2JpZG9zL0FTSU4vMTkzMjM5NDYyMV0KK3t3eFB5dGhvbiBpbiBBY3Rpb259eworVGhlIHd4UHl0aG9uIGJvb2ssIGJ5IE5vZWwgUmFwcGluIGFuZCBSb2JpbiBEdW5uLgorfQorXHNlZXRpdGxle1B5UXR9ewogUHlRdCBpcyBhIFxwcm9ncmFte3NpcH0td3JhcHBlZCBiaW5kaW5nIHRvIHRoZSBRdCB0b29sa2l0LiAgUXQgaXMgYW4KIGV4dGVuc2l2ZSBcQ3Bwe30gR1VJIHRvb2xraXQgdGhhdCBpcyBhdmFpbGFibGUgZm9yIFxVTklYLCBXaW5kb3dzIGFuZAogTWFjIE9TIFguICBccHJvZ3JhbXtzaXB9IGlzIGEgdG9vbCBmb3IgZ2VuZXJhdGluZyBiaW5kaW5ncyBmb3IgXENwcHt9Cg==