ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5ZTczMQotLS0gL2Rldi9udWxsCisrKyBiL0FOTk9VTkNFCkBAIC0wLDAgKzEsNDczIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5ub3VuY2luZyBuY3Vyc2VzIDUuNworCisgICBUaGUgIG5jdXJzZXMgIChuZXcgIGN1cnNlcykgIGxpYnJhcnkgIGlzICBhIGZyZWUgc29mdHdhcmUgZW11bGF0aW9uIG9mCisgICBjdXJzZXMgIGluICBTeXN0ZW0gIFYgIFJlbGVhc2UgNC4wLCBhbmQgbW9yZS4gSXQgdXNlcyB0ZXJtaW5mbyBmb3JtYXQsCisgICBzdXBwb3J0cyAgcGFkcyAgYW5kIGNvbG9yIGFuZCBtdWx0aXBsZSBoaWdobGlnaHRzIGFuZCBmb3JtcyBjaGFyYWN0ZXJzCisgICBhbmQgICBmdW5jdGlvbi1rZXkgICBtYXBwaW5nLCAgIGFuZCAgaGFzICBhbGwgIHRoZSAgb3RoZXIgIFNZU1YtY3Vyc2VzCisgICBlbmhhbmNlbWVudHMgb3ZlciBCU0QgY3Vyc2VzLgorCisgICBJbiAgbWlkLUp1bmUgIDE5OTUsICB0aGUgIG1haW50YWluZXIgb2YgNC40QlNEIGN1cnNlcyBkZWNsYXJlZCB0aGF0IGhlCisgICBjb25zaWRlcmVkICA0LjRCU0QgY3Vyc2VzIG9ic29sZXRlLCBhbmQgZW5jb3VyYWdlZCB0aGUga2VlcGVycyBvZiBVbml4CisgICByZWxlYXNlcyBzdWNoIGFzIEJTRC9PUywgRnJlZUJTRCBhbmQgTmV0QlNEIHRvIHN3aXRjaCBvdmVyIHRvIG5jdXJzZXMuCisKKyAgIFRoZSBuY3Vyc2VzIGNvZGUgd2FzIGRldmVsb3BlZCB1bmRlciBHTlUvTGludXguIEl0IGhhcyBiZWVuIGluIHVzZSBmb3IKKyAgIHNvbWUgIHRpbWUgIHdpdGggIE9wZW5CU0QgYXMgdGhlIHN5c3RlbSBjdXJzZXMgbGlicmFyeSwgYW5kIG9uIEZyZWVCU0QKKyAgIGFuZCAgTmV0QlNEICBhcyAgYW4gIGV4dGVybmFsICBwYWNrYWdlLiAgSXQgIHNob3VsZCBwb3J0IGVhc2lseSB0byBhbnkKKyAgIEFOU0kvUE9TSVgtY29uZm9ybWluZyBVTklYLiBJdCBoYXMgZXZlbiBiZWVuIHBvcnRlZCB0byBPUy8yIFdhcnAhCisKKyAgIFRoZSBkaXN0cmlidXRpb24gaW5jbHVkZXMgdGhlIGxpYnJhcnkgYW5kIHN1cHBvcnQgdXRpbGl0aWVzLCBpbmNsdWRpbmcKKyAgIGEgICB0ZXJtaW5mbyAgY29tcGlsZXIgIHRpYygxKSwgIGEgIGRlY29tcGlsZXIgIGluZm9jbXAoMSksICBjbGVhcigxKSwKKyAgIHRwdXQoMSksICB0c2V0KDEpLCAgYW5kICBhICB0ZXJtY2FwIGNvbnZlcnNpb24gdG9vbCBjYXB0b2luZm8oMSkuIEZ1bGwKKyAgIG1hbnVhbCBwYWdlcyBhcmUgcHJvdmlkZWQgZm9yIHRoZSBsaWJyYXJ5IGFuZCB0b29scy4KKworICAgVGhlICBuY3Vyc2VzICBkaXN0cmlidXRpb24gIGlzICBhdmFpbGFibGUgdmlhIGFub255bW91cyBGVFAgYXQgdGhlIEdOVQorICAgZGlzdHJpYnV0aW9uIHNpdGUgWzFdZnRwOi8vZnRwLmdudS5vcmcvZ251L25jdXJzZXMvIC4KKyAgIEl0IGlzIGFsc28gYXZhaWxhYmxlIGF0IFsyXWZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvIC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcworCisgICBUaGlzICByZWxlYXNlICBpcyAgZGVzaWduZWQgIHRvICBiZSB1cHdhcmQgY29tcGF0aWJsZSBmcm9tIG5jdXJzZXMgNS4wCisgICB0aHJvdWdoICAgNS42OyAgdmVyeSAgZmV3ICBhcHBsaWNhdGlvbnMgIHdpbGwgIHJlcXVpcmUgIHJlY29tcGlsYXRpb24sCisgICBkZXBlbmRpbmcgICBvbiAgdGhlICBwbGF0Zm9ybS4gIFRoZXNlICBhcmUgIHRoZSAgaGlnaGxpZ2h0cyAgZnJvbSAgdGhlCisgICBjaGFuZ2UtbG9nIHNpbmNlIG5jdXJzZXMgNS42IHJlbGVhc2UuCisKKyAgIEludGVyZmFjZSBjaGFuZ2VzOgorICAgICAqIGdlbmVyYXRlIGxpbmthYmxlIHN0dWJzIGZvciBzb21lIG1hY3JvczoKKyAgICAgICBnZXRhdHRycworCisgICBOZXcgZmVhdHVyZXMgYW5kIGltcHJvdmVtZW50czoKKyAgICAgKiBsaWJyYXJ5CisgICAgICAgICAgKyBuZXcgIGZsYXZvciAgb2YgIHRoZSAgbmN1cnNlcyAgbGlicmFyeSAgcHJvdmlkZXMgIHJ1ZGltZW50YXJ5CisgICAgICAgICAgICBzdXBwb3J0ICBmb3IgIFBPU0lYIHRocmVhZHMuIFNldmVyYWwgZnVuY3Rpb25zIGFyZSByZWVudHJhbnQsCisgICAgICAgICAgICBidXQgbW9zdCByZXF1aXJlIGVpdGhlciBhIHdpbmRvdy1sZXZlbCBvciBzY3JlZW4tbGV2ZWwgbXV0ZXguCisgICAgICAgICAgICAoVGhpcyAgaXMgIEFQSS1jb21wYXRpYmxlLCAgYnV0ICBub3QgIEFCSS1jb21wYXRpYmxlIHdpdGggdGhlCisgICAgICAgICAgICBub3JtYWwgbGlicmFyeSkuCisgICAgICAgICAgKyBhZGQgIE5DVVJTRVNfT1BBUVVFICBzeW1ib2wgIHRvICBjdXJzZXMuaCwgIHdpbGwgIHVzZSB0byBtYWtlCisgICAgICAgICAgICBzdHJ1Y3RzIG9wYXF1ZSBpbiBzZWxlY3RlZCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICArIGFkZCAgIE5DVVJTRVNfRVhUX0ZVTkNTICBhbmQgIE5DVVJTRVNfRVhUX0NPTE9SUyAgc3ltYm9scyAgdG8KKyAgICAgICAgICAgIGN1cnNlcy5oIHRvIG1ha2UgaXQgc2ltcGxlciB0byB0ZWxsIGlmIHRoZSBleHRlbmRlZCBmdW5jdGlvbnMKKyAgICAgICAgICAgIGFuZC9vciBjb2xvcnMgYXJlIGRlY2xhcmVkLgorICAgICAgICAgICsgYWRkIHdyZXNpemUoKSB0byBDKysgYmluZGluZworICAgICAgICAgICsgZWxpbWluYXRlIGZpeGVkLWJ1ZmZlciB2c3ByaW50ZigpIGNhbGxzIGluIEMrKyBiaW5kaW5nLgorICAgICAgICAgICsgYWRkICBzZXZlcmFsICBmdW5jdGlvbnMgdG8gQysrIGJpbmRpbmcgd2hpY2ggd3JhcCBDIGZ1bmN0aW9ucworICAgICAgICAgICAgdGhhdCBwYXNzIGEgV0lORE9XKiBwYXJhbWV0ZXIuCisgICAgICAgICAgKyBhZGFwdCBtb3VzZS1oYW5kbGluZyBjb2RlIGZyb20gbWVudSBsaWJyYXJ5IGluIGZvcm0tbGlicmFyeQorICAgICAgICAgICsgaW1wcm92ZSAgdHJhY2luZyAgZm9yICBmb3JtICBsaWJyYXJ5LCAgc2hvd2luZyBjcmVhdGVkIGZvcm1zLAorICAgICAgICAgICAgZmllbGRzLCBldGMuCisgICAgICAgICAgKyBtYWtlICROQ1VSU0VTX05PX1BBRERJTkcgZmVhdHVyZSB3b3JrIGZvciB0ZXJtY2FwIGludGVyZmFjZSAuCisgICAgICAgICAgKyBhZGQgIGNoZWNrICB0byAgdHJhY2UtZmlsZSAgb3BlbiwgIGlmICB0aGUgIGdpdmVuICBuYW1lICBpcyBhCisgICAgICAgICAgICBkaXJlY3RvcnksIGFkZCAiLmxvZyIgdG8gdGhlIG5hbWUgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICArIHNldmVyYWwgICBuZXcgICBtYW5wYWdlczogIGN1cnNfbGVnYWN5LjN4LCAgY3Vyc19tZW1sZWFrcy4zeCwKKyAgICAgICAgICAgIGN1cnNfb3BhcXVlLjN4IGFuZCBjdXJzX3RocmVhZHMuM3gKKyAgICAgKiBwcm9ncmFtczoKKyAgICAgICAgICArIG1vZGlmaWVkICB0aHJlZSAgdGVzdC1wcm9ncmFtcyAgdG8gIGRlbW9uc3RyYXRlIHRoZSB0aHJlYWRpbmcKKyAgICAgICAgICAgIHN1cHBvcnQgaW4gdGhpcyB2ZXJzaW9uOiBkaXR0bywgcmFpbiwgd29ybS4KKyAgICAgICAgICArIHNldmVyYWwgICAgbmV3ICAgIHRlc3QtcHJvZ3JhbXM6ICAgZGVtb19wYW5lbHMsICAgZG90c19tdmN1ciwKKyAgICAgICAgICAgIGluY2hfd2lkZSwgICAgaW5jaHMsICAgIGtleV9uYW1lLCAgICBrZXlfbmFtZXMsICAgc2F2ZXNjcmVlbiwKKyAgICAgICAgICAgIHNhdmVzY3JlZW4uc2ggICAgdGVzdF9hcnJheXMsICAgdGVzdF9nZXRfd3N0ciwgICB0ZXN0X2dldHN0ciwKKyAgICAgICAgICAgIHRlc3RfaW5zdHIsIHRlc3RfaW53c3RyIGFuZCB0ZXN0X29wYXF1ZS4KKyAgICAgICAgICArIGFkZCBhZGFjdXJzZXMtY29uZmlnIHRvIHRoZSBBZGE5NSBpbnN0YWxsLgorICAgICAgICAgICsgbW9kaWZ5ICB0aWMgIC1mIG9wdGlvbiB0byBmb3JtYXQgc3BhY2VzIGFzIFxzIHRvIHByZXZlbnQgdGhlbQorICAgICAgICAgICAgZnJvbSAgYmVpbmcgIGxvc3QgIHdoZW4gIHRoYXQgIGlzICByZWFkICBiYWNrICBpbiB1bmZvcm1hdHRlZAorICAgICAgICAgICAgc3RyaW5ncy4KKyAgICAgICAgICArIFRoZSB0YWNrIHByb2dyYW0gaXMgbm93IGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJvbSBuY3Vyc2VzLgorICAgICAqIHRlcm1pbmFsIGRhdGFiYXNlCisgICAgICAgICAgKyBhZGRlZCBlbnRyaWVzOgorICAgICAgICAgICAgICAgbyBFdGVybS0yNTZjb2xvciwgRXRlcm0tODhjb2xvciBhbmQgcnh2dC04OGNvbG9yCisgICAgICAgICAgICAgICBvIGF0ZXJtCisgICAgICAgICAgICAgICBvIGtvbnNvbGUtMjU2Y29sb3IKKyAgICAgICAgICAgICAgIG8gbXJ4dnQKKyAgICAgICAgICAgICAgIG8gc2NyZWVuLm1sdGVybQorICAgICAgICAgICAgICAgbyBzY3JlZW4ucnh2dAorICAgICAgICAgICAgICAgbyB0ZXJhdGVybTQuNTkgIGlzIG5vdyB0aGUgcHJpbWFyeSBwcmltYXJ5IHRlcmF0ZXJtIGVudHJ5LAorICAgICAgICAgICAgICAgICByZW5hbWVkIG9yaWdpbmFsIHRvIHRlcmF0ZXJtMi4zCisgICAgICAgICAgICAgICBvIDl0ZXJtIHRlcm1pbmFsCisgICAgICAgICAgICAgICBvIE5ld2J1cnkgRGF0YSBlbnRyaWVzCisgICAgICAgICAgKyB1cGRhdGVkL2ltcHJvdmVkIGVudHJpZXM6CisgICAgICAgICAgICAgICBvIGdub21lIHRvIHZlcnNpb24gMi4yMi4zCisgICAgICAgICAgICAgICBvIGgxOSwgejEwMAorICAgICAgICAgICAgICAgbyBrb25zb2xlIHRvIHZlcnNpb24gMS42LjYKKyAgICAgICAgICAgICAgIG8gbWx0ZXJtLCBtbHRlcm0rcGNma2V5cworICAgICAgICAgICAgICAgbyB4dGVybSwgYW5kIGJ1aWxkaW5nLWJsb2NrcyBmb3IgZnVuY3Rpb24ta2V5cyB0byBbM114dGVybQorICAgICAgICAgICAgICAgICBwYXRjaCAjMjMwLgorCisgICBNYWpvciBidWcgZml4ZXM6CisgICAgICogYWRkICAgbG9naWMgICB0byAgIHRpYyAgZm9yICBjYW5jZWxsaW5nICBzdHJpbmdzICBpbiAgdXNlci1kZWZpbmVkCisgICAgICAgY2FwYWJpbGl0aWVzICh0aGlzIGlzIG5lZWRlZCBmb3IgY3VycmVudCBrb25zb2xlIHRlcm1pbmZvIGVudHJ5KS4KKyAgICAgKiBtb2RpZnkgIG1rLTFzdC5hd2sgIHNvIHRoZSBnZW5lcmF0ZWQgbWFrZWZpbGUgcnVsZXMgZm9yIGxpbmtpbmcgb3IKKyAgICAgICBpbnN0YWxsaW5nICBzaGFyZWQgIGxpYnJhcmllcyAgZG8gbm90IGZpcnN0IHJlbW92ZSB0aGUgbGlicmFyeSwgaW4KKyAgICAgICBjYXNlIGl0IGlzIGluIHVzZSwgZS5nLiwgbGlibmN1cnNlcy5zbyBieSAvYmluL3NoLgorICAgICAqIGNvcnJlY3QgY2hlY2sgZm9yIG5vdGltZW91dCgpIGluIHdnZXRjaCgpLgorICAgICAqIGZpeCBhIHNpZ24tZXh0ZW5zaW9uIGJ1ZyBpbiBpbmZvY21wJ3MgcmVwYWlyX2Fjc2MoKSBmdW5jdGlvbi4KKyAgICAgKiBjaGFuZ2Ugd2lubnN0cigpIHRvIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICAgKiBtYWtlIEFkYTk1IGRlbW9fcGFuZWxzKCkgZXhhbXBsZSB3b3JrLgorICAgICAqIGZpeCBmb3IgYWRkaW5nIGEgbm9uLXNwYWNpbmcgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorICAgICAqIGZpbGwgICBpbiAgIGV4dGVuZGVkLWNvbG9yICAgcGFpciAgIHRvICAgbWFrZSAgIGNvbG9ycyAgIHdvcmsgIGZvcgorICAgICAgIHdpZGUtY2hhcmFjdGVycyB1c2luZyBleHRlbmRlZC1jb2xvcnMuCisgICAgICogaW1wcm92ZSAgcmVmcmVzaCAgb2YgIHdpbmRvdyAgb24gIHRvcCAgb2YgbXVsdGktY29sdW1uIGNoYXJhY3RlcnMsCisgICAgICAgdGFraW5nICAgaW50byAgIGFjY291bnQgIHNwbGl0ICBjaGFyYWN0ZXJzICBvbiAgbGVmdC9yaWdodCAgd2luZG93CisgICAgICAgYm91bmRhcmllcy4KKyAgICAgKiBtb2RpZnkgIHdpbl93Y2huc3RyKCkgIHRvIGVuc3VyZSB0aGF0IG9ubHkgYSBiYXNlIGNlbGwgaXMgcmV0dXJuZWQKKyAgICAgICBmb3IgZWFjaCBtdWx0aS1jb2x1bW4gY2hhcmFjdGVyLgorICAgICAqIGltcHJvdmUgd2FkZGNoKCkgYW5kIHdpbnNjaCgpIGhhbmRsaW5nIG9mIEVJTFNFUSBmcm9tIG1icnRvd2MoKSBieQorICAgICAgIHVzaW5nICB1bmN0cmwoKSAgdG8gIGRpc3BsYXkgIGlsbGVnYWwgIGJ5dGVzIHJhdGhlciB0aGFuIHRyeWluZyB0bworICAgICAgIGFwcGVuZCBmdXJ0aGVyIGJ5dGVzIHRvIG1ha2UgdXAgYSB2YWxpZCBzZXF1ZW5jZS4KKyAgICAgKiByZXN0b3JlIGN1cnNfc2V0KCkgc3RhdGUgYWZ0ZXIgZW5kd2luKCkvcmVmcmVzaCgpCisgICAgICogbW9kaWZ5ICBrZXluYW1lKCkgdG8gdXNlICJeWCIgZm9ybSBvbmx5IGlmIG1ldGEoKSBoYXMgYmVlbiBjYWxsZWQsCisgICAgICAgb3IgIGlmICBrZXluYW1lKCkgaXMgY2FsbGVkIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGN1cnNlcywgZS5nLiwgdmlhCisgICAgICAgaW5pdHNjcigpIG9yIG5ld3Rlcm0oKS4KKyAgICAgKiBtb2RpZnkgIHVuY3RybCgpIHRvIGNoZWNrIGNvZGVzIGluIDEyOC0yNTUgcmFuZ2UgdmVyc3VzIGlzcHJpbnQoKS4KKyAgICAgICBJZiAgdGhleSAgYXJlIG5vdCBwcmludGFibGUsIGFuZCBsb2NhbGUgd2FzIHNldCwgdXNlIGEgIk0tIiBvciAifiIKKyAgICAgICBzZXF1ZW5jZS4KKyAgICAgKiBpbXByb3ZlICByZXNpemV0ZXJtKCkgIGJ5ICBtb3ZpbmcgcmlwcGVkLW9mZiBsaW5lcywgYW5kIHJlcGFpbnRpbmcKKyAgICAgICB0aGUgc29mdC1rZXlzLgorICAgICAqIG1vZGlmeSAgZm9ybSAgbGlicmFyeSB0byBhY2NlcHQgY29udHJvbCBjaGFyYWN0ZXJzIHN1Y2ggYXMgbmV3bGluZQorICAgICAgIGluIHNldF9maWVsZF9idWZmZXIoKSwgd2hpY2ggaXMgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMuCisgICAgICogdXNlICBOQ1VSU0VTX01PVVNFX01BU0soKSBpbiBkZWZpbml0aW9uIG9mIEJVVFRPTl9SRUxFQVNFKCksIGV0Yy4sCisgICAgICAgdG8gICBtYWtlICAgdGhvc2UgICB3b3JrICAgcHJvcGVybHkgIHdpdGggIHRoZSAgLS1lbmFibGUtZXh0LW1vdXNlCisgICAgICAgY29uZmlndXJhdGlvbgorICAgICAqIGNvcnJlY3QgIHNvbWUgIGZ1bmN0aW9ucyAgaW4gQWRhOTUgYmluZGluZyB3aGljaCB3ZXJlIHVzaW5nIHJldHVybgorICAgICAgIHZhbHVlIGZyb20gQyB3aGVyZSBub25lIHdhcyByZXR1cm5lZC4KKyAgICAgKiByZXZpZXdlZC9maXhlZCBpc3N1ZXMgcmVwb3J0ZWQgYnkgQ292ZXJpdHkgYW5kIEtsb2N3b3JrIHRvb2xzLgorCisgICBQb3J0YWJpbGl0eToKKyAgICAgKiBjb25maWd1cmUgc2NyaXB0OgorICAgICAgICAgICsgbmV3IG9wdGlvbnM6CisKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLWJpZy1zdHJpbmdzCisgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCAgd2hldGhlciBzdGF0aWMgc3RyaW5nIHRhYmxlcyBhcmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgYXMgICBzaW5nbGUgICBsYXJnZSAgc3RyaW5ncyAgKHRvICBpbXByb3ZlICBzdGFydHVwCisgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UpLCBvciBhcyBhcnJheSBvZiBpbmRpdmlkdWFsIHN0cmluZ3MuCisKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLXJlbGluaworICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgICB3aGV0aGVyICBzaGFyZWQgIGxpYnJhcmllcyAgYXJlICByZWxpbmtlZAorICAgICAgICAgICAgICAgICAgICAgIChkdXJpbmcgaW5zdGFsbCkgd2hlbiBycGF0aCBpcyBlbmFibGVkLgorCisgICAgICAgICAgICAgIC0tZGlzYWJsZS10aWMtZGVwZW5kcworICAgICAgICAgICAgICAgICAgICAgIG1ha2UgICBleHBsaWNpdCAgd2hldGhlciAgdGljICBsaWJyYXJ5ICBkZXBlbmRzICBvbgorICAgICAgICAgICAgICAgICAgICAgIG5jdXJzZXMvbmN1cnNlc3cgbGlicmFyeS4KKworICAgICAgICAgICAgICAtLWVuYWJsZS1taXhlZC1jYXNlCisgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgICB0aGUgIGNvbmZpZ3VyZSAgc2NyaXB0J3MgIGNoZWNrICBpZiAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSAgIHN1cHBvcnRzICBtaXhlZC1jYXNlICBmaWxlbmFtZXMuICBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzICBvbmUgIHRvICBjb250cm9sICBob3cgdGhlIHRlcm1pbmFsIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgbWFwcyB0byB0aGUgZmlsZXN5c3RlbS4gRm9yIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90CisgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCAgIG1peGVkLWNhc2UsICB0aGUgIGxpYnJhcnkgIHVzZXMgIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgICAgMi1jaGFyYWN0ZXIgKGhleGFkZWNpbWFsKSBjb2RlcyBmb3IgdGhlIGxvd2VyLWxldmVsCisgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZpbGVzeXN0ZW0gdGVybWluZm8gZGF0YWJhc2UKKworICAgICAgICAgICAgICAtLWVuYWJsZS1yZWVudHJhbnQKKyAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgIGEgIGRpZmZlcmVudCAgZmxhdm9yIG9mIHRoZSBuY3Vyc2VzIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgICAobmN1cnNlc3QpICB3aGljaCAgaW1wcm92ZXMgIHJlZW50cmFudCAgdXNlICBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5ICBieSAgcmVkdWNpbmcgIGdsb2JhbCAgYW5kIHN0YXRpYyB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAoc2VlICB0aGUgICItLXdpdGgtcHRocmVhZCIgb3B0aW9uIGZvciB0aGUgdGhyZWFkZWQKKyAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0KS4KKworICAgICAgICAgICAgICAtLWVuYWJsZS13ZWFrLXN5bWJvbHMKKyAgICAgICAgICAgICAgICAgICAgICB1c2UgIHdlYWstc3ltYm9scyAgZm9yICBsaW5raW5nIHRvIHRoZSBQT1NJWCB0aHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LCAgYW5kICB1c2UgIHRoZSBzYW1lIHNvbmFtZSBmb3IgdGhlIG5jdXJzZXMKKyAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgIGxpYnJhcnkgIGFzIHRoZSBub3JtYWwgbGlicmFyeSAoY2F2ZWF0OiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBBQkkgaXMgZm9yIHRoZSB0aHJlYWRlZCBsaWJyYXJ5LCB3aGljaCBtYWtlcyBnbG9iYWwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhIGFjY2Vzc2VkIHZpYSBmdW5jdGlvbnMpLgorCisgICAgICAgICAgICAgIC0td2l0aC1wdGhyZWFkCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgIHdpdGggIHRoZSAgUE9TSVggdGhyZWFkIGxpYnJhcnkgKHRlc3RlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgQUlYLCAgIExpbnV4LCAgIEZyZWVCU0QsICAgT3BlbkJTRCwgIEhQVVgsICBJUklYNjQsCisgICAgICAgICAgICAgICAgICAgICAgU29sYXJpcywgVHJ1NjQpLgorCisgICAgICAgICAgICAgIC0td2l0aC10aWNsaWIKKyAgICAgICAgICAgICAgICAgICAgICBidWlsZC9pbnN0YWxsICAgdGhlICAgdGljLXN1cHBvcnQgIGZ1bmN0aW9ucyAgaW4gIGEKKyAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBsaWJyYXJ5CisKKyAgICAgICAgICArIGltcHJvdmVkIG9wdGlvbnM6CisKKyAgICAgICAgICAgICAgLS1lbmFibGUtZXh0LWNvbG9ycworICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzIHRoZSB3aWRlLWNoYXJhY3RlciBjb25maWd1cmF0aW9uLgorCisgICAgICAgICAgICAgIC0td2l0aC1jaHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUgIG9wdGlvbiAgdmFsdWUgInVuc2lnbmVkIiBpcyBhbHdheXMgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICB0aGUgICB0eXBlICAgaW4gICBjdXJzZXMuaDsgICBkbyAgIHRoZSAgIHNhbWUgICBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbW1hc2stdC4KKworICAgICAgICAgICAgICAtLXdpdGgtZG1hbGxvYworICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLWZpeCBmb3IgcmVkZWZpbml0aW9uIG9mIHN0cm5kdXAuCisKKyAgICAgICAgICAgICAgLS13aXRoLWhhc2hlZC1kYgorICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdHMgIGEgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBpbnN0YWxsLXByZWZpeCBvZgorICAgICAgICAgICAgICAgICAgICAgIGEgZ2l2ZW4gQmVya2VsZXkgRGF0YWJhc2UuCisKKyAgICAgICAgICAgICAgLS13aXRoLWhhc2hlZC1kYgorICAgICAgICAgICAgICAgICAgICAgIHRoZSAkTElCUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXMgdGhlIHNlYXJjaAorICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZGIgbGlicmFyeS4KKworICAgICAgICAgICAgICAtLXdpdGhvdXQtaGFzaGVkLWRiCisgICAgICAgICAgICAgICAgICAgICAgYXNzdW1lZCB3aGVuICItLWRpc2FibGUtZGF0YWJhc2UiIGlzIHVzZWQuCisKKyAgICAgKiBvdGhlciBjb25maWd1cmUvYnVpbGQgaXNzdWVzOgorICAgICAgICAgICsgYnVpbGQtZml4ZXMgZm9yIEx5bnhPUworICAgICAgICAgICsgbW9kaWZ5ICBzaGFyZWQtbGlicmFyeSAgcnVsZXMgIHRvICBhbGxvdyAgRnJlZUJTRCAgMy54IHRvIHVzZQorICAgICAgICAgICAgcnBhdGguCisgICAgICAgICAgKyBidWlsZC1maXggZm9yIEZyZWVCU0QgImNvbnRlbXBvcmFyeSIgVFRZIGludGVyZmFjZS4KKyAgICAgICAgICArIGJ1aWxkLWZpeGVzIGZvciBBSVggd2l0aCBsaWJ0b29sLgorICAgICAgICAgICsgYnVpbGQtZml4ZXMgZm9yIERhcndpbiBhbmQgbGlidG9vbC4KKyAgICAgICAgICArIG1vZGlmeSBCZU9TLXNwZWNpZmljIGlmZGVmJ3MgdG8gYnVpbGQgb24gSGFpa3UuCisgICAgICAgICAgKyBjb3JyZWN0ZWQgIGdjYyAgb3B0aW9ucyAgZm9yICBidWlsZGluZyAgc2hhcmVkICBsaWJyYXJpZXMgIG9uCisgICAgICAgICAgICBTb2xhcmlzIGFuZCBJUklYNjQuCisgICAgICAgICAgKyBjaGFuZ2UgIHNoYXJlZC1saWJyYXJ5ICBjb25maWd1cmF0aW9uIGZvciBPcGVuQlNELCBtYWtlIHJwYXRoCisgICAgICAgICAgICB3b3JrLgorICAgICAgICAgICsgYnVpbGQtZml4ZXMgZm9yIHVzaW5nIGxpYnV0ZjgsIGUuZy4sIG9uIE9wZW5CU0QgMy43CisgICAgICAgICAgKyBhZGQgICAiLWUiICBvcHRpb24gIGluICBuY3Vyc2VzL01ha2VmaWxlLmluICB3aGVuICBnZW5lcmF0aW5nCisgICAgICAgICAgICBzb3VyY2UtZmlsZXMgIHRvICBmb3JjZSBlYXJsaWVyIGV4aXQgaWYgdGhlIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICBmYWlscyB1bmV4cGVjdGVkbHkuCisgICAgICAgICAgKyBhZGQgc3VwcG9ydCBmb3Igc2hhcmVkIGxpYnJhcmllcyBmb3IgUU5YLgorICAgICAgICAgICsgY2hhbmdlICBkZWxpbWl0ZXIgIGluICBNS2xpYl9nZW4uc2ggZnJvbSAnJScgdG8gJ0AnLCB0byBhdm9pZAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uICBieSAgSUJNIHhsYyB0byAnIycgYXMgcGFydCBvZiBpdHMgZXh0ZW5zaW9ucyB0bworICAgICAgICAgICAgZGlncmFwaHMuCisgICAgICogbGlicmFyeToKKyAgICAgICAgICArIHJld3JpdGUgIHdyYXBwZXIgIGZvciAgd2NydG9tYigpLCAgbWFraW5nIGl0IHdvcmsgb24gU29sYXJpcy4KKyAgICAgICAgICAgIFRoaXMgIGlzICB1c2VkIGluIHRoZSBmb3JtIGxpYnJhcnkgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YKKyAgICAgICAgICAgIHRoZSBidWZmZXIgbmVlZGVkIGJ5IGZpZWxkX2J1ZmZlci4KKyAgICAgICAgICArIGFkZC91c2UgIGNvbmZpZ3VyZSAgc2NyaXB0ICBtYWNybyAgQ0ZfU0lHX0FUT01JQ19ULCAgdXNlICB0aGUKKyAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdHlwZSBmb3IgZGF0YSBtYW5pcHVsYXRlZCBieSBzaWduYWwgaGFuZGxlcnMuCisgICAgICAgICAgKyBzZXQgbG9jYWxlIGluIG1pc2MvbmN1cnNlcy1jb25maWcuaW4gc2luY2UgaXQgdXNlcyBhIHJhbmdlCisgICAgICAgICAgKyBkaXNhYmxlICBHUE0gIG1vdXNlICBzdXBwb3J0ICB3aGVuICAkVEVSTSAgZG9lcyBub3QgaGFwcGVuIHRvCisgICAgICAgICAgICBjb250YWluICAibGludXgiLCAgc2luY2UgIEdwbV9PcGVuKCkgIG5vICBsb25nZXIgIGxpbWl0cyAgaXRzCisgICAgICAgICAgICBhc3NlcnRpb24gIHRvICB0ZXJtaW5hbHMgIHRoYXQgIGl0IG1pZ2h0IGhhbmRsZSwgZS5nLiwgd2l0aGluCisgICAgICAgICAgICAic2NyZWVuIiBpbiB4dGVybS4KKyAgICAgICAgICArIHJlc2V0IG1vdXNlIGZpbGUtZGVzY3JpcHRvciB3aGVuIHVubG9hZGluZyBHUE0gbGlicmFyeS4KKyAgICAgKiB0ZXN0IHByb2dyYW1zOgorICAgICAgICAgICsgdXBkYXRlICB0ZXN0ICBwcm9ncmFtcyB0byBidWlsZC93b3JrIHdpdGggdmFyaW91cyBVTklYIGN1cnNlcworICAgICAgICAgICAgZm9yIGNvbXBhcmlzb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyBvZiBOY3Vyc2VzCisKKyAgIFRoZSBuY3Vyc2VzIHBhY2thZ2UgaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIFNWcjQgKFN5c3RlbSBWIFJlbGVhc2UgNCkKKyAgIGN1cnNlczoKKyAgICAgKiBBbGwgIDI1NyAgb2YgIHRoZSAgU1ZyNCAgY2FsbHMgIGhhdmUgIGJlZW4gIGltcGxlbWVudGVkICAoYW5kICBhcmUKKyAgICAgICBkb2N1bWVudGVkKS4KKyAgICAgKiBGdWxsICBzdXBwb3J0IGZvciBTVnI0IGN1cnNlcyBmZWF0dXJlcyBpbmNsdWRpbmcga2V5Ym9hcmQgbWFwcGluZywKKyAgICAgICBjb2xvciwgICBmb3Jtcy1kcmF3aW5nICAgd2l0aCAgIEFDUyAgIGNoYXJhY3RlcnMsICAgYW5kICBhdXRvbWF0aWMKKyAgICAgICByZWNvZ25pdGlvbiBvZiBrZXlwYWQgYW5kIGZ1bmN0aW9uIGtleXMuCisgICAgICogQW4gIGVtdWxhdGlvbiAgb2YgIHRoZSAgU1ZyNCBwYW5lbHMgbGlicmFyeSwgc3VwcG9ydGluZyBhIHN0YWNrIG9mCisgICAgICAgd2luZG93cyB3aXRoIGJhY2tpbmcgc3RvcmUsIGlzIGluY2x1ZGVkLgorICAgICAqIEFuICBlbXVsYXRpb24gIG9mIHRoZSBTVnI0IG1lbnVzIGxpYnJhcnksIHN1cHBvcnRpbmcgYSB1bmlmb3JtIGJ1dAorICAgICAgIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgbWVudSBwcm9ncmFtbWluZywgaXMgaW5jbHVkZWQuCisgICAgICogQW4gIGVtdWxhdGlvbiBvZiB0aGUgU1ZyNCBmb3JtIGxpYnJhcnksIHN1cHBvcnRpbmcgZGF0YSBjb2xsZWN0aW9uCisgICAgICAgdGhyb3VnaCBvbi1zY3JlZW4gZm9ybXMsIGlzIGluY2x1ZGVkLgorICAgICAqIEJpbmFyeSAgIHRlcm1pbmZvICAgZW50cmllcyAgIGdlbmVyYXRlZCAgIGJ5ICB0aGUgIG5jdXJzZXMgIHRpYygxKQorICAgICAgIGltcGxlbWVudGF0aW9uICBhcmUgIGJpdC1mb3ItYml0LWNvbXBhdGlibGUgIHdpdGggdGhlIGVudHJ5IGZvcm1hdAorICAgICAgIFNWcjQgY3Vyc2VzIHVzZXMuCisgICAgICogVGhlIHV0aWxpdGllcyBoYXZlIG9wdGlvbnMgdG8gYWxsb3cgeW91IHRvIGZpbHRlciB0ZXJtaW5mbyBlbnRyaWVzCisgICAgICAgZm9yICB1c2UgIHdpdGggIGxlc3MgIGNhcGFibGUgY3Vyc2VzL3Rlcm1pbmZvIHZlcnNpb25zIHN1Y2ggYXMgdGhlCisgICAgICAgSFAvVVggYW5kIEFJWCBwb3J0cy4KKworICAgVGhlIG5jdXJzZXMgcGFja2FnZSBhbHNvIGhhcyBtYW55IHVzZWZ1bCBleHRlbnNpb25zIG92ZXIgU1ZyNDoKKyAgICAgKiBUaGUgIEFQSSAgaXMgOC1iaXQgY2xlYW4gYW5kIGJhc2UtbGV2ZWwgY29uZm9ybWFudCB3aXRoIHRoZSBYL09QRU4KKyAgICAgICBjdXJzZXMgIHNwZWNpZmljYXRpb24sIFhTSSBjdXJzZXMgKHRoYXQgaXMsIGl0IGltcGxlbWVudHMgYWxsIEJBU0UKKyAgICAgICBsZXZlbCAgZmVhdHVyZXMsICBhbmQgIG1vc3QgIEVYVEVOREVEICBmZWF0dXJlcykuIEl0IGluY2x1ZGVzIG1hbnkKKyAgICAgICBmdW5jdGlvbiBjYWxscyBub3Qgc3VwcG9ydGVkIHVuZGVyIFNWcjQgY3Vyc2VzIChidXQgcG9ydGFiaWxpdHkgb2YKKyAgICAgICBhbGwgY2FsbHMgaXMgZG9jdW1lbnRlZCBzbyB5b3UgY2FuIHVzZSB0aGUgU1ZyNCBzdWJzZXQgb25seSkuCisgICAgICogVW5saWtlICBTVnIzIGN1cnNlcywgbmN1cnNlcyBjYW4gd3JpdGUgdG8gdGhlIHJpZ2h0bW9zdC1ib3R0b21tb3N0CisgICAgICAgY29ybmVyICBvZiAgdGhlICBzY3JlZW4gIGlmICB5b3VyIHRlcm1pbmFsIGhhcyBhbiBpbnNlcnQtY2hhcmFjdGVyCisgICAgICAgY2FwYWJpbGl0eS4KKyAgICAgKiBBZGE5NSBhbmQgQysrIGJpbmRpbmdzLgorICAgICAqIFN1cHBvcnQgIGZvciBtb3VzZSBldmVudCByZXBvcnRpbmcgd2l0aCBYIFdpbmRvdyB4dGVybSBhbmQgRnJlZUJTRAorICAgICAgIGFuZCBPUy8yIGNvbnNvbGUgd2luZG93cy4KKyAgICAgKiBFeHRlbmRlZCBtb3VzZSBzdXBwb3J0IHZpYSBBbGVzc2FuZHJvIFJ1YmluaSdzIGdwbSBwYWNrYWdlLgorICAgICAqIFRoZSAgZnVuY3Rpb24gIHdyZXNpemUoKSAgYWxsb3dzIHlvdSB0byByZXNpemUgd2luZG93cywgcHJlc2VydmluZworICAgICAgIHRoZWlyIGRhdGEuCisgICAgICogVGhlIGZ1bmN0aW9uIHVzZV9kZWZhdWx0X2NvbG9ycygpIGFsbG93cyB5b3UgdG8gdXNlIHRoZSB0ZXJtaW5hbCdzCisgICAgICAgZGVmYXVsdCBjb2xvcnMgZm9yIHRoZSBkZWZhdWx0IGNvbG9yIHBhaXIsIGFjaGlldmluZyB0aGUgZWZmZWN0IG9mCisgICAgICAgdHJhbnNwYXJlbnQgY29sb3JzLgorICAgICAqIFRoZSBmdW5jdGlvbnMga2V5b2soKSBhbmQgZGVmaW5lX2tleSgpIGFsbG93IHlvdSB0byBiZXR0ZXIgY29udHJvbAorICAgICAgIHRoZSAgdXNlICBvZiBmdW5jdGlvbiBrZXlzLCBlLmcuLCBkaXNhYmxpbmcgdGhlIG5jdXJzZXMgS0VZX01PVVNFLAorICAgICAgIG9yICBieSAgZGVmaW5pbmcgIG1vcmUgdGhhbiBvbmUgY29udHJvbCBzZXF1ZW5jZSB0byBtYXAgdG8gYSBnaXZlbgorICAgICAgIGtleSBjb2RlLgorICAgICAqIFN1cHBvcnQgIGZvciAgMjU2LWNvbG9yICB0ZXJtaW5hbHMsICBzdWNoICBhcyAgbW9kZXJuICB4dGVybSwgd2hlbgorICAgICAgIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIC0tZW5hYmxlLWV4dC1jb2xvcnMgb3B0aW9uLgorICAgICAqIFN1cHBvcnQgZm9yIDE2LWNvbG9yIHRlcm1pbmFscywgc3VjaCBhcyBhaXh0ZXJtIGFuZCBtb2Rlcm4geHRlcm0uCisgICAgICogQmV0dGVyICBjdXJzb3ItbW92ZW1lbnQgIG9wdGltaXphdGlvbi4gIFRoZSBwYWNrYWdlIG5vdyBmZWF0dXJlcyBhCisgICAgICAgY3Vyc29yLWxvY2FsLW1vdmVtZW50IGNvbXB1dGF0aW9uIG1vcmUgZWZmaWNpZW50IHRoYW4gZWl0aGVyIEJTRCdzCisgICAgICAgb3IgU3lzdGVtIFYncy4KKyAgICAgKiBTdXBlciAgIGhhcmR3YXJlICAgc2Nyb2xsaW5nICAgc3VwcG9ydC4gICBUaGUgIHNjcmVlbi11cGRhdGUgIGNvZGUKKyAgICAgICBpbmNvcnBvcmF0ZXMgIGEgbm92ZWwsIHNpbXBsZSwgYW5kIGNoZWFwIGFsZ29yaXRobSB0aGF0IGVuYWJsZXMgaXQKKyAgICAgICB0byAgbWFrZSAgb3B0aW1hbCAgdXNlICBvZiBoYXJkd2FyZSBzY3JvbGxpbmcsIGxpbmUtaW5zZXJ0aW9uLCBhbmQKKyAgICAgICBsaW5lLWRlbGV0aW9uICBmb3IgIHNjcmVlbi1saW5lICBtb3ZlbWVudHMuIFRoaXMgYWxnb3JpdGhtIGlzIG1vcmUKKyAgICAgICBwb3dlcmZ1bCB0aGFuIHRoZSA0LjRCU0QgY3Vyc2VzIHF1aWNrY2goKSByb3V0aW5lLgorICAgICAqIFJlYWwgIHN1cHBvcnQgIGZvciAgdGVybWluYWxzICB3aXRoICB0aGUgIG1hZ2ljLWNvb2tpZSBnbGl0Y2guIFRoZQorICAgICAgIHNjcmVlbi11cGRhdGUgIGNvZGUgIHdpbGwgIHJlZnJhaW4gZnJvbSBkcmF3aW5nIGEgaGlnaGxpZ2h0IGlmIHRoZQorICAgICAgIG1hZ2ljLSAgIGNvb2tpZSAgdW5hdHRyaWJ1dGVkICBzcGFjZXMgIHJlcXVpcmVkICBqdXN0ICBiZWZvcmUgIHRoZQorICAgICAgIGJlZ2lubmluZyAgYW5kICBhZnRlciB0aGUgZW5kIHdvdWxkIHN0ZXAgb24gYSBub24tc3BhY2UgY2hhcmFjdGVyLgorICAgICAgIEl0ICB3aWxsICBhdXRvbWF0aWNhbGx5ICBzaGlmdCAgaGlnaGxpZ2h0IGJvdW5kYXJpZXMgd2hlbiBkb2luZyBzbworICAgICAgIHdvdWxkICBtYWtlIGl0IHBvc3NpYmxlIHRvIGRyYXcgdGhlIGhpZ2hsaWdodCB3aXRob3V0IGNoYW5naW5nIHRoZQorICAgICAgIHZpc3VhbCBhcHBlYXJhbmNlIG9mIHRoZSBzY3JlZW4uCisgICAgICogSXQgIGlzICBwb3NzaWJsZSB0byBnZW5lcmF0ZSB0aGUgbGlicmFyeSB3aXRoIGEgbGlzdCBvZiBwcmUtbG9hZGVkCisgICAgICAgZmFsbGJhY2sgIGVudHJpZXMgbGlua2VkIHRvIGl0IHNvIHRoYXQgaXQgY2FuIHNlcnZlIHRob3NlIHRlcm1pbmFsCisgICAgICAgdHlwZXMgIGV2ZW4gIHdoZW4gIG5vICB0ZXJtaW5mbyB0cmVlIG9yIHRlcm1jYXAgZmlsZSBpcyBhY2Nlc3NpYmxlCisgICAgICAgKHRoaXMgIG1heSAgYmUgdXNlZnVsIGZvciBzdXBwb3J0IG9mIHNjcmVlbi1vcmllbnRlZCBwcm9ncmFtcyB0aGF0CisgICAgICAgbXVzdCBydW4gaW4gc2luZ2xlLXVzZXIgbW9kZSkuCisgICAgICogVGhlIHRpYygxKS9jYXB0b2luZm8gdXRpbGl0eSBwcm92aWRlZCB3aXRoIG5jdXJzZXMgaGFzIHRoZSBhYmlsaXR5CisgICAgICAgdG8gIHRyYW5zbGF0ZSBtYW55IHRlcm1jYXBzIGZyb20gdGhlIFhFTklYLCBJQk0gYW5kIEFUJlQgZXh0ZW5zaW9uCisgICAgICAgc2V0cy4KKyAgICAgKiBBIEJTRC1saWtlIHRzZXQoMSkgdXRpbGl0eSBpcyBwcm92aWRlZC4KKyAgICAgKiBUaGUgbmN1cnNlcyBsaWJyYXJ5IGFuZCB1dGlsaXRpZXMgd2lsbCBhdXRvbWF0aWNhbGx5IHJlYWQgdGVybWluZm8KKyAgICAgICBlbnRyaWVzICBmcm9tICAkSE9NRS8udGVybWluZm8gIGlmICBpdCBleGlzdHMsIGFuZCBjb21waWxlIHRvIHRoYXQKKyAgICAgICBkaXJlY3RvcnkgIGlmICBpdCAgZXhpc3RzICBhbmQgdGhlIHVzZXIgaGFzIG5vIHdyaXRlIGFjY2VzcyB0byB0aGUKKyAgICAgICBzeXN0ZW0gIGRpcmVjdG9yeS4gIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBlYXNpZXIgZm9yIHVzZXJzIHRvIGhhdmUKKyAgICAgICBwZXJzb25hbCAgdGVybWluZm8gIGVudHJpZXMgd2l0aG91dCBnaXZpbmcgdXAgYWNjZXNzIHRvIHRoZSBzeXN0ZW0KKyAgICAgICB0ZXJtaW5mbyBkaXJlY3RvcnkuCisgICAgICogWW91ICBtYXkgIHNwZWNpZnkgIGEgIHBhdGggIG9mICBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGNvbXBpbGVkCisgICAgICAgZGVzY3JpcHRpb25zICB3aXRoICB0aGUgIGVudmlyb25tZW50ICB2YXJpYWJsZSBURVJNSU5GT19ESVJTICh0aGlzCisgICAgICAgZ2VuZXJhbGl6ZXMgIHRoZSAgZmVhdHVyZSAgcHJvdmlkZWQgYnkgVEVSTUlORk8gdW5kZXIgc3RvY2sgU3lzdGVtCisgICAgICAgVi4pCisgICAgICogSW4gIHRlcm1pbmZvICBzb3VyY2UgZmlsZXMsIHVzZSBjYXBhYmlsaXRpZXMgbWF5IHJlZmVyIG5vdCBqdXN0IHRvCisgICAgICAgb3RoZXIgZW50cmllcyBpbiB0aGUgc2FtZSBzb3VyY2UgZmlsZSAoYXMgaW4gU3lzdGVtIFYpIGJ1dCBhbHNvIHRvCisgICAgICAgY29tcGlsZWQgIGVudHJpZXMgIGluICBlaXRoZXIgdGhlIHN5c3RlbSB0ZXJtaW5mbyBkaXJlY3Rvcnkgb3IgdGhlCisgICAgICAgdXNlcidzICRIT01FLy50ZXJtaW5mbyBkaXJlY3RvcnkuCisgICAgICogQSAgc2NyaXB0ICAoY2FwY29udmVydCkgIGlzICBwcm92aWRlZCB0byBoZWxwIEJTRCB1c2VycyB0cmFuc2l0aW9uCisgICAgICAgZnJvbSAgdGVybWNhcCB0byB0ZXJtaW5mby4gSXQgZ2F0aGVycyB0aGUgaW5mb3JtYXRpb24gaW4gYSBURVJNQ0FQCisgICAgICAgZW52aXJvbm1lbnQgIHZhcmlhYmxlICBhbmQvb3IgIGEgfi8udGVybWNhcCBsb2NhbCBlbnRyaWVzIGZpbGUgYW5kCisgICAgICAgY29udmVydHMgICBpdCAgIHRvICAgYW4gICBlcXVpdmFsZW50ICBsb2NhbCAgdGVybWluZm8gIHRyZWUgIHVuZGVyCisgICAgICAgJEhPTUUvLnRlcm1pbmZvLgorICAgICAqIEF1dG9tYXRpYyAgZmFsbGJhY2sgIHRvICB0aGUgIC9ldGMvdGVybWNhcCBmaWxlIGNhbiBiZSBjb21waWxlZCBpbgorICAgICAgIHdoZW4gIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBidWlsZCBhIHRlcm1pbmZvIHRyZWUuIFRoaXMgZmVhdHVyZSBpcworICAgICAgIG5laXRoZXIgIGZhc3QgIG5vciBjaGVhcCwgeW91IGRvbid0IHdhbnQgdG8gdXNlIGl0IHVubGVzcyB5b3UgaGF2ZQorICAgICAgIHRvLCBidXQgaXQncyB0aGVyZS4KKyAgICAgKiBUaGUgIHRhYmxlLW9mLWVudHJpZXMgIHV0aWxpdHkgIHRvZSBtYWtlcyBpdCBlYXN5IGZvciB1c2VycyB0byBzZWUKKyAgICAgICBleGFjdGx5IHdoYXQgdGVybWluYWwgdHlwZXMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLgorICAgICAqIFRoZSBsaWJyYXJ5IG1lZXRzIHRoZSBYU0kgcmVxdWlyZW1lbnQgdGhhdCBldmVyeSBtYWNybyBlbnRyeSBwb2ludAorICAgICAgIGhhdmUgIGEgIGNvcnJlc3BvbmRpbmcgIGZ1bmN0aW9uICB3aGljaCBtYXkgYmUgbGlua2VkIChhbmQgd2lsbCBiZQorICAgICAgIHByb3RvdHlwZS1jaGVja2VkKSAgaWYgIHRoZSAgbWFjcm8gIGRlZmluaXRpb24gIGlzICBkaXNhYmxlZCAgd2l0aAorICAgICAgICN1bmRlZi4KKyAgICAgKiBBbiAgSFRNTCAgIkludHJvZHVjdGlvbiAgdG8gIFByb2dyYW1taW5nICB3aXRoICBOQ1VSU0VTIiAgZG9jdW1lbnQKKyAgICAgICBwcm92aWRlcyAgYSAgbmFycmF0aXZlICBpbnRyb2R1Y3Rpb24gIHRvICB0aGUgIGN1cnNlcyAgcHJvZ3JhbW1pbmcKKyAgICAgICBpbnRlcmZhY2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgb2YgdGhlIFBhY2thZ2UKKworICAgTnVtZXJvdXMgYnVncyBwcmVzZW50IGluIGVhcmxpZXIgdmVyc2lvbnMgaGF2ZSBiZWVuIGZpeGVkOyB0aGUgbGlicmFyeQorICAgaXMgIGZhciAgbW9yZSAgcmVsaWFibGUgIHRoYW4gIGl0ICB1c2VkIHRvIGJlLiBCb3VuZHMgY2hlY2tpbmcgaW4gbWFueQorICAgYGRhbmdlcm91cycgIGVudHJ5IHBvaW50cyBoYXMgYmVlbiBpbXByb3ZlZC4gVGhlIGNvZGUgaXMgbm93IHR5cGUtc2FmZQorICAgYWNjb3JkaW5nICB0byBnY2MgLVdhbGwuIFRoZSBsaWJyYXJ5IGhhcyBiZWVuIGNoZWNrZWQgZm9yIG1hbGxvYyBsZWFrcworICAgYW5kIGFyZW5hIGNvcnJ1cHRpb24gYnkgdGhlIFB1cmlmeSBtZW1vcnktYWxsb2NhdGlvbiB0ZXN0ZXIuCisKKyAgIFRoZSAgbmN1cnNlcyAgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMKKyAgIGluY2x1ZGluZyAodmVyc2lvbnMgc3RhcnRpbmcgd2l0aCB0aG9zZSBub3RlZCk6CisKKyAgIGNkaworICAgICAgICAgIEN1cnNlcyBEZXZlbG9wbWVudCBLaXQKKyAgICAgICAgICBbNF1odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvY2RrLworICAgICAgICAgIFs1XWh0dHA6Ly93d3cudmV4dXMuY2EvcHJvZHVjdHMvQ0RLLworCisgICBkZWQKKyAgICAgICAgICBkaXJlY3RvcnktZWRpdG9yCisgICAgICAgICAgWzZdaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RlZC8KKworICAgZGlhbG9nCisgICAgICAgICAgdGhlICB1bmRlcmx5aW5nICBhcHBsaWNhdGlvbiB1c2VkIGluIFNsYWNrd2FyZSdzIHNldHVwLCBhbmQgdGhlCisgICAgICAgICAgYmFzaXMgZm9yIHNpbWlsYXIgYXBwbGljYXRpb25zIG9uIEdOVS9MaW51eC4KKyAgICAgICAgICBbN11odHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlhbG9nLworCisgICBseW54CisgICAgICAgICAgdGhlIGNoYXJhY3Rlci1zY3JlZW4gV1dXIGJyb3dzZXIKKyAgICAgICAgICBbOF1odHRwOi8vbHlueC5pc2Mub3JnL3JlbGVhc2UvCisKKyAgIE1pZG5pZ2h0IENvbW1hbmRlcgorICAgICAgICAgIGZpbGUgbWFuYWdlcgorICAgICAgICAgIFs5XWh0dHA6Ly93d3cuaWJpYmxpby5vcmcvbWMvCisKKyAgIG11dHQKKyAgICAgICAgICBtYWlsIHV0aWxpdHkKKyAgICAgICAgICBbMTBdaHR0cDovL3d3dy5tdXR0Lm9yZy8KKworICAgbmNmdHAKKyAgICAgICAgICBmaWxlLXRyYW5zZmVyIHV0aWxpdHkKKyAgICAgICAgICBbMTFdaHR0cDovL3d3dy5uY2Z0cC5jb20vCisKKyAgIG52aQorICAgICAgICAgIE5ldyB2aSB2ZXJzaW9ucyAxLjUwIGFyZSBhYmxlIHRvIHVzZSBuY3Vyc2VzIHZlcnNpb25zIDEuOS43IGFuZAorICAgICAgICAgIGxhdGVyLgorICAgICAgICAgIFsxMl1odHRwOi8vd3d3LmJvc3RpYy5jb20vdmkvCisKKyAgIHBpbmZvCisgICAgICAgICAgTHlueC1saWtlIGluZm8gYnJvd3Nlci4KKyAgICAgICAgICBbMTNdaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9waW5mby8KKworICAgdGluCisgICAgICAgICAgbmV3c3JlYWRlciwgc3VwcG9ydGluZyBjb2xvciwgTUlNRSBbMTRdaHR0cDovL3d3dy50aW4ub3JnLworCisgICBhcyB3ZWxsIGFzIHNvbWUgdGhhdCB1c2UgbmN1cnNlcyBmb3IgdGhlIHRlcm1pbmZvIHN1cHBvcnQgYWxvbmU6CisKKyAgIG1pbmljb20KKyAgICAgICAgICB0ZXJtaW5hbCBlbXVsYXRvcgorICAgICAgICAgIFsxNV1odHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvbWluaWNvbS8KKworICAgdmlsZQorICAgICAgICAgIHZpLWxpa2UtZW1hY3MKKyAgICAgICAgICBbMTZdaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L3ZpbGUvCisKKyAgIFRoZSAgbmN1cnNlcyAgZGlzdHJpYnV0aW9uICBpbmNsdWRlcyAgYSAgc2VsZWN0aW9uICBvZiAgdGVzdCAgcHJvZ3JhbXMKKyAgIChpbmNsdWRpbmcgYSBmZXcgZ2FtZXMpLgorCitXaG8ncyBXaG8gYW5kIFdoYXQncyBXaGF0CisKKyAgIFpleWQgIEJlbi1IYWxpbSBzdGFydGVkIGl0IGZyb20gYSBwcmV2aW91cyBwYWNrYWdlIHBjdXJzZXMsIHdyaXR0ZW4gYnkKKyAgIFBhdmVsICBDdXJ0aXMuICBFcmljICBTLiBSYXltb25kIGNvbnRpbnVlZCBkZXZlbG9wbWVudC4gSvxyZ2VuIFBmZWlmZXIKKyAgIHdyb3RlICBtb3N0IG9mIHRoZSBmb3JtIGFuZCBtZW51IGxpYnJhcmllcy4gT25nb2luZyB3b3JrIGlzIGJlaW5nIGRvbmUKKyAgIGJ5ICBbMTddVGhvbWFzICBEaWNrZXkuICBUaG9tYXMgIERpY2tleSBhY3RzIGFzIHRoZSBtYWludGFpbmVyIGZvciB0aGUKKyAgIEZyZWUgIFNvZnR3YXJlICBGb3VuZGF0aW9uLCAgd2hpY2ggIGhvbGRzICB0aGUgIGNvcHlyaWdodCAgb24gbmN1cnNlcy4KKyAgIENvbnRhY3QgdGhlIGN1cnJlbnQgbWFpbnRhaW5lcnMgYXQgWzE4XWJ1Zy1uY3Vyc2VzQGdudS5vcmcuCisKKyAgIFRvICAgam9pbiAgIHRoZSAgIG5jdXJzZXMgICBtYWlsaW5nICAgbGlzdCwgICBwbGVhc2UgIHdyaXRlICBlbWFpbCAgdG8KKyAgIGJ1Zy1uY3Vyc2VzLXJlcXVlc3RAZ251Lm9yZyBjb250YWluaW5nIHRoZSBsaW5lOgorICAgICAgICAgICAgIHN1YnNjcmliZSA8bmFtZT5APGhvc3QuZG9tYWluPgorCisgICBUaGlzIGxpc3QgaXMgb3BlbiB0byBhbnlvbmUgaW50ZXJlc3RlZCBpbiBoZWxwaW5nIHdpdGggdGhlIGRldmVsb3BtZW50CisgICBhbmQgdGVzdGluZyBvZiB0aGlzIHBhY2thZ2UuCisKKyAgIEJldGEgIHZlcnNpb25zICBvZiBuY3Vyc2VzIGFuZCBwYXRjaGVzIHRvIHRoZSBjdXJyZW50IHJlbGVhc2UgYXJlIG1hZGUKKyAgIGF2YWlsYWJsZSBhdCBbMTldZnRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy8gLgorCitGdXR1cmUgUGxhbnMKKworICAgICAqIEV4dGVuZGVkLWxldmVsICAgWFBHNCAgIGNvbmZvcm1hbmNlLCAgIHdpdGggICBpbnRlcm5hdGlvbmFsaXphdGlvbgorICAgICAgIHN1cHBvcnQuCisgICAgICogUG9ydHMgdG8gbW9yZSBzeXN0ZW1zLCBpbmNsdWRpbmcgRE9TIGFuZCBXaW5kb3dzLgorCisgICBXZSAgbmVlZCAgcGVvcGxlIHRvIGhlbHAgd2l0aCB0aGVzZSBwcm9qZWN0cy4gSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluCisgICB3b3JraW5nIG9uIHRoZW0sIHBsZWFzZSBqb2luIHRoZSBuY3Vyc2VzIGxpc3QuCisKK090aGVyIFJlbGF0ZWQgUmVzb3VyY2VzCisKKyAgIFRoZSAgZGlzdHJpYnV0aW9uICBwcm92aWRlcyAgYSAgbmV3ZXIgIHZlcnNpb24gIG9mIHRoZSB0ZXJtaW5mby1mb3JtYXQKKyAgIHRlcm1pbmFsIGRlc2NyaXB0aW9uIGZpbGUgb25jZSBtYWludGFpbmVkIGJ5IFsyMF1FcmljIFJheW1vbmQgLiBVbmxpa2UKKyAgIHRoZSAgb2xkZXIgIHZlcnNpb24sIHRoZSB0ZXJtY2FwIGFuZCB0ZXJtaW5mbyBkYXRhIGFyZSBwcm92aWRlZCBpbiB0aGUKKyAgIHNhbWUgIGZpbGUsICBhbmQgcHJvdmlkZXMgc2V2ZXJhbCB1c2VyLWRlZmluYWJsZSBleHRlbnNpb25zIGJleW9uZCB0aGUKKyAgIFgvT3BlbiBzcGVjaWZpY2F0aW9uLgorCisgICBZb3UgIGNhbiAgZmluZCAgbG90cyAgb2YgIGluZm9ybWF0aW9uICBvbiAgdGVybWluYWwtcmVsYXRlZCB0b3BpY3Mgbm90CisgICBjb3ZlcmVkIGluIHRoZSB0ZXJtaW5mbyBmaWxlIGF0IFsyMV1SaWNoYXJkIFNodWZvcmQncyBhcmNoaXZlIC4KKworUmVmZXJlbmNlcworCisgICAxLiBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbmN1cnNlcy8KKyAgIDIuIGZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvCisgICAzLiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQveHRlcm0veHRlcm0ubG9nLmh0bWwjeHRlcm1fMjMwCisgICA0LiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvY2RrLworICAgNS4gaHR0cDovL3d3dy52ZXh1cy5jYS9wcm9kdWN0cy9DREsvCisgICA2LiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGVkLworICAgNy4gaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RpYWxvZy8KKyAgIDguIGh0dHA6Ly9seW54LmlzYy5vcmcvcmVsZWFzZS8KKyAgIDkuIGh0dHA6Ly93d3cuaWJpYmxpby5vcmcvbWMvCisgIDEwLiBodHRwOi8vd3d3Lm11dHQub3JnLworICAxMS4gaHR0cDovL3d3dy5uY2Z0cC5jb20vCisgIDEyLiBodHRwOi8vd3d3LmJvc3RpYy5jb20vdmkvCisgIDEzLiBodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL3BpbmZvLworICAxNC4gaHR0cDovL3d3dy50aW4ub3JnLworICAxNS4gaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL21pbmljb20vCisgIDE2LiBodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvdmlsZS8KKyAgMTcuIG1haWx0bzpkaWNrZXlAaW52aXNpYmxlLWlzbGFuZC5uZXQKKyAgMTguIG1haWx0bzpidWctbmN1cnNlc0BnbnUub3JnCisgIDE5LiBmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLworICAyMC4gaHR0cDovL3d3dy5jYXRiLm9yZy9+ZXNyL3Rlcm1pbmZvLworICAyMS4gaHR0cDovL3d3dy5jcy51dGsuZWR1L35zaHVmb3JkL3Rlcm1pbmFsX2luZGV4Lmh0bWwK