KmZhcnNpLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA1IE1hciAyOQoKCgkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTCAgICBieSBNb3J0YXphIEdoYXNzYWIgU2hpcmFuCgoKUmlnaHQgdG8gTGVmdCBhbmQgRmFyc2kgTWFwcGluZyBmb3IgVmltCQkqZmFyc2kqICpGYXJzaSoKCntWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KCgkJCQkJCSpFMjcqCkluIG9yZGVyIHRvIHVzZSByaWdodC10by1sZWZ0IGFuZCBGYXJzaSBtYXBwaW5nIHN1cHBvcnQsIGl0IGlzIG5lY2Vzc2FyeSB0bwpjb21waWxlIFZpbSB3aXRoIHRoZSB8K2ZhcnNpfCBmZWF0dXJlLgoKVGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiBtYWRlIGJ5IE1vcnRhemEgRy4gU2hpcmFuIDxzaGlyYW5AanBzLm5ldD4KCgpJbnRyb2R1Y3Rpb24KLS0tLS0tLS0tLS0tCkluIHJpZ2h0LXRvLWxlZnQgb3JpZW50ZWQgZmlsZXMgdGhlIGNoYXJhY3RlcnMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gZnJvbSByaWdodAp0byBsZWZ0LiAgVGhpcyBraW5kIG9mIGZpbGUgaXMgbW9zdCB1c2VmdWwgd2hlbiB3cml0aW5nIEZhcnNpIGRvY3VtZW50cywKY29tcG9zaW5nIGZheGVzIG9yIHdyaXRpbmcgRmFyc2kgbWVtb3MuCgpUaGUgY29tbWFuZHMsIHByb21wdHMgYW5kIGhlbHAgZmlsZXMgYXJlIG5vdCBpbiBGYXJzaSwgdGhlcmVmb3JlIHRoZSB1c2VyCmludGVyZmFjZSByZW1haW5zIHRoZSBzdGFuZGFyZCBWaSBpbnRlcmZhY2UuCgoKSGlnaGxpZ2h0cwotLS0tLS0tLS0tCm8gIEVkaXRpbmcgbGVmdC10by1yaWdodCBmaWxlcyBhcyBpbiB0aGUgb3JpZ2luYWwgVmltLCBubyBjaGFuZ2UuCgpvICBWaWV3aW5nIGFuZCBlZGl0aW5nIGZpbGVzIGluIHJpZ2h0LXRvLWxlZnQgd2luZG93cy4gICBGaWxlIG9yaWVudGF0aW9uIGlzCiAgIHBlciB3aW5kb3csIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHZpZXcgdGhlIHNhbWUgZmlsZSBpbiByaWdodC10by1sZWZ0IGFuZAogICBsZWZ0LXRvLXJpZ2h0IG1vZGVzLCBzaW11bHRhbmVvdXNseS4KCm8gIENvbXBhdGliaWxpdHkgdG8gdGhlIG9yaWdpbmFsIFZpbS4gICBBbG1vc3QgYWxsIGZlYXR1cmVzIHdvcmsgaW4KICAgcmlnaHQtdG8tbGVmdCBtb2RlIChzZWUgYnVncyBiZWxvdykuCgpvICBDaGFuZ2luZyBrZXlib2FyZCBtYXBwaW5nIGFuZCByZXZlcnNlIGluc2VydCBtb2RlcyB1c2luZyBhIHNpbmdsZQogICBjb21tYW5kLgoKbyAgQmFja2luZyBmcm9tIHJldmVyc2UgaW5zZXJ0IG1vZGUgdG8gdGhlIGNvcnJlY3QgcGxhY2UgaW4gdGhlIGZpbGUKICAgKGlmIHBvc3NpYmxlKS4KCm8gIFdoaWxlIGluIEZhcnNpIG1vZGUsIG51bWJlcnMgYXJlIGVudGVyZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiAgVXBvbiBlbnRlcmluZwogICBhIG5vbmUgbnVtYmVyIGNoYXJhY3RlciwgdGhhdCBjaGFyYWN0ZXIgd2lsbCBiZSBpbnNlcnRlZCBqdXN0IGludG8gdGhlCiAgIGxlZnQgb2YgdGhlIGxhc3QgbnVtYmVyLgoKbyAgTm8gc3BlY2lhbCB0ZXJtaW5hbCB3aXRoIHJpZ2h0LXRvLWxlZnQgY2FwYWJpbGl0aWVzIGlzIHJlcXVpcmVkLiAgVGhlCiAgIHJpZ2h0LXRvLWxlZnQgY2hhbmdlcyBhcmUgY29tcGxldGVseSBoYXJkd2FyZSBpbmRlcGVuZGVudC4gIE9ubHkKICAgRmFyc2kgZm9udCBpcyBuZWNlc3NhcnkuCgpvICBGYXJzaSBrZXltYXBwaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgaW4gcmV2ZXJzZSBpbnNlcnQgbW9kZS4KCm8gIFRvZ2dsaW5nIGJldHdlZW4gbGVmdC10by1yaWdodCBhbmQgcmlnaHQtdG8tbGVmdCB2aWEgRjggZnVuY3Rpb24ga2V5LgoKbyAgVG9nZ2xpbmcgYmV0d2VlbiBGYXJzaSBJU0lSLTMzNDIgc3RhbmRhcmQgZW5jb2RpbmcgYW5kIFZpbSBGYXJzaSB2aWEgRjkKICAgZnVuY3Rpb24ga2V5LiAgU2luY2UgdGhpcyBtYWtlcyBzZW5zZSBvbmx5IGZvciB0aGUgdGV4dCB3cml0dGVuIGluCiAgIHJpZ2h0LXRvLWxlZnQgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHN1cHBvcnRlZCBvbmx5IGluIHJpZ2h0LXRvLWxlZnQKICAgbW9kZS4KCkZhcnNpIEZvbnRzCQkJCQkqZmFyc2kgZm9udHMqCi0tLS0tLS0tLS0tCgpJZiB0aGUgImV4dHJhIiBhcmNoaXZlIGhhcyBiZWVuIHVucGFja2VkLCB0aGUgZm9sbG93aW5nIGZpbGVzIGFyZSBmb3VuZCBpbiB0aGUKc3ViZGlyZWN0b3JpZXMgb2YgdGhlICckVklNL2ZhcnNpJyBkaXJlY3Rvcnk6CgogICArICBmYXItYTAxLnBjZiAgICBYIFdpbmRvd3MgZm9udHMgZm9yIFVuaXggaW5jbHVkaW5nIExpbnV4IHN5c3RlbXMKICAgKyAgZmFyLWEwMS5iZiAgICAgWCBXaW5kb3dzIGZvbnRzIGZvciBTdW5PUwogICArICBmYXItYTAxLmYxNiAgICBhIHNjcmVlbiBmb250cyBmb3IgVW5peCBpbmNsdWRpbmcgTGludXggc3lzdGVtcwogICArICBmYXItYTAxLmZvbiAgICBhIG1vbm9zcGFjZWQgZm9udHMgZm9yIFdpbmRvd3MgTlQvOTUvOTgKICAgKyAgZmFyLWEwMS5jb20gICAgYSBzY3JlZW4gZm9udHMgZm9yIERPUwoKCkZvbnQgSW5zdGFsbGF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tCgpvICBJbnN0YWxsYXRpb24gb2YgZm9udHMgZm9yIE1TIFdpbmRvdyBzeXN0ZW1zIChOVC85NS85OCkKCiAgIEZyb20gJ0NvbnRyb2wgUGFuZWwnIGZvbGRlciwgc3RhcnQgdGhlICdGb250cycgcHJvZ3JhbS4gIFRoZW4gZnJvbSAnZmlsZScKICAgbWVudSBpdGVtIHNlbGVjdCAnSW5zdGFsbCBOZXcgRm9udHMgLi4uJy4gIEJyb3dzZSBhbmQgc2VsZWN0IHRoZQogICAnZmFyLWEwMS5mb24nLCB0aGVuIGZvbGxvdyB0aGUgaW5zdGFsbGF0aW9uIGd1aWRlLgogICBOT1RFOiBzZXZlcmFsIHBlb3BsZSBoYXZlIHJlcG9ydGVkIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrLiAgVGhlIHNvbHV0aW9uCiAgIGlzIHVua25vd24uCgpvICBJbnN0YWxsYXRpb24gb2YgZm9udHMgZm9yIFggV2luZG93IHN5c3RlbXMgKFVuaXgvTGludXgpCgogICBEZXBlbmRpbmcgb24geW91ciBzeXN0ZW0sIGNvcHkgZmFyLWEwMS5wY2YuWiBvciBmYXItYTAxLnBjZi5neiBpbnRvIGEKICAgZGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLiAgQ2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRmFyc2kKICAgZm9udHMgYW5kIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKCiAgID4gIG1rZm9udGRpcgogICA+ICB4c2V0ICtmcCBwYXRoX25hbWVfb2ZfZmFyc2lfZm9udHNfZGlyZWN0b3J5CgpvICBJbnN0YWxsYXRpb24gb2YgZm9udHMgZm9yIFggV2luZG93IHN5c3RlbXMgKFN1bk9TKQoKICAgQ29weSBmYXItYTAxLmJmIGZvbnQgaW50byBhIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZS4KICAgQ2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmFyLWEwMS5mYiBmb250cyBhbmQKICAgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgoKICAgPiAgZmxkZmFtaWx5CiAgID4gIHhzZXQgK2ZwIHBhdGhfbmFtZV9vZl9mb250c19kaXJlY3RvcnkKCm8gIEluc3RhbGxhdGlvbiBvZiBBU0NJSSBzY3JlZW4gZm9udHMgKFVuaXgvTGludXgpCgogICBGb3IgTGludXggc3lzdGVtLCBjb3B5IHRoZSBmYXItYTAxLmYxNiBmb250cyBpbnRvIC91c3IvbGliL2tiZC9jb25zb2xlZm9udHMKICAgZGlyZWN0b3J5IGFuZCBleGVjdXRlIHRoZSBzZXRmb250IHByb2dyYW0gYXMgInNldGZvbnQgZmFyLWEwMS5mMTYiLiAgRm9yCiAgIG90aGVyIHN5c3RlbXMgKGUuZy4gU0NPIFVuaXgpLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGZvbnRzIGluc3RhbGxhdGlvbgogICBzZWN0aW9uIG9mIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0aW9uIG1hbnVhbHMuCgpvICBJbnN0YWxsYXRpb24gb2YgQVNDSUkgc2NyZWVuIGZvbnRzIChET1MpCgogICBBZnRlciBzeXN0ZW0gcG93ZXIgb24sIHByaW9yIHRvIHRoZSBmaXJzdCB1c2Ugb2YgVmltLCB1cGxvYWQgdGhlIEZhcnNpCiAgIGZvbnRzIGJ5IGV4ZWN1dGluZyB0aGUgZmFyLWEwMS5jb20gZm9udCB1cGxvYWRpbmcgcHJvZ3JhbS4KCgpVc2FnZQotLS0tLQpQcmlvciB0byBzdGFydGluZyBWaW0sIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBWaW0gY2FuIHJ1biBpbiBGYXJzaSBtb2RlLAptdXN0IGJlIHNldC4gIEluIGFkZGl0aW9uIHRvIGluc3RhbGxhdGlvbiBvZiBGYXJzaSBmb250cywgZm9sbG93aW5nIHBvaW50cwpyZWZlciB0byBzb21lIG9mIHRoZSBzeXN0ZW0gZW52aXJvbm1lbnRzLCB3aGljaCB5b3UgbWF5IG5lZWQgdG8gc2V0OgpLZXkgY29kZSBtYXBwaW5nLCBsb2FkaW5nIGdyYXBoaWMgY2FyZCBpbiBBU0NJSSBzY3JlZW4gbW9kZSwgc2V0dGluZyB0aGUgSU8KZHJpdmVyIGluIDggYml0IGNsZWFuIG1vZGUgLi4uIC4KCm8gIFNldHRpbmcgdGhlIEZhcnNpIGZvbnRzCgogICArICBGb3IgVmltIEdVSSBzZXQgdGhlICdndWlmb250JyB0byBmYXItYTAxLiAgVGhpcyBpcyBkb25lIGJ5IGVudGVyaW5nCiAgICAgICc6c2V0IGd1aWZvbnQ9ZmFyLWEwMScgaW4gdGhlIFZpbSB3aW5kb3cuCgogICAgICBZb3UgY2FuIGhhdmUgJ2d1aWZvbnQnIHNldCB0byBmYXItYTAxIGJ5IFZpbSBkdXJpbmcgdGhlIFZpbSBzdGFydHVwCiAgICAgIGJ5IGFwcGVuZGluZyB0aGUgJzpzZXQgZ3VpZm9udD1mYXItYTAxJyBpbnRvIHlvdXIgLnZpbXJjIGZpbGUKICAgICAgKGluIGNhc2Ugb2YgTlQvOTUvOTggcGxhdGZvcm1zIF92aW1yYykuCgogICAgICBVbmRlciB0aGUgWCBXaW5kb3cgZW52aXJvbm1lbnQsIHlvdSBjYW4gYWxzbyBzdGFydCBWaW0gd2l0aCB0aGUKICAgICAgJy1mbiBmYXItYTAxJyBvcHRpb24uCgogICArICBGb3IgVmltIHdpdGhpbiBhIHh0ZXJtLCBzdGFydCBhIHh0ZXJtIHdpdGggdGhlIEZhcnNpIGZvbnRzIChlLmcuCiAgICAgIGt0ZXJtIC1mbiBmYXItYTAxKS4gIFRoZW4gc3RhcnQgVmltIGluc2lkZSB0aGUga3Rlcm0uCgogICArICBGb3IgVmltIHVuZGVyIERPUywgcHJpb3IgdG8gdGhlIGZpcnN0IHVzYWdlIG9mIFZpbSwgdXBsb2FkIHRoZSBGYXJzaQogICAgICBmb250cyBieSBleGVjdXRpbmcgdGhlIGZhci1hMDEuY29tIGZvbnRzIHVwbG9hZGluZyBwcm9ncmFtLgoKbyAgRmFyc2kgS2V5bWFwcGluZyBBY3RpdmF0aW9uCgogICBUbyBhY3RpdmF0ZSB0aGUgRmFyc2kga2V5bWFwcGluZywgc2V0IGVpdGhlciAnYWx0a2V5bWFwJyBvciAnZmttYXAnLgogICBUaGlzIGlzIGRvbmUgYnkgZW50ZXJpbmcgJzpzZXQgYWttJyBvciAnOnNldCBmaycgaW4gdGhlIFZpbSB3aW5kb3cuCiAgIFlvdSBjYW4gaGF2ZSAnYWx0a2V5bWFwJyBvciAnZmttYXAnIHNldCBhcyBkZWZhdWx0IGJ5IGFwcGVuZGluZyAnOnNldCBha20nCiAgIG9yICc6c2V0IGZrJyBpbiB5b3VyIC52aW1yYyBmaWxlIG9yIF92aW1yYyBpbiBjYXNlIG9mIE5ULzk1Lzk4IHBsYXRmb3Jtcy4KCiAgIFRvIHR1cm4gb2ZmIHRoZSBGYXJzaSBrZXltYXBwaW5nIGFzIGEgZGVmYXVsdCBzZWNvbmQgbGFuZ3VhZ2Uga2V5bWFwcGluZywKICAgcmVzZXQgdGhlICdhbHRrZXltYXAnIGJ5IGVudGVyaW5nICc6c2V0IG5vYWttJy4KCm8gIHJpZ2h0LXRvLWxlZnQgRmFyc2kgTW9kZQoKICAgQnkgZGVmYXVsdCBWaW0gc3RhcnRzIGluIExlZnQtdG8tcmlnaHQgbW9kZS4gIEZvbGxvd2luZyBhcmUgd2F5cyB0byBjaGFuZ2UKICAgdGhlIHdpbmRvdyBvcmllbnRhdGlvbjoKCiAgICsgU3RhcnQgVmltIHdpdGggdGhlIC1GIG9wdGlvbiAoZS5nLiB2aW0gLUYgLi4uKS4KCiAgICsgVXNlIHRoZSBGOCBmdW5jdGlvbiBrZXkgdG8gdG9nZ2xlIGJldHdlZW4gbGVmdC10by1yaWdodCBhbmQgcmlnaHQtdG8tbGVmdC4KCiAgICsgV2hpbGUgaW4gTGVmdC10by1yaWdodCBtb2RlLCBlbnRlciAnc2V0IHJsJyBpbiB0aGUgY29tbWFuZCBsaW5lICgncmwnIGlzCiAgICAgdGhlIGFiYnJldmlhdGlvbiBmb3IgcmlnaHRsZWZ0KS4KCiAgICsgUHV0IHRoZSAnc2V0IHJsJyBsaW5lIGluIHlvdXIgJy52aW1yYycgZmlsZSB0byBzdGFydCBWaW0gaW4KICAgICByaWdodC10by1sZWZ0IG1vZGUgcGVybWFuZW50bHkuCgpFbmNvZGluZwotLS0tLS0tLQoKVGhlIGxldHRlciBlbmNvZGluZyB1c2VkIGlzIHRoZSBWaW0gZXh0ZW5kZWQgSVNJUi0zMzQyIHN0YW5kYXJkIHdpdGggYSBidWlsdAppbiBmdW5jdGlvbiB0byBjb252ZXJ0IGJldHdlZW4gVmltIGV4dGVuZGVkIElTSVItMzM0MiBhbmQgSVNJUi0zMzQyIHN0YW5kYXJkLgoKRm9yIGRvY3VtZW50IHBvcnRhYmlsaXR5IHJlYXNvbnMsIHRoZSBsZXR0ZXIgZW5jb2RpbmcgaXMga2VwdCB0aGUgc2FtZSBhY3Jvc3MKZGlmZmVyZW50IHBsYXRmb3JtcyAoaS5lLiBVTklYJ3MsIE5ULzk1Lzk4LCBNUyBET1MsIC4uLikuCgoKbyAgS2V5Ym9hcmQKCiAgICsgIENUUkwtXyBpbiBpbnNlcnQvcmVwbGFjZSBtb2RlcyB0b2dnbGVzIGJldHdlZW4gRmFyc2koYWttKS9MYXRpbgogICAgICBtb2RlIGFzIGZvbGxvd3M6CgogICArICBDVFJMLV8gbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSB0eXBlZCB0ZXh0IGluIGVkaXQgbW9kZS4KCiAgICsgIENUUkwtXyBpbiBjb21tYW5kIG1vZGUgb25seSB0b2dnbGVzIGtleWJvYXJkIG1hcHBpbmcgYmV0d2VlbiBGYXJzaShha20pLwogICAgICBMYXRpbi4gIFRoZSBGYXJzaSB0ZXh0IGlzIHRoZW4gZW50ZXJlZCBpbiByZXZlcnNlIGluc2VydCBtb2RlLgoKICAgKyAgRjggLSBUb2dnbGVzIGJldHdlZW4gbGVmdC10by1yaWdodCBhbmQgcmlnaHQtdG8tbGVmdC4KCiAgICsgIEY5IC0gVG9nZ2xlcyB0aGUgZW5jb2RpbmcgYmV0d2VlbiBJU0lSLTMzNDIgc3RhbmRhcmQgYW5kIFZpbSBleHRlbmRlZAogICAgICBJU0lSLTMzNDIgKHN1cHBvcnRlZCBvbmx5IGluIHJpZ2h0LXRvLWxlZnQgbW9kZSkuCgogICArICBLZXlib2FyZCBtYXBwaW5nIGlzIGJhc2VkIG9uIHRoZSBJcmFuaWFuIElTSVJJLTI5MDEgc3RhbmRhcmQuCiAgICAgIEZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUga2V5Ym9hcmQgbWFwcGluZyB3aGlsZSBGYXJzaShha20pIG1vZGUgc2V0OgoKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgIDAgIC0gID0KCaIgILEgILIgILMgILQgILUgILYgILcgILggILkgILAgIK0gIL0KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCX4gICEgIEAgICMgICQgICUgIF4gICYgICogICggICkgIF8gICsKCX4gIKMgIKcgIK4gIKQgIKUgIKogIKwgIOggIKggIKkgIOkgIKsKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCXEgIHcgIGUgIHIgIHQgIHogIHUgIGkgIG8gIHAgIFsgIF0KCdMgINIgIMYgINkgINggINUgINYgIOAgIMogIMkgIMcgIIgKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCVEgIFcgIEUgIFIgIFQgIFogIFUgIEkgIE8gIFAgIHsgIH0KCfcgIPUgIPQgIPMgIPIgIP0gIPAgIPYgIFsgIF0gIHsgIH0KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWEgIHMgIGQgIGYgIGcgIGggIGogIGsgIGwgIDsgICcgIFwKCdEgINAgIOEgIMMgINwgIMEgIMUgIN4gIN0gINogINsgIOsKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCUEgIFMgIEQgIEYgIEcgIEggIEogIEsgIEwgIDogICIgIHwKCfkgIPugIP4gIPogIPggIMAgIPwgIOYgIOcgILogILsgIOoKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCTwgIHkgIHggIGMgIHYgIGIgIG4gIG0gICwgIC4gIC8KCb4gINcgINQgIM4gIM0gIMwgIMsgIMQgIN8gIKYgIK8KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCT4gIFkgIFggIEMgIFYgIEIgIE4gIE0gIDwgID4gID8KCbwgIPEgINQgIM8gIM0gIKEgIMsgIMIgIL4gILwgIL8KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCk5vdGU6CgmhICBzdGFuZHMgZm9yIEZhcnNpIFBTUCAoYnJlYWsgd2l0aG91dCBzcGFjZSkKCgmiICBzdGFuZHMgZm9yIEZhcnNpIFBDTiAoZm9yIEhBTVpFIGF0dHJpYnV0ZSApCgpSZXN0cmljdGlvbnMKLS0tLS0tLS0tLS0tCgpvICBJbiBpbnNlcnQvcmVwbGFjZSBtb2RlIGFuZCBma21hcCAoRmFyc2kgbW9kZSkgc2V0LCBDVFJMLUIgaXMgbm90CiAgIHN1cHBvcnRlZC4KCm8gIElmIHlvdSBjaGFuZ2UgdGhlIGNoYXJhY3RlciBtYXBwaW5nIGJldHdlZW4gTGF0aW4vRmFyc2ksIHRoZSByZWRvIGJ1ZmZlcgogICB3aWxsIGJlIHJlc2V0IChlbXB0aWVkKS4gIFRoYXQgaXMsIHJlZG8gaXMgdmFsaWQgYW5kIHdpbGwgZnVuY3Rpb24gKHVzaW5nCiAgICcuJykgb25seSB3aXRoaW4gdGhlIG1vZGUgeW91IGFyZSBpbi4KCm8gIFdoaWxlIG51bWJlcnMgYXJlIGVudGVyZWQgaW4gRmFyc2kgbW9kZSwgdGhlIHJlZG8gYnVmZmVyIHdpbGwgYmUgcmVzZXQKICAgKGVtcHRpZWQpLiAgVGhhdCBpcywgeW91IGNhbm5vdCByZWRvIHRoZSBsYXN0IGNoYW5nZXMgKHVzaW5nICcuJykgYWZ0ZXIKICAgZW50ZXJpbmcgbnVtYmVycy4KCm8gIFdoaWxlIGluIGxlZnQtdG8tcmlnaHQgbW9kZSBhbmQgRmFyc2kgbW9kZSBzZXQsIENUUkwtUiBpcyBub3Qgc3VwcG9ydGVkLgoKbyAgV2hpbGUgaW4gcmlnaHQtdG8tbGVmdCBtb2RlLCB0aGUgc2VhcmNoIG9uICdMYXRpbicgcGF0dGVybiBkb2VzIG5vdCB3b3JrLAogICBleGNlcHQgaWYgeW91IGVudGVyIHRoZSBMYXRpbiBzZWFyY2ggcGF0dGVybiBpbiByZXZlcnNlLgoKbyAgSW4gY29tbWFuZCBtb2RlIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGVudGVyaW5nIG51bWJlcnMgZnJvbSBsZWZ0CiAgIHRvIHJpZ2h0IGFuZCBhbHNvIGZvciB0aGUgc2FrZSBvZiBmbGV4aWJpbGl0eSB0aGUga2V5bWFwcGluZyBsb2dpYyBpcwogICByZXN0cmljdGVkLgoKbyAgVW5kZXIgdGhlIFggV2luZG93IGVudmlyb25tZW50LCBpZiB5b3Ugd2FudCB0byBydW4gVmltIHdpdGhpbiBhIHh0ZXJtCiAgIHRlcm1pbmFsIGVtdWxhdG9yIGFuZCBGYXJzaSBtb2RlIHNldCwgeW91IG5lZWQgdG8gaGF2ZSBhbiBBTlNJIGNvbXBhdGlibGUKICAgeHRlcm0gdGVybWluYWwgZW11bGF0b3IuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGxldHRlciBjb2RlcyBhYm92ZSAxMjggZGVjaW1hbAogICBoYXZlIGNlcnRhaW4gbWVhbmluZ3MgaW4gdGhlIHN0YW5kYXJkIHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yLgoKICAgTm90ZTogVW5kZXIgWCBXaW5kb3cgZW52aXJvbm1lbnQsIFZpbSBHVUkgd29ya3MgZmluZSBpbiBGYXJzaSBtb2RlLgoJIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBvZiBhbnkgeHRlcm0gdGVybWluYWwgZW11bGF0b3IuCgoKQnVncwotLS0tCldoaWxlIGluIGluc2VydC9yZXBsYWNlIGFuZCBGYXJzaSBtb2RlIHNldCwgaWYgeW91IHJlcGVhdGVkbHkgY2hhbmdlIHRoZQpjdXJzb3IgcG9zaXRpb24gKHZpYSBjdXJzb3IgbW92ZW1lbnQpIGFuZCBlbnRlciBuZXcgdGV4dCBhbmQgdGhlbiB0cnkgdG8gdW5kbwp0aGUgbGFzdCBjaGFuZ2UsIHRoZSB1bmRvIHdpbGwgbGFnIG9uZSBjaGFuZ2UgYmVoaW5kLiAgQnV0IGFzIHlvdSBjb250aW51ZSB0bwp1bmRvLCB5b3Ugd2lsbCByZWFjaCB0aGUgb3JpZ2luYWwgbGluZSBvZiB0ZXh0LiAgWW91IGNhbiBhbHNvIHVzZSBVIHRvIHVuZG8gYWxsCmNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCBsaW5lLgoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1Z3MgcmVmZXIgdG8gcmlsZWZ0LnR4dC4KCiB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6Cg==