KmZhcnNpLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjQuICBMYXN0IGNoYW5nZTogMjAxNSBBdWcgMjkKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgTW9ydGF6YSBHaGFzc2FiIFNoaXJhbgoKClJpZ2h0IHRvIExlZnQgYW5kIEZhcnNpIE1hcHBpbmcgZm9yIFZpbQkJKmZhcnNpKiAqRmFyc2kqCgp7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CgoJCQkJCQkqRTI3KgpJbiBvcmRlciB0byB1c2UgcmlnaHQtdG8tbGVmdCBhbmQgRmFyc2kgbWFwcGluZyBzdXBwb3J0LCBpdCBpcyBuZWNlc3NhcnkgdG8KY29tcGlsZSBWaW0gd2l0aCB0aGUgfCtmYXJzaXwgZmVhdHVyZS4KClRoZXNlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbWFkZSBieSBNb3J0YXphIEcuIFNoaXJhbiA8c2hpcmFuQGpwcy5uZXQ+CgoKSW50cm9kdWN0aW9uCi0tLS0tLS0tLS0tLQpJbiByaWdodC10by1sZWZ0IG9yaWVudGVkIGZpbGVzIHRoZSBjaGFyYWN0ZXJzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGZyb20gcmlnaHQKdG8gbGVmdC4gIFRoaXMga2luZCBvZiBmaWxlIGlzIG1vc3QgdXNlZnVsIHdoZW4gd3JpdGluZyBGYXJzaSBkb2N1bWVudHMsCmNvbXBvc2luZyBmYXhlcyBvciB3cml0aW5nIEZhcnNpIG1lbW9zLgoKVGhlIGNvbW1hbmRzLCBwcm9tcHRzIGFuZCBoZWxwIGZpbGVzIGFyZSBub3QgaW4gRmFyc2ksIHRoZXJlZm9yZSB0aGUgdXNlcgppbnRlcmZhY2UgcmVtYWlucyB0aGUgc3RhbmRhcmQgVmkgaW50ZXJmYWNlLgoKCkhpZ2hsaWdodHMKLS0tLS0tLS0tLQpvICBFZGl0aW5nIGxlZnQtdG8tcmlnaHQgZmlsZXMgYXMgaW4gdGhlIG9yaWdpbmFsIFZpbSwgbm8gY2hhbmdlLgoKbyAgVmlld2luZyBhbmQgZWRpdGluZyBmaWxlcyBpbiByaWdodC10by1sZWZ0IHdpbmRvd3MuICAgRmlsZSBvcmllbnRhdGlvbiBpcwogICBwZXIgd2luZG93LCBzbyBpdCBpcyBwb3NzaWJsZSB0byB2aWV3IHRoZSBzYW1lIGZpbGUgaW4gcmlnaHQtdG8tbGVmdCBhbmQKICAgbGVmdC10by1yaWdodCBtb2Rlcywgc2ltdWx0YW5lb3VzbHkuCgpvICBDb21wYXRpYmlsaXR5IHRvIHRoZSBvcmlnaW5hbCBWaW0uICAgQWxtb3N0IGFsbCBmZWF0dXJlcyB3b3JrIGluCiAgIHJpZ2h0LXRvLWxlZnQgbW9kZSAoc2VlIGJ1Z3MgYmVsb3cpLgoKbyAgQ2hhbmdpbmcga2V5Ym9hcmQgbWFwcGluZyBhbmQgcmV2ZXJzZSBpbnNlcnQgbW9kZXMgdXNpbmcgYSBzaW5nbGUKICAgY29tbWFuZC4KCm8gIEJhY2tpbmcgZnJvbSByZXZlcnNlIGluc2VydCBtb2RlIHRvIHRoZSBjb3JyZWN0IHBsYWNlIGluIHRoZSBmaWxlCiAgIChpZiBwb3NzaWJsZSkuCgpvICBXaGlsZSBpbiBGYXJzaSBtb2RlLCBudW1iZXJzIGFyZSBlbnRlcmVkIGZyb20gbGVmdCB0byByaWdodC4gIFVwb24gZW50ZXJpbmcKICAgYSBub25lIG51bWJlciBjaGFyYWN0ZXIsIHRoYXQgY2hhcmFjdGVyIHdpbGwgYmUgaW5zZXJ0ZWQganVzdCBpbnRvIHRoZQogICBsZWZ0IG9mIHRoZSBsYXN0IG51bWJlci4KCm8gIE5vIHNwZWNpYWwgdGVybWluYWwgd2l0aCByaWdodC10by1sZWZ0IGNhcGFiaWxpdGllcyBpcyByZXF1aXJlZC4gIFRoZQogICByaWdodC10by1sZWZ0IGNoYW5nZXMgYXJlIGNvbXBsZXRlbHkgaGFyZHdhcmUgaW5kZXBlbmRlbnQuICBPbmx5CiAgIEZhcnNpIGZvbnQgaXMgbmVjZXNzYXJ5LgoKbyAgRmFyc2kga2V5bWFwcGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIGluIHJldmVyc2UgaW5zZXJ0IG1vZGUuCgpvICBUb2dnbGluZyBiZXR3ZWVuIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQgdmlhIEY4IGZ1bmN0aW9uIGtleS4KCm8gIFRvZ2dsaW5nIGJldHdlZW4gRmFyc2kgSVNJUi0zMzQyIHN0YW5kYXJkIGVuY29kaW5nIGFuZCBWaW0gRmFyc2kgdmlhIEY5CiAgIGZ1bmN0aW9uIGtleS4gIFNpbmNlIHRoaXMgbWFrZXMgc2Vuc2Ugb25seSBmb3IgdGhlIHRleHQgd3JpdHRlbiBpbgogICByaWdodC10by1sZWZ0IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyBzdXBwb3J0ZWQgb25seSBpbiByaWdodC10by1sZWZ0CiAgIG1vZGUuCgpGYXJzaSBGb250cwkJCQkJKmZhcnNpLWZvbnRzKgotLS0tLS0tLS0tLQoKVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgZm91bmQgaW4gdGhlIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSAnJFZJTS9mYXJzaS9mb250cycKZGlyZWN0b3J5OgoKICAgKyAgZmFyLWEwMS5wY2YgICAgWCBXaW5kb3dzIGZvbnRzIGZvciBVbml4IGluY2x1ZGluZyBMaW51eCBzeXN0ZW1zCiAgICsgIGZhci1hMDEuYmYgICAgIFggV2luZG93cyBmb250cyBmb3IgU3VuT1MKICAgKyAgZmFyLWEwMS5mMTYgICAgYSBzY3JlZW4gZm9udHMgZm9yIFVuaXggaW5jbHVkaW5nIExpbnV4IHN5c3RlbXMKICAgKyAgZmFyLWEwMS5mb24gICAgYSBtb25vc3BhY2VkIGZvbnRzIGZvciBXaW5kb3dzIE5ULzk1Lzk4CiAgICsgIGZhci1hMDEuY29tICAgIGEgc2NyZWVuIGZvbnRzIGZvciBET1MKCgpGb250IEluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0tLS0tLQoKbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBNUyBXaW5kb3cgc3lzdGVtcyAoTlQvOTUvOTgpCgogICBGcm9tICdDb250cm9sIFBhbmVsJyBmb2xkZXIsIHN0YXJ0IHRoZSAnRm9udHMnIHByb2dyYW0uICBUaGVuIGZyb20gJ2ZpbGUnCiAgIG1lbnUgaXRlbSBzZWxlY3QgJ0luc3RhbGwgTmV3IEZvbnRzIC4uLicuICBCcm93c2UgYW5kIHNlbGVjdCB0aGUKICAgJ2Zhci1hMDEuZm9uJywgdGhlbiBmb2xsb3cgdGhlIGluc3RhbGxhdGlvbiBndWlkZS4KICAgTk9URTogc2V2ZXJhbCBwZW9wbGUgaGF2ZSByZXBvcnRlZCB0aGF0IHRoaXMgZG9lcyBub3Qgd29yay4gIFRoZSBzb2x1dGlvbgogICBpcyB1bmtub3duLgoKbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBYIFdpbmRvdyBzeXN0ZW1zIChVbml4L0xpbnV4KQoKICAgRGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtLCBjb3B5IGZhci1hMDEucGNmLlogb3IgZmFyLWEwMS5wY2YuZ3ogaW50byBhCiAgIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZS4gIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIEZhcnNpCiAgIGZvbnRzIGFuZCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CgogICA+ICBta2ZvbnRkaXIKICAgPiAgeHNldCArZnAgcGF0aF9uYW1lX29mX2ZhcnNpX2ZvbnRzX2RpcmVjdG9yeQoKbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBYIFdpbmRvdyBzeXN0ZW1zIChTdW5PUykKCiAgIENvcHkgZmFyLWEwMS5iZiBmb250IGludG8gYSBkaXJlY3Rvcnkgb2YgeW91ciBjaG9pY2UuCiAgIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZhci1hMDEuZmIgZm9udHMgYW5kCiAgIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKCiAgID4gIGZsZGZhbWlseQogICA+ICB4c2V0ICtmcCBwYXRoX25hbWVfb2ZfZm9udHNfZGlyZWN0b3J5CgpvICBJbnN0YWxsYXRpb24gb2YgQVNDSUkgc2NyZWVuIGZvbnRzIChVbml4L0xpbnV4KQoKICAgRm9yIExpbnV4IHN5c3RlbSwgY29weSB0aGUgZmFyLWEwMS5mMTYgZm9udHMgaW50byAvdXNyL2xpYi9rYmQvY29uc29sZWZvbnRzCiAgIGRpcmVjdG9yeSBhbmQgZXhlY3V0ZSB0aGUgc2V0Zm9udCBwcm9ncmFtIGFzICJzZXRmb250IGZhci1hMDEuZjE2Ii4gIEZvcgogICBvdGhlciBzeXN0ZW1zIChlLmcuIFNDTyBVbml4KSwgcGxlYXNlIHJlZmVyIHRvIHRoZSBmb250cyBpbnN0YWxsYXRpb24KICAgc2VjdGlvbiBvZiB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiBtYW51YWxzLgoKbyAgSW5zdGFsbGF0aW9uIG9mIEFTQ0lJIHNjcmVlbiBmb250cyAoRE9TKQoKICAgQWZ0ZXIgc3lzdGVtIHBvd2VyIG9uLCBwcmlvciB0byB0aGUgZmlyc3QgdXNlIG9mIFZpbSwgdXBsb2FkIHRoZSBGYXJzaQogICBmb250cyBieSBleGVjdXRpbmcgdGhlIGZhci1hMDEuY29tIGZvbnQgdXBsb2FkaW5nIHByb2dyYW0uCgoKVXNhZ2UKLS0tLS0KUHJpb3IgdG8gc3RhcnRpbmcgVmltLCB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggVmltIGNhbiBydW4gaW4gRmFyc2kgbW9kZSwKbXVzdCBiZSBzZXQuICBJbiBhZGRpdGlvbiB0byBpbnN0YWxsYXRpb24gb2YgRmFyc2kgZm9udHMsIGZvbGxvd2luZyBwb2ludHMKcmVmZXIgdG8gc29tZSBvZiB0aGUgc3lzdGVtIGVudmlyb25tZW50cywgd2hpY2ggeW91IG1heSBuZWVkIHRvIHNldDoKS2V5IGNvZGUgbWFwcGluZywgbG9hZGluZyBncmFwaGljIGNhcmQgaW4gQVNDSUkgc2NyZWVuIG1vZGUsIHNldHRpbmcgdGhlIElPCmRyaXZlciBpbiA4IGJpdCBjbGVhbiBtb2RlIC4uLiAuCgpvICBTZXR0aW5nIHRoZSBGYXJzaSBmb250cwoKICAgKyAgRm9yIFZpbSBHVUkgc2V0IHRoZSAnZ3VpZm9udCcgdG8gZmFyLWEwMS4gIFRoaXMgaXMgZG9uZSBieSBlbnRlcmluZwogICAgICAnOnNldCBndWlmb250PWZhci1hMDEnIGluIHRoZSBWaW0gd2luZG93LgoKICAgICAgWW91IGNhbiBoYXZlICdndWlmb250JyBzZXQgdG8gZmFyLWEwMSBieSBWaW0gZHVyaW5nIHRoZSBWaW0gc3RhcnR1cAogICAgICBieSBhcHBlbmRpbmcgdGhlICc6c2V0IGd1aWZvbnQ9ZmFyLWEwMScgaW50byB5b3VyIC52aW1yYyBmaWxlCiAgICAgIChpbiBjYXNlIG9mIE5ULzk1Lzk4IHBsYXRmb3JtcyBfdmltcmMpLgoKICAgICAgVW5kZXIgdGhlIFggV2luZG93IGVudmlyb25tZW50LCB5b3UgY2FuIGFsc28gc3RhcnQgVmltIHdpdGggdGhlCiAgICAgICctZm4gZmFyLWEwMScgb3B0aW9uLgoKICAgKyAgRm9yIFZpbSB3aXRoaW4gYSB4dGVybSwgc3RhcnQgYSB4dGVybSB3aXRoIHRoZSBGYXJzaSBmb250cyAoZS5nLgogICAgICBrdGVybSAtZm4gZmFyLWEwMSkuICBUaGVuIHN0YXJ0IFZpbSBpbnNpZGUgdGhlIGt0ZXJtLgoKICAgKyAgRm9yIFZpbSB1bmRlciBET1MsIHByaW9yIHRvIHRoZSBmaXJzdCB1c2FnZSBvZiBWaW0sIHVwbG9hZCB0aGUgRmFyc2kKICAgICAgZm9udHMgYnkgZXhlY3V0aW5nIHRoZSBmYXItYTAxLmNvbSBmb250cyB1cGxvYWRpbmcgcHJvZ3JhbS4KCm8gIEZhcnNpIEtleW1hcHBpbmcgQWN0aXZhdGlvbgoKICAgVG8gYWN0aXZhdGUgdGhlIEZhcnNpIGtleW1hcHBpbmcsIHNldCBlaXRoZXIgJ2FsdGtleW1hcCcgb3IgJ2ZrbWFwJy4KICAgVGhpcyBpcyBkb25lIGJ5IGVudGVyaW5nICc6c2V0IGFrbScgb3IgJzpzZXQgZmsnIGluIHRoZSBWaW0gd2luZG93LgogICBZb3UgY2FuIGhhdmUgJ2FsdGtleW1hcCcgb3IgJ2ZrbWFwJyBzZXQgYXMgZGVmYXVsdCBieSBhcHBlbmRpbmcgJzpzZXQgYWttJwogICBvciAnOnNldCBmaycgaW4geW91ciAudmltcmMgZmlsZSBvciBfdmltcmMgaW4gY2FzZSBvZiBOVC85NS85OCBwbGF0Zm9ybXMuCgogICBUbyB0dXJuIG9mZiB0aGUgRmFyc2kga2V5bWFwcGluZyBhcyBhIGRlZmF1bHQgc2Vjb25kIGxhbmd1YWdlIGtleW1hcHBpbmcsCiAgIHJlc2V0IHRoZSAnYWx0a2V5bWFwJyBieSBlbnRlcmluZyAnOnNldCBub2FrbScuCgpvICByaWdodC10by1sZWZ0IEZhcnNpIE1vZGUKCiAgIEJ5IGRlZmF1bHQgVmltIHN0YXJ0cyBpbiBMZWZ0LXRvLXJpZ2h0IG1vZGUuICBGb2xsb3dpbmcgYXJlIHdheXMgdG8gY2hhbmdlCiAgIHRoZSB3aW5kb3cgb3JpZW50YXRpb246CgogICArIFN0YXJ0IFZpbSB3aXRoIHRoZSAtRiBvcHRpb24gKGUuZy4gdmltIC1GIC4uLikuCgogICArIFVzZSB0aGUgRjggZnVuY3Rpb24ga2V5IHRvIHRvZ2dsZSBiZXR3ZWVuIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQuCgogICArIFdoaWxlIGluIExlZnQtdG8tcmlnaHQgbW9kZSwgZW50ZXIgJ3NldCBybCcgaW4gdGhlIGNvbW1hbmQgbGluZSAoJ3JsJyBpcwogICAgIHRoZSBhYmJyZXZpYXRpb24gZm9yIHJpZ2h0bGVmdCkuCgogICArIFB1dCB0aGUgJ3NldCBybCcgbGluZSBpbiB5b3VyICcudmltcmMnIGZpbGUgdG8gc3RhcnQgVmltIGluCiAgICAgcmlnaHQtdG8tbGVmdCBtb2RlIHBlcm1hbmVudGx5LgoKRW5jb2RpbmcKLS0tLS0tLS0KClRoZSBsZXR0ZXIgZW5jb2RpbmcgdXNlZCBpcyB0aGUgVmltIGV4dGVuZGVkIElTSVItMzM0MiBzdGFuZGFyZCB3aXRoIGEgYnVpbHQKaW4gZnVuY3Rpb24gdG8gY29udmVydCBiZXR3ZWVuIFZpbSBleHRlbmRlZCBJU0lSLTMzNDIgYW5kIElTSVItMzM0MiBzdGFuZGFyZC4KCkZvciBkb2N1bWVudCBwb3J0YWJpbGl0eSByZWFzb25zLCB0aGUgbGV0dGVyIGVuY29kaW5nIGlzIGtlcHQgdGhlIHNhbWUgYWNyb3NzCmRpZmZlcmVudCBwbGF0Zm9ybXMgKGkuZS4gVU5JWCdzLCBOVC85NS85OCwgTVMgRE9TLCAuLi4pLgoKCm8gIEtleWJvYXJkCgogICArICBDVFJMLV8gaW4gaW5zZXJ0L3JlcGxhY2UgbW9kZXMgdG9nZ2xlcyBiZXR3ZWVuIEZhcnNpKGFrbSkvTGF0aW4KICAgICAgbW9kZSBhcyBmb2xsb3dzOgoKICAgKyAgQ1RSTC1fIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgdHlwZWQgdGV4dCBpbiBlZGl0IG1vZGUuCgogICArICBDVFJMLV8gaW4gY29tbWFuZCBtb2RlIG9ubHkgdG9nZ2xlcyBrZXlib2FyZCBtYXBwaW5nIGJldHdlZW4gRmFyc2koYWttKS8KICAgICAgTGF0aW4uICBUaGUgRmFyc2kgdGV4dCBpcyB0aGVuIGVudGVyZWQgaW4gcmV2ZXJzZSBpbnNlcnQgbW9kZS4KCiAgICsgIEY4IC0gVG9nZ2xlcyBiZXR3ZWVuIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQuCgogICArICBGOSAtIFRvZ2dsZXMgdGhlIGVuY29kaW5nIGJldHdlZW4gSVNJUi0zMzQyIHN0YW5kYXJkIGFuZCBWaW0gZXh0ZW5kZWQKICAgICAgSVNJUi0zMzQyIChzdXBwb3J0ZWQgb25seSBpbiByaWdodC10by1sZWZ0IG1vZGUpLgoKICAgKyAgS2V5Ym9hcmQgbWFwcGluZyBpcyBiYXNlZCBvbiB0aGUgSXJhbmlhbiBJU0lSSS0yOTAxIHN0YW5kYXJkLgogICAgICBGb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIGtleWJvYXJkIG1hcHBpbmcgd2hpbGUgRmFyc2koYWttKSBtb2RlIHNldDoKCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglgICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5ICAwICAtICA9CgmiICCxICCyICCzICC0ICC1ICC2ICC3ICC4ICC5ICCwICCtICC9CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgl+ICAhICBAICAjICAkICAlICBeICAmICAqICAoICApICBfICArCgl+ICCjICCnICCuICCkICClICCqICCsICDoICCoICCpICDpICCrCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglxICB3ICBlICByICB0ICB6ICB1ICBpICBvICBwICBbICBdCgnTICDSICDGICDZICDYICDVICDWICDgICDKICDJICDHICCICgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglRICBXICBFICBSICBUICBaICBVICBJICBPICBQICB7ICB9Cgn3ICD1ICD0ICDzICDyICD9ICDwICD2ICBbICBdICB7ICB9CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglhICBzICBkICBmICBnICBoICBqICBrICBsICA7ICAnICBcCgnRICDQICDhICDDICDcICDBICDFICDeICDdICDaICDbICDrCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglBICBTICBEICBGICBHICBIICBKICBLICBMICA6ICAiICB8Cgn5ICD7oCD+ICD6ICD4ICDAICD8ICDmICDnICC6ICC7ICDqCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgk8ICB5ICB4ICBjICB2ICBiICBuICBtICAsICAuICAvCgm+ICDXICDUICDOICDNICDMICDLICDEICDfICCmICCvCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgk+ICBZICBYICBDICBWICBCICBOICBNICA8ICA+ICA/Cgm8ICDxICDUICDPICDNICChICDLICDCICC+ICC8ICC/CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpOb3RlOgoJoSAgc3RhbmRzIGZvciBGYXJzaSBQU1AgKGJyZWFrIHdpdGhvdXQgc3BhY2UpCgoJoiAgc3RhbmRzIGZvciBGYXJzaSBQQ04gKGZvciBIQU1aRSBhdHRyaWJ1dGUpCgpSZXN0cmljdGlvbnMKLS0tLS0tLS0tLS0tCgpvICBJbiBpbnNlcnQvcmVwbGFjZSBtb2RlIGFuZCBma21hcCAoRmFyc2kgbW9kZSkgc2V0LCBDVFJMLUIgaXMgbm90CiAgIHN1cHBvcnRlZC4KCm8gIElmIHlvdSBjaGFuZ2UgdGhlIGNoYXJhY3RlciBtYXBwaW5nIGJldHdlZW4gTGF0aW4vRmFyc2ksIHRoZSByZWRvIGJ1ZmZlcgogICB3aWxsIGJlIHJlc2V0IChlbXB0aWVkKS4gIFRoYXQgaXMsIHJlZG8gaXMgdmFsaWQgYW5kIHdpbGwgZnVuY3Rpb24gKHVzaW5nCiAgICcuJykgb25seSB3aXRoaW4gdGhlIG1vZGUgeW91IGFyZSBpbi4KCm8gIFdoaWxlIG51bWJlcnMgYXJlIGVudGVyZWQgaW4gRmFyc2kgbW9kZSwgdGhlIHJlZG8gYnVmZmVyIHdpbGwgYmUgcmVzZXQKICAgKGVtcHRpZWQpLiAgVGhhdCBpcywgeW91IGNhbm5vdCByZWRvIHRoZSBsYXN0IGNoYW5nZXMgKHVzaW5nICcuJykgYWZ0ZXIKICAgZW50ZXJpbmcgbnVtYmVycy4KCm8gIFdoaWxlIGluIGxlZnQtdG8tcmlnaHQgbW9kZSBhbmQgRmFyc2kgbW9kZSBzZXQsIENUUkwtUiBpcyBub3Qgc3VwcG9ydGVkLgoKbyAgV2hpbGUgaW4gcmlnaHQtdG8tbGVmdCBtb2RlLCB0aGUgc2VhcmNoIG9uICdMYXRpbicgcGF0dGVybiBkb2VzIG5vdCB3b3JrLAogICBleGNlcHQgaWYgeW91IGVudGVyIHRoZSBMYXRpbiBzZWFyY2ggcGF0dGVybiBpbiByZXZlcnNlLgoKbyAgSW4gY29tbWFuZCBtb2RlIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGVudGVyaW5nIG51bWJlcnMgZnJvbSBsZWZ0CiAgIHRvIHJpZ2h0IGFuZCBhbHNvIGZvciB0aGUgc2FrZSBvZiBmbGV4aWJpbGl0eSB0aGUga2V5bWFwcGluZyBsb2dpYyBpcwogICByZXN0cmljdGVkLgoKbyAgVW5kZXIgdGhlIFggV2luZG93IGVudmlyb25tZW50LCBpZiB5b3Ugd2FudCB0byBydW4gVmltIHdpdGhpbiBhIHh0ZXJtCiAgIHRlcm1pbmFsIGVtdWxhdG9yIGFuZCBGYXJzaSBtb2RlIHNldCwgeW91IG5lZWQgdG8gaGF2ZSBhbiBBTlNJIGNvbXBhdGlibGUKICAgeHRlcm0gdGVybWluYWwgZW11bGF0b3IuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGxldHRlciBjb2RlcyBhYm92ZSAxMjggZGVjaW1hbAogICBoYXZlIGNlcnRhaW4gbWVhbmluZ3MgaW4gdGhlIHN0YW5kYXJkIHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yLgoKICAgTm90ZTogVW5kZXIgWCBXaW5kb3cgZW52aXJvbm1lbnQsIFZpbSBHVUkgd29ya3MgZmluZSBpbiBGYXJzaSBtb2RlLgoJIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBvZiBhbnkgeHRlcm0gdGVybWluYWwgZW11bGF0b3IuCgoKQnVncwotLS0tCldoaWxlIGluIGluc2VydC9yZXBsYWNlIGFuZCBGYXJzaSBtb2RlIHNldCwgaWYgeW91IHJlcGVhdGVkbHkgY2hhbmdlIHRoZQpjdXJzb3IgcG9zaXRpb24gKHZpYSBjdXJzb3IgbW92ZW1lbnQpIGFuZCBlbnRlciBuZXcgdGV4dCBhbmQgdGhlbiB0cnkgdG8gdW5kbwp0aGUgbGFzdCBjaGFuZ2UsIHRoZSB1bmRvIHdpbGwgbGFnIG9uZSBjaGFuZ2UgYmVoaW5kLiAgQnV0IGFzIHlvdSBjb250aW51ZSB0bwp1bmRvLCB5b3Ugd2lsbCByZWFjaCB0aGUgb3JpZ2luYWwgbGluZSBvZiB0ZXh0LiAgWW91IGNhbiBhbHNvIHVzZSBVIHRvIHVuZG8gYWxsCmNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCBsaW5lLgoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1Z3MgcmVmZXIgdG8gcmlsZWZ0LnR4dC4KCiB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6Cg==