CQlHREIgTWFpbnRhaW5lcnMKCQk9PT09PT09PT09PT09PT0KCgoJCSAgIE92ZXJ2aWV3CgkJICAgLS0tLS0tLS0KClRoaXMgZmlsZSBkZXNjcmliZXMgZGlmZmVyZW50IGdyb3VwcyBvZiBwZW9wbGUgd2hvIGFyZSwgdG9nZXRoZXIsIHRoZQptYWludGFpbmVycyBhbmQgZGV2ZWxvcGVycyBvZiB0aGUgR0RCIHByb2plY3QuICBEb24ndCB3b3JyeSAtIGl0IHNvdW5kcwptb3JlIGNvbXBsaWNhdGVkIHRoYW4gaXQgcmVhbGx5IGlzLgoKVGhlcmUgYXJlIGZvdXIgZ3JvdXBzIG9mIEdEQiBkZXZlbG9wZXJzLCBjb3ZlcmluZyB0aGUgcGF0Y2ggZGV2ZWxvcG1lbnQgYW5kCnJldmlldyBwcm9jZXNzOgoKICAtIFRoZSBHbG9iYWwgTWFpbnRhaW5lcnMuCgogICAgVGhlc2UgYXJlIHRoZSBkZXZlbG9wZXJzIGluIGNoYXJnZSBvZiBtb3N0IGRhaWx5IGRldmVsb3BtZW50LiAgVGhleQogICAgaGF2ZSB3aWRlIGF1dGhvcml0eSB0byBhcHBseSBhbmQgcmVqZWN0IHBhdGNoZXMsIGJ1dCBkZWZlciB0byB0aGUKICAgIFJlc3BvbnNpYmxlIE1haW50YWluZXJzIChzZWUgYmVsb3cpIHdpdGhpbiB0aGVpciBzcGhlcmVzIG9mCiAgICByZXNwb25zaWJpbGl0eS4KCiAgLSBUaGUgUmVzcG9uc2libGUgTWFpbnRhaW5lcnMuCgogICAgVGhlc2UgYXJlIGRldmVsb3BlcnMgd2hvIGhhdmUgZXhwZXJ0aXNlIGFuZCBpbnRlcmVzdCBpbiBhIHBhcnRpY3VsYXIKICAgIGFyZWEgb2YgR0RCLCB3aG8gYXJlIGdlbmVyYWxseSBhdmFpbGFibGUgdG8gcmV2aWV3IHBhdGNoZXMsIGFuZCB3aG8KICAgIHByZWZlciB0byBlbmZvcmNlIGEgc2luZ2xlIHZpc2lvbiB3aXRoaW4gdGhlaXIgYXJlYXMuCgogIC0gVGhlIEF1dGhvcml6ZWQgQ29tbWl0dGVycy4KCiAgICBUaGVzZSBhcmUgZGV2ZWxvcGVycyB3aG8gYXJlIHRydXN0ZWQgdG8gbWFrZSBjaGFuZ2VzIHdpdGhpbiBhIHNwZWNpZmljCiAgICBhcmVhIG9mIEdEQiB3aXRob3V0IGFkZGl0aW9uYWwgb3ZlcnNpZ2h0LgoKICAtIFRoZSBXcml0ZSBBZnRlciBBcHByb3ZhbCBNYWludGFpbmVycy4KCiAgICBUaGVzZSBhcmUgZGV2ZWxvcGVycyB3aG8gaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIEdEQiBzb3VyY2UgdHJlZS4gIFRoZXkKICAgIGNhbiBjaGVjayBpbiB0aGVpciBvd24gY2hhbmdlcyBvbmNlIGEgZGV2ZWxvcGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlCiAgICBhdXRob3JpdHkgaGFzIGFwcHJvdmVkIHRoZSBjaGFuZ2VzOyB0aGV5IGNhbiBhbHNvIGFwcGx5IHRoZSBPYnZpb3VzCiAgICBGaXggUnVsZSAoYmVsb3cpLgoKQWxsIG1haW50YWluZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHBvc3QgbWFqb3IgcGF0Y2hlcyB0byB0aGUgZ2RiLXBhdGNoZXMKbWFpbGluZyBsaXN0IGZvciBjb21tZW50cywgZXZlbiBpZiB0aGV5IGhhdmUgdGhlIGF1dGhvcml0eSB0byBjb21taXQgdGhlCnBhdGNoIHdpdGhvdXQgcmV2aWV3IGZyb20gYW5vdGhlciBtYWludGFpbmVyLiAgVGhpcyBlc3BlY2lhbGx5IGluY2x1ZGVzCnBhdGNoZXMgd2hpY2ggY2hhbmdlIGludGVybmFsIGludGVyZmFjZXMgKGUuZy4gZ2xvYmFsIGZ1bmN0aW9ucywgZGF0YQpzdHJ1Y3R1cmVzKSBvciBleHRlcm5hbCBpbnRlcmZhY2VzIChlLmcuIHVzZXIsIHJlbW90ZSwgTUksIGV0IGNldGVyYSkuCgpUaGUgdGVybSAicmV2aWV3IiBpcyB1c2VkIGluIHRoaXMgZmlsZSB0byBkZXNjcmliZSBzZXZlcmFsIGtpbmRzIG9mIGZlZWRiYWNrCmZyb20gYSBtYWludGFpbmVyOiBhcHByb3ZhbCwgcmVqZWN0aW9uLCBhbmQgcmVxdWVzdHMgZm9yIGNoYW5nZXMgb3IKY2xhcmlmaWNhdGlvbiB3aXRoIHRoZSBpbnRlbnRpb24gb2YgYXBwcm92aW5nIGEgcmV2aXNlZCB2ZXJzaW9uLiAgUmV2aWV3IGlzCmEgcHJpdmlsZWdlIGFuZC9vciByZXNwb25zaWJpbGl0eSBvZiB2YXJpb3VzIHBvc2l0aW9ucyBhbW9uZyB0aGUgR0RCCk1haW50YWluZXJzLiAgT2YgY291cnNlLCBhbnlvbmUgLSB3aGV0aGVyIHRoZXkgaG9sZCBhIHBvc2l0aW9uIGJ1dCBub3QgdGhlCnJlbGV2YW50IG9uZSBmb3IgYSBwYXJ0aWN1bGFyIHBhdGNoLCBvciBhcmUganVzdCBmb2xsb3dpbmcgYWxvbmcgb24gdGhlCm1haWxpbmcgbGlzdHMgZm9yIGZ1biwgb3IgYW55dGhpbmcgaW4gYmV0d2VlbiAtIG1heSBzdWdnZXN0IGNoYW5nZXMgb3IKYXNrIHF1ZXN0aW9ucyBhYm91dCBhIHBhdGNoIQoKVGhlcmUncyBhbHNvIGEgY291cGxlIG9mIG90aGVyIHBlb3BsZSB3aG8gcGxheSBzcGVjaWFsIHJvbGVzIGluIHRoZSBHREIKY29tbXVuaXR5LCBzZXBhcmF0ZWx5IGZyb20gdGhlIHBhdGNoIHByb2Nlc3M6CgogIC0gVGhlIEdEQiBTdGVlcmluZyBDb21taXR0ZWUuCgogICAgVGhlc2UgYXJlIHRoZSBvZmZpY2lhbCAoRlNGLWFwcG9pbnRlZCkgbWFpbnRhaW5lcnMgb2YgR0RCLiAgVGhleSBoYXZlCiAgICBmaW5hbCBhbmQgb3ZlcnJpZGluZyBhdXRob3JpdHkgZm9yIGFsbCBHREItcmVsYXRlZCBkZWNpc2lvbnMsIGluY2x1ZGluZwogICAgYW55dGhpbmcgZGVzY3JpYmVkIGluIHRoaXMgZmlsZS4gIFRoZSBjb21taXR0ZWUgaXMgbm90IGdlbmVyYWxseQogICAgaW52b2x2ZWQgaW4gZGF5LXRvLWRheSBkZXZlbG9wbWVudCAoYWx0aG91Z2ggaXRzIG1lbWJlcnMgbWF5IGJlLCBhcwogICAgaW5kaXZpZHVhbHMpLgoKICAtIFRoZSBSZWxlYXNlIE1hbmFnZXIuCgogICAgVGhpcyBkZXZlbG9wZXIgaXMgaW4gY2hhcmdlIG9mIG1ha2luZyBuZXcgcmVsZWFzZXMgb2YgR0RCLgoKICAtIFRoZSBQYXRjaCBDaGFtcGlvbnMuCgogICAgVGhlc2Ugdm9sdW50ZWVycyBtYWtlIHN1cmUgdGhhdCBubyBjb250cmlidXRpb24gaXMgb3Zlcmxvb2tlZCBvcgogICAgZm9yZ290dGVuLgoKTW9zdCBjaGFuZ2VzIHRvIHRoZSBsaXN0IG9mIG1haW50YWluZXJzIGluIHRoaXMgZmlsZSBhcmUgaGFuZGxlZCBieQpjb25zZW5zdXMgYW1vbmcgdGhlIGdsb2JhbCBtYWludGFpbmVycyBhbmQgYW55IG90aGVyIGludm9sdmVkIHBhcnRpZXMuCkluIGNhc2VzIHdoZXJlIGNvbnNlbnN1cyBjYW4gbm90IGJlIHJlYWNoZWQsIHRoZSBnbG9iYWwgbWFpbnRhaW5lcnMgbWF5CmFzayB0aGUgU3RlZXJpbmcgQ29tbWl0dGVlIGZvciBhIGZpbmFsIGRlY2lzaW9uLgoKCgkJCVRoZSBPYnZpb3VzIEZpeCBSdWxlCgkJCS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBbGwgbWFpbnRhaW5lcnMgbGlzdGVkIGluIHRoaXMgZmlsZSwgaW5jbHVkaW5nIHRoZSBXcml0ZSBBZnRlciBBcHByb3ZhbApkZXZlbG9wZXJzLCBhcmUgYWxsb3dlZCB0byBjaGVjayBpbiBvYnZpb3VzIGZpeGVzLgoKQW4gIm9idmlvdXMgZml4IiBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IHRoYXQgYW55b25lIHdpbGwKZGlzYWdyZWUgd2l0aCB0aGUgY2hhbmdlLgoKQSBnb29kIG1lbnRhbCB0ZXN0IGlzICJ3aWxsIHRoZSBwZXJzb24gd2hvIGhhdGVzIG15IHdvcmsgdGhlIG1vc3QgYmUKYWJsZSB0byBmaW5kIGZhdWx0IHdpdGggdGhlIGNoYW5nZSIgLSBpZiBzbywgdGhlbiBpdCdzIG5vdCBvYnZpb3VzIGFuZApuZWVkcyB0byBiZSBwb3N0ZWQgZmlyc3QuIDotKQoKU29tZXRoaW5nIGxpa2UgY2hhbmdpbmcgb3IgYnlwYXNzaW5nIGFuIGludGVyZmFjZSBpcyBfbm90XyBhbiBvYnZpb3VzCmZpeCwgc2luY2Ugc3VjaCBhIGNoYW5nZSB3aXRob3V0IGRpc2N1c3Npb24gd2lsbCByZXN1bHQgaW4KaW5zdGFudGFuZW91cyBhbmQgbG91ZCBjb21wbGFpbnRzLgoKRm9yIGRvY3VtZW50YXRpb24gY2hhbmdlcywgYWJvdXQgdGhlIG9ubHkga2luZCBvZiBmaXggdGhhdCBpcyBvYnZpb3VzCmlzIGNvcnJlY3Rpb24gb2YgYSB0eXBvIG9yIGJhZCBFbmdsaXNoIHVzYWdlLgoKCgkgICAgIEdEQiBTdGVlcmluZyBDb21taXR0ZWUKCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIG1lbWJlcnMgb2YgdGhlIEdEQiBTdGVlcmluZyBDb21taXR0ZWUgYXJlIHRoZSBGU0YtYXBwb2ludGVkCm1haW50YWluZXJzIG9mIHRoZSBHREIgcHJvamVjdC4KClRoZSBTdGVlcmluZyBDb21taXR0ZWUgaGFzIGZpbmFsIGF1dGhvcml0eSBmb3IgYWxsIEdEQi1yZWxhdGVkIHRvcGljczsKdGhleSBtYXkgbWFrZSB3aGF0ZXZlciBjaGFuZ2VzIHRoYXQgdGhleSBkZWVtIG5lY2Vzc2FyeSwgb3IgdGhhdCB0aGUgRlNGCnJlcXVlc3RzLiAgSG93ZXZlciwgdGhleSBhcmUgZ2VuZXJhbGx5IG5vdCBpbnZvbHZlZCBpbiBkYXktdG8tZGF5CmRldmVsb3BtZW50LgoKVGhlIGN1cnJlbnQgbWVtYmVycyBvZiB0aGUgc3RlZXJpbmcgY29tbWl0dGVlIGFyZSBsaXN0ZWQgYmVsb3csIGluCmFscGhhYmV0aWNhbCBvcmRlci4gIFRoZWlyIGFmZmlsaWF0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHJlZmVyZW5jZSBvbmx5IC0KdGhlaXIgbWVtYmVyc2hpcCBvbiB0aGUgU3RlZXJpbmcgQ29tbWl0dGVlIGlzIGluZGl2aWR1YWwgYW5kIG5vdCB0aHJvdWdoCnRoZWlyIGFmZmlsaWF0aW9uLCBhbmQgdGhleSBhY3Qgb24gYmVoYWxmIG9mIHRoZSBHTlUgcHJvamVjdC4KCglKaW0gQmxhbmR5IChNb3ppbGxhKQoJQW5kcmV3IENhZ25leSAoUmVkIEhhdCkKCVJvYmVydCBEZXdhciAoQWRhQ29yZSwgTllVKQoJS2xlZSBEaWVuZXMgKEFwcGxlKQoJUGF1bCBIaWxmaW5nZXIgKFVDIEJlcmtlbGV5KQoJRGFuIEphY29ib3dpdHogKENvZGVTb3VyY2VyeSkKCVN0YW4gU2hlYnMgKENvZGVTb3VyY2VyeSkKCVJpY2hhcmQgU3RhbGxtYW4gKEZTRikKCUlhbiBMYW5jZSBUYXlsb3IgKEMyKQoJVG9kZCBXaGl0ZXNlbAoKCgkJICBHbG9iYWwgTWFpbnRhaW5lcnMKCQkgIC0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIGdsb2JhbCBtYWludGFpbmVycyBtYXkgcmV2aWV3IGFuZCBjb21taXQgYW55IGNoYW5nZSB0byBHREIsIGV4Y2VwdCBpbgphcmVhcyB3aXRoIGEgUmVzcG9uc2libGUgTWFpbnRhaW5lciBhdmFpbGFibGUuICBGb3IgbWFqb3IgY2hhbmdlcywgb3IKY2hhbmdlcyB0byBhcmVhcyB3aXRoIG90aGVyIGFjdGl2ZSBkZXZlbG9wZXJzLCBnbG9iYWwgbWFpbnRhaW5lcnMgYXJlCnN0cm9uZ2x5IGVuY291cmFnZWQgdG8gcG9zdCB0aGVpciBvd24gcGF0Y2hlcyBmb3IgZmVlZGJhY2sgYmVmb3JlCmNvbW1pdHRpbmcuCgpUaGUgZ2xvYmFsIG1haW50YWluZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgcmV2aWV3aW5nIHBhdGNoZXMgdG8gYW55IGFyZWEKZm9yIHdoaWNoIG5vIFJlc3BvbnNpYmxlIE1haW50YWluZXIgaXMgbGlzdGVkLgoKR2xvYmFsIG1haW50YWluZXJzIGFsc28gaGF2ZSB0aGUgYXV0aG9yaXR5IHRvIHJldmVydCBwYXRjaGVzIHdoaWNoIHNob3VsZApub3QgaGF2ZSBiZWVuIGFwcGxpZWQsIGUuZy4gcGF0Y2hlcyB3aGljaCB3ZXJlIG5vdCBhcHByb3ZlZCwgY29udHJvdmVyc2lhbApwYXRjaGVzIGNvbW1pdHRlZCB1bmRlciB0aGUgT2J2aW91cyBGaXggUnVsZSwgcGF0Y2hlcyB3aXRoIGltcG9ydGFudCBidWdzCnRoYXQgY2FuJ3QgYmUgaW1tZWRpYXRlbHkgZml4ZWQsIG9yIHBhdGNoZXMgd2hpY2ggZ28gYWdhaW5zdCBhbiBhY2NlcHRlZCBhbmQKZG9jdW1lbnRlZCByb2FkbWFwIGZvciBHREIgZGV2ZWxvcG1lbnQuICBBbnkgZ2xvYmFsIG1haW50YWluZXIgbWF5IHJlcXVlc3QKdGhlIHJldmVyc2lvbiBvZiBhIHBhdGNoLiAgSWYgbm8gZ2xvYmFsIG1haW50YWluZXIsIG9yIHJlc3BvbnNpYmxlCm1haW50YWluZXIgaW4gdGhlIGFmZmVjdGVkIGFyZWFzLCBzdXBwb3J0cyB0aGUgcGF0Y2ggKGV4Y2VwdCBmb3IgdGhlCm1haW50YWluZXIgd2hvIG9yaWdpbmFsbHkgY29tbWl0dGVkIGl0KSwgdGhlbiBhZnRlciA0OCBob3VycyB0aGUgbWFpbnRhaW5lcgp3aG8gY2FsbGVkIGZvciB0aGUgcmV2ZXJzaW9uIG1heSByZXZlcnQgdGhlIHBhdGNoLgoKTm8gb25lIG1heSByZWFwcGx5IGEgcmV2ZXJ0ZWQgcGF0Y2ggd2l0aG91dCB0aGUgYWdyZWVtZW50IG9mIHRoZSBtYWludGFpbmVyCndobyByZXZlcnRlZCBpdCwgb3IgYnJpbmdpbmcgdGhlIGlzc3VlIHRvIHRoZSBHREIgU3RlZXJpbmcgQ29tbWl0dGVlIGZvcgpkaXNjdXNzaW9uLgoKQXQgdGhlIG1vbWVudCB0aGVyZSBhcmUgbm8gZG9jdW1lbnRlZCByb2FkbWFwcyBmb3IgR0RCIGRldmVsb3BtZW50OyBpbiB0aGUKZnV0dXJlLCBpZiB0aGVyZSBhcmUsIGEgcmVmZXJlbmNlIHRvIHRoZSBsaXN0IHdpbGwgYmUgaW5jbHVkZWQgaGVyZS4KClRoZSBjdXJyZW50IGdsb2JhbCBtYWludGFpbmVycyBhcmUgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6CgpQZWRybyBBbHZlcyAgICAgICAgICAgICAgICAgICAgIHBlZHJvQGNvZGVzb3VyY2VyeS5jb20KSmltIEJsYW5keQkJCWppbWJAcmVkLWJlYW4uY29tCkpvZWwgQnJvYmVja2VyCQkJYnJvYmVja2VyQGFkYWNvcmUuY29tCktldmluIEJ1ZXR0bmVyCQkJa2V2aW5iQHJlZGhhdC5jb20KQW5kcmV3IENhZ25leQkJCWNhZ25leUBnbnUub3JnCkRvdWcgRXZhbnMJCQlkamVAZ29vZ2xlLmNvbQpEYW5pZWwgSmFjb2Jvd2l0egkJZGFuQGNvZGVzb3VyY2VyeS5jb20KTWFyayBLZXR0ZW5pcyAgICAgICAgICAgCWtldHRlbmlzQGdudS5vcmcKU3RhbiBTaGVicwkJCXN0YW5AY29kZXNvdXJjZXJ5LmNvbQpNaWNoYWVsIFNueWRlcgkJCW1zbnlkZXJAdm13YXJlLmNvbQpUb20gVHJvbWV5CQkJdHJvbWV5QHJlZGhhdC5jb20KVWxyaWNoIFdlaWdhbmQJCQlVbHJpY2guV2VpZ2FuZEBkZS5pYm0uY29tCkVsZW5hIFphbm5vbmkJCQllbGVuYS56YW5ub25pQG9yYWNsZS5jb20KRWxpIFphcmV0c2tpaQkJCWVsaXpAZ251Lm9yZwoKCgkJCVJlbGVhc2UgTWFuYWdlcgoJCQktLS0tLS0tLS0tLS0tLS0KClRoZSBjdXJyZW50IHJlbGVhc2UgbWFuYWdlciBpczogSm9lbCBCcm9iZWNrZXIgIDxicm9iZWNrZXJAYWRhY29yZS5jb20+CgpIaXMgcmVzcG9uc2liaWxpdGllcyBhcmU6CgogICAgKiBvcmdhbml6aW5nLCBzY2hlZHVsaW5nLCBhbmQgbWFuYWdpbmcgcmVsZWFzZXMgb2YgR0RCLgoKICAgICogZGVjaWRpbmcgdGhlIGFwcHJvdmFsIGFuZCBjb21taXQgcG9saWNpZXMgZm9yIHJlbGVhc2UgYnJhbmNoZXMsCiAgICAgIGFuZCBjYW4gY2hhbmdlIHRoZW0gYXMgbmVlZGVkLgoKCgoJCQlQYXRjaCBDaGFtcGlvbnMKCQkJLS0tLS0tLS0tLS0tLS0tCgpUaGVzZSB2b2x1bnRlZXJzIHRyYWNrIGFsbCBwYXRjaGVzIHN1Ym1pdHRlZCB0byB0aGUgZ2RiLXBhdGNoZXMgbGlzdC4gIFRoZXkKZW5kZWF2b3IgdG8gcHJldmVudCBhbnkgcG9zdGVkIHBhdGNoIGZyb20gYmVpbmcgb3Zlcmxvb2tlZDsgd29yayB3aXRoCmNvbnRyaWJ1dG9ycyB0byBtZWV0IEdEQidzIGNvZGluZyBzdHlsZSBhbmQgZ2VuZXJhbCByZXF1aXJlbWVudHMsIGFsb25nIHdpdGgKRlNGIGNvcHlyaWdodCBhc3NpZ25tZW50czsgcmVtaW5kIChwaW5nKSByZXNwb25zaWJsZSBtYWludGFpbmVycyB0byByZXZpZXcKcGF0Y2hlczsgYW5kIGVuc3VyZSB0aGF0IGNvbnRyaWJ1dG9ycyBhcmUgZ2l2ZW4gY3JlZGl0LgoKQ3VycmVudCBwYXRjaCBjaGFtcGlvbnMgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6CgoJUmFuZG9scGggQ2h1bmcgICAgIDx0YXVzcUBkZWJpYW4ub3JnPgoKCgoJCQlSZXNwb25zaWJsZSBNYWludGFpbmVycwoJCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlc2UgZGV2ZWxvcGVycyBoYXZlIGFncmVlZCB0byByZXZpZXcgcGF0Y2hlcyBpbiBzcGVjaWZpYyBhcmVhcyBvZiBHREIsIGluCndoaWNoIHRoZXkgaGF2ZSBrbm93bGVkZ2UgYW5kIGV4cGVyaWVuY2UuICBUaGVzZSBhcmVhcyBhcmUgZ2VuZXJhbGx5IGJyb2FkOwp0aGUgcm9sZSBvZiBhIHJlc3BvbnNpYmxlIG1haW50YWluZXIgaXMgdG8gcHJvdmlkZSBjb2hlcmVudCBhbmQgY29oZXNpdmUKc3RydWN0dXJlIHdpdGhpbiB0aGVpciBhcmVhIG9mIEdEQiwgdG8gYXNzdXJlIHRoYXQgcGF0Y2hlcyBmcm9tIG1hbnkKZGlmZmVyZW50IGNvbnRyaWJ1dG9ycyBhbGwgd29yayB0b2dldGhlciBmb3IgdGhlIGJlc3QgcmVzdWx0cy4KCkdsb2JhbCBtYWludGFpbmVycyB3aWxsIGRlZmVyIHRvIHJlc3BvbnNpYmxlIG1haW50YWluZXJzIHdpdGhpbiB0aGVpciBhcmVhcywKYXMgbG9uZyBhcyB0aGUgcmVzcG9uc2libGUgbWFpbnRhaW5lciBpcyBhY3RpdmUuICBBY3RpdmUgbWVhbnMgdGhhdApyZXNwb25zaWJsZSBtYWludGFpbmVycyBhZ3JlZSB0byByZXZpZXcgc3VibWl0dGVkIHBhdGNoZXMgaW4gdGhlaXIgYXJlYQpwcm9tcHRseTsgcGF0Y2hlcyBhbmQgZm9sbG93dXBzIHNob3VsZCBnZW5lcmFsbHkgYmUgYW5zd2VyZWQgd2l0aGluIGEgd2Vlay4KSWYgYSByZXNwb25zaWJsZSBtYWludGFpbmVyIGlzIGludGVyZXN0ZWQgaW4gcmV2aWV3aW5nIGEgcGF0Y2ggYnV0IHdpbGwgbm90CmhhdmUgdGltZSB3aXRoaW4gYSB3ZWVrIG9mIHBvc3RpbmcsIHRoZSBtYWludGFpbmVyIHNob3VsZCBzZW5kIGFuCmFja25vd2xlZGdlbWVudCBvZiB0aGUgcGF0Y2ggdG8gdGhlIGdkYi1wYXRjaGVzIG1haWxpbmcgbGlzdCwgYW5kCnBsYW4gdG8gZm9sbG93IHVwIHdpdGggYSByZXZpZXcgd2l0aGluIGEgbW9udGguICBUaGVzZSBkZWFkbGluZXMgYXJlIGZvcgppbml0aWFsIHJlc3BvbnNlcyB0byBhIHBhdGNoIC0gaWYgdGhlIG1haW50YWluZXIgaGFzIHN1Z2dlc3Rpb25zCm9yIHF1ZXN0aW9ucywgaXQgbWF5IHRha2UgYW4gZXh0ZW5kZWQgZGlzY3Vzc2lvbiBiZWZvcmUgdGhlIHBhdGNoCmlzIHJlYWR5IHRvIGNvbW1pdC4gIFRoZXJlIGFyZSBubyB3cml0dGVuIHJlcXVpcmVtZW50cyBmb3IgZGlzY3Vzc2lvbiwKYnV0IG1haW50YWluZXJzIGFyZSBhc2tlZCB0byBiZSByZXNwb25zaXZlLgoKSWYgYSByZXNwb25zaWJsZSBtYWludGFpbmVyIG1pc3NlcyB0aGVzZSBkZWFkbGluZXMgb2NjYXNpb25hbGx5IChlLmcuCnZhY2F0aW9uIG9yIHVuZXhwZWN0ZWQgd29ya2xvYWQpLCBpdCdzIG5vdCBhIGRpc2FzdGVyIC0gYW55IGdsb2JhbAptYWludGFpbmVyIG1heSBzdGVwIGluIHRvIHJldmlldyB0aGUgcGF0Y2guICBCdXQgc29tZXRpbWVzIGxpZmUgaW50ZXJ2ZW5lcwptb3JlIHBlcm1hbmVudGx5LCBhbmQgYSBtYWludGFpbmVyIG1heSBubyBsb25nZXIgaGF2ZSB0aW1lIGZvciB0aGVzZSBkdXRpZXMuCldoZW4gdGhpcyBoYXBwZW5zLCBoZSBvciBzaGUgc2hvdWxkIHN0ZXAgZG93biAoZWl0aGVyIGludG8gdGhlIEF1dGhvcml6ZWQKQ29tbWl0dGVycyBzZWN0aW9uIGlmIHN0aWxsIGludGVyZXN0ZWQgaW4gdGhlIGFyZWEsIG9yIHNpbXBseSByZW1vdmVkIGZyb20KdGhlIGxpc3Qgb2YgUmVzcG9uc2libGUgTWFpbnRhaW5lcnMgaWYgbm90KS4KCklmIGEgcmVzcG9uc2libGUgbWFpbnRhaW5lciBpcyB1bnJlc3BvbnNpdmUgZm9yIGFuIGV4dGVuZGVkIHBlcmlvZCBvZiB0aW1lCndpdGhvdXQgc3RlcHBpbmcgZG93biwgcGxlYXNlIGNvbnRhY3QgdGhlIEdsb2JhbCBNYWludGFpbmVyczsgdGhleSB3aWxsIHRyeQp0byBjb250YWN0IHRoZSBtYWludGFpbmVyIGRpcmVjdGx5IGFuZCBmaXggdGhlIHByb2JsZW0gLSBwb3RlbnRpYWxseSBieQpyZW1vdmluZyB0aGF0IG1haW50YWluZXIgZnJvbSB0aGVpciBsaXN0ZWQgcG9zaXRpb24uCgpJZiB0aGVyZSBhcmUgc2V2ZXJhbCBtYWludGFpbmVycyBmb3IgYSBnaXZlbiBkb21haW4gdGhlbiBhbnkgb25lIG9mIHRoZW0KbWF5IHJldmlldyBhIHN1Ym1pdHRlZCBwYXRjaC4KClRhcmdldCBJbnN0cnVjdGlvbiBTZXQgQXJjaGl0ZWN0dXJlczoKClRoZSAqLXRkZXAuYyBmaWxlcy4gIElTQSAoSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSkgYW5kIE9TLUFCSQooT3BlcmF0aW5nIFN5c3RlbSAvIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UpIGlzc3VlcyBpbmNsdWRpbmcgQ1BVCnZhcmlhbnRzLgoKVGhlIFRhcmdldC9BcmNoaXRlY3R1cmUgbWFpbnRhaW5lciB3b3JrcyB3aXRoIHRoZSBob3N0IG1haW50YWluZXIgd2hlbgpyZXNvbHZpbmcgYnVpbGQgaXNzdWVzLiAgVGhlIFRhcmdldC9BcmNoaXRlY3R1cmUgbWFpbnRhaW5lciB3b3JrcyB3aXRoCnRoZSBuYXRpdmUgbWFpbnRhaW5lciB3aGVuIHJlc29sdmluZyBBQkkgaXNzdWVzLgoKCWFscGhhCQktLXRhcmdldD1hbHBoYS1lbGYgLC1XZXJyb3IKCglhcm0JCS0tdGFyZ2V0PWFybS1lbGYgLC1XZXJyb3IKCQkJUmljaGFyZCBFYXJuc2hhdwlyZWFybnNoYUBhcm0uY29tCgoJYXZyCQktLXRhcmdldD1hdnIgLC1XZXJyb3IKCQkJVHJpc3RhbiBHaW5nb2xkCQlnaW5nb2xkQGFkYWNvcmUuY29tCgoJY3JpcwkJLS10YXJnZXQ9Y3Jpcy1lbGYgLC1XZXJyb3IgLAoJCQkoc2ltIGRvZXMgbm90IGJ1aWxkIHdpdGggLVdlcnJvcikKCglmcnYJCS0tdGFyZ2V0PWZydi1lbGYgLC1XZXJyb3IKCgloODMwMAkJLS10YXJnZXQ9aDgzMDAtZWxmICwtV2Vycm9yCgoJaTM4NgkJLS10YXJnZXQ9aTM4Ni1lbGYgLC1XZXJyb3IKCQkJTWFyayBLZXR0ZW5pcyAgICAgICAgICAga2V0dGVuaXNAZ251Lm9yZwoKCWlhNjQJCS0tdGFyZ2V0PWlhNjQtbGludXgtZ251ICwtV2Vycm9yCgkJCSgtLXRhcmdldD1pYTY0LWVsZiBicm9rZW4pCgkJCUphbiBLcmF0b2NodmlsCQlqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tCgoJbG0zMgkJLS10YXJnZXQ9bG0zMi1lbGYgLC1XZXJyb3IKCgltMzJjCQktLXRhcmdldD1tMzJjLWVsZiAsLVdlcnJvcgoKCW0zMnIJCS0tdGFyZ2V0PW0zMnItZWxmICwtV2Vycm9yCgoJbTY4aGMxMQkJLS10YXJnZXQ9bTY4aGMxMS1lbGYgLC1XZXJyb3IgLAoJCQlTdGVwaGFuZSBDYXJyZXoJCXN0Y2FycmV6QG5lcmltLmZyCgoJbTY4awkJLS10YXJnZXQ9bTY4ay1lbGYgLC1XZXJyb3IKCgltODhrCQktLXRhcmdldD1tODhrLW9wZW5ic2QgLC1XZXJyb3IKCQkJTWFyayBLZXR0ZW5pcwkJa2V0dGVuaXNAZ251Lm9yZwoKCW1jb3JlCQlEZWxldGVkCgoJbWVwCQktLXRhcmdldD1tZXAtZWxmICwtV2Vycm9yCgkJCUtldmluIEJ1ZXR0bmVyCQlrZXZpbmJAcmVkaGF0LmNvbQoKCW1pY3JvYmxhemUJLS10YXJnZXQ9bWljcm9ibGF6ZS14aWxpbngtZWxmICwtV2Vycm9yCgkJCS0tdGFyZ2V0PW1pY3JvYmxhemUtbGludXgtZ251ICwtV2Vycm9yCgkJCU1pY2hhZWwgRWFnZXIJCWVhZ2VyQGVhZ2VyY29uLmNvbQoKCW1pcHMJCS0tdGFyZ2V0PW1pcHMtZWxmICwtV2Vycm9yCgoJbW4xMDMwMAkJLS10YXJnZXQ9bW4xMDMwMC1lbGYgYnJva2VuCgkJCShzaW0vIGRpZXMgd2l0aCBtYWtlIC1qKQoJCQlNaWNoYWVsIFNueWRlcgkJbXNueWRlckB2bXdhcmUuY29tCgoJbW94aWUJCS0tdGFyZ2V0PW1veGllLWVsZiAsLVdlcnJvcgoJCQlBbnRob255IEdyZWVuCQlncmVlbkBtb3hpZWxvZ2ljLmNvbQoKCW1zMQkJLS10YXJnZXQ9bXMxLWVsZiAsLVdlcnJvcgoJCQlLZXZpbiBCdWV0dG5lcgkJa2V2aW5iQHJlZGhhdC5jb20KCgluczMyawkJRGVsZXRlZAoKCXBhCQktLXRhcmdldD1ocHBhLWVsZiAsLVdlcnJvcgoKCXBvd2VycGMJCS0tdGFyZ2V0PXBvd2VycGMtZWFiaSAsLVdlcnJvcgoKCXMzOTAJCS0tdGFyZ2V0PXMzOTAtbGludXgtZ251ICwtV2Vycm9yCgoJc2NvcmUJLS10YXJnZXQ9c2NvcmUtZWxmCgkJCVFpbndlaQkJcWlud2VpQHN1bm5vcnRoLmNvbS5jbgoKCXNoCQktLXRhcmdldD1zaC1lbGYgLC1XZXJyb3IKCQkJLS10YXJnZXQ9c2g2NC1lbGYgLC1XZXJyb3IKCglzcGFyYwkJLS10YXJnZXQ9c3BhcmM2NC1zb2xhcmlzMi4xMCAsLVdlcnJvcgoJCQkoLS10YXJnZXQ9c3BhcmMtZWxmIGJyb2tlbikKCglzcHUJCS0tdGFyZ2V0PXNwdS1lbGYgLC1XZXJyb3IKCQkJVWxyaWNoIFdlaWdhbmQJCXV3ZWlnYW5kQGRlLmlibS5jb20KCgl2ODUwCQktLXRhcmdldD12ODUwLWVsZiAsLVdlcnJvcgoKCXZheAkJLS10YXJnZXQ9dmF4LW5ldGJzZCAsLVdlcnJvcgoKCXg4Ni02NAkJLS10YXJnZXQ9eDg2XzY0LWxpbnV4LWdudSAsLVdlcnJvcgoKCXhzdG9ybXkxNgktLXRhcmdldD14c3Rvcm15MTYtZWxmCgkJCUNvcmlubmEgVmluc2NoZW4Jdmluc2NoZW5AcmVkaGF0LmNvbQoKCXh0ZW5zYQkJLS10YXJnZXQ9eHRlbnNhLWVsZgoJCQlNYXhpbSBHcmlnb3JpZXYJCW1heGltMjQwNUBnbWFpbC5jb20KCkFsbCBkZXZlbG9wZXJzIHJlY29nbml6ZWQgYnkgdGhpcyBmaWxlIGNhbiBtYWtlIGFyYml0cmFyeSBjaGFuZ2VzIHRvCk9CU09MRVRFIHRhcmdldHMuCgpUaGUgQm91cm5lIHNoZWxsIHNjcmlwdCBnZGJfbWJ1aWxkLnNoIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgYWxsIHRoZQphYm92ZSB0YXJnZXRzLgoKCkhvc3QvTmF0aXZlOgoKVGhlIE5hdGl2ZSBtYWludGFpbmVyIGlzIHJlc3BvbnNpYmxlIGZvciB0YXJnZXQgc3BlY2lmaWMgbmF0aXZlCnN1cHBvcnQgLSB0eXBpY2FsbHkgc2hhcmVkIGxpYnJhcmllcyBhbmQgcXVpcmtzIHRvIHByb2Nmcy9wdHJhY2UvLi4uClRoZSBOYXRpdmUgbWFpbnRhaW5lciB3b3JrcyB3aXRoIHRoZSBBcmNoIGFuZCBDb3JlIG1haW50YWluZXJzIHdoZW4KcmVzb2x2aW5nIG1vcmUgZ2VuZXJpYyBwcm9ibGVtcy4KClRoZSBob3N0IG1haW50YWluZXIgZW5zdXJlcyB0aGF0IGdkYiBjYW4gYmUgYnVpbHQgYXMgYSBjcm9zcyBkZWJ1Z2dlciBvbgp0aGVpciBwbGF0Zm9ybS4KCkFJWAkJCUpvZWwgQnJvYmVja2VyCQlicm9iZWNrZXJAYWRhY29yZS5jb20KRGFyd2luCQkJVHJpc3RhbiBHaW5nb2xkCQlnaW5nb2xkQGFkYWNvcmUuY29tCmRqZ3BwIG5hdGl2ZQkJRWxpIFphcmV0c2tpaQkJZWxpekBnbnUub3JnCkdOVSBIdXJkCQlBbGZyZWQgTS4gU3ptaWR0CWFtc0BnbnUub3JnCk1TIFdpbmRvd3MgKE5ULCAnMDAsIDl4LCBNZSwgWFApIGhvc3QgJiBuYXRpdmUKCQkJQ2hyaXMgRmF5bG9yCQljZ2ZAYWx1bS5idS5lZHUKR05VL0xpbnV4L3g4NiBuYXRpdmUgJiBob3N0CgkJCU1hcmsgS2V0dGVuaXMJCWtldHRlbmlzQGdudS5vcmcKR05VL0xpbnV4IE1JUFMgbmF0aXZlICYgaG9zdAoJCQlEYW5pZWwgSmFjb2Jvd2l0eglkYW5AY29kZXNvdXJjZXJ5LmNvbQpHTlUvTGludXggbTY4awkJQW5kcmVhcyBTY2h3YWIJCXNjaHdhYkBsaW51eC1tNjhrLm9yZwpGcmVlQlNEIG5hdGl2ZSAmIGhvc3QJTWFyayBLZXR0ZW5pcwkJa2V0dGVuaXNAZ251Lm9yZwoKCgpDb3JlOiBHZW5lcmljIGNvbXBvbmVudHMgdXNlZCBieSBhbGwgb2YgR0RCCgp0cmFjaW5nCQkJTWljaGFlbCBTbnlkZXIJCW1zbnlkZXJAdm13YXJlLmNvbQp0aHJlYWRzCQkJTWljaGFlbCBTbnlkZXIJCW1zbnlkZXJAdm13YXJlLmNvbQoJCQlNYXJrIEtldHRlbmlzCQlrZXR0ZW5pc0BnbnUub3JnCmxhbmd1YWdlIHN1cHBvcnQKICBBZGEJCQlKb2VsIEJyb2JlY2tlcgkJYnJvYmVja2VyQGFkYWNvcmUuY29tCgkJCVBhdWwgSGlsZmluZ2VyCQloaWxmaW5nZXJAZ25hdC5jb20KICBDKysJCQlEYW5pZWwgSmFjb2Jvd2l0eglkYW5AY29kZXNvdXJjZXJ5LmNvbQogIE9iamVjdGl2ZSBDIHN1cHBvcnQgICBBZGFtIEZlZG9yCQlmZWRvckBnbnUub3JnCnNoYXJlZCBsaWJzCQlLZXZpbiBCdWV0dG5lcgkJa2V2aW5iQHJlZGhhdC5jb20KTUkgaW50ZXJmYWNlCQlWbGFkaW1pciBQcnVzCQl2bGFkaW1pckBjb2Rlc291cmNlcnkuY29tCgpkb2N1bWVudGF0aW9uCQlFbGkgWmFyZXRza2lpCQllbGl6QGdudS5vcmcKICAoaW5jbHVkaW5nIE5FV1MpCnRlc3RzdWl0ZQogIGdkYnRrIChnZGIuZ2RidGspICAgICBLZWl0aCBTZWl0eiAgICAgICAgICAgICBrZWl0aHNAcmVkaGF0LmNvbQogIHRocmVhZHMgKGdkYi50aHJlYWRzKSBNaWNoYWVsIFNueWRlcgkJbXNueWRlckB2bXdhcmUuY29tCiAgdHJhY2UgKGdkYi50cmFjZSkgICAgIE1pY2hhZWwgU255ZGVyCQltc255ZGVyQHZtd2FyZS5jb20KCgpVSTogRXh0ZXJuYWwgKHVzZXIpIGludGVyZmFjZXMuCgpnZGJ0ayAoYyAmIHRjbCkJCUZlcm5hbmRvIE5hc3NlciAgICAgICAgIGZuYXNzZXJAcmVkaGF0LmNvbQoJCQlLZWl0aCBTZWl0egkJa2VpdGhzQHJlZGhhdC5jb20KbGliZ3VpICh3L2ZvdW5kcnksIHNuKQlLZWl0aCBTZWl0egkJa2VpdGhzQHJlZGhhdC5jb20KCgpNaXNjOgoKZ2RiL2dkYnNlcnZlcgkJRGFuaWVsIEphY29ib3dpdHoJZGFuQGNvZGVzb3VyY2VyeS5jb20KCk1ha2VmaWxlLmluLCBjb25maWd1cmUqCUFMTAoKbW1hbGxvYy8JCUFMTCBIb3N0IG1haW50YWluZXJzCgpzaW0vCQkJU2VlIHNpbS9NQUlOVEFJTkVSUwoKcmVhZGxpbmUvCQlNYXN0ZXIgdmVyc2lvbjogZnRwOi8vZnRwLmN3cnUuZWR1L3B1Yi9iYXNoLwoJCQlBTEwKCQkJSG9zdCBtYWludGFpbmVycyAoaG9zdCBkZXBlbmRhbnQgcGFydHMpCgkJCShidXQgZ2V0IHlvdXIgY2hhbmdlcyBpbnRvIHRoZSBtYXN0ZXIgdmVyc2lvbikKCnRjbC8gdGsvIGl0Y2wvCQlBTEwKCgoJCUF1dGhvcml6ZWQgQ29tbWl0dGVycwoJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlc2UgYXJlIGRldmVsb3BlcnMgd29ya2luZyBvbiBwYXJ0aWN1bGFyIGFyZWFzIG9mIEdEQiwgd2hvIGFyZSB0cnVzdGVkIHRvCmNvbW1pdCB0aGVpciBvd24gKG9yIG90aGVyIGRldmVsb3BlcnMnKSBwYXRjaGVzIGluIHRob3NlIGFyZWFzIHdpdGhvdXQKZnVydGhlciByZXZpZXcgZnJvbSBhIEdsb2JhbCBNYWludGFpbmVyIG9yIFJlc3BvbnNpYmxlIE1haW50YWluZXIuICBUaGV5IGFyZQp1bmRlciBubyBvYmxpZ2F0aW9uIHRvIHJldmlldyBwb3N0ZWQgcGF0Y2hlcyAtIGJ1dCwgb2YgY291cnNlLCBhcmUgaW52aXRlZAp0byBkbyBzbyEKClBvd2VyUEMJCQlBbmRyZXcgQ2FnbmV5CQljYWduZXlAZ251Lm9yZwpDUklTCQkJSGFucy1QZXRlciBOaWxzc29uCWhwQGF4aXMuY29tCklBNjQJCQlKZWZmIEpvaG5zdG9uCQlqam9obnN0bkByZWRoYXQuY29tCk1JUFMJCQlKb2VsIEJyb2JlY2tlcgkJYnJvYmVja2VyQGFkYWNvcmUuY29tCm0zMnIJCQlLZWkgU2FrYW1vdG8JCXNha2Ftb3RvLmtlaUByZW5lc2FzLmNvbQpQb3dlclBDCQkJS2V2aW4gQnVldHRuZXIJCWtldmluYkByZWRoYXQuY29tCkNSSVMJCQlPcmphbiBGcmliZXJnCQlvcmphbmZAYXhpcy5jb20KSFBQQQkJCVJhbmRvbHBoIENodW5nCQl0YXVzcUBkZWJpYW4ub3JnClMzOTAJCQlVbHJpY2ggV2VpZ2FuZAkJdXdlaWdhbmRAZGUuaWJtLmNvbQpkamdwcAkJCURKIERlbG9yaWUJCWRqQGRlbG9yaWUuY29tCgkJCVtQbGVhc2UgdXNlIHRoaXMgYWRkcmVzcyB0byBjb250YWN0IERKIGFib3V0IERKR1BQXQp0dWkJCQlTdGVwaGFuZSBDYXJyZXoJCXN0Y2FycmV6QG5lcmltLmZyCmlhNjQJCQlLZXZpbiBCdWV0dG5lcgkJa2V2aW5iQHJlZGhhdC5jb20KQUlYCQkJS2V2aW4gQnVldHRuZXIJCWtldmluYkByZWRoYXQuY29tCkdOVS9MaW51eCBQUEMgbmF0aXZlCUtldmluIEJ1ZXR0bmVyCQlrZXZpbmJAcmVkaGF0LmNvbQpnZGIuamF2YSB0ZXN0cwkJQW50aG9ueSBHcmVlbgkJZ3JlZW5AcmVkaGF0LmNvbQpGcmVlQlNEIG5hdGl2ZSAmIGhvc3QJRGF2aWQgTydCcmllbgkJb2JyaWVuQGZyZWVic2Qub3JnCmV2ZW50IGxvb3AJCUVsZW5hIFphbm5vbmkJCWVsZW5hLnphbm5vbmlAb3JhY2xlLmNvbQpnZW5lcmljIHN5bXRhYnMJCUVsZW5hIFphbm5vbmkJCWVsZW5hLnphbm5vbmlAb3JhY2xlLmNvbQpkd2FyZiByZWFkZXJzCQlFbGVuYSBaYW5ub25pCQllbGVuYS56YW5ub25pQG9yYWNsZS5jb20KZWxmIHJlYWRlcgkJRWxlbmEgWmFubm9uaQkJZWxlbmEuemFubm9uaUBvcmFjbGUuY29tCnN0YWJzIHJlYWRlcgkJRWxlbmEgWmFubm9uaQkJZWxlbmEuemFubm9uaUBvcmFjbGUuY29tCnJlYWRsaW5lLwkJRWxlbmEgWmFubm9uaQkJZWxlbmEuemFubm9uaUBvcmFjbGUuY29tCk5ldEJTRCBuYXRpdmUgJiBob3N0CUphc29uIFRob3JwZQkJdGhvcnBlakBuZXRic2Qub3JnClBhc2NhbCBzdXBwb3J0CQlQaWVycmUgTXVsbGVyCQltdWxsZXJAc291cmNld2FyZS5vcmcKYXZyCQkJVGhlb2RvcmUgQS4gUm90aAl0cm90aEBvcGVuYXZyLm9yZwpNb2R1bGEtMiBzdXBwb3J0CUdhaXVzIE11bGxleQkJZ2FpdXNAZ2xhbS5hYy51awoKCgkJCVdyaXRlIEFmdGVyIEFwcHJvdmFsCgkJCSAgIChhbHBoYWJldGljKQoKVG8gZ2V0IHJlY29tbWVuZGVkIGZvciB0aGUgV3JpdGUgQWZ0ZXIgQXBwcm92YWwgbGlzdCB5b3UgbmVlZCBhIHZhbGlkCkZTRiBhc3NpZ25tZW50IGFuZCBoYXZlIHN1Ym1pdHRlZCBvbmUgZ29vZCBwYXRjaC4KClBlZHJvIEFsdmVzCQkJCQlwZWRyb19hbHZlc0Bwb3J0dWdhbG1haWwucHQKRGF2aWQgQW5kZXJzb24JCQkJCWRhdmVhQHNnaS5jb20KSm9obiBEYXZpZCBBbmdsaW4JCQkJZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2EKU2hyaW5pdmFzIEF0cmUJCQkJCXNocmluaXZhc2FAa3BpdGN1bW1pbnMuY29tClNjb3R0IEJhbWJyb3VnaAkJCQkJc2NvdHRiQG5ldHdpbmRlci5vcmcKVGhpYWdvIEp1bmcgQmF1ZXJtYW5uCQkJCWJhdWVybWFuQGJyLmlibS5jb20KSm9uIEJlbmlzdG9uCQkJCQlqb25AYmVuaXN0b24uY29tCkphbiBCZXVsaWNoCQkJCQlqYmV1bGljaEBub3ZlbGwuY29tCkppbSBCbGFuZHkJCQkJCWppbWJAY29kZXNvdXJjZXJ5LmNvbQpQaGlsaXAgQmx1bmRlbGwJCQkJCXBoaWxiQGdudS5vcmcKUGVyIEJvdGhuZXIJCQkJCXBlckBib3RobmVyLmNvbQpKb2VsIEJyb2JlY2tlcgkJCQkJYnJvYmVja2VyQGFkYWNvcmUuY29tCkRhdmUgQnJvbGxleQkJCQkJYnJvbGxleUByZWRoYXQuY29tClBhdWwgQnJvb2sJCQkJCXBhdWxAY29kZXNvdXJjZXJ5LmNvbQpKdWxpYW4gQnJvd24JCQkJCWp1bGlhbkBjb2Rlc291cmNlcnkuY29tCktldmluIEJ1ZXR0bmVyCQkJCQlrZXZpbmJAcmVkaGF0LmNvbQpBbmRyZXcgQ2FnbmV5CQkJCQljYWduZXlAZ251Lm9yZwpEYXZpZCBDYXJsdG9uCQkJCQljYXJsdG9uQGJhY3RyaWFuLm9yZwpTdGVwaGFuZSBDYXJyZXoJCQkJCXN0Y2FycmV6QG5lcmltLmZyCk1pY2hhZWwgQ2hhc3RhaW4JCQkJbWVjLmdudUBtaW5kc3ByaW5nLmNvbQpFcmljIENocmlzdG9waGVyCQkJCWVjaHJpc3RvQGFwcGxlLmNvbQpSYW5kb2xwaCBDaHVuZwkJCQkJdGF1c3FAZGViaWFuLm9yZwpOaWNrIENsaWZ0b24JCQkJCW5pY2tjQHJlZGhhdC5jb20KSi5ULiBDb25rbGluCQkJCQlqdGNAYWNvcm50b29sd29ya3MuY29tCkJyZW5kYW4gQ29ub2JveQkJCQkJYmxjQHJlZGhhdC5jb20KTHVkb3ZpYyBDb3VydOhzCQkJCQlsdWRvQGdudS5vcmcKREogRGVsb3JpZQkJCQkJZGpAcmVkaGF0LmNvbQpDaHJpcyBEZW1ldHJpb3UJCQkJCWNnZEBnb29nbGUuY29tClBoaWxpcHBlIERlIE11eXRlcgkJCQlwaGRtQG1hY3FlbC5iZQpEaGFuYW5qYXkgRGVzaHBhbmRlCQkJCWRoYW5hbmpheWRAa3BpdGN1bW1pbnMuY29tCk1hcmt1cyBEZXVsaW5nCQkJCQlkZXVsaW5nQGRlLmlibS5jb20KS2xlZSBEaWVuZXMJCQkJCWtkaWVuZXNAYXBwbGUuY29tCkdhYnJpZWwgRG9zIFJlaXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkckBpbnRlZ3JhYmxlLXNvbHV0aW9ucy5uZXQKTWljaGFlbCBFYWdlcgkJCQkJZWFnZXJAZWFnZXJjb24uY29tClJpY2hhcmQgRWFybnNoYXcJCQkJcmVhcm5zaGFAYXJtLmNvbQpTdGV2ZSBFbGxjZXkJCQkJCXNqZUBjdXAuaHAuY29tCkZyYW5rIENoLiBFaWdsZXIJCQkJZmNoZUByZWRoYXQuY29tCkJlbiBFbGxpc3RvbgkJCQkJYmplQGdudS5vcmcKRG91ZyBFdmFucwkJCQkJZGplQGdvb2dsZS5jb20KQWRhbSBGZWRvcgkJCQkJZmVkb3JAZ251Lm9yZwpCcmlhbiBGb3JkCQkJCQlmb3JkQHZzcy5mc2kuY29tCk9yamFuIEZyaWJlcmcJCQkJCW9yamFuZkBheGlzLmNvbQpOYXRoYW4gRnJveWQJCQkJCWZyb3lkbmpAY29kZXNvdXJjZXJ5LmNvbQpHYXJ5IEZ1bmNrCQkJCQlnYXJ5QGludHJlcGlkLmNvbQpQYXVsIEdpbGxpYW0JCQkJCXBnaWxsaWFtQHVzLmlibS5jb20KVHJpc3RhbiBHaW5nb2xkCQkJCQlnaW5nb2xkQGFkYWNvcmUuY29tClJhb3VsIEdvdWdoCQkJCQlSYW91bEdvdWdoQHlhaG9vLmNvLnVrCkFudGhvbnkgR3JlZW4JCQkgCQlncmVlbkByZWRoYXQuY29tCk1hdHRoZXcgR3JlZW4JCQkJCW1yZ0BldGVybmEuY29tLmF1Ck1hdHRoZXcgR3JldHRvbi1EYW5uCQkJCW1hdHRoZXcuZ3JldHRvbi1kYW5uQGFybS5jb20KTWF4aW0gR3JpZ29yaWV2CQkJCQltYXhpbTI0MDVAZ21haWwuY29tCkplcm9tZSBHdWl0dG9uCQkJCQlndWl0dG9uQGFjdC1ldXJvcGUuZnIKQmVuIEhhcnJpcwkJCQkJYmpoMjFAbmV0YnNkLm9yZwpSaWNoYXJkIEhlbmRlcnNvbgkJCQlydGhAcmVkaGF0LmNvbQpBbGR5IEhlcm5hbmRlegkJCQkJYWxkeWhAcmVkaGF0LmNvbQpQYXVsIEhpbGZpbmdlcgkJCQkJaGlsZmluZ2VyQGduYXQuY29tCk1hdHQgSGlsbGVyCQkJCQloaWxsZXJAcmVkaGF0LmNvbQpLYXp1IEhpcmF0YQkJCQkJa2F6dUBjcy51bWFzcy5lZHUKSmVmZiBIb2xjb21iCQkJCQlqZWZmaEByZWRoYXQuY29tCkRvbiBIb3dhcmQJCQkJCWRob3dhcmRAcmVkaGF0LmNvbQpOaWNrIEh1ZHNvbgkJCQkJbmljay5odWRzb25AZHNsLnBpcGV4LmNvbQpNYXJ0aW4gSHVudAkJCQkJaHVudEByZWRoYXQuY29tCkppbSBJbmdoYW0JCQkJCWppbmdoYW1AYXBwbGUuY29tCkJhdXJ6aGFuIElzbWFndWxvdgkJCQlpYnJAcmFkaXg1MC5uZXQKTWFub2ogSXllcgkJCQkJbWFuam9AYXVzdGluLmlibS5jb20KRGFuaWVsIEphY29ib3dpdHoJCQkJZGFuQGNvZGVzb3VyY2VyeS5jb20KQW5kcmVhcyBKYWVnZXIJCQkJCWFqQHN1c2UuZGUKSmVmZiBKb2huc3RvbgkJCQkJampvaG5zdG5AcmVkaGF0LmNvbQpHZW9mZiBLZWF0aW5nCQkJCQlnZW9mZmtAcmVkaGF0LmNvbQpNYXJrIEtldHRlbmlzCQkJCQlrZXR0ZW5pc0BnbnUub3JnCk1hcmMgS2hvdXphbQkJCQkJbWFyYy5raG91emFtQGVyaWNzc29uLmNvbQpKaW0gS2luZ2RvbgkJCQkJa2luZ2RvbkBwYW5peC5jb20KSmFuIEtyYXRvY2h2aWwJCQkJCWphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20KSm9uYXRoYW4gTGFybW91cgkJCQlqaWZsQGVjb3NjZW50cmljLmNvbQpKZWZmIExhdwkJCQkJbGF3QHJlZGhhdC5jb20KRGF2aWQgTGVjb21iZXIJCQkJCWRhdmlkQHN0cmVhbWxpbmUtY29tcHV0aW5nLmNvbQpEb24gTGVlCQkJCQkJZG9uLmxlZUBzdW5wbHVzY3QuY29tClJvYmVydCBMaXBlCQkJCQlyamxAc2NvLmNvbQpTYW5kcmEgTG9vc2Vtb3JlCQkJCXNhbmRyYUBjb2Rlc291cmNlcnkuY29tCkguSi4gTHUJCQkJCQloamwudG9vbHNAZ21haWwuY29tCk1pY2hhbCBMdWR2aWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sdWR2aWdAc3VzZS5jegpMdWlzIE1hY2hhZG8JCQkJCWx1aXNncG1AYnIuaWJtLmNvbQpHbGVuIE1jQ3JlYWR5CQkJCQlna21AcmVkaGF0LmNvbQpHcmVnIE1jR2FyeQkJCQkJZ3JlZ0BtY2dhcnkub3JnClJvbGFuZCBNY0dyYXRoCQkJCQlyb2xhbmRAcmVkaGF0LmNvbQpCcnljZSBNY0tpbmxheQkJCQkJbWNraW5sYXlAcmVkaGF0LmNvbQpKYXNvbiBNZXJyaWxsCQkJCQlqYXNvbkByZWRoYXQuY29tCkRhdmlkIFMuIE1pbGxlcgkJCQkJZGF2ZW1AcmVkaGF0LmNvbQpNYXJrIE1pdGNoZWxsCQkJCQltYXJrQGNvZGVzb3VyY2VyeS5jb20KTWFya28gTWxpbmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya29tQG9wZW5jb3Jlcy5vcmcKQWxhbiBNb2RyYQkJCQkJYW1vZHJhQGdtYWlsLmNvbQpKYXNvbiBNb2xlbmRhCQkJCQlqbW9sZW5kYUBhcHBsZS5jb20KQ2hyaXMgTW9sbGVyCQkJCQljbW9sbGVyQHJlZGhhdC5jb20KUGhpbCBNdWxkb29uCQkJCQlwbXVsZG9vbkByZWRoYXQuY29tClBpZXJyZSBNdWxsZXIJCQkJCW11bGxlckBzb3VyY2V3YXJlLm9yZwpHYWl1cyBNdWxsZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWl1c0BnbGFtLmFjLnVrCkpvc2VwaCBNeWVycwkJCQkJam9zZXBoQGNvZGVzb3VyY2VyeS5jb20KRmVybmFuZG8gTmFzc2VyCQkJCQlmbmFzc2VyQHJlZGhhdC5jb20KQWRhbSBOZW1ldAkJCQkJYW5lbWV0QGNhdml1bW5ldHdvcmtzLmNvbQpOYXRoYW5hZWwgTmVyb2RlCQkJCW5lcm9kZW5AZ2NjLmdudS5vcmcKSGFucy1QZXRlciBOaWxzc29uCQkJCWhwQGJpdHJhbmdlLmNvbQpEYXZpZCBPJ0JyaWVuCQkJCQlvYnJpZW5AZnJlZWJzZC5vcmcKQWxleGFuZHJlIE9saXZhCQkJCQlhb2xpdmFAcmVkaGF0LmNvbQpLYXJlbiBPc21vbmQJCQkJCWthcmVuLm9zbW9uZEBnbWFpbC5jb20KRGVuaXMgUGlsYXQJCQkJCWRlbmlzLnBpbGF0QHN0LmNvbQpQYXVsIFBsdXpobmlrb3YJCQkJCXBwbHV6aG5pa292QGdvb2dsZS5jb20KVmxhZGltaXIgUHJ1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmxhZGltaXJAY29kZXNvdXJjZXJ5LmNvbQpRaW53ZWkJCQkJCQlxaW53ZWlAc3Vubm9ydGguY29tLmNuCkZyZWRlcmljIFJpc3MJCQkJCWZyZWRlcmljLnJpc3NAc3QuY29tCkFsZWtzYW5kYXIgUmlzdG92c2tpCQkJCWFyaXN0b3Zza2lAcW54LmNvbQpUb20gUml4CQkJCQkJdHJpeEByZWRoYXQuY29tCk5pY2sgUm9iZXJ0cwkJCQkJbmlja3JvYkBzbmFwLm5ldC5uegpCb2IgUm9zc2kgCQkJCQlib2Jfcm9zc2lAY294Lm5ldApUaGVvZG9yZSBBLiBSb3RoCQkJCXRyb3RoQG9wZW5hdnIub3JnCklhbiBSb3hib3JvdWdoCQkJCQlpcm94QHJlZGhhdC5jb20KTWFjaWVqIFcuIFJvenlja2kJCQkJbWFjcm9AbGludXgtbWlwcy5vcmcKR3JhY2UgU2FpbnNidXJ5CQkJCQlncmFjZXNAcmVkaGF0LmNvbQpLZWkgU2FrYW1vdG8JCQkJCXNha2Ftb3RvLmtlaUByZW5lc2FzLmNvbQpNYXJrIFNhbHRlcgkJCQkJbXNhbHRlckByZWRoYXQuY29tClJpY2hhcmQgU2FuZGlmb3JkCQkJCXJpY2hhcmRAY29kZXNvdXJjZXJ5LmNvbQpQZXRlciBTY2hhdWVyCQkJCQlQZXRlci5TY2hhdWVyQG15dHVtLmRlCkFuZHJlYXMgU2Nod2FiCQkJCQlzY2h3YWJAbGludXgtbTY4ay5vcmcKVGhvbWFzIFNjaHdpbmdlCQkJCQl0c2Nod2luZ2VAZ251Lm9yZwpLZWl0aCBTZWl0egkJCQkJa2VpdGhzQHJlZGhhdC5jb20KQ2FybG9zIEVkdWFyZG8gU2VvCQkJCWNzZW9AbGludXgudm5ldC5pYm0uY29tCk96a2FuIFNlemVyCQkJCQlzZXplcm96QGdtYWlsLmNvbQpTdGFuIFNoZWJzCQkJCQlzdGFuQGNvZGVzb3VyY2VyeS5jb20KSm9lbCBTaGVycmlsbAkJCQkJam9lbC5zaGVycmlsbEBvYXJjb3JwLmNvbQpNYXJrIFNoaW53ZWxsCQkJCQlzaGlud2VsbEBjb2Rlc291cmNlcnkuY29tCkNyYWlnIFNpbHZlcnN0ZWluCQkJCWNzaWx2ZXJzQGdvb2dsZS5jb20KQWlkYW4gU2tpbm5lcgkJCQkJYWlkYW5AdmVsdmV0Lm5ldApKaXJpIFNtaWQJCQkJCXNtaWRAc3VzZS5jegpEYXZpZCBTbWl0aAkJCQkJZHNtaXRoQHJlZGhhdC5jb20KU3RlcGhlbiBQLiBTbWl0aAkJCQlpc2NoaXMyQGNveC5uZXQKSmFja2llIFNtaXRoIENhc2hpb24JCQkJanNtaXRoQHJlZGhhdC5jb20KTWljaGFlbCBTbnlkZXIJCQkJCW1zbnlkZXJAdm13YXJlLmNvbQpQZXRyIFNvcmZhCQkJCQlwZXRyc0BjYWxkZXJhLmNvbQpBbmRyZXcgU3R1YmJzCQkJCQlhbXNAY29kZXNvdXJjZXJ5LmNvbQpFbWkgU3V6dWtpCQkJCQllbWktc3V6dWtpQHRqc3lzLmNvLmpwCklhbiBMYW5jZSBUYXlsb3IJCQkJaWFuQGFpcnMuY29tCkdhcnkgVGhvbWFzCQkJCQlndGhvbWFzQHJlZGhhdC5jb20KSmFzb24gVGhvcnBlCQkJCQl0aG9ycGVqQG5ldGJzZC5vcmcKQ2Fyb2xpbmUgVGljZQkJCQkJY3RpY2VAYXBwbGUuY29tCkthaSBUaWV0egkJCQkJa2FpLnRpZXR6QG9uZXZpc2lvbi5jb20KVG9tIFRyb21leQkJCQkJdHJvbWV5QHJlZGhhdC5jb20KRGF2aWQgVW5nCQkJCQlkYXZpZHVAbWlwcy5jb20KRCBWZW5rYXRhc3VicmFtYW5pYW4JCQkJZHZlbmthdEBub2lkYS5oY2x0ZWNoLmNvbQpDb3Jpbm5hIFZpbnNjaGVuCQkJCXZpbnNjaGVuQHJlZGhhdC5jb20KU2FtaSBXYWdpYWFsbGEJCQkJCXN3YWdpYWFsQHJlZGhhdC5jb20KS2VpdGggV2Fsa2VyCQkJCQlrZWl0aC53YWxrZXJAYXJtLmNvbQpLcmlzIFdhcmtlbnRpbgkJCQkJa2V3YXJrZW5AcW54LmNvbQpVbHJpY2ggV2VpZ2FuZAkJCQkJdXdlaWdhbmRAZGUuaWJtLmNvbQpOYXRoYW4gV2lsbGlhbXMJCQkJCW5hdGhhbndAd2FzYWJpc3lzdGVtcy5jb20KQm9iIFdpbHNvbgkJCQkJYm9iLndpbHNvbkBhY20ub3JnCkppbSBXaWxzb24JCQkJCXdpbHNvbkB0dWxpcHRyZWUub3JnCkVsZW5hIFphbm5vbmkJCQkJCWVsZW5hLnphbm5vbmlAb3JhY2xlLmNvbQpFbGkgWmFyZXRza2lpCQkJCQllbGl6QGdudS5vcmcKSmllIFpoYW5nCQkJCQlqaWVAY29kZXNvdXJjZXJ5LmNvbQpXdSBaaG91CQkJCQkJd29vZHpsdGNAY24uaWJtLmNvbQpZb3NoaW5vcmkgU2F0bwkJCQkJeXNhdG9AdXNlcnMuc291cmNlZm9yZ2UuanAKSHVpIFpodQkJCQkJCXRlYXdhdGVyQGdtYWlsLmNvbQpTZXJnaW8gRHVyaWdhbiBKdW5pb3IJCQkJc2VyZ2lvZGpAbGludXgudm5ldC5pYm0uY29tCk1hc2FraSBNdXJhbmFrYQkJCQkJbW9uYWthQG1vbmFtaS1zb2Z0d2FyZS5jb20KCgoJCQlQYXN0IE1haW50YWluZXJzCgpXaGVuZXZlciByZW1vdmluZyB5b3Vyc2VsZiwgb3Igc29tZW9uZSBlbHNlLCBmcm9tIHRoaXMgZmlsZSwgY29uc2lkZXIKbGlzdGluZyB0aGVpciBhcmVhcyBvZiBkZXZlbG9wbWVudCBoZXJlIGZvciBwb3N0ZXJpdHkuCgpKaW1teSBHdW8gKGdkYi5ocCwgdHVpKQkJCQlndW8gYXQgY3VwIGRvdCBocCBkb3QgY29tCkplZmYgTGF3IChocHBhKQkJCQkJbGF3IGF0IGN5Z251cyBkb3QgY29tCkRhbmllbCBCZXJsaW4gKEMrKyBzdXBwb3J0KQkJCWRhbiBhdCBjZ3NvZnR3YXJlIGRvdCBjb20KTmljayBEdWZmZWsgKHBvd2VycGMsIFNDTywgU29sL3g4NikJCW5pY2sgYXQgZHVmZmVrIGRvdCBjb20KRGF2aWQgVGF5bG9yIChkMTB2LCBzcGFyYywgdXRpbHMsIGRlZnMsCiAgZXhwcmVzc2lvbiBldmFsdWF0b3IsIGxhbmd1YWdlIHN1cHBvcnQpCXRheWxvciBhdCBjYW5kZCBkb3Qgb3JnCkouVC4gQ29ua2xpbiAoZGNhY2hlLCBOZXRCU0QsIHJlbW90ZSwgZ2xvYmFsKQlqdGMgYXQgYWNvcm50b29sd29ya3MgZG90IGNvbQpGcmFuayBDaC4gRWlnbGVyIChzaW0pCQkJCWZjaGUgYXQgcmVkaGF0IGRvdCBjb20KUGVyIEJvdGhuZXIgKEphdmEpCQkJCXBlciBhdCBib3RobmVyIGRvdCBjb20KQW50aG9ueSBHcmVlbiAoSmF2YSkJCQkJZ3JlZW4gYXQgcmVkaGF0IGRvdCBjb20KRmVybmFuZG8gTmFzc2VyICh0ZXN0c3VpdGUvLCBtaSwgY2xpLCBLT0QpICAgICAgZm5hc3NlciBhdCByZWRoYXQgZG90IGNvbQpNYXJrIFNhbHRlciAodGVzdHN1aXRlL2xpYitjb25maWcpCQltc2FsdGVyIGF0IHJlZGhhdCBkb3QgY29tCkppbSBLaW5nZG9uICh3ZWIgcGFnZXMpCQkJCWtpbmdkb24gYXQgcGFuaXggZG90IGNvbQpKaW0gSW5naGFtIChnZGJ0aywgbGliZ3VpKQkJCWppbmdoYW0gYXQgYXBwbGUgZG90IGNvbQpNYXJrIEtldHRlbmlzIChodXJkIG5hdGl2ZSkJCQlrZXR0ZW5pcyBhdCBnbnUgZG90IG9yZwpJYW4gUm94Ym9yb3VnaCAoaW4tdHJlZSB0Y2wsIHRrLCBpdGNsKQkJaXJveCBhdCByZWRoYXQgZG90IGNvbQpSb2JlcnQgTGlwZSAoU0NPL1VuaXh3YXJlKQkJCXJqbCBhdCBzY28gZG90IGNvbQpQZXRlciBTY2hhdWVyIChnbG9iYWwsIEFJWCwgeGNvZmZzb2xpYiwKICBTb2xhcmlzL3g4NikJCQkJCVBldGVyLlNjaGF1ZXIgYXQgbXl0dW0gZG90IGRlClNjb3R0IEJhbWJyb3VnaCAoQVJNKQkJCQlzY290dGIgYXQgbmV0d2luZGVyIGRvdCBvcmcKUGhpbGlwcGUgRGUgTXV5dGVyIChjb2ZmKQkJCXBoZG0gYXQgbWFjcWVsIGRvdCBiZQpNaWNoYWVsIENoYXN0YWluICh0ZXN0c3VpdGUpCQkJbWVjLmdudSBhdCBtaW5kc3ByaW5nIGRvdCBjb20KRnJlZCBGaXNoIChnbG9iYWwpCgoKCkZvbGtzIHRoYXQgaGF2ZSBiZWVuIGNhdWdodCB1cCBpbiBhIHBhcGVyIHRyYWlsOgoKRGF2aWQgQ2FybHRvbgkJCQkJY2FybHRvbkBiYWN0cmlhbi5vcmcKUmFtYW5hIFJhZGhha3Jpc2huYW4gCQkJCXJhbWFuYS5yQGdtYWlsLmNvbQoKOzsgTG9jYWwgVmFyaWFibGVzOgo7OyBjb2Rpbmc6IHV0Zi04Cjs7IEVuZDoK