KnNwZWxsLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgSnVuIDIzCgoKCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKCgpTcGVsbCBjaGVja2luZwkJCQkJCSpzcGVsbCoKCjEuIFF1aWNrIHN0YXJ0CQkJfHNwZWxsLXF1aWNrc3RhcnR8CjIuIEdlbmVyYXRpbmcgYSBzcGVsbCBmaWxlCXxzcGVsbC1ta3NwZWxsfAozLiBTcGVsbCBmaWxlIGZvcm1hdAkJfHNwZWxsLWZpbGUtZm9ybWF0fAoKe1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQoKU3BlbGwgY2hlY2tpbmcgaXMgbm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3N5bnRheHwgZmVhdHVyZSBoYXMgYmVlbiBkaXNhYmxlZAphdCBjb21waWxlIHRpbWUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gUXVpY2sgc3RhcnQJCQkJCQkqc3BlbGwtcXVpY2tzdGFydCoKClRoaXMgY29tbWFuZCBzd2l0Y2hlcyBvbiBzcGVsbCBjaGVja2luZzogPgoKCTpzZXRsb2NhbCBzcGVsbCBzcGVsbGxhbmc9ZW5fdXMKClRoaXMgc3dpdGNoZXMgb24gdGhlICdzcGVsbCcgb3B0aW9uIGFuZCBzcGVjaWZpZXMgdG8gY2hlY2sgZm9yIFVTIEVuZ2xpc2guCgpUaGUgd29yZHMgdGhhdCBhcmUgbm90IHJlY29nbml6ZWQgYXJlIGhpZ2hsaWdodGVkIHdpdGggb25lIG9mIHRoZXNlOgoJU3BlbGxCYWQJd29yZCBub3QgcmVjb2duaXplZAkJCXxobC1TcGVsbEJhZHwKCVNwZWxsUmFyZQlyYXJlIHdvcmQJCQkJfGhsLVNwZWxsUmFyZXwKCVNwZWxsTG9jYWwJd3Jvbmcgc3BlbGxpbmcgZm9yIHNlbGVjdGVkIHJlZ2lvbgl8aGwtU3BlbGxMb2NhbHwKClZpbSBvbmx5IGNoZWNrcyB3b3JkcyBmb3Igc3BlbGxpbmcsIHRoZXJlIGlzIG5vIGdyYW1tYXIgY2hlY2suCgpUbyBzZWFyY2ggZm9yIHRoZSBuZXh0IG1pc3NwZWxsZWQgd29yZDoKCgkJCQkJCQkqXXMqICpFNzU2KgpdcwkJCU1vdmUgdG8gbmV4dCBtaXNzcGVsbGVkIHdvcmQgYWZ0ZXIgdGhlIGN1cnNvci4KCQkJQSBjb3VudCBiZWZvcmUgdGhlIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVwZWF0LgoJCQlUaGlzIHVzZXMgdGhlIEBTcGVsbCBhbmQgQE5vU3BlbGwgY2x1c3RlcnMgZnJvbSBzeW50YXgKCQkJaGlnaGxpZ2h0aW5nLCBzZWUgfHNwZWxsLXN5bnRheHwuCgoJCQkJCQkJKltzKgpbcwkJCUxpa2UgIl1zIiBidXQgc2VhcmNoIGJhY2t3YXJkcywgZmluZCB0aGUgbWlzc3BlbGxlZAoJCQl3b3JkIGJlZm9yZSB0aGUgY3Vyc29yLiAgRG9lc24ndCByZWNvZ25pemUgd29yZHMKCQkJc3BsaXQgb3ZlciB0d28gbGluZXMsIHRodXMgbWF5IHN0b3AgYXQgd29yZHMgdGhhdCBhcmUKCQkJbm90IGhpZ2hsaWdodGVkIGFzIGJhZC4KCgkJCQkJCQkqXVMqCl1TCQkJTGlrZSAiXXMiIGJ1dCBvbmx5IHN0b3AgYXQgYmFkIHdvcmRzLCBub3QgYXQgcmFyZQoJCQl3b3JkcyBvciB3b3JkcyBmb3IgYW5vdGhlciByZWdpb24uCgoJCQkJCQkJKltTKgpbUwkJCUxpa2UgIl1TIiBidXQgc2VhcmNoIGJhY2t3YXJkcy4KCgpUbyBhZGQgd29yZHMgdG8geW91ciBvd24gd29yZCBsaXN0OgkJCQkqRTc2NCoKCgkJCQkJCQkqemcqCnpnCQkJQWRkIHdvcmQgdW5kZXIgdGhlIGN1cnNvciBhcyBhIGdvb2Qgd29yZCB0bwoJCQknc3BlbGxmaWxlJy4gIEluIFZpc3VhbCBtb2RlIHRoZSBzZWxlY3RlZCBjaGFyYWN0ZXJzCgkJCWFyZSBhZGRlZCBhcyBhIHdvcmQgKGluY2x1ZGluZyB3aGl0ZSBzcGFjZSEpLgoKCQkJCQkJCSp6dyoKencJCQlBZGQgd29yZCB1bmRlciB0aGUgY3Vyc29yIGFzIGEgd3JvbmcgKGJhZCkgd29yZCB0bwoJCQknc3BlbGxmaWxlJy4gIEluIFZpc3VhbCBtb2RlIHRoZSBzZWxlY3RlZCBjaGFyYWN0ZXJzCgkJCWFyZSBhZGRlZCBhcyBhIHdvcmQgKGluY2x1ZGluZyB3aGl0ZSBzcGFjZSEpLgoKCQkJCQkJCSo6c3BlKiAqOnNwZWxsZ29vZCoKOnNwZVtsbGdvb2RdIHt3b3JkfQlBZGQgW3dvcmR9IGFzIGEgZ29vZCB3b3JkIHRvICdzcGVsbGZpbGUnLgoKCQkJCQkJCSo6c3BlbGx3KiAqOnNwZWxsd3JvbmcqCjpzcGVsbHdbcm9uZ10ge3dvcmR9CUFkZCBbd29yZH0gYXMgYSB3cm9uZyAoYmFkKSB3b3JkIHRvICdzcGVsbGZpbGUnLgoKQWZ0ZXIgYWRkaW5nIGEgd29yZCB0byAnc3BlbGxmaWxlJyBpdHMgYXNzb2NpYXRlZCAiLnNwbCIgZmlsZSB3aWxsCmF1dG9tYXRpY2FsbHkgYmUgdXBkYXRlZC4gIE1vcmUgZGV0YWlscyBhYm91dCB0aGUgJ3NwZWxsZmlsZScgZm9ybWF0IGJlbG93CnxzcGVsbC13b3JkbGlzdC1mb3JtYXR8LgoKCkZpbmRpbmcgc3VnZ2VzdGlvbnMgZm9yIGJhZCB3b3JkczoKCgkJCQkJCQkqej8qCno/CQkJRm9yIHRoZSB3b3JkIHVuZGVyL2FmdGVyIHRoZSBjdXJzb3Igc3VnZ2VzdCBjb3JyZWN0bHkKCQkJc3BlbGxlZCB3b3Jkcy4gIFRoaXMgYWxzbyB3b3JrcyB0byBmaW5kIGFsdGVybmF0aXZlCgkJCWZvciB3b3JkcyB0aGF0IGFyZSBub3QgaGlnaGxpZ2h0ZWQgYXMgYmFkIHdvcmRzLgoJCQlUaGUgcmVzdWx0cyBhcmUgc29ydGVkIG9uIHNpbWlsYXJpdHkgdG8gdGhlIHdvcmQKCQkJdW5kZXIvYWZ0ZXIgdGhlIGN1cnNvci4KCQkJVGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZS4gIEhpdCBDVFJMLUMgd2hlbiB5b3UgYXJlCgkJCWJvcmVkLgoJCQlZb3UgY2FuIGVudGVyIHRoZSBudW1iZXIgb2YgeW91ciBjaG9pY2Ugb3IgcHJlc3MKCQkJPEVudGVyPiBpZiB5b3UgZG9uJ3Qgd2FudCB0byByZXBsYWNlLgoJCQlJZiAndmVyYm9zZScgaXMgbm9uLXplcm8gYSBzY29yZSB3aWxsIGJlIGRpc3BsYXllZCB0bwoJCQlpbmRpY2F0ZSB0aGUgbGlrZWxpbmVzcyB0byB0aGUgYmFkbHkgc3BlbGxlZCB3b3JkICh0aGUKCQkJaGlnaGVyIHRoZSBzY29yZSB0aGUgbW9yZSBkaWZmZXJlbnQpLgoJCQlXaGVuIGEgd29yZCB3YXMgcmVwbGFjZWQgdGhlIHJlZG8gY29tbWFuZCAiLiIgd2lsbAoJCQlyZXBlYXQgdGhlIHdvcmQgcmVwbGFjZW1lbnQuICBUaGlzIHdvcmtzIGxpa2UgImNpdyIsCgkJCXRoZSBnb29kIHdvcmQgYW5kIDxFc2M+LgoKVGhlICdzcGVsbHN1Z2dlc3QnIG9wdGlvbiBpbmZsdWVuY2VzIGhvdyB0aGUgbGlzdCBvZiBzdWdnZXN0aW9ucyBpcyBnZW5lcmF0ZWQKYW5kIHNvcnRlZC4gIFNlZSB8J3NwZWxsc3VnZ2VzdCd8LgoKClBFUkZPUk1BTkNFCgpOb3RlIHRoYXQgVmltIGRvZXMgb24tdGhlLWZseSBzcGVsbCBjaGVja2luZy4gIFRvIG1ha2UgdGhpcyB3b3JrIGZhc3QgdGhlCndvcmQgbGlzdCBpcyBsb2FkZWQgaW4gbWVtb3J5LiAgVGh1cyB0aGlzIHVzZXMgYSBsb3Qgb2YgbWVtb3J5ICgxIE1ieXRlIG9yCm1vcmUpLiAgVGhlcmUgbWlnaHQgYWxzbyBiZSBhIG5vdGljZWFibGUgZGVsYXkgd2hlbiB0aGUgd29yZCBsaXN0IGlzIGxvYWRlZCwKd2hpY2ggaGFwcGVucyB3aGVuICdzcGVsbCcgaXMgc2V0IGFuZCB3aGVuICdzcGVsbGxhbmcnIGlzIHNldCB3aGlsZSAnc3BlbGwnCndhcyBhbHJlYWR5IHNldC4gIEVhY2ggd29yZCBsaXN0IGlzIG9ubHkgbG9hZGVkIG9uY2UsIHRoZXkgYXJlIG5vdCBkZWxldGVkCndoZW4gJ3NwZWxsbGFuZycgaXMgbWFkZSBlbXB0eSBvciAnc3BlbGwnIGlzIHJlc2V0LiAgV2hlbiAnZW5jb2RpbmcnIGlzIHNldAphbGwgdGhlIHdvcmQgbGlzdHMgYXJlIHJlbG9hZGVkLCB0aHVzIHlvdSBtYXkgbm90aWNlIGEgZGVsYXkgdGhlbiB0b28uCgoKUkVHSU9OUwoKQSB3b3JkIG1heSBiZSBzcGVsbGVkIGRpZmZlcmVudGx5IGluIHZhcmlvdXMgcmVnaW9ucy4gIEZvciBleGFtcGxlLCBFbmdsaXNoCmNvbWVzIGluIChhdCBsZWFzdCkgdGhlc2UgdmFyaWFudHM6CgoJZW4JCWFsbCByZWdpb25zCgllbl9hdQkJQXVzdHJhbGlhCgllbl9jYQkJQ2FuYWRhCgllbl9nYgkJR3JlYXQgQnJpdGFpbgoJZW5fbnoJCU5ldyBaZWFsYW5kCgllbl91cwkJVVNBCgpXb3JkcyB0aGF0IGFyZSBub3QgdXNlZCBpbiBvbmUgcmVnaW9uIGJ1dCBhcmUgdXNlZCBpbiBhbm90aGVyIHJlZ2lvbiBhcmUKaGlnaGxpZ2h0ZWQgd2l0aCBTcGVsbExvY2FsIHxobC1TcGVsbExvY2FsfC4KCkFsd2F5cyB1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yIHRoZSBsYW5ndWFnZSBhbmQgcmVnaW9uIG5hbWVzLgoKV2hlbiBhZGRpbmcgYSB3b3JkIHdpdGggfHpnfCBvciBhbm90aGVyIGNvbW1hbmQgaXQncyBhbHdheXMgYWRkZWQgZm9yIGFsbApyZWdpb25zLiAgWW91IGNhbiBjaGFuZ2UgdGhhdCBieSBtYW51YWxseSBlZGl0aW5nIHRoZSAnc3BlbGxmaWxlJy4gIFNlZQp8c3BlbGwtd29yZGxpc3QtZm9ybWF0fC4KCgpTUEVMTCBGSUxFUwkJCQkJCSpzcGVsbC1sb2FkKgoKVmltIHNlYXJjaGVzIGZvciBzcGVsbCBmaWxlcyBpbiB0aGUgInNwZWxsIiBzdWJkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yaWVzIGluCidydW50aW1lcGF0aCcuICBUaGUgbmFtZSBpczogTEwuRUVFLnNwbCwgd2hlcmU6CglMTAl0aGUgbGFuZ3VhZ2UgbmFtZQoJRUVFCXRoZSB2YWx1ZSBvZiAnZW5jb2RpbmcnCgpUaGUgdmFsdWUgZm9yICJMTCIgY29tZXMgZnJvbSAnc3BlbGxsYW5nJywgYnV0IGV4Y2x1ZGVzIHRoZSByZWdpb24gbmFtZS4KRXhhbXBsZXM6Cgknc3BlbGxsYW5nJwlMTCB+Cgllbl91cwkJZW4KCWVuLXJhcmUJCWVuLXJhcmUKCW1lZGljYWxfY2EJbWVkaWNhbAoKT25seSB0aGUgZmlyc3QgZmlsZSBpcyBsb2FkZWQsIHRoZSBvbmUgdGhhdCBpcyBmaXJzdCBpbiAncnVudGltZXBhdGgnLiAgSWYKdGhpcyBzdWNjZWVkcyB0aGVuIGFkZGl0aW9uYWxseSBmaWxlcyB3aXRoIHRoZSBuYW1lIExMLkVFRS5hZGQuc3BsIGFyZSBsb2FkZWQuCkFsbCB0aGUgb25lcyB0aGF0IGFyZSBmb3VuZCBhcmUgdXNlZC4KCkFkZGl0aW9uYWxseSwgdGhlIGZpbGUgcmVsYXRlZCB0byAnc3BlbGxmaWxlJyBpcyBsb2FkZWQuICBUaGlzIGlzIHRoZSBmaWxlCnRoYXQgfHpnfCBhbmQgfHp3fCBhZGQgZ29vZCBhbmQgd3Jvbmcgd29yZHMgdG8uCgpFeGNlcHRpb25zOgotIFZpbSB1c2VzICJsYXRpbjEiIHdoZW4gJ2VuY29kaW5nJyBpcyAiaXNvLTg4NTktMTUiLiAgVGhlIGV1cm8gc2lnbiBkb2Vzbid0CiAgbWF0dGVyIGZvciBzcGVsbGluZy4KLSBXaGVuIG5vIHNwZWxsIGZpbGUgZm9yICdlbmNvZGluZycgaXMgZm91bmQgImFzY2lpIiBpcyB0cmllZC4gIFRoaXMgb25seQogIHdvcmtzIGZvciBsYW5ndWFnZXMgd2hlcmUgbmVhcmx5IGFsbCB3b3JkcyBhcmUgQVNDSUksIHN1Y2ggYXMgRW5nbGlzaC4gIEl0CiAgaGVscHMgd2hlbiAnZW5jb2RpbmcnIGlzIG5vdCAibGF0aW4xIiwgc3VjaCBhcyBpc28tODg1OS0yLCBhbmQgRW5nbGlzaCB0ZXh0CiAgaXMgYmVpbmcgZWRpdGVkLiAgRm9yIHRoZSAiLmFkZCIgZmlsZXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZm91bmQgbWFpbgogIHNwZWxsIGZpbGUgaXMgdXNlZC4KCkZvciBleGFtcGxlLCB3aXRoIHRoZXNlIHZhbHVlczoKCSdydW50aW1lcGF0aCcgaXMgIn4vLnZpbSwvdXNyL3NoYXJlL3ZpbTcwLH4vLnZpbS9hZnRlciIKCSdlbmNvZGluZycgICAgaXMgImlzby04ODU5LTIiCgknc3BlbGxsYW5nJyAgIGlzICJwbCIKClZpbSB3aWxsIGxvb2sgZm9yOgoxLiB+Ly52aW0vc3BlbGwvcGwuaXNvLTg4NTktMi5zcGwKMi4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5pc28tODg1OS0yLnNwbAozLiB+Ly52aW0vc3BlbGwvcGwuaXNvLTg4NTktMi5hZGQuc3BsCjQuIC91c3Ivc2hhcmUvdmltNzAvc3BlbGwvcGwuaXNvLTg4NTktMi5hZGQuc3BsCjUuIH4vLnZpbS9hZnRlci9zcGVsbC9wbC5pc28tODg1OS0yLmFkZC5zcGwKClRoaXMgYXNzdW1lcyAxLiBpcyBub3QgZm91bmQgYW5kIDIuIGlzIGZvdW5kLgoKSWYgJ2VuY29kaW5nJyBpcyAibGF0aW4xIiBWaW0gd2lsbCBsb29rIGZvcjoKMS4gfi8udmltL3NwZWxsL3BsLmxhdGluMS5zcGwKMi4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5sYXRpbjEuc3BsCjMuIH4vLnZpbS9hZnRlci9zcGVsbC9wbC5sYXRpbjEuc3BsCjQuIH4vLnZpbS9zcGVsbC9wbC5hc2NpaS5zcGwKNS4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5hc2NpaS5zcGwKNi4gfi8udmltL2FmdGVyL3NwZWxsL3BsLmFzY2lpLnNwbAoKVGhpcyBhc3N1bWVzIG5vbmUgb2YgdGhlbSBhcmUgZm91bmQgKFBvbGlzaCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2hlbiBsZWF2aW5nCm91dCB0aGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMpLgoKU3BlbGxpbmcgZm9yIEVCQ0RJQyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KCkEgc3BlbGwgZmlsZSBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50ICdlbmNvZGluZycuICBTZWUKfHNwZWxsLW1rc3BlbGx8IGFib3V0IGhvdyB0byBjcmVhdGUgYSBzcGVsbCBmaWxlLiAgQ29udmVydGluZyBhIHNwZWxsIGZpbGUKd2l0aCAiaWNvbnYiIHdpbGwgTk9UIHdvcmshCgoJCQkJCQkJKkU3NTgqICpFNzU5KgpXaGVuIGxvYWRpbmcgYSBzcGVsbCBmaWxlIFZpbSBjaGVja3MgdGhhdCBpdCBpcyBwcm9wZXJseSBmb3JtYXR0ZWQuICBJZiB5b3UKZ2V0IGFuIGVycm9yIHRoZSBmaWxlIG1heSBiZSB0cnVuY2F0ZWQsIG1vZGlmaWVkIG9yIGludGVuZGVkIGZvciBhbm90aGVyIFZpbQp2ZXJzaW9uLgoKCldPUkRTCgpWaW0gdXNlcyBhIGZpeGVkIG1ldGhvZCB0byByZWNvZ25pemUgYSB3b3JkLiAgVGhpcyBpcyBpbmRlcGVuZGVudCBvZgonaXNrZXl3b3JkJywgc28gdGhhdCBpdCBhbHNvIHdvcmtzIGluIGhlbHAgZmlsZXMgYW5kIGZvciBsYW5ndWFnZXMgdGhhdAppbmNsdWRlIGNoYXJhY3RlcnMgbGlrZSAnLScgaW4gJ2lza2V5d29yZCcuICBUaGUgd29yZCBjaGFyYWN0ZXJzIGRvIGRlcGVuZCBvbgonZW5jb2RpbmcnLgoKVGhlIHRhYmxlIHdpdGggd29yZCBjaGFyYWN0ZXJzIGlzIHN0b3JlZCBpbiB0aGUgbWFpbiAuc3BsIGZpbGUuICBUaGVyZWZvcmUgaXQKbWF0dGVycyB3aGF0IHRoZSBjdXJyZW50IGxvY2FsZSBpcyB3aGVuIGdlbmVyYXRpbmcgaXQhICBBIC5hZGQuc3BsIGZpbGUgZG9lcwpub3QgY29udGFpbiBhIHdvcmQgdGFibGUuCgpBIHdvcmQgdGhhdCBzdGFydHMgd2l0aCBhIGRpZ2l0IGlzIGFsd2F5cyBpZ25vcmVkLiAgVGhhdCBpbmNsdWRlcyBoZXggbnVtYmVycwppbiB0aGUgZm9ybSAweGZmIGFuZCAwWEZGLgoKCldPUkQgQ09NQklOQVRJT05TCgpJdCBpcyBwb3NzaWJsZSB0byBzcGVsbC1jaGVjayB3b3JkcyB0aGF0IGluY2x1ZGUgYSBzcGFjZS4gIFRoaXMgaXMgdXNlZCB0bwpyZWNvZ25pemUgd29yZHMgdGhhdCBhcmUgaW52YWxpZCB3aGVuIHVzZWQgYnkgdGhlbXNlbHZlcywgZS5nLiBmb3IgImV0IGFsLiIuCkl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVjb2duaXplICJ0aGUgdGhlIiBhbmQgaGlnaGxpZ2h0IGl0LgoKVGhlIG51bWJlciBvZiBzcGFjZXMgaXMgaXJyZWxldmFudC4gIEluIG1vc3QgY2FzZXMgYSBsaW5lIGJyZWFrIG1heSBhbHNvCmFwcGVhci4gIEhvd2V2ZXIsIHRoaXMgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZpbmQgb3V0IHdoZXJlIHRvIHN0YXJ0IGNoZWNraW5nCmZvciBzcGVsbGluZyBtaXN0YWtlcy4gIFdoZW4geW91IG1ha2UgYSBjaGFuZ2UgdG8gb25lIGxpbmUgYW5kIG9ubHkgdGhhdCBsaW5lCmlzIHJlZHJhd24gVmltIHdvbid0IGxvb2sgaW4gdGhlIHByZXZpb3VzIGxpbmUsIHRodXMgd2hlbiAiZXQiIGlzIGF0IHRoZSBlbmQKb2YgdGhlIHByZXZpb3VzIGxpbmUgImFsLiIgd2lsbCBiZSBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgQW5kIHdoZW4geW91IHR5cGUKInRoZTxDUj50aGUiIHRoZSBoaWdobGlnaHRpbmcgZG9lc24ndCBhcHBlYXIgdW50aWwgdGhlIGZpcnN0IGxpbmUgaXMgcmVkcmF3bi4KVXNlIHxDVFJMLUx8IHRvIHJlZHJhdyByaWdodCBhd2F5LiAgIltzIiB3aWxsIGFsc28gc3RvcCBhdCBhIHdvcmQgY29tYmluYXRpb24Kd2l0aCBhIGxpbmUgYnJlYWsuCgpXaGVuIGVuY291bnRlcmluZyBhIGxpbmUgYnJlYWsgVmltIHNraXBzIGNoYXJhY3RlcnMgc3VjaCBhcyAnKicsICc+JyBhbmQgJyInLApzbyB0aGF0IGNvbW1lbnRzIGluIEMsIHNoZWxsIGFuZCBWaW0gY29kZSBjYW4gYmUgc3BlbGwgY2hlY2tlZC4KCgpTWU5UQVggSElHSExJR0hUSU5HCQkJCQkqc3BlbGwtc3ludGF4KgoKRmlsZXMgdGhhdCB1c2Ugc3ludGF4IGhpZ2hsaWdodGluZyBjYW4gc3BlY2lmeSB3aGVyZSBzcGVsbCBjaGVja2luZyBzaG91bGQgYmUKZG9uZToKCjEuICBldmVyeXdoZXJlCQkJICAgZGVmYXVsdAoyLiAgaW4gc3BlY2lmaWMgaXRlbXMJCSAgIHVzZSAiY29udGFpbnM9QFNwZWxsIgozLiAgZXZlcnl3aGVyZSBidXQgc3BlY2lmaWMgaXRlbXMgIHVzZSAiY29udGFpbnM9QE5vU3BlbGwiCgpGb3IgdGhlIHNlY29uZCBtZXRob2QgYWRkaW5nIHRoZSBATm9TcGVsbCBjbHVzdGVyIHdpbGwgZGlzYWJsZSBzcGVsbCBjaGVja2luZwphZ2Fpbi4gIFRoaXMgY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhZGQgQFNwZWxsIHRvIHRoZSBjb21tZW50cyBvZiBhCnByb2dyYW0sIGFuZCBhZGQgQE5vU3BlbGwgZm9yIGl0ZW1zIHRoYXQgc2hvdWxkbid0IGJlIGNoZWNrZWQuCgoKVklNIFNDUklQVFMKCklmIHlvdSB3YW50IHRvIHdyaXRlIGEgVmltIHNjcmlwdCB0aGF0IGRvZXMgc29tZXRoaW5nIHdpdGggc3BlbGxpbmcsIHlvdSBtYXkKZmluZCB0aGVzZSBmdW5jdGlvbnMgdXNlZnVsOgoKICAgIHNwZWxsYmFkd29yZCgpCWZpbmQgYmFkbHkgc3BlbGxlZCB3b3JkIGF0IHRoZSBjdXJzb3IKICAgIHNwZWxsc3VnZ2VzdCgpCWdldCBsaXN0IG9mIHNwZWxsaW5nIHN1Z2dlc3Rpb25zCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gR2VuZXJhdGluZyBhIHNwZWxsIGZpbGUJCQkJKnNwZWxsLW1rc3BlbGwqCgpWaW0gdXNlcyBhIGJpbmFyeSBmaWxlIGZvcm1hdCBmb3Igc3BlbGxpbmcuICBUaGlzIGdyZWF0bHkgc3BlZWRzIHVwIGxvYWRpbmcKdGhlIHdvcmQgbGlzdCBhbmQga2VlcHMgaXQgc21hbGwuCgpZb3UgY2FuIGNyZWF0ZSBhIFZpbSBzcGVsbCBmaWxlIGZyb20gdGhlIC5hZmYgYW5kIC5kaWMgZmlsZXMgdGhhdCBNeXNwZWxsCnVzZXMuICBNeXNwZWxsIGlzIHVzZWQgYnkgT3Blbk9mZmljZS5vcmcgYW5kIE1vemlsbGEuICBZb3Ugc2hvdWxkIGJlIGFibGUgdG8KZmluZCB0aGVtIGhlcmU6CglodHRwOi8vbGluZ3Vjb21wb25lbnQub3Blbm9mZmljZS5vcmcvc3BlbGxfZGljLmh0bWwKWW91IGNhbiBhbHNvIHVzZSBhIHBsYWluIHdvcmQgbGlzdC4gIFRoZSByZXN1bHRzIGFyZSB0aGUgc2FtZSwgdGhlIGNob2ljZQpkZXBlbmRzIG9uIHdoYXQgeW91IGZpbmQuCgpNYWtlIHN1cmUgeW91ciBjdXJyZW50IGxvY2FsZSBpcyBzZXQgcHJvcGVybHksIG90aGVyd2lzZSBWaW0gZG9lc24ndCBrbm93IHdoYXQKY2hhcmFjdGVycyBhcmUgdXBwZXIvbG93ZXIgY2FzZSBsZXR0ZXJzLiAgSWYgdGhlIGxvY2FsZSBpc24ndCBhdmFpbGFibGUgKGUuZy4sCndoZW4gdXNpbmcgYW4gTVMtV2luZG93cyBjb2RlcGFnZSBvbiBVbml4KSBhZGQgdGFibGVzIHRvIHRoZSAuYWZmIGZpbGUKfHNwZWxsLWFmZml4LWNoYXJzfC4gIElmIHRoZSAuYWZmIGZpbGUgZG9lc24ndCBkZWZpbmUgYSB0YWJsZSB0aGVuIHRoZSB3b3JkCnRhYmxlIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNwZWxsaW5nIGlzIHVzZWQuICBJZiBzcGVsbGluZyBpcyBub3QgYWN0aXZlCnRoZW4gVmltIHdpbGwgdHJ5IHRvIGd1ZXNzLgoKCQkJCQkJCSo6bWtzcCogKjpta3NwZWxsKgo6bWtzcFtlbGxdWyFdIFstYXNjaWldIHtvdXRuYW1lfSB7aW5uYW1lfSAuLi4KCQkJR2VuZXJhdGUgYSBWaW0gc3BlbGwgZmlsZSB3b3JkIGxpc3RzLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIG5sIG5sX05MLndvcmRzCjwJCQkJCQkJCSpFNzUxKgoJCQlXaGVuIHtvdXRuYW1lfSBlbmRzIGluICIuc3BsIiBpdCBpcyB1c2VkIGFzIHRoZSBvdXRwdXQKCQkJZmlsZSBuYW1lLiAgT3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBhIGxhbmd1YWdlIG5hbWUsCgkJCXN1Y2ggYXMgImVuIiwgd2l0aG91dCB0aGUgcmVnaW9uIG5hbWUuICBUaGUgZmlsZQoJCQl3cml0dGVuIHdpbGwgYmUgIntvdXRuYW1lfS57ZW5jb2Rpbmd9LnNwbCIsIHdoZXJlCgkJCXtlbmNvZGluZ30gaXMgdGhlIHZhbHVlIG9mIHRoZSAnZW5jb2RpbmcnIG9wdGlvbi4KCgkJCVdoZW4gdGhlIG91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzIFshXSBtdXN0IGJlIGFkZGVkCgkJCXRvIG92ZXJ3cml0ZSBpdC4KCgkJCVdoZW4gdGhlIFstYXNjaWldIGFyZ3VtZW50IGlzIHByZXNlbnQsIHdvcmRzIHdpdGgKCQkJbm9uLWFzY2lpIGNoYXJhY3RlcnMgYXJlIHNraXBwZWQuICBUaGUgcmVzdWx0aW5nIGZpbGUKCQkJZW5kcyBpbiAiYXNjaWkuc3BsIi4KCgkJCVRoZSBpbnB1dCBjYW4gYmUgdGhlIE15c3BlbGwgZm9ybWF0IGZpbGVzIHtpbm5hbWV9LmFmZgoJCQlhbmQge2lubmFtZX0uZGljLiAgSWYge2lubmFtZX0uYWZmIGRvZXMgbm90IGV4aXN0IHRoZW4KCQkJe2lubmFtZX0gaXMgdXNlZCBhcyB0aGUgZmlsZSBuYW1lIG9mIGEgcGxhaW4gd29yZAoJCQlsaXN0LgoKCQkJTXVsdGlwbGUge2lubmFtZX0gYXJndW1lbnRzIGNhbiBiZSBnaXZlbiB0byBjb21iaW5lCgkJCXJlZ2lvbnMgaW50byBvbmUgVmltIHNwZWxsIGZpbGUuICBFeGFtcGxlOiA+CgkJOm1rc3BlbGwgfi8udmltL3NwZWxsL2VuIC90bXAvZW5fVVMgL3RtcC9lbl9DQSAvdG1wL2VuX0FVCjwJCQlUaGlzIGNvbWJpbmVzIHRoZSBFbmdsaXNoIHdvcmQgbGlzdHMgZm9yIFVTLCBDQSBhbmQgQVUKCQkJaW50byBvbmUgZW4uc3BsIGZpbGUuCgkJCVVwIHRvIGVpZ2h0IHJlZ2lvbnMgY2FuIGJlIGNvbWJpbmVkLiAqRTc1NCogKjc1NSoKCQkJVGhlIFJFUCBhbmQgU0FMIGl0ZW1zIG9mIHRoZSBmaXJzdCAuYWZmIGZpbGUgd2hlcmUKCQkJdGhleSBhcHBlYXIgYXJlIHVzZWQuIHxzcGVsbC1hZmZpeC1SRVB8CgkJCXxzcGVsbC1hZmZpeC1TQUx8CgoJCQlUaGlzIGNvbW1hbmQgdXNlcyBhIGxvdCBvZiBtZW1vcnksIHJlcXVpcmVkIHRvIGZpbmQKCQkJdGhlIG9wdGltYWwgd29yZCB0cmVlIChQb2xpc2ggcmVxdWlyZXMgYSBmZXcgaHVuZHJlZAoJCQlNYnl0ZSkuICBUaGUgZmluYWwgcmVzdWx0IHdpbGwgYmUgbXVjaCBzbWFsbGVyLgoKCQkJV2hlbiB0aGUgc3BlbGwgZmlsZSB3YXMgd3JpdHRlbiBhbGwgY3VycmVudGx5IHVzZWQKCQkJc3BlbGwgZmlsZXMgd2lsbCBiZSByZWxvYWRlZC4KCjpta3NwW2VsbF0gWy1hc2NpaV0ge2FkZC1uYW1lfQoJCQlMaWtlICI6bWtzcGVsbCIgYWJvdmUsIHVzaW5nIHthZGQtbmFtZX0gYXMgdGhlIGlucHV0CgkJCWZpbGUgYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSB0aGF0IGhhcyAiLnNwbCIKCQkJYXBwZW5kZWQuCgpTaW5jZSB5b3UgbWlnaHQgd2FudCB0byBjaGFuZ2UgYSBNeXNwZWxsIHdvcmQgbGlzdCBmb3IgdXNlIHdpdGggVmltIHRoZQpmb2xsb3dpbmcgcHJvY2VkdXJlIGlzIHJlY29tbWVuZGVkOgoKMS4gT2J0YWluIHRoZSB4eF9ZWS5hZmYgYW5kIHh4X1lZLmRpYyBmaWxlcyBmcm9tIE15c3BlbGwuCjIuIE1ha2UgYSBjb3B5IG9mIHRoZXNlIGZpbGVzIHRvIHh4X1lZLm9yaWcuYWZmIGFuZCB4eF9ZWS5vcmlnLmRpYy4KMy4gQ2hhbmdlIHRoZSB4eF9ZWS5hZmYgYW5kIHh4X1lZLmRpYyBmaWxlcyB0byByZW1vdmUgYmFkIHdvcmRzLCBhZGQgbWlzc2luZwogICB3b3JkcywgZGVmaW5lIHdvcmQgY2hhcmFjdGVycyB3aXRoIEZPTC9MT1cvVVBQLCBldGMuICBUaGUgZGlzdHJpYnV0ZWQKICAgInNyYy9zcGVsbC8qLmRpZmYiIGZpbGVzIGNhbiBiZSB1c2VkLgo0LiBTZXQgJ2VuY29kaW5nJyB0byB0aGUgZGVzaXJlZCBlbmNvZGluZyBhbmQgdXNlIHw6bWtzcGVsbHwgdG8gZ2VuZXJhdGUgdGhlCiAgIFZpbSBzcGVsbCBmaWxlLgo1LiBUcnkgb3V0IHRoZSBzcGVsbCBmaWxlIHdpdGggIjpzZXQgc3BlbGwgc3BlbGxsYW5nPXh4X1lZIi4KCldoZW4gdGhlIE15c3BlbGwgZmlsZXMgYXJlIHVwZGF0ZWQgeW91IGNhbiBtZXJnZSB0aGUgZGlmZmVyZW5jZXM6CjEuIE9idGFpbiB0aGUgbmV3IE15c3BlbGwgZmlsZXMgYXMgeHhfWVkubmV3LmFmZiBhbmQgeHhfVVUubmV3LmRpYy4KMi4gVXNlIFZpbWRpZmYgdG8gc2VlIHdoYXQgY2hhbmdlZDogPgoJdmltZGlmZiB4eF9ZWS5vcmlnLmRpYyB4eF9ZWS5uZXcuZGljCjMuIFRha2Ugb3ZlciB0aGUgY2hhbmdlcyB5b3UgbGlrZSBpbiB4eF9ZWS5kaWMuCiAgIFlvdSBtYXkgYWxzbyBuZWVkIHRvIGNoYW5nZSB4eF9ZWS5hZmYuCjQuIFJlbmFtZSB4eF9ZWS5uZXcuZGljIHRvIHh4X1lZLm9yaWcuZGljIGFuZCB4eF9ZWS5uZXcuYWZmIHRvIHh4X1lZLm5ldy5hZmYuCgoKU1BFTEwgRklMRSBEVU1QCgpJZiBmb3Igc29tZSByZWFzb24geW91IHdhbnQgdG8gY2hlY2sgd2hhdCB3b3JkcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50bHkKdXNlZCBzcGVsbGluZyBmaWxlcywgdXNlIHRoaXMgY29tbWFuZDoKCgkJCQkJCQkqOnNwZWxsZHVtcCogKjpzcGVsbGQqCjpzcGVsbGRbdW1wXQkJT3BlbiBhIG5ldyB3aW5kb3cgYW5kIGZpbGwgaXQgd2l0aCBhbGwgY3VycmVudGx5IHZhbGlkCgkJCXdvcmRzLgoJCQlOb3RlOiBGb3Igc29tZSBsYW5ndWFnZXMgdGhlIHJlc3VsdCBtYXkgYmUgaHVnZSBhbmQKCQkJVmltIG1heSBydW4gb3V0IG9mIG1lbW9yeS4KClRoZSBmb3JtYXQgb2YgdGhlIHdvcmQgbGlzdCBpcyB1c2VkIHxzcGVsbC13b3JkbGlzdC1mb3JtYXR8LiAgWW91IHNob3VsZCBiZQphYmxlIHRvIHJlYWQgaXQgd2l0aCAiOm1rc3BlbGwiIHRvIGdlbmVyYXRlIG9uZSAuc3BsIGZpbGUgdGhhdCBpbmNsdWRlcyBhbGwKdGhlIHdvcmRzLgoKT25seSB3b3JkcyBmb3IgdGhlIGN1cnJlbnQgcmVnaW9uIGFyZSBpbmNsdWRlZC4gIE5vICIvcmVnaW9ucyIgbGluZSBpcwpnZW5lcmF0ZWQuCgpDb21tZW50IGxpbmVzIGFyZSB1c2VkIHRvIGluZGljYXRlIHdoaWNoIC5zcGwgZmlsZSB0aGUgd29yZHMgY2FtZSBmcm9tLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFNwZWxsIGZpbGUgZm9ybWF0CQkJCQkqc3BlbGwtZmlsZS1mb3JtYXQqCgpUaGlzIGlzIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGVzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIHBlcnNvbiB3aG8gY3JlYXRlcyBhbmQKbWFpbnRhaW5zIGEgd29yZCBsaXN0LgoKTm90ZSB0aGF0IHdlIGF2b2lkIHRoZSB3b3JkICJkaWN0aW9uYXJ5IiBoZXJlLiAgVGhhdCBpcyBiZWNhdXNlIHRoZSBnb2FsIG9mCnNwZWxsIGNoZWNraW5nIGRpZmZlcnMgZnJvbSB3cml0aW5nIGEgZGljdGlvbmFyeSAoYXMgaW4gdGhlIGJvb2spLiAgRm9yCnNwZWxsaW5nIHdlIG5lZWQgYSBsaXN0IG9mIHdvcmRzIHRoYXQgYXJlIE9LLCB0aHVzIG5lZWQgbm90IHRvIGJlIGhpZ2hsaWdodGVkLgpOYW1lcyB3aWxsIG5vdCBhcHBlYXIgaW4gYSBkaWN0aW9uYXJ5LCBidXQgZG8gYXBwZWFyIGluIGEgd29yZCBsaXN0LiAgQW5kCnNvbWUgb2xkIHdvcmRzIGFyZSByYXJlbHkgdXNlZCBhbmQgYXJlIGNvbW1vbiBtaXNzcGVsbGluZ3MuICBUaGVzZSBkbyBhcHBlYXIKaW4gYSBkaWN0aW9uYXJ5IGJ1dCBub3QgaW4gYSB3b3JkIGxpc3QuCgpUaGVyZSBhcmUgdHdvIGZvcm1hdHM6IG9uZSB3aXRoIGFmZml4IGNvbXByZXNzaW9uIGFuZCBvbmUgd2l0aG91dC4gIFRoZSBmaWxlcwp3aXRoIGFmZml4IGNvbXByZXNzaW9uIGFyZSB1c2VkIGJ5IE15c3BlbGwgKE1vemlsbGEgYW5kIE9wZW5PZmZpY2Uub3JnKS4gIFRoaXMKcmVxdWlyZXMgdHdvIGZpbGVzLCBvbmUgd2l0aCAuYWZmIGFuZCBvbmUgd2l0aCAuZGljIGV4dGVuc2lvbi4gIFRoZSBzZWNvbmQKZm9ybWF0IGlzIGEgbGlzdCBvZiB3b3Jkcy4KCgpGT1JNQVQgT0YgV09SRCBMSVNUCQkJCSpzcGVsbC13b3JkbGlzdC1mb3JtYXQqCgpUaGUgd29yZHMgbXVzdCBhcHBlYXIgb25lIHBlciBsaW5lLiAgVGhhdCBpcyBhbGwgdGhhdCBpcyByZXF1aXJlZC4KQWRkaXRpb25hbGx5IHRoZSBmb2xsb3dpbmcgaXRlbXMgYXJlIHJlY29nbml6ZWQ6Ci0gRW1wdHkgYW5kIGJsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLgotIExpbmVzIHN0YXJ0aW5nIHdpdGggYSAjIGFyZSBpZ25vcmVkIChjb21tZW50IGxpbmVzKS4KLSBBIGxpbmUgc3RhcnRpbmcgd2l0aCAiL2VuY29kaW5nPSIsIGJlZm9yZSBhbnkgd29yZCwgc3BlY2lmaWVzIHRoZSBlbmNvZGluZwogIG9mIHRoZSBmaWxlLiAgQWZ0ZXIgdGhlIHNlY29uZCAnPScgY29tZXMgYW4gZW5jb2RpbmcgbmFtZS4gIFRoaXMgdGVsbHMgVmltCiAgdG8gc2V0dXAgY29udmVyc2lvbiBmcm9tIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgdG8gJ2VuY29kaW5nJy4KLSBBIGxpbmUgc3RhcnRpbmcgd2l0aCAiL3JlZ2lvbnM9IiBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBuYW1lcyB0aGF0IGFyZQogIHN1cHBvcnRlZC4gIEVhY2ggcmVnaW9uIG5hbWUgbXVzdCBiZSB0d28gQVNDSUkgbGV0dGVycy4gIFRoZSBmaXJzdCBvbmUgaXMKICByZWdpb24gMS4gIFRodXMgIi9yZWdpb25zPXVzY2EiIGhhcyByZWdpb24gMSAidXMiIGFuZCByZWdpb24gMiAiY2EiLgogIEluIGFuIGFkZGl0aW9uIHdvcmQgbGlzdCB0aGUgbGlzdCBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIG1haW4gd29yZCBsaXN0IQotIEEgbGluZSBzdGFydGluZyB3aXRoICIvPyIgc3BlY2lmaWVzIGEgd29yZCB0aGF0IHNob3VsZCBiZSBtYXJrZWQgYXMgcmFyZS4KLSBBIGxpbmUgc3RhcnRpbmcgd2l0aCAiLyEiIHNwZWNpZmllcyBhIHdvcmQgdGhhdCBzaG91bGQgYmUgbWFya2VkIGFzIGJhZC4KLSBBIGxpbmUgc3RhcnRpbmcgd2l0aCAiLz0iIHNwZWNpZmllcyBhIHdvcmQgd2hlcmUgY2FzZSBtdXN0IG1hdGNoIGV4YWN0bHkuCiAgQSAiPyIgb3IgIiEiIG1heSBiZSBmb2xsb3dpbmc6ICIvPT8iIGFuZCAiLz0hIi4KLSBEaWdpdHMgYWZ0ZXIgIi8iIGluZGljYXRlIHRoZSByZWdpb25zIGluIHdoaWNoIHRoZSB3b3JkIGlzIHZhbGlkLiAgSWYgbm8KICByZWdpb25zIGFyZSBzcGVjaWZpZWQgdGhlIHdvcmQgaXMgdmFsaWQgaW4gYWxsIHJlZ2lvbnMuCi0gT3RoZXIgbGluZXMgc3RhcnRpbmcgd2l0aCAnLycgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAgVGhlIG9uZXMgdGhhdAogIGFyZSBub3QgcmVjb2duaXplZCBhcmUgaWdub3JlZCAoYnV0IHlvdSBkbyBnZXQgYSB3YXJuaW5nIG1lc3NhZ2UpLgoKRXhhbXBsZToKCgkjIFRoaXMgaXMgYW4gZXhhbXBsZSB3b3JkIGxpc3QJCWNvbW1lbnQKCS9lbmNvZGluZz1sYXRpbjEJCQllbmNvZGluZyBvZiB0aGUgZmlsZQoJL3JlZ2lvbnM9dXNjYWdiCQkJCXJlZ2lvbnMgInVzIiwgImNhIiBhbmQgImdiIgoJZXhhbXBsZQkJCQkJd29yZCBmb3IgYWxsIHJlZ2lvbnMKCS8xYmxhaAkJCQkJd29yZCBmb3IgcmVnaW9uIDEgInVzIgoJLyF2aW0JCQkJCWJhZCB3b3JkCgkvPzNDYW1wYmVsbAkJCQlyYXJlIHdvcmQgaW4gcmVnaW9uIDMgImdiIgoJLz0ncyBtb3JuaW5ncwkJCQlrZWVwLWNhc2Ugd29yZAoKCkZPUk1BVCBXSVRIIEFGRklYIENPTVBSRVNTSU9OCgpUaGVyZSBhcmUgdHdvIGZpbGVzOiB0aGUgYmFzaWMgd29yZCBsaXN0IGFuZCBhbiBhZmZpeCBmaWxlLiAgVGhlIGFmZml4ZXMgYXJlCnVzZWQgdG8gbW9kaWZ5IHRoZSBiYXNpYyB3b3JkcyB0byBnZXQgdGhlIGZ1bGwgd29yZCBsaXN0LiAgVGhpcyBzaWduaWZpY2FudGx5CnJlZHVjZXMgdGhlIG51bWJlciBvZiB3b3JkcywgZXNwZWNpYWxseSBmb3IgYSBsYW5ndWFnZSBsaWtlIFBvbGlzaC4gIFRoaXMgaXMKY2FsbGVkIGFmZml4IGNvbXByZXNzaW9uLgoKVGhlIGZvcm1hdCBmb3IgdGhlIGFmZml4IGFuZCB3b3JkIGxpc3QgZmlsZXMgaXMgbW9zdGx5IGlkZW50aWNhbCB0byB3aGF0Ck15c3BlbGwgdXNlcyAodGhlIHNwZWxsIGNoZWNrZXIgb2YgTW96aWxsYSBhbmQgT3Blbk9mZmljZS5vcmcpLiAgQSBkZXNjcmlwdGlvbgpjYW4gYmUgZm91bmQgaGVyZToKCWh0dHA6Ly9saW5ndWNvbXBvbmVudC5vcGVub2ZmaWNlLm9yZy9hZmZpeC5yZWFkbWUgfgpOb3RlIHRoYXQgYWZmaXhlcyBhcmUgY2FzZSBzZW5zaXRpdmUsIHRoaXMgaXNuJ3Qgb2J2aW91cyBmcm9tIHRoZSBkZXNjcmlwdGlvbi4KClZpbSBzdXBwb3J0cyBhIGZldyBleHRyYXMuICBIb3BlZnVsbHkgTXlzcGVsbCB3aWxsIHN1cHBvcnQgdGhlc2UgdG9vIHNvbWUgZGF5LgpTZWUgfHNwZWxsLWFmZml4LXZpbXwuCgpUaGUgYmFzaWMgd29yZCBsaXN0IGFuZCB0aGUgYWZmaXggZmlsZSBhcmUgY29tYmluZWQgYW5kIHR1cm5lZCBpbnRvIGEgYmluYXJ5CnNwZWxsIGZpbGUuICBBbGwgdGhlIHByZXByb2Nlc3NpbmcgaGFzIGJlZW4gZG9uZSwgdGh1cyB0aGlzIGZpbGUgbG9hZHMgZmFzdC4KVGhlIGJpbmFyeSBzcGVsbCBmaWxlIGZvcm1hdCBpcyBkZXNjcmliZWQgaW4gdGhlIHNvdXJjZSBjb2RlIChzcmMvc3BlbGwuYykuCkJ1dCBvbmx5IGRldmVsb3BlcnMgbmVlZCB0byBrbm93IGFib3V0IGl0LgoKVGhlIHByZXByb2Nlc3NpbmcgYWxzbyBhbGxvd3MgdXMgdG8gdGFrZSB0aGUgTXlzcGVsbCBsYW5ndWFnZSBmaWxlcyBhbmQgbW9kaWZ5CnRoZW0gYmVmb3JlIHRoZSBWaW0gd29yZCBsaXN0IGlzIG1hZGUuICBUaGUgdG9vbHMgZm9yIHRoaXMgY2FuIGJlIGZvdW5kIGluIHRoZQoic3JjL3NwZWxsIiBkaXJlY3RvcnkuCgoKV09SRCBMSVNUIEZPUk1BVAkJCQkqc3BlbGwtZGljLWZvcm1hdCoKCkEgdmVyeSBzaG9ydCBleGFtcGxlLCB3aXRoIGxpbmUgbnVtYmVyczoKCgkxCTEyMzQKCTIJYWFuCgkzCUFscwoJNAlFdHRlbi1MZXVyCgk1CWV0IGFsLgoJNgkncy1HcmF2ZW5oYWdlCgk3CSdzLUdyYXZlbmhhYWdzCgk4CWJlZGVsL1AKCTkJa2Fkby8xCgkxMAljYWRlYXUvMgoKVGhlIGZpcnN0IGxpbmUgY29udGFpbnMgdGhlIG51bWJlciBvZiB3b3Jkcy4gIFZpbSBpZ25vcmVzIGl0LCBidXQgeW91IGRvIGdldAphbiBlcnJvciBtZXNzYWdlIGlmIGl0J3Mgbm90IHRoZXJlLiAgKkU3NjAqCgpXaGF0IGZvbGxvd3MgaXMgb25lIHdvcmQgcGVyIGxpbmUuICBUaGVyZSBzaG91bGQgYmUgbm8gd2hpdGUgc3BhY2UgYmVmb3JlIG9yCmFmdGVyIHRoZSB3b3JkLgoKV2hlbiB0aGUgd29yZCBvbmx5IGhhcyBsb3dlci1jYXNlIGxldHRlcnMgaXQgd2lsbCBhbHNvIG1hdGNoIHdpdGggdGhlIHdvcmQKc3RhcnRpbmcgd2l0aCBhbiB1cHBlci1jYXNlIGxldHRlci4KCldoZW4gdGhlIHdvcmQgaW5jbHVkZXMgYW4gdXBwZXItY2FzZSBsZXR0ZXIsIHRoaXMgbWVhbnMgdGhlIHVwcGVyLWNhc2UgbGV0dGVyCmlzIHJlcXVpcmVkIGF0IHRoaXMgcG9zaXRpb24uICBUaGUgc2FtZSB3b3JkIHdpdGggYSBsb3dlci1jYXNlIGxldHRlciBhdCB0aGlzCnBvc2l0aW9uIHdpbGwgbm90IG1hdGNoLiBXaGVuIHNvbWUgb2YgdGhlIG90aGVyIGxldHRlcnMgYXJlIHVwcGVyLWNhc2UgaXQgd2lsbApub3QgbWF0Y2ggZWl0aGVyLgoKVGhlIHNhbWUgd29yZCB3aXRoIGFsbCB1cHBlci1jYXNlIGNoYXJhY3RlcnMgd2lsbCBhbHdheXMgYmUgT0suCgoJd29yZCBsaXN0CW1hdGNoZXMJCQlkb2VzIG5vdCBtYXRjaCB+CglhbHMJCWFscyBBbHMgQUxTCQlBTHMgQWxTIGFMcyBhTFMKCUFscwkJQWxzICBBTFMJCWFscyBBTHMgQWxTIGFMcyBhTFMKCUFMUwkJQUxTCQkJYWxzIEFscyBBTHMgQWxTIGFMcyBhTFMKCUFsUwkJQWxTIEFMUwkJCWFscyBBbHMgQUxzIGFMcyBhTFMKClRoZSBLRVAgYWZmaXggSUQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmaWNhbGx5IG1hdGNoIGEgd29yZCB3aXRoIGlkZW50aWNhbCBjYXNlCm9ubHksIHNlZSBiZWxvdyB8c3BlbGwtYWZmaXgtS0VQfC4KCk5vdGUgaW4gbGluZSA1IHRvIDcgdGhhdCBub24td29yZCBjaGFyYWN0ZXJzIGFyZSB1c2VkLiAgWW91IGNhbiBpbmNsdWRlCmFueSBjaGFyYWN0ZXIgaW4gYSB3b3JkLiAgV2hlbiBjaGVja2luZyB0aGUgdGV4dCBhIHdvcmQgc3RpbGwgb25seSBtYXRjaGVzCndoZW4gaXQgYXBwZWFycyB3aXRoIGEgbm9uLXdvcmQgY2hhcmFjdGVyIGJlZm9yZSBhbmQgYWZ0ZXIgaXQuICBGb3IgTXlzcGVsbCBhCndvcmQgc3RhcnRpbmcgd2l0aCBhIG5vbi13b3JkIGNoYXJhY3RlciBwcm9iYWJseSB3b24ndCB3b3JrLgoKQWZ0ZXIgdGhlIHdvcmQgdGhlcmUgaXMgYW4gb3B0aW9uYWwgc2xhc2ggYW5kIGZsYWdzLiAgTW9zdCBvZiB0aGVzZSBmbGFncyBhcmUKbGV0dGVycyB0aGF0IGluZGljYXRlIHRoZSBhZmZpeGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGlzIHdvcmQuCgoJCQkJCQkJKnNwZWxsLWFmZml4LXZpbSoKQSBmbGFnIHRoYXQgVmltIGFkZHMgYW5kIGlzIG5vdCBpbiBNeXNwZWxsIGlzIHRoZSBmbGFnIGRlZmluZWQgd2l0aCBLRVAgaW4gdGhlCmFmZml4IGZpbGUuICBUaGlzIGhhcyB0aGUgbWVhbmluZyB0aGF0IGNhc2UgbWF0dGVycy4gIFRoaXMgY2FuIGJlIHVzZWQgaWYgdGhlCndvcmQgZG9lcyBub3QgaGF2ZSB0aGUgZmlyc3QgbGV0dGVyIGluIHVwcGVyIGNhc2UgYXQgdGhlIHN0YXJ0IG9mIGEgc2VudGVuY2UuCkV4YW1wbGUgKGFzc3VtaW5nIHRoYXQgPSB3YXMgdXNlZCBmb3IgS0VQKToKCgl3b3JkIGxpc3QJbWF0Y2hlcwkJCWRvZXMgbm90IG1hdGNoIH4KCSdzIG1vcmdlbnMvPQkncyBtb3JnZW5zCQknUyBtb3JnZW5zICdzIE1vcmdlbnMKCSdzIE1vcmdlbnMJJ3MgTW9yZ2VucwkJJ1MgbW9yZ2VucyAncyBtb3JnZW5zCgoJCQkJCQkJKnNwZWxsLWFmZml4LW1ieXRlKgpUaGUgYmFzaWMgd29yZCBsaXN0IGlzIG5vcm1hbGx5IGluIGFuIDgtYml0IGVuY29kaW5nLCB3aGljaCBpcyBtZW50aW9uZWQgaW4KdGhlIGFmZml4IGZpbGUuICBUaGUgYWZmaXggZmlsZSBtdXN0IGFsd2F5cyBiZSBpbiB0aGUgc2FtZSBlbmNvZGluZyBhcyB0aGUKd29yZCBsaXN0LiAgVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggTXlzcGVsbC4gIEZvciBWaW0gdGhlIGVuY29kaW5nIG1heSBhbHNvIGJlCnNvbWV0aGluZyBlbHNlLCBhbnkgZW5jb2RpbmcgdGhhdCAiaWNvbnYiIHN1cHBvcnRzLiAgVGhlICJTRVQiIGxpbmUgbXVzdApzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZy4gIFdoZW4gdXNpbmcgYSBtdWx0aS1ieXRlIGVuY29kaW5nIGl0J3MKcG9zc2libGUgdG8gdXNlIG1vcmUgZGlmZmVyZW50IGFmZml4ZXMuCgoKQ0hBUkFDVEVSIFRBQkxFUwoJCQkJCQkJKnNwZWxsLWFmZml4LWNoYXJzKgpXaGVuIHVzaW5nIGFuIDgtYml0IGVuY29kaW5nIHRoZSBhZmZpeCBmaWxlIHNob3VsZCBkZWZpbmUgd2hhdCBjaGFyYWN0ZXJzIGFyZQp3b3JkIGNoYXJhY3RlcnMgKGFzIHNwZWNpZmllZCB3aXRoIEVOQykuICBUaGlzIGlzIGJlY2F1c2UgdGhlIHN5c3RlbSB3aGVyZQoiOm1rc3BlbGwiIGlzIHVzZWQgbWF5IG5vdCBzdXBwb3J0IGEgbG9jYWxlIHdpdGggdGhpcyBlbmNvZGluZyBhbmQgaXNhbHBoYSgpCndvbid0IHdvcmsuICBGb3IgZXhhbXBsZSB3aGVuIHVzaW5nICJjcDEyNTAiIG9uIFVuaXguCgoJCQkJCSpFNzYxKiAqRTc2MiogKnNwZWxsLWFmZml4LUZPTCoKCQkJCQkqc3BlbGwtYWZmaXgtTE9XKiAqc3BlbGwtYWZmaXgtVVBQKgpUaHJlZSBsaW5lcyBpbiB0aGUgYWZmaXggZmlsZSBhcmUgbmVlZGVkLiAgU2ltcGxpc3RpYyBleGFtcGxlOgoKCUZPTCAg4evxIH4KCUxPVyAg4evxIH4KCVVQUCAgwcvRIH4KCkFsbCB0aHJlZSBsaW5lcyBtdXN0IGhhdmUgZXhhY3RseSB0aGUgc2FtZSBudW1iZXIgb2YgY2hhcmFjdGVycy4KClRoZSAiRk9MIiBsaW5lIHNwZWNpZmllcyB0aGUgY2FzZS1mb2xkZWQgY2hhcmFjdGVycy4gIFRoZXNlIGFyZSB1c2VkIHRvCmNvbXBhcmUgd29yZHMgd2hpbGUgaWdub3JpbmcgY2FzZS4gIEZvciBtb3N0IGVuY29kaW5ncyB0aGlzIGlzIGlkZW50aWNhbCB0bwp0aGUgbG93ZXIgY2FzZSBsaW5lLgoKVGhlICJMT1ciIGxpbmUgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIGluIGxvd2VyLWNhc2UuICBNb3N0bHkgaXQncyBlcXVhbCB0bwp0aGUgIkZPTCIgbGluZS4KClRoZSAiVVBQIiBsaW5lIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyB3aXRoIHVwcGVyLWNhc2UuICBUaGF0IGlzLCBhIGNoYXJhY3RlcgppcyB1cHBlci1jYXNlIHdoZXJlIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbgoiRk9MIi4KCkFTQ0lJIGNoYXJhY3RlcnMgc2hvdWxkIGJlIG9taXR0ZWQsIFZpbSBhbHdheXMgaGFuZGxlcyB0aGVzZSBpbiB0aGUgc2FtZSB3YXkuCldoZW4gdGhlIGVuY29kaW5nIGlzIFVURi04IG5vIHdvcmQgY2hhcmFjdGVycyBuZWVkIHRvIGJlIHNwZWNpZmllZC4KCgkJCQkJCQkqRTc2MyoKVmltIGFsbG93cyB5b3UgdG8gdXNlIHNwZWxsIGNoZWNraW5nIGZvciBzZXZlcmFsIGxhbmd1YWdlcyBpbiB0aGUgc2FtZSBmaWxlLgpZb3UgY2FuIGxpc3QgdGhlbSBpbiB0aGUgJ3NwZWxsbGFuZycgb3B0aW9uLiAgQXMgYSBjb25zZXF1ZW5jZSBhbGwgc3BlbGwgZmlsZXMKZm9yIHRoZSBzYW1lIGVuY29kaW5nIG11c3QgdXNlIHRoZSBzYW1lIHdvcmQgY2hhcmFjdGVycywgb3RoZXJ3aXNlIHRoZXkgY2FuJ3QKYmUgY29tYmluZWQgd2l0aG91dCBlcnJvcnMuICBJZiB5b3UgZ2V0IGEgd2FybmluZyB0aGF0IHRoZSB3b3JkIHRhYmxlcyBkaWZmZXIKeW91IG1heSBuZWVkIHRvIGdlbmVyYXRlIHRoZSAuc3BsIGZpbGUgYWdhaW4gd2l0aCB8Om1rc3BlbGx8LiAgQ2hlY2sgdGhlIEZPTCwKTE9XIGFuZCBVUFAgbGluZXMgaW4gdGhlIHVzZWQgLmFmZiBmaWxlLgoKVGhlIFhYLmFzY2lpLnNwbCBzcGVsbCBmaWxlIGdlbmVyYXRlZCB3aXRoIHRoZSAiLWFzY2lpIiBhcmd1bWVudCB3aWxsIG5vdApjb250YWluIHRoZSB0YWJsZSB3aXRoIGNoYXJhY3RlcnMsIHNvIHRoYXQgaXQgY2FuIGJlIGNvbWJpbmUgd2l0aCBzcGVsbCBmaWxlcwpmb3IgYW55IGVuY29kaW5nLiAgVGhlIC5hZGQuc3BsIGZpbGVzIGFsc28gZG8gbm90IGNvbnRhaW4gdGhlIHRhYmxlLgoKCkFGRklYRVMKCQkJCQkgICAgKnNwZWxsLWFmZml4LVBGWCogKnNwZWxsLWFmZml4LVNGWCoKVGhlIHVzdWFsIFBGWCAocHJlZml4KSBhbmQgU0ZYIChzdWZmaXgpIGxpbmVzIGFyZSBzdXBwb3J0ZWQgKHNlZSB0aGUgTXlzcGVsbApkb2N1bWVudGF0aW9uKS4gIE5vdGUgdGhhdCBNeXNwZWxsIGlnbm9yZXMgYW55IGV4dHJhIHRleHQgYWZ0ZXIgdGhlIHJlbGV2YW50CmluZm8uICBWaW0gcmVxdWlyZXMgdGhpcyB0ZXh0IHRvIHN0YXJ0IHdpdGggYSAiIyIgc28gdGhhdCBtaXN0YWtlcyBkb24ndCBnbwp1bm5vdGljZWQuICBFeGFtcGxlOgoKCVNGWCBGIDAgaW4gW15pXW4gICAgICAjIFNwaW9uID4gU3Bpb25pbiAgfgoKCQkJCQkJICAgICpzcGVsbC1hZmZpeC1QRlhQT1NUUE9ORSoKV2hlbiBhbiBhZmZpeCBmaWxlIGhhcyB2ZXJ5IG1hbnkgcHJlZml4ZXMgdGhhdCBhcHBseSB0byBtYW55IHdvcmRzIGl0J3Mgbm90CnBvc3NpYmxlIHRvIGJ1aWxkIHRoZSB3aG9sZSB3b3JkIGxpc3QgaW4gbWVtb3J5LiAgVGhpcyBhcHBsaWVzIHRvIEhlYnJldyAoYQpsaXN0IHdpdGggYWxsIHdvcmRzIGlzIG92ZXIgYSBHYnl0ZSkuICBJbiB0aGF0IGNhc2UgYXBwbHlpbmcgcHJlZml4ZXMgbXVzdCBiZQpwb3N0cG9uZWQuICBUaGlzIG1ha2VzIHNwZWxsIGNoZWNraW5nIHNsb3dlci4gIEl0IGlzIGluZGljYXRlZCBieSB0aGlzIGtleXdvcmQKaW4gdGhlIC5hZmYgZmlsZToKCglQRlhQT1NUUE9ORSB+CgpPbmx5IHByZWZpeGVzIHdpdGhvdXQgYSBjaG9wIHN0cmluZyBjYW4gYmUgcG9zdHBvbmVkLCBwcmVmaXhlcyB3aXRoIGEgY2hvcApzdHJpbmcgd2lsbCBzdGlsbCBiZSBpbmNsdWRlZCBpbiB0aGUgd29yZCBsaXN0LgoKCktFRVAtQ0FTRSBXT1JEUwoJCQkJCQkJKnNwZWxsLWFmZml4LUtFUCoKSW4gdGhlIGFmZml4IGZpbGUgYSBLRVAgbGluZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGFmZml4IG5hbWUgdXNlZCBmb3IKa2VlcC1jYXNlIHdvcmRzLiAgRXhhbXBsZToKCglLRVAgPSB+CgpTZWUgYWJvdmUgZm9yIGFuIGV4YW1wbGUgfHNwZWxsLWFmZml4LXZpbXwuCgoKUkFSRSBXT1JEUwoJCQkJCQkJKnNwZWxsLWFmZml4LVJBUioKSW4gdGhlIGFmZml4IGZpbGUgYSBSQVIgbGluZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGFmZml4IG5hbWUgdXNlZCBmb3IKcmFyZSB3b3Jkcy4gIEV4YW1wbGU6CgoJUkFSID8gfgoKUmFyZSB3b3JkcyBhcmUgaGlnaGxpZ2h0ZWQgZGlmZmVyZW50bHkgZnJvbSBiYWQgd29yZHMuICBUaGlzIGlzIHRvIGJlIHVzZWQgZm9yCndvcmRzIHRoYXQgYXJlIGNvcnJlY3QgZm9yIHRoZSBsYW5ndWFnZSwgYnV0IGFyZSBoYXJkbHkgZXZlciB1c2VkIGFuZCBjb3VsZCBiZQphIHR5cGluZyBtaXN0YWtlIGFueXdheS4gIFdoZW4gdGhlIHNhbWUgd29yZCBpcyBmb3VuZCBhcyBnb29kIGl0IHdvbid0IGJlCmhpZ2hsaWdodGVkIGFzIHJhcmUuCgoKQkFEIFdPUkRTCgkJCQkJCQkqc3BlbGwtYWZmaXgtQkFEKgpJbiB0aGUgYWZmaXggZmlsZSBhIEJBRCBsaW5lIGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgYWZmaXggbmFtZSB1c2VkIGZvcgpiYWQgd29yZHMuICBFeGFtcGxlOgoKCUJBRCAhIH4KClRoaXMgY2FuIGJlIHVzZWQgdG8gZXhjbHVkZSB3b3JkcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBnb29kLiAgRm9yIGV4YW1wbGUKInRoZSB0aGUiLiAgT25jZSBhIHdvcmQgaGFzIGJlZW4gbWFya2VkIGFzIGJhZCBpdCB3b24ndCBiZSB1bmRvbmUgYnkKZW5jb3VudGVyaW5nIHRoZSBzYW1lIHdvcmQgYXMgZ29vZC4KCgpSRVBMQUNFTUVOVFMJCQkJCQkqc3BlbGwtYWZmaXgtUkVQKgoKSW4gdGhlIGFmZml4IGZpbGUgUkVQIGl0ZW1zIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBjb21tb24gbWlzdGFrZXMuICBUaGlzIGlzCnVzZWQgdG8gbWFrZSBzcGVsbGluZyBzdWdnZXN0aW9ucy4gIFRoZSBpdGVtcyBkZWZpbmUgdGhlICJmcm9tIiB0ZXh0IGFuZCB0aGUKInRvIiByZXBsYWNlbWVudC4gIEV4YW1wbGU6CgoJUkVQIDQgfgoJUkVQIGYgcGggfgoJUkVQIHBoIGYgfgoJUkVQIGsgY2ggfgoJUkVQIGNoIGsgfgoKVGhlIGZpcnN0IGxpbmUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgUkVQIGxpbmVzIGZvbGxvd2luZy4gIFZpbSBpZ25vcmVzIGl0LgoKClNJTUlMQVIgQ0hBUkFDVEVSUwkJCQkJKnNwZWxsLWFmZml4LU1BUCoKCkluIHRoZSBhZmZpeCBmaWxlIE1BUCBpdGVtcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgbGV0dGVycyB0aGF0IHZlcnkgbXVjaAphbGlrZS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yIGEgbGV0dGVyIHdpdGggZGlmZmVyZW50IGFjY2VudHMuICBUaGlzIGlzIHVzZWQKdG8gcHJlZmVyIHN1Z2dlc3Rpb25zIHdpdGggdGhlc2UgbGV0dGVycyBzdWJzdGl0dXRlZC4gIEV4YW1wbGU6CgoJTUFQIDIgfgoJTUFQIGXp6+roIH4KCU1BUCB1/Pn6+yB+CgpUaGUgZmlyc3QgbGluZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBNQVAgbGluZXMgZm9sbG93aW5nLiAgVmltIGlnbm9yZXMgaXQuCgpBIGxldHRlciBtdXN0IG9ubHkgYXBwZWFyIGluIG9uZSBvZiB0aGUgTUFQIGl0ZW1zLiAgSXQncyBhIGJpdCBtb3JlIGVmZmljaWVudAppZiB0aGUgZmlyc3QgbGV0dGVyIGlzIEFTQ0lJIG9yIGF0IGxlYXN0IG9uZSB3aXRob3V0IGFjY2VudHMuCgoKU09VTkRTLUEtTElLRQkJCQkJCSpzcGVsbC1hZmZpeC1TQUwqCgpJbiB0aGUgYWZmaXggZmlsZSBTQUwgaXRlbXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBzb3VuZHMtYS1saWtlIG1lY2hhbmlzbQp0byBiZSB1c2VkLiAgVGhlIG1haW4gaXRlbXMgZGVmaW5lIHRoZSAiZnJvbSIgdGV4dCBhbmQgdGhlICJ0byIgcmVwbGFjZW1lbnQuCkV4YW1wbGU6CgoJU0FMIENJQSAgICAgICAgICAgICAgICAgIFggfgoJU0FMIENIICAgICAgICAgICAgICAgICAgIFggfgoJU0FMIEMgICAgICAgICAgICAgICAgICAgIEsgfgoJU0FMIEsgICAgICAgICAgICAgICAgICAgIEsgfgoKVE9ETzogZXhwbGFpbiBob3cgaXQgd29ya3MuCgpUaGVyZSBhcmUgYSBmZXcgc3BlY2lhbCBpdGVtczoKCglTQUwgZm9sbG93dXAJCXRydWUgfgoJU0FMIGNvbGxhcHNlX3Jlc3VsdAl0cnVlIH4KCVNBTCByZW1vdmVfYWNjZW50cwl0cnVlIH4KCiIxIiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyAidHJ1ZSIuICBBbnkgb3RoZXIgdmFsdWUgbWVhbnMgImZhbHNlIi4KCiB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoK