PGhodG1sPgo8aGVhZD4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2RlZmF1bHRfc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjwvaGVhZD4KCjxib2R5IGJnY29sb3I9IiNGRkZGRkYiPgo8dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9NSBjZWxscGFkZGluZz0yIHdpZHRoPSIxMDAlIiA+CiAgPHRyPgogICAgPHRkIGFsaWduPUxFRlQgdmFsaWduPVRPUCBjb2xzcGFuPSIxIiBiZ2NvbG9yPSIjMDA4MEMwIj48Yj4KICAgIDxmb250IGZhY2U9IkFyaWFsLEhlbHZldGljYSIgY29sb3I9IiNGRkZGRkYiPkNvbW1pdHRlciBJbmZyYXN0cnVjdHVyZSAKICAgIFJlcXVlc3RzPC9mb250PjwvYj48L3RkPgogICAgPHRkIGFsaWduPVJJR0hUIHZhbGlnbj1UT1AgY29sc3Bhbj0iMSIgYmdjb2xvcj0iIzAwODBDMCI+CiAgICA8Zm9udCBmYWNlPSJBcmlhbCxIZWx2ZXRpY2EiIGNvbG9yPSIjRkZGRkZGIj5EZWNlbWJlciAyMiwgMjAwNDwvZm9udD48L3RkPgogIDwvdHI+CjwvVEFCTEU+Cgo8dGFibGUgd2lkdGg9Ijc1JSIgYm9yZGVyPSIxIj48L1RBQkxFPgoKPHA+VGhpcyBsaXN0IG9mIEVjbGlwc2Uub3JnIGluZnJhc3RydWN0dXJlIHJlcXVlc3RzIHdhcyAgY29sbGVjdGVkIGZyb20gdGhlIApjb21taXR0ZXIgY29tbXVuaXR5IGJ5IENvbW1pdHRlciBCb2FyZCBSZXByZXNlbnRhdGl2ZXMgSm9obiBXaWVnYW5kIGFuZCBCam9ybiAKRnJlZW1hbi1CZW5zb24uIFdlaWdodGVkIHZvdGVzIHdlcmUgdGFsbGllZCBhbmQgPGEgaHJlZj0ic2xpZGVzLnBkZiI+cHJlc2VudGVkIGF0IHRoZSBEZWMgOHRoIEJvYXJkCk1lZXRpbmc8L2E+LiAoRm9yIHlvdXIgcmVmZXJlbmNlLCB0aGUgIml0ZW0jInMgYXJlIHRoZSBvcmlnaW5hbCBudW1iZXJzIGdpdmVuIHRvIHRoZQpsaXN0IGl0ZW1zIGZvciB2b3RpbmcgcmVmZXJlbmNlLik8L3A+Cjx1bD4KICA8bGk+MS4gKGl0ZW0jIDEpIDxiPlByb2plY3QgRGFzaGJvYXJkL1N0YXRpc3RpY3MuPC9iPiBOdW1iZXIgb2YgYnVncywgbnVtYmVyIG9mIG5ldyBidWdzLCBudW1iZXIgCiAgb2YgZml4ZWQgYnVncywgZG93bmxvYWRzLCBwYWdlIHZpZXdzLCBtYWlsaW5nIGxpc3QgbWVzc2FnZXMsIGV0LjwvbGk+CiAgPGxpPjIuIChpdGVtICMxOSkgPGI+QnVnemlsbGEuPC9iPiBUaGUgY3VycmVudCBidWcgdHJhY2tpbmcgbWVjaGFuaXNtL3Rvb2wgaW1wb3NlcyBsb3RzIG9mIAogIHdvcmsgb24gdGhlIGNvbW1pdHRlcnMgZG9pbmcgdGhlIGJ1ZyB0cmlhZ2UuIEdpdmVuIHRoYXQgbW9zdCBvZiB1cyBzcGVudCBhIAogIG5vdGljZWFibGUgYW1vdW50IG9mIHRpbWUgaW4gQnVnemlsbGEgdGhlcmUgc2hvdWxkIGJlIGltcHJvdmVtZW50cyB0byBtYWtlIAogIGNvbW1pdHRlcidzIGxpdmUgZWFzaWVyLgogIDx1bD4KICAgIDxsaT5CdWdzIGFyZSBvZnRlbiBpbmNvbXBsZXRlIG9yIGR1cGxpY2F0ZXMgb2YgZXhpc3RpbmcgYnVncy4gT3RoZXIgcHJvamVjdHMgCiAgICBmb3IgZXhhbXBsZSBoYXZlIG1hbmRhdG9yeSBmaWVsZHMgKGUuZy4gdGhlIGJ1aWxkIGlkKSBhbmQgc2hvdyBhIGxpc3Qgb2YgCiAgICBwb3NzaWJsZSByZWxhdGVkIGJ1Z3Mgd2hpY2ggdGhlIGJ1ZyByZXBvcnRlciBjYW4gY2hlY2sgZm9yIGR1cGxpY2F0ZXMgYmVmb3JlIAogICAgcmVwb3J0aW5nIGEgbmV3IG9uZS4gPC9saT4KICAgIDxsaT5TZWFyY2hpbmcgaXMgYWxzbyBhIHByb2JsZW0gc2luY2Ugc3RhY2sgdHJhY2VzIGFyZSBvZnRlbiBpbiBhdHRhY2htZW50cyAKICAgIHdoaWNoIGFyZW4ndCBzZWFyY2hlZC4gU3RhY2sgdHJhY2VzIGFyZSBnb29kIG1lYW5zIHRvIGZpbmQgZHVwbGljYXRlcy4gCiAgICBIb3dldmVyIHN0YWNrIHRyYWNlcyBhcmUgb2Z0ZW4gYXR0YWNoZWQuIFNvIHNlYXJjaCBpbiBhdHRhY2htZW50cyBtdXN0IGJlIAogICAgc3VwcG9ydGVkIGFzIHdlbGwuPC9saT4KICAgIDxsaT5CZXR0ZXIgVUkgc28gdGhhdCBidWcgcmVwb3J0ZXJzIGRvbid0IGZvcmdldCB0byByZXBvcnQgZXNzZW50aWFsIAogICAgaW5mb3JtYXRpb24gKGJ1aWxkIG51bWJlciwgbG9nIGVudHJpZXMsIHJlcHJvZHVjaWJsZSBzdGVwcywgLi4uLik8L2xpPgogICAgPGxpPkluIGdlbmVyYWwgQnVnemlsbGEgc2hvdWxkIGZpbmQgZHVwbGljYXRlIGNhbmRpZGF0ZXMgYW5kIHNob3VsZCBwcmVzZW50IAogICAgdGhlbSB0byB0aGUgYnVnIHJlcG9ydGVyIGJlZm9yZSB0aGUgYnVnIGdldHMgY29tbWl0dGVkLjwvbGk+CiAgPC91bD4KICA8L2xpPgogIDxsaT4zLiAoaXRlbSAjMTYpIDxiPk5ld2VyIEZhc3RlciBIYXJkd2FyZS48L2I+IEltcGxlbWVudCBuZXcsIGZhc3RlciBoYXJkd2FyZSB3aXRoIGEgCiAgc2NhbGFibGUgYXJjaGl0ZWN0dXJlIGFuZCByZWR1bmRhbmN5IGZvciBjb3JlIHNlcnZpY2VzLiBUaGUgY3VycmVudCAKICBlY2xpcHNlLm9yZyBoYXJkd2FyZSBpcyBub3Qgc3VmZmljaWVudCBmb3IgdGhlIGZvciBjdXJyZW50IHNlcnZpY2VzIHByb3ZpZGVkLiAKICBJbiBhZGRpdGlvbiwgaXQgaXMgbm90IHNjYWxhYmxlIGZvciBpbmNyZWFzZXMgaW4gdHJhZmZpYy4gTm9yIGlzIGl0IGhpZ2hseSAKICBhdmFpbGFibGUgaW4gdGhlIGluIHRoZSBldmVudCBvZiBoYXJkd2FyZSBmYWlsdXJlLiBUaGlzIG5ldyBoYXJkd2FyZSBuZWVkcyB0byAKICBiZSBpbXBsZW1lbnRlZCBiZWZvcmUgYWRkaXRpb25hbCBzZXJ2aWNlcyBjYW4gYmUgaW1wbGVtZW50ZWQuIFRoaXMgd2lsbCAKICBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzZXZlcmFsIGNvcmUgZWNsaXBzZS5vcmcgc2VydmljZXMgc3VjaCBhcyBCdWd6aWxsYSAKICBhbmQgY3ZzLgogIDx1bD4KICAgIDxsaT5BbmQgbW9yZSBiYW5kd2lkdGguIExhZ3Mgb2YgYSBtaW51dGUgb3IgbW9yZSBvbiBidWd6aWxsYSBhbmQgQ1ZTIGFyZSAKICAgIGh1cnRpbmcgcHJvZHVjdGl2aXR5IGFuZCBjaGFuZ2luZyB0aGUgdmVyeSBuYXR1cmUgb2YgdGhlIGludGVyYWN0aW9ucyB0aGF0IAogICAgaGF2ZSBiZWVuIHNvIHN1Y2Nlc3NmdWwgaW4gY3JlYXRpbmcgRWNsaXBzZSBzbyBmYXIuPC9saT4KICA8L3VsPgogIDwvbGk+CiAgPGxpPjQuIChpdGVtICMyMCkgPGI+Q29tbWl0dGVyIENvbnRyb2wgT3ZlciBXZWIgQ29udGVudDwvYj4uIFdoYXRldmVyIGZvcm06IGJsb2dzLCB3aWtpcywgb3IgCiAgb3RoZXIgd2ViIGNvbnRlbnQgZmxhdm91ciBvZiB0aGUgbW9udGguIFdlIGp1c3Qgd2FudCB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIAogIHBhZ2UgZm9yIHNvbWUgY3VycmVudCBpc3N1ZSBvciBwbGFuIGl0ZW0sIGFuZCBiZSBhYmxlIHRvIGNyZWF0ZSBhIHJlYXNvbmFibHkgCiAgc2hvcnQgVVJMIGZvciBpdC4gVGhpcyBjdXJyZW50IGlzc3VlIGxpc3QgaXMgYSBnb29kIGV4YW1wbGUuIEkgaGFkIHRvIHN0aWNrIAogIHRoYXQgbGlzdCBpbnRvIHRoZSB3ZWJ0b29scyBwcm9qZWN0IHNwYWNlIGV2ZW4gdGhvdWdoIGl0IGlzIHVucmVsYXRlZCB0byB3ZWIgCiAgdG9vbHMuIFNpbWlsYXJseSwgdGhlICZxdW90O1JDUCZxdW90OyBob21lIHBhZ2UgaXMgaW4gdGhlIHBsYXRmb3JtIFVJIHRlYW0ncyB3ZWIgc2l0ZSAKICB2aWV3YWJsZSBvbmx5IHRocm91Z2ggdmlld2N2cy4gVGhlcmUgYXJlIG1hbnkgY3Jvc3MtY29tcG9uZW50LCBhbmQgc29tZXRpbWVzIAogIGNyb3NzLXByb2plY3QsIGlzc3VlcyB0aGF0IG5lZWQgd2ViIHNwYWNlLiBUaGVzZSBjdXJyZW50bHkgaGF2ZSB0byBiZSBob3N0ZWQgCiAgd2l0aGluIGEgc2luZ2xlIGNvbXBvbmVudCdzIHdlYiBzcGFjZSBhbmQgb25seSB0aGF0IHRlYW0gd2lsbCBoYXZlIGNvbW1pdCAKICByaWdodHMgdG8gaXQuPC9saT4KICA8bGk+NS4gKGl0ZW0gIzExKSA8Yj5TdWJ2ZXJzaW9uLjwvYj4gSW4gYWRkaXRpb24gdG8gQ1ZTPC9saT4KICA8bGk+Ni4gKGl0ZW0gIzcpIDxiPlNob3J0IFVSTHM8L2I+LiBEaXJlY3QgKHNob3J0KSBVUkxzIHRvIHByb2plY3Qgc2VjdGlvbnMsIGEuay5hLiwgbm8gCiAgZnJhbWVzLiBEZWZpbml0ZWx5IG5vIGZyYW1lcy48L2xpPgogIDxsaT43LiAoaXRlbSAjMTgpIDxiPkFkZGl0aW9uYWwgU3lzYWRtaW4vV2ViZGV2LjwvYj4gQWNxdWlyZSBhZGRpdGlvbmFsIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiAKICByZXNvdXJjZXMuIEN1cnJlbnRseSwgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBjdXJyZW50bHkgaGFzIG9ubHkgb25lIHN5c3RlbSAKICBhZG1pbmlzdHJhdG9yIHRvIG1hbmFnZSBhbGwgdGhlIHNlcnZlcnMsIHJlc3BvbmQgdG8gYWxsIHVzZXIgcmVxdWVzdHMgYW5kIAogIGltcGxlbWVudCBjaGFuZ2VzLiBUaGlzIGlzIGEgdHJlbWVuZG91cyBhbW91bnQgb2Ygd29yayBmb3Igb25lIHBlcnNvbi4gSW4gdGhlIAogIGV2ZW50IG9mIGlsbG5lc3MsIHZhY2F0aW9uIG9yIG90aGVyIGlzc3VlcywgdGhlcmUgaXNuJ3QgYW55b25lIHRvIGJhY2sgaGltIHVwLiAKICBHaXZlbiB0aGUgaW1wb3J0YW5jZSBvZiB0aGVzZSBzZXJ2ZXJzIHRvIGVjbGlwc2Uub3JnIGNvbW11bml0eSwgdGhpcyBpcyBub3QgYSAKICBzdWZmaWNpZW50IGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLiBUaGlzIHdvdWxkIGFsc28gaW1wcm92ZSByZXNwb25zZSB0aW1lIHRvIAogIGNvbW1pdHRlciByZXF1ZXN0cy4gKHNlZSBhbHNvIDI1KTx1bD4KICAgIDxsaT5UbyBxdW90ZSBvbmUgb2YgdGhlIG1hbnkgY29tbWl0dGVycyB3aG8gdm9pY2VkIHRoaXMgb3BpbmlvbiAmcXVvdDtJJ3ZlIGFsd2F5cyAKICAgIGZvdW5kIG91ciB3ZWJzaXRlIHRvIGJlIGFuIGVtYmFycmFzc21lbnQgLS0gYnV0IEkndmUgYWNjZXB0ZWQgaXRzIGN1cnJlbnQgCiAgICBzdGF0ZSBzaW5jZSBJIHZhbHVlIGEga2ljay1hc3MgcGxhdGZvcm0gbW9yZSB0aGFuIGEgbmljZSB3ZWJzaXRlISBCdXQgaXQgaXMgCiAgICB0aW1lIHRoaXMgY2hhbmdlcywgd2UgZG9uJ3QgaGF2ZSBhIGNob2ljZS4gVGhlIGNvbW11bml0eSBpcyBnZXR0aW5nIHRvbyAKICAgIGxhcmdlIGFuZCBvdXIgdG9vbGluZyBpcyBnZXR0aW5nIGluIHRoZSB3YXkgb2Ygb3VyIHByb2R1Y3Rpdml0eS4mcXVvdDs8L2xpPgogIDwvdWw+CiAgPC9saT4KICA8bGk+OC4gKGl0ZW0jIDIpIDxiPldpa2lzPC9iPi4gUGVyLXByb2plY3Qgd291bGQgcHJvYmFibHkgYmUgYmVzdC4gKGFsc28gc2VlIDIwKTwvbGk+CiAgPGxpPjkuIChpdGVtICM4KSA8Yj5QZXItcHJvamVjdCBuYXZpZ2F0aW9uIGJhcnMuPC9iPiBNYW5hZ2VkIGJ5IHRoZSBwcm9qZWN0LjwvbGk+CiAgPGxpPjEwLiAoaXRlbSAjMTUpIDxiPgogIFNlbGYgTWFuYWdlbWVudDwvYj4uIENyZWF0aW5nIG5ldyBjb21wb25lbnRzLCBtYW5hZ2luZyBtYWlsaW5nIAogIGxpc3RzLCBhZGRpbmcvcmVtb3ZpbmcgY29tbWl0dGVycywgLi4uLCBtb3JlIHNvdXJjZWZvcmdlLWxpa2WFIFVzZSB3b3JrZmxvdyBtYW5hZ2VtZW50IGZvciBJUCBjcnVjaWFsIHRhc2tzIGxpa2UgCiAgYWRkaW5nIG5ldyBjb21taXR0ZXJzIChyZXF1aXJlcyBFTU8gCiAgaW50ZXJhY3Rpb24sIGJ1dCBwYXJ0cyBjYW4gYmUgc2VsZi1tYW5hZ2VkKTx1bD4KICAgIDxsaT5JdCBzdXJlIHdvdWxkIGJlIG5pY2UgaWYgd2hhdGV2ZXIgc3lzdGVtIHdlIHVzZS9wcm9kdWNlIGNvdWxkIGJlIAogICAgcGFja2FnZWQgbGlrZSA8YSBocmVmPSJodHRwOi8vd3d3Lmdmb3JnZS5vcmciPkdGb3JnZTwvYT4sIHRoZSBzb2Z0d2FyZSB0aGF0IAogICAgT2JqZWN0V2ViIHVzZXMsIGFuZCBtYWRlIGF2YWlsYWJsZSBmb3Igb3RoZXJzIHdobyB3YW50IGEgY29sbGFib3JhdGlvbiAKICAgIHN5c3RlbSBsaWtlIHdlIGhhdmUgYnVpbHQuPC9saT4KICAgIDxsaT5PciBtYXliZSBqdXN0IHdvcmsgd2l0aCBHRm9yZ2UgdG8gYnVpbGQgd2hhdGV2ZXIgZW5oYW5jZW1lbnRzIHdlIG5lZWQgCiAgICBpbnRvIHRoZWlyIHN5c3RlbS4gV2Ugd291bGQgYmVuZWZpdCBieSBoYXZpbmcgc29tZXRoaW5nIHRvIHN0YXJ0IGZyb20uIFRoZXkgCiAgICB3b3VsZCBiZW5lZml0IGZyb20gd2hhdGV2ZXIgZW5oYW5jZW1lbnRzIHdlIGJ1aWxkIGZvciB0aGVtLi4uPC9saT4KICA8L3VsPgogIDwvbGk+CiAgPGxpPjExLiAoaXRlbSAjMjEpIDxiPk1vZGVyYXRlZCBNYWlsaW5nIExpc3RzPC9iPi4gQSBzbWFsbCBzZXQgb2YgbWFpbGluZyBsaXN0cyAoZWNsaXBzZS1kZXYsIAogIHBsYXRmb3JtLXVpLWRldiwgcG9zc2libHkgc3d0LWRldikgY291bGQgYmVuZWZpdCBmcm9tIGEgbW9kZXJhdG9yLiBIaWdoIAogIGRlbnNpdHkgb2YgdHJhZmZpYyBvbiB0aGUgbmV3c2dyb3VwIG1lYW5zIHRoYXQgbWFueSBwZW9wbGUgaGF2ZSB0cm91YmxlIAogIGdldHRpbmcgdGhlaXIgcXVlc3Rpb25zIGFuc3dlcmVkIHRoZXJlLiBUaGV5IGhhdmUgYmVndW4gdG8gdHVybiB0byB0aGUgbWFpbGluZyAKICBsaXN0cyBhcyBhbiBhbHRlcm5hdGl2ZSB0byBuZXdzZ3JvdXBzIGZvciBnZXR0aW5nIGFuc3dlcnMuIFRoaXMgaXMgbm90IAogIHN1cnByaXNpbmcgLSBxdWVzdGlvbnMgb24gdGhlIG1haWxpbmcgbGlzdCBhcmUgb2Z0ZW4gYW5zd2VyZWQgd2l0aGluIG1pbnV0ZXMuIAogIEhvd2V2ZXIsIGlmIHRoZSBsYXJnZXIgdm9sdW1lIG9mIHRyYWZmaWMgY2F0Y2hlcyBvbiB0byB0aGUgaWRlYSBvZiB1c2luZyB0aGUgCiAgbWFpbGluZyBsaXN0cyBmb3IgdXNlciBxdWVzdGlvbnMsIHRoZW4gd2Ugd2lsbCBsb3NlIGEgdmFsdWFibGUgY29tbXVuaWNhdGlvbiAKICB0b29sIGZvciBjb21taXRlcnMuIFBlcmhhcHMgYSB2aXNpYmxlIHVzZXIgbWFpbGluZyBsaXN0IHdvdWxkIGhlbHAsIGJ1dCBJIAogIHRoaW5rIGhhdmluZyB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggdG8gbW9kZXJhdGVkIGxpc3RzIChzdGFydGluZyB3aXRoIAogIGVjbGlwc2UtZGV2KSBpcyB0aGUgZWFzaWVzdCBzb2x1dGlvbi4gVGhpcyBtb2RlcmF0aW9uIHdvdWxkIG5vdCBoYXZlIHRvIGJlIAogIHN0cmluZ2VudCAtIGp1c3QgdHVybiBhd2F5IG9idmlvdXMgdXNlciBxdWVzdGlvbnMgYW5kIHBvaW50IHRoZW0gdG8gdGhlIAogIGFwcHJvcHJpYXRlIG5ld3Nncm91cC4gVGhlcmUgYXJlIG1hbnkgY29tbWl0dGVycyB3aG8gd291bGQgYmUgaGFwcHkgdG8gCiAgcGFydGljaXBhdGUgaW4gYSByb3RhdGluZyBtb2RlcmF0b3IgcG9zaXRpb24gZm9yIGVjbGlwc2UtZGV2LiBCZXR0ZXIgb25lIAogIGNvbW1pdHRlciBkZWFsaW5nIHdpdGggdGhlIHNwYW0gdGhhbiB3YXN0aW5nIHRoZSB0aW1lIG9mIGh1bmRyZWRzIG9mIHBlb3BsZSBieSAKICBsZXR0aW5nIHRoZXNlIG1lc3NhZ2VzIHRocm91Z2guPC9saT4KICA8bGk+MTIuIChpdGVtIyAzKSA8Yj5CbG9nczwvYj4uIFBlci1wcm9qZWN0IG9yIHBlci1jb21wb25lbnQgb3IgcGVyLWluZGl2aWR1YWw/IChhbHNvIHNlZSAKICAyMCk8L2xpPgogIDxsaT4xMy4gKGl0ZW0gIzYpIDxiPlJlcHV0YXRpb24gU3lzdGVtPC9iPi4gTm8gY29tbXVuaXR5IGNhbiBmdW5jdGlvbiB3aXRob3V0IGEgcmVwdXRhdGlvbiAKICBzeXN0ZW0uIE9ubGluZSBjb21tdW5pdGllcyB3aXRoIGxhcmdlIGdyb3d0aCByYXRlcyBhcmUgZXNwZWNpYWxseSB2dWxuZXJhYmxlIAogIGJlY2F1c2UgdGhlIG5ldyBtZW1iZXJzIGRvIG5vdCBoYXZlIHRoZSBoaXN0b3J5IHRoYXQgaGVscHMgdGhlbSBmaWx0ZXIgdGhlIAogIGdvb2QgZnJvbSB0aGUgYmFkLiBBIHJlcHV0YXRpb24gc3lzdGVtIChsaWtlIEUtYmF5J3Mgc2VsbGVyIHJhdGluZ3MpIGlzIAogIG5lY2Vzc2FyeS4gKGFsc28gc2VlIDIxKTx1bD4KICAgIDxsaT5UaGUgaWRlYSBoZXJlIGlzIHRvIGNhcHR1cmUgdGhlIGNvbW11bml0aWVzIHRydXN0IGluIHNwZWNpZmljIAogICAgaW5kaXZpZHVhbHMgaW4gYSBmb3JtYWwgd2F5IHNvIHRoYXQgb3RoZXIgcGVvcGxlIGNhbiB2aWV3IHRoYXQgdHJ1c3QuIAogICAgT2J2aW91c2x5LCBjb21taXR0ZXJzIHdvdWxkIGhhdmUgdG8gYmUgaW4gYSBoaWdoIHRydXN0L2hpZ2ggcmVwdXRhdGlvbiBzcGFjZSAKICAgIGluIG9yZGVyIHRvIGJlIGNvbW1pdHRlcnMuIFNvIHRoaXMgaXMgbW9yZSBhcHBsaWNhYmxlIHRvIG5vbi1jb21taXR0ZXJzIG9uIAogICAgdGhlIG5ld3Nncm91cHMgYW5kIG1haWxpbmcgbGlzdHMuPC9saT4KICAgIDxsaT5UaGVyZSBoYXZlIGJlZW4gYXQgbGVhc3QgdGhyZWUgKG9uZSB2ZXJ5IHJlY2VudGx5KSBkaXNydXB0aXZlIGluZGl2aWR1YWwgCiAgICBvbiB0aGUgbmV3c2dyb3Vwcy4gVG8gYSBuZXdiaWUsIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhpcyB2b2NhbCAKICAgIHBlcnNvbiBpcyBrbm93bGVkZ2VhYmxlIG9yIGp1c3Qgbm9pc3k7IHdoZXRoZXIgSSwgdGhlIG5ld2JpZSwgc2hvdWxkIHRydXN0IAogICAgdGhlbSBvciBpZ25vcmUgdGhlbS48L2xpPgogICAgPGxpPlRoZSBFTUYgc3lzdGVtIGhhcyBhCiAgICA8YSBocmVmPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvZW1mL3NjcmlwdHMvbW9kZWxzLnBocCI+dHJpdmlhbCAKICAgIHZlcnNpb24gb2YgdGhpczwvYT4uPC9saT4KICA8L3VsPgogIDwvbGk+CiAgPGxpPjE0LiAoaXRlbSAjOSkgPGI+UHJvcG9zYWxzIFNlY3Rpb248L2I+LiBBIJNwcm9wb3NhbHOUIHNlY3Rpb24gKEVjbGlwc2UgTGFicz8pIHRvIG51cnR1cmUgCiAgbmV3IHByb3Bvc2FscyBpbnN0ZWFkIG9mIGhvc3RpbmcgdGhlbSBhdCBvdGhlciBjb21wYW5pZXMgb3IgYXQgc291cmNlZm9yZ2UuPC9saT4KCiAgPGxpPjE1LiAoaXRlbSAjMTIpIDxiPlNlcnZsZXRzIGFuZCBKU1A8L2I+LiBGb3IgYWN0aXZlLCByYXRoZXIgdGhhbiBzdGF0aWMsIHByb2plY3Qgd2ViIHBhZ2VzLjx1bD4KICAgIDxsaT5XaGljaCBxdWl0ZSBuYXR1cmFsbHkgYWxzbyBtZWFucyBNeVNRTCBhbmQgcmVhZC93cml0ZSBmaWxlLXN5c3RlbSBzcGFjZSAKICAgIGZvciBjb25maWd1cmF0aW9uIGFuZC9vciBkYXRhIGZpbGVzIGluIGNhc2UgYSBzZXJ2bGV0IGlzbid0IGNvbXBsaWNhdGVkIAogICAgZW5vdWdoIHRvIGp1c3RpZnkgdXNpbmcgYSBkYXRhYmFzZS48L2xpPgogIDwvdWw+CiAgPGxpPjE2LiAoaXRlbSAjMTQpIDxiPkNlbnRyYWwgUGFzc3dvcmQgQXV0aGVudGljYXRpb24gU3lzdGVtLjwvYj4gSW1wbGVtZW50IGEgY2VudHJhbCAKICBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiBzY2hlbWUgc3VjaCBhcyBsZGFwIGZvciBhcyBtYW55IHNlcnZpY2VzIGFzIHBvc3NpYmxlIAogIChkb3dubG9hZCBzZXJ2ZXIsIEJ1Z3ppbGxhLCBjdnMgZXRjKS4gQ3VycmVudGx5LCBlYWNoIHVzZXIgYXV0aGVudGljYXRlcyAKICBhZ2FpbnN0IHNlcGFyYXRlIHBhc3N3b3JkIGZpbGVzIG9uIGVhY2ggc2VydmVyLiA8L2xpPgogIDxsaT4xNy4gKGl0ZW0gIzE3KSA8Yj5MZXZlcmFnZSBNaXJyb3JzLjwvYj4gTGV2ZXJhZ2UgdGhlIG1pcnJvcnMgdG8gcmVkdWNlIGJhbmR3aWR0aC4gKHNlZQogICAgYWxzbyAyNikKICA8dWw+CiAgICA8bGk+T25lIGlkZWEgQmpvcm4gaGFkIHdhcyB0byBsaW1pdCB0aGUgYmFuZHdpZHRoIGF2YWlsYWJsZSB0byBlYWNoIHBlcnNvbiAKICAgIHBlciB0aW1lIHVuaXQgKHN1Z2dlc3Rpb25zIGF2YWlsYWJsZSkgYW5kIHRoZW4gdG8gY2hhcmdlIGEgbm9taW5hbCBmZWUgKCQxPykgCiAgICBmb3IgYW4gZXh0cmEgZG93bmxvYWQuJm5ic3A7IFVzZSBQYXlwYWwgdG8gY2xlYXIgcGF5bWVudHMuIFN0cnVjdHVyZSB0aGlzIHRvIAogICAgaGl0IG9ubHkgdGhvc2Ugd2hvIGRvd25sb2FkIHRocmVlIGNvcGllcyBvZiB0aGUgU0RLIGluIGEgc2luZ2xlIGRheS48L2xpPgogICAgPGxpPkdpdmUgdGhlIG1pcnJvcnMgaGlnaGVyIFFvUyB0aGFuIHN0cmFpZ2h0IGRvd25sb2FkcyBhbmQgdGhlbiBlbmNvdXJhZ2UgCiAgICBoaWdoIHVzZSBjbGllbnRzIChjb21wYW5pZXMgc3VjaCBhcyBJQk0gYW5kIEhQKSB0byBoYXZlIGludGVybmFsIG1pcnJvcnMuIAogICAgSUJNIGFscmVhZHkgZG9lcyB0aGlzLjwvbGk+CiAgICA8bGk+QXV0b21hdGljYWxseSByZWRpcmVjdCB1c2VycyB0byBhIGdlb2dyYXBoaWNhbGx5IGNsb3NlIG1pcnJvciBiYXNlZCBvbiAKICAgIHRoZSBsb2NhbGUgc2V0dGluZyBpbiB0aGVpciBicm93c2VyLiBUaGV5IGNhbiBvbmx5IGRvd25sb2FkIGZyb20gdGhlIG1haW4gCiAgICBhcGFjaGUgc2l0ZSBhcyBhIGxhc3QgcmVzb3J0LiBUaGlzIGlzIHdoYXQgdGhlIEFwYWNoZSBwcm9qZWN0CiAgICA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb3dubG9hZC5jZ2kiPmRvZXM8L2E+LjwvbGk+CiAgICA8bGk+TWlycm9yaW5nIG9mIDxpPmFsbDwvaT4gcHJvamVjdHMsIG5vdCBqdXN0IHRoZSBwbGF0Zm9ybS48L2xpPgogIDwvdWw+CiAgPC9saT4KICA8bGk+MTguIChpdGVtICMxMCkgPGI+UlNTIGFuZCBBdG9tLjwvYj4gRm9yIGFsbCBibG9ncywgd2lraXMsIGFuZCB3ZWIgcGFnZXMuPC9saT4KICA8bGk+MTkuIChpdGVtICMxMykgPGI+UEhQL015U1FMLjwvYj4gU29tZSBwcm9qZWN0cyB3b3VsZCBwcmVmZXIgdG8gdXNlIFBIUCByYXRoZXIgdGhhbiAKICBzZXJ2bGV0cyBhbmQgSlNQLjwvbGk+CiAgPGxpPjIwLiAoaXRlbSAjMjQpIDxiPlFvUyBCYW5kd2lkdGggVGhyb3R0bGluZzwvYj4uIEFsbG93IGNlcnRhaW4gcGVvcGxlL21hY2hpbmVzIGhpZ2hlciAKICBiYW5kd2lkdGguIEZvciBleGFtcGxlLCBtaXJyb3JzIGFuZCBidWlsZCBtYWNoaW5lcyBzaG91bGQgaGF2ZSBoaWdoZXIgcHJpb3JpdHkgCiAgYWNjZXNzIHRvIHRoZSBiYW5kd2lkdGggdGhhbiBhbiBhdmVyYWdlIGRvd25sb2FkLiAoc2VlIGFsc28gMjYpPC9saT4KICA8bGk+MjEuIChpdGVtICMyNikgPGI+Qml0VG9ycmVudC48L2I+IEVjbGlwc2UncyBVcGRhdGUgTWFuYWdlciBzaG91bGQgc3VwcG9ydCBCaXRUb3JyZW50CiAgICBwcm90b2NvbC4gRWNsaXBzZSdzIGRvd25sb2FkIHNlcnZlcnMgaWRlYWxseSBzaG91bGQgdG9vLjxicj4KICAgIEl0IGRvZXNuJ3QgbWF0dGVyIGhvdyBtYW55IG1pcnJvcnMgd2UgaGF2ZSBiZWNhdXNlIGlmIHdlIGFyZSBzdWNjZXNzZnVsCiAgICBnZXR0aW5nIHBlb3BsZSB0byB1c2UgVXBkYXRlIE1hbmFnZXIsIFVNIGlzIGhhcmQtY29kZWQgdG8gZ28gdG8gdGhlIG1haW4KICAgIEVjbGlwc2Uub3JnIGRvd25sb2FkIHNpdGUuIFRoaXMgb2J2aW91c2x5IHdvbid0IHNjYWxlLiBCdXQgZW5hYmxpbmcgYQogICAgcGVlci10by1wZWVyIHByb3RvY29sIGxpa2UgQml0VG9ycmVudCB3aXRoaW4gVXBkYXRlIE1hbmFnZXIgd291bGQgYWxsZXZpYXRlCiAgICB0aGlzLCBzaW5jZSBCaXRUb3JyZW50IGNhdXNlcyB0aGUgY2xpZW50cyB0byBhbHNvIHNlcnZlIHRoZSBjb250ZW50IHdoaWxlCiAgICB0aGV5IGFyZSBkb3dubG9hZGluZy4gU28sIHlvdXIgbWFpbiBkb3dubG9hZCBzZXJ2ZXIgc2VlcyByb3VnaGx5IGNvbnN0YW50CiAgICBiYW5kd2lkdGggdXRpbGl6YXRpb24gYXMgYXMgdGhlIG51bWJlciBvZiBkb3dubG9hZHMgaW5jcmVhc2VzIHJhdGhlciB0aGFuCiAgICBsaW5lYXIgb3IgZ2VvbWV0cmljIHV0aWxpemF0aW9uLi4uPC9saT4KICA8bGk+MjIuIChpdGVtICMyNSkgPGI+RGlzdHJpYnV0ZWQgSW5mcmFzdHJ1Y3R1cmUgTW9uaXRvcmluZyBhbmQgVHJvdWJsZSBUaWNrZXRzPC9iPi4gRHVyaW5nIAogIHRoZSBtb3N0IHJlY2VudCBtaWxlc3RvbmUsIHdlIGhhZCBwcm9ibGVtcyB3aXRoIGJvdGggQnVnemlsbGEgYW5kIENWUyBnb2luZyAKICBkb3duLiBSZWR1bmRhbmN5IHdvdWxkIGJlIG5pY2UsIGJ1dCB1bHRpbWF0ZWx5LCBjb21taXR0ZXJzIG5lZWQgdG8gYmUgYWJsZSB0byAKICBicmluZyB0aGVzZSBzZXJ2aWNlcyBiYWNrIHVwIGlmIHRoaW5ncyBnbyB3cm9uZy4gUmlnaHQgbm93LCB3ZSBmZWVsIGxpa2Ugd2UgCiAgZG9uJ3QgaGF2ZSB0aGUgdG9vbHMgd2UgbmVlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBpbmZyYXN0cnVjdHVyZSB0ZWFtLiBXZSAKICBkb24ndCBrbm93IHdoYXQgdG8gZG8gaWYgd2Ugbm90aWNlIGEgc2VydmljZSBoYXMgZ29uZSBkb3duLCBhbmQgd2UgbmV2ZXIgaGVhciAKICB3aGV0aGVyIHRoZSBpbmZyYSB0ZWFtIGlzIGF3YXJlIG9mIGEgcHJvYmxlbSBvciB3aGVuIGl0IGlzIGZpeGVkLiBJdCBhbHNvIAogIG1pZ2h0IGJlIG5pY2UgdG8gZGlzdHJpYnV0ZSBzb21lIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFjY291bnRzIHRvIG5vbi1lY2xpcHNlLm9yZyAKICBwZW9wbGUuPC9saT4KICA8bGk+MjMuIChpdGVtICMyMykgPGI+Q1ZTIE1pcnJvcmluZzwvYj4uIE1pcnJvciB0aGUgQ1ZTIHRyZWUgYXMgd2VsbCBhcyB0aGUgZG93bmxvYWRzIHRyZWUuPC9saT4KICA8bGk+MjQuIChpdGVtICMyMikgPGI+Q1ZTIFByb3h5IFN1cHBvcnQ8L2I+LiBTdXBwb3J0IGZvciBwcm94eSBzdXBwb3J0IGZvciBhY2Nlc3NpbmcgQ1ZTIGZyb20gCiAgaW5zaWRlIGEgZmlyZXdhbGwuIFNvdXJjZUZvcmdlIGFscmVhZHkgc3VwcG9ydHMgdGhpcyBhbmQgaXMgdmVyeSB1c2VmdWwgZm9yIAogIGhlbHBpbmcgY29tbWl0dGVycy9jb250cmlidXRvcnMgZnJvbSBvdGhlciBjb21wYW5pZXMgdG8gd29yayB3aXRoIHVzLiA8L2xpPgogIDxsaT4yNS4gKGl0ZW0jIDQpIDxiPkhpZXJhcmNoaWNhbCBCbG9ncy48L2I+IFRoZSBibG9ncyBzaG91bGQgYmUgbGlua2VkIGhpZXJhcmNoaWNhbGx5IHNvIAogIHRoYXQgYmlnIG5ld3MgaXRlbXMgY2FuIGJ1YmJsZSB1cCBsaWtlIHRoZXkgZG8gb24gdGhlIFNvdXJjZUZvcmdlIG5ld3Mgc3lzdGVtLiAKICBUaGUgaWRlYSBpcyB0aGF0IHdoZW4gc29tZW9uZSBpbiwgc2F5LCBWRVAgcHVibGlzaGVzIGEgYmxvZyBlbnRyeSwgSm9obiBEIAogIChvdmVyIGluIFRvb2xzKSB3b3VsZCBiZSBub3RpZmllZCwgYW5kIHdpdGggdGhlIGNsaWNrIG9mIGEgYnV0dG9uLCBjb3VsZCAKICBwcm9tb3RlIHRoZSBlbnRyeSB0byBiZSB2aXNpYmxlIG9uIHRoZSBUb29scyBwcm9qZWN0J3Mgd2VibG9nLiBBbmQgaWYgSm9obiBEIAogIHByb21vdGVzIGl0LCBpdCB3b3VsZCB0aGVuIGJlIGZvcndhcmRlZCB0byBhbiBFY2xpcHNlLm9yZyBjb250ZW50IG1hbmFnZXIgd2hvIAogIGNvdWxkIHRoZW4gY2xpY2sgYSBidXR0b24gdG8gbWFrZSBpdCB2aXNpYmxlIGFzIGFuIEVjbGlwc2UgZnJvbnQtcGFnZSBuZXdzIAogIGl0ZW0uIChhbHNvIHNlZSAyMCk8dWw+CiAgICA8bGk+VGhpcyB3b3VsZCBzdWJzdW1lIGFuIGV2ZW50IHJlcG9zaXRvcnkgZm9yIHByb2plY3Qtc3BlY2lmaWMgk1doYXSScyBuZXeULiBDYW4gYmUgdGFnZ2VkIAogIGFuZCBxdWV1ZWQgZm9yIHRoZSBob21lIHBhZ2UuPC9saT4KICA8L3VsPgogIDwvbGk+CiAgPGxpPjI2LiAoaXRlbSAjNSkgPGI+RU1PIFdlYiBDb250ZW50LiA8L2I+SW4gcGFydGljdWxhciwgcHJlc2VuY2UgKHdlYnNpdGUsIHdpa2lzLCBibG9ncywgCiAgbWFpbGluZyBsaXN0cywgY3ZzLCAuLi4pIGZvciBwcm9jZXNzZXMsIGNvdW5jaWxzLCBldGMuPC9saT4KPC91bD4KCjxwPklmIHlvdSBhcmUgYSBjb21taXR0ZXIgb3IgY29udHJpYnV0b3IsIHdlIGVuY291cmFnZSB5b3UgdG8KbGV0IHVzIGtub3cgd2hhdCB5b3VyIAppbmZyYXN0cnVjdHVyZSByZXF1ZXN0cyBhcmUgc28gdGhhdCB3ZSBjYW4gbG9iYnkgZm9yIHRoZW0gYXQgdGhlIEJvYXJkIG1lZXRpbmdzLiAKV2hhdCBhcmUgeW91ciBhZGRpdGlvbmFsIHJlcXVlc3RzIHRoYXQgYXJlIG5vdCBvbiB0aGUgbGlzdD88L3A+Cgo8cD5QLlMuIFRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZiI+RU1GPC9hPiBwcm9qZWN0IHNlZW1zIHRvIGhhdmUgYSAKZmV3IG9mIHRoZXNlIGZlYXR1cmVzLiBGb3IgZXhhbXBsZTo8L3A+Cgo8dWw+CiAgPGxpPk91ciBzaXRlJ3MgV2hhdCdzIE5ldyBpcyBhbiBYTUwgZmlsZSB3aGljaCBpcyB3cml0dGVuIHRvIGF1dG9tYWdpY2FsbHkgCiAgd2l0aCBldmVyeSBuZXcgYnVpbGQgcHJvbW90ZWQgdG8gRWNsaXBzZS4gQ29kZSBmb3IgdGhpcyBhdXRvbWFnaWMgcHJvY2VzcyBpcyAKICBpbiBDVlMgaW4gL2hvbWUvdG9vbHMvLCBlbWYtaG9tZS9lbWYtYnVpbGRzL3NjcmlwdHMvLiBTZWUgcHJvbW90ZVRvRWNsaXBzZS5zaDwvbGk+CiAgPGxpPldlIGFsc28gaGF2ZSBhIFdoYXQncyBOZXcsIENWUz8gYXBwbGljYXRpb24gdGhhdCB0YWtlcyBvbmUtd2VlayBzbmFwc2hvdHMgCiAgb2YgZGVsdGFzIGluIENWUywgZ2VuZXJhdGVzIHRob3NlIHNuYXBzIGFzIFhNTCwgYW5kIHRoZW4gc3R5bGVzIHRoYXQgd2l0aCAKICBQSFArWFNMIGluIG9yZGVyIHRvIG1ha2UgaXQgc2VhcmNoYWJsZS9zb3J0YWJsZS9maWx0ZXJhYmxlLjwvbGk+CjwvdWw+CjwvYm9keT4=