PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+CjxodG1sPjxoZWFkPjx0aXRsZT5XZWIgVG9vbHMgUGxhdGZvcm08L3RpdGxlPgoKPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vZGVmYXVsdF9zdHlsZS5jc3MiIHJlbD0ic3R5bGVzaGVldCI+PC9oZWFkPgoKCjxib2R5PgoKPGRpdiBhbGlnbj0icmlnaHQiPgogIDxmb250IGZhY2U9IlRpbWVzIE5ldyBSb21hbiwgVGltZXMsIHNlcmlmIiBzaXplPSIyIj5Db3B5cmlnaHQgqSAyMDA0IE5hY2kgRGFpLjwvZm9udD4KICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgIDx0Ym9keT4KICAgICAgPHRyPgogICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0ibGVmdCIgYmdjb2xvcj0iIzAwODBjMCIgdmFsaWduPSJ0b3AiPjxiPjxmb250IGZhY2U9IkFyaWFsLEhlbHZldGljYSI+PGZvbnQgY29sb3I9IiNmZmZmZmYiPkVjbGlwc2UKICAgICAgICAgIEFydGljbGU8L2ZvbnQ+PC9mb250PjwvYj48L3RkPgogICAgICA8L3RyPgogICAgPC90Ym9keT4KICA8L3RhYmxlPgo8L2Rpdj4KPGRpdiBhbGlnbj0ibGVmdCI+CiAgPGgxIHRpdGxlPSJSQ1AgVHV0b3JpYWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9pbWFnZXMvSWRlYS5qcGciIGFsaWduPSJtaWRkbGUiIGhlaWdodD0iODYiIHdpZHRoPSIxMjAiPjwvaDE+CjwvZGl2Pgo8aDEgYWxpZ249ImNlbnRlciI+V1RQIFR1dG9yaWFscyCWIEJ1aWxkaW5nIGFuZCBSdW5uaW5nIGEgV2ViIEFwcGxpY2F0aW9uPC9oMT4KPHAgY2xhc3M9InN1bW1hcnkiPlRoaXMgZG9jdW1lbnQgaXMgdGhlIGZpcnN0IGluIGEgc2VyaWVzIG9mIHR1dG9yaWFscyB3aGVyZQogIHdlIHdpbGwgZGVtb25zdHJhdGUgaG93IHlvdSBjYW4gdXNlIHRoZSByaWNoIHNldCBvZiB0b29scyBhbmQgQVBJcyB0aGF0IGNvbWVzCiAgd2l0aCB0aGUgV2ViIFRvb2xzIFBsYXRmb3JtIFByb2plY3QuIFRoaXMgZmlyc3QgdHV0b3JpYWwgd2lsbCBnaXZlIHlvdSBhIHN0ZXAKICBieSBzdGVwIHRvdXIgb2YgdXNpbmcgc29tZSB0aGUgdG9vbHMgZm9yIHdlYiBkZXZlbG9wbWVudC4gRm9yIHRoaXMgcHVycG9zZQp3ZSB3aWxsIGJ1aWxkIGFuZCBydW4gYSBKMkVFIHdlYiBhcHBsaWNhdGlvbiB1c2luZyBXVFAgdG9vbHMgYW5kIEFwYWNoZSBUb21jYXQuIDwvcD4KPHA+PGI+QnkgTmFjaSBEYWksIEV0ZXJhdGlvbiBBLlMuPC9iPjxicj4KPGZvbnQgc2l6ZT0iLTEiPkRlY2VtYmVyIDcsIDIwMDQ8L2ZvbnQ+PC9wPgo8ZGl2IGFsaWduPSJyaWdodCI+CiAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICA8dGJvZHk+CiAgICAgIDx0cj4KICAgICAgICA8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiMwMDgwYzAiIHZhbGlnbj0idG9wIj48Yj48Zm9udCBmYWNlPSJBcmlhbCxIZWx2ZXRpY2EiPjxmb250IGNvbG9yPSIjZmZmZmZmIj5JbnRyb2R1Y3Rpb248L2ZvbnQ+PC9mb250PjwvYj48L3RkPgogICAgICA8L3RyPgogICAgPC90Ym9keT4KICA8L3RhYmxlPgo8L2Rpdj4KPHA+VGhpcyBkb2N1bWVudCBpcyB0aGUgZmlyc3QgaW4gYSBzZXJpZXMgb2YgdHV0b3JpYWxzIHdoZXJlIHdlIHdpbGwgZGVtb25zdHJhdGUKICBob3cgeW91IGNhbiB1c2UgdGhlIHJpY2ggc2V0IG9mIHRvb2xzIGFuZCBBUElzIHRoYXQgY29tZXMgd2l0aCB0aGUgV2ViIFRvb2xzCiAgUGxhdGZvcm0gUHJvamVjdC4gVGhpcyBmaXJzdCB0dXRvcmlhbCB3aWxsIGdpdmUgeW91IGEgc3RlcCBieSBzdGVwIHRvdXIgb2YKICB1c2luZyBzb21lIHRoZSB0b29scyBmb3Igd2ViIGRldmVsb3BtZW50LiBGb3IgdGhpcyBwdXJwb3NlIHdlIHdpbGwgYnVpbGQgYW5kCnJ1biBhIEoyRUUgd2ViIGFwcGxpY2F0aW9uIHVzaW5nIDxhIGhyZWY9Ii4uLy4uLy4uLyI+V1RQPC9hPiB0b29scyBhbmQgPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90b21jYXQiIHRhcmdldD0iX3RvcCI+QXBhY2hlIFRvbWNhdDwvYT4uIDwvcD4KPGRpdiBhbGlnbj0icmlnaHQiPgogIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRib2R5PgogICAgICA8dHI+CiAgICAgICAgPHRkIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjMDA4MGMwIiB2YWxpZ249InRvcCI+PGI+PGZvbnQgZmFjZT0iQXJpYWwsSGVsdmV0aWNhIj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+R2V0dGluZwogICAgICAgICAgICAgICAgU3RhcnRlZDwvZm9udD48L2ZvbnQ+PC9iPjwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3Rib2R5PgogIDwvdGFibGU+CjwvZGl2PgoKPHA+PGgzPkphdmEgRGV2ZWxvcG1lbnQgS2l0PC9oMz4KICBZb3Ugd2lsbCBuZWVkIGEgSmF2YSBEZXZlbG9wbWVudCBLaXQgKEpESykgdmVyc2lvbiAxLjQuMiBhbmQgYWJvdmUgYXMgRWNsaXBzZQogICAgMy4xIHJlcXVpcmVzIGl0LiBKYXZhIFJ1bnRpbWUgRW52aXJvbm1lbnQgKEpSRSkgaXMgc3VmZmljaWVudCBmb3IgRWNsaXBzZQogICAgYnV0IGl0IHdpbGwgbm90IGJlIHN1aXRhYmxlIGZvciB3ZWIgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQuICBZb3UgY2FuIGdldAogIGxhdGVzdCBKREsgZnJvbSA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tIiB0YXJnZXQ9Il90b3AiPlN1bjwvYT4uPGJyPgo8L3A+CjxwPgo8aW1nIHNyYz0iaW1hZ2VzL25vdGUuZ2lmIiBhbHQ9Ik5vdGU6ICIgaGVpZ2h0PSIxMyIgd2lkdGg9IjYyIj4KTW9zdCBzZXJ2ZXIKICAgIHJ1bnRpbWVzIHJlcXVpcmUgdG9vbHMsIHN1Y2ggYXMgdGhlIGphdmEgY29tcGlsZXIgKGZvdW5kIGluIHRvb2xzLmphciksIHRoYXQKYXJlIG9ubHkgZm91bmQgaW4gdGhlIEpESyBidXQgbm90IHRoZSBKUkUuPC9wPgoKPHA+CjxoMz5TZXJ2ZXIgUnVudGltZTwvaDM+CldlIGFyZSBnb2luZyB0byBiZSBidWlsZCBhIHdlYiBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgb24gYSBzZXJ2ZXIuIFRvIGRvIHRoaXMKdHV0b3JpYWwgeW91IHdpbGwgbmVlZCBhIHNlcnZlciBydW50aW1lIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IFdUUC4gPGEgaHJlZj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90b21jYXQiIHRhcmdldD0iX3RvcCI+QXBhY2hlIFRvbWNhdDwvYT4sCjxhIGhyZWY9Imh0dHA6Ly9qb25hcy5vYmplY3R3ZWIub3JnIiB0YXJnZXQ9Il90b3AiPk9iamVjdFdlYiBKb25hczwvYT4sIGFuZCA8YSBocmVmPSJodHRwOi8vd3d3Lmpib3NzLm9yZyIgdGFyZ2V0PSJfdG9wIj5KQm9zczwvYT4gYXJlIHNvbWUgb2YgdGhlIE9TUyBsaWNlbnNlZCBzZXJ2ZXIgcnVudGltZXMgc3VwcG9ydGVkCmJ5IFdUUC4gWW91IHdpbGwgbmVlZCB0byBkb3dubG9hZCBhbmQgaW5zdGFsbCB0aGUgc2VydmVyIHJ1bnRpbWUgYmVmb3JlIHlvdSBjYW4Kc3RhcnQgd29ya2luZyB3aXRoIFdUUC4gSXQgZG9lcyBub3QgY29tZSB3aXRoIG9uZS4gTGF0ZXIgeW91IHdpbGwgbGVhcm4gaG93IHRvCnRlbGwgV1RQIHRvIHVzZSB5b3VyIHByZWZlcnJlZCBzZXJ2ZXIgcnVudGltZS48YnI+CjwvcD4KCgo8aDM+RWNsaXBzZSBhbmQgb3RoZXIgRWNsaXBzZSBQcm9qZWN0czwvaDM+CjxwPk9idmlvdXNseSwgeW91IHdpbGwgbmVlZCBhbiBlY2xpcHNlIGluc3RhbGxhdGlvbi4gVGhlIEVjbGlwc2UgZHJpdmVyIHVzZWQKICBpbiB0aGlzIHR1dG9yaWFsIGlzIGVjbGlwc2UtU0RLLTMuMU0zLWxpbnV4LWd0ay56aXAuIFlvdSBjYW4gZmluZCBhIHN1aXRhYmxlCiAgZHJpdmVyIGZvciB5b3VyIHBsYXRmb3JtIGF0IGhlcmUuIFdUUCB1c2VzIGNvbXBvbmVudHMgZnJvbSBvdGhlciBlY2xpcHNlIHByb2plY3RzOgogIFRoZSBlY2xpcHNlIG1vZGVsaW5nIGZyYW1ld29yaywgZW1mLCBqYXZhIGVtZiBtb2RlbCwgamVtLCBhcmUgdXNlZCB0byBkZWZpbmUKICBtb2RlbHMgZm9yIGFydGlmYWN0cyBkZWZpbmVkIGluIG1hbnkgamF2YSwgdzNjLCB4bWwgYW5kIGoyZWUgc3RhbmRhcmRzOyBUaGUKICBncmFwaGljYWwgZWRpdGluZyBmcmFtZXdvcmssIGdlZiwgaXMgdXNlZCB0byBwcm92aWRlIGdyYXBoaWNhbCBlZGl0aW5nIGNhcGFiaWxpdGllcwogIGZvciB4bWwsIHhzZCBhbmQgd3NkbCBlZGl0b3JzLCBldGMuIFlvdSBjYW4gb2J0YWluIHRoZXNlIGNvbXBvbmVudHMgZnJvbSB0aGVpcgpwcm9qZWN0cy48L3A+Cjx1bD4KICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYiIHRhcmdldD0iX3RvcCI+RU1GPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZ2VmIiB0YXJnZXQ9Il90b3AiPkdFRjwvYT48L2xpPgogIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3ZlcCIgdGFyZ2V0PSJfdG9wIj5KRU08L2E+PC9saT4KPC91bD4KPGgzPldlYiBUb29scyBQbGF0Zm9ybTwvaDM+CjxwPllvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgdGhlIGZ1bGwgV1RQIHBhY2thZ2UgdGhhdCBpcyB1c2VkIGluIHRoaXMgdHV0b3JpYWwKZnJvbSA8YSBocmVmPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvZG93bmxvYWRzIj53dHAgZG93bmxvYWRzPC9hPi4gWW91IHdpbGwgbmVlZCBhIFdUUCBydW50aW1lLjwvcD4KPHA+T25jZSB5b3UgaGF2ZSBldmVyeXRoaW5nIGRvd25sb2FkZWQsIGluc3RhbGwgSkRLIGFuZCB5b3VyIGZhdm9yaXRlIHNlcnZlcgogIHJ1bnRpbWUsIGFuZCB1bnppcCBlY2xpcHNlLCBlbWYsIGdlZiwgamVtIGFuZCB3dHAgemlwIGZpbGVzIHRvIGEgZm9sZGVyLiBZb3UKYXJlIHJlYWR5IHRvIGdvITwvcD4KPGRpdiBhbGlnbj0icmlnaHQiPgogIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRib2R5PgogICAgICA8dHI+CiAgICAgICAgPHRkIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjMDA4MGMwIiB2YWxpZ249InRvcCI+PGI+PGZvbnQgZmFjZT0iQXJpYWwsSGVsdmV0aWNhIj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+U2V0dXA8L2ZvbnQ+PC9mb250PjwvYj48L3RkPgogICAgICA8L3RyPgogICAgPC90Ym9keT4KICA8L3RhYmxlPgo8L2Rpdj4KCjxwPgo8aDM+UHJlZmVyZW5jZXM8L2gzPgogIAo8cD5BZnRlciB5b3UgbGF1bmNoIGVjbGlwc2UgZm9yIHRoZSBmaXJzdCB0aW1lLCBidXQgYmVmb3JlIHdlIGNhbiBidWlsZCBvdXIgZmlyc3QKICB3ZWIgYXBwbGljYXRpb24sIHdlIG5lZWQgdG8gZG8gYSBsaXR0bGUgZWNsaXBzZSBob3VzZSBrZWVwaW5nOiBJZiBpdCBpcyBub3QKICBhbHJlYWR5IGRlZmluZWQsIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZSBKYXZhIHByZWZlcmVuY2VzIHRvIHBvaW50IHRvIHlvdXIKICBKREsgaW5zdGFsbGF0aW9uIChzZWUgZmlndXJlKS4gWW91IHNob3VsZCBoYXZlIG9idGFpbmVkIHRoZSBsYXRlc3QgSkRLIGZyb20KPGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbSIgdGFyZ2V0PSJfdG9wIj5TdW48L2E+LjwvcD4KPHA+PGltZyBzcmM9ImltYWdlcy9maWd1cmUxLnBuZyIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzNjUiPjwvcD4KPGgzPkNob29zZSBhIFNlcnZlciBSdW50aW1lIEVudmlyb25tZW50PC9oMz4KPHA+VGhpcyBzdGVwIGludm9sdmVzIGNoYW5naW5nIG9yIGNyZWF0aW5nIHRoZSBzZXR0aW5ncyBmb3IgSW5zdGFsbGVkIFNlcnZlcgogIFJ1bnRpbWVzLiBEdXJpbmcgd2ViIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LCB3ZSB3aWxsIG5lZWQgYSBzZXJ2ZXIgcnVudGltZQogIGVudmlyb25tZW50IHRvIHRlc3QsIGRlYnVnIGFuZCBydW4gb3VyIHByb2plY3QuIFdlIGJlZ2luIGJ5IHRlbGxpbmcgd3RwIHdoYXQKICBvdXIgc2VydmVyIHJ1bnRpbWUgaXMsIGFuZCB3aGVyZSBpdCBpcyBsb2NhdGVkLiBBICYjODIyMDtzZXJ2ZXIgcnVudGltZSBlbnZpcm9ubWVudCYjODIyMTsgaXMKICBub3QgYSBzZXJ2ZXIuIEl0IHByb3ZpZGVzIHRoZSBlbnZpcm9ubWVudCwgbGlicmFyaWVzIGFuZCBpbmZyYXN0cnVjdHVyZSB0aGF0CiAgYSAmIzgyMjA7c2VydmVyJiM4MjIxOyBuZWVkcy4gQSBzZXJ2ZXIgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZlciBydW50aW1lCiAgdGhhdCBjYW4gaG9zdCBvdXIgd2ViIGFwcGxpY2F0aW9ucyBhbmQgb3RoZXIgc2VydmVyLXNpZGUgY29tcG9uZW50cy4gVG8gZGVmaW5lCmEgc2VydmVyIHJ1bnRpbWUsIHdlIG5lZWQgdG8gdmlzaXQgdGhlIGFwcHJvcHJpYXRlIFByZWZlcmVuY2VzIHBhZ2U6PC9wPgo8cD48aW1nIHNyYz0iaW1hZ2VzL2ZpZ3VyZTIucG5nIiB3aWR0aD0iNDA0IiBoZWlnaHQ9IjQwMiI+PC9wPgo8cD5IZXJlIHlvdSB3aWxsIGZpbmQgYSBsaXN0IG9mIHNlcnZlciBydW50aW1lcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIHByZXZpb3VzbHkuCiAgWW91IGNhbiBjaG9vc2UgYSBzZXJ2ZXIgcnVudGltZSBhbmQgY2hhbmdlIGl0cyBwcm9wZXJ0aWVzLiBUbyBhZGQgYSBuZXcgb25lCiAgY2xpY2sgJiM4MjIwO0FkZCYjODIzMDsmIzgyMjE7LiBBIHdpemFyZCB3aWxsIHBvcHVwIGFuZCBkaXNwbGF5IGEgbGlzdCBvZiBzZXJ2ZXIKICBydW50aW1lcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgV1RQLiBDaG9vc2UgeW91ciBzZXJ2ZXIgcnVudGltZSBmcm9tIHRoZSBsaXN0LgogIEpvbmFzIGFuZCBKQm9zcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCB1bmRlciB0aGUgJiM4MjIwO0dlbmVyaWMgU2VydmVyIFJ1bnRpbWUmIzgyMjE7LgogIEJhc2ljICYjODIyMDtKMkVFIFJ1bnRpbWUgTGlicmFyeSYjODIyMTsgaXMgbm90IGEgdHJ1ZSBzZXJ2ZXIgcnVudGltZSwgYnV0CiAgY2FuIGJlIHVzZWQgZm9yIGNvZGluZyBzdXBwb3J0IG9ubHkuIEl0IGRvZXMgbm90IHByb3ZpZGUgYSBzZXJ2ZXIgaW5zdGFuY2UKdGhhdCBjYW4gYmUgdXNlZCB0byBydW4gd2ViIGFydGlmYWN0cy48L3A+CjxwPkFmdGVyIHlvdSBjbGljayAmIzgyMjA7TmV4dCYjODIyMTssIHlvdSB3aWxsIGhhdmUgdG8gY2hvb3NlIHRoZSBKREsgYW5kIHRoZQogIGZvbGRlciB3aGVyZSB5b3UgaGF2ZSBpbnN0YWxsZWQgeW91ciBzZXJ2ZXIgcnVudGltZS4gT2YgY291cnNlLCBiYXNlZCBvbiB5b3VyCiAgY2hvaWNlIG9mIHRoZSBzZXJ2ZXIgcnVudGltZSwgeW91IHdpbGwgYmUgYXNrZWQgdG8gcHJvdmlkZSBkaWZmZXJlbnQgcHJvcGVydGllcy4KICBDbGljayBmaW5pc2guIE5vdyB3ZSBjYW4gZG8gdGhlIGZ1biBwYXJ0Ljxicj4KPGltZyBzcmM9ImltYWdlcy9maWd1cmUzLnBuZyIgd2lkdGg9IjMxNyIgaGVpZ2h0PSIzNjQiPjwvcD4KPHA+IDxpbWcgc3JjPSJpbWFnZXMvbm90ZS5naWYiIGFsdD0iTm90ZTogIiBoZWlnaHQ9IjEzIiB3aWR0aD0iNjIiPiBXZQogIGNob3NlIEFwYWNoZSBUb21jYXQuIFlvdSBjYW4gYWxzbyBjaG9vc2UgYW5vdGhlciBzZXJ2ZXIgc3VjaCBhcyBPYmplY3RXZWIgSm9uYXMuCiAgSWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoZW0gYXMgeW91ciBydW50aW1lLCBzZWxlY3QgdGhlICYjODIyMDtHZW5lcmljIFNlcnZlciYjODIyMTssCiAgYW5kIGZvbGxvdyB0aGUgd2l6YXJkIHRvIGRlZmluZSB0aGUgcHJvcGVydGllcyBmb3IgSm9uYXMsIEpCb3NzIG9yIFdlYmxvZ2ljLgogIFRoZXJlIGFyZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZvciBzZXJ2ZXIgcnVudGltZXM7IEFwYWNoZSBUb21jYXQgcHJvdmlkZXMgZHluYW1pYwogIGRldmVsb3BtZW50IHN1cHBvcnQ7IGkuZTogdGhlIGFiaWxpdHkgdG8gcnVuIHRoZSB3ZWIgYXBwbGljYXRpb24gZnJvbSB0aGUgZWNsaXBzZQogIHByb2plY3Qgd2l0aG91dCB0aGUgbmVlZCB0byBwdWJsaXNoIHRoZSBhcnRpZmFjdHMgdG8gYSBzZXJ2ZXIuIEdlbmVyaWMgc2VydmVyCiAgZG9lcyBub3Qgc3VwcG9ydCBkeW5hbWljIGRldmVsb3BtZW50LCBidXQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHB1Ymxpc2ggdGhlCmFydGlmYWN0cyAoeW91ciB3ZWIgYXBwbGljYXRpb24pIHRvIHRoZSBzZXJ2ZXIgd2hlbiB5b3UgcnVuLjwvcD4KPGRpdiBhbGlnbj0icmlnaHQiPgogIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRib2R5PgogICAgICA8dHI+CiAgICAgICAgPHRkIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjMDA4MGMwIiB2YWxpZ249InRvcCI+PGI+PGZvbnQgY29sb3I9IiNGRkZGRkYiZmFjZT0iQXJpYWwsSGVsdmV0aWNhIj5EZXZlbG9waW5nCiAgICAgICAgdGhlIEFwcGxpY2F0aW9uPC9mb250PjwvYj48L3RkPgogICAgICA8L3RyPgogICAgPC90Ym9keT4KICA8L3RhYmxlPgo8L2Rpdj4KCjxwPkluIHRoaXMgc2VjdGlvbiB3ZSB3aWxsIGNyZWF0ZSBhIEoyRUUgd2ViIGFwcGxpY2F0aW9uIHRoYXQgY29udGFpbnMgdHlwaWNhbAogIGNvbXBvbmVudHMgc3VjaCBhcyBzZXJ2bGV0cyBhbmQgSlNQcy4gV2Ugd2lsbDo8YnI+CiAgJiM4MjI2OyAKICBDcmVhdGUgYSBwcm9qZWN0IHdpdGggYSB3ZWIgbW9kdWxlPGJyPgogICYjODIyNjsgCiAgQ3JlYXRlIGEgc2VydmxldDxicj4KICAmIzgyMjY7IAogIEVkaXQgZGVwbG95bWVudCBkZXNjcmlwdG9yPGJyPgogICYjODIyNjsgCkNyZWF0ZSBhbmQgZWRpdCBhIEpTUAo8cD48aDM+Q3JlYXRlIGEgSjJFRSBXZWIgUHJvamVjdCB3aXRoIGEgd2ViIG1vZHVsZTwvaDM+CjxwPkdvIHRvIE5ldy0mZ3Q7UHJvamVjdC4gQ2hvb3NlIFdlYiBjYXRlZ29yeSBmcm9tIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB3aXphcmRzCiAgICB0byBjcmVhdGUgYSBuZXcgZWNsaXBzZSByZXNvdXJjZS4gWW91IHdpbGwgZmluZCB0d28gcHJvamVjdCB0eXBlcyBhdmFpbGFibGUKICAgIHVuZGVyIHRoaXMgY2F0ZWdvcnkuIFNpbXBsZSBXZWIgUHJvamVjdCBpcyBhIGJhc2ljIEVjbGlwc2UgcmVzb3VyY2UgcHJvamVjdAogICAgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmVyLiBXZSBhcmUgaW50ZXJlc3RlZCBpbiBjcmVhdGluZyBhIEoyRUUKICAgIFdlYiBBcHBsaWNhdGlvbiwgc28gd2Ugd2lsbCBjaG9vc2UgdGhlIEoyRUUgV2ViIFByb2plY3QgaGVyZTo8YnI+CjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlNC5wbmciIHdpZHRoPSIzMjciIGhlaWdodD0iMzgwIj48L3A+CjxwPkEgSjJFRSBXZWIgUHJvamVjdCBpcyBhIHR5cGUgb2YgSmF2YSBwcm9qZWN0IHRoYXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgdG8KICBob3N0IGEgc2VydmVyLXNpZGUgYXBwbGljYXRpb24uIEl0IG5lZWRzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIFRhcmdldCBTZXJ2ZXIuIDxicj4KICBBIHRhcmdldCBzZXJ2ZXIgcHJvdmlkZXMgdGhlIGNvbnRhaW5lciB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZXhlY3V0ZSBvdXIgd2ViCiAgYXBwbGljYXRpb24uIFNwZWNpZmljYWxseSwgaXQgd2lsbCBwcm92aWRlIGEgc2V0IG9mIGxpYnJhcmllcyAoamFycyksIHRoYXQKICBhcmUgYWRkZWQgdG8gdGhlIHByb2plY3QgY2xhc3NwYXRoLCB3aGljaCBhcmUgbmVlZGVkIHRvIGNvbXBpbGUgb3VyIGN1c3RvbQogIGNsYXNzZXMuIEUuZy46IHRvIGNyZWF0ZSBhIG5ldyBTZXJ2bGV0LCB3ZSBuZWVkIGphdmF4LnNlcnZsZXQuKiBwYWNrYWdlcy4gVGhlc2UKICBhcmUgbm90IGEgcGFydCBvZiB0aGUgSkRLIGxpYnJhcmllcy4gU2VydmVyIHJ1bnRpbWUgcHJvdmlkZXMgdGhlbSB0byB0aGUgcHJvamVjdC4KICBJZiB5aXUgaGF2ZSBza2lwcGVkIHRoZSBwcmV2aW9zIHN0ZXAgd2hlcmUgd2UgZGVmaW5lZCBhIHNlcnZlciBydW50aW1lLCB5b3UKICB3aWxsIGdldCBhIGNoYW5jZSB0byBkZWZpbmUgb25lIGhlcmUgYnkgY2xpY2tpbmcgb24gdGhlIE5ldyYjODIzMDsuPGJyPgogIE1ha2Ugc3VyZSB0aGF0ICYjODIyMDtBZGQgbW9kdWxlIHRvIGFuIEVBUiBwcm9qZWN0JiM4MjIxOyBpcyBub3Qgc2VsZWN0ZWQuCiAgV2Ugd2lsbCBjcmVhdGUgYSBzdGFuZGFsb25lIHdlYiBhcHBsaWNhdGlvbiB0aGF0IGNhbiBiZSBkZXBsb3llZCBhcyBhIHN0YW5kYXJkCiAgd2ViIG1vZHVsZS48YnI+CiAgRmluYWxseSwgd2Ugd2lsbCBjaGFuZ2UgdGhlIGNvbnRleHQgcm9vdCB0byAmIzgyMjA7dHV0b3JpYWwmIzgyMjE7LiBUaGlzIGlzCiAgdXNlZCB3aGVuIHlvdSBhY2Nlc3MgdGhlIHdlYiBhcHBsaWNhdGlvbiB3aXRoIGEgVVJMLCBpLmUuIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC90dXRvcmlhbCA8YnI+CiAgPGltZyBzcmM9ImltYWdlcy9maWd1cmU1LnBuZyIgd2lkdGg9IjQ5MyIgaGVpZ2h0PSI0ODYiPiAgPC9wPgo8cD5XaGVuIHRoZSB3aXphcmQgY29tcGxldGVzIGl0cyB0YXNrcywgeW91IHdpbGwgZmluZCB0aGF0IGl0IGhhcyBjcmVhdGUgYSBuZXcKICBKYXZhIFByb2plY3QgYW5kIGhhcyBpbml0aWFsaXplZCBpdCBzbyB0aGF0IHlvdSBjYW4gc3RhcnQgd2l0aCB5b3VyIGRldmVsb3BtZW50CiAgcmlnaHQgYXdheTogSXQgaGFzIGNyZWF0ZWQgYSBqYXZhIHNvdXJjZSBmb2xkZXIuIFlvdSB3aWxsIGFkZCB5b3VyIGN1c3RvbSBqYXZhCiAgcGFja2FnZXMgYW5kIGNsYXNzZXMgaGVyZS4gSXQgaGFzIGRlZmluZWQgdGhlIGNsYXNzcGF0aCAoSlJFIGFuZCBUb21jYXQpIHNvCiAgdGhhdCB5b3Ugd2lsbCBoYXZlIEoyRUUgbGlicmFyaWVzIGluIHlvdXIgcHJvamVjdCBjbGFzc3BhdGguIEl0IGhhcyBjcmVhdGVkCiAgYSByZXNvdXJjZSBmb2xkZXIgbmFtZWQgJiM4MjIwO1dlYiBDb250ZW50JiM4MjIxOywgd2hpY2ggbWltaWNzIHRoZSBzdGFuZGFyZAogIFdBUiBzdHJ1Y3R1cmUgZnJvbSB0aGUgSjJFRSBzcGVjaWZpY2F0aW9uLiBJdCB3aWxsIGNvbnRhaW4gdGhlIHdlYiByZXNvdXJjZXMKICB0aGF0IHdpbGwgYmUgcGFja2FnZWQgd2l0aCB5b3VyIEoyRUUgd2ViIG1vZHVsZS4gQWxsIGFydGlmYWN0cyBpbnNpZGUgdGhpcwogIGZvbGRlciBhcmUgYWNjZXNzaWJsZSBmcm9tIHRoZSBXZWIgQXBwbGljYXRpb24gY29udGV4dC48L3A+CjxwPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlNi5wbmciIHdpZHRoPSI1NzciIGhlaWdodD0iNDE2Ij48L3A+CjxwPjxoMz5UaGUgRGVzaWduPC9oMz4KPHA+VGhpcyBpcyBhIHNpbXBsZSBIZWxsbyBXVFAgYXBwbGljYXRpb24uIFdlIHdpbGwgY2FsbCBhIHNpbXBsZSAmIzgyMjA7c25vb3AKICBzZXJ2bGV0JiM4MjIxOyB0aGF0IHdpbGwgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGJyb3dzZXIgaW4gYQogIEpTUCBmaWxlLjxicj4KPGltZyBzcmM9ImltYWdlcy9maWd1cmU3LnBuZyIgd2lkdGg9IjQzOSIgaGVpZ2h0PSIzODMiPiAgPC9wPgo8cD48aDM+Q3JlYXRlIGEgU2VydmxldDwvaDM+CiAgPHA+R28gdG8gTmV3LSZndDtDbGFzcy4gQ3JlYXRlIGEgbmV3IEphdmEgY2xhc3MgdGhhdCBpcyBhIHN1YmNsYXNzIG9mIHRoZSBzdGFuZGFyZApqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ6PC9wPgogIDxwPjxicj4KICAgIDxpbWcgc3JjPSJpbWFnZXMvZmlndXJlOC5wbmciIHdpZHRoPSI0OTAiIGhlaWdodD0iNTU1Ij48L3A+CjxwPkFkZCB0aGUgY29kZSBwcm92aWRlZCBpbiBMaXN0aW5nIDEgdG8gdGhlIHNlcnZsZXQ6PC9wPgogIDxwPjxiPkxpc3RpbmcgMS4gU25vb3BTZXJ2bGV0LmphdmE8L2I+PC9wPgo8cHJlPnBhY2thZ2Ugb3JnLmVjbGlwc2Uud3RwLnR1dG9yaWFsOwoKaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CgppbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOwppbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OwppbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwoKcHVibGljIGNsYXNzIFNub29wU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKCXB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKCQkJdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKCQlTdHJpbmcgdXNlckFnZW50ID0gIHJlcS5nZXRIZWFkZXIoInVzZXItYWdlbnQiKTsKCQlTdHJpbmcgY2xpZW50QnJvd3NlciA9ICAiTm90IGtub3duISI7CQoJCWlmKCB1c2VyQWdlbnQgIT0gbnVsbCkKCQkJY2xpZW50QnJvd3NlciA9IHVzZXJBZ2VudDsKCQlyZXEuc2V0QXR0cmlidXRlKCJjbGllbnQuYnJvd3NlciIsY2xpZW50QnJvd3NlciApOwoJCXJlcS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL3Nob3dCcm93c2VyLmpzcCIpLmZvcndhcmQocmVxLHJlc3ApOwoJfQp9PC9wcmU+Cgo8cD4KPGgzPkVkaXQgV2ViIE1vZHVsZSBEZXBsb3ltZW50IERlc2NyaXB0b3I8L2gzPgpXZWIgbW9kdWxlcyBpbiBKMkVFIGhhcyBhIGRlcGxveW1lbnQgZGVzY3JpcHRvciB3aGVyZSB5b3UgY29uZmlndXJlIHRoZSB3ZWIgYXBwbGljYXRpb24KYW5kIGl0cyBjb21wb25lbnRzLiBUaGlzIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMgaXMgY2FsbGVkIHRoZSB3ZWIueG1sLiBBY2NvcmRpbmcKdG8gdGhlIEoyRUUgc3BlY2lmaWNhdGlvbiwgaXQgbXVzdCBiZSBsb2NhdGVkIGluIHRoZSBXRUItSU5GIGZvbGRlci4gd2ViLnhtbAptdXN0IGhhdmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTZXJ2bGV0IGFuZCB0aGUgU2VydmxldCBVUkkgbWFwcGluZy4gRW50ZXIgdGhlCmZvbGxvd2luZyBsaW5lcyBpbnRvIHdlYi54bWw6PC9wPgoKPHA+PGI+TGlzdGluZyAyLiBEZXBsb3ltZW50IERlc2NyaXB0b3Igd2ViLnhtbAo8L2I+PC9wPgo8cHJlPiAgJmx0O3NlcnZsZXQmZ3Q7PGJyPiAgICZsdDtzZXJ2bGV0LW5hbWUmZ3Q7U25vb3AgU2VydmxldCZsdDsvc2VydmxldC1uYW1lJmd0Ozxicj4gICAmbHQ7c2VydmxldC1jbGFzcyZndDtvcmcuZWNsaXBzZS53dHAudHV0b3JpYWwuU25vb3BTZXJ2bGV0Jmx0Oy9zZXJ2bGV0LWNsYXNzJmd0Ozxicj4gICZsdDsvc2VydmxldCZndDs8YnI+ICAmbHQ7c2VydmxldC1tYXBwaW5nJmd0Ozxicj4gICAgJmx0O3NlcnZsZXQtbmFtZSZndDtTbm9vcCBTZXJ2bGV0Jmx0Oy9zZXJ2bGV0LW5hbWUmZ3Q7PGJyPiAgICAmbHQ7dXJsLXBhdHRlcm4mZ3Q7L3Nub29wLyombHQ7L3VybC1wYXR0ZXJuJmd0Ozxicj4gJmx0Oy9zZXJ2bGV0LW1hcHBpbmcmZ3Q7PGJyPgo8L3ByZT4KCjxwPgpZb3UgY2FuIG9idGFpbiBjb2RlIGFzc2lzdCBmcm9tIHRoZSBXVFAgWE1MIGVkaXRvciBkdXJpbmcgdGhpcyBwcm9jZXNzIGJ5IGhpdHRpbmcKW0N0cmxdK1tTcGFjZV0gYXMgdXN1YWwuPC9wPgo8cD48aW1nIHNyYz0iaW1hZ2VzL2ZpZ3VyZTkucG5nIiB3aWR0aD0iMzgwIiBoZWlnaHQ9IjE2MCI+PC9wPgoKCgo8aDM+QWRkIEpTUDwvaDM+CjxwPgpHbyB0byBOZXctJmd0O0ZpbGUuIFNlbGVjdCB0aGUgV2ViQ29udGVudCBmb2xkZXIgYW5kIGVudGVyIHNob3dCcm93c2VyLmpzcCBhcwp0aGUgZmlsZSBuYW1lLgo8L3A+CjxwPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlMTAucG5nIiB3aWR0aD0iMzgxIiBoZWlnaHQ9IjU4MCI+PC9wPgo8cD5PdXIgSlNQIGZpbGUgd2lsbCBiZSBvcGVuZWQgd2l0aCBhICYjODIyMDtKU1AgU291cmNlIFBhZ2UgRWRpdG9yJiM4MjIxOy4gSGl0CiAgW0N0cmxdK1tTcGFjZV0gYW5kIGNob29zZSBodG1sIHRlbXBsYXRlLiBZb3UgY2FuIGdldCBIVE1MLCBKYXZhU2NyaXB0LCBKU1AKYW5kIEphdmEgY29kZSBhc3Npc3QgaW4gYSBKU1AgRWRpdG9yLjwvcD4KPHA+PGltZyBzcmM9ImltYWdlcy9maWd1cmUxMS5wbmciIHdpZHRoPSIzMTIiIGhlaWdodD0iMjA2Ij48L3A+CjxwPkpTUCBTb3VyY2UgUGFnZSBFZGl0b3IgYWxzbyBwcm92aWRlcyBqYXZhIGNvZGUgYXNzaXN0LiBUcnkgdGhlIGZvbGxvd2luZyBpbnNpZGUKYSBKU1AgZXhwcmVzc2lvbjo8L3A+CjxwPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlMTIucG5nIiB3aWR0aD0iMzg1IiBoZWlnaHQ9IjgwIj48L3A+CjxwPkF0IHRoZSBlbmQgeW91ciBKU1Agc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBjb2RlIDwvcD4KPHA+PGltZyBzcmM9ImltYWdlcy90aXAuZ2lmIiBhbHQ9IlRpcDogIiBoZWlnaHQ9IjEzIiB3aWR0aD0iNjIiPlVzZQogIHRoZSB0YWJsZSB0ZW1wbGF0ZTwvcD4KPHA+PGI+TGlzdGluZyAzLiBzaG93QnJvd3Nlci5qc3A8L2I+PC9wPgo8cHJlPiZsdDtodG1sJmd0Ozxicj4mbHQ7aGVhZCZndDsmbHQ7dGl0bGUmZ3Q7U2hvdyBCcm93c2VyJmx0Oy90aXRsZSZndDsmbHQ7L2hlYWQmZ3Q7PGJyPiZsdDtib2R5Jmd0Ozxicj4mbHQ7dGFibGUgYm9yZGVyPSZxdW90OzEmcXVvdDsmZ3Q7PGJyPgkmbHQ7dHImZ3Q7ICZsdDt0aCZndDtIZWFkZXImbHQ7L3RoJmd0OyZsdDt0aCZndDtWYWx1ZSZsdDsvdGgmZ3Q7PGJyPgkmbHQ7L3RyJmd0Ozxicj4JJmx0O3RyJmd0Ozxicj4JCSZsdDt0ZCZndDt1c2VyLWFnZW50Jmx0Oy90ZCZndDs8YnI+CQkmbHQ7dGQmZ3Q7Jmx0OyU9IHJlcXVlc3QuZ2V0QXR0cmlidXRlKCZxdW90O2NsaWVudC5icm93c2VyJnF1b3Q7KSUmZ3Q7Jmx0Oy90ZCZndDs8YnI+CSZsdDsvdHImZ3Q7PGJyPiZsdDsvdGFibGUmZ3Q7PGJyPiZsdDsvYm9keSZndDs8YnI+Jmx0Oy9odG1sJmd0OzwvcHJlPgoKCjxoMz5FeHBsb3Jpbmcgb3VyIHdvcms6PC9oMz4KPHA+R28gdG8gdGhlIG1lbnUgV2luZG93ICZndDtTaG93IFZpZXcgYW5kIHNlbGVjdCB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3IGZyb20KdGhlIEoyRUUgY2F0ZWdvcnkuPC9wPgoKPHA+PGltZyBzcmM9ImltYWdlcy9maWd1cmUxMy5wbmciIHdpZHRoPSIyOTUiIGhlaWdodD0iMTYwIj48L3A+CjxwPlByb2plY3QgZXhwbG9yZXIgaXMgYSBzbWFydCBuYXZpZ2F0b3IgdGhhdCBrbm93cyBhYm91dCB0aGUgd2ViIGFuZCBKMkVFIGFydGlmYWN0cy4KICBZb3Ugd2lsbCBiZSBhYmxlIHRvIGJyb3dzZSB5b3VyIHdlYiBtb2R1bGUsIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMgYW5kIHRoZQogIGNvbnRlbnRzIG9mIHRoZXNlLiBGb3IgZXhhbXBsZSwgd2UgY2FuIG5hdmlnYXRlIHRvIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IKYW5kIG9ic2VydmVyIG91ciBzZXJ2bGV0IGFuZCBpdHMgbWFwcGluZy48L3A+CjxwPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlMTQucG5nIiB3aWR0aD0iMjg0IiBoZWlnaHQ9IjI1OCI+PC9wPgo8cD4mbmJzcDs8L3A+CjxkaXYgYWxpZ249InJpZ2h0Ij4KICA8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgIDx0Ym9keT4KICAgICAgPHRyPgogICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0ibGVmdCIgYmdjb2xvcj0iIzAwODBjMCIgdmFsaWduPSJ0b3AiPjxiPjxmb250IGNvbG9yPSIjRkZGRkZGImZhY2U9IkFyaWFsLEhlbHZldGljYSI+UnVubmluZwogICAgICAgICAgICAgIHRoZSBBcHBsaWNhdGlvbjwvZm9udD48L2I+PC90ZD4KICAgICAgPC90cj4KICAgIDwvdGJvZHk+CiAgPC90YWJsZT4KPC9kaXY+CgoKCjxwPkluIHRoaXMgc2VjdGlvbiB3ZSB3aWxsIHJ1biBvdXIgcmVjZW50bHkgZGV2ZWxvcGVkIHdlYiBhcHBsaWNhdGlvbiBvbiBhIHNlcnZlci4KICBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSB3aWxsOjxicj4KICAmIzgyMjY7IAogIENyZWF0ZSBhIHNlcnZlcjxicj4KICAmIzgyMjY7IAogIEFkZCBvdXIgd2ViIG1vZHVsZSB0byBhIHNlcnZlcjxicj4KICAmIzgyMjY7IAogIFJ1biB0aGUgc2VydmVyPGJyPgogICYjODIyNjsgCiAgUnVuIHRoZSB3ZWIgYXBwbGljYXRpb24uPGJyPgo8L3A+CjxoMz5Qcm9qZWN0IGhhcyBTZXJ2ZXIgUHJvcGVydGllczwvaDM+CjxwPkluIHRoZSBKYXZhIFBhY2thZ2UgZXhwbG9yZXIgb3IgdGhlIEoyRUUgUHJvamVjdCBFeHBsb3JlciwgaGlnaGxpZ2h0IHlvdXIKICBwcm9qZWN0IG5hbWUgV1RQLVR1dG9yaWFsLUkgYW5kIHVzaW5nIHRoZSByaWdodC1jbGljayBtZW51IChtb3VzZSBtZW51KSBjaG9vc2UKICBwcm9wZXJ0aWVzLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGhpdCBbQWx0XStbRW50ZXJdLiBUaGlzIHdpbGwgZGlzcGxheSBwcm9qZWN0CiAgcHJvcGVydGllcyB3aW5kb3cuIEhlcmUgd2UgY2FuIHNldCB0aGUgdGFyZ2V0IHJ1bnRpbWUgYW5kIHRoZSBkZWZhdWx0IHNlcnZlcgogIGZvciB0aGUgcHJvamVjdC4gUmVtZW1iZXIgdGhhdCB3ZSBoYXZlIGNob3NlbiB0aGUgdGFyZ2V0IHJ1bnRpbWUgd2hlbiB3ZSBjcmVhdGVkCiAgdGhlIHByb2plY3QuIFRoaXMgcnVudGltZSBoYXMgcHJvdmlkZWQgdGhlIGNsYXNzcGF0aCBmb3IgdGhlIHByb2plY3QuIFlvdSBjYW4KICBjaG9vc2UgYSBkaWZmZXJlbnQgcnVudGltZSBoZXJlLiBUaGlzIHdpbGwgY2hhbmdlIHRoZSBsaWJyYXJpZXMgdGhhdCBhcmUgdXNlZAogIHRvIGNvbXBpbGUgeW91ciBhcHBsaWNhdGlvbi4gSGVyZSB3ZSBjYW4gYWxzbyBjaG9vc2UgYSBkZWZhdWx0IHNlcnZlci4gVGhlCiAgZGVmYXVsdCBzZXJ2ZXIgaXMgdGhlIHNlcnZlciBvbiB3aGljaCBvdXIgYXBwbGljYXRpb24gd2lsbCBiZSBkZXBsb3llZCBhbmQKICBydW4uIElmIHlvdSBoYXZlIG5vdCBwcmV2aW91c2x5IGRlZmluZWQgYSBzZXJ2ZXIgYXMgc2V0IGl0IGFzIGRlZmF1bHQsIHlvdQogIHdpbGwgc2VlIGEgbWVzc2FnZSBpbiB0aGUgcHJvcGVydGllcyB2aWV3LiBUbyBjcmVhdGUgYSBzZXJ2ZXIgeW91IHdpbGwgaGF2ZQp0byBjYW5jZWwgdGhpcyB3aW5kb3cgYW5kIGNvbWUgYmFjayB0byBpdCBhZnRlciB5b3UgaGF2ZSBjcmVhdGVkIHRoZSBzZXJ2ZXIuPC9wPgo8cD48aW1nIHNyYz0iaW1hZ2VzL2ZpZ3VyZTE1LnBuZyIgd2lkdGg9IjQyOSIgaGVpZ2h0PSIyNTUiPjwvcD4KPHA+Jm5ic3A7PC9wPgo8aDM+Q3JlYXRlIGEgU2VydmVyPC9oMz4KPHA+ClNlcnZlcnMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIFNlcnZlciBWaWV3LiAgVG8gb3BlbiBhIHNlcnZlciB2aWV3IGdvIHRvIFdpbmRvdy0mZ3Q7U2hvdwpWaWV3LSZndDtPdGhlciYjODIzMDssIGFuZCBjaG9vc2UgdGhlIFNlcnZlcnMgdW5kZXIgdGhlIFNlcnZlciBjYXRlZ29yeS48L3A+CjxwPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlMTYucG5nIiB3aWR0aD0iMjk2IiBoZWlnaHQ9IjQyMSI+PC9wPgo8cD5UaGUgc2VydmVyIHZpZXcgYWxsb3dzIHlvdSB0byBjcmVhdGUgc2VydmVycyBmb3IgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQgc2VydmVyCnJ1bnRpbWUgZW52aXJvbm1lbnRzLiBVc2UgdGhlIHJpZ2h0IGNsaWNrIG1lbnUgdG8gY3JlYXRlIGEgbmV3IHNlcnZlci4gSW4gdGhlCiAgZm9sbG93aW5nIHdpemFyZCwgY2hvb3NlIHRoZSBzZXJ2ZXIgYWRkcmVzcyB3aGVyZSB5b3Ugd2lsbCBkZXBsb3kgKHB1Ymxpc2gpCiAgeW91ciB3ZWIgbW9kdWxlLiBZb3Ugd2lsbCBhbHNvIGhhdmUgdG8gY2hvb3NlIHRoZSBzZXJ2ZXIgdHlwZSBhbmQsIGlmIHlvdSBoYXZlCiAgZGVmaW5lZCBtb3JlIHRoYW4gb25lIGluc3RhbGxlZCBlbnZpcm9ubWVudCBmb3IgdGhpcyBzZXJ2ZXIgKHNlZSBwcmVmZXJlbmNlcyksCmNob29zZSB0aGUgc2VydmVyIHJ1bnRpbWUuIFdoZW4geW91IGNsaWNrIGZpbmlzaCwgeW91IGhhdmUgYSBTZXJ2ZXIhPC9wPgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+CiAgPHRyPgogICAgPHRkPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlMTcucG5nIiB3aWR0aD0iMzUwIiBoZWlnaHQ9IjYzIj48L3RkPgogICAgPHRkPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlMTgucG5nIiB3aWR0aD0iMzYzIiBoZWlnaHQ9IjQxMyI+PC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8cD5Ob3cgeW91IGNhbiBnbyBiYWNrIHRvIHRoZSBwcm9qZWN0IHByb3BlcnRpZXMgYW5kIHNldCB5b3VyIGRlZmF1bHQgc2VydmVyLjwvcD4KPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgogIDx0cj4KICAgIDx0ZD48aW1nIHNyYz0iaW1hZ2VzL2ZpZ3VyZTE5LnBuZyIgd2lkdGg9IjM4OSIgaGVpZ2h0PSIxMjEiPjwvdGQ+CiAgICA8dGQ+PGltZyBzcmM9ImltYWdlcy9maWd1cmUyMC5wbmciIHdpZHRoPSIzNzAiIGhlaWdodD0iMjc0Ij48L3RkPgogIDwvdHI+CjwvdGFibGU+CjxoMz5TdGFydCB0aGUgU2VydmVyPC9oMz4KPHA+IEluIHRoZSBzZXJ2ZXIgdmlldywgZG8gYSBtZW51LWNsaWNrIG9uIHlvdXIgc2VydmVyIGFuZCBjaG9vc2Ugc3RhcnQsIG9yIHlvdQogIGNhbiBzaW1wbHkgY2xpY2sgdGhlIHN0YXJ0IGJ1dHRvbi4gWW91IHdpbGwgc2VlIHRoZSAmIzgyMjA7U3RhdHVzJiM4MjIxOyBvZgogIHRoZSBzZXJ2ZXIgZnJvbSBTdG9wcGVkIHRvICYjODIyMDtTdGFydGluZyYjODIyMTssIGFuZCB3aGVuIHRoZSBzZXJ2ZXIgaXMgcmVhZHkKaXQgd2lsbCBjaGFuZ2UgaXRzIHN0YXR1cyB0byAmcXVvdDtTdGFydGVkJnF1b3Q7LjwvcD4KPHA+PGltZyBzcmM9ImltYWdlcy9maWd1cmUyMS5wbmciIHdpZHRoPSIzNTMiIGhlaWdodD0iMjUzIj4gPC9wPgo8aDM+Jm5ic3A7PC9oMz4KPGgzPlJ1bm5pbmcgdGhlIEFwcGxpY2F0aW9uPC9oMz4KPHA+IE9wZW4geW91ciBmYXZvcml0ZSBicm93c2VyIGFuZCB0eXBlIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC90dXRvcmlhbC9zbm9vcC48L3A+CjxwPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlMjIucG5nIiB3aWR0aD0iNDYyIiBoZWlnaHQ9IjE0OSI+PC9wPgo8cD48aDM+Q2FuIGl0IGJlIGVhc2llcj88L2gzPgogIDxwPldlbGwsIG5vdyB0aGF0IHlvdSBoYXZlIGJlZW4gdGhyb3VnaCBhbGwgdGhpcyB0cm91YmxlIHRvIHJ1biB5b3VyIGFwcGxpY2F0aW9uLAogICAgZGlkIHlvdSBrbm93IHRoYXQgeW91IGNvdWxkIGhhdmUgZG9uZSBhbGwgdGhpcyB3aXRoIGFsbW9zdCBqdXN0IG9uZSBjbGljaz8KICAgIFRyeSB0byBzZWxlY3QgeW91IFdlYkNvbnRlbnRzIG9uIHRyeSAmIzgyMjA7UnVuIG9uIHNlcnZlciYjODIzMDsmIzgyMjE7LgogICAgVGhlIHdlYiBhcHBsaWNhdGlvbiB3aWxsIHBvcHVwIGluc2lkZSB0aGUgV1RQIHdlYiBicm93c2VyIGluIGFsbW9zdCBhbiBpbnN0YW50LgogICAgWW91IGNhbiB0aGVuIHRyeSB0byBjYWxsIHlvdXIgc2VydmxldCBhcyB1c3VhbC48YnI+CjwvcD4KICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+CiAgICA8dHI+CiAgICAgIDx0ZD48aW1nIHNyYz0iaW1hZ2VzL2ZpZ3VyZTIzLnBuZyIgd2lkdGg9IjM2MCIgaGVpZ2h0PSI5MSI+PC90ZD4KICAgICAgPHRkPjxpbWcgc3JjPSJpbWFnZXMvZmlndXJlMjQucG5nIiB3aWR0aD0iNDYzIiBoZWlnaHQ9IjMyMyI+PC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KICA8cD4mbmJzcDsgPC9wPgogIDxoMz5Db25jbHVzaW9uPC9oMz4KPHA+SW4gdGhpcyB0dXRvcmlhbCwgd2UgbG9va2VkIGF0IHdoYXQgaXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhCnNpbXBsZSB3ZWIgYXBwbGljYXRpb24uIFRoZSBuZXh0IHBhcnQgd2lsbCBzaG93CiBob3cgd2UgY2FuIGRlYnVnIG91ciB3ZWIgYXBwbGljYXRpb24gYW5kIG1vbml0b3IgaHR0cCB0cmFmZmljLgo8L3A+Cgo8aDM+PGJyPgo8L2gzPgo8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhbmQgbG9nb3MgYXJlIHRyYWRlbWFya3Mgb3IKcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyCmNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KPHA+PHNtYWxsPk90aGVyIGNvbXBhbnksIHByb2R1Y3QsIGFuZCBzZXJ2aWNlIG5hbWVzIG1heSBiZSB0cmFkZW1hcmtzIG9yIHNlcnZpY2UKbWFya3Mgb2Ygb3RoZXJzLjwvc21hbGw+PC9wPgoKPC9ib2R5PjwvaHRtbD4=