CkludHJvZHVjdGlvbgoKCSAgVGhpcyBpcyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciAzZGZ4JyBWb29kb28gR3JhcGhpY3MgCgkoYWthIHZvb2RvbyAxLCBha2Egc3N0MSkgYW5kIFZvb2Rvb7IgKGFrYSBWb29kb28gMiwgYWthIENWRykgYmFzZWQgCgl2aWRlbyBib2FyZHMuIEl0J3MgaGlnaGx5IGV4cGVyaW1lbnRhbCBjb2RlLCBidXQgaXMgZ3VhcmFudGVlZCB0byB3b3JrCglvbiBteSBjb21wdXRlciwgd2l0aCBteSAiTWF4aSBHYW1lciAzRCIgYW5kICJNYXhpIEdhbWVyIDNksiIgYm9hcmRzLAoJYW5kIHdpdGggbWUgImJldHdlZW4gY2hhaXIgYW5kIGtleWJvYXJkIi4gU29tZSBwZW9wbGUgdGVzdGVkIG90aGVyCgljb21iaW5hdGlvbnMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgd29ya3MuCgkgIFRoZSBtYWluIHBhZ2UgaXMgbG9jYXRlZCBhdCA8aHR0cDovL3NzdGZiLnNvdXJjZWZvcmdlLm5ldD4sIGFuZCBpZgoJeW91IHdhbnQgdGhlIGxhdGVzdCB2ZXJzaW9uLCBjaGVjayBvdXQgdGhlIENWUywgYXMgdGhlIGRyaXZlciBpcyBhIHdvcmsKCWluIHByb2dyZXNzLCBJIGZlZWwgdW5jb21mb3J0YWJsZSB3aXRoIHJlbGVhc2luZyB0YXJiYWxscyBvZiBzb21ldGhpbmcKCW5vdCBjb21wbGV0ZWx5IHdvcmtpbmcuLi5Eb24ndCB3b3JyeSwgaXQncyBzdGlsbCBtb3JlIHRoYW4gdXNlYWJsZQoJKEkgZWF0IG15IG93biBkb2cgZm9vZCkKCgkgIFBsZWFzZSByZWFkIHRoZSBCdWcgc2VjdGlvbiwgYW5kIHJlcG9ydCBhbnkgc3VjY2VzcyBvciBmYWlsdXJlIHRvIG1lCgkoR2hvemxhbmUgVG91bWkgPGd0b3VtaUBsYXBvc3RlLm5ldD4pLgoJICBCVFcsIElmIHlvdSBoYXZlIG9ubHkgb25lIG1vbml0b3IgLCBhbmQgeW91IGRvbid0IGZlZWwgbGlrZSBwbGF5aW5nCgl3aXRoIHRoZSB2Z2EgcGFzc3Rocm91IGNhYmxlLCBJIGNhbiBvbmx5IHN1Z2dlc3QgYm9ycm93aW5nIGEgc2NyZWVuCglzb21ld2hlcmUuLi4gCgoKSW5zdGFsbGF0aW9uIAoKCSAgVGhpcyBkcml2ZXIgKHNob3VsZCkgd29yayBvbiBpeDg2LCB3aXRoICJsYXRlIiAyLjIueCBrZXJuZWwgKHRlc3RlZAoJd2l0aCB4ID0gMTkpIGFuZCAicmVjZW50IiAyLjQueCBrZXJuZWwsIGFzIGEgbW9kdWxlIG9yIGNvbXBpbGVkIGluLgoJICBJdCBoYXMgYmVlbiBpbmNsdWRlZCBpbiBtYWluc3RyZWFtIGtlcm5lbCBzaW5jZSB0aGUgaW5mYW1vdXMgMi40LjEwLgoJICBZb3UgY2FuIGFwcGx5IHRoZSBwYXRjaGVzIGZvdW5kIGluIHNzdGZiL2tlcm5lbC8qLTIuezJ8NH0ueC5wYXRjaCwKCWFuZCBjb3B5IHNzdGZiLmMgdG8gbGludXgvZHJpdmVycy92aWRlby8sIG9yIGFwcGx5IGEgc2luZ2xlIHBhdGNoLCAKCXNzdGZiL3BhdGNoLTIuezJ8NH0ueC1zc3RmYi15eW1tZGQgdG8geW91ciBsaW51eCBzb3VyY2UgdHJlZS4KCgkgIFRoZW4gY29uZmlndXJlIHlvdXIga2VybmVsIGFzIHVzdWFsOiBjaG9vc2UgIm0iIG9yICJ5IiB0byAzRGZ4IFZvb2RvbwoJR3JhcGhpY3MgaW4gc2VjdGlvbiAiY29uc29sZSIuIENvbXBpbGUsIGluc3RhbGwsIGhhdmUgZnVuLi4uIGFuZCBwbGVhc2UKCWRyb3AgbWUgYSByZXBvcnQgOikKCgpNb2R1bGUgVXNhZ2UKCQoJV2FybmluZ3MuCgkjIFlvdSBzaG91bGQgcmVhZCBjb21wbGV0ZWx5IHRoaXMgc2VjdGlvbiBiZWZvcmUgaXNzdWluZyBhbnkgY29tbWFuZC4KCSMgSWYgeW91IGhhdmUgb25seSBvbmUgbW9uaXRvciB0byBwbGF5IHdpdGgsIG9uY2UgeW91IGluc21vZCB0aGUKCSAgbW9kdWxlLCB0aGUgM2RmeCB0YWtlcyBjb250cm9sIG9mIHRoZSBvdXRwdXQsIHNvIHlvdSdsbCBoYXZlIHRvCgkgIHBsdWcgdGhlIG1vbml0b3IgdG8gdGhlICJub3JtYWwiIHZpZGVvIGJvYXJkIGluIG9yZGVyIHRvIGlzc3VlCgkgIHRoZSBjb21tYW5kcywgb3IgeW91IGNhbiBibGluZGx5IHVzZSBzc3RfZGJnX3ZnYXBhc3MKICAgICAgICAgIGluIHRoZSB0b29scyBkaXJlY3RvcnkgKFNlZSBUb29scykuIFRoZSBsYXRlc3Qgc29sdXRpb24gaXMgcGFzcyB0aGUKCSAgcGFyYW1ldGVyIHZnYXBhc3M9MSB3aGVuIGluc21vZGRpbmcgdGhlIGRyaXZlci4gKFNlZSBLZXJuZWwvTW9kdWxlcwoJICBPcHRpb25zKQoKCU1vZHVsZSBpbnNlcnRpb246CgkjIGluc21vZCBzc3RmYi5vCgkgIHlvdSBzaG91bGQgc2VlIHNvbWUgc3RyYW5nZSBvdXRwdXQgZnJvbSB0aGUgYm9hcmQ6IAoJICBhIGJpZyBibHVlIHNxdWFyZSwgYSBncmVlbiBhbmQgYSByZWQgc21hbGwgc3F1YXJlcyBhbmQgYSB2ZXJ0aWNhbAoJICB3aGl0ZSByZWN0YW5nbGUuIHdoeT8gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyBzZWxmLWV4cGxhbmF0b3J5OgoJICAic3N0ZmJfdGVzdCgpIi4uLgoJICAoaWYgeW91IGRvbid0IGhhdmUgYSBzZWNvbmQgbW9uaXRvciwgeW91J2xsIGhhdmUgdG8gcGx1ZyB5b3VyIG1vbml0b3IKCSAgZGlyZWN0bHkgdG8gdGhlIDJEIHZpZGVvY2FyZCB0byBzZWUgd2hhdCB5b3UncmUgdHlwaW5nKQoJIyBjb24yZmIgL2Rldi9mYnggL2Rldi90dHl4CgkgIGJpbmQgYSB0dHkgdG8gdGhlIG5ldyBmcmFtZSBidWZmZXIuIGlmIHlvdSBhbHJlYWR5IGhhdmUgYSBmcmFtZQoJICBidWZmZXIgZHJpdmVyLCB0aGUgdm9vZG9vIGZiIHdpbGwgbGlrZWx5IGJlIC9kZXYvZmIxLiBpZiBub3QsIAoJICB0aGUgZGV2aWNlIHdpbGwgYmUgL2Rldi9mYjAuIFlvdSBjYW4gY2hlY2sgdGhpcyBieSBkb2luZyBhIAoJICBjYXQgL3Byb2MvZmIuIFlvdSBjYW4gZmluZCBhIGNvcHkgb2YgY29uMmZiIGluIHRvb2xzLyBkaXJlY3RvcnkuCgkgIGlmIHlvdSBkb24ndCBoYXZlIGFub3RoZXIgZmIgZGV2aWNlLCB0aGlzIHN0ZXAgaXMgc3VwZXJmbHVvdXMsCgkgIGFzIHRoZSBjb25zb2xlIHN1YnN5c3RlbSBhdXRvbWFnaWNhbHkgYmluZHMgdHR5cyB0byB0aGUgZmIuCgkjIHN3aXRjaCB0byB0aGUgdmlydHVhbCBjb25zb2xlIHlvdSBqdXN0IG1hcHBlZC4gInRhZGFhYSIgLi4uCgoJTW9kdWxlIHJlbW92YWw6CgkjIGNvbjJmYiAvZGV2L2ZieCAvZGV2L3R0eXgKCSAgYmluZCB0aGUgdHR5IHRvIHRoZSBvbGQgZnJhbWUgYnVmZmVyIHNvIHRoZSBtb2R1bGUgY2FuIGJlIHJlbW92ZWQuCgkgIChob3cgZG9lcyBpdCB3b3JrIHdpdGggdmdhY29uID8gc2hvcnQgYW5zd2VyIDogaXQgZG9lc24ndCB3b3JrKQoJIyBybW1vZCBzc3RmYgoKCktlcm5lbC9Nb2R1bGVzIE9wdGlvbnMKCglZb3UgY2FuIHBhc3Mgc29tZSBvcHRpb25zIHRvIHRoZSBzc3RmYiBtb2R1bGUsIGFuZCB2aWEgdGhlIGtlcm5lbCAKCWNvbW1hbmQgbGluZSB3aGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW46Cglmb3IgbW9kdWxlIDogaW5zbW9kIHNzdGZiLm8gb3B0aW9uMT12YWx1ZTEgb3B0aW9uMj12YWx1ZTIgLi4uCglpbiBrZXJuZWwgOiAgdmlkZW89c3N0ZmI6b3B0aW9uMSxvcHRpb24yOnZhbHVlMixvcHRpb24zIC4uLgoJCglzc3RmYiBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgOgoKTW9kdWxlCQlLZXJuZWwJCURlc2NyaXB0aW9uCgp2Z2FwYXNzPTAJdmdhbm9wYXNzCUVuYWJsZSBvciBkaXNhYmxlIFZHQSBwYXNzdGhyb3UgY2FibGUuCnZnYXBhc3M9MQl2Z2FwYXNzCQlXaGVuIGVuYWJsZWQsIHRoZSBtb25pdG9yIHdpbGwgZ2V0IHRoZSBzaWduYWwKCQkJCWZyb20gdGhlIFZHQSBib2FyZCBhbmQgbm90IGZyb20gdGhlIHZvb2Rvby4KCQkJCURlZmF1bHQ6IG5vcGFzcwoKbWVtPXgJCW1lbTp4CQlGb3JjZSBmcmFtZSBidWZmZXIgbWVtb3J5IGluIE1pQgoJCQkJYWxsb3dlZCB2YWx1ZXM6IDAsIDEsIDIsIDQuCgkJCQlEZWZhdWx0OiAwICg9IGF1dG9kZXRlY3QpCgppbnZlcnNlPTEJaW52ZXJzZQkJU3VwcG9zZWQgdG8gZW5hYmxlIGludmVyc2UgY29uc29sZS4KCQkJCWRvZXNuJ3Qgd29yayB5ZXQuLi4KCmNsaXBwaW5nPTEJY2xpcHBpbmcJRW5hYmxlIG9yIGRpc2FibGUgY2xpcHBpbmcuCmNsaXBwaW5nPTAJbm9jbGlwcGluZwlXaXRoIGNsaXBwaW5nIGVuYWJsZWQsIGFsbCBvZmZzY3JlZW4KCQkJCXJlYWRzIGFuZCB3cml0ZXMgYXJlIGRpc2NhcmRlZC4KCQkJCURlZmF1bHQ6IGVuYWJsZSBjbGlwcGluZy4KCmdmeGNsaz14CWdmeGNsazp4CUZvcmNlIGdyYXBoaWMgY2xvY2sgZnJlcXVlbmN5IChpbiBNSHopLgoJCQkJQmUgY2FyZWZ1bCB3aXRoIHRoaXMgb3B0aW9uLCBpdCBtYXkgYmUKCQkJCURBTkdFUk9VUy4KCQkJCURlZmF1bHQ6IGF1dG8gCgkJCQkJNTBNaHogZm9yIFZvb2RvbyAxLAoJCQkJCTc1TUh6IGZvciBWb29kb28gMi4gCgpzbG93cGNpPTEJZmFzdHBjaQkJRW5hYmxlIG9yIGRpc2FibGUgZmFzdCBQQ0kgcmVhZC93cml0ZXMuCnNsb3dwY2k9MQlzbG93cGNpCQlEZWZhdWx0IDogZmFzdHBjaQoKZGV2PXgJCWRldjp4CQlBdHRhY2ggdGhlIGRyaXZlciB0byBkZXZpY2UgbnVtYmVyIHguCgkJCQkwIGlzIHRoZSBmaXJzdCBjb21wYXRpYmxlIGJvYXJkIChpbiAKCQkJCWxzcGNpIG9yZGVyKQoKVG9vbHMKCglUaGVzZSB0b29scyBhcmUgbW9zdGx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGJ1dCB5b3UgY2FuIAoJZmluZCBzb21lIG9mIHRoZXNlIGludGVyZXN0aW5nIDoKCSAtIGNvbjJmYiAsIG1hcHMgYSB0dHkgdG8gYSBmYnJhbWVidWZmZXIgLgoJCWNvbjJmYiAvZGV2L2ZiMSAvZGV2L3R0eTUKCSAtIHNzdF9kYmdfdmdhcGFzcyAsIGNoYW5nZXMgdmdhIHBhc3N0aHJvdS4gWW91IGhhdmUgdG8gcmVjb21waWxlIHRoZQoJZHJpdmVyIHdpdGggU1NUX0RFQlVHIGFuZCBTU1RfREVCVUdfSU9DVEwgc2V0IHRvIDEKCQlzc3RfZGJnX3ZnYXBhc3MgL2Rldi9mYjEgMSAoZW5hYmxlcyB2Z2EgY2FibGUpCgkJc3N0X2RiZ192Z2FwYXNzIC9kZXYvZmIxIDAgKGRpc2FibGVzIHZnYSBjYWJsZSkKCSAtIGdsaWRlX3Jlc2V0ICwgcmVzZXRzIHRoZSB2b29kb28gdXNpbmcgZ2xpZGUKCQl1c2UgdGhpcyBhZnRlciBybW1vZGluZyBzc3RmYiwgaWYgdGhlIG1vZHVsZSByZWZ1c2VzIHRvCgkJcmVpbnNlcnQgLgoKQnVncwoKCS0gRE8gTk9UIHVzZSBnbGlkZSB3aGlsZSB0aGUgc3N0ZmIgbW9kdWxlIGlzIGluLCB5b3UnbGwgbW9zdCBsaWtlbHkKCWhhbmcgeW91ciBjb21wdXRlci4KCS0gSWYgeW91IHNlZSBzb21lIGFydGVmYWN0cyAocGl4ZWxzIG5vdCBjbGVhbmluZyBhbmQgc3R1ZmYgbGlrZSB0aGF0KSwgCgl0cnkgdHVybmluZyBvZmYgY2xpcHBpbmcgKGNsaXBwaW5nPTApLCBhbmQvb3IgdXNpbmcgc2xvd3BjaQoJLSB0aGUgZHJpdmVyIGRvbid0IGRldGVjdCB0aGUgNE1iIGZyYW1lIGJ1ZmZlciB2b29kb29zLCBpdCBzZWVtcyB0aGF0Cgl0aGUgMiBsYXN0IE1icyB3cmFwIGFyb3VuZC4gbG9va2luZyBpbnRvIHRoYXQgLgoJLSBUaGUgZHJpdmVyIGlzIDE2IGJwcCBvbmx5LCAyNC8zMiB3b24ndCB3b3JrLgoJLSBUaGUgZHJpdmVyIGlzIG5vdCB5b3VyX2Zhdm9yaXRlX3RveS1zYWZlLiB0aGlzIGluY2x1ZGVzIFNNUC4uLgogICAgICAgICAgW0FjdHVhbGx5IGZyb20gaW5zcGVjdGlvbiBpdCBzZWVtcyB0byBiZSBzYWZlIC0gQWxhbl0KCS0gV2hlbiB1c2luZyBYRnJlZTg2IEZCZGV2IChYIG92ZXIgZmJkZXYpIHlvdSBtYXkgc2VlIHN0cmFuZ2UgY29sb3IKCXBhdHRlcm5zIGF0IHRoZSBib3JkZXIgb2YgeW91ciB3aW5kb3dzICh0aGUgcGl4ZWxzIGxvc2UgdGhlIGxvd2VzdAoJYnl0ZSAtPiBiYXNpY2FsbHkgdGhlIGJsdWUgY29tcG9uZW50IGFuZCBzb21lIG9mIHRoZSBncmVlbikuIEknbSB1bmFibGUKCXRvIHJlcHJvZHVjZSB0aGlzIHdpdGggWEZyZWU4Ni0zLjMsIGJ1dCBvbmUgb2YgdGhlIHRlc3RlcnMgaGFzIHRoaXMKCXByb2JsZW0gd2l0aCBYRnJlZTg2LTQuIEFwcGFyZW50bHkgcmVjZW50IFhmcmVlODYtNC54IHNvbHZlIHRoaXMKCXByb2JsZW0uCgktIEkgZGlkbid0IHJlYWxseSB0ZXN0IGNoYW5naW5nIHRoZSBwYWxldHRlLCBzbyB5b3UgbWF5IGZpbmQgc29tZSB3ZWlyZAoJdGhpbmdzIHdoZW4gcGxheWluZyB3aXRoIHRoYXQuCgktIFNvbWV0aW1lcyB0aGUgZHJpdmVyIHdpbGwgbm90IHJlY29nbmlzZSB0aGUgREFDLCBhbmQgdGhlCiAgICAgICAgaW5pdGlhbGlzYXRpb24gd2lsbCBmYWlsLiBUaGlzIGlzIHNwZWNpZmljYWxseSB0cnVlIGZvcgoJdm9vZG9vIDIgYm9hcmRzLCBidXQgaXQgc2hvdWxkIGJlIHNvbHZlZCBpbiByZWNlbnQgdmVyc2lvbnMuIFBsZWFzZQoJY29udGFjdCBtZS4KCS0gVGhlIDI0LzMyIGlzIG5vdCBsaWtlbHkgdG8gd29yayBhbnl0aW1lIHNvb24sIGtub3dpbmcgdGhhdCB0aGUKCWhhcmR3YXJlIGRvZXMgLi4uIHVudXN1YWwgdGhpbmdzIGluIDI0LzMyIGJwcC4KCS0gV2hlbiB1c2VkIHdpdGggYW5vdGhlciB2aWRlbyBib2FyZCwgY3VycmVudCBsaW1pdGF0aW9ucyBvZiB0aGUgbGludXgKCWNvbnNvbGUgc3Vic3lzdGVtIGNhbiBjYXVzZSBzb21lIHRyb3VibGVzLCBzcGVjaWZpY2FsbHksIHlvdSBzaG91bGQKCWRpc2FibGUgc29mdHdhcmUgc2Nyb2xsYmFjaywgYXMgaXQgY2FuIG9vcHMgYmFkbHkgLi4uCgpUb2RvCgoJLSBHZXQgcmlkIG9mIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGguCgktIEJ1eSBtb3JlIGNvZmZlZS4KCS0gdGVzdC9wb3J0IHRvIG90aGVyIGFyY2guCgktIHRyeSB0byBhZGQgcGFubmluZyB1c2luZyB0d2Vla3Mgd2l0aCBmcm9udCBhbmQgYmFjayBidWZmZXIgLgoJLSB0cnkgdG8gaW1wbGVtZW50IGFjY2VsIG9uIHZvb2RvbzIsIHRoaXMgYm9hcmQgY2FuIGFjdHVhbGx5IGRvIGEgCgkgIGxvdCBpbiAyRCBldmVuIGlmIGl0IHdhcyBzb2xkIGFzIGEgM0Qgb25seSBib2FyZCAuLi4KCmdob3ouCgotLSAKR2hvemxhbmUgVG91bWkgPGd0b3VtaUBsYXBvc3RlLm5ldD4KCgokRGF0ZTogMjAwMi8wNS8wOSAyMDoxMTo0NSAkCmh0dHA6Ly9zc3RmYi5zb3VyY2Vmb3JnZS5uZXQvUkVBRE1FCg==