UXQgMy4xIGludHJvZHVjZXMgbWFueSBzaWduaWZpY2FudCBuZXcgZmVhdHVyZXMgYW5kIG1hbnkgaW1wcm92ZW1lbnRzCm92ZXIgdGhlIDMuMC54IHNlcmllcy4gVGhpcyBmaWxlIHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBtYWluCmNoYW5nZXMgc2luY2UgdmVyc2lvbiAzLjAueC4gRm9yIGZ1cnRoZXIgZGV0YWlscyBzZWUgdGhlIG9ubGluZQpkb2N1bWVudGF0aW9uIHdoaWNoIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgYWxzbwphdmFpbGFibGUgYXQgaHR0cDovL3F0Lm5va2lhLmNvbS9kb2MvLgoKVGhlIFF0IHZlcnNpb24gMy4xIHNlcmllcyBpcyBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHRoZSAzLjAueCBzZXJpZXM6CmFwcGxpY2F0aW9ucyBjb21waWxlZCBmb3IgMy4wIHdpbGwgY29udGludWUgdG8gcnVuIHdpdGggMy4xLgoKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpRdCBTY3JpcHQgZm9yIEFwcGxpY2F0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpRdCAzLjEgaXMgdGhlIGZpcnN0IFF0IHJlbGVhc2UgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIFF0IFNjcmlwdCBmb3IKQXBwbGljYXRpb25zIChRU0EpLiBRU0EgcHJvdmlkZXMgYSBzY3JpcHRpbmcgZW5naW5lLCBhbiBJREUgZm9yCmNyZWF0aW5nIGFuZCBlZGl0aW5nIHNjcmlwdHMgYW5kIHNjcmlwdCBmb3JtcywgYW5kIGJpbmRpbmdzIHRvIHRoZSBRdApBUEkuIFNjcmlwdC1lbmFibGluZyBhIFF0IGFwcGxpY2F0aW9uIGlzIG5vdCBkaWZmaWN1bHQgYW5kIHRoZSBJREUKbWFrZXMgaXQgZWFzeSBmb3IgcmVzZWxsZXJzIGFuZCBlbmQtdXNlcnMgdG8gd3JpdGUgdGhlaXIgb3duIHNjcmlwdHMuClFTQSBpcyBkdWUgZm9yIHJlbGVhc2UgYWZ0ZXIgUXQgMy4xLgoKClF0IERlc2lnbmVyCi0tLS0tLS0tLS0tClF0IERlc2lnbmVyLCB0aGUgdmlzdWFsIEdVSSBidWlsZGVyLCBoYXMgdW5kZXJnb25lIHNldmVyYWwgdXNhYmlsaXR5CmltcHJvdmVtZW50cy4gQSBuZXcgZGlhbG9nIGZvciBjcmVhdGluZyBhbmQgZWRpdGluZyBzaWduYWxzIGFuZCBzbG90cwpjb25uZWN0aW9ucyBoYXMgYmVlbiBjcmVhdGVkOiBpdCBpcyBtdWNoIGVhc2llciB0byB1c2UgYW5kIG11Y2ggZmFzdGVyCmZvciBzZXR0aW5nIHVwIG11bHRpcGxlIGNvbm5lY3Rpb25zLiBUaGUgd2lkZ2V0cyBhcmUgbm93IHByZXNlbnRlZCBpbgphbiBlYXN5LXRvLXVzZSB0b29sYm94IHJhdGhlciB0aGFuIGluIHRvb2xiYXJzIChhbHRob3VnaCB5b3UgY2FuIHN0aWxsCmhhdmUgdGhlIHRvb2xiYXJzIGlmIHlvdSB3YW50KS4gVGhlIHByb3BlcnR5IGVkaXRvciBub3cgaGFuZGxlcyBjb21tb24KcHJvcGVydGllcyBpbiBtdWx0aXBsZSB3aWRnZXRzIHNpbXVsdGFuZW91c2x5LiBCeSBwb3B1bGFyIGRlbWFuZCwKV1lTSVdZRyBzdXBwb3J0IGZvciBRV2lkZ2V0U3RhY2sgaGFzIGJlZW4gYWRkZWQuIFJpY2ggdGV4dCBpcyBub3cKc3VwcG9ydGVkIHdpdGggYSByaWNoIHRleHQgZWRpdG9yLiBBbmQgdGhlIGNvZGUgZWRpdG9yIGNhbiBiZSB1c2VkIGZvcgpvcmRpbmFyeSBtZW1iZXIgZnVuY3Rpb25zIGFzIHdlbGwgYXMgZm9yIHNsb3RzLgoKClF0IEFzc2lzdGFudAotLS0tLS0tLS0tLS0KUXQgQXNzaXN0YW50LCB0aGUgUXQgZG9jdW1lbnRhdGlvbiBicm93c2VyLCBjYW4gbm93IGJlIHVzZWQgd2l0aApjdXN0b20gZG9jdW1lbnRhdGlvbiBzZXRzLiBUaGlzIG5ldyBmdW5jdGlvbmFsaXR5IGNvbWJpbmVkIHdpdGggdGhlCm5ldyBRQXNzaXN0YW50Q2xpZW50IGNsYXNzIG1lYW5zIHRoYXQgeW91IGNhbiB1c2UgUXQgQXNzaXN0YW50IGFzIGEKaGVscCBicm93c2VyIGZvciB5b3VyIG93biBhcHBsaWNhdGlvbnMuIFF0IEFzc2lzdGFudCBoYXMgYWxzbyBiZWVuCmVuaGFuY2VkIGJ5IHRoZSBhZGRpdGlvbiBvZiBhIGZhc3QgZnVsbCB0ZXh0IHNlYXJjaCBlbmdpbmUuCgoKTW90aWYKLS0tLS0KVGhlIGdlbmVyYWwgaW5kdXN0cnktd2lkZSBtb3ZlIGF3YXkgZnJvbSBNb3RpZiBpcyBsZWF2aW5nIG1vcmUgYW5kCm1vcmUgY29tcGFuaWVzIGluIG5lZWQgb2YgYSBtaWdyYXRpb24gc29sdXRpb24uIEJ1dCBjb252ZXJ0aW5nIGxhcmdlCmxlZ2FjeSBhcHBsaWNhdGlvbnMgaW4gb25lIHN0ZXAgaXMgb2Z0ZW4gaW1wcmFjdGljYWwuIFRvIG1pbmltaXplCnJpc2tzIGFuZCB0byBtYW5hZ2UgdGhlIHdvcmtsb2FkIGNvbXBhbmllcyBvZnRlbiB3YW50IHRvIHBvcnQgY29kZSBvbgphIG1vZHVsZSBieSBtb2R1bGUgYmFzaXMuIFF0IDMuMSBpbmNsdWRlZHMgYSBjb21wbGV0ZWx5IG5ldyBNb3RpZgptb2R1bGUgdGhhdCBzdXBwb3J0cyBoeWJyaWQgYXBwbGljYXRpb25zIGluIHdoaWNoIFF0IGNvZGUgYW5kIE1vdGlmCmNvZGUgY29leGlzdC4gKFRoaXMgb2Jzb2xldGVzIHRoZSBlYXJsaWVyIHJ1ZGltZW50YXJ5IFF0IFh0L01vdGlmCmV4dGVuc2lvbi4pCgoKQWN0aXZlWAotLS0tLS0tCldpdGggdGhlIHJlbGVhc2Ugb2YgUXQgMy4xLCBjdXN0b21lcnMgd2hvIHVzZSBRdCBmb3IgTWljcm9zb2Z0IFdpbmRvd3MKZGV2ZWxvcG1lbnQgY2FuIG5vdyB1c2UgUXQgd2l0aCBBY3RpdmVYLiBUaGUgbmV3IEFjdGl2ZVF0IG1vZHVsZQpwcm92aWRlcyBhIHNpbXBsZSBBUEkgZm9yIENPTSBhbmQgQWN0aXZlWC4gVGhlIG1vZHVsZSBjYW4gYmUgdXNlZCB0bwpjcmVhdGUgYXBwbGljYXRpb25zIHdoaWNoIGhvc3QgQWN0aXZlWCBjb250cm9scywgYW5kIGFsc28gdG8gY3JlYXRlCmFwcGxpY2F0aW9ucyB0aGF0IHNlcnZlIEFjdGl2ZVggY29udHJvbHMgKGUuZy4gSW50ZXJuZXQgRXhwbG9yZXIKcGx1Z2lucykuCgoKUXQvTWFjCi0tLS0tLQpUaGUgaW50cm9kdWN0aW9uIG9mIFF0L01hYywgYSBNYWMgT1MgWCBwb3J0IG9mIFF0LCB3aXRoIFF0IDMuMCBoYXMKcHJvdmVkIGEgZ3JlYXQgc3VjY2Vzcy4gVGhpcyBwb3J0IGhhcyB1bmRlcmdvbmUgbWFueSBpbXByb3ZlbWVudHMgaW4KUXQgMy4xLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byBBcHBlYXJhbmNlIE1hbmFnZXIsIGFudGktYWxpYXNlZAp0ZXh0IGFuZCB1c2VyIHNldHRpbmdzLiBUaGUgUXQgT3BlbkdMIHN1cHBvcnQgaXMgZ3JlYXRseSBpbXByb3ZlZCwgYW5kCnVzZXMgdGhlIGhhcmR3YXJlLWFjY2VsZXJhdGVkIGRyaXZlcnMuCgoKUXQvRW1iZWRkZWQKLS0tLS0tLS0tLS0KR3JhcGhpY3MsIG1vdXNlIGFuZCBrZXlib2FyZCBkcml2ZXJzIGNhbiBub3cgYmUgY29tcGlsZWQgYXMgcGx1Z2lucy4KCgpRdCBsaWJyYXJ5Ci0tLS0tLS0tLS0KSW4gYWRkaXRpb24gdG8gdGhlIG5ldyBhZGRpdGlvbnMgYW5kIGVuaGFuY2VtZW50cyByZWZlcnJlZCB0byBhYm92ZSwKYXMgd2l0aCBhbGwgbWFqb3IgUXQgcmVsZWFzZXMsIFF0IDMuMSBpbmNsdWRlcyBodW5kcmVkcyBvZgppbXByb3ZlbWVudHMgaW4gdGhlIGV4aXN0aW5nIGNsYXNzIGxpYnJhcnkuIEhlcmUgaXMgYSBicmllZiBzdW1tYXJ5IG9mCnRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZXM6CgotIFFUZXh0RWRpdCBoYXMgYSBuZXcgdGV4dCBmb3JtYXQ6IExvZ1RleHQuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBhbmQKICBtZW1vcnkgb3B0aW1pemVkIGZvcm1hdCBlc3BlY2lhbGx5IGRlc2lnbmVkIGZvciB0aGUgZmFzdCBkaXNwbGF5IG9mCiAgbGFyZ2UgYW1vdW50cyBvZiB0ZXh0LiBUaGUgZm9ybWF0IHN1cHBvcnRzIGJhc2ljIGhpZ2hsaWdodGluZywKICBpbmNsdWRpbmcgYm9sZCBhbmQgY29sb3JlZCB0ZXh0LgoKLSBUaGUgbmV3IFFTeW50YXhIaWdobGlnaHRlciBjbGFzcyBtYWtlcyBpdCBib3RoIGVhc3kgYW5kIGVmZmljaWVudCB0bwogIGFkZCBzeW50YXggaGlnaGxpZ2h0aW5nIGNhcGFiaWxpdGllcyB0byBhIFFUZXh0RWRpdC4KCi0gUUh0dHAgYW5kIFFGdHAgaW4gZWFybGllciBRdCdzIHdlcmUgaW1wbGVtZW50YXRpb25zIG9mIHRoZQogIFFOZXR3b3JrUHJvdG9jb2wuIEJvdGggaGF2ZSBiZWVuIGV4dGVuZGVkIHRvIHN0YW5kIGluIHRoZWlyIG93bgogIHJpZ2h0LiBJZiB5b3UgbWlzc2VkIHNvbWUgZmxleGliaWxpdHkgaW4gdGhlIG5ldHdvcmsgcHJvdG9jb2wKICBhYnN0cmFjdGlvbnMgb2YgZWFybGllciBRdCdzLCB0aGUgbmV3IFFIdHRwIGFuZCBRRnRwIGNsYXNzZXMgc2hvdWxkCiAgcHJvdmlkZSB0aGUgc29sdXRpb24uCgotIFFBY2NlbCwgdXNlZCB0byBoYW5kbGUga2V5Ym9hcmQgc2hvcnRjdXRzLCBub3cgZ3JhY2VmdWxseSBjb3BlcyB3aXRoCiAgc2hvcnRjdXQgY2xhc2hlcy4gSWYgYSBjbGFzaCBvY2N1cnMsIGEgbmV3IHNpZ25hbCwKICBhY3RpdmF0ZWRBbWJpZ3VvdXNseSgpLCBpcyBlbWl0dGVkLiBDbGFzc2VzIHRoYXQgdXNlIFFBY2NlbCwgbGlrZQogIFFCdXR0b24ncyBzdWJjbGFzc2VzIGFuZCBRUG9wdXBNZW51LCBtYWtlIHVzZSBvZiB0aGlzIG5ldwogIGZ1bmN0aW9uYWxpdHkuIEZ1dGhlcm1vcmUgUUFjY2VsIGNhbiBub3cgaGFuZGxlIG11bHRpLWtleSBzZXF1ZW5jZXMsCiAgZm9yIGV4YW1wbGUsIEN0cmwrWCxDdHJsK0YuCgotIFFDbGlwYm9hcmQgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gc2ltcGxpZnkgZGF0YSBleGNoYW5nZSBiZXR3ZWVuCiAgcHJvZ3JhbXMuCgotIFRocmVhZCBzdXBwb3J0OiBhbG1vc3QgYWxsIG1ldGhvZHMgaW4gdGhlIHRvb2xzIGNsYXNzZXMgaGF2ZSBiZWVuCiAgbWFkZSByZWVudHJhbnQuIFFBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KCkgYW5kIGEgZmV3IG90aGVyIG1ldGhvZHMKICBhcmUgbm93IHRocmVhZC1zYWZlIGlmIFF0IGlzIGNvbXBpbGVkIGFzIGEgbXVsdGktdGhyZWFkZWQgbGlicmFyeS4KICAoVGhlIGRvY3VtZW50YXRpb24gbm93IHN0YXRlcyBpZiBhIGNsYXNzIG9yIGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlCiAgb3IgcmVlbnRyYW50LikKCi0gQSBRTXV0ZXhMb2NrZXIgY2xhc3MgaGFzIGJlZW4gYWRkZWQgdG8gc2ltcGxpZnkgdGhlIGxvY2tpbmcgYW5kCiAgdW5sb2NraW5nIG9mIG11dGV4ZXMuCgotIElucHV0IG1ldGhvZHM6IEEgc2VsZWN0aW9uTGVuZ3RoKCkgZnVuY3Rpb24gaGFzIGJlZW4gYWRkZWQgdG8KICBRSU1FdmVudC4gSmFwYW5lc2UgY29tcG9zaXRpb25zIGFyZSBub3cgaGFuZGxlZCBjb3JyZWN0bHkuIFN1cHBvcnQKICBmb3IgQUlNTSBiYXNlZCBpbnB1dCBtZXRob2RzICh0aG9zZSB3b3JraW5nIG9uIG5vbi1Bc2lhbiB2ZXJzaW9ucyBvZgogIFdpbjk1Lzk4L01lKSBoYXMgYmVlbiBhZGRlZC4KCi0gTGFyZ2UgRmlsZSBzdXBwb3J0OiBRdCdzIGludGVybmFscyBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gc3VwcG9ydAogIExhcmdlIEZpbGVzICg+IDJHQikuIFFGaWxlRGlhbG9nIHdpbGwgbm93IGNvcnJlY3RseSBkaXNwbGF5IGFuZAogIHNlbGVjdCBsYXJnZSBmaWxlcy4KCi0gU1FMIG1vZHVsZTogU3VwcG9ydCBmb3IgcHJlcGFyZWQgcXVlcnkgZXhlY3V0aW9uIGFuZCB2YWx1ZSBiaW5kaW5nCiAgaGFzIGJlZW4gYWRkZWQuIEFtb25nIG90aGVyIGJlbmVmaXRzLCB0aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvCiAgd3JpdGUgbGFyZ2UgQkxPQnMgKD4gMiBLQikgdG8gT3JhY2xlIGRhdGFiYXNlcywgYW5kIHRvIHdyaXRlIFVuaWNvZGUKICBzdHJpbmdzIHRvIFNRTCBTZXJ2ZXIgZGF0YWJhc2VzLgoKLSBTdXBwb3J0IGZvciBYSU0gb24gU29sYXJpcy4KCkJ1aWxkIHByb2Nlc3MKLS0tLS0tLS0tLS0tLQpUaGUgYnVpbGQgcHJvY2VzcyBoYXMgYmVlbiBpbXByb3ZlZDoKCi0gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcyBub3QgbmVlZCBRVERJUiB0byBiZSBzZXQgYW55bW9yZS4KCi0gSW1wcm92ZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgUXQgb24gTVNWQy5ORVQuCgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCQkJICAgTGlicmFyeQkJCQkJICAgKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgotIFFBY2NlbDoKCUNvcnJlY3RlZCBpbGxlZ2FsIGFjY2VsZXJhdG9yIHN0YXRlIHdoZW4gdXNpbmcgbXVsdGlwbGUKCWtleXNlcXVlbmNlcy4gKFJlc3VsdGVkIGluIG5vIGFjY2VsZXJhdG9yIGJlaW5nIHRyaWdnZXJlZCB3aGVuCgl0aGVyZSdzIGEgcGFydGlhbCBtYXRjaCkuIE9ubHkgdHJpZ2dlcnMgb24gZW5hYmxlZAoJYWNjZWxlcmF0b3JzIGFuZCB0aGVpciBlbmFibGVkIGl0ZW1zLiBFYXRzIGFsbCBrZXlzIGluIGEKCWtleXNlcXVlbmNlLCBub3QganVzdCB0aGUgZmlyc3QgYW5kIGxhc3QuCgotIFFDU3RyaW5nOgoJU3BlZWQtb3B0aW1pemVkIHJlcGxhY2UoKS4KCi0gUURhdGFTdHJlYW06CglBcHBsaWVzIHRvIHByaW50YWJsZSBkYXRhIHN0cmVhbXMgb25seTogSWYgdGhlIHZlcnNpb24gbnVtYmVyCglvZiB0aGUgZGV2aWNlIGlzIGxlc3MgdGhhbiA0LCB1c2UgdGhlIHNhbWUgc3RyZWFtaW5nIGZvcm1hdAoJdGhhdCB3YXMgdXNlZCBpbiBRdCAyLjMgYW5kIGVhcmxpZXIuCgotIFFEYXRhVGFibGU6CglSZXNwZWN0IHJlYWQtb25seSBjb2x1bW5zLiBNYWtlIGl0IHBvc3NpYmxlIHRvIHN3YXAgY29sdW1ucy4KCi0gUURvY2tXaW5kb3c6CglBZGRlZCBhIHN0YW5kYXJkIHdpZGdldCBjb25zdHJ1Y3RvciAodGFraW5nIGEgUVdpZGdldCAqcGFyZW50LAoJY29uc3QgY2hhciAqbmFtZSBhbmQgV0ZsYWdzKS4gSW1wcm92ZWQgZG9ja2luZyBiZWhhdmlvci4KCi0gUUZpbGVEaWFsb2c6CglXaW5kb3dzIG9ubHk6IG1ha2UgUXQncyBmaWxlZGlhbG9nIHdvcmsgcHJvcGVybHkgd2l0aCBuZXR3b3JrCglwYXRocy4KCi0gUUZvbnRNZXRyaWNzOgoJV2luZG93cyBvbmx5OiBGaXhlZCBRRm9udE1ldHJpY3M6OmJvdW5kaW5nUmVjdCggUUNoYXIgYyApIHRvCgl3b3JrIGZvciBub24tVHJ1ZVR5cGUgZm9udHMuCgotIFFIZWFkZXI6CglPcHRpbWl6ZWQgdGhlIHNlY3Rpb25TaXplSGludCgpIGNhbGN1bGF0aW9uLCB3aGljaCBpbiB0dXJuIAoJc3BlZWRzIHVwIGFsbCBRSGVhZGVyIHNpemUvbGFiZWwgY2FsY3VsYXRpb25zLgoKLSBRSWNvbkZhY3Rvcnk6CglBdm9pZCBpbmZpbml0ZSBsb29wcyB3aGVuIHJlY3Vyc2l2ZWx5IGNhbGxpbmcKCVFQaXhtYXA6OnBpeG1hcCgpLgoKLSBRSWNvblZpZXc6CglGaXhlZCBuYXZpZ2F0aW9uIGFuZCBzZWxlY3Rpb24gd2l0aCBhcnJvdyBrZXlzLiBTb21lIHNwZWVkdXBzCgl3aGVuIHJlcGFpbnRpbmcuCgotIFFLZXlTZXF1ZW5jZToKCVRyZWF0IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBzdHJpbmcgZGVmaW5lZCBzZXF1ZW5jZXMKCWNvcnJlY3RseS4gU28sIG5vdyBsZXR0ZXJzIGxpa2Ugxiwg2CBhbmQgxSBzaG91bGQgd29yayBhcwoJYWNjZWxlcmF0b3JzLCBldmVuIHRocm91Z2ggdHJhbnNsYXRpb24gZmlsZXMuCgotIFFMYXlvdXQ6CglhbGlnbm1lbnRSZWN0KCkgcmVzcGVjdHMgdGhlIGxheW91dCdzIG1heGltdW0gc2l6ZS4KCi0gUUxpbmVFZGl0OgoJQWRkZWQgYSBsb3N0Rm9jdXMoKSBzaWduYWwuIERvdWJsZS1jbGlja2luZyBvbmx5IHVzZXMgc3BhY2VzCglhcyB3b3JkIGJvdW5kZXJpZXMgZm9yIHRoZSBzZWxlY3Rpb24gbm93LCBub3QgZG90cywgY29tbWFzLAoJZXRjLiBTdXBwb3J0IGRvdWJsZS1jbGljayttb3VzZW1vdmUgc2VsZWN0aW9uLgoKLSBRTGlzdEJveDoKCUZpeGVkIHRoZSBpdGVtIHdoaWNoIGlzIHBhc3NlZCBpbnRvIHRoZSBjb250ZXh0TWVudVJlcXVlc3RlZCgpCglzaWduYWwgKHRoaXMgd2FzIHNvbWV0aW1lcyB3cm9uZykuIERvbid0IHNlbGVjdCBpdGVtcyB0aGF0IGFyZQoJbm90IHNlbGVjdGFibGUuCgotIFFMaXN0VmlldzoKCVNoaWZ0IHNlbGVjdGlvbiBpbiBFeHRlbmRlZCBtb2RlIG5vdyBmb2xsb3dzIFdpbmRvd3MKCVNoaWZ0LXNlbGVjdGlvbiBzdGFuZGFyZC4gRXJhc2UgZW1wdHkgYXJlYSB3aGVuIGRyYXdpbmcKCWxpc3R2aWV3cyB3aXRob3V0IGNvbHVtbnMuIE9ubHkgZHJvcHMgb24gZHJvcC1lbmFibGVkIGl0ZW1zCgl0aGF0IGFjY2VwdCBkcm9wcy4KCi0gUUxpc3RWaWV3SXRlbToKCU9wdGltaXplZCBzaXplIGNsYWN1bGF0aW9uIGZvciBtdWx0aS1saW5lIGl0ZW1zLgoKLSBRTWFpbldpbmRvdzoKCUJhc2UgdGhlIG1pbmltdW1TaXplSGludCgpIG9uIHRoZSBzaXplSGludCgpcyBvZiB0aGUgbGVmdCBoYW5kCglkb2NrIGFyZWEgKGluc3RlYWQgb2YgdGhlIG1pbmltdW1TaXplKCkpLgoKLSBRTWVudUJhcjoKCUZpeGVkIGJyb2tlbiBBbHQgcmVsZWFzZSBkZXRlY3Rpb24uIEZpeGVkIGZsaWNrZXJpbmcuIEZpeGVkCgllbXB0eSBtZW51YmFycyByZXNpemluZyBwcm9wZXJseS4KCi0gUU9iamVjdDoKCUZpeGVkIHJldHVybiB2YWx1ZSBvZiBkaXNjb25uZWN0KCkuIEZpeGVkIGRpc2Nvbm5lY3QoKWluZwoJU0lHTkFMcyBmcm9tIFNJR05BTHMgYW5kIGRpc2Nvbm5lY3QoKWluZyBtdWx0aXBsZSBTTE9UcyB3aXRoCgl0aGUgc2FtZSBuYW1lIGZyb20gYSBTSUdOQUwuCgotIFFQcm9jZXNzOgoJVW5peCBvbmx5OiBEb24ndCBlYXQgdGhlIGZpbGUgZGVzY3JpcHRvcnMgaWYgYSBsb3Qgb2YKCXByb2Nlc3NlcyAod2l0aCBzaG9ydCBydW50aW1lcykgYXJlIHN0YXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKCWVhY2ggb3RoZXIuCgotIFFQU1FMRHJpdmVyOgoJTWFrZSB0aGUgZHJpdmVyIGNvbXBpbGUgd2l0aCB0aGUgc3RhbmRhcmQgUG9zdGdyZVNRTCBzb3VyY2UKCWRpc3RyaWJ1dGlvbiB1bmRlciBXaW5kb3dzLiBCZXR0ZXIgaGFuZGxpbmcgb2YgbmV0d29yaywKCWRhdGV0aW1lIGFuZCBnZW9tZXRyaWNhbCBkYXRhdHlwZXMuCgotIFFSZWdpb246CglGaXhlZCBzZXRSZWN0cygpIHRvIGNhbGN1bGF0ZSB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlCgljb3JyZWN0bHkuCgotIFFTY3JvbGxWaWV3OgoJRG9lc24ndCByZXBvc2l0aW9uIHRoZSB2aWV3IHdoZW4gdGhlIHVzZXIgaXMgc2Nyb2xsaW5nIHRoZQoJdmlldy4KCi0gUVNwaW5Cb3g6CglGaXhlZCBzZXRWYWx1ZSgpIHNvIHRoYXQgYW55IG5vdC15ZXQtaW50ZXJwcmV0ZWQgaW5wdXQgaXMKCWlnbm9yZWQgd2hlbiBzZXR0aW5nIGEgbmV3IHZhbHVlLgoKLSBRU3RyaW5nOgoJU3VwcG9ydCBRVGV4dENvZGVjOjpjb2RlY0ZvckNTdHJpbmdzKCkuIFN1cHBvcnQKCXN0ZDo6c3RyaW5nPD09PlFTdHJpbmcgY29udmVyc2lvbiB3aGVuIFNUTCBzdXBwb3J0IGlzIG9uLgoKLSBRU3ludGF4SGlnaGxpZ2h0ZXI6CglBZGRlZCBmdW5jdGlvbiByZWhpZ2hsaWdodCgpLiBJbXByb3ZlZCBpbnRlcm5hbHMgdG8gYmUgbW9yZQoJZWZmaWNpZW50IChsZXNzIGNhbGxzIHRvIGhpZ2hsaWdodFBhcmFncmFwaCgpIG5lY2Vzc2FyeSkuCgotIFFUYWJsZToKCUZpeGVkIFRhYi9CYWNrVGFiIGhhbmRsaW5nIHRvIGFsd2F5cyB3b3JrLiBGaXhlZAoJc2V0Q29sdW1uTGFiZWxzKCkgYW5kIHNldFJvd0xhYmVscygpLgoKLSBRVGFibGVJdGVtIChhbmQgc3ViY2xhc3Nlcyk6CglOb3cgc3VwcG9ydHMgZ2xvYmFsIHN0cnV0cy4gKFNlZSBRQXBwbGljYXRpb246Omdsb2JhbFN0cnV0KCkuKQoKLSBRVERTRHJpdmVyOgoJQWRkZWQgc3VwcG9ydCBmb3IgYmluYXJ5IGRhdGF0eXBlcy4KCi0gUVRleHRDb2RlYzoKCUFkZGVkIFFUZXh0Q29kZWM6OmNvZGVjRm9yQ1N0cmluZ3MgYW5kIFFUZXh0Q29kZWM6OmNvZGVjRm9yVHIuCgotIFFUZXh0RWRpdDoKCUZpeGVkIGEgcGFpbnRpbmcgZXJyb3Igd2hpY2ggcmVzdWx0ZWQgaW4gYXJlYXMgb2YgdGhlIHRleHRlZGl0Cglub3QgYmVpbmcgZXJhc2VkIGNvcnJlY3RseS4gTWFrZSBzdXJlIHJlcGFpbnRpbmcgaXMgZG9uZSBhZnRlcgoJY2hhbmdpbmcgdGhlIHVuZGVybGluZS1saW5rcyBzZXR0aW5nLiBSZW5hbWVkICdhbGxvd1RhYnMnCglwcm9wZXJ0eSB0byAndGFiQ2hhbmdlc0ZvY3VzJyAoaW52ZXJ0ZWQgdmFsdWUpLiBBZGRlZCBhIG5ldwoJcHJvcGVydHkgJ2F1dG9Gb3JtYXR0aW5nJy4gV2hlbiBleHBvcnRpbmcgSFRNTCBhbHNvIHF1b3RlCglxdW90ZXMuIEZpeGVkIGEgYmFja2dyb3VuZCBlcmFzaW5nIGJ1ZyB3aGljaCBtZXNzZWQgdXAgdGhlCgl2aWV3LgoKLSBRVXJsOgoJUmVjb2duaXplIFdpbmRvd3MgZHJpdmUgbGV0dGVycyBub3Qgb25seSBpbiB0aGUgZm9ybSBvZiAiYzovIgoJYnV0IGFsc28gaW4gdGhlIGZvcm0gImM6IiAod2l0aG91dCB0aGUgJy8nKS4KCi0gUVdpZGdldDoKCUZpeGVkIHNvbWUgdmlzaWJpbGl0eSBpc3N1ZXMuCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioJCQkgICBRdCBEZXNpZ25lcgkJCQkJICAgKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgotIE5vdyBkaXNwbGF5cyB0aGUgY2xhc3NuYW1lIG9mICJncmF5IGJveCIgY3VzdG9tIHdpZGdldHMgaW4gdGhlIGdyYXkKICBib3ggb24gdGhlIGZvcm0uCgotIEFjY2VwdCB0aWxkZXMgKH4pIGluIHRoZSBwcm9qZWN0IHNldHRpbmdzLgoKLSBBIG5ldyBjb21tYW5kIGxpbmUgdG9vbCBjb252MnVpIChpbiBxdC90b29scy9kZXNpZ25lci90b29scykgaGFzCiAgYmVlbiBhZGRlZCwgdG8gY29udmVydCBkaWFsb2cgZGVzY3JpcHRpb24gZmlsZXMgZnJvbSBkaWZmZXJlbnQgZmlsZQogIGZvcm1hdHMgdG8gLnVpIGZpbGVzIHdpdGhvdXQgdGhlIG5lZWQgdG8gaW52b2tlIFF0IERlc2lnbmVyLiBUaGlzCiAgdG9vbCB1c2VzIHRoZSBzYW1lIHBsdWdpbnMgYXMgUXQgRGVzaWduZXIgZm9yIGxvYWRpbmcgb3RoZXIgZGlhbG9nCiAgZGVzY3JpcHRpb24gZmlsZXMuCgotIEFuIGltcG9ydCBmaWx0ZXIgZm9yIC5rZGV2ZGxnIGZpbGVzIGhhcyBiZWVuIGFkZGVkLgoKLSBBY3Rpb25zIGluIHRoZSBhY3Rpb24gZWRpdG9yIGFyZSBub3cgc29ydGFibGUuCgotIEltcHJvdmVkIHVzYWJpbGl0eSBvZiBtb3JlIGRpYWxvZ3MgKGluLXBsYWNlIHJlbmFtaW5nLCBkcmFnJ24nZHJvcCwKICBldGMuKQoKLSBQcmVzZXJ2ZSBjcmVhdGlvbiBvcmRlciBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucywgdmFyaWFibGVzLCBldGMuCgotIFNhdmUgY29tbWVudHMgZm9yIGFjdGlvbnMuCgotIHVpYzogRml4ZWQgZ2VuZXJhdGluZyBjb2RlIGZvciBRU3RyaW5nTGlzdCBwcm9wZXJ0aWVzLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCQkJICAgUXQgQXNzaXN0YW50CQkJCQkgICAqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCi0gRml4ZWQgc29tZSBhY2NlbGVyYXRvciBjb25mbGljdHMuCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioJCQkgICBRdCBMaW5ndWlzdAkJCQkJICAgKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgotIEhhbmRsZSB0cmFpbGluZyBiYWNrc2xhc2ggaW4gc3RyaW5ncyBjb3JyZWN0bHkgaW4gbHVwZGF0ZS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVORCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK