Km1sYW5nLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMCBEZWMgMTEKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKCgpNdWx0aS1sYW5ndWFnZSBmZWF0dXJlcwkJCQkqbXVsdGlsYW5nKiAqbXVsdGktbGFuZyoKClRoaXMgaXMgYWJvdXQgdXNpbmcgbWVzc2FnZXMgYW5kIG1lbnVzIGluIHZhcmlvdXMgbGFuZ3VhZ2VzLiAgRm9yIGVkaXRpbmcKbXVsdGktYnl0ZSB0ZXh0IHNlZSB8bXVsdGlieXRlfC4KClRoZSBiYXNpY3MgYXJlIGV4cGxhaW5lZCBpbiB0aGUgdXNlciBtYW51YWw6IHx1c3JfNDUudHh0fC4KCjEuIE1lc3NhZ2VzCQkJfG11bHRpbGFuZy1tZXNzYWdlc3wKMi4gTWVudXMJCQl8bXVsdGlsYW5nLW1lbnVzfAozLiBTY3JpcHRzCQkJfG11bHRpbGFuZy1zY3JpcHRzfAoKQWxzbyBzZWUgfGhlbHAtdHJhbnNsYXRlZHwgZm9yIG11bHRpLWxhbmd1YWdlIGhlbHAuCgp7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXN9Cntub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCttdWx0aV9sYW5nfCBmZWF0dXJlfQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIE1lc3NhZ2VzCQkJCQkJKm11bHRpbGFuZy1tZXNzYWdlcyoKClZpbSBwaWNrcyB1cCB0aGUgbG9jYWxlIGZyb20gdGhlIGVudmlyb25tZW50LiAgSW4gbW9zdCBjYXNlcyB0aGlzIG1lYW5zIFZpbQp3aWxsIHVzZSB0aGUgbGFuZ3VhZ2UgdGhhdCB5b3UgcHJlZmVyLCB1bmxlc3MgaXQncyBub3QgYXZhaWxhYmxlLgoKVG8gc2VlIGEgbGlzdCBvZiBzdXBwb3J0ZWQgbG9jYWxlIG5hbWVzIG9uIHlvdXIgc3lzdGVtLCBsb29rIGluIG9uZSBvZiB0aGVzZQpkaXJlY3RvcmllcyAoZm9yIFVuaXgpOgoJL3Vzci9saWIvbG9jYWxlIH4KCS91c3Ivc2hhcmUvbG9jYWxlIH4KVW5mb3J0dW5hdGVseSwgdXBwZXIvbG93ZXJjYXNlIGRpZmZlcmVuY2VzIG1hdHRlci4gIEFsc28gd2F0Y2ggb3V0IGZvciB0aGUKdXNlIG9mICItIiBhbmQgIl8iLgoKCQkJCQkgICAgKjpsYW4qICo6bGFuZyogKjpsYW5ndWFnZSogKkUxOTcqCjpsYW5bZ3VhZ2VdCjpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10KOmxhbltndWFnZV0gY3R5W3BlXQo6bGFuW2d1YWdlXSB0aW1bZV0KCQkJUHJpbnQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKGFrYSBsb2NhbGUpLgoJCQlXaXRoIHRoZSAibWVzc2FnZXMiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQltZXNzYWdlcyBpcyBwcmludGVkLiAgVGVjaG5pY2FsOiBMQ19NRVNTQUdFUy4KCQkJV2l0aCB0aGUgImN0eXBlIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IKCQkJY2hhcmFjdGVyIGVuY29kaW5nIGlzIHByaW50ZWQuICBUZWNobmljYWw6IExDX0NUWVBFLgoJCQlXaXRoIHRoZSAidGltZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCgkJCXN0cmZ0aW1lKCkgaXMgcHJpbnRlZC4gIFRlY2huaWNhbDogTENfVElNRS4KCQkJV2l0aG91dCBhcmd1bWVudCBhbGwgcGFydHMgb2YgdGhlIGxvY2FsZSBhcmUgcHJpbnRlZAoJCQkodGhpcyBpcyBzeXN0ZW0gZGVwZW5kZW50KS4KCQkJVGhlIGN1cnJlbnQgbGFuZ3VhZ2UgY2FuIGFsc28gYmUgb2J0YWluZWQgd2l0aCB0aGUKCQkJfHY6bGFuZ3wsIHx2OmN0eXBlfCBhbmQgfHY6bGNfdGltZXwgdmFyaWFibGVzLgoKOmxhbltndWFnZV0ge25hbWV9CjpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10ge25hbWV9CjpsYW5bZ3VhZ2VdIGN0eVtwZV0ge25hbWV9CjpsYW5bZ3VhZ2VdIHRpbVtlXSB7bmFtZX0KCQkJU2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIChha2EgbG9jYWxlKSB0byB7bmFtZX0uCgkJCVRoZSBsb2NhbGUge25hbWV9IG11c3QgYmUgYSB2YWxpZCBsb2NhbGUgb24geW91cgoJCQlzeXN0ZW0uICBTb21lIHN5c3RlbXMgYWNjZXB0IGFsaWFzZXMgbGlrZSAiZW4iIG9yCgkJCSJlbl9VUyIsIGJ1dCBzb21lIG9ubHkgYWNjZXB0IHRoZSBmdWxsIHNwZWNpZmljYXRpb24KCQkJbGlrZSAiZW5fVVMuSVNPXzg4NTktMSIuICBPbiBVbml4IHN5c3RlbXMgeW91IGNhbiB1c2UKCQkJdGhlIHRoaXMgY29tbWFuZCB0byBzZWUgd2hhdCBsb2NhbGVzIGFyZSBzdXBwb3J0ZWQ6ID4KCQkJCTohbG9jYWxlIC1hCjwJCQlXaXRoIHRoZSAibWVzc2FnZXMiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQltZXNzYWdlcyBpcyBzZXQuICBUaGlzIGNhbiBiZSBkaWZmZXJlbnQgd2hlbiB5b3Ugd2FudCwKCQkJZm9yIGV4YW1wbGUsIEVuZ2xpc2ggbWVzc2FnZXMgd2hpbGUgZWRpdGluZyBKYXBhbmVzZQoJCQl0ZXh0LiAgVGhpcyBzZXRzICRMQ19NRVNTQUdFUy4KCQkJV2l0aCB0aGUgImN0eXBlIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IKCQkJY2hhcmFjdGVyIGVuY29kaW5nIGlzIHNldC4gIFRoaXMgYWZmZWN0cyB0aGUgbGlicmFyaWVzCgkJCXRoYXQgVmltIHdhcyBsaW5rZWQgd2l0aC4gIEl0J3MgdW51c3VhbCB0byBzZXQgdGhpcyB0bwoJCQlhIGRpZmZlcmVudCB2YWx1ZSBmcm9tICdlbmNvZGluZycgb3IgIkMiLiAgVGhpcyBzZXRzCgkJCSRMQ19DVFlQRS4KCQkJV2l0aCB0aGUgInRpbWUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvciB0aW1lCgkJCWFuZCBkYXRlIG1lc3NhZ2VzIGlzIHNldC4gIFRoaXMgYWZmZWN0cyBzdHJmdGltZSgpLgoJCQlUaGlzIHNldHMgJExDX1RJTUUuCgkJCVdpdGhvdXQgYW4gYXJndW1lbnQgYm90aCBhcmUgc2V0LCBhbmQgYWRkaXRpb25hbGx5CgkJCSRMQU5HIGlzIHNldC4KCQkJV2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2Zsb2F0fCBmZWF0dXJlIHRoZSBMQ19OVU1FUklDCgkJCXZhbHVlIHdpbGwgYWx3YXlzIGJlIHNldCB0byAiQyIsIHNvIHRoYXQgZmxvYXRpbmcKCQkJcG9pbnQgbnVtYmVycyB1c2UgJy4nIGFzIHRoZSBkZWNpbWFsIHBvaW50LgoJCQlUaGlzIHdpbGwgbWFrZSBhIGRpZmZlcmVuY2UgZm9yIGl0ZW1zIHRoYXQgZGVwZW5kIG9uCgkJCXRoZSBsYW5ndWFnZSAoc29tZSBtZXNzYWdlcywgdGltZSBhbmQgZGF0ZSBmb3JtYXQpLgoJCQlOb3QgZnVsbHkgc3VwcG9ydGVkIG9uIGFsbCBzeXN0ZW1zCgkJCUlmIHRoaXMgZmFpbHMgdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBtZXNzYWdlLiAgSWYgaXQKCQkJc3VjY2VlZHMgdGhlcmUgaXMgbm8gbWVzc2FnZS4gIEV4YW1wbGU6ID4KCQkJCTpsYW5ndWFnZQoJCQkJQ3VycmVudCBsYW5ndWFnZTogQwoJCQkJOmxhbmd1YWdlIGRlX0RFLklTT184ODU5LTEKCQkJCTpsYW5ndWFnZSBtZXMKCQkJCUN1cnJlbnQgbWVzc2FnZXMgbGFuZ3VhZ2U6IGRlX0RFLklTT184ODU5LTEKCQkJCTpsYW5nIG1lcyBlbgo8CgpNUy1XSU5ET1dTIE1FU1NBR0UgVFJBTlNMQVRJT05TCQkJCSp3aW4zMi1nZXR0ZXh0KgoKSWYgeW91IHVzZWQgdGhlIHNlbGYtaW5zdGFsbGluZyAuZXhlIGZpbGUsIG1lc3NhZ2UgdHJhbnNsYXRpb25zIHNob3VsZCB3b3JrCmFscmVhZHkuICBPdGhlcndpc2UgZ2V0IHRoZSBsaWJpbnRsLmRsbCBmaWxlIGlmIHlvdSBkb24ndCBoYXZlIGl0IHlldDoKCglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dldHRleHQKClRoaXMgYWxzbyBjb250YWlucyB0b29scyB4Z2V0dGV4dCwgbXNnZm9ybWF0IGFuZCBvdGhlcnMuCgpsaWJpbnRsLmRsbCBzaG91bGQgYmUgcGxhY2VkIGluIHNhbWUgZGlyZWN0b3J5IHdpdGggKGcpdmltLmV4ZSwgb3Igc29tZQpwbGFjZSB3aGVyZSBQQVRIIGVudmlyb25tZW50IHZhbHVlIGRlc2NyaWJlLiAgTWVzc2FnZSBmaWxlcyAodmltLm1vKQpoYXZlIHRvIGJlIHBsYWNlZCBpbiAiJFZJTVJVTlRJTUUvbGFuZy94eC9MQ19NRVNTQUdFUyIsIHdoZXJlICJ4eCIgaXMgdGhlCmFiYnJldmlhdGlvbiBvZiB0aGUgbGFuZ3VhZ2UgKG1vc3RseSB0d28gbGV0dGVycykuCgpJZiB5b3Ugd3JpdGUgeW91ciBvd24gdHJhbnNsYXRpb25zIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHRoZSAucG8gZmlsZSBhbmQKY29udmVydCBpdCB0byBhIC5tbyBmaWxlLiAgWW91IG5lZWQgdG8gZ2V0IHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFuZCByZWFkCnRoZSBmaWxlICJzcmMvcG8vUkVBRE1FLnR4dCIuCgpUbyBvdmVycnVsZSB0aGUgYXV0b21hdGljIGNob2ljZSBvZiB0aGUgbGFuZ3VhZ2UsIHNldCB0aGUgJExBTkcgdmFyaWFibGUgdG8KdGhlIGxhbmd1YWdlIG9mIHlvdXIgY2hvaWNlLiAgdXNlICJlbiIgdG8gZGlzYWJsZSB0cmFuc2xhdGlvbnMuID4KCiAgOmxldCAkTEFORyA9ICdqYScKCih0ZXh0IGZvciBXaW5kb3dzIGJ5IE11cmFva2EgVGFybykKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBNZW51cwkJCQkJCSptdWx0aWxhbmctbWVudXMqCgpTZWUgfDQ1LjJ8IGZvciB0aGUgYmFzaWNzLCBlc3AuIHVzaW5nICdsYW5nbWVudScuCgpOb3RlIHRoYXQgaWYgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgbWVudXMgYWZ0ZXIgdGhlIHRyYW5zbGF0aW9uIHdhcwpkb25lLCBzb21lIG9mIHRoZSBtZW51cyBtYXkgYmUgc2hvd24gaW4gRW5nbGlzaC4gIFBsZWFzZSB0cnkgY29udGFjdGluZyB0aGUKbWFpbnRhaW5lciBvZiB0aGUgdHJhbnNsYXRpb24gYW5kIGFzayBoaW0gdG8gdXBkYXRlIGl0LiAgWW91IGNhbiBmaW5kIHRoZQpuYW1lIGFuZCBlLW1haWwgYWRkcmVzcyBvZiB0aGUgdHJhbnNsYXRvciBpbgoiJFZJTVJVTlRJTUUvbGFuZy9tZW51XzxsYW5nPi52aW0iLgoKVG8gc2V0IHRoZSBmb250IChvciBmb250c2V0KSB0byB1c2UgZm9yIHRoZSBtZW51cywgdXNlIHRoZSB8OmhpZ2hsaWdodHwKY29tbWFuZC4gIEV4YW1wbGU6ID4KCgk6aGlnaGxpZ2h0IE1lbnUgZm9udD1rMTIscjEyCgoKQUxJQVMgTE9DQUxFIE5BTUVTCgpVbmZvcnR1bmF0ZWx5LCB0aGUgbG9jYWxlIG5hbWVzIGFyZSBkaWZmZXJlbnQgb24gdmFyaW91cyBzeXN0ZW1zLCBldmVuIHRob3VnaAp0aGV5IGFyZSBmb3IgdGhlIHNhbWUgbGFuZ3VhZ2UgYW5kIGVuY29kaW5nLiAgSWYgeW91IGRvIG5vdCBnZXQgdGhlIG1lbnUKdHJhbnNsYXRpb25zIHlvdSBleHBlY3RlZCwgY2hlY2sgdGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQ6ID4KCgllY2hvIHY6bGFuZwoKTm93IGNoZWNrIHRoZSAiJFZJTVJVTlRJTUUvbGFuZyIgZGlyZWN0b3J5IGZvciBtZW51IHRyYW5zbGF0aW9uIGZpbGVzIHRoYXQgdXNlCmEgc2ltaWxhciBsYW5ndWFnZS4gIEEgZGlmZmVyZW5jZSBpbiBhICItIiBiZWluZyBhICJfIiBhbHJlYWR5IGNhdXNlcyBhIGZpbGUKbm90IHRvIGJlIGZvdW5kISAgQW5vdGhlciBjb21tb24gZGlmZmVyZW5jZSB0byB3YXRjaCBvdXQgZm9yIGlzICJpc284ODU5LTEiCnZlcnN1cyAiaXNvXzg4NTktMSIuICBGb3J0dW5hdGVseSBWaW0gbWFrZXMgYWxsIG5hbWVzIGxvd2VyY2FzZSwgdGh1cyB5b3UKZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBjYXNlIGRpZmZlcmVuY2VzLiAgU3BhY2VzIGFyZSBjaGFuZ2VkIHRvCnVuZGVyc2NvcmVzLCB0byBhdm9pZCBoYXZpbmcgdG8gZXNjYXBlIHRoZW0uCgpJZiB5b3UgZmluZCBhIG1lbnUgdHJhbnNsYXRpb24gZmlsZSBmb3IgeW91ciBsYW5ndWFnZSB3aXRoIGEgZGlmZmVyZW50IG5hbWUsCmNyZWF0ZSBhIGZpbGUgaW4geW91ciBvd24gcnVudGltZSBkaXJlY3RvcnkgdG8gbG9hZCB0aGF0IG9uZS4gIFRoZSBuYW1lIG9mCnRoYXQgZmlsZSBjb3VsZCBiZTogPgoKCX4vLnZpbS9sYW5nL21lbnVfPHY6bGFuZz4udmltCgpDaGVjayB0aGUgJ3J1bnRpbWVwYXRoJyBvcHRpb24gZm9yIGRpcmVjdG9yaWVzIHdoaWNoIGFyZSBzZWFyY2hlZC4gIEluIHRoYXQKZmlsZSBwdXQgYSBjb21tYW5kIHRvIGxvYWQgdGhlIG1lbnUgZmlsZSB3aXRoIHRoZSBvdGhlciBuYW1lOiA+CgoJcnVudGltZSBsYW5nL21lbnVfPG90aGVyX2xhbmc+LnZpbQoKClRSQU5TTEFUSU5HIE1FTlVTCgpJZiB5b3Ugd2FudCB0byBkbyB5b3VyIG93biB0cmFuc2xhdGlvbnMsIHlvdSBjYW4gdXNlIHRoZSB8Om1lbnV0cmFuc3wgY29tbWFuZCwKZXhwbGFpbmVkIGJlbG93LiAgSXQgaXMgcmVjb21tZW5kZWQgdG8gcHV0IHRoZSB0cmFuc2xhdGlvbnMgZm9yIG9uZSBsYW5ndWFnZQppbiBhIFZpbSBzY3JpcHQuICBGb3IgYSBsYW5ndWFnZSB0aGF0IGhhcyBubyB0cmFuc2xhdGlvbiB5ZXQsIHBsZWFzZSBjb25zaWRlcgpiZWNvbWluZyB0aGUgbWFpbnRhaW5lciBhbmQgbWFrZSB5b3VyIHRyYW5zbGF0aW9ucyBhdmFpbGFibGUgdG8gYWxsIFZpbSB1c2Vycy4KU2VuZCBhbiBlLW1haWwgdG8gdGhlIFZpbSBtYWludGFpbmVyIDxtYWludGFpbmVyQHZpbS5vcmc+LgoKCQkJCQkqOm1lbnV0KiAqOm1lbnV0cmFucyogKjptZW51dHJhbnNsYXRlKgo6bWVudXRbcmFuc2xhdGVdIGNsZWFyCgkJCUNsZWFyIGFsbCBtZW51IHRyYW5zbGF0aW9ucy4KCjptZW51dFtyYW5zbGF0ZV0ge2VuZ2xpc2h9IHtteWxhbmd9CgkJCVRyYW5zbGF0ZSBtZW51IG5hbWUge2VuZ2xpc2h9IHRvIHtteWxhbmd9LiAgQWxsCgkJCXNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICImIiBhbmQgIjxUYWI+IiBuZWVkIHRvIGJlCgkJCWluY2x1ZGVkLiAgU3BhY2VzIGFuZCBkb3RzIG5lZWQgdG8gYmUgZXNjYXBlZCB3aXRoIGEKCQkJYmFja3NsYXNoLCBqdXN0IGxpa2UgaW4gb3RoZXIgfDptZW51fCBjb21tYW5kcy4KClNlZSB0aGUgJFZJTVJVTlRJTUUvbGFuZyBkaXJlY3RvcnkgZm9yIGV4YW1wbGVzLgoKVG8gdHJ5IG91dCB5b3VyIHRyYW5zbGF0aW9ucyB5b3UgZmlyc3QgaGF2ZSB0byByZW1vdmUgYWxsIG1lbnVzLiAgVGhpcyBpcyBob3cKeW91IGNhbiBkbyBpdCB3aXRob3V0IHJlc3RhcnRpbmcgVmltOiA+Cgk6c291cmNlICRWSU1SVU5USU1FL2RlbG1lbnUudmltCgk6c291cmNlIDx5b3VyLW5ldy1tZW51LWZpbGU+Cgk6c291cmNlICRWSU1SVU5USU1FL21lbnUudmltCgpFYWNoIHBhcnQgb2YgYSBtZW51IHBhdGggaXMgdHJhbnNsYXRlZCBzZXBhcmF0ZWx5LiAgVGhlIHJlc3VsdCBpcyB0aGF0IHdoZW4KIkhlbHAiIGlzIHRyYW5zbGF0ZWQgdG8gIkhpbGZlIiBhbmQgIk92ZXJ2aWV3IiB0byAi3GJlcmJsaWNrIiB0aGVuCiJIZWxwLk92ZXJ2aWV3IiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gIkhpbGZlLtxiZXJibGljayIuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gU2NyaXB0cwkJCQkJCSptdWx0aWxhbmctc2NyaXB0cyoKCkluIFZpbSBzY3JpcHRzIHlvdSBjYW4gdXNlIHRoZSB8djpsYW5nfCB2YXJpYWJsZSB0byBnZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UKKGxvY2FsZSkuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiQyIgb3IgY29tZXMgZnJvbSB0aGUgJExBTkcgZW52aXJvbm1lbnQKdmFyaWFibGUuCgpUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiBhIHNpbXBsZSB3YXksIHRvIG1ha2UKYSBtZXNzYWdlIGFkYXB0IHRvIGxhbmd1YWdlIHByZWZlcmVuY2VzIG9mIHRoZSB1c2VyLCA+CgoJOmlmIHY6bGFuZyA9fiAiZGVfREUiCgk6ICBlY2hvICJHdXRlbiBNb3JnZW4iCgk6ZWxzZQoJOiAgZWNobyAiR29vZCBtb3JuaW5nIgoJOmVuZGlmCjwKCiB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoK